C TROLLP- TROLL FUNCTION
C
C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
C WRITTEN BY R. M. SUPNIK
C
C DECLARATIONS
C
LOGICAL FUNCTION TROLLP(ARG)
IMPLICIT INTEGER (A-Z)
LOGICAL QHERE,PROB
C
C PARSER OUTPUT
C
LOGICAL PRSWON
COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
C
C GAME STATE
C
LOGICAL TELFLG
COMMON /PLAY/ WINNER,HERE,TELFLG
C
C OBJECTS
C
COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
1 OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
2 OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
3 OADV(220),OCAN(220),OREAD(220)
C
COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
1 NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
2 TOOLBT,TURNBT,ONBT
COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
1 WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
2 TCHBT,VEHBT,SCHBT
C
COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
COMMON /OINDEX/ LEAVE,TROLL,AXE
COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
C
C VERBS
C
COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
C
C FLAGS
C
LOGICAL*1 TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
LOGICAL*1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
LOGICAL*1 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
LOGICAL*1 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
LOGICAL*1 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
LOGICAL*1 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
LOGICAL*1 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
LOGICAL*1 FOLLWF,SPELLF,CPOUTF,CPUSHF
COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
2 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
3 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
4 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
5 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
6 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
7 FOLLWF,SPELLF,CPOUTF,CPUSHF
COMMON /FINDEX/ BTIEF,BINFF
COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
COMMON /FINDEX/ MDIR,MLOC,POLEUF
COMMON /FINDEX/ QUESNO,NQATT,CORRCT
COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE
C TROLLP, PAGE 2
C
TROLLP=.TRUE. !ASSUME WINS.
IF(PRSA.NE.FIGHTW) GO TO 1100 !FIGHT?
IF(OCAN(AXE).EQ.TROLL) GO TO 10 !GOT AXE? NOTHING.
I=433 !ASSUME CANT GET.
IF(.NOT.QHERE(AXE,HERE)) GO TO 1050 !HERE?
I=434 !YES, RECOVER.
CALL NEWSTA(AXE,0,0,TROLL,0)
1050 IF(QHERE(TROLL,HERE)) CALL RSPEAK(I) !IF PLAYER HERE.
RETURN
C
1100 IF(PRSA.NE.DEADXW) GO TO 1200 !DEAD?
TROLLF=.TRUE. !PERMIT EXITS.
RETURN
C
1200 IF(PRSA.NE.OUTXW) GO TO 1300 !OUT?
TROLLF=.TRUE. !PERMIT EXITS.
OFLAG1(AXE)=OFLAG1(AXE).AND. .NOT.VISIBT
ODESC1(TROLL)=435 !TROLL OUT.
RETURN
C
1300 IF(PRSA.NE.INXW) GO TO 1400 !WAKE UP?
TROLLF=.FALSE. !FORBID EXITS.
OFLAG1(AXE)=OFLAG1(AXE).OR.VISIBT
ODESC1(TROLL)=436 !TROLL IN.
IF(QHERE(TROLL,HERE)) CALL RSPEAK(437)
RETURN
C
1400 IF(PRSA.NE.FRSTQW) GO TO 1500 !FIRST ENCOUNTER?
TROLLP=PROB(33,66) !33% TRUE UNLESS BADLK.
RETURN
C
1500 IF((PRSA.NE.MOVEW).AND.(PRSA.NE.TAKEW).AND.(PRSA.NE.MUNGW)
1 .AND.(PRSA.NE.THROWW).AND.(PRSA.NE.GIVEW)) GO TO 2000
IF(OCAPAC(TROLL).GE.0) GO TO 1550 !TROLL OUT?
OCAPAC(TROLL)=-OCAPAC(TROLL) !YES, WAKE HIM.
OFLAG1(AXE)=OFLAG1(AXE).OR.VISIBT
TROLLF=.FALSE.
ODESC1(TROLL)=436
CALL RSPEAK(437)
C
1550 IF((PRSA.NE.TAKEW).AND.(PRSA.NE.MOVEW)) GO TO 1600
CALL RSPEAK(438) !JOKE.
RETURN
C
1600 IF(PRSA.NE.MUNGW) GO TO 1700 !MUNG?
CALL RSPEAK(439) !JOKE.
RETURN
C
1700 IF(PRSO.EQ.0) GO TO 10 !NO OBJECT?
I=440 !ASSUME THROW.
IF(PRSA.EQ.GIVEW) I=441 !GIVE?
CALL RSPSUB(I,ODESC2(PRSO)) !TROLL TAKES.
IF(PRSO.EQ.KNIFE) GO TO 1900 !OBJ KNIFE?
CALL NEWSTA(PRSO,442,0,0,0) !NO, EATS IT.
RETURN
C
1900 CALL RSPEAK(443) !KNIFE, THROWS IT BACK
OFLAG2(TROLL)=OFLAG2(TROLL).OR.FITEBT !AND GETS MAD.
RETURN
C
2000 IF(.NOT.TROLLF.OR.(PRSA.NE.HELLOW)) GO TO 10
CALL RSPEAK(366) !TROLL OUT.
RETURN
C
10 TROLLP=.FALSE. !COULDNT HANDLE IT.
RETURN
END
C CYCLOP- CYCLOPS FUNCTION
C
C DECLARATIONS
C
LOGICAL FUNCTION CYCLOP(ARG)
IMPLICIT INTEGER (A-Z)
C
C PARSER OUTPUT
C
LOGICAL PRSWON
COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
C
C GAME STATE
C
LOGICAL TELFLG
COMMON /PLAY/ WINNER,HERE,TELFLG
C
C OBJECTS
C
COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
1 OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
2 OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
3 OADV(220),OCAN(220),OREAD(220)
C
COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
1 NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
2 TOOLBT,TURNBT,ONBT
COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
1 WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
2 TCHBT,VEHBT,SCHBT
C
COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
COMMON /OINDEX/ LEAVE,TROLL,AXE
COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
C
C VERBS
C
COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
C
C FLAGS
C
LOGICAL*1 TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
LOGICAL*1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
LOGICAL*1 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
LOGICAL*1 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
LOGICAL*1 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
LOGICAL*1 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
LOGICAL*1 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
LOGICAL*1 FOLLWF,SPELLF,CPOUTF,CPUSHF
COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
2 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
3 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
4 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
5 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
6 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
7 FOLLWF,SPELLF,CPOUTF,CPUSHF
COMMON /FINDEX/ BTIEF,BINFF
COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
COMMON /FINDEX/ MDIR,MLOC,POLEUF
COMMON /FINDEX/ QUESNO,NQATT,CORRCT
COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE
C CYCLOP, PAGE 2
C
CYCLOP=.TRUE. !ASSUME WINS.
IF(.NOT.CYCLOF) GO TO 100 !ASLEEP?
IF((PRSA.NE.ALARMW).AND.(PRSA.NE.MUNGW).AND.(PRSA.NE.HELLOW).AND.
1 (PRSA.NE.BURNW).AND.(PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW))
2 GO TO 10
CYCLOF=.FALSE. !WAKE CYCLOPS.
CALL RSPEAK(187) !DESCRIBE.
RVCYC=IABS(RVCYC)
OFLAG2(CYCLO)=(OFLAG2(CYCLO).OR.FITEBT).AND..NOT.SLEPBT
RETURN
C
100 IF((PRSA.EQ.FIGHTW).OR.(PRSA.EQ.FRSTQW)) GO TO 10
IF(IABS(RVCYC).LE.5) GO TO 200 !ANNOYED TOO MUCH?
RVCYC=0 !RESTART COUNT.
CALL JIGSUP(188) !YES, EATS PLAYER.
RETURN
C
200 IF(PRSA.NE.GIVEW) GO TO 500 !GIVE?
IF((PRSO.NE.FOOD).OR.(RVCYC.LT.0)) GO TO 300 !FOOD WHEN HUNGRY?
CALL NEWSTA(FOOD,189,0,0,0) !EATS PEPPERS.
RVCYC=MIN0(-1,-RVCYC) !GETS THIRSTY.
RETURN
C
300 IF(PRSO.NE.WATER) GO TO 400 !DRINK WHEN THIRSTY?
IF(RVCYC.GE.0) GO TO 350
CALL NEWSTA(PRSO,190,0,0,0) !DRINKS AND
CYCLOF=.TRUE. !FALLS ASLEEP.
OFLAG2(CYCLO)=(OFLAG2(CYCLO).OR.SLEPBT).AND..NOT.FITEBT
RETURN
C
350 CALL RSPEAK(191) !NOT THIRSTY.
10 CYCLOP=.FALSE. !FAILS.
RETURN
C
400 I=192 !ASSUME INEDIBLE.
IF(PRSO.EQ.GARLI) I=193 !GARLIC IS JOKE.
450 CALL RSPEAK(I) !DISDAIN IT.
IF(RVCYC.LT.0) RVCYC=RVCYC-1
IF(RVCYC.GE.0) RVCYC=RVCYC+1
IF(.NOT.CYCLOF) CALL RSPEAK(193+IABS(RVCYC))
RETURN
C
500 I=0 !ASSUME NOT HANDLED.
IF(PRSA.EQ.HELLOW) GO TO 450 !HELLO IS NO GO.
IF((PRSA.EQ.THROWW).OR.(PRSA.EQ.MUNGW)) I=200+RND(2)
IF(PRSA.EQ.TAKEW) I=202
IF(PRSA.EQ.TIEW) I=203
IF(I) 10,10,450 !SEE IF HANDLED.
C
END
C THIEFP- THIEF FUNCTION
C
C DECLARATIONS
C
LOGICAL FUNCTION THIEFP(ARG)
IMPLICIT INTEGER (A-Z)
LOGICAL QHERE,PROB
C
C PARSER OUTPUT
C
LOGICAL PRSWON
COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
C
C GAME STATE
C
LOGICAL TELFLG
COMMON /PLAY/ WINNER,HERE,TELFLG
C
C ROOMS
C
COMMON /RINDEX/ WHOUS,LROOM,CELLA
COMMON /RINDEX/ MTROL,MAZE1
COMMON /RINDEX/ MGRAT,MAZ15
COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER
COMMON /RINDEX/ STREA,EGYPT,ECHOR
COMMON /RINDEX/ TSHAF
COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC
COMMON /RINDEX/ CAROU
COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT
COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL
COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR
COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4
COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER
COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR
COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX
COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE
COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR
COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR
COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL
COMMON /RINDEX/ CPANT,CPOUT,CPUZZ
C
C OBJECTS
C
COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
1 OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
2 OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
3 OADV(220),OCAN(220),OREAD(220)
C
COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
1 NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
2 TOOLBT,TURNBT,ONBT
COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
1 WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
2 TCHBT,VEHBT,SCHBT
C
COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
COMMON /OINDEX/ LEAVE,TROLL,AXE
COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
C
C CLOCK INTERRUPTS
C
LOGICAL*1 CFLAG
COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25)
C
COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND,
1 CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG,
2 CEVGNO,CEVBUC,CEVSPH,CEVEGH,
3 CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE,
5 CEVMRS,CEVPIN,CEVINQ,CEVFOL
C
C VILLAINS AND DEMONS
C
LOGICAL THFFLG,SWDACT,THFACT
COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT
C
C VERBS
C
COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
C
C FLAGS
C
LOGICAL*1 TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
LOGICAL*1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
LOGICAL*1 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
LOGICAL*1 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
LOGICAL*1 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
LOGICAL*1 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
LOGICAL*1 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
LOGICAL*1 FOLLWF,SPELLF,CPOUTF,CPUSHF
COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
1 DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
2 MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
3 EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
4 GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
5 GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
6 MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
7 FOLLWF,SPELLF,CPOUTF,CPUSHF
COMMON /FINDEX/ BTIEF,BINFF
COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
COMMON /FINDEX/ MDIR,MLOC,POLEUF
COMMON /FINDEX/ QUESNO,NQATT,CORRCT
COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL,CPHERE
C THIEFP, PAGE 2
C
THIEFP=.TRUE. !ASSUME WINS.
IF(PRSA.NE.FIGHTW) GO TO 100 !FIGHT?
IF(OCAN(STILL).EQ.THIEF) GO TO 10 !GOT STILLETTO? F.
IF(QHERE(STILL,THFPOS)) GO TO 50 !CAN HE RECOVER IT?
CALL NEWSTA(THIEF,0,0,0,0) !NO, VANISH.
IF(QHERE(THIEF,HERE)) CALL RSPEAK(498) !IF HERO, TELL.
RETURN
C
50 CALL NEWSTA(STILL,0,0,THIEF,0) !YES, RECOVER.
IF(QHERE(THIEF,HERE)) CALL RSPEAK(499) !IF HERO, TELL.
RETURN
C
100 IF(PRSA.NE.DEADXW) GO TO 200 !DEAD?
THFACT=.FALSE. !DISABLE DEMON.
OFLAG1(CHALI)=OFLAG1(CHALI).OR.TAKEBT
J=0
DO 125 I=1,OLNT !CARRYING ANYTHING?
125 IF(OADV(I).EQ.-THIEF) J=500
CALL RSPEAK(J) !TELL IF BOOTY R
EAPPEARS.
C
J=501
DO 150 I=1,OLNT !LOOP.
IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR.(HERE.NE.TREAS)
1 .OR. .NOT.QHERE(I,HERE)) GO TO 135
OFLAG1(I)=OFLAG1(I).OR.VISIBT !REMATERIALIZE OBJECTS.
CALL RSPSUB(J,ODESC2(I)) !DESCRIBE.
J=502
GO TO 150
C
135 IF(OADV(I).EQ.-THIEF) CALL NEWSTA(I,0,HERE,0,0)
150 CONTINUE
RETURN
C
200 IF(PRSA.NE.FRSTQW) GO TO 250 !FIRST ENCOUNTER?
THIEFP=PROB(20,75)
RETURN
C
250 IF((PRSA.NE.HELLOW).OR.(ODESC1(THIEF).NE.504))
1 GO TO 300 !HELLO TO OUT THIEF?
CALL RSPEAK(626)
RETURN
C
300 IF(PRSA.NE.OUTXW) GO TO 400 !OUT?
THFACT=.FALSE. !DISABLE DEMON.
ODESC1(THIEF)=504 !CHANGE DESCRIPTION.
OFLAG1(STILL)=OFLAG1(STILL).AND..NOT.VISIBT
OFLAG1(CHALI)=OFLAG1(CHALI).OR.TAKEBT
RETURN
C
400 IF(PRSA.NE.INXW) GO TO 500 !IN?
IF(QHERE(THIEF,HERE)) CALL RSPEAK(505) !CAN HERO SEE?
THFACT=.TRUE. !ENABLE DEMON.
ODESC1(THIEF)=503 !CHANGE DESCRIPTION.
OFLAG1(STILL)=OFLAG1(STILL).OR.VISIBT
IF((HERE.EQ.TREAS).AND.QHERE(CHALI,HERE))
1 OFLAG1(CHALI)=OFLAG1(CHALI).AND..NOT.TAKEBT
RETURN
C
500 IF(PRSA.NE.TAKEW) GO TO 600 !TAKE?
CALL RSPEAK(506) !JOKE.
RETURN
C
600 IF((PRSA.NE.THROWW).OR.(PRSO.NE.KNIFE).OR.
1 ((OFLAG2(THIEF).AND.FITEBT).NE.0)) GO TO 700
IF(PROB(10)) GO TO 650 !THREW KNIFE, 10%?
CALL RSPEAK(507) !NO, JUST MAKES
OFLAG2(THIEF)=OFLAG2(THIEF).OR.FITEBT !THIEF MAD.
RETURN
C
650 J=508 !THIEF DROPS STUFF.
DO 675 I=1,OLNT
IF(OADV(I).NE.-THIEF) GO TO 675 !THIEF CARRYING?
J=509
CALL NEWSTA(I,0,HERE,0,0)
675 CONTINUE
CALL NEWSTA(THIEF,J,0,0,0) !THIEF VANISHES.
RETURN
C
700 IF(((PRSA.NE.THROWW).AND.(PRSA.NE.GIVEW)).OR.(PRSO.EQ.0).OR.
1 (PRSO.EQ.THIEF)) GO TO 10 !THRO/GIVE TO THIEF?
IF(OCAPAC(THIEF).GE.0) GO TO 750 !WAKE HIM UP.
OCAPAC(THIEF)=-OCAPAC(THIEF)
THFACT=.TRUE.
OFLAG1(STILL)=OFLAG1(STILL).OR.VISIBT
ODESC1(THIEF)=503
CALL RSPEAK(510)
C
750 IF((PRSO.NE.BRICK).OR.(OCAN(FUSE).NE.BRICK).OR.
1 (CTICK(CEVFUS).EQ.0)) GO TO 800
CALL RSPEAK(511) !THIEF REFUSES BOMB.
RETURN
C
800 CALL NEWSTA(PRSO,0,0,0,-THIEF) !THIEF TAKES GIFT.
IF(OTVAL(PRSO).GT.0) GO TO 900 !A TREASURE?
CALL RSPSUB(512,ODESC2(PRSO))
RETURN
C
900 CALL RSPSUB(627,ODESC2(PRSO)) !THIEF ENGROSSED.
THFENF=.TRUE.
RETURN
C
10 THIEFP=.FALSE.
RETURN
END