home *** CD-ROM | disk | FTP | other *** search
- 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 REAPPEARS.
- 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
-