home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol045 / actors.ftn < prev    next >
Encoding:
Text File  |  1984-04-29  |  15.2 KB  |  460 lines

  1. C AAPPLI- APPLICABLES FOR ADVENTURERS
  2. C
  3. C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  4. C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  5. C WRITTEN BY R. M. SUPNIK
  6. C
  7. C DECLARATIONS
  8. C
  9.     LOGICAL FUNCTION AAPPLI(RI)
  10.     IMPLICIT INTEGER (A-Z)
  11.     LOGICAL F,MOVETO
  12. C
  13. C PARSER OUTPUT
  14. C
  15.     LOGICAL PRSWON
  16.     COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
  17. C
  18. C GAME STATE
  19. C
  20.     LOGICAL TELFLG
  21.     COMMON /PLAY/ WINNER,HERE,TELFLG
  22. C
  23. C ROOMS
  24. C
  25.     COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200),
  26.     1    RACTIO(200),RVAL(200),RFLAG(200)
  27.     INTEGER RRAND(200)
  28.     EQUIVALENCE (RVAL,RRAND)
  29. C
  30.     COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR,
  31.     1    RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND
  32. C
  33.     COMMON /RINDEX/ WHOUS,LROOM,CELLA
  34.     COMMON /RINDEX/ MTROL,MAZE1    
  35.     COMMON /RINDEX/ MGRAT,MAZ15    
  36.     COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER
  37.     COMMON /RINDEX/ STREA,EGYPT,ECHOR
  38.     COMMON /RINDEX/ TSHAF    
  39.     COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC
  40.     COMMON /RINDEX/ CAROU    
  41.     COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT
  42.     COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL
  43.     COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR
  44.     COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4
  45.     COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER
  46.     COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR
  47.     COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX
  48.     COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE
  49.     COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR
  50.     COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR
  51.     COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL
  52.     COMMON /RINDEX/ CPANT,CPOUT,CPUZZ
  53. C
  54. C EXITS
  55. C
  56.     COMMON /XSRCH/ XMIN,XMAX,XDOWN,XUP,
  57.     1    XNORTH,XSOUTH,XENTER,XEXIT,XEAST,XWEST
  58. C
  59. C OBJECTS
  60. C
  61.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  62.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  63.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  64.     3    OADV(220),OCAN(220),OREAD(220)
  65. C
  66.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  67.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  68.     2    TOOLBT,TURNBT,ONBT
  69.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  70.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  71.     2    TCHBT,VEHBT,SCHBT
  72. C
  73.     COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
  74.     COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
  75.     COMMON /OINDEX/    LEAVE,TROLL,AXE
  76.     COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
  77.     COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
  78.     COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
  79.     COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
  80.     COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
  81.     COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
  82.     COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
  83.     COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
  84.     COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
  85.     COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
  86.     COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
  87.     COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
  88.     COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
  89.     COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
  90.     COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
  91.     COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
  92.     COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
  93.     COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
  94.     COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
  95. C
  96. C CLOCK INTERRUPTS
  97. C
  98.     LOGICAL*1 CFLAG
  99.     COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25)
  100. C
  101.     COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND,
  102.     1    CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG,
  103.     2    CEVGNO,CEVBUC,CEVSPH,CEVEGH,
  104.     3    CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE,
  105.     5    CEVMRS,CEVPIN,CEVINQ,CEVFOL
  106.  
  107. C
  108. C ADVENTURERS
  109. C
  110.     COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
  111.     1    AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
  112. C
  113.     COMMON /AINDEX/ PLAYER,AROBOT,AMASTR
  114. C
  115. C VERBS
  116. C
  117.     COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
  118.     COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
  119.     COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
  120.     COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
  121.     COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
  122.     COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
  123.     COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
  124.     COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
  125.     COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
  126.     COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
  127.     COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
  128.     COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
  129.     COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
  130. C
  131. C FLAGS
  132. C
  133.     LOGICAL*1 TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
  134.     LOGICAL*1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
  135.     LOGICAL*1 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
  136.     LOGICAL*1 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
  137.     LOGICAL*1 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
  138.     LOGICAL*1 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
  139.     LOGICAL*1 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
  140.     LOGICAL*1 FOLLWF,SPELLF,CPOUTF,CPUSHF
  141.     COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
  142.     1    DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
  143.     2    MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
  144.     3    EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
  145.     4    GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
  146.     5    GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
  147.     6    MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
  148.     7    FOLLWF,SPELLF,CPOUTF,CPUSHF
  149.     COMMON /FINDEX/ BTIEF,BINFF
  150.     COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
  151.     COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
  152.     COMMON /FINDEX/ MDIR,MLOC,POLEUF
  153.     COMMON /FINDEX/ QUESNO,NQATT,CORRCT
  154.     COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE
  155. C AAPPLI, PAGE 2
  156. C
  157.     IF(RI.EQ.0) GO TO 10            !IF ZERO, NO APP.
  158.     AAPPLI=.TRUE.                !ASSUME WINS.
  159.     GO TO (1000,2000),RI            !BRANCH ON ADV.
  160.     CALL BUG(11,RI)
  161. C
  162. C COMMON FALSE RETURN.
  163. C
  164. 10    AAPPLI=.FALSE.
  165.     RETURN
  166. C
  167. C A1--    ROBOT.  PROCESS MOST COMMANDS GIVEN TO ROBOT.
  168. C
  169. 1000    IF((PRSA.NE.RAISEW).OR.(PRSO.NE.RCAGE)) GO TO 1200
  170.     CFLAG(CEVSPH)=.FALSE.            !ROBOT RAISED CAGE.
  171.     WINNER=PLAYER                !RESET FOR PLAYER.
  172.     F=MOVETO(CAGER,WINNER)            !MOVE TO NEW ROOM.
  173.     CALL NEWSTA(CAGE,567,CAGER,0,0)        !INSTALL CAGE IN ROOM.
  174.     CALL NEWSTA(ROBOT,0,CAGER,0,0)        !INSTALL ROBOT IN ROOM.
  175.     AROOM(AROBOT)=CAGER            !ALSO MOVE ROBOT/ADV.
  176.     CAGESF=.TRUE.                !CAGE SOLVED.
  177.     OFLAG1(ROBOT)=OFLAG1(ROBOT).AND..NOT.NDSCBT
  178.     OFLAG1(SPHER)=OFLAG1(SPHER).OR.TAKEBT    !RESET FLAGS.
  179.     RETURN
  180. C
  181. 1200    IF((PRSA.NE.DRINKW).AND.(PRSA.NE.EATW)) GO TO 1300
  182.     CALL RSPEAK(568)            !EAT OR DRINK, JOKE.
  183.     RETURN
  184. C
  185. 1300    IF(PRSA.NE.READW) GO TO 1400        !READ,
  186.     CALL RSPEAK(569)            !JOKE.
  187.     RETURN
  188. C
  189. 1400    IF((PRSA.EQ.WALKW).OR.(PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW)
  190.     1 .OR.(PRSA.EQ.PUTW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.THROWW)
  191.     2 .OR.(PRSA.EQ.TURNW).OR.(PRSA.EQ.LEAPW)) GO TO 10
  192.     CALL RSPEAK(570)            !JOKE.
  193.     RETURN
  194. C AAPPLI, PAGE 3
  195. C
  196. C A2--    MASTER.  PROCESS MOST COMMANDS GIVEN TO MASTER.
  197. C
  198. 2000    IF((OFLAG2(QDOOR).AND.OPENBT).NE.0) GO TO 2100
  199.     CALL RSPEAK(783)            !NO MASTER YET.
  200.     RETURN
  201. C
  202. 2100    IF(PRSA.NE.WALKW) GO TO 2200        !WALK?
  203.     I=784                    !ASSUME WONT.
  204.     IF(((HERE.EQ.SCORR).AND.
  205.     1    ((PRSO.EQ.XNORTH).OR.(PRSO.EQ.XENTER))).OR.
  206.     2  ((HERE.EQ.NCORR).AND.
  207.     3    ((PRSO.EQ.XSOUTH).OR.(PRSO.EQ.XENTER))))
  208.     4    I=785                !IF PRISON, CANT.
  209.     CALL RSPEAK(I)
  210.     RETURN
  211. C
  212. 2200    IF((PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW).OR.(PRSA.EQ.PUTW).OR.
  213.     1  (PRSA.EQ.THROWW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.TURNW).OR.
  214.     2  (PRSA.EQ.SPINW).OR.(PRSA.EQ.TRNTOW).OR.(PRSA.EQ.FOLLOW).OR.
  215.     3  (PRSA.EQ.STAYW).OR.(PRSA.EQ.OPENW).OR.(PRSA.EQ.CLOSEW).OR.
  216.     4  (PRSA.EQ.KILLW)) GO TO 10        !MASTER CAN DO.
  217.     CALL RSPEAK(786)            !MASTER CANT DO IT.
  218.     RETURN
  219. C
  220.     END
  221. C THIEFD-    INTERMOVE THIEF DEMON
  222. C
  223. C DECLARATIONS
  224. C
  225.     SUBROUTINE THIEFD
  226.     IMPLICIT INTEGER (A-Z)
  227.     LOGICAL DFLAG,ONCE,PROB,QHERE,QSTILL,LIT,WINNIN
  228. C
  229. C GAME STATE
  230. C
  231.     LOGICAL TELFLG
  232.     COMMON /PLAY/ WINNER,HERE,TELFLG
  233. C
  234.     COMMON /DEBUG/ DBGFLG,PRSFLG
  235. C
  236. C ROOMS
  237. C
  238.     COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200),
  239.     1    RACTIO(200),RVAL(200),RFLAG(200)
  240.     INTEGER RRAND(200)
  241.     EQUIVALENCE (RVAL,RRAND)
  242. C
  243.     COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR,
  244.     1    RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND
  245. C
  246.     COMMON /RINDEX/ WHOUS,LROOM,CELLA
  247.     COMMON /RINDEX/ MTROL,MAZE1    
  248.     COMMON /RINDEX/ MGRAT,MAZ15    
  249.     COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER
  250.     COMMON /RINDEX/ STREA,EGYPT,ECHOR
  251.     COMMON /RINDEX/ TSHAF    
  252.     COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC
  253.     COMMON /RINDEX/ CAROU    
  254.     COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT
  255.     COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL
  256.     COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR
  257.     COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4
  258.     COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER
  259.     COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR
  260.     COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX
  261.     COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE
  262.     COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR
  263.     COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR
  264.     COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL
  265.     COMMON /RINDEX/ CPANT,CPOUT,CPUZZ
  266. C
  267. C OBJECTS
  268. C
  269.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  270.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  271.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  272.     3    OADV(220),OCAN(220),OREAD(220)
  273. C
  274.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  275.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  276.     2    TOOLBT,TURNBT,ONBT
  277.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  278.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  279.     2    TCHBT,VEHBT,SCHBT
  280. C
  281.     COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
  282.     COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
  283.     COMMON /OINDEX/    LEAVE,TROLL,AXE
  284.     COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
  285.     COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
  286.     COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
  287.     COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
  288.     COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
  289.     COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
  290.     COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
  291.     COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
  292.     COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
  293.     COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
  294.     COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
  295.     COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
  296.     COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
  297.     COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
  298.     COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
  299.     COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
  300.     COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
  301.     COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
  302.     COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
  303. C
  304. C VILLAINS AND DEMONS
  305. C
  306.     LOGICAL THFFLG,SWDACT,THFACT
  307.     COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA
  308. C
  309. C FLAGS
  310. C
  311.     LOGICAL*1 TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
  312.     LOGICAL*1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
  313.     LOGICAL*1 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
  314.     LOGICAL*1 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
  315.     LOGICAL*1 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
  316.     LOGICAL*1 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
  317.     LOGICAL*1 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
  318.     LOGICAL*1 FOLLWF,SPELLF,CPOUTF,CPUSHF
  319.     COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
  320.     1    DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
  321.     2    MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
  322.     3    EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
  323.     4    GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
  324.     5    GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
  325.     6    MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
  326.     7    FOLLWF,SPELLF,CPOUTF,CPUSHF
  327.     COMMON /FINDEX/ BTIEF,BINFF
  328.     COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
  329.     COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
  330.     COMMON /FINDEX/ MDIR,MLOC,POLEUF
  331.     COMMON /FINDEX/ QUESNO,NQATT,CORRCT
  332.     COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE
  333. C
  334. C FUNCTIONS AND DATA
  335. C
  336.     QSTILL(R)=(QHERE(STILL,R).OR.(OADV(STILL).EQ.-THIEF))
  337. C THIEFD, PAGE 2
  338. C
  339. D    DFLAG=(PRSFLG.AND."100000).NE.0        !SET UP DETAIL FLAG.
  340.     ONCE=.FALSE.                !INIT FLAG.
  341. 1025    RHERE=OROOM(THIEF)            !VISIBLE POS.
  342.     IF(RHERE.NE.0) THFPOS=RHERE
  343. C
  344.     IF(THFPOS.EQ.HERE) GO TO 1100        !THIEF IN WIN RM?
  345.     IF(THFPOS.NE.TREAS) GO TO 1400        !THIEF NOT IN TREAS?
  346. C
  347. C THIEF IS IN TREASURE ROOM, AND WINNER IS NOT.
  348. C
  349. D    IF(DFLAG) TYPE 10
  350. D10    FORMAT(' THIEFD-- IN TREASURE ROOM')
  351.     IF(RHERE.EQ.0) GO TO 1050        !VISIBLE?
  352.     CALL NEWSTA(THIEF,0,0,0,0)        !YES, VANISH.
  353.     RHERE=0
  354.     IF(QSTILL(TREAS)) CALL NEWSTA(STILL,0,0,THIEF,0)
  355. 1050    I=ROBADV(-THIEF,THFPOS,0,0)            !DROP VALUABLES.
  356.     IF(QHERE(EGG,THFPOS)) OFLAG2(EGG)=OFLAG2(EGG).OR.OPENBT
  357.     GO TO 1700
  358. C
  359. C THIEF AND WINNER IN SAME ROOM.
  360. C
  361. 1100    IF(THFPOS.EQ.TREAS) GO TO 1700        !IF TREAS ROOM, NOTHING.
  362.     IF((RFLAG(THFPOS).AND.RLIGHT).NE.0) GO TO 1400 !NOT IF LIGHT.
  363. D    IF(DFLAG) TYPE 20
  364. D20    FORMAT(' THIEFD-- IN ADV ROOM')
  365.     IF(THFFLG) GO TO 1300            !THIEF ANNOUNCED?
  366.     IF((RHERE.NE.0).OR.PROB(70,70)) GO TO 1150 !IF INVIS AND 30%.
  367.     IF(OCAN(STILL).NE.THIEF) GO TO 1700    !ABORT IF NO STILLETTO.
  368.     CALL NEWSTA(THIEF,583,THFPOS,0,0)    !INSERT THIEF INTO ROOM.
  369.     THFFLG=.TRUE.                !THIEF IS ANNOUNCED.
  370.     RETURN
  371. C
  372. 1150    IF((RHERE.EQ.0).OR.((OFLAG2(THIEF).AND.FITEBT).EQ.0))
  373.     1    GO TO 1200            !IF VISIBLE AND FIGHT.
  374.     IF(WINNIN(THIEF,WINNER)) GO TO 1175    !WINNING?
  375.     CALL NEWSTA(THIEF,584,0,0,0)        !NO, VANISH THIEF.
  376.     OFLAG2(THIEF)=OFLAG2(THIEF).AND. .NOT.FITEBT
  377.     IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
  378.     RETURN
  379. C
  380. 1175    IF(PROB(90,90)) GO TO 1700        !90% CHANCE TO STAY.
  381. C
  382. 1200    IF((RHERE.EQ.0).OR.PROB(70,70)) GO TO 1250 !IF VISIBLE AND 30%
  383.     CALL NEWSTA(THIEF,585,0,0,0)        !VANISH THIEF.
  384.     IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
  385.     RETURN
  386. C
  387. 1300    IF(RHERE.EQ.0) GO TO 1700        !ANNOUNCED.  VISIBLE?
  388. 1250    IF(PROB(70,70)) RETURN            !70% CHANCE TO DO NOTHING.
  389.     THFFLG=.TRUE.
  390.     NR=ROBRM(THFPOS,100,0,0,-THIEF)+ROBADV(WINNER,0,0,-THIEF)
  391.     I=586                    !ROBBED EM.
  392.     IF(RHERE.NE.0) I=588            !WAS HE VISIBLE?
  393.     IF(NR.NE.0) I=I+1            !DID HE GET ANYTHING?
  394.     CALL NEWSTA(THIEF,I,0,0,0)        !VANISH THIEF.
  395.     IF(QSTILL(THFPOS))
  396.     1    CALL NEWSTA(STILL,0,0,THIEF,0)    !RECLAIM STILLETTO.
  397.     IF((NR.NE.0).AND..NOT.LIT(THFPOS)) CALL RSPEAK(406)
  398.     RHERE=0
  399.     GO TO 1700                !ONWARD.
  400. C
  401. C NOT IN ADVENTURERS ROOM.
  402. C
  403. 1400    CALL NEWSTA(THIEF,0,0,0,0)        !VANISH.
  404.     RHERE=0
  405. D    IF(DFLAG) TYPE 30,THFPOS
  406. D30    FORMAT(' THIEFD-- IN ROOM ',I4)
  407.     IF(QSTILL(THFPOS))
  408.     1    CALL NEWSTA(STILL,0,0,THIEF,0)
  409.     IF((RFLAG(THFPOS).AND.RSEEN).EQ.0) GO TO 1700    !CANT ROB UNSEEN.
  410.     I=ROBRM(THFPOS,75,0,0,-THIEF)        !ROB ROOM 75%.
  411.     IF((THFPOS.LT.MAZE1).OR.(THFPOS.GT.MAZ15).OR.
  412.     1    (HERE.LT.MAZE1).OR.(HERE.GT.MAZ15)) GO TO 1500
  413.     DO 1450 I=1,OLNT            !BOTH IN MAZE.
  414.       IF(.NOT.QHERE(I,THFPOS).OR.PROB(60,60).OR.
  415.     1    ((OFLAG1(I).AND.(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
  416.     2    GO TO 1450
  417.       CALL RSPSUB(590,ODESC2(I))        !TAKE OBJECT.
  418.       IF(PROB(40,20)) GO TO 1700
  419.       CALL NEWSTA(I,0,0,0,-THIEF)        !MOST OF THE TIME.
  420.       OFLAG2(I)=OFLAG2(I).OR.TCHBT
  421.       GO TO 1700
  422. 1450    CONTINUE
  423.     GO TO 1700
  424. C
  425. 1500    DO 1550 I=1,OLNT            !NOT IN MAZE.
  426.       IF(.NOT.QHERE(I,THFPOS).OR.(OTVAL(I).NE.0).OR.PROB(80,60).OR.
  427.     1    ((OFLAG1(I).AND.(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
  428.     2    GO TO 1550
  429.       CALL NEWSTA(I,0,0,0,-THIEF)
  430.       OFLAG2(I)=OFLAG2(I).OR.TCHBT
  431.       GO TO 1700
  432. 1550    CONTINUE
  433. C
  434. C NOW MOVE TO NEW ROOM.
  435. C
  436. 1700    IF(OADV(ROPE).EQ.-THIEF) DOMEF=.FALSE.
  437.     IF(ONCE) GO TO 1800
  438.     ONCE=.NOT.ONCE
  439. 1750    THFPOS=THFPOS-1            !NEXT ROOM.
  440.     IF(THFPOS.LE.0) THFPOS=RLNT
  441.     IF((RFLAG(THFPOS).AND.(RLAND+RSACRD+REND)).NE.RLAND)
  442.     1    GO TO 1750            !MUST BE LAND, PROFANE.
  443.     THFFLG=.FALSE.                !NOT ANNOUNCED.
  444.     GO TO 1025                !ONCE MORE.
  445. C
  446. C ALL DONE.
  447. C
  448. 1800    IF(THFPOS.EQ.TREAS) RETURN            !IN TREASURE ROOM?
  449.     J=591                    !NO, DROP STUFF.
  450.     IF(THFPOS.NE.HERE) J=0
  451.     DO 1850 I=1,OLNT
  452.       IF((OADV(I).NE.-THIEF).OR.PROB(70,70).OR.
  453.     1    (OTVAL(I).GT.0)) GO TO 1850
  454.       CALL NEWSTA(I,J,THFPOS,0,0)
  455.       J=0
  456. 1850    CONTINUE
  457.     RETURN
  458. C
  459.     END
  460.