home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!haven.umd.edu!darwin.sura.net!gatech!nntp.msstate.edu!emory!dragon.com!cts
- From: cts@dragon.com
- Newsgroups: vmsnet.sources.games
- Subject: Dungeon Part 28/30
- Message-ID: <1992Feb24.014014.821@dragon.com>
- Date: 24 Feb 92 06:40:13 GMT
- Organization: Computer Projects Unlimited
- Lines: 1466
-
- $PART28:
- $ CALL UNPACK [.SRC]OFLAGS.LIB;1 1448158622
- $ create 'f'
- XC
- X COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
- X COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
- X COMMON /OINDEX/`09LEAVE,TROLL,AXE
- X COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
- X COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
- X COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
- X COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
- X COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
- X COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
- X COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
- X COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
- X COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
- X COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
- X COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
- X COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
- X COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
- X COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
- X COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
- X COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
- X COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
- X COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
- X COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
- $ CALL UNPACK [.SRC]OINDEX.LIB;1 658703041
- $ create 'f'
- XC
- XC PARSER OUTPUT
- XC
- X LOGICAL PRSWON
- X COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
- XC
- XC PARSER STATE
- XC
- X COMMON /ORPHS/ OFLAG,OACT,OSLOT,OPREP,ONAME
- X INTEGER ORP(5)
- X EQUIVALENCE (OFLAG, ORP)
- XC
- X COMMON /LAST/ LASTIT
- XC
- X COMMON /PV/ ACT,O1,O2,P1,P2
- X INTEGER OBJVEC(2),PRPVEC(2),PVEC(5)
- X EQUIVALENCE (OBJVEC(1),O1),(PRPVEC(1),P1),(PVEC(1),ACT)
- XC
- X COMMON /SYNTAX/ VFLAG,DOBJ,DFL1,DFL2,DFW1,DFW2,
- X &`09`09IOBJ,IFL1,IFL2,IFW1,IFW2
- X INTEGER SYN(11)
- X EQUIVALENCE (VFLAG, SYN)
- XC
- X COMMON /SYNFLG/ SDIR,SIND,SSTD,SFLIP,SDRIV,SVMASK
- XC
- X COMMON /OBJFLG/ VABIT,VRBIT,VTBIT,VCBIT,VEBIT,VFBIT,VPMASK
- $ CALL UNPACK [.SRC]PARSER.LIB;1 1514015862
- $ create 'f'
- XC
- XC PUZZLE ROOM STATE
- XC
- X COMMON /PUZZLE/ CPDR(16),CPWL(8),CPVEC(64)
- $ CALL UNPACK [.SRC]PUZZLE.LIB;1 426144814
- $ create 'f'
- X common /random/ seed
- $ CALL UNPACK [.SRC]RANDOM.LIB;1 1212286677
- $ create 'f'
- XC
- X COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR,
- X &`09`09RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND
- $ CALL UNPACK [.SRC]RFLAG.LIB;1 359941088
- $ create 'f'
- XC
- X COMMON /RINDEX/ WHOUS,LROOM,CELLA
- X COMMON /RINDEX/ MTROL,MAZE1
- X COMMON /RINDEX/ MGRAT,MAZ15
- X COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER
- X COMMON /RINDEX/ STREA,EGYPT,ECHOR
- X COMMON /RINDEX/ TSHAF
- X COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC
- X COMMON /RINDEX/ CAROU
- X COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT
- X COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL
- X COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR
- X COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4
- X COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER
- X COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR
- X COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX
- X COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE
- X COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR
- X COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR
- X COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL
- X COMMON /RINDEX/ CPANT,CPOUT,CPUZZ
- $ CALL UNPACK [.SRC]RINDEX.LIB;1 1902711731
- $ create 'f'
- XC RAPPL1- SPECIAL PURPOSE ROOM ROUTINES, PART 1
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC DECLARATIONS
- XC
- X LOGICAL FUNCTION RAPPL1(RI)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL QOPEN,QON,QHERE,PROB,F
- X LOGICAL MOVETO,LIT
- X
- X INCLUDE 'PARSER.LIB'
- X INCLUDE 'GAMESTATE.LIB'
- X INCLUDE 'STATE.LIB'
- XC
- XC SCREEN OF LIGHT
- XC
- X COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC
- X COMMON /SCREEN/ SCOLDR(8),SCOLWL(12)
- XC
- XC MISCELLANEOUS VARIABLES
- XC
- X COMMON /BATS/ BATDRP(9)
- X
- X INCLUDE 'ROOMS.LIB'
- X INCLUDE 'RFLAG.LIB'
- X INCLUDE 'RINDEX.LIB'
- X INCLUDE 'OBJECTS.LIB'
- X INCLUDE 'OFLAGS.LIB'
- X INCLUDE 'OINDEX.LIB'
- X INCLUDE 'CLOCK.LIB'
- X INCLUDE 'VILLIANS.LIB'
- X INCLUDE 'ADVERS.LIB'
- X INCLUDE 'VERBS.LIB'
- X INCLUDE 'FLAGS.LIB'
- XC
- XC FUNCTIONS AND DATA
- XC
- X QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
- X QON(R)=and(OFLAG1(R),ONBT).NE.0
- X`0C
- XC RAPPL1, PAGE 2
- XC
- X RAPPL1=.TRUE.
- XC !USUALLY IGNORED.
- X IF(RI.EQ.0) RETURN
- XC !RETURN IF NAUGHT.
- XC
- XC !SET TO FALSE FOR
- XC
- XC !NEW DESC NEEDED.
- X GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
- X & 11000,12000,13000,14000,15000,16000,17000,18000,19000,20000,
- X & 21000,22000,23000,24000,25000,26000,27000,28000,29000,30000,
- X & 31000,32000,33000,34000,35000,36000,37000),RI
- X CALL BUG(1,RI)
- XC
- XC R1-- EAST OF HOUSE. DESCRIPTION DEPENDS ON STATE OF WINDOW
- XC
- X1000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=13
- XC !ASSUME CLOSED.
- X IF(QOPEN(WINDO)) I=12
- XC !IF OPEN, AJAR.
- X CALL RSPSUB(11,I)
- XC !DESCRIBE.
- X RETURN
- XC
- XC R2-- KITCHEN. SAME VIEW FROM INSIDE.
- XC
- X2000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=13
- XC !ASSUME CLOSED.
- X IF(QOPEN(WINDO)) I=12
- XC !IF OPEN, AJAR.
- X CALL RSPSUB(14,I)
- XC !DESCRIBE.
- X RETURN
- XC
- XC R3-- LIVING ROOM. DESCRIPTION DEPENDS ON MAGICF (STATE OF
- XC DOOR TO CYCLOPS ROOM), RUG (MOVED OR NOT), DOOR (OPEN OR CLOSED)
- XC
- X3000 IF(PRSA.NE.LOOKW) GO TO 3500
- XC !LOOK?
- X I=15
- XC !ASSUME NO HOLE.
- X IF(MAGICF) I=16
- XC !IF MAGICF, CYCLOPS HOLE.
- X CALL RSPEAK(I)
- XC !DESCRIBE.
- X I=17+ORRUG
- XC !ASSUME INITIAL STATE.
- X IF(QOPEN(DOOR)) I=I+2
- XC !DOOR OPEN?
- X CALL RSPEAK(I)
- XC !DESCRIBE.
- X RETURN
- XC
- XC NOT A LOOK WORD. REEVALUATE TROPHY CASE.
- XC
- X3500 IF((PRSA.NE.TAKEW).AND.((PRSA.NE.PUTW).OR.(PRSI.NE.TCASE)))
- X & RETURN
- X ASCORE(WINNER)=RWSCOR
- XC !SCORE TROPHY CASE.
- X DO 3600 I=1,OLNT
- XC !RETAIN RAW SCORE AS WELL.
- X J=I
- XC !FIND OUT IF IN CASE.
- X3550 J=OCAN(J)
- XC !TRACE OWNERSHIP.
- X IF(J.EQ.0) GO TO 3600
- X IF(J.NE.TCASE) GO TO 3550
- XC !DO ALL LEVELS.
- X ASCORE(WINNER)=ASCORE(WINNER)+OTVAL(I)
- X3600 CONTINUE
- X CALL SCRUPD(0)
- XC !SEE IF ENDGAME TRIG.
- X RETURN
- X`0C
- XC RAPPL1, PAGE 3
- XC
- XC R4-- CELLAR. SHUT DOOR AND BAR IT IF HE JUST WALKED IN.
- XC
- X4000 IF(PRSA.NE.LOOKW) GO TO 4500
- XC !LOOK?
- X CALL RSPEAK(21)
- XC !DESCRIBE CELLAR.
- X RETURN
- XC
- X4500 IF(PRSA.NE.WALKIW) RETURN
- XC !WALKIN?
- X IF(and(OFLAG2(DOOR),(OPENBT+TCHBT)).NE.OPENBT) RETURN
- X OFLAG2(DOOR)=and( or(OFLAG2(DOOR),TCHBT), not(OPENBT))
- X CALL RSPEAK(22)
- XC !SLAM AND BOLT DOOR.
- X RETURN
- XC
- XC R5-- MAZE11. DESCRIBE STATE OF GRATING.
- XC
- X5000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(23)
- XC !DESCRIBE.
- X I=24
- XC !ASSUME LOCKED.
- X IF(GRUNLF) I=26
- XC !UNLOCKED?
- X IF(QOPEN(GRATE)) I=25
- XC !OPEN?
- X CALL RSPEAK(I)
- XC !DESCRIBE GRATE.
- X RETURN
- XC
- XC R6-- CLEARING. DESCRIBE CLEARING, MOVE LEAVES.
- XC
- X6000 IF(PRSA.NE.LOOKW) GO TO 6500
- XC !LOOK?
- X CALL RSPEAK(27)
- XC !DESCRIBE.
- X IF(RVCLR.EQ.0) RETURN
- XC !LEAVES MOVED?
- X I=28
- XC !YES, ASSUME GRATE CLOSED.
- X IF(QOPEN(GRATE)) I=29
- XC !OPEN?
- X CALL RSPEAK(I)
- XC !DESCRIBE GRATE.
- X RETURN
- XC
- X6500 IF((RVCLR.NE.0).OR.(QHERE(LEAVE,CLEAR).AND.
- X & ((PRSA.NE.MOVEW).OR.(PRSO.NE.LEAVE)))) RETURN
- X CALL RSPEAK(30)
- XC !MOVE LEAVES, REVEAL GRATE.
- X RVCLR=1
- XC !INDICATE LEAVES MOVED.
- X RETURN
- X`0C
- XC RAPPL1, PAGE 4
- XC
- XC R7-- RESERVOIR SOUTH. DESCRIPTION DEPENDS ON LOW TIDE FLAG.
- XC
- X7000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=31
- XC !ASSUME FULL.
- X IF(LWTIDF) I=32
- XC !IF LOW TIDE, EMPTY.
- X CALL RSPEAK(I)
- XC !DESCRIBE.
- X CALL RSPEAK(33)
- XC !DESCRIBE EXITS.
- X RETURN
- XC
- XC R8-- RESERVOIR. STATE DEPENDS ON LOW TIDE FLAG.
- XC
- X8000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=34
- XC !ASSUME FULL.
- X IF(LWTIDF) I=35
- XC !IF LOW TIDE, EMTPY.
- X CALL RSPEAK(I)
- XC !DESCRIBE.
- X RETURN
- XC
- XC R9-- RESERVOIR NORTH. ALSO DEPENDS ON LOW TIDE FLAG.
- XC
- X9000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=36
- XC !YOU GET THE IDEA.
- X IF(LWTIDF) I=37
- X CALL RSPEAK(I)
- X CALL RSPEAK(38)
- X RETURN
- XC
- XC R10-- GLACIER ROOM. STATE DEPENDS ON MELTED, VANISHED FLAGS.
- XC
- X10000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(39)
- XC !BASIC DESCRIPTION.
- X I=0
- XC !ASSUME NO CHANGES.
- X IF(GLACMF) I=40
- XC !PARTIAL MELT?
- X IF(GLACRF) I=41
- XC !COMPLETE MELT?
- X CALL RSPEAK(I)
- XC !DESCRIBE.
- X RETURN
- XC
- XC R11-- FOREST ROOM
- XC
- X11000 IF(PRSA.EQ.WALKIW) CFLAG(CEVFOR)=.TRUE.
- XC !IF WALK IN, BIRDIE.
- X RETURN
- XC
- XC R12-- MIRROR ROOM. STATE DEPENDS ON MIRROR INTACT.
- XC
- X12000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(42)
- XC !DESCRIBE.
- X IF(MIRRMF) CALL RSPEAK(43)
- XC !IF BROKEN, NASTY REMARK.
- X RETURN
- X`0C
- XC RAPPL1, PAGE 5
- XC
- XC R13-- CAVE2 ROOM. BLOW OUT CANDLES WITH 50% PROBABILITY.
- XC
- X13000 IF(PRSA.NE.WALKIW) RETURN
- XC !WALKIN?
- X IF(PROB(50,50).OR.(OADV(CANDL).NE.WINNER).OR.
- X & .NOT.QON(CANDL)) RETURN
- X OFLAG1(CANDL)=and(OFLAG1(CANDL), not(ONBT))
- X CALL RSPEAK(47)
- XC !TELL OF WINDS.
- X CFLAG(CEVCND)=.FALSE.
- XC !HALT CANDLE COUNTDOWN.
- X RETURN
- XC
- XC R14-- BOOM ROOM. BLOW HIM UP IF CARRYING FLAMING OBJECT.
- XC
- X14000 J=ODESC2(CANDL)
- XC !ASSUME CANDLE.
- X IF((OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 14100
- X J=ODESC2(TORCH)
- XC !ASSUME TORCH.
- X IF((OADV(TORCH).EQ.WINNER).AND.QON(TORCH)) GO TO 14100
- X J=ODESC2(MATCH)
- X IF((OADV(MATCH).EQ.WINNER).AND.QON(MATCH)) GO TO 14100
- X RETURN
- XC !SAFE
- XC
- X14100 IF(PRSA.NE.TRNONW) GO TO 14200
- XC !TURN ON?
- X CALL RSPSUB(294,J)
- XC !BOOM
- XC !
- X CALL JIGSUP(44)
- X RETURN
- XC
- X14200 IF(PRSA.NE.WALKIW) RETURN
- XC !WALKIN?
- X CALL RSPSUB(295,J)
- XC !BOOM
- XC !
- X CALL JIGSUP(44)
- X RETURN
- XC
- XC R15-- NO-OBJS. SEE IF EMPTY HANDED, SCORE LIGHT SHAFT.
- XC
- X15000 EMPTHF=.TRUE.
- XC !ASSUME TRUE.
- X DO 15100 I=1,OLNT
- XC !SEE IF CARRYING.
- X IF(OADV(I).EQ.WINNER) EMPTHF=.FALSE.
- X15100 CONTINUE
- XC
- X IF((HERE.NE.BSHAF).OR.(.NOT.LIT(HERE))) RETURN
- X CALL SCRUPD(LTSHFT)
- XC !SCORE LIGHT SHAFT.
- X LTSHFT=0
- XC !NEVER AGAIN.
- X RETURN
- X`0C
- XC RAPPL1, PAGE 6
- XC
- XC R16-- MACHINE ROOM. DESCRIBE MACHINE.
- XC
- X16000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=46
- XC !ASSUME LID CLOSED.
- X IF(QOPEN(MACHI)) I=12
- XC !IF OPEN, OPEN.
- X CALL RSPSUB(45,I)
- XC !DESCRIBE.
- X RETURN
- XC
- XC R17-- BAT ROOM. UNLESS CARRYING GARLIC, FLY AWAY WITH ME...
- XC
- X17000 IF(PRSA.NE.LOOKW) GO TO 17500
- XC !LOOK?
- X CALL RSPEAK(48)
- XC !DESCRIBE ROOM.
- X IF(OADV(GARLI).EQ.WINNER) CALL RSPEAK(49)
- XC !BAT HOLDS NOSE.
- X RETURN
- XC
- X17500 IF((PRSA.NE.WALKIW).OR.(OADV(GARLI).EQ.WINNER)) RETURN
- X CALL RSPEAK(50)
- XC !TIME TO FLY, JACK.
- X F=MOVETO(BATDRP(RND(9)+1),WINNER)
- XC !SELECT RANDOM DEST.
- X RAPPL1=.FALSE.
- XC !INDICATE NEW DESC NEEDED.
- X RETURN
- XC
- XC R18-- DOME ROOM. STATE DEPENDS ON WHETHER ROPE TIED TO RAILING.
- XC
- X18000 IF(PRSA.NE.LOOKW) GO TO 18500
- XC !LOOK?
- X CALL RSPEAK(51)
- XC !DESCRIBE.
- X IF(DOMEF) CALL RSPEAK(52)
- XC !IF ROPE, DESCRIBE.
- X RETURN
- XC
- X18500 IF(PRSA.EQ.LEAPW) CALL JIGSUP(53)
- XC !DID HE JUMP???
- X RETURN
- XC
- XC R19-- TORCH ROOM. ALSO DEPENDS ON WHETHER ROPE TIED TO RAILING.
- XC
- X19000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(54)
- XC !DESCRIBE.
- X IF(DOMEF) CALL RSPEAK(55)
- XC !IF ROPE, DESCRIBE.
- X RETURN
- XC
- XC R20-- CAROUSEL ROOM. SPIN HIM OR KILL HIM.
- XC
- X20000 IF(PRSA.NE.LOOKW) GO TO 20500
- XC !LOOK?
- X CALL RSPEAK(56)
- XC !DESCRIBE.
- X IF(.NOT.CAROFF) CALL RSPEAK(57)
- XC !IF NOT FLIPPED, SPIN.
- X RETURN
- XC
- X20500 IF((PRSA.EQ.WALKIW).AND.CAROZF) CALL JIGSUP(58)
- XC !WALKED IN.
- X RETURN
- X`0C
- XC RAPPL1, PAGE 7
- XC
- XC R21-- LLD ROOM. HANDLE EXORCISE, DESCRIPTIONS.
- XC
- X21000 IF(PRSA.NE.LOOKW) GO TO 21500
- XC !LOOK?
- X CALL RSPEAK(59)
- XC !DESCRIBE.
- X IF(.NOT.LLDF) CALL RSPEAK(60)
- XC !IF NOT VANISHED, GHOSTS.
- X RETURN
- XC
- X21500 IF(PRSA.NE.EXORCW) RETURN
- XC !EXORCISE?
- X IF((OADV(BELL).EQ.WINNER).AND.(OADV(BOOK).EQ.WINNER).AND.
- X & (OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 21600
- X CALL RSPEAK(62)
- XC !NOT EQUIPPED.
- X RETURN
- XC
- X21600 IF(QHERE(GHOST,HERE)) GO TO 21700
- XC !GHOST HERE?
- X CALL JIGSUP(61)
- XC !NOPE, EXORCISE YOU.
- X RETURN
- XC
- X21700 CALL NEWSTA(GHOST,63,0,0,0)
- XC !VANISH GHOST.
- X LLDF=.TRUE.
- XC !OPEN GATE.
- X RETURN
- XC
- XC R22-- LLD2-ROOM. IS HIS HEAD ON A POLE?
- XC
- X22000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(64)
- XC !DESCRIBE.
- X IF(ONPOLF) CALL RSPEAK(65)
- XC !ON POLE?
- X RETURN
- XC
- XC R23-- DAM ROOM. DESCRIBE RESERVOIR, PANEL.
- XC
- X23000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(66)
- XC !DESCRIBE.
- X I=67
- X IF(LWTIDF) I=68
- X CALL RSPEAK(I)
- XC !DESCRIBE RESERVOIR.
- X CALL RSPEAK(69)
- XC !DESCRIBE PANEL.
- X IF(GATEF) CALL RSPEAK(70)
- XC !BUBBLE IS GLOWING.
- X RETURN
- XC
- XC R24-- TREE ROOM
- XC
- X24000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(660)
- XC !DESCRIBE.
- X I=661
- XC !SET FLAG FOR BELOW.
- X DO 24200 J=1,OLNT
- XC !DESCRIBE OBJ IN FORE3.
- X IF(.NOT.QHERE(J,FORE3).OR.(J.EQ.FTREE)) GO TO 24200
- X CALL RSPEAK(I)
- XC !SET STAGE,
- X I=0
- X CALL RSPSUB(502,ODESC2(J))
- XC !DESCRIBE.
- X24200 CONTINUE
- X RETURN
- X`0C
- XC RAPPL1, PAGE 8
- XC
- XC R25-- CYCLOPS-ROOM. DEPENDS ON CYCLOPS STATE, ASLEEP FLAG, MAGIC FLAG.
- XC
- X25000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(606)
- XC !DESCRIBE.
- X I=607
- XC !ASSUME BASIC STATE.
- X IF(RVCYC.GT.0) I=608
- XC !>0? HUNGRY.
- X IF(RVCYC.LT.0) I=609
- XC !<0? THIRSTY.
- X IF(CYCLOF) I=610
- XC !ASLEEP?
- X IF(MAGICF) I=611
- XC !GONE?
- X CALL RSPEAK(I)
- XC !DESCRIBE.
- X IF(.NOT.CYCLOF .AND.(RVCYC.NE.0))
- X & CALL RSPEAK(193+IABS(RVCYC))
- X RETURN
- XC
- XC R26-- BANK BOX ROOM.
- XC
- X26000 IF(PRSA.NE.WALKIW) RETURN
- XC !SURPRISE HIM.
- X DO 26100 I=1,8,2
- XC !SCOLRM DEPENDS ON
- X IF(FROMDR.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1)
- X26100 CONTINUE
- XC !ENTRY DIRECTION.
- X RETURN
- XC
- XC R27-- TREASURE ROOM.
- XC
- X27000 IF((PRSA.NE.WALKIW).OR. .NOT.THFACT)
- X & RETURN
- X IF(OROOM(THIEF).NE.HERE)
- X & CALL NEWSTA(THIEF,82,HERE,0,0)
- X THFPOS=HERE
- XC !RESET SEARCH PATTERN.
- X OFLAG2(THIEF)=or(OFLAG2(THIEF),FITEBT)
- X IF(OROOM(CHALI).EQ.HERE)
- X & OFLAG1(CHALI)=and(OFLAG1(CHALI),not(TAKEBT))
- XC
- XC VANISH EVERYTHING IN ROOM
- XC
- X J=0
- XC !ASSUME NOTHING TO VANISH.
- X DO 27200 I=1,OLNT
- X IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR..NOT.QHERE(I,HERE))
- X & GO TO 27200
- X J=83
- XC !FLAG BYEBYE.
- X OFLAG1(I)=and(OFLAG1(I),not(VISIBT))
- X27200 CONTINUE
- X CALL RSPEAK(J)
- XC !DESCRIBE.
- X RETURN
- XC
- XC R28-- CLIFF FUNCTION. SEE IF CARRYING INFLATED BOAT.
- XC
- X28000 DEFLAF=OADV(RBOAT).NE.WINNER
- XC !TRUE IF NOT CARRYING.
- X RETURN
- X`0C
- XC RAPPL1, PAGE 9
- XC
- XC R29-- RIVR4 ROOM. PLAY WITH BUOY.
- XC
- X29000 IF(.NOT.BUOYF.OR.(OADV(BUOY).NE.WINNER)) RETURN
- X CALL RSPEAK(84)
- XC !GIVE HINT,
- X BUOYF=.FALSE.
- XC !THEN DISABLE.
- X RETURN
- XC
- XC R30-- OVERFALLS. DOOM.
- XC
- X30000 IF(PRSA.NE.LOOKW) CALL JIGSUP(85)
- XC !OVER YOU GO.
- X RETURN
- XC
- XC R31-- BEACH ROOM. DIG A HOLE.
- XC
- X31000 IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
- X RVSND=RVSND+1
- XC !INCREMENT DIG STATE.
- X GO TO (31100,31100,31100,31400,31500),RVSND
- XC !PROCESS STATE.
- X CALL BUG(2,RVSND)
- XC
- X31100 CALL RSPEAK(85+RVSND)
- XC !1-3... DISCOURAGE HIM.
- X RETURN
- XC
- X31400 I=89
- XC !ASSUME DISCOVERY.
- X IF(and(OFLAG1(STATU),VISIBT).NE.0) I=88
- X CALL RSPEAK(I)
- X OFLAG1(STATU)=or(OFLAG1(STATU),VISIBT)
- X RETURN
- XC
- X31500 RVSND=0
- XC !5... SAND COLLAPSES
- X CALL JIGSUP(90)
- XC !AND SO DOES HE.
- X RETURN
- XC
- XC R32-- TCAVE ROOM. DIG A HOLE IN GUANO.
- XC
- X32000 IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
- X I=91
- XC !ASSUME NO GUANO.
- X IF(.NOT. QHERE(GUANO,HERE)) GO TO 32100
- XC !IS IT HERE?
- X RVGUA=MIN0(4,RVGUA+1)
- XC !YES, SET NEW STATE.
- X I=91+RVGUA
- XC !GET NASTY REMARK.
- X32100 CALL RSPEAK(I)
- XC !DESCRIBE.
- X RETURN
- XC
- XC R33-- FALLS ROOM
- XC
- X33000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(96)
- XC !DESCRIBE.
- X I=97
- XC !ASSUME NO RAINBOW.
- X IF(RAINBF) I=98
- XC !GOT ONE?
- X CALL RSPEAK(I)
- XC !DESCRIBE.
- X RETURN
- X`0C
- XC RAPPL1, PAGE 10
- XC
- XC R34-- LEDGE FUNCTION. LEDGE CAN COLLAPSE.
- XC
- X34000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(100)
- XC !DESCRIBE.
- X I=102
- XC !ASSUME SAFE ROOM OK.
- X IF(and(RFLAG(MSAFE),RMUNG).NE.0) I=101
- X CALL RSPEAK(I)
- XC !DESCRIBE.
- X RETURN
- XC
- XC R35-- SAFE ROOM. STATE DEPENDS ON WHETHER SAFE BLOWN.
- XC
- X35000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(104)
- XC !DESCRIBE.
- X I=105
- XC !ASSUME OK.
- X IF(SAFEF) I=106
- XC !BLOWN?
- X CALL RSPEAK(I)
- XC !DESCRIBE.
- X RETURN
- XC
- XC R36-- MAGNET ROOM. DESCRIBE, CHECK FOR SPINDIZZY DOOM.
- XC
- X36000 IF(PRSA.NE.LOOKW) GO TO 36500
- XC !LOOK?
- X CALL RSPEAK(107)
- XC !DESCRIBE.
- X RETURN
- XC
- X36500 IF((PRSA.NE.WALKIW).OR. .NOT.CAROFF) RETURN
- XC !WALKIN ON FLIPPED?
- X IF(CAROZF) GO TO 36600
- XC !ZOOM?
- X CALL RSPEAK(108)
- XC !NO, SPIN HIS COMPASS.
- X RETURN
- XC
- X36600 I=58
- XC !SPIN HIS INSIDES.
- X IF(WINNER.NE.PLAYER) I=99
- XC !SPIN ROBOT.
- X CALL JIGSUP(I)
- XC !DEAD.
- X RETURN
- XC
- XC R37-- CAGE ROOM. IF SOLVED CAGE, MOVE TO OTHER CAGE ROOM.
- XC
- X37000 IF(CAGESF) F=MOVETO(CAGER,WINNER)
- XC !IF SOLVED, MOVE.
- X RETURN
- XC
- X END
- $ CALL UNPACK [.SRC]ROOMS.FOR;1 105224191
- $ create 'f'
- XC
- XC ROOMS
- XC
- X COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200),
- X &`09`09RACTIO(200),RVAL(200),RFLAG(200)
- X INTEGER RRAND(200)
- X EQUIVALENCE (RVAL,RRAND)
- X INTEGER EQR(200,5)
- X EQUIVALENCE (RDESC1, EQR)
- $ CALL UNPACK [.SRC]ROOMS.LIB;1 319174142
- $ create 'f'
- XC
- XC SCREEN OF LIGHT
- XC
- X COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC
- X COMMON /SCREEN/ SCOLDR(8),SCOLWL(12)
- $ CALL UNPACK [.SRC]SCREEN.LIB;1 168628393
- $ create 'f'
- XC SOBJS- SIMPLE OBJECTS PROCESSOR
- XC OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
- XC MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC DECLARATIONS
- XC
- X LOGICAL FUNCTION SOBJS(RI,ARG)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL QOPEN
- X LOGICAL MOVETO,OPNCLS,LIT
- X LOGICAL QHERE,F
- X
- X INCLUDE 'PARSER.LIB'
- X INCLUDE 'GAMESTATE.LIB'
- X INCLUDE 'STATE.LIB'
- X INCLUDE 'ROOMS.LIB'
- X INCLUDE 'RFLAG.LIB'
- X INCLUDE 'RINDEX.LIB'
- X INCLUDE 'OBJECTS.LIB'
- X INCLUDE 'OFLAGS.LIB'
- X INCLUDE 'OINDEX.LIB'
- X INCLUDE 'CLOCK.LIB'
- X
- X INCLUDE 'VILLIANS.LIB'
- X INCLUDE 'ADVERS.LIB'
- X INCLUDE 'VERBS.LIB'
- X INCLUDE 'FLAGS.LIB'
- XC
- XC FUNCTIONS AND DATA
- XC
- X QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
- X`0C
- XC SOBJS, PAGE 2
- XC
- X IF(PRSO.GT.220) GO TO 5
- X IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
- X5 IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
- X AV=AVEHIC(WINNER)
- X SOBJS=.TRUE.
- XC
- X GO TO ( 1000, 3000, 4000, 6000, 7000, 8000, 9000,
- X & 13000,14000,16000,17000,
- X & 21000,23000,24000,27000,28000,29000,30000,
- X & 31000,33000,34000,36000,37000,38000,
- X & 41000,42000,43000,44000,46000,
- X & 53000,56000)
- X & RI
- X CALL BUG(6,RI)
- XC
- XC RETURN HERE TO DECLARE FALSE RESULT
- XC
- X10 SOBJS=.FALSE.
- X RETURN
- X`0C
- XC SOBJS, PAGE 3
- XC
- XC O1-- GUNK FUNCTION
- XC
- X1000 IF(OCAN(GUNK).EQ.0) GO TO 10
- XC !NOT INSIDE? F
- X CALL NEWSTA(GUNK,122,0,0,0)
- XC !FALLS APART.
- X RETURN
- XC
- XC O2-- TROPHY CASE
- XC
- X3000 IF(PRSA.NE.TAKEW) GO TO 10
- XC !TAKE?
- X CALL RSPEAK(128)
- XC !CANT.
- X RETURN
- XC
- XC O3-- BOTTLE FUNCTION
- XC
- X4000 IF(PRSA.NE.THROWW) GO TO 4100
- XC !THROW?
- X CALL NEWSTA(PRSO,129,0,0,0)
- XC !BREAKS.
- X RETURN
- XC
- X4100 IF(PRSA.NE.MUNGW) GO TO 10
- XC !MUNG?
- X CALL NEWSTA(PRSO,131,0,0,0)
- XC !BREAKS.
- X RETURN
- X`0C
- XC SOBJS, PAGE 4
- XC
- XC O4-- ROPE FUNCTION
- XC
- X6000 IF(HERE.EQ.DOME) GO TO 6100
- XC !IN DOME?
- X DOMEF=.FALSE.
- XC !NO,
- X IF(PRSA.NE.UNTIEW) GO TO 6050
- XC !UNTIE?
- X CALL RSPEAK(134)
- XC !CANT
- X RETURN
- XC
- X6050 IF(PRSA.NE.TIEW) GO TO 10
- XC !TIE?
- X CALL RSPEAK(135)
- XC !CANT TIE
- X RETURN
- XC
- X6100 IF((PRSA.NE.TIEW).OR.(PRSI.NE.RAILI)) GO TO 6200
- X IF(DOMEF) GO TO 6150
- XC !ALREADY TIED?
- X DOMEF=.TRUE.
- XC !NO, TIE IT.
- X OFLAG1(ROPE)=or(OFLAG1(ROPE),NDSCBT)
- X OFLAG2(ROPE)=or(OFLAG2(ROPE),CLMBBT)
- X CALL NEWSTA(ROPE,137,DOME,0,0)
- X RETURN
- XC
- X6150 CALL RSPEAK(136)
- XC !DUMMY.
- X RETURN
- XC
- X6200 IF(PRSA.NE.UNTIEW) GO TO 6300
- XC !UNTIE?
- X IF(DOMEF) GO TO 6250
- XC !TIED?
- X CALL RSPEAK(134)
- XC !NO, DUMMY.
- X RETURN
- XC
- X6250 DOMEF=.FALSE.
- XC !YES, UNTIE IT.
- X OFLAG1(ROPE)=and(OFLAG1(ROPE), not(NDSCBT))
- X OFLAG2(ROPE)=and(OFLAG2(ROPE), not(CLMBBT))
- X CALL RSPEAK(139)
- X RETURN
- XC
- X6300 IF(DOMEF.OR.(PRSA.NE.DROPW)) GO TO 6400
- XC !DROP & UNTIED?
- X CALL NEWSTA(ROPE,140,MTORC,0,0)
- XC !YES, DROP.
- X RETURN
- XC
- X6400 IF((PRSA.NE.TAKEW).OR. .NOT.DOMEF) GO TO 10
- X CALL RSPEAK(141)
- XC !TAKE & TIED.
- X RETURN
- XC
- XC O5-- SWORD FUNCTION
- XC
- X7000 IF((PRSA.EQ.TAKEW).AND.(WINNER.EQ.PLAYER))
- X & SWDACT=.TRUE.
- X GO TO 10
- XC
- XC O6-- LANTERN
- XC
- X8000 IF(PRSA.NE.THROWW) GO TO 8100
- XC !THROW?
- X CALL NEWSTA(LAMP,0,0,0,0)
- XC !KILL LAMP,
- X CALL NEWSTA(BLAMP,142,HERE,0,0)
- XC !REPLACE WITH BROKEN.
- X RETURN
- XC
- X8100 IF(PRSA.EQ.TRNONW) CFLAG(CEVLNT)=.TRUE.
- X IF(PRSA.EQ.TRNOFW) CFLAG(CEVLNT)=.FALSE.
- X GO TO 10
- XC
- XC O7-- RUG FUNCTION
- XC
- X9000 IF(PRSA.NE.RAISEW) GO TO 9100
- XC !RAISE?
- X CALL RSPEAK(143)
- XC !CANT
- X RETURN
- XC
- X9100 IF(PRSA.NE.TAKEW) GO TO 9200
- XC !TAKE?
- X CALL RSPEAK(144)
- XC !CANT
- X RETURN
- XC
- X9200 IF(PRSA.NE.MOVEW) GO TO 9300
- XC !MOVE?
- X CALL RSPEAK(145+ORRUG)
- X ORRUG=1
- X OFLAG1(DOOR)=or(OFLAG1(DOOR),VISIBT)
- X RETURN
- XC
- X9300 IF((PRSA.NE.LOOKUW).OR.(ORRUG.NE.0).OR.
- X & QOPEN(DOOR)) GO TO 10
- X CALL RSPEAK(345)
- X RETURN
- X`0C
- XC SOBJS, PAGE 5
- XC
- XC O8-- SKELETON
- XC
- X13000 I=ROBRM(HERE,100,LLD2,0,0)+ROBADV(WINNER,LLD2,0,0)
- X IF(I.NE.0) CALL RSPEAK(162)
- XC !IF ROBBED, SAY SO.
- X RETURN
- XC
- XC O9-- MIRROR
- XC
- X14000 IF(MIRRMF.OR.(PRSA.NE.RUBW)) GO TO 14500
- X MROOM=xor(HERE,1)
- X DO 14100 I=1,OLNT
- XC !INTERCHANGE OBJS.
- X IF(OROOM(I).EQ.HERE) OROOM(I)=-1
- X IF(OROOM(I).EQ.MROOM) OROOM(I)=HERE
- X IF(OROOM(I).EQ.-1) OROOM(I)=MROOM
- X14100 CONTINUE
- X F=MOVETO(MROOM,WINNER)
- X CALL RSPEAK(163)
- XC !SHAKE WORLD.
- X RETURN
- XC
- X14500 IF((PRSA.NE.LOOKW).AND.(PRSA.NE.LOOKIW).AND.
- X & (PRSA.NE.EXAMIW)) GO TO 14600
- X I=164
- XC !MIRROR OK.
- X IF(MIRRMF) I=165
- XC !MIRROR DEAD.
- X CALL RSPEAK(I)
- X RETURN
- XC
- X14600 IF(PRSA.NE.TAKEW) GO TO 14700
- XC !TAKE?
- X CALL RSPEAK(166)
- XC !JOKE.
- X RETURN
- XC
- X14700 IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
- X I=167
- XC !MIRROR BREAKS.
- X IF(MIRRMF) I=168
- XC !MIRROR ALREADY BROKEN.
- X MIRRMF=.TRUE.
- X BADLKF=.TRUE.
- X CALL RSPEAK(I)
- X RETURN
- X`0C
- XC SOBJS, PAGE 6
- XC
- XC O10-- DUMBWAITER
- XC
- X16000 IF(PRSA.NE.RAISEW) GO TO 16100
- XC !RAISE?
- X IF(CAGETF) GO TO 16400
- XC !ALREADY AT TOP?
- X CALL NEWSTA(TBASK,175,TSHAF,0,0)
- XC !NO, RAISE BASKET.
- X CALL NEWSTA(FBASK,0,BSHAF,0,0)
- X CAGETF=.TRUE.
- XC !AT TOP.
- X RETURN
- XC
- X16100 IF(PRSA.NE.LOWERW) GO TO 16200
- XC !LOWER?
- X IF(.NOT.CAGETF) GO TO 16400
- XC !ALREADY AT BOTTOM?
- X CALL NEWSTA(TBASK,176,BSHAF,0,0)
- XC !NO, LOWER BASKET.
- X CALL NEWSTA(FBASK,0,TSHAF,0,0)
- X CAGETF=.FALSE.
- X IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
- XC !IF DARK, DIE.
- X RETURN
- XC
- X16200 IF((PRSO.NE.FBASK).AND.(PRSI.NE.FBASK)) GO TO 16300
- X CALL RSPEAK(130)
- XC !WRONG BASKET.
- X RETURN
- XC
- X16300 IF(PRSA.NE.TAKEW) GO TO 10
- XC !TAKE?
- X CALL RSPEAK(177)
- XC !JOKE.
- X RETURN
- XC
- X16400 CALL RSPEAK(125+RND(3))
- XC !DUMMY.
- X RETURN
- XC
- XC O11-- GHOST FUNCTION
- XC
- X17000 I=178
- XC !ASSUME DIRECT.
- X IF(PRSO.NE.GHOST) I=179
- XC !IF NOT, INDIRECT.
- X CALL RSPEAK(I)
- X RETURN
- XC !SPEAK AND EXIT.
- X`0C
- XC SOBJS, PAGE 7
- XC
- XC O12-- TUBE
- XC
- X21000 IF((PRSA.NE.PUTW).OR.(PRSI.NE.TUBE)) GO TO 10
- X CALL RSPEAK(186)
- XC !CANT PUT BACK IN.
- X RETURN
- XC
- XC O13-- CHALICE
- XC
- X23000 IF((PRSA.NE.TAKEW).OR.(OCAN(PRSO).NE.0).OR.
- X & (OROOM(PRSO).NE.TREAS).OR.(OROOM(THIEF).NE.TREAS).OR.
- X & (and(OFLAG2(THIEF),FITEBT).EQ.0).OR.
- X & .NOT. THFACT) GO TO 10
- X CALL RSPEAK(204)
- XC !CANT TAKE.
- X RETURN
- XC
- XC O14-- PAINTING
- XC
- X24000 IF(PRSA.NE.MUNGW) GO TO 10
- XC !MUNG?
- X CALL RSPEAK(205)
- XC !DESTROY PAINTING.
- X OFVAL(PRSO)=0
- X OTVAL(PRSO)=0
- X ODESC1(PRSO)=207
- X ODESC2(PRSO)=206
- X RETURN
- X`0C
- XC SOBJS, PAGE 8
- XC
- XC O15-- BOLT
- XC
- X27000 IF(PRSA.NE.TURNW) GO TO 10
- XC !TURN BOLT?
- X IF(PRSI.NE.WRENC) GO TO 27500
- XC !WITH WRENCH?
- X IF(GATEF) GO TO 27100
- XC !PROPER BUTTON PUSHED?
- X CALL RSPEAK(210)
- XC !NO, LOSE.
- X RETURN
- XC
- X27100 IF(LWTIDF) GO TO 27200
- XC !LOW TIDE NOW?
- X LWTIDF=.TRUE.
- XC !NO, EMPTY DAM.
- X CALL RSPEAK(211)
- X OFLAG2(COFFI)=and(OFLAG2(COFFI), not(SCRDBT))
- X OFLAG1(TRUNK)=or(OFLAG1(TRUNK),VISIBT)
- X RFLAG(RESER)=and(or(RFLAG(RESER),RLAND)
- X & ,not(RWATER+RSEEN))
- X RETURN
- XC
- X27200 LWTIDF=.FALSE.
- XC !YES, FILL DAM.
- X CALL RSPEAK(212)
- X IF(QHERE(TRUNK,RESER))
- X & OFLAG1(TRUNK)=and(OFLAG1(TRUNK), not(VISIBT))
- X RFLAG(RESER)=and(or(RFLAG(RESER),RWATER) ,not(RLAND))
- X RETURN
- XC
- X27500 CALL RSPSUB(299,ODI2)
- XC !NOT WITH THAT.
- X RETURN
- XC
- XC O16-- GRATING
- XC
- X28000 IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
- X IF(GRUNLF) GO TO 28200
- XC !UNLOCKED?
- X CALL RSPEAK(214)
- XC !NO, LOCKED.
- X RETURN
- XC
- X28200 I=215
- XC !UNLOCKED, VIEW FRM CLR.
- X IF(HERE.NE.CLEAR) I=216
- XC !VIEW FROM BELOW.
- X SOBJS=OPNCLS(GRATE,I,885)
- XC !OPEN/CLOSE.
- X RFLAG(MGRAT)=and(RFLAG(MGRAT), not(RLIGHT))
- X IF(QOPEN(GRATE)) RFLAG(MGRAT)=or(RFLAG(MGRAT),RLIGHT)
- X IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
- XC !IF DARK, DIE.
- X RETURN
- XC
- XC O17-- TRAP DOOR
- XC
- X29000 IF(HERE.NE.LROOM) GO TO 29100
- XC !FROM LIVING ROOM?
- X SOBJS=OPNCLS(DOOR,218,219)
- XC !OPEN/CLOSE.
- X RETURN
- XC
- X29100 IF(HERE.NE.CELLA) GO TO 10
- XC !FROM CELLAR?
- X IF((PRSA.NE.OPENW).OR.QOPEN(DOOR)) GO TO 29200
- X CALL RSPEAK(220)
- XC !CANT OPEN CLOSED DOOR.
- X RETURN
- XC
- X29200 SOBJS=OPNCLS(DOOR,0,22)
- XC !NORMAL OPEN/CLOSE.
- X RETURN
- XC
- XC O18-- DURABLE DOOR
- XC
- X30000 I=0
- XC !ASSUME NO APPL.
- X IF(PRSA.EQ.OPENW) I=221
- XC !OPEN?
- X IF(PRSA.EQ.BURNW) I=222
- XC !BURN?
- X IF(PRSA.EQ.MUNGW) I=223+RND(3)
- XC !MUNG?
- X IF(I.EQ.0) GO TO 10
- X CALL RSPEAK(I)
- X RETURN
- XC
- XC O19-- MASTER SWITCH
- XC
- X31000 IF(PRSA.NE.TURNW) GO TO 10
- XC !TURN?
- X IF(PRSI.NE.SCREW) GO TO 31500
- XC !WITH SCREWDRIVER?
- X IF(QOPEN(MACHI)) GO TO 31600
- XC !LID UP?
- X CALL RSPEAK(226)
- XC !NO, ACTIVATE.
- X IF(OCAN(COAL).NE.MACHI) GO TO 31400
- XC !COAL INSIDE?
- X CALL NEWSTA(COAL,0,0,0,0)
- XC !KILL COAL,
- X CALL NEWSTA(DIAMO,0,0,MACHI,0)
- XC !REPLACE WITH DIAMOND.
- X RETURN
- XC
- X31400 DO 31450 I=1,OLNT
- XC !KILL NONCOAL OBJECTS.
- X IF(OCAN(I).NE.MACHI) GO TO 31450
- XC !INSIDE MACHINE?
- X CALL NEWSTA(I,0,0,0,0)
- XC !KILL OBJECT AND CONTENTS.
- X CALL NEWSTA(GUNK,0,0,MACHI,0)
- XC !REDUCE TO GUNK.
- X31450 CONTINUE
- X RETURN
- XC
- X31500 CALL RSPSUB(300,ODI2)
- XC !CANT TURN WITH THAT.
- X RETURN
- XC
- X31600 CALL RSPEAK(227)
- XC !LID IS UP.
- X RETURN
- X`0C
- XC SOBJS, PAGE 9
- XC
- XC O20-- LEAK
- XC
- X33000 IF((PRSO.NE.LEAK).OR.(PRSA.NE.PLUGW).OR.(RVMNT.LE.0))
- X & GO TO 10
- X IF(PRSI.NE.PUTTY) GO TO 33100
- XC !WITH PUTTY?
- X RVMNT=-1
- XC !DISABLE LEAK.
- X CTICK(CEVMNT)=0
- X CALL RSPEAK(577)
- X RETURN
- XC
- X33100 CALL RSPSUB(301,ODI2)
- XC !CANT WITH THAT.
- X RETURN
- XC
- XC O21-- DROWNING BUTTONS
- XC
- X34000 IF(PRSA.NE.PUSHW) GO TO 10
- XC !PUSH?
- X GO TO (34100,34200,34300,34400),(PRSO-RBUTT+1)
- X GO TO 10
- XC !NOT A BUTTON.
- XC
- X34100 RFLAG(HERE)=xor(RFLAG(HERE),RLIGHT)
- X I=230
- X IF(and(RFLAG(HERE),RLIGHT).NE.0) I=231
- X CALL RSPEAK(I)
- X RETURN
- XC
- X34200 GATEF=.TRUE.
- XC !RELEASE GATE.
- X CALL RSPEAK(232)
- X RETURN
- XC
- X34300 GATEF=.FALSE.
- XC !INTERLOCK GATE.
- X CALL RSPEAK(232)
- X RETURN
- XC
- X34400 IF(RVMNT.NE.0) GO TO 34500
- XC !LEAK ALREADY STARTED?
- X CALL RSPEAK(233)
- XC !NO, START LEAK.
- X RVMNT=1
- X CTICK(CEVMNT)=-1
- X RETURN
- XC
- X34500 CALL RSPEAK(234)
- XC !BUTTON JAMMED.
- X RETURN
- XC
- XC O22-- INFLATABLE BOAT
- XC
- X36000 IF(PRSA.NE.INFLAW) GO TO 10
- XC !INFLATE?
- X IF(OROOM(IBOAT).NE.0) GO TO 36100
- XC !IN ROOM?
- X CALL RSPEAK(235)
- XC !NO, JOKE.
- X RETURN
- XC
- X36100 IF(PRSI.NE.PUMP) GO TO 36200
- XC !WITH PUMP?
- X CALL NEWSTA(IBOAT,0,0,0,0)
- XC !KILL DEFL BOAT,
- X CALL NEWSTA(RBOAT,236,HERE,0,0)
- XC !REPL WITH INF.
- X DEFLAF=.FALSE.
- X RETURN
- XC
- X36200 I=237
- XC !JOKES.
- X IF(PRSI.NE.LUNGS) I=303
- X CALL RSPSUB(I,ODI2)
- X RETURN
- XC
- XC O23-- DEFLATED BOAT
- XC
- X37000 IF(PRSA.NE.INFLAW) GO TO 37100
- XC !INFLATE?
- X CALL RSPEAK(238)
- XC !JOKE.
- X RETURN
- XC
- X37100 IF(PRSA.NE.PLUGW) GO TO 10
- XC !PLUG?
- X IF(PRSI.NE.PUTTY) GO TO 33100
- XC !WITH PUTTY?
- X CALL NEWSTA(IBOAT,239,OROOM(DBOAT),OCAN(DBOAT),OADV(DBOAT))
- X CALL NEWSTA(DBOAT,0,0,0,0)
- XC !KILL DEFL BOAT, REPL.
- X RETURN
- X`0C
- XC SOBJS, PAGE 10
- XC
- XC O24-- RUBBER BOAT
- XC
- X38000 IF(ARG.NE.0) GO TO 10
- XC !DISMISS READIN, OUT.
- X IF((PRSA.NE.BOARDW).OR.(OADV(STICK).NE.WINNER)) GO TO 38100
- X CALL NEWSTA(RBOAT,0,0,0,0)
- XC !KILL INFL BOAT,
- X CALL NEWSTA(DBOAT,240,HERE,0,0)
- XC !REPL WITH DEAD.
- X DEFLAF=.TRUE.
- X RETURN
- XC
- X38100 IF(PRSA.NE.INFLAW) GO TO 38200
- XC !INFLATE?
- X CALL RSPEAK(367)
- XC !YES, JOKE.
- X RETURN
- XC
- X38200 IF(PRSA.NE.DEFLAW) GO TO 10
- XC !DEFLATE?
- X IF(AV.EQ.RBOAT) GO TO 38300
- XC !IN BOAT?
- X IF(OROOM(RBOAT).EQ.0) GO TO 38400
- XC !ON GROUND?
- X CALL NEWSTA(RBOAT,0,0,0,0)
- XC !KILL INFL BOAT,
- X CALL NEWSTA(IBOAT,241,HERE,0,0)
- XC !REPL WITH DEFL.
- X DEFLAF=.TRUE.
- X RETURN
- XC
- X38300 CALL RSPEAK(242)
- XC !IN BOAT.
- X RETURN
- XC
- X38400 CALL RSPEAK(243)
- XC !NOT ON GROUND.
- X RETURN
- XC
- XC O25-- BRAIDED ROPE
- XC
- X41000 IF((PRSA.NE.TIEW).OR.(PRSO.NE.BROPE).OR.
- X & ((PRSI.NE.HOOK1).AND.(PRSI.NE.HOOK2)))
- X & GO TO 41500
- X BTIEF=PRSI
- XC !RECORD LOCATION.
- X CFLAG(CEVBAL)=.FALSE.
- XC !STALL ASCENT.
- X CALL RSPEAK(248)
- X RETURN
- XC
- X41500 IF((PRSA.NE.UNTIEW).OR.(PRSO.NE.BROPE)) GO TO 10
- X IF(BTIEF.NE.0) GO TO 41600
- XC !TIED UP?
- X CALL RSPEAK(249)
- XC !NO, JOKE.
- X RETURN
- XC
- X41600 CALL RSPEAK(250)
- X BTIEF=0
- XC !UNTIE.
- X CTICK(CEVBAL)=3
- XC !RESTART CLOCK.
- X CFLAG(CEVBAL)=.TRUE.
- X RETURN
- XC
- XC O26-- SAFE
- XC
- X42000 I=0
- XC !ASSUME UNPROCESSED.
- X IF(PRSA.EQ.TAKEW) I=251
- XC !TAKE?
- X IF((PRSA.EQ.OPENW).AND.SAFEF) I=253
- XC !OPEN AFTER BLAST?
- X IF((PRSA.EQ.OPENW).AND..NOT.SAFEF) I=254
- XC !OPEN BEFORE BLAST?
- X IF((PRSA.EQ.CLOSEW).AND.SAFEF) I=253
- XC !CLOSE AFTER?
- X IF((PRSA.EQ.CLOSEW).AND..NOT.SAFEF) I=255
- X IF(I.EQ.0) GO TO 10
- X CALL RSPEAK(I)
- X RETURN
- XC
- XC O27-- FUSE
- XC
- X43000 IF(PRSA.NE.BURNW) GO TO 10
- XC !BURN?
- X CALL RSPEAK(256)
- X CTICK(CEVFUS)=2
- XC !START COUNTDOWN.
- X RETURN
- XC
- XC O28-- GNOME
- XC
- X44000 IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 44500
- X IF(OTVAL(PRSO).EQ.0) GO TO 44100
- XC !TREASURE?
- X CALL RSPSUB(257,ODO2)
- XC !YES, GET DOOR.
- X CALL NEWSTA(PRSO,0,0,0,0)
- X CALL NEWSTA(GNOME,0,0,0,0)
- XC !VANISH GNOME.
- X GNODRF=.TRUE.
- X RETURN
- XC
- X44100 CALL RSPSUB(258,ODO2)
- XC !NO, LOSE OBJECT.
- X CALL NEWSTA(PRSO,0,0,0,0)
- X RETURN
- XC
- X44500 CALL RSPEAK(259)
- XC !NERVOUS GNOME.
- X IF(.NOT.GNOMEF) CTICK(CEVGNO)=5
- XC !SCHEDULE BYEBYE.
- X GNOMEF=.TRUE.
- X RETURN
- XC
- XC O29-- COKE BOTTLES
- XC
- X46000 IF((PRSA.NE.THROWW).AND.(PRSA.NE.MUNGW)) GO TO 10
- X CALL NEWSTA(PRSO,262,0,0,0)
- XC !MUNG BOTTLES.
- X RETURN
- X`0C
- XC SOBJS, PAGE 11
- XC
- XC
- XC O30-- ROBOT
- XC
- X53000 IF(PRSA.NE.GIVEW) GO TO 53200
- XC !GIVE?
- X CALL NEWSTA(PRSO,0,0,0,AROBOT)
- XC !PUT ON ROBOT.
- X CALL RSPSUB(302,ODO2)
- X RETURN
- XC
- X53200 IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
- X CALL NEWSTA(ROBOT,285,0,0,0)
- +-+-+-+-+-+-+-+- END OF PART 28 +-+-+-+-+-+-+-+-
-