C NOW WE KNOW WHAT'S HAPPENING. LET'S TELL THE POOR SUCKER ABOUT IT. IF(DTOTAL.EQ.0)GOTO 2000 IF(DTOTAL.EQ.1)GOTO 75 PRINT 67,DTOTAL 67 FORMAT(/' There are ',I1,' threatening little dwarves in the' 1 ,' room with you!') GOTO 77 75 CALL RSPEAK(4) 77 IF(ATTACK.EQ.0)GOTO 2000 IF(DFLAG.EQ.2)DFLAG=3 C IF SAVED NOT = -1, HE BYPASSED THE "START" CALL. DWARVES GET *VERY* MAD! IF(SAVED.NE.-1)DFLAG=20 IF(ATTACK.EQ.1)GOTO 79 PRINT 78,ATTACK 78 FORMAT(/' ',I1,' of them throw knives at you!') K=6 82 IF(STICK.GT.1)GOTO 83 CALL RSPEAK(K+STICK) IF(STICK.EQ.0)GOTO 2000 GOTO 84 83 PRINT 68,STICK 68 FORMAT(/' ',I1,' of them get you!') 84 OLDLC2=LOC GOTO 94100 79 CALL RSPEAK(5) K=52 GOTO 82 C DESCRIBE THE CURRENT LOCATION AND (MAYBE) GET NEXT COMMAND. C PRINT TEXT FOR CURRENT LOC. 2000 IF(LOC.EQ.0)GOTO 94100 JKK=STEXT(LOC) IF(VERB.EQ.LOOK.OR.JKK.EQ.0.OR. 1 (.NOT.TERSE.AND.MOD(ABB(LOC),ABBNUM).EQ.0) )JKK=LTEXT(LOC) IF((FORCED(LOC).OR..NOT.DARK(0)).AND.LOC.NE.200)GOTO 2001 IF(LOC.NE.200.AND. (DARK(0).OR.PROP(LAMP).EQ.0 1 .OR..NOT.ATHAND(LAMP)) )GOTO 2003 IF(PROP(LAMP).EQ.0.OR..NOT.ATHAND(LAMP))GOTO 2020 IF(PCT(35))GOTO 94000 JKK=RTEXT(294) GOTO 2020 2003 IF(WZDARK.AND.PCT(35))GOTO 94000 JKK=RTEXT(16) 2001 IF(HOLDNG(BEAR).AND..NOT.DARK(0))CALL RSPEAK(141) 2020 CALL SPEAK(JKK) K=1 ABB(LOC)=ABB(LOC)+1 IF(.NOT.FORCED(LOC))GOTO 2022 CALL TRAVL(K) IF(KILLED)GOTO 94100 GOTO 2 2022 ABB(LOC)=ABB(LOC)-1 IF(LOC.EQ.Y2.AND.PCT(25).AND..NOT.CLOSNG)CALL RSPEAK(8) IF(LOC.EQ.147.AND.ABB(LOC).EQ.1)CALL RSPEAK(216) C SEE IF HE IS WASTING HIS BATTERIES OUT IN THE OPEN. K=0 IF(.NOT.OUTSID(LOC).OR.PROP(LAMP).EQ.0)GOTO 2030 K=WASTE+1 IF(K.LE.12)GOTO 2030 CALL RSPEAK(324) K=0 2030 WASTE=K C IF WUMPUS IS CHASING STOOGE, SEE IF WUMPUS GETS HIM. IF(CHASE.EQ.0)GOTO 2040 CHASE=CHASE+1 KK=CHASE/2 PROP(WUMPUS)=KK CALL MOVE(WUMPUS,LOC) IF(KK.LT.5)GOTO 2040 IF(DARK(0))CALL RSPEAK(270) CALL PSPEAK(WUMPUS,5) GOTO 94100 C CHECK FOR RADIATION POISONING. 2040 K=1 IF(OUTSID(LOC))K=3 HEALTH=MIN0(HEALTH+1,100) IF(.NOT.HERE(RADIUM).OR. 1 (PLACE(RADIUM).EQ.-SHIELD.AND..NOT.AJAR(SHIELD)) )GOTO 2045 HEALTH=HEALTH-K-7 IF(HEALTH.GE.60)GOTO 2045 CALL RSPEAK(391+(60-HEALTH)/10) IF(HEALTH.LE.0)GOTO 94100 C PRINT OUT DESCRIPTIONS OF OBJECTS AT THIS LOCATION. IF NOT CLOSING AND C PROPERTY VALUE IS NEGATIVE, TALLY OFF ANOTHER TREASURE. RUG IS SPECIAL C CASE; ONCE SEEN, ITS PROP IS 1 (DRAGON ON IT) TILL DRAGON IS KILLED. C SIMILARLY FOR CHAIN; PROP IS INITIALLY 1 (LOCKED TO BEAR). C LIKEWISE, FOR SWORD (MUST PROVE ELFIN ROYALTY). 2045 IF(OLDLOC.NE.188.OR.LOC.EQ.189.OR.LOC.EQ.188 1 .OR.PROP(BOOTH).NE.1)GOTO 2021 CALL MOVE(GNOME,0) PROP(BOOTH)=0 2021 IF(BLIND(0))GOTO 2100 ABB(LOC)=ABB(LOC)+1 I=ATLOC(LOC) 2004 IF(I.EQ.0)GOTO 2100 OBJ=I IF(OBJ.GT.MAXOBJ)OBJ=OBJ-MAXOBJ IF(OBJ.EQ.STEPS.AND.TOTING(NUGGET))GOTO 2008 IF(PROP(OBJ).GE.0)GOTO 2006 IF(CLOSED)GOTO 2008 PROP(OBJ)=0 IF(OBJ.EQ.RUG.OR.OBJ.EQ.CHAIN.OR.OBJ.EQ.SWORD 1 .OR.OBJ.EQ.CASK)PROP(OBJ)=1 IF(OBJ.EQ.CLOAK.OR.OBJ.EQ.RING)PROP(OBJ)=2 TALLY=TALLY-1 C IF REMAINING TREASURES TOO ELUSIVE, ZAP HIS LAMP. IF(TALLY.EQ.TALLY2.AND.TALLY.NE.0)LIMIT=MIN0(35,LIMIT) 2006 KK=PROP(OBJ) IF(OBJ.EQ.STEPS.AND.LOC.EQ.FIXED(STEPS))KK=1 CALL PSPEAK(OBJ,INTS(KK)) CALL LOOKIN(OBJ) 2008 I=LINK(I) GOTO 2004 C "I DON'T UNDERSTAND THAT!" 2060 SPK=CONFUZ(0) GOTO 2011 C "YOU CAN'T DO THAT!" (AN IMPOSSIBLE ACT, E.G., "OPEN SWORD", "FEED BOAT", ET 2070 SPK=NOWAY(0) GOTO 2011 2009 SPK=54 2011 IF(OBJ.EQ.0.OR.(OBJS(2).EQ.0.AND.IOBJS(2).EQ.0))GOTO 2015 CALL PSPEAK(OBJ,-1) CALL TNOUA(' ',5) BLKLIN=.FALSE. 2015 CALL RSPEAK(SPK) BLKLIN=.TRUE. 2100 RDFLAG=.FALSE. IF(OBJX.EQ.0)GOTO 2110 OBJX=OBJX+1 IF(OBJS(OBJX).EQ.0)OBJX=0 2110 IF(OBJX.GT.0.AND.OBJS(OBJX).NE.0)GOTO 2120 IF(IOBX.EQ.0)GOTO 2120 IOBX=IOBX+1 IF(IOBJS(IOBX).EQ.0)IOBX=0 IF(IOBX.NE.0.AND.OBJS(1).NE.0)OBJX=1 2120 IF(OBJX.GT.0.OR.IOBX.GT.0)GOTO 2600 IF(OBJS(1).NE.0)OBJX=1 IF(IOBJS(1).NE.0)IOBX=1 VRBX=VRBX+1 IF(VERBS(VRBX).NE.0)GOTO 2600 CALL CLRLIN RDFLAG=.TRUE. C CHECK IF THIS LOC IS ELIGIBLE FOR ANY HINTS. IF BEEN HERE LONG ENOUGH, C BRANCH TO HELP SECTION (ON LATER PAGE). HINTS ALL COME BACK HERE EVENTUALLY C TO FINISH THE LOOP. IGNORE "HINTS" < HNTMIN (SPECIAL STUFF, SEE DATABASE C NOTES). 2600 DO 2602 HINT=HNTMIN,HNTMAX IF(HINTED(HINT))GOTO 2602 IF(AND(LOCCON(LOC),BITS(HINT)).EQ.0)HINTLC(HINT)=-1 HINTLC(HINT)=HINTLC(HINT)+1 IF(HINTLC(HINT).GE.HINTS(HINT,1))GOTO 40000 2602 CONTINUE C gotta add 2603 as we want to "GO TO" here, but compiler C doesn't like it when we try to goto 2602 as it is part of a loop. 2603 CONTINUE C KICK THE RANDOM NUMBER GENERATOR JUST TO ADD VARIETY TO THE CHASE. ALSO, C IF CLOSING TIME, CHECK FOR ANY OBJECTS BEING TOTED WITH PROP < 0 AND SET C THE PROP TO -1-PROP. THIS WAY OBJECTS WON'T BE DESCRIBED UNTIL THEY'VE C BEEN PICKED UP AND PUT DOWN SEPARATE FROM THEIR RESPECTIVE PILES. DON'T C TICK CLOCK1 UNLESS WELL INTO CAVE (AND NOT AT Y2). IF(.NOT.CLOSED)GOTO 2605 IF(PROP(OYSTER).LT.0.AND.TOTING(OYSTER)) 1 CALL PSPEAK(OYSTER,1) DO 2604 I=1,MAXOBJ 2604 IF(TOTING(I).AND.PROP(I).LT.0)PROP(I)=-1-PROP(I) 2605 WZDARK=DARK(0) IF(KNFLOC.GT.0.AND.KNFLOC.NE.LOC)KNFLOC=0 I=RAN(1) IF(.NOT.RDFLAG)GOTO 2608 C GET A NEW INPUT CLAUSE, OR FINISH GETTING CURRENT ONE. CALL GETWDS VRBX=1 OBJX=0 IF(OBJS(1).NE.0)OBJX=1 IOBX=0 IF(IOBJS(1).NE.0)IOBX=1 RDFLAG=.TRUE. C EVERY INPUT, CHECK "FOOBAR" FLAG. IF ZERO, NOTHING'S GOING ON. IF POS, C MAKE NEG. IF NEG, HE SKIPPED A WORD, SO MAKE IT ZERO. 2608 FOOBAR=MIN0(0,-FOOBAR) COMBO=MIN0(0,-COMBO) TURNS=TURNS+1 IF(DEMO.AND.TURNS.GE.SHORT)GOTO 92800 IF(LOGOUT(0))GOTO 92800 C IF(TURNS.EQ.3)CALL DATIME(XXD,XXT) C IF(TURNS.NE.45)GOTO 2609 C SEE IF TIMER UUO HAS BEEN ZAPPED; IF SO, HE'S CHEATING. C FLUSHING THIS FOR NOW. EATS CPU IN PA1050. [D. LONG] C CALL DATIME(YYD,YYT) C IF(XXD.EQ.YYD.AND.XXT.EQ.YYT)SAVED=0 2609 IF(TURNS.EQ.310.AND.ABBNUM.NE.10000.AND..NOT.TERSE) 1 CALL RSPEAK(273) C BUMP ALL THE RIGHT CLOCKS FOR RECONNING BATTERY LIFE AND CLOSING. IF(CLOSED)CLOCK3=CLOCK3-1 IF(CLOCK3.EQ.-7)GOTO 93300 IF(CLOCK3.NE.0)GOTO 2621 PROP(PHONE)=0 PROP(BOOTH)=0 CALL RSPEAK(284) 2621 IF(TALLY.EQ.0.AND.INSIDE(LOC).AND.LOC.NE.Y2)CLOCK1=CLOCK1-1 IF(CLOCK1.EQ.0)GOTO 90000 IF(CLOCK1.LT.0)CLOCK2=CLOCK2-1 IF(CLOCK2.EQ.0)GOTO 91000 C IF(PROP(LAMP).EQ.1)LIMIT=LIMIT-1 IF(LIMIT.EQ.0)GOTO 92400 IF(LIMIT.LT.0.AND.OUTSID(LOC))GOTO 92600 IF(LIMIT.LE.40)GOTO 92000 19999 VERB=VAL(VERBS(VRBX)) OBJ=0 IF(OBJX.NE.0)OBJ=OBJS(OBJX) IOBJ=0 IF(IOBX.NE.0)IOBJ=IOBJS(IOBX) IF(KNFLOC.NE.LOC.OR.(OBJ.NE.KNIFE.AND.IOBJ.NE.KNIFE))GOTO 19998 KNFLOC=-1 SPK=116 GOTO 2011 19998 GOTO (2750,2700,4000,2710), CLASS(VERBS(VRBX)) 2700 CALL BUG(22) 2710 SPK=VERB GOTO 2011 C IT IS A MOTION VERB. ANALYZE IT & LOOP TO 2, IF NOT DEAD. 2750 CALL TRAVL(VERB) IF(KILLED)GOTO 94100 GOTO 2 C ACTION VERB 'LEAVE' (DROP) HAS NO OBJECT. 3100 CALL BUG(29) C VERB 'SAY' OR 'YELL' SLIPPED THROUGH WITH AN OBJECT. 3200 CALL BUG(34) C ANALYSE A VERB. 4000 SPK=ACTSPK(VERB) IF(OBJ.NE.0.OR.IOBJ.NE.0)GOTO 4090 C ANALYSE AN INTRANSITIVE VERB (IE, NO OBJECT GIVEN YET). GOTO( 9 10100,10000,10000,10400, 2009,10400,20700,20800,10000,10000, 9 2011,21200,11300,11400,11500,10000,10000,11800,10000,12000, 9 10000,12200,12300,12400,12500,12600,10000,10000,10000,13000, 9 13100,10100,10000,10000,13500,23600, 3100,13800,10000,10000, 9 10000,10000,10000,10100,10100,10100,10100,14800,10400,10400, 9 25100,25200,25300,25400,25500,25600,25700,25800,25900),VERB C 01-10 TAKE DROP SAY OPEN NOTH CLOSE ON OFF WAVE CALM C 11-20 WALK KILL POUR EAT DRINK RUB THROW QUIT FIND INVEN C 21-30 FEED FILL BLAST SCORE FOO BRIEF READ BREAK WAKE SUSPD C 31-40 HOUR YANK WEAR HIT ANSWR BLOW LEAVE YELL DIAL PLAY C 41-50 PICK PUT TURN GET INSRT REMOV BURN GRIPE LOCK UNLOK C 51-60 HEALTH LOOK COMBO SWEEP TERSE WIZ MAP GATE PIRLOC CALL BUG(23) C ANALYSE A TRANSITIVE VERB. 4090 GOTO( 9 20100,20200, 3200,20400, 2009,20600,20700,20800,20900, 2011, 9 2011,21200,21300,21400,21500,21600,21700, 2011,21900,21900, 9 22100,22200,12300, 2011, 2011,22600,22700,22800,22900, 2011, 9 2011,23200,23300,23400,23500,23600,20200, 3200,23900,24000, 9 24100,24200,24300,24400,24500,24600,24700, 2060,24900,25000, 9 2060,25200, 2070,25400, 2060, 2060, 2060, 2060, 2060),VERB C 01-10 TAKE DROP SAY OPEN NOTH CLOSE ON OFF WAVE CALM C 11-20 WALK KILL POUR EAT DRINK RUB THROW QUIT FIND INVEN C 21-30 FEED FILL BLAST SCORE FOO BRIEF READ BREAK WAKE SUSPD C 31-40 HOUR YANK WEAR HIT ANSWR BLOW LEAVE YELL DIAL PLAY C 41-50 PICK PUT TURN GET INSRT REMOV BURN GRIPE LOCK UNLOK C 51-60 HEALTH LOOK COMBO SWEEP TERSE WIZ MAP GATE PIRLOC CALL BUG(24) C ROUTINES FOR PERFORMING THE VARIOUS ACTION VERBS C STATEMENT NUMBERS IN THIS SECTION ARE 10000 FOR INTRANSITIVE VERBS, 20000 FOR C TRANSITIVE, PLUS 100 TIMES THE VERB NUMBER. MANY INTRANSITIVE VERBS USE THE C TRANSITIVE CODE, AND SOME VERBS USE CODE FOR OTHER VERBS, AS NOTED BELOW. C RANDOM INTRANSITIVE VERBS COME HERE. CLEAR OBJ JUST IN CASE (SEE "ATTACK"). 10000 CALL A5TOA1(VTXT(VRBX,1),VTXT(VRBX,2),'WHAT?',TK,K) PRINT 10002,(TK(I),I=1,K) 10002 FORMAT(/' ',20A1) OBJS(1)=0 OBJX=0 GOTO 2600 10010 CALL A5TOA1(VTXT(VRBX,1),VTXT(VRBX,2),'it?',TK,K) PRINT 10012,(TK(I),I=1,K) 10012 FORMAT(/' Where do you want to ',20A1) GOTO 2600 C CONSTRUCT MSG: "I DON'T KNOW HOW TO [VERB] THE [OBJ]", AND VARIANTS. C CARRY, NO OBJECT GIVEN YET. OK IF ONLY ONE OBJECT PRESENT. 10100 IF(ATLOC(LOC).EQ.0.OR.LINK(ATLOC(LOC)).NE.0.OR.BLIND(0)) 1 GOTO 10000 L1=DWFMAX-1 DO 10110 I=1,L1 IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2)GOTO 10000 10110 CONTINUE OBJ=ATLOC(LOC) IF(VERB.EQ.YANK)GOTO 23200 IF(VERB.EQ.WEAR)GOTO 23300 C CARRY AN OBJECT. SPECIAL CASES FOR BIRD AND CAGE (IF BIRD IN CAGE, CAN'T C TAKE ONE WITHOUT THE OTHER. LIQUIDS ALSO SPECIAL, SINCE THEY DEPEND ON C STATUS OF BOTTLE. ALSO VARIOUS SIDE EFFECTS, ETC. C "YANK" AND "WEAR" ALSO WEAVE INTO THIS CODE, SINCE THEY ARE MOSTLY C JUST RESTRICTED CARRY'S. 20100 IF(OBJ.EQ.BOAT)SPK=281 IF(PLURAL(OBJ))SPK=297 IF(PREP.NE.PREPOF)GOTO 20104 IF(OBJ.NE.0.AND.IOBJ.NE.0)GOTO 2060 IF(OBJ.EQ.0)OBJ=IOBJ IOBJ=0 GOTO 20200 20104 IF(HOLDNG(OBJ))GOTO 2011 ASSIGN 20106 TO RETN GOTO 20190 20106 IF(PREP.EQ.PREPIN)GOTO 24500 IF(PREP.EQ.PREPFR.OR.ENCLSD(OBJ))GOTO 24600 C THE NEXT LINES ARE FOR 'TAKING' LIQUIDS (WATER, OIL & WINE). C IF WE ARE HOLDING A CONTAINER (BOTTLE OR CASK), WE CAN TAKE THE C THE LIQUID BY FILLING THE CONTAINER. IF THERE IS A CONTAINER NEARBY C HOLDING THE REQUESTED LIQUID, WE WILL PICK UP THE CONTAINER. IF(IOBJ.EQ.0)GOTO 20110 SPK=313 IF(OBJ.NE.CASK.AND.OBJ.NE.BOTTLE)GOTO 2011 K=0 IF(OBJ.EQ.CASK)K=1 IOBJ=IOBJ+K IF(LIQ(OBJ).EQ.IOBJ)GOTO 20116 SPK=302+K IF(PROP(OBJ).NE.1)GOTO 2011 GOTO 20118 20110 IF(OBJ.NE.WATER.AND.OBJ.NE.OIL.AND.OBJ.NE.WINE)GOTO 20120 IOBJ=OBJ K=0 OBJ=BOTTLE IF(.NOT.HERE(BOTTLE))GOTO 20114 IF(PROP(BOTTLE).NE.1)GOTO 20112 IF(.NOT.HERE(CASK).OR.(HERE(CASK).AND.PROP(CASK).EQ.1)) 1 GOTO 20118 OBJ=0 CALL RSPEAK(304) GOTO 2600 20112 IF(LIQ(BOTTLE).EQ.IOBJ)GOTO 20116 20114 SPK=312 IF(.NOT.HERE(CASK))GOTO 2011 OBJ=CASK K=1 IF(PROP(CASK).EQ.1)GOTO 20118 IF(LIQ(CASK).EQ.IOBJ)GOTO 20116 SPK=315 IF(.NOT.ATHAND(BOTTLE))SPK=303 GOTO 2011 20116 IF(.NOT.HOLDNG(OBJ))GOTO 20120 SPK=302+K GOTO 2011 20118 IF(HOLDNG(OBJ))GOTO 22200 GOTO 20120 C *** END OF LIQUID STUFF C 'WEAR' AND 'YANK' WEAVE IN HERE. 20120 SPK=343 IF(OBJ.EQ.BEAR .OR. BURDEN(0)+BURDEN(OBJ).LE.15 )GOTO 20125 SPK=92 IF(.NOT.WEARNG(OBJ))GOTO 2011 PROP(OBJ)=0 CALL BITOFF(OBJ,WEARBT) GOTO 2011 C CLOAK. BIG TROUBLE AHEAD. CAN ONLY GET HERE VIA 'YANK'. 20125 IF(OBJ.NE.CLOAK.OR.PROP(CLOAK).NE.2)GOTO 20130 PROP(ROCKS)=1 PROP(CLOAK)=0 FIXED(CLOAK)=0 CALL CARRY(CLOAK,LOC) CALL RSPEAK(241) IF(AT(WUMPUS).AND.PROP(WUMPUS).EQ.0)GOTO 22900 GOTO 2100 C POSTER: HIDES WALL SAFE. 20130 IF(OBJ.NE.POSTER.OR.PLACE(SAFE).NE.0)GOTO 20160 PROP(POSTER)=1 SPK=362 C MOVE SAFE AND WALL CONTAINING SAFE INTO VIEW. CALL DROP(SAFE,LOC) CALL DROP(WALL2,LOC) GOTO 20180 C BOAT: NEED THE POLE TO PUSH IT 20160 IF(OBJ.NE.BOAT)GOTO 20165 SPK=218 IF(.NOT.TOTING(POLE).AND.PLACE(POLE).NE.-BOAT)GOTO 2011 PROP(BOAT)=1 SPK=221 GOTO 20180 C BIRD: GOT TO HAVE CAGE, BUT ROD CAN'T BE AROUND TO TAKE BIRD 20165 IF(OBJ.NE.BIRD.OR.PROP(BIRD).NE.0)GOTO 20170 SPK=26 IF(ATHAND(ROD))GOTO 2011 SPK=27 IF(.NOT.HOLDNG(CAGE))GOTO 2011 CALL INSERT(BIRD,CAGE) CALL BITOFF(CAGE,OPENBT) GOTO 2009 C SWORD: IF IN ANVIL, NEEDS CROWN & MUST YANK. 20170 IF(OBJ.NE.SWORD.OR.PROP(SWORD).EQ.0)GOTO 20180 IF(IOBJ.NE.0.AND.IOBJ.NE.ANVIL)GOTO 2070 IF(VERB.EQ.YANK)GOTO 20175 C HE WANTS THE SWORD, BUT HASN'T ESTABLISHED HIS ROYAL BLOOD, OR HE C HASN'T PULLED HARD ENOUGH. OR NEITHER. IF(.NOT.YES(215,0,0))GOTO 2009 20175 IF(WEARNG(CROWN))GOTO 20180 CALL PSPEAK(SWORD,2) IF(CLOSED)GOTO 93000 FIXED(SWORD)=-1 PROP(SWORD)=3 GOTO 2100 20180 CALL CARRY(OBJ,LOC) IF(OBJ.EQ.POLE.OR.OBJ.EQ.SKEY.OR.OBJ.EQ.SWORD 1 .OR.((OBJ.EQ.CLOAK.OR.OBJ.EQ.RING) 2 .AND..NOT.WEARNG(OBJ)) )PROP(OBJ)=0 IF(VERB.NE.YANK.OR.OBJ.EQ.SWORD)GOTO 2011 SPK=204 GOTO 2011 C THIS IS A QUASI-SUBROUTINE, CALLED FROM 'TAKE' AND FROM 'INSERT', WHEN C THE ITEM IS NOT CURRENTLY BEING TOTED. 'RETN' IS A VARIABLE DEFINED C TO BE THE RETURN ADDRESS. 20190 SPK=NOWAY(0) IF(OBJ.EQ.PLANT.AND.PROP(PLANT).LE.0)SPK=115 IF(OBJ.EQ.BEAR.AND.PROP(BEAR).EQ.1)SPK=169 IF(OBJ.EQ.CHAIN.AND.PROP(BEAR).NE.0)SPK=170 IF(OBJ.EQ.SWORD.AND.PROP(SWORD).EQ.5)SPK=208 IF(OBJ.EQ.CLOAK.AND.PROP(CLOAK).EQ.2)SPK=242 IF(OBJ.EQ.AXE.AND.PROP(AXE).EQ.2)SPK=246 IF(OBJ.EQ.PHONE)SPK=251 IF(OBJ.EQ.BEES.OR.OBJ.EQ.HIVE)SPK=295 IF(OBJ.EQ.STICKS)SPK=296 IF(FIXED(OBJ).NE.0)GOTO 2011 GOTO RETN C DROP/DISCARD OBJECT. "THROW" ALSO COMES HERE FOR MOST OBJECTS. C SPECIAL CASES FOR BIRD (MIGHT ATTACK SNAKE OR DRAGON) AND CAGE (MIGHT C CONTAIN BIRD) AND VASE. C DROP COINS IN VENDING MACHINE FOR EXTRA BATTERIES. 20200 IF(HOLDNG(ROD2).AND.OBJ.EQ.ROD.AND..NOT.HOLDNG(ROD))OBJ=ROD2 IF(PLURAL(OBJ))SPK=105 K=LIQ(BOTTLE) IF(K.EQ.OBJ)OBJ=BOTTLE IF(OBJ.NE.BOTTLE)K=LIQ(CASK) IF(OBJ.NE.BOTTLE.AND.K.EQ.OBJ)OBJ=CASK IF(.NOT.TOTING(OBJ))GOTO 2011 IF(PREP.EQ.PREPIN)GOTO 24500 IF(OBJ.NE.BIRD.OR..NOT.HERE(SNAKE))GOTO 20220 CALL RSPEAK(30) IF(CLOSED)GOTO 93000 CALL REMOVE(BIRD) CALL DSTROY(SNAKE) C SET SNAKE PROP FOR USE BY TRAVEL OPTIONS PROP(SNAKE)=1 CALL DROP(BIRD,LOC) GOTO 2100 20220 SPK=344 IF(VERB.EQ.LEAVE)SPK=353 IF(VERB.EQ.THROW)SPK=352 IF(VERB.EQ.TAKE)SPK=54 IF(OBJ.NE.POLE.OR..NOT.HOLDNG(BOAT))GOTO 20240 SPK=280 GOTO 2011 20240 IF(OBJ.NE.BIRD.OR..NOT.AT(DRAGON).OR.PROP(DRAGON).NE.0) 1 GOTO 20260 CALL RSPEAK(154) CALL REMOVE(BIRD) CALL DSTROY(BIRD) IF(PLACE(SNAKE).EQ.PLAC(SNAKE))TALLY2=TALLY2+1 GOTO 2100 20260 IF(OBJ.NE.BEAR.OR..NOT.AT(TROLL))GOTO 20270 SPK=163 CALL DSTROY(TROLL) CALL DSTROY(TROLL+MAXOBJ) CALL MOVE(TROLL2,PLAC(TROLL)) CALL MOVE(TROLL2+MAXOBJ,FIXD(TROLL)) CALL JUGGLE(CHASM) PROP(TROLL)=2 GOTO 20290 20270 IF(OBJ.NE.VASE.OR.LOC.EQ.PLAC(PILLOW))GOTO 20275 PROP(VASE)=2 IF(AT(PILLOW))PROP(VASE)=0 CALL PSPEAK(VASE,PROP(VASE)+1) IF(PROP(VASE).NE.0)FIXED(VASE)=-1 GOTO 20290 20275 IF(OBJ.NE.FLY.OR..NOT.AT(SPIDER)) GOTO 20280 PROP(FLY)=1 PROP(SPIDER)=1 SPK=379 CALL DSTROY(FLY) GOTO 2011 20280 IF(WORN(OBJ).OR.OBJ.EQ.POLE.OR.OBJ.EQ.BOAT)PROP(OBJ)=0 IF(WORN(OBJ))CALL BITOFF(OBJ,WEARBT) IF(OBJ.EQ.POLE)PROP(BOAT)=0 20290 IF(ENCLSD(OBJ))CALL REMOVE(OBJ) CALL DROP(OBJ,LOC) GOTO 2011 C OPEN/CLOSE/LOCK/UNLOCK: NO OBJECT GIVEN. C ASSUME VARIOUS THINGS IF PRESENT. 10400 SPK=28 K=0 DO 10410 I=1,MAXOBJ IF(.NOT.(HERE(I).AND.HINGED(I)))GOTO 10410 OBJ=I K=K+1 10410 CONTINUE IF(K.GT.1)GOTO 10000 IF(OBJ.NE.0)GOTO 10420 IF(VERB.EQ.LOCK.OR.VERB.EQ.UNLOCK)GOTO 2011 GOTO 10000 10420 IF(VERB.EQ.LOCK)GOTO 24900 IF(VERB.EQ.UNLOCK)GOTO 25000 IF(VERB.EQ.SHUT)GOTO 20600 C OPEN. SPECIAL STUFF FOR OPENING CLAM/OYSTER. C THE FOLLOWING CAN BE OPENED WITHOUT A KEY: C CLAM/OYSTER, DOOR, PDOOR, BOTTLE, CASK, CAGE 20400 IF(.NOT.HINGED(OBJ))GOTO 2070 SPK=253 IF(OBJ.EQ.PDOOR.AND.PROP(PDOOR).EQ.1)GOTO 2011 SPK=336 IF(AJAR(OBJ))GOTO 2011 IF(LOCKS(OBJ).OR.IOBJ.EQ.KEYS.OR.IOBJ.EQ.SKEY)GOTO 25000 SPK=337 IF(OBJ.EQ.DOOR)SPK=111 IF(LOCKED(OBJ))GOTO 2011 IF(OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER)GOTO 20410 CALL BITON(OBJ,OPENBT) GOTO 2009 C CLAM/OYSTER. 20410 K=0 IF(OBJ.EQ.OYSTER)K=1 SPK=124+K IF(HOLDNG(OBJ))SPK=120+K IF(.NOT.ATHAND(TRIDNT))SPK=122+K IF(IOBJ.NE.0.AND.IOBJ.NE.TRIDNT)SPK=376+K IF(SPK.NE.124)GOTO 2011 CALL DSTROY(CLAM) CALL DROP(OYSTER,LOC) CALL DROP(PEARL,105) GOTO 2011 C CLOSE. SHUT. C THE FOLLOWING CAN BE CLOSED WITHOUT KEYS: C DOOR, PDOOR, BOTTLE, CASK, CAGE 20600 IF(.NOT.HINGED(OBJ))GOTO 2070 SPK=338 IF(.NOT.AJAR(OBJ))GOTO 2011 IF(LOCKS(OBJ))GOTO 24900 CALL BITOFF(OBJ,OPENBT) GOTO 2009 C LIGHT LAMP 20700 IF(.NOT.ATHAND(LAMP))GOTO 2011 SPK=184 IF(LIMIT.LT.0)GOTO 2011 SPK=321 IF(PROP(LAMP).EQ.1)GOTO 2011 PROP(LAMP)=1 K=39 IF(LOC.EQ.200)K=108 CALL RSPEAK(K) IF(WZDARK)GOTO 2000 GOTO 2100 C LAMP OFF 20800 IF(.NOT.ATHAND(LAMP))GOTO 2011 SPK=322 IF(PROP(LAMP).EQ.0)GOTO 2011 PROP(LAMP)=0 CALL RSPEAK(40) IF(DARK(0))CALL RSPEAK(16) GOTO 2100 C WAVE. NO EFFECT UNLESS WAVING ROD AT FISSURE. 20900 IF((.NOT.HOLDNG(OBJ)).AND.(OBJ.NE.ROD.OR..NOT.HOLDNG(ROD2))) 1 SPK=29 IF(OBJ.NE.ROD.OR..NOT.AT(FISSUR).OR..NOT.HOLDNG(OBJ) 1 .OR.CLOSNG)GOTO 2011 IF(IOBJ.NE.0.AND.IOBJ.NE.FISSUR)GOTO 2011 PROP(FISSUR)=1-PROP(FISSUR) CALL PSPEAK(FISSUR,2-PROP(FISSUR)) IF(CHASE.EQ.0.OR.PROP(FISSUR).NE.0)GOTO 2100 C DEMISE OF THE WUMPUS. CHAMP MUST HAVE JUST CROSSED BRIDGE. IF((LOC.EQ.17.AND.OLDLOC.NE.27) 1 .OR.(LOC.EQ.27.AND.OLDLOC.NE.17))GOTO 2100 CALL RSPEAK(244) CHASE=0 CALL DROP(RING,209) CALL MOVE(WUMPUS,209) PROP(WUMPUS)=6 CALL BITON(WUMPUS,DEADBT) IF(PLACE(AXE).NE.PLAC(WUMPUS))GOTO 2100 FIXED(AXE)=0 PROP(AXE)=0 GOTO 2100 C ATTACK. ASSUME TARGET IF UNAMBIGUOUS. "THROW" ALSO LINKS HERE. ATTACKABLE C OBJECTS FALL INTO TWO CATEGORIES: ENEMIES (SNAKE, DWARF, ETC.) AND OTHERS C (BIRD, CLAM). AMBIGUOUS IF TWO ENEMIES, OR IF NO ENEMIES BUT TWO OTHERS. C KILL OBJ WITH IOBJ. 21200 L1=DWFMAX-1 DO 21210 DWARFN=1,L1 IF(DLOC(DWARFN).EQ.LOC.AND.DFLAG.GE.2)GOTO 21220 21210 CONTINUE DWARFN=0 21220 IF(OBJ.NE.0)GOTO 21240 IF(DWARFN.NE.0)OBJ=DWARF IF(HERE(SNAKE))OBJ=OBJ*MAXOBJ+SNAKE IF(AT(DRAGON).AND.PROP(DRAGON).EQ.0)OBJ=OBJ*MAXOBJ+DRAGON IF(AT(TROLL))OBJ=OBJ*MAXOBJ+TROLL IF(HERE(GNOME))OBJ=OBJ*MAXOBJ+GNOME IF(HERE(BEAR).AND.PROP(BEAR).EQ.0)OBJ=OBJ*MAXOBJ+BEAR IF(HERE(WUMPUS).AND.PROP(WUMPUS).EQ.0)OBJ=OBJ*MAXOBJ+WUMPUS IF(OBJ.GT.MAXOBJ)GOTO 10000 IF(OBJ.NE.0)GOTO 21240 C CAN'T ATTACK BIRD BY THROWING AXE. IF(HERE(BIRD).AND.VERB.NE.THROW)OBJ=BIRD C CLAM AND OYSTER BOTH TREATED AS CLAM FOR INTRANSITIVE CASE; NO HARM DONE. IF(HERE(CLAM).OR.HERE(OYSTER))OBJ=MAXOBJ*OBJ+CLAM IF(OBJ.GT.MAXOBJ)GOTO 10000 21240 IF(OBJ.NE.BIRD)GOTO 21245 SPK=137 IF(CLOSED)GOTO 2011 CALL DSTROY(BIRD) PROP(BIRD)=0 IF(PLACE(SNAKE).EQ.PLAC(SNAKE))TALLY2=TALLY2+1 SPK=45 21245 IF(OBJ.NE.FLY)GOTO 21250 PROP(FLY)=2 SPK=398 CALL DSTROY(FLY) GOTO 2011 21250 IF(OBJ.EQ.DWARF)GOTO 21270 IF(OBJ.EQ.0)SPK=44 IF(OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER)SPK=150 IF(AT(DOG).AND.PROP(DOG).EQ.1)SPK=291 IF(OBJ.EQ.SNAKE)SPK=46 IF(OBJ.EQ.DRAGON.OR.(OBJ.EQ.WUMPUS.AND.PROP(WUMPUS).EQ.6))SPK=167 IF(OBJ.EQ.TROLL)SPK=157 IF(OBJ.EQ.BEAR)SPK=165+(PROP(BEAR)+1)/2 IF(OBJ.EQ.GNOME)SPK=320 IF(IOBJ.NE.AXE.OR.VERB.EQ.THROW.OR. 1 (OBJ.NE.DOG.AND.OBJ.NE.WUMPUS.AND.OBJ.NE.DRAGON 2 .AND.OBJ.NE.TROLL))GOTO 21253 IOBJ=OBJ OBJ=IOBJS(IOBX) SPK=110 GOTO 21700 21253 IF(IOBJ.NE.0.AND.IOBJ.NE.AXE)GOTO 2070 IF(OBJ.NE.DRAGON.OR.PROP(DRAGON).NE.0)GOTO 2011 C FUN STUFF FOR DRAGON. IF HE INSISTS ON ATTACKING IT, WIN! SET PROP TO DEAD, C MOVE DRAGON TO CENTRAL LOC (STILL FIXED), MOVE RUG THERE (NOT FIXED), AND C MOVE HIM THERE, TOO. THEN DO A NULL MOTION TO GET NEW DESCRIPTION. C THERE IS SOME AMOUNT OF PAIN HERE, TO FORCE GETWDS TO DO THE RIGHT THING. CALL RSPEAK(49) CALL GETLIN WDX=0 CALL CLRLIN IF(TXT(1,1).EQ.'Y'.OR.TXT(1,1).EQ.'YES')GOTO 21255 WORDS(1)=-2 RDFLAG=.TRUE. GOTO 2600 21255 CALL PSPEAK(DRAGON,1) CALL BITON(DRAGON,DEADBT) PROP(DRAGON)=2 PROP(RUG)=0 K=(PLAC(DRAGON)+FIXD(DRAGON))/2 CALL MOVE(DRAGON+MAXOBJ,-1) CALL MOVE(RUG+MAXOBJ,0) CALL MOVE(DRAGON,K) CALL MOVE(RUG,K) DO 21260 OBJ=1,MAXOBJ IF(PLACE(OBJ).EQ.PLAC(DRAGON).OR.PLACE(OBJ).EQ.FIXD(DRAGON)) 1 CALL MOVE(OBJ,K) 21260 CONTINUE WORDS(1)=0 LOC=K NEWLOC=K GOTO 2 C HE IS ATTACKING A DWARF. IF USING SOMETHING OTHER THAN AXE OR SWORD, C GOODBYE CHARLIE. IF USING NOTHING, DON'T LET HIM. IF USING AXE OR C SWORD, THE FOLLOWING ODDS PREVAIL (IF I CALCULATED THIS MESS RIGHT!) C (THE END OF LINE FIGURE IS THE CULULATIVE PROBABILITY OF THE EVENT): C .25 - HERO KILLS DWARF (.25) C .75 - HERO MISSES C .25 - HERO GETS KNIFE IN (HIS) RIBS. DIES. (.1875) C .75 - HERO CAN'T MAKE A CLEAN THRUST C .36 - STANDOFF (.2) C .64 - DWARF SLASHES C .61 - DWARF MISSES! (.22) C .39 - DWARF KILLS HERO (.14) C ADVENTURER HAS 1/3 CHANCE OF GETTING NAILED, 1/4 CHANCE OF NAILING C DWARF. ALL BY WAY OF ENCOURAGING HIM TO THROW THE AXE. 21270 IF(OBJ.EQ.DWARF.AND.CLOSED)GOTO 93000 SPK=49 IF(IOBJ.EQ.0)GOTO 2011 SPK=355 IF(IOBJ.NE.AXE.AND.IOBJ.NE.SWORD)GOTO 21275 IF(PCT(25))GOTO 21753 IF(PCT(25))GOTO 21275 CALL RSPEAK(354) IF(PCT(36))GOTO 2100 CALL RSPEAK(356) SPK=52 IF(PCT(61))GOTO 2011 SPK=53 C HERO IS GONZO. 21275 CALL RSPEAK(SPK) OLDLC2=LOC GOTO 94100 C POUR. IF NO OBJECT, ASSUME LIQ IN CONTAINER, IF HOLDING ONLY ONE. C SPECIAL TESTS FOR POURING WATER OR OIL ON PLANT OR RUSTY DOOR. 11300 IF(.NOT.HOLDNG(BOTTLE).AND..NOT.HOLDNG(CASK))GOTO 10000 K=LIQ(BOTTLE) KK=LIQ(CASK) IF(HOLDNG(BOTTLE).AND.K.NE.0.AND.HOLDNG(CASK) 1 .AND.KK.NE.0)GOTO 10000 IF(KK.NE.0.AND.HOLDNG(CASK))OBJ=CASK IF(K.NE.0.AND.HOLDNG(BOTTLE))OBJ=BOTTLE IF(OBJ.EQ.0)GOTO 10000 C POUR OBJ FROM IOBJ. 21300 SPK=78 IF(OBJ.NE.BOTTLE.AND.OBJ.NE.CASK)GOTO 21310 IOBJ=OBJ OBJ=LIQ(IOBJ) SPK=316 IF(OBJ.EQ.0)GOTO 2011 GOTO 21320 21310 IF(OBJ.LT.WATER.OR.OBJ.GT.WINE+1)GOTO 2011 SPK=29 IF(.NOT.HOLDNG(BOTTLE).AND..NOT.HOLDNG(CASK))GOTO 2011 IF(HOLDNG(BOTTLE).AND.LIQ(BOTTLE).EQ.OBJ)IOBJ=BOTTLE IF(HOLDNG(CASK).AND.LIQ(CASK).EQ.OBJ)IOBJ=CASK IF(IOBJ.EQ.0)GOTO 2011 21320 SPK=335 IF(.NOT.AJAR(IOBJ))GOTO 2011 IF(IOBJ.EQ.CASK)OBJ=OBJ+1 PROP(IOBJ)=1 CALL REMOVE(OBJ) PLACE(OBJ)=0 SPK=77 IF(IOBJ.NE.CASK)GOTO 21330 OBJ=OBJ-1 SPK=104 21330 IF(.NOT.(AT(PLANT).OR.AT(DOOR).OR.AT(SWORD)).OR. 1 AT(SWORD).AND.PROP(SWORD).EQ.0)GOTO 2011 IF(AT(DOOR))GOTO 21340 IF(AT(SWORD))GOTO 21350 SPK=112 IF(OBJ.NE.WATER)GOTO 2011 CALL PSPEAK(PLANT,PROP(PLANT)+1) PROP(PLANT)=MOD(PROP(PLANT)+2,6) PROP(PLANT2)=PROP(PLANT)/2 NEWLOC=LOC GOTO 2 21340 PROP(DOOR)=0 IF(OBJ.NE.OIL)GOTO 21341 PROP(DOOR)=1 CALL BITOFF(DOOR,LOCKBT) CALL BITON(DOOR,OPENBT) 21341 SPK=113+PROP(DOOR) GOTO 2011 C IF SWORD IS ALREADY OILY, DON'T LET HIM CLEAN IT. NO SOAP. 21350 IF(PROP(SWORD).EQ.5)GOTO 21360 PROP(SWORD)=4 IF(OBJ.NE.OIL)GOTO 21360 PROP(SWORD)=5 FIXED(SWORD)=-1 21360 SPK=206+PROP(SWORD)-4 GOTO 2011 C EAT. INTRANSITIVE: ASSUME EDIBLE IF PRESENT, ELSE ASK WHAT. TRANSITIVE: C FOOD/MUSHROOMS/CAKES OK, SOME THINGS LOSE APPETITE, REST ARE RIDICULOUS. C IF HE HAS MORE THAN ONE EDIBLE, OR NONE, 'EAT' IS AMBIGUOUS WITHOUT C AN EXPLICIT OBJECT. 11400 K=0 DO 11410 I=1,MAXOBJ IF(.NOT.(HERE(I).AND.EDIBLE(I))) GOTO 11410 K=K+1 KK=I 11410 CONTINUE IF(K.NE.1)GOTO 10000 OBJ=KK IF(OBJ.NE.FOOD.AND.OBJ.NE.HONEY)GOTO 21400 11420 IF(OBJ.EQ.HONEY)TALLY2=TALLY2+1 CALL DSTROY(OBJ) SPK=72 GOTO 2011 C IF HE ATE THE RIGHT THING AND IS IN THE RIGHT PLACE, MOVE HIM TO C THE OTHER PLACE WITH ALL HIS JUNK. OTHERWISE, NARKY MESSAGE. 21400 IF(OBJ.EQ.FOOD.OR.OBJ.EQ.HONEY)GOTO 11420 IF(OBJ.EQ.BIRD.OR.OBJ.EQ.SNAKE.OR.OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER 1 .OR.OBJ.EQ.FLOWER.OR.OBJ.EQ.FLY)SPK=301 IF(OBJ.EQ.DWARF.OR.OBJ.EQ.DRAGON.OR.OBJ.EQ.TROLL 1 .OR.OBJ.EQ.DOG.OR.OBJ.EQ.WUMPUS.OR.OBJ.EQ.BEAR 2 .OR.OBJ.EQ.GNOME)SPK=250 IF(OBJ.NE.MUSHRM.AND.OBJ.NE.CAKES)GOTO 2011 K=OBJ-MUSHRM LL=229+K K=159-K KK=SKEY IF(OBJ.EQ.MUSHRM)KK=TDOOR IF(OBJ.EQ.MUSHRM.AND.LOC.NE.158)TALLY2=TALLY2+1 CALL DSTROY(OBJ) SPK=228 IF(.NOT. (HERE(INTS(KK)).OR.FIXED(KK).EQ.LOC) )GOTO 2011 CALL RSPEAK(LL) C IF HE HASN'T TAKEN TINY KEY OFF SHELF, DON'T LET HIM GET IT FOR FREE! DO 21440 OBJ=1,MAXOBJ IF(OBJ.EQ.SKEY.AND.PROP(SKEY).EQ.1)GOTO 21440 IF(PLACE(OBJ).EQ.PLAC(KK).AND.FIXED(OBJ).EQ.0)CALL MOVE(OBJ,K) 21440 CONTINUE IF(LOC.EQ.PLAC(SKEY).AND.PLACE(SKEY).EQ.PLAC(SKEY)) 1 TALLY2=TALLY2+1 LOC=K NEWLOC=K GOTO 2 C DRINK. IF NO OBJECT, ASSUME WATER OR WINE AND LOOK FOR THEM HERE. C IF POTABLE IS IN BOTTLE OR CASK, DRINK THAT. IF NOT, SEE IF THERE C IS SOMETHING DRINKABLE NEARBY (STREAM, LAKE, WINE FOUNTAIN, ETC.), C AND DRINK THAT. IF HE HAS STUFF IN BOTH CONTAINERS, ASK WHICH. C DRINK OBJ FROM IOBJ 11500 LL=LIQLOC(LOC) IF(.NOT.ATHAND(BOTTLE).AND..NOT.ATHAND(CASK) 1 .AND.LL.NE.WINE.AND.LL.NE.WATER)GOTO 10000 K=LIQ(BOTTLE) KK=LIQ(CASK) IF(.NOT.ATHAND(BOTTLE).OR.K.EQ.0)GOTO 11520 IF(ATHAND(CASK).AND.KK.NE.0.AND.KK.NE.K)GOTO 10000 OBJ=K IOBJ=BOTTLE GOTO 21560 11520 IF(.NOT.ATHAND(CASK).OR.KK.EQ.0)GOTO 11540 OBJ=KK IOBJ=CASK GOTO 21560 11540 IF(LL.EQ.0)GOTO 10000 OBJ=LL IOBJ=-1 GOTO 21560 21500 IF(OBJ.EQ.0.AND.(IOBJ.EQ.BOTTLE.OR.IOBJ.EQ.CASK))OBJ=LIQ(IOBJ) SPK=110 IF(OBJ.EQ.OIL)SPK=301 IF(OBJ.NE.WATER.AND.OBJ.NE.WINE)GOTO 2011 IF(IOBJ.NE.0)GOTO 21560 IF(OBJ.EQ.LIQLOC(LOC))IOBJ=-1 IF(ATHAND(CASK).AND.OBJ.EQ.LIQ(CASK))IOBJ=CASK IF(ATHAND(BOTTLE).AND.OBJ.EQ.LIQ(BOTTLE))IOBJ=BOTTLE 21560 SPK=73 IF(IOBJ.EQ.-1)GOTO 21570 IF(IOBJ.EQ.CASK)OBJ=OBJ+1 CALL REMOVE(OBJ) PLACE(OBJ)=0 PROP(IOBJ)=1 SPK=74 IF(IOBJ.EQ.CASK)SPK=299 21570 IF(OBJ.EQ.WATER.OR.OBJ.EQ.WATER+1)GOTO 2011 C UH-OH. HE'S A WINO. LET HIM REAP THE REWARDS OF INCONTINENCE. C HE'LL WANDER AROUND FOR AWHILE, THEN WAKE UP SOMEWHERE OR OTHER, C HAVING DROPPED MOST OF HIS STUFF. CALL RSPEAK(300) IF(PROP(LAMP).EQ.1)LIMIT=LIMIT-RAN(LIMIT)/2 IF(LIMIT.LT.10)LIMIT=25 K=0 IF(PCT(15))K=49 IF(K.EQ.0.AND.PCT(15))K=53 IF(K.EQ.0.AND.PCT(25))K=132 IF(K.EQ.0)K=175 IF(OUTSID(LOC))K=5 IF(K.EQ.LOC)GOTO 2100 IF(HOLDNG(AXE))CALL MOVE(AXE,K) IF(HOLDNG(LAMP))CALL MOVE(LAMP,K) DO 21580 J=1,MAXOBJ IF(WEARNG(J))CALL BITOFF(J,WEARBT) 21580 IF(HOLDNG(J))CALL DROP(J,LOC) LOC=K NEWLOC=K GOTO 2 C RUB. YIELDS VARIOUS SNIDE REMARKS. 21600 IF(OBJ.NE.LAMP)SPK=76 GOTO 2011 C THROW OBJ AT IOBJ. C SAME AS DISCARD UNLESS AXE. THEN SAME AS ATTACK EXCEPT IGNORE BIRD, C AND IF DWARF IS PRESENT THEN ONE MIGHT BE KILLED. C AXE ALSO SPECIAL FOR DRAGON, BEAR, DOG, WUMPUS AND TROLL. C TREASURES SPECIAL FOR TROLL. C IF THROWING FOOD AT SOMEONE WHO MIGHT BE HUNGRY, GO FEED HIM. 21700 IF(PREP.EQ.PREPDN)GOTO 24200 IF(HOLDNG(ROD2).AND.OBJ.EQ.ROD.AND..NOT.HOLDNG(ROD))OBJ=ROD2 IF(.NOT.HOLDNG(OBJ))GOTO 2011 IF(OBJ.EQ.BOAT.OR.OBJ.EQ.BEAR)GOTO 2070 DWARFN=0 IF(IOBJ.NE.0)GOTO 21750 C NO INDIRECT OBJ WAS SPECIFIED. IF A DWARF IS PRESENT, ASSUME IT C IS THE IOBJ. IF NOT, LOOK FOR ANY OTHER LIVING THING. IF NO LIVING C THINGS PRESENT, TREAT 'THROW' AS 'DROP'. L1=DWFMAX-1 DO 21710 DWARFN=1,L1 IF(DLOC(DWARFN).EQ.LOC.AND.DFLAG.GE.2)GOTO 21718 21710 CONTINUE DWARFN=0 C NO DWARVES PRESENT; FIGURE OUT PLAUSIBLE OBJECT. K=0 DO 21715 I=1,MAXOBJ IF(.NOT. (AT(I).AND.LIVING(I)) )GOTO 21715 IOBJ=I K=K+1 21715 CONTINUE IF(K.EQ.0)GOTO 20200 C IT IS A BEASTIE OF SOME SORT. IS THERE MORE THAN ONE? C DON'T KILL THE BIRD BY DEFAULT. 21717 IF(K.EQ.1)GOTO 21718 CALL RSPEAK(43) GOTO 2600 21718 IF(IOBJ.EQ.BIRD)GOTO 20200 IF(TREASR(OBJ).AND.AT(TROLL))IOBJ=TROLL 21750 IF(TREASR(OBJ).AND.IOBJ.EQ.TROLL)GOTO 21790 IF(OBJ.EQ.SWORD.OR.OBJ.EQ.BOTTLE)GOTO 22800 IF(DWARFN.NE.0)IOBJ=DWARF IF(EDIBLE(OBJ).AND.LIVING(IOBJ))GOTO 22100 IF(OBJ.NE.AXE)GOTO 20200 SPK=152 IF(IOBJ.EQ.DRAGON.AND.PROP(DRAGON).EQ.0)GOTO 21755 SPK=158 IF(IOBJ.EQ.TROLL)GOTO 21755 IF(IOBJ.NE.DWARF)GOTO 21760 SPK=48 C IF SAVED NOT = -1, HE BYPASSED THE "START" CALL. IF(RAN(3).EQ.0.OR.SAVED.NE.-1)GOTO 21755 IF(DWARFN.NE.0)GOTO 21753 L1=DWFMAX-1 DO 21752 DWARFN=1,L1 IF(DLOC(DWARFN).EQ.LOC.AND.DFLAG.GE.2)GOTO 21753 21752 CONTINUE C 'ATTACK' WITH AXE OR SWORD LINKS IN HERE. 21753 DSEEN(DWARFN)=.FALSE. DLOC(DWARFN)=0 SPK=47 DKILL=DKILL+1 IF(DKILL.EQ.1)SPK=149 21755 CALL RSPEAK(SPK) CALL DROP(AXE,LOC) NEWLOC=LOC GOTO 2 C THIS'LL TEACH HIM TO THROW THE AXE AT THE BEAR! 21760 IF(IOBJ.NE.BEAR.OR.PROP(BEAR).NE.0)GOTO 21765 SPK=164 CALL DROP(AXE,LOC) FIXED(AXE)=-1 PROP(AXE)=1 CALL JUGGLE(BEAR) GOTO 2011 C OR THE WUMPUS! 21765 IF(IOBJ.NE.WUMPUS.OR.PROP(WUMPUS).EQ.6)GOTO 21770 IF(PROP(WUMPUS).EQ.6)GOTO 20200 SPK=245 PROP(AXE)=2 IF(PROP(WUMPUS).EQ.0)GOTO 21780 SPK=243 CALL DSTROY(AXE) GOTO 2011 C OR THE NICE DOGGIE! 21770 IF(IOBJ.NE.DOG.OR.PROP(DOG).EQ.1)GOTO 21790 SPK=248 PROP(AXE)=3 21780 CALL DROP(AXE,LOC) FIXED(AXE)=-1 CALL JUGGLE(IOBJ) GOTO 2011 C SNARF A TREASURE FOR THE TROLL. 21790 IF(IOBJ.NE.TROLL)GOTO 21795 PREP=0 IF(OBJ.EQ.CASK.AND.LIQ(CASK).NE.WINE)GOTO 20200 SPK=159 CALL DROP(OBJ,0) IF(OBJ.EQ.CASK)PLACE(WINE+1)=0 CALL MOVE(TROLL,0) CALL MOVE(TROLL+MAXOBJ,0) CALL DROP(TROLL2,PLAC(TROLL)) CALL DROP(TROLL2+MAXOBJ,FIXD(TROLL)) CALL JUGGLE(CHASM) GOTO 2011 C THROWING AXE AT NONE OF THE ABOVE. ASSUME 'ATTACK'. 21795 OBJ=IOBJ IOBJ=OBJS(OBJX) GOTO 21200 C QUIT. INTRANSITIVE ONLY. VERIFY INTENT AND EXIT IF THAT'S WHAT HE WANTS. 11800 GAVEUP=YES(22,54,54) 11850 IF(GAVEUP)GOTO 95000 GOTO 2100 C FIND. MIGHT BE CARRYING IT, OR IT MIGHT BE HERE. ELSE GIVE CAVEAT. 21900 IF(AT(OBJ).OR.(LIQ(BOTTLE).EQ.OBJ.AND.AT(BOTTLE)) 1 .OR.K.EQ.LIQLOC(LOC))SPK=94 L1=DWFMAX-1 DO 21920 I=1,L1 21920 IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2.AND.OBJ.EQ.DWARF)SPK=94 IF(CLOSED)SPK=138 IF(ATHAND(OBJ))SPK=24 GOTO 2011 C INVENTORY. IF OBJECT, TREAT SAME AS FIND. ELSE REPORT ON CURRENT BURDEN. C THERE ARE SOME FUNNY CASES, LIKE THE WEARABLE THINGS. ALSO, BOAT C AND BEAR, WHICH AREN'T REALLY CARRIED. LIST OUTER-LEVEL CONTAINERS C AND CONTENTS, IF CONTAINER IS OPEN OR TRANSPARENT. 12000 SPK=98 DO 12050 I=1,MAXOBJ IF(I.EQ.BEAR.OR.I.EQ.BOAT.OR..NOT.HOLDNG(I))GOTO 12050 IF(WEARNG(I))GOTO 12050 IF(SPK.EQ.98)CALL RSPEAK(99) BLKLIN=.FALSE. CALL PSPEAK(I,-1) SPK=0 IF(I.NE.BOAT)CALL LOOKIN(I) 12050 CONTINUE C TELL HIM WHAT HE IS WEARING. K=0 DO 12060 I=1,MAXOBJ IF(.NOT.WEARNG(I))GOTO 12060 IF(K.EQ.0)PRINT 12052 12052 FORMAT(1H ,'You are wearing:') CALL TNOUA(' ',5) CALL PSPEAK(I,-1) K=-1 12060 CONTINUE IF(.NOT.HOLDNG(BOAT))GOTO 12090 CALL RSPEAK(221) CALL LOOKIN(BOAT) 12090 IF(HOLDNG(BEAR))SPK=141 GOTO 2011 C FEED. IF BIRD, NO SEED. SNAKE, DRAGON, TROLL: QUIP. IF DWARF, MAKE HIM C MAD. BEAR, SPECIAL. C CASE 1: FEED CRITTER. *OR* C CASE 2: FEED CRITTER EDIBLE. C [** THIS CASE TRANSFORMED BY PARSER INTO CASE 3 **] C CASE 3: FEED EDIBLE TO CRITTER. 22100 IF(IOBJ.NE.0.AND.LIVING(IOBJ))GOTO 22120 SPK=100 IF(OBJ.EQ.BIRD)GOTO 2011 IF(.NOT.LIVING(OBJ))GOTO 2070 C SEE IF THERE IS ANYTHING EDIBLE AROUND HERE. KK=0 K=0 DO 22110 I=1,MAXOBJ IF(.NOT.HERE(I).OR..NOT.EDIBLE(I))GOTO 22110 K=K+1 KK=I 22110 CONTINUE IOBJ=OBJ OBJ=KK IF(K.EQ.1.OR.DEAD(IOBJ))GOTO 22120 CALL A5TOA1(OTXT(OBJX,1),OTXT(OBJX,2),'?',TK,K) PRINT 22112,(TK(I),I=1,K) 22112 FORMAT (/' What do you want to feed the ',20A1) OBJS(1)=0 OBJX=0 GOTO 2600 C FEED OBJ TO IOBJ. 22120 IF(IOBJ.NE.SNAKE.AND.IOBJ.NE.DRAGON.AND.IOBJ.NE.TROLL)GOTO 22130 SPK=102 IF(IOBJ.EQ.DRAGON.AND.PROP(DRAGON).NE.0)SPK=NOWAY(0) IF(IOBJ.EQ.TROLL)SPK=182 IF(IOBJ.NE.SNAKE.OR.CLOSED.OR.OBJ.NE.BIRD)GOTO 2011 SPK=101 CALL DSTROY(BIRD) PROP(BIRD)=0 TALLY2=TALLY2+1 GOTO 2011 C FEED DWARF? 22130 IF(IOBJ.NE.DWARF)GOTO 22140 SPK=103 DFLAG=DFLAG+1 GOTO 2011