home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol047 / villns.for < prev    next >
Encoding:
Text File  |  1984-04-29  |  18.3 KB  |  556 lines

  1. C TROLLP-    TROLL FUNCTION
  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 TROLLP(ARG)
  10.     IMPLICIT INTEGER (A-Z)
  11.     LOGICAL QHERE,PROB
  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 OBJECTS
  24. C
  25.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  26.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  27.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  28.     3    OADV(220),OCAN(220),OREAD(220)
  29. C
  30.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  31.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  32.     2    TOOLBT,TURNBT,ONBT
  33.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  34.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  35.     2    TCHBT,VEHBT,SCHBT
  36. C
  37.     COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
  38.     COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
  39.     COMMON /OINDEX/    LEAVE,TROLL,AXE
  40.     COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
  41.     COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
  42.     COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
  43.     COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
  44.     COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
  45.     COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
  46.     COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
  47.     COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
  48.     COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
  49.     COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
  50.     COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
  51.     COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
  52.     COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
  53.     COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
  54.     COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
  55.     COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
  56.     COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
  57.     COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
  58.     COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
  59. C
  60. C VERBS
  61. C
  62.     COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
  63.     COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
  64.     COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
  65.     COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
  66.     COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
  67.     COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
  68.     COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
  69.     COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
  70.     COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
  71.     COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
  72.     COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
  73.     COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
  74.     COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
  75. C
  76. C FLAGS
  77. C
  78.     LOGICAL*1 TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
  79.     LOGICAL*1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
  80.     LOGICAL*1 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
  81.     LOGICAL*1 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
  82.     LOGICAL*1 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
  83.     LOGICAL*1 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
  84.     LOGICAL*1 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
  85.     LOGICAL*1 FOLLWF,SPELLF,CPOUTF,CPUSHF
  86.     COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
  87.     1    DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
  88.     2    MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
  89.     3    EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
  90.     4    GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
  91.     5    GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
  92.     6    MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
  93.     7    FOLLWF,SPELLF,CPOUTF,CPUSHF
  94.     COMMON /FINDEX/ BTIEF,BINFF
  95.     COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
  96.     COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
  97.     COMMON /FINDEX/ MDIR,MLOC,POLEUF
  98.     COMMON /FINDEX/ QUESNO,NQATT,CORRCT
  99.     COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE
  100. C TROLLP, PAGE 2
  101. C
  102.     TROLLP=.TRUE.                !ASSUME WINS.
  103.     IF(PRSA.NE.FIGHTW) GO TO 1100        !FIGHT?
  104.     IF(OCAN(AXE).EQ.TROLL) GO TO 10        !GOT AXE?  NOTHING.
  105.     I=433                    !ASSUME CANT GET.
  106.     IF(.NOT.QHERE(AXE,HERE)) GO TO 1050    !HERE?
  107.     I=434                    !YES, RECOVER.
  108.     CALL NEWSTA(AXE,0,0,TROLL,0)
  109. 1050    IF(QHERE(TROLL,HERE)) CALL RSPEAK(I)    !IF PLAYER HERE.
  110.     RETURN
  111. C
  112. 1100    IF(PRSA.NE.DEADXW) GO TO 1200        !DEAD?
  113.     TROLLF=.TRUE.                !PERMIT EXITS.
  114.     RETURN
  115. C
  116. 1200    IF(PRSA.NE.OUTXW) GO TO 1300        !OUT?
  117.     TROLLF=.TRUE.                !PERMIT EXITS.
  118.     OFLAG1(AXE)=OFLAG1(AXE).AND. .NOT.VISIBT
  119.     ODESC1(TROLL)=435            !TROLL OUT.
  120.     RETURN
  121. C
  122. 1300    IF(PRSA.NE.INXW) GO TO 1400        !WAKE UP?
  123.     TROLLF=.FALSE.                !FORBID EXITS.
  124.     OFLAG1(AXE)=OFLAG1(AXE).OR.VISIBT
  125.     ODESC1(TROLL)=436            !TROLL IN.
  126.     IF(QHERE(TROLL,HERE)) CALL RSPEAK(437)
  127.     RETURN
  128. C
  129. 1400    IF(PRSA.NE.FRSTQW) GO TO 1500        !FIRST ENCOUNTER?
  130.     TROLLP=PROB(33,66)        !33% TRUE UNLESS BADLK.
  131.     RETURN
  132. C
  133. 1500    IF((PRSA.NE.MOVEW).AND.(PRSA.NE.TAKEW).AND.(PRSA.NE.MUNGW)
  134.     1    .AND.(PRSA.NE.THROWW).AND.(PRSA.NE.GIVEW)) GO TO 2000
  135.     IF(OCAPAC(TROLL).GE.0) GO TO 1550    !TROLL OUT?
  136.     OCAPAC(TROLL)=-OCAPAC(TROLL)        !YES, WAKE HIM.
  137.     OFLAG1(AXE)=OFLAG1(AXE).OR.VISIBT
  138.     TROLLF=.FALSE.
  139.     ODESC1(TROLL)=436
  140.     CALL RSPEAK(437)
  141. C
  142. 1550    IF((PRSA.NE.TAKEW).AND.(PRSA.NE.MOVEW)) GO TO 1600
  143.     CALL RSPEAK(438)            !JOKE.
  144.     RETURN
  145. C
  146. 1600    IF(PRSA.NE.MUNGW) GO TO 1700        !MUNG?
  147.     CALL RSPEAK(439)            !JOKE.
  148.     RETURN
  149. C
  150. 1700    IF(PRSO.EQ.0) GO TO 10            !NO OBJECT?
  151.     I=440                    !ASSUME THROW.
  152.     IF(PRSA.EQ.GIVEW) I=441            !GIVE?
  153.     CALL RSPSUB(I,ODESC2(PRSO))        !TROLL TAKES.
  154.     IF(PRSO.EQ.KNIFE) GO TO 1900        !OBJ KNIFE?
  155.     CALL NEWSTA(PRSO,442,0,0,0)        !NO, EATS IT.
  156.     RETURN
  157. C
  158. 1900    CALL RSPEAK(443)            !KNIFE, THROWS IT BACK
  159.     OFLAG2(TROLL)=OFLAG2(TROLL).OR.FITEBT    !AND GETS MAD.
  160.     RETURN
  161. C
  162. 2000    IF(.NOT.TROLLF.OR.(PRSA.NE.HELLOW)) GO TO 10
  163.     CALL RSPEAK(366)            !TROLL OUT.
  164.     RETURN
  165. C
  166. 10    TROLLP=.FALSE.                !COULDNT HANDLE IT.
  167.     RETURN
  168.     END
  169. C CYCLOP-    CYCLOPS FUNCTION
  170. C
  171. C DECLARATIONS
  172. C
  173.     LOGICAL FUNCTION CYCLOP(ARG)
  174.     IMPLICIT INTEGER (A-Z)
  175. C
  176. C PARSER OUTPUT
  177. C
  178.     LOGICAL PRSWON
  179.     COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
  180. C
  181. C GAME STATE
  182. C
  183.     LOGICAL TELFLG
  184.     COMMON /PLAY/ WINNER,HERE,TELFLG
  185. C
  186. C OBJECTS
  187. C
  188.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  189.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  190.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  191.     3    OADV(220),OCAN(220),OREAD(220)
  192. C
  193.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  194.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  195.     2    TOOLBT,TURNBT,ONBT
  196.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  197.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  198.     2    TCHBT,VEHBT,SCHBT
  199. C
  200.     COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
  201.     COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
  202.     COMMON /OINDEX/    LEAVE,TROLL,AXE
  203.     COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
  204.     COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
  205.     COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
  206.     COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
  207.     COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
  208.     COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
  209.     COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
  210.     COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
  211.     COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
  212.     COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
  213.     COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
  214.     COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
  215.     COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
  216.     COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
  217.     COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
  218.     COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
  219.     COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
  220.     COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
  221.     COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
  222. C
  223. C VERBS
  224. C
  225.     COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
  226.     COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
  227.     COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
  228.     COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
  229.     COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
  230.     COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
  231.     COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
  232.     COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
  233.     COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
  234.     COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
  235.     COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
  236.     COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
  237.     COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
  238. C
  239. C FLAGS
  240. C
  241.     LOGICAL*1 TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
  242.     LOGICAL*1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
  243.     LOGICAL*1 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
  244.     LOGICAL*1 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
  245.     LOGICAL*1 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
  246.     LOGICAL*1 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
  247.     LOGICAL*1 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
  248.     LOGICAL*1 FOLLWF,SPELLF,CPOUTF,CPUSHF
  249.     COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
  250.     1    DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
  251.     2    MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
  252.     3    EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
  253.     4    GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
  254.     5    GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
  255.     6    MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
  256.     7    FOLLWF,SPELLF,CPOUTF,CPUSHF
  257.     COMMON /FINDEX/ BTIEF,BINFF
  258.     COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
  259.     COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
  260.     COMMON /FINDEX/ MDIR,MLOC,POLEUF
  261.     COMMON /FINDEX/ QUESNO,NQATT,CORRCT
  262.     COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE
  263. C CYCLOP, PAGE 2
  264. C
  265.     CYCLOP=.TRUE.                !ASSUME WINS.
  266.     IF(.NOT.CYCLOF) GO TO 100        !ASLEEP?
  267.     IF((PRSA.NE.ALARMW).AND.(PRSA.NE.MUNGW).AND.(PRSA.NE.HELLOW).AND.
  268.     1    (PRSA.NE.BURNW).AND.(PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW))
  269.     2     GO TO 10
  270.     CYCLOF=.FALSE.            !WAKE CYCLOPS.
  271.     CALL RSPEAK(187)            !DESCRIBE.
  272.     RVCYC=IABS(RVCYC)
  273.     OFLAG2(CYCLO)=(OFLAG2(CYCLO).OR.FITEBT).AND..NOT.SLEPBT
  274.     RETURN
  275. C
  276. 100    IF((PRSA.EQ.FIGHTW).OR.(PRSA.EQ.FRSTQW)) GO TO 10
  277.     IF(IABS(RVCYC).LE.5) GO TO 200        !ANNOYED TOO MUCH?
  278.     RVCYC=0                    !RESTART COUNT.
  279.     CALL JIGSUP(188)            !YES, EATS PLAYER.
  280.     RETURN
  281. C
  282. 200    IF(PRSA.NE.GIVEW) GO TO 500        !GIVE?
  283.     IF((PRSO.NE.FOOD).OR.(RVCYC.LT.0)) GO TO 300 !FOOD WHEN HUNGRY?
  284.     CALL NEWSTA(FOOD,189,0,0,0)        !EATS PEPPERS.
  285.     RVCYC=MIN0(-1,-RVCYC)            !GETS THIRSTY.
  286.     RETURN
  287. C
  288. 300    IF(PRSO.NE.WATER) GO TO 400        !DRINK WHEN THIRSTY?
  289.     IF(RVCYC.GE.0) GO TO 350
  290.     CALL NEWSTA(PRSO,190,0,0,0)        !DRINKS AND
  291.     CYCLOF=.TRUE.                !FALLS ASLEEP.
  292.     OFLAG2(CYCLO)=(OFLAG2(CYCLO).OR.SLEPBT).AND..NOT.FITEBT
  293.     RETURN
  294. C
  295. 350    CALL RSPEAK(191)            !NOT THIRSTY.
  296. 10    CYCLOP=.FALSE.                !FAILS.
  297.     RETURN
  298. C
  299. 400    I=192                    !ASSUME INEDIBLE.
  300.     IF(PRSO.EQ.GARLI) I=193            !GARLIC IS JOKE.
  301. 450    CALL RSPEAK(I)                !DISDAIN IT.
  302.     IF(RVCYC.LT.0) RVCYC=RVCYC-1
  303.     IF(RVCYC.GE.0) RVCYC=RVCYC+1
  304.     IF(.NOT.CYCLOF) CALL RSPEAK(193+IABS(RVCYC))
  305.     RETURN
  306. C
  307. 500    I=0                    !ASSUME NOT HANDLED.
  308.     IF(PRSA.EQ.HELLOW) GO TO 450        !HELLO IS NO GO.
  309.     IF((PRSA.EQ.THROWW).OR.(PRSA.EQ.MUNGW)) I=200+RND(2)
  310.     IF(PRSA.EQ.TAKEW) I=202
  311.     IF(PRSA.EQ.TIEW) I=203
  312.     IF(I) 10,10,450            !SEE IF HANDLED.
  313. C
  314.     END
  315. C THIEFP-    THIEF FUNCTION
  316. C
  317. C DECLARATIONS
  318. C
  319.     LOGICAL FUNCTION THIEFP(ARG)
  320.     IMPLICIT INTEGER (A-Z)
  321.     LOGICAL QHERE,PROB
  322. C
  323. C PARSER OUTPUT
  324. C
  325.     LOGICAL PRSWON
  326.     COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
  327. C
  328. C GAME STATE
  329. C
  330.     LOGICAL TELFLG
  331.     COMMON /PLAY/ WINNER,HERE,TELFLG
  332. C
  333. C ROOMS
  334. C
  335.     COMMON /RINDEX/ WHOUS,LROOM,CELLA
  336.     COMMON /RINDEX/ MTROL,MAZE1    
  337.     COMMON /RINDEX/ MGRAT,MAZ15    
  338.     COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER
  339.     COMMON /RINDEX/ STREA,EGYPT,ECHOR
  340.     COMMON /RINDEX/ TSHAF    
  341.     COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC
  342.     COMMON /RINDEX/ CAROU    
  343.     COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT
  344.     COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL
  345.     COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR
  346.     COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4
  347.     COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER
  348.     COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR
  349.     COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX
  350.     COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE
  351.     COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR
  352.     COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR
  353.     COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL
  354.     COMMON /RINDEX/ CPANT,CPOUT,CPUZZ
  355. C
  356. C OBJECTS
  357. C
  358.     COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  359.     1    OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  360.     2    OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  361.     3    OADV(220),OCAN(220),OREAD(220)
  362. C
  363.     COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  364.     1    NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  365.     2    TOOLBT,TURNBT,ONBT
  366.     COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  367.     1    WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  368.     2    TCHBT,VEHBT,SCHBT
  369. C
  370.     COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
  371.     COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
  372.     COMMON /OINDEX/    LEAVE,TROLL,AXE
  373.     COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
  374.     COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
  375.     COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
  376.     COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
  377.     COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
  378.     COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
  379.     COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
  380.     COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
  381.     COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
  382.     COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
  383.     COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
  384.     COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
  385.     COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
  386.     COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
  387.     COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
  388.     COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
  389.     COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
  390.     COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
  391.     COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
  392. C
  393. C CLOCK INTERRUPTS
  394. C
  395.     LOGICAL*1 CFLAG
  396.     COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25)
  397. C
  398.     COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND,
  399.     1    CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG,
  400.     2    CEVGNO,CEVBUC,CEVSPH,CEVEGH,
  401.     3    CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE,
  402.     5    CEVMRS,CEVPIN,CEVINQ,CEVFOL
  403.  
  404. C
  405. C VILLAINS AND DEMONS
  406. C
  407.     LOGICAL THFFLG,SWDACT,THFACT
  408.     COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT
  409. C
  410. C VERBS
  411. C
  412.     COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
  413.     COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
  414.     COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
  415.     COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
  416.     COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
  417.     COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
  418.     COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
  419.     COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
  420.     COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
  421.     COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
  422.     COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
  423.     COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
  424.     COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
  425. C
  426. C FLAGS
  427. C
  428.     LOGICAL*1 TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
  429.     LOGICAL*1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
  430.     LOGICAL*1 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
  431.     LOGICAL*1 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
  432.     LOGICAL*1 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
  433.     LOGICAL*1 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
  434.     LOGICAL*1 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
  435.     LOGICAL*1 FOLLWF,SPELLF,CPOUTF,CPUSHF
  436.     COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
  437.     1    DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
  438.     2    MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
  439.     3    EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
  440.     4    GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
  441.     5    GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
  442.     6    MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
  443.     7    FOLLWF,SPELLF,CPOUTF,CPUSHF
  444.     COMMON /FINDEX/ BTIEF,BINFF
  445.     COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
  446.     COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
  447.     COMMON /FINDEX/ MDIR,MLOC,POLEUF
  448.     COMMON /FINDEX/ QUESNO,NQATT,CORRCT
  449.     COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE
  450. C THIEFP, PAGE 2
  451. C
  452.     THIEFP=.TRUE.                !ASSUME WINS.
  453.     IF(PRSA.NE.FIGHTW) GO TO 100        !FIGHT?
  454.     IF(OCAN(STILL).EQ.THIEF) GO TO 10    !GOT STILLETTO?  F.
  455.     IF(QHERE(STILL,THFPOS)) GO TO 50    !CAN HE RECOVER IT?
  456.     CALL NEWSTA(THIEF,0,0,0,0)        !NO, VANISH.
  457.     IF(QHERE(THIEF,HERE)) CALL RSPEAK(498)    !IF HERO, TELL.
  458.     RETURN
  459. C
  460. 50    CALL NEWSTA(STILL,0,0,THIEF,0)        !YES, RECOVER.
  461.     IF(QHERE(THIEF,HERE)) CALL RSPEAK(499)    !IF HERO, TELL.
  462.     RETURN
  463. C
  464. 100    IF(PRSA.NE.DEADXW) GO TO 200        !DEAD?
  465.     THFACT=.FALSE.                !DISABLE DEMON.
  466.     OFLAG1(CHALI)=OFLAG1(CHALI).OR.TAKEBT
  467.     J=0
  468.     DO 125 I=1,OLNT                !CARRYING ANYTHING?
  469. 125      IF(OADV(I).EQ.-THIEF) J=500
  470.     CALL RSPEAK(J)                !TELL IF BOOTY REAPPEARS.
  471. C
  472.     J=501
  473.     DO 150 I=1,OLNT            !LOOP.
  474.       IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR.(HERE.NE.TREAS)
  475.     1    .OR. .NOT.QHERE(I,HERE)) GO TO 135
  476.       OFLAG1(I)=OFLAG1(I).OR.VISIBT        !REMATERIALIZE OBJECTS.
  477.       CALL RSPSUB(J,ODESC2(I))        !DESCRIBE.
  478.       J=502
  479.       GO TO 150
  480. C
  481. 135      IF(OADV(I).EQ.-THIEF) CALL NEWSTA(I,0,HERE,0,0)
  482. 150    CONTINUE
  483.     RETURN
  484. C
  485. 200    IF(PRSA.NE.FRSTQW) GO TO 250        !FIRST ENCOUNTER?
  486.     THIEFP=PROB(20,75)
  487.     RETURN
  488. C
  489. 250    IF((PRSA.NE.HELLOW).OR.(ODESC1(THIEF).NE.504))
  490.     1    GO TO 300            !HELLO TO OUT THIEF?
  491.     CALL RSPEAK(626)
  492.     RETURN
  493. C
  494. 300    IF(PRSA.NE.OUTXW) GO TO 400        !OUT?
  495.     THFACT=.FALSE.                !DISABLE DEMON.
  496.     ODESC1(THIEF)=504            !CHANGE DESCRIPTION.
  497.     OFLAG1(STILL)=OFLAG1(STILL).AND..NOT.VISIBT
  498.     OFLAG1(CHALI)=OFLAG1(CHALI).OR.TAKEBT
  499.     RETURN
  500. C
  501. 400    IF(PRSA.NE.INXW) GO TO 500        !IN?
  502.     IF(QHERE(THIEF,HERE)) CALL RSPEAK(505)    !CAN HERO SEE?
  503.     THFACT=.TRUE.                !ENABLE DEMON.
  504.     ODESC1(THIEF)=503            !CHANGE DESCRIPTION.
  505.     OFLAG1(STILL)=OFLAG1(STILL).OR.VISIBT
  506.     IF((HERE.EQ.TREAS).AND.QHERE(CHALI,HERE))
  507.     1    OFLAG1(CHALI)=OFLAG1(CHALI).AND..NOT.TAKEBT
  508.     RETURN
  509. C
  510. 500    IF(PRSA.NE.TAKEW) GO TO 600        !TAKE?
  511.     CALL RSPEAK(506)            !JOKE.
  512.     RETURN
  513. C
  514. 600    IF((PRSA.NE.THROWW).OR.(PRSO.NE.KNIFE).OR.
  515.     1    ((OFLAG2(THIEF).AND.FITEBT).NE.0)) GO TO 700
  516.     IF(PROB(10)) GO TO 650            !THREW KNIFE, 10%?
  517.     CALL RSPEAK(507)            !NO, JUST MAKES
  518.     OFLAG2(THIEF)=OFLAG2(THIEF).OR.FITEBT    !THIEF MAD.
  519.     RETURN
  520. C
  521. 650    J=508                    !THIEF DROPS STUFF.
  522.     DO 675 I=1,OLNT
  523.       IF(OADV(I).NE.-THIEF) GO TO 675    !THIEF CARRYING?
  524.       J=509
  525.       CALL NEWSTA(I,0,HERE,0,0)
  526. 675    CONTINUE
  527.     CALL NEWSTA(THIEF,J,0,0,0)        !THIEF VANISHES.
  528.     RETURN
  529. C
  530. 700    IF(((PRSA.NE.THROWW).AND.(PRSA.NE.GIVEW)).OR.(PRSO.EQ.0).OR.
  531.     1    (PRSO.EQ.THIEF)) GO TO 10    !THRO/GIVE TO THIEF?
  532.     IF(OCAPAC(THIEF).GE.0) GO TO 750    !WAKE HIM UP.
  533.     OCAPAC(THIEF)=-OCAPAC(THIEF)
  534.     THFACT=.TRUE.
  535.     OFLAG1(STILL)=OFLAG1(STILL).OR.VISIBT
  536.     ODESC1(THIEF)=503
  537.     CALL RSPEAK(510)
  538. C
  539. 750    IF((PRSO.NE.BRICK).OR.(OCAN(FUSE).NE.BRICK).OR.
  540.     1    (CTICK(CEVFUS).EQ.0)) GO TO 800
  541.     CALL RSPEAK(511)            !THIEF REFUSES BOMB.
  542.     RETURN
  543. C
  544. 800    CALL NEWSTA(PRSO,0,0,0,-THIEF)        !THIEF TAKES GIFT.
  545.     IF(OTVAL(PRSO).GT.0) GO TO 900        !A TREASURE?
  546.     CALL RSPSUB(512,ODESC2(PRSO))
  547.     RETURN
  548. C
  549. 900    CALL RSPSUB(627,ODESC2(PRSO))        !THIEF ENGROSSED.
  550.     THFENF=.TRUE.
  551.     RETURN
  552. C
  553. 10    THIEFP=.FALSE.
  554.     RETURN
  555.     END
  556.