+ EXTERN SAVEGM\r
+ EXTERN RSTRGM\r
+ EXTERN A5TOA1\r
+ SECT AMAIN\r
+ EXTERN BITSET\r
+ EXTERN BUG\r
+ EXTERN CARRY\r
+ EXTERN DROP\r
+ EXTERN DSTROY\r
+ EXTERN GETIN\r
+ EXTERN IABS\r
+ EXTERN JUGGLE\r
+ EXTERN MAX0\r
+ EXTERN MIN0\r
+ EXTERN MOD\r
+ EXTERN MOVE\r
+ EXTERN SPEAK\r
+ EXTERN PSPEAK\r
+ EXTERN PUT\r
+ EXTERN RND\r
+ EXTERN RSPEAK\r
+ EXTERN SPEAK\r
+ EXTERN VOCAB\r
+ EXTERN YES\r
+ EXTERN #FIX\r
+ EXTERN #WRITO\r
+ EXTERN #RENDO\r
+ EXTERN #RSVO\r
+ EXTERN #UE\r
+ EXTERN #EQ\r
+ EXTERN #NE\r
+ EXTERN PCT\r
+ EXTERN GETWRD\r
+ EXTERN PUTWRD\r
+ EXTERN SIXOUT\r
+ JA #ST\r
+#XR, ORG .+10\r
+ TEXT +AMAIN +\r
+#RET, SETX #XR\r
+ SETB #BASE\r
+ JA .+3\r
+#BASE, ORG .+6\r
+ ORG #BASE+30\r
+ FNOP\r
+ JA #RET\r
+ FNOP\r
+#GOBAK, 0;0\r
+HINT, ORG .+3\r
+KENT, ORG .+3\r
+KQ, ORG .+3\r
+K2, ORG .+3\r
+LL, ORG .+3\r
+N, ORG .+3\r
+PBOTL, ORG .+3\r
+SPK, ORG .+3\r
+WD1, ORG .+3\r
+WD1X, ORG .+3\r
+WD2, ORG .+3\r
+WD2X, ORG .+3\r
+YEA, ORG .+3\r
+#TMP, ORG .+30\r
+\r
+ZERO, F 0\r
+ONE, F 1\r
+TWO, F 2\r
+THREE, F 3\r
+#LIT, F 4 / Literals. Too many cause ST overflow\r
+ F 5 /3\r
+ F 6 /6\r
+ F 8 /11\r
+ F 9 /14\r
+ F 10 /17\r
+ F 12 /22\r
+ F 15 /25\r
+ F 16 /30\r
+ F 17 /33\r
+ F 20 /36\r
+ F 22 /41\r
+ F 23 /44\r
+ F 24 /47\r
+ F 25 /52\r
+ F 26 /55\r
+ F 27 /60\r
+ F 30 /63\r
+ F 35 /66\r
+ F 37 /71\r
+ F 39 /74\r
+ F 40 /77\r
+ F 45 /102\r
+ F 49 /105\r
+ F 50 /110\r
+ F 54 /113\r
+ F 57 /116\r
+ F 58 /121\r
+ F 62 /124\r
+ F 65 /127\r
+ F 81 /132\r
+ F 202 /135\r
+ F 91 /140\r
+ F 92 /143\r
+ F 95 /146\r
+ F 99 /151\r
+ F 100 /154\r
+ F 105 /157\r
+ F 110 /162\r
+ F 115 /165\r
+ F 116 /170\r
+ F 117 /173\r
+ F 127 /176\r
+ F 128 /201\r
+ F 129 /204\r
+ F 130 /207\r
+ F 131 /212\r
+ F 132 /215\r
+ F 136 /220\r
+ F 140 /223\r
+ F 141 /226\r
+ F 143 /231\r
+ F 145 /234\r
+ F 162 /237\r
+ F 163 /242\r
+ F 165 /245\r
+ F 175 /250\r
+ F 184 /253\r
+ F 185 /256\r
+ F 186 /261\r
+ F 188 /264\r
+ F 192 /267\r
+ F 193 /272\r
+ F 197 /275\r
+ F 199 /300\r
+ F 201 /303\r
+ F 300 /306\r
+ F 500 /311\r
+ F 1000 /314\r
+ F 2500 /317\r
+ F 10000 /322\r
+PCOND, 0 /325\r
+ JA COND-3\r
+PFIXD, 0 /330\r
+ JA FIXD-3\r
+PHINTS, 0 /333\r
+ JA HINTS-77\r
+PABB, 0 /336\r
+ JA ABB-3\r
+PPLAC, 0 /341\r
+ JA PLAC-3\r
+TENTE, TEXT +ENTE + /344\r
+TPOUR, TEXT +POUR + /347\r
+TWEST, TEXT +WEST + /352\r
+TQUES, TEXT +?@ + /355\r
+TQDOT, TEXT +".@ + /360\r
+TYES, TEXT +YES + /363\r
+TYE, TEXT +YE + /366\r
+TY, TEXT +Y + /371\r
+ F 154 /374\r
+ F 60 /377\r
+ F 29 /402\r
+MINUS1, F -1.0\r
+ #LBL=.\r
+ COMMON ABBCOM\r
+ABB, ORG .+702\r
+ COMMON MISCOM\r
+LINUSE, ORG .+3\r
+TRVS, ORG .+3\r
+CLSSES, ORG .+3\r
+OLDLOC, ORG .+3\r
+LOC, ORG .+3\r
+CVAL, ORG .+44\r
+TK, ORG .+74\r
+NEWLOC, ORG .+3\r
+KEY, ORG .+702\r
+PLAC, ORG .+454\r
+FIXD, ORG .+454\r
+ACTSPK, ORG .+151\r
+COND, ORG .+702\r
+HINTS, ORG .+360\r
+HNTMAX, ORG .+3\r
+PROP, ORG .+454\r
+TALLY, ORG .+3\r
+TALLY2, ORG .+3\r
+HINTLC, ORG .+74\r
+CHLOC, ORG .+3\r
+CHLOC2, ORG .+3\r
+DSEEN, ORG .+22\r
+DFLAG, ORG .+3\r
+DLOC, ORG .+22\r
+DALTLC, ORG .+3\r
+KEYS, ORG .+3\r
+LAMP, ORG .+3\r
+GRATE, ORG .+3\r
+CAGE, ORG .+3\r
+ROD, ORG .+3\r
+ROD2, ORG .+3\r
+STEPS, ORG .+3\r
+BIRD, ORG .+3\r
+DOOR, ORG .+3\r
+PILLOW, ORG .+3\r
+SNAKE, ORG .+3\r
+FISSUR, ORG .+3\r
+TABLET, ORG .+3\r
+CLAM, ORG .+3\r
+OYSTER, ORG .+3\r
+MAGZIN, ORG .+3\r
+DWARF, ORG .+3\r
+KNIFE, ORG .+3\r
+FOOD, ORG .+3\r
+BOTTLE, ORG .+3\r
+WATER, ORG .+3\r
+OIL, ORG .+3\r
+PLANT, ORG .+3\r
+PLANT2, ORG .+3\r
+AXE, ORG .+3\r
+MIRROR, ORG .+3\r
+DRAGON, ORG .+3\r
+CHASM, ORG .+3\r
+TROLL, ORG .+3\r
+TROLL2, ORG .+3\r
+BEAR, ORG .+3\r
+MESSAG, ORG .+3\r
+VEND, ORG .+3\r
+BATTER, ORG .+3\r
+NUGGET, ORG .+3\r
+COINS, ORG .+3\r
+CHEST, ORG .+3\r
+EGGS, ORG .+3\r
+TRIDNT, ORG .+3\r
+VASE, ORG .+3\r
+EMRALD, ORG .+3\r
+PYRAM, ORG .+3\r
+PEARL, ORG .+3\r
+RUG, ORG .+3\r
+CHAIN, ORG .+3\r
+BACK, ORG .+3\r
+LOOK, ORG .+3\r
+CAVE, ORG .+3\r
+NULL, ORG .+3\r
+ENTRNC, ORG .+3\r
+DPRSSN, ORG .+3\r
+SAY, ORG .+3\r
+LOCK, ORG .+3\r
+THROW, ORG .+3\r
+FIND, ORG .+3\r
+INVENT, ORG .+3\r
+TURNS, ORG .+3\r
+LMWARN, ORG .+3\r
+KNFLOC, ORG .+3\r
+DETAIL, ORG .+3\r
+ABBNUM, ORG .+3\r
+NUMDIE, ORG .+3\r
+MAXDIE, ORG .+3\r
+DKILL, ORG .+3\r
+FOOBAR, ORG .+3\r
+BONUS, ORG .+3\r
+CLOCK1, ORG .+3\r
+CLOCK2, ORG .+3\r
+CLOSNG, ORG .+3\r
+PANIC, ORG .+3\r
+CLOSED, ORG .+3\r
+GAVEUP, ORG .+3\r
+SCORNG, ORG .+3\r
+ODLOC, ORG .+22\r
+STREAM, ORG .+3\r
+SPICES, ORG .+3\r
+\r
+ COMMON MISC2\r
+I, ORG .+3\r
+ ORG .+3 /RTXSIZ\r
+ ORG .+3 /CLSMAX\r
+ ORG .+3 /LOCSIZ\r
+CTEXT, ORG .+44\r
+STEXT, ORG .+702\r
+LTEXT, ORG .+702\r
+ ORG .+3 /SECT\r
+TRAVEL, ORG .+1356\r
+TRVCON, ORG .+1356\r
+TRVLOC, ORG .+1356\r
+TRVSIZ, ORG .+3\r
+ ORG .+3 /TABNDX\r
+OBJ, ORG .+3\r
+J, ORG .+3\r
+K, ORG .+3\r
+VERB, ORG .+3\r
+HNTSIZ, ORG .+3\r
+MAXTRS, ORG .+3\r
+HINTED, ORG .+74\r
+ ORG .+3 /HNTLOC\r
+KK, ORG .+3\r
+ COMMON PLACOM\r
+ATLOC, ORG .+702\r
+LINK, ORG .+1130\r
+PLACE, ORG .+454\r
+FIXED, ORG .+454\r
+HOLDNG, ORG .+3\r
+ COMMON PTXCOM\r
+PTEXT, ORG .+454\r
+ COMMON TXTCOM\r
+RTEXT, ORG .+1147\r
+ ORG .+44 /LINES\r
+ ORG .+3 /ASCVAR\r
+ ORG .+3 /TXTLOC\r
+ ORG .+234 /DATA\r
+ COMMON MISC3\r
+ATTACK, ORG .+3\r
+DTOTAL, ORG .+3\r
+OLDLC2, ORG .+3\r
+LIMIT, ORG .+3\r
+MXSCOR, ORG .+3\r
+SCORE, ORG .+3\r
+STICK, ORG .+3\r
+WZDARK, ORG .+3\r
+\f ORG #LBL\r
+#25000,\r
+#RTN, BASE #BASE\r
+ JA #GOBAK\r
+#ST, STARTD\r
+ 0210\r
+ FSTA #GOBAK,0\r
+ 0200\r
+ SETX #XR\r
+ SETB #BASE\r
+ STARTF\r
+ JA #STRT /#G0001\r
+/\r
+/ Statement functions - called with JSA to save space\r
+/\r
+/ TOTING(OBJ)=PLACE(OBJ).EQ.-1\r
+TOTING, 0;0\r
+ ATX 3\r
+ FLDA PLACE-3,3\r
+ FADD ONE\r
+ JSA #EQ\r
+ JA TOTING\r
+\r
+/ AT(OBJ)=PLACE(OBJ).EQ.LOC.OR.FIXED(OBJ).EQ.LOC\r
+AT, 0;0\r
+ ATX 3\r
+ FLDA PLACE-3,3\r
+ FSUB LOC\r
+ JEQ ISAT\r
+ FLDA FIXED-3,3\r
+ FSUB LOC\r
+ISAT, JSA #EQ\r
+ JA AT\r
+\r
+/ FORCED(LOC)=COND(LOC).EQ.2\r
+FORCED, 0;0\r
+ ATX 3\r
+ FLDA COND-3,3\r
+ FSUB TWO\r
+ JSA #EQ\r
+ JA FORCED\r
+\r
+/ HERE(OBJ) = PLACE(OBJ).EQ.LOC .OR. TOTING(OBJ)\r
+HERE, 0;0\r
+ JSA TOTING\r
+ JNE ISHERE\r
+ FLDA LOC\r
+ FSUB PLACE-3,3\r
+ JEQ ISHERE\r
+ FCLA\r
+ JA HERE\r
+ISHERE, FLDA ONE\r
+ JA HERE\r
+\r
+/ DARK(DUMMY)=MOD(COND(LOC),2).EQ.0.AND.(PROP(LAMP).EQ.0.OR.\r
+/ 1 .NOT.HERE(LAMP))\r
+\r
+DARK, 0;0\r
+/ .OR. .NOT. HERE(LAMP)\r
+ FLDA LAMP\r
+ JSA HERE\r
+ JEQ NOTHR\r
+/ .OR. PROP(LAMP) EQ 0\r
+ FLDA LAMP\r
+ ATX 4\r
+ FLDA PROP-3,4\r
+ JNE NOTDRK\r
+/ MOD(COND(LOC),2) .EQ. 0\r
+NOTHR, FLDA LOC / Either prop or not here\r
+ ATX 4\r
+ FLDA COND-3,4 / COND(LOC)\r
+ FDIV TWO / Divided by two\r
+ JSA #FIX\r
+ FMUL TWO\r
+ FSTA #TMP+14\r
+ FLDA COND-3,4 / Get back COND(LOC)\r
+ FSUB #TMP+14 / Now have mod\r
+ JNE NOTDRK / If not zero, not dark\r
+ FLDA ONE\r
+ JA DARK\r
+NOTDRK, FCLA\r
+ JA DARK\r
+\r
+/ LIQ2(PBOTL)=(1-PBOTL)*WATER+(PBOTL/2)*(WATER+OIL)\r
+LIQ2, 0;0\r
+ FLDA ONE\r
+ FSUB PBOTL / 1 - PBOTL\r
+ FMUL WATER / (1-PBOTL)*WATER\r
+ FSTA #TMP+14 / Store first term\r
+ FLDA PBOTL\r
+ FDIV TWO / PBOTL/2\r
+ JSA #FIX\r
+ FSTA #TMP+6\r
+ FLDA WATER\r
+ FADD OIL / WATER+OIL\r
+ FMUL #TMP+6 / (PBOTL/2)*(WATER+OIL)\r
+ FADD #TMP+14\r
+ JA LIQ2 / Done\r
+\r
+/ LIQ(DUMMY)=LIQ2(MAX0(PROP(BOTTLE),-1-PROP(BOTTLE)))\r
+LIQ, 0;0\r
+/PROP(BOTTLE)\r
+ FLDA BOTTLE\r
+ ATX 5\r
+ FLDA PROP-3,5 / PROP(BOTTLE)\r
+ FSTA PBOTL \r
+ FLDA MINUS1\r
+ FSUB PBOTL /-1-PROP(BOTTLE)\r
+ FSTA #TMP+11\r
+ FLDA PBOTL / Find larger\r
+ FSUB #TMP+11\r
+ JGT .+4 / already larger, now PBOTL\r
+ FLDA #TMP+11\r
+ FSTA PBOTL / This is PBOTL\r
+ JSA LIQ2 / Call LIQ2 with this\r
+ JA LIQ / And return\r
+\r
+/ LIQLOC(LOC)=LIQ2((MOD(COND(LOC)/2*2,8)-5)*MOD(COND(LOC)/4,2)+1)\r
+LIQLOC, 0;0\r
+ FLDA LOC / Always called with LOC as arg\r
+ ATX 2\r
+ FLDA COND-3,2 / COND(LOC)\r
+ FSTA #TMP+11 / Save that\r
+ FDIV TWO\r
+ JSA #FIX / COND(LOC)/2\r
+ FMUL TWO / COND(LOC)/2*2\r
+ FSTA #TMP+17\r
+ FDIV #LIT+11 / Modulo 8\r
+ JSA #FIX\r
+ FMUL #LIT+11\r
+ FSTA #TMP+22\r
+ FLDA #TMP+17\r
+ FSUB #TMP+22 / MOD(...)\r
+ FSUB #LIT+3 / -5.\r
+ FSTA #TMP+25 / First Term\r
+ FLDA #TMP+11 / COND(LOC)\r
+ FDIV #LIT / COND(LOC)/4\r
+ JSA #FIX\r
+ FSTA #TMP+17\r
+ FDIV TWO / Mod 2\r
+ JSA #FIX\r
+ FMUL TWO\r
+ FSTA #TMP+22\r
+ FLDA #TMP+17\r
+ FSUB #TMP+22\r
+ FMUL #TMP+25 / Multiply\r
+ FADD ONE / +1\r
+ FSTA PBOTL / Finally got the term\r
+ JSA LIQ2 / Send to LIQ2\r
+ JA LIQLOC\r
+\f/\r
+/ Main routine entry point\r
+/\r
+#STRT, \r
+/1 I=RND(1)\r
+#1, JSR RND\r
+ JA .+4\r
+ JA ONE\r
+ FSTA I\r
+/ HINTED(3)=YES(65,1,0)\r
+ LDX 3,7\r
+ JSR YES\r
+ JA .+10\r
+ JA #LIT+127\r
+ JA ONE\r
+ JA ZERO\r
+ FSTA HINTED-3,7\r
+/ NEWLOC=1\r
+ FLDA ONE\r
+ FSTA NEWLOC\r
+/ LOC = NEWLOC\r
+ FSTA LOC\r
+/ LIMIT=330\r
+ LDX 512,0 /330\r
+ XTA 0\r
+ FSTA LIMIT\r
+/ IF(HINTED(3))LIMIT=1000\r
+ FLDA HINTED-3,7\r
+ JEQ #2\r
+ FLDA #LIT+314\r
+ FSTA LIMIT\r
+/2 IF(NEWLOC.GE.9.OR.NEWLOC.EQ.0.OR..NOT.CLOSNG)GOTO 71\r
+#2, FLDA NEWLOC\r
+ FSUB #LIT+14\r
+ JGE #71\r
+ FLDA NEWLOC\r
+ JEQ #71\r
+ FLDA CLOSNG\r
+ JEQ #71\r
+/ CALL RSPEAK(130)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+207\r
+/ NEWLOC=LOC\r
+ FLDA LOC\r
+ FSTA NEWLOC\r
+/ IF(.NOT.PANIC)CLOCK2=15\r
+ FLDA PANIC\r
+ JNE .+5\r
+ FLDA #LIT+25\r
+ FSTA CLOCK2\r
+/ PANIC=.TRUE.\r
+ FLDA ONE\r
+ FSTA PANIC\r
+/C\r
+/C SEE IF A DWARF HAS SEEN HIM AND HAS COME FROM WHERE HE WANTS TO GO. IF SO,\r
+/C THE DWARF'S BLOCKING HIS WAY. IF COMING FROM PLACE FORBIDDEN TO PIRATE\r
+/C (DWARVES ROOTED IN PLACE) LET HIM GET OUT (AND ATTACKED).\r
+/C\r
+/71 IF(NEWLOC.EQ.LOC.OR.FORCED(LOC).OR.BITSET(LOC,3))GOTO 74\r
+#71, FLDA NEWLOC\r
+ FSUB LOC\r
+ JEQ #74\r
+ FLDA LOC\r
+ JSA FORCED\r
+ JNE #74\r
+ JSR BITSET\r
+ JA .+6\r
+ JA LOC\r
+ JA THREE\r
+ JNE #74\r
+/ DO 73 I=1,5\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/ IF(ODLOC(I).NE.NEWLOC.OR..NOT.DSEEN(I))GOTO 73\r
+#G0047, FLDA I\r
+ ATX 7\r
+ FLDA ODLOC-3,7\r
+ FSUB NEWLOC\r
+ JNE #73\r
+ FLDA DSEEN-3,7\r
+ JEQ #73\r
+/ NEWLOC=LOC\r
+ FLDA LOC\r
+ FSTA NEWLOC\r
+/ CALL RSPEAK(2)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA TWO\r
+/ GOTO 74\r
+ JA #74\r
+/73 CONTINUE\r
+#73, FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+3\r
+ JLE #G0047\r
+\r
+#74, FLDA NEWLOC\r
+ FSTA LOC\r
+/C\r
+/C DWARF STUFF. SEE EARLIER COMMENTS FOR DESCRIPTION OF VARIABLES. REMEMBER\r
+/C SIXTH DWARF IS PIRATE AND IS THUS VERY DIFFERENT EXCEPT FOR MOTION RULES.\r
+/C\r
+/C FIRST OFF, DON'T LET THE DWARVES FOLLOW HIM INTO A PIT OR A WALL. ACTIVATE\r
+/C THE WHOLE MESS THE FIRST TIME HE GETS AS FAR AS THE HALL OF MISTS (LOC 15).\r
+/C IF NEWLOC IS FORBIDDEN TO PIRATE (IN PARTICULAR, IF IT'S BEYOND THE TROLL\r
+/C BRIDGE), BYPASS DWARF STUFF. THAT WAY PIRATE CAN'T STEAL RETURN TOLL, AND\r
+/C DWARVES CAN'T MEET THE BEAR. ALSO MEANS DWARVES WON'T FOLLOW HIM INTO DEAD\r
+/C END IN MAZE, BUT C'EST LA VIE. THEY'LL WAIT FOR HIM OUTSIDE THE DEAD END.\r
+/C\r
+/ IF(LOC.EQ.0.OR.FORCED(LOC).OR.BITSET(NEWLOC,3))GOTO 2000\r
+ JEQ #2000\r
+ FLDA LOC\r
+ JSA FORCED\r
+ JNE #2000\r
+ JSR BITSET\r
+ JA .+6\r
+ JA NEWLOC\r
+ JA THREE\r
+ JNE #2000\r
+/ IF(DFLAG.NE.0)GOTO 6000\r
+ FLDA DFLAG\r
+ JNE #6000\r
+/ IF(LOC.GE.15)DFLAG=1\r
+ FLDA LOC\r
+ FSUB #LIT+25\r
+ JLT #2000\r
+ FLDA ONE\r
+ FSTA DFLAG\r
+/ GOTO 2000\r
+ JA #2000\r
+\r
+/C\r
+/C WHEN WE ENCOUNTER THE FIRST DWARF, WE KILL 0, 1, OR 2 OF THE 5 DWARVES. IF\r
+/C ANY OF THE SURVIVORS IS AT LOC, REPLACE HIM WITH THE ALTERNATE.\r
+/C\r
+/6000 IF(DFLAG.NE.1)GOTO 6010\r
+#6000, FLDA DFLAG\r
+ FSUB ONE\r
+ JNE #6010\r
+/ IF(LOC.LT.15.OR.PCT(95))GOTO 2000\r
+ FLDA LOC\r
+ FSUB #LIT+25\r
+ JLT #2000\r
+ JSR PCT\r
+ JA .+4\r
+ JA #LIT+146\r
+ JNE #2000\r
+/ DFLAG=2\r
+ FLDA TWO\r
+ FSTA DFLAG\r
+/ DO 6001 I=1,2\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/ J=1+RND(5)\r
+#G0051, JSR RND\r
+ JA .+4\r
+ JA #LIT+3\r
+ FADD ONE\r
+ FSTA J\r
+\r
+/6001 IF(PCT(50))DLOC(J)=0\r
+#6001, JSR PCT\r
+ JA .+4\r
+ JA #LIT+110\r
+ JEQ .+10\r
+ FLDA J\r
+ ATX 7\r
+ FCLA\r
+ FSTA DLOC-3,7\r
+ FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB TWO\r
+ JLE #G0051\r
+/ DO 6002 I=1,5\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/ IF(DLOC(I).EQ.LOC)DLOC(I)=DALTLC\r
+#G0053, FLDA I\r
+ ATX 7\r
+ FLDA DLOC-3,7\r
+ FSUB LOC\r
+ JNE #6002\r
+ FLDA DALTLC\r
+ FSTA DLOC-3,7\r
+/6002 ODLOC(I)=DLOC(I)\r
+#6002, FLDA I\r
+ ATX 7\r
+ FLDA DLOC-3,7\r
+ FSTA ODLOC-3,7\r
+ FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+3\r
+ JLE #G0053\r
+/ CALL RSPEAK(3)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA THREE\r
+/ CALL DROP(AXE,LOC)\r
+ JSR DROP\r
+/ GOTO 2000\r
+ JA #2000\r
+ JA AXE\r
+ JA LOC\r
+\r
+/C\r
+/C THINGS ARE IN FULL SWING. MOVE EACH DWARF AT RANDOM, EXCEPT IF HE'S SEEN US\r
+/C HE STICKS WITH US. DWARVES NEVER GO TO LOCS <15. IF WANDERING AT RANDOM,\r
+/C THEY DON'T BACK UP UNLESS THERE'S NO ALTERNATIVE. IF THEY DON'T HAVE TO\r
+/C MOVE, THEY ATTACK. AND, OF COURSE, DEAD DWARVES DON'T DO MUCH OF ANYTHING.\r
+/C\r
+/6010 DTOTAL=0\r
+#6010, FCLA\r
+ FSTA DTOTAL\r
+/ ATTACK=0\r
+ FSTA ATTACK\r
+/ STICK=0\r
+ FSTA STICK\r
+/ DO 6030 I=1,6\r
+ FLDA ONE\r
+ FSTA I\r
+/ IF (DLOC(I).EQ.0)GOTO 6030\r
+#G0055, FLDA I\r
+ ATX 7\r
+ FLDA DLOC-3,7\r
+ JEQ #6030\r
+/ J=1\r
+ FLDA ONE\r
+ FSTA J\r
+/ KK=DLOC(I)\r
+ FLDA DLOC-3,7\r
+ FSTA KK\r
+/ KK=KEY(KK)\r
+ ATX 7\r
+ FLDA KEY-3,7\r
+ FSTA KK\r
+/ IF(KK.EQ.0)GOTO 6016\r
+ JEQ #6016\r
+\r
+/6012 NEWLOC=TRVLOC(KK)\r
+#6012, JSR GETWRD\r
+ JA .+10\r
+ JA TRVLOC\r
+ JA KK\r
+ JA ZERO\r
+ FSTA NEWLOC\r
+/ IF(NEWLOC.GT.300.OR.NEWLOC.LT.15.OR.NEWLOC.EQ.ODLOC(I)\r
+/ 1 .OR.(J.GT.1.AND.NEWLOC.EQ.TK(J-1)).OR.J.GE.20\r
+/ 2 .OR.NEWLOC.EQ.DLOC(I).OR.FORCED(NEWLOC)\r
+/ 3 .OR.(I.EQ.6.AND.BITSET(NEWLOC,3))\r
+/ 4 .OR.TRVCON(KK).EQ.100)GOTO 6014\r
+ FSUB #LIT+306\r
+ JGT #6014\r
+ FLDA NEWLOC\r
+ FSUB #LIT+25\r
+ JLT #6014\r
+ FLDA I\r
+ ATX 7\r
+ FLDA NEWLOC\r
+ FSUB ODLOC-3,7\r
+ JEQ #6014\r
+ FLDA J\r
+ FSUB ONE\r
+ JLE .+11\r
+ ATX 6\r
+ FLDA NEWLOC\r
+ FSUB TK-3,6\r
+ JEQ #6014\r
+ FLDA J\r
+ FSUB #LIT+36\r
+ JGE #6014\r
+ FLDA I\r
+ ATX 7\r
+ FLDA NEWLOC\r
+ FSUB DLOC-3,7\r
+ JEQ #6014\r
+ FLDA NEWLOC\r
+ JSA FORCED\r
+ JNE #6014\r
+ FLDA I\r
+ FSUB #LIT+6\r
+ JNE .+14\r
+ JSR BITSET\r
+ JA .+6\r
+ JA NEWLOC\r
+ JA THREE\r
+ JNE #6014\r
+ JSR GETWRD\r
+ JA .+10\r
+ JA TRVCON\r
+ JA KK\r
+ JA ZERO\r
+ FSUB #LIT+154\r
+ JEQ #6014\r
+/ TK(J)=NEWLOC\r
+ FLDA J\r
+ ATX 7\r
+ FLDA NEWLOC\r
+ FSTA TK-3,7\r
+/ J=J+1\r
+ FLDA ONE\r
+ FADDM J\r
+\r
+/6014 KK=KK+1\r
+#6014, FLDA KK\r
+ FADD ONE\r
+ FSTA KK\r
+/ IF(TRAVEL(KK-1).GE.0)GOTO 6012\r
+ FSUB ONE\r
+ FSTA #TMP\r
+ JSR GETWRD\r
+ JA .+10\r
+ JA TRAVEL\r
+ JA #TMP\r
+ JA ZERO\r
+ JGE #6012\r
+/6016 TK(J)=ODLOC(I)\r
+#6016, FLDA J\r
+ ATX 6\r
+ FLDA I\r
+ ATX 7\r
+ FLDA ODLOC-3,7\r
+ FSTA TK-3,6\r
+/ IF(J.GE.2)J=J-1\r
+ FLDA J\r
+ FSUB TWO\r
+ JLT .+5\r
+ FLDA MINUS1\r
+ FADDM J\r
+/ J=1+RND(J)\r
+ JSR RND\r
+ JA .+4\r
+ JA J\r
+ FADD ONE\r
+ FSTA J\r
+/ ODLOC(I)=DLOC(I)\r
+ FLDA DLOC-3,7\r
+ FSTA ODLOC-3,7\r
+/ DLOC(I)=TK(J)\r
+ FLDA J\r
+ ATX 6\r
+ FLDA TK-3,6\r
+ FSTA DLOC-3,7\r
+/ DSEEN(I)=(DSEEN(I).AND.LOC.GE.15)\r
+/ 1 .OR.(DLOC(I).EQ.LOC.OR.ODLOC(I).EQ.LOC)\r
+ FLDA LOC\r
+ FSUB #LIT+25\r
+ JLT .+6\r
+ FLDA DSEEN-3,7\r
+ JNE .+21\r
+ FLDA DLOC-3,7\r
+ FSUB LOC\r
+ JEQ .+13\r
+ FLDA ODLOC-3,7\r
+ FSUB LOC\r
+ JEQ .+5\r
+ FCLA\r
+ JA .+3\r
+ FLDA ONE\r
+ FSTA DSEEN-3,7\r
+/ IF(.NOT.DSEEN(I))GOTO 6030\r
+ JEQ #6030\r
+/ DLOC(I)=LOC\r
+ FLDA LOC\r
+ FSTA DLOC-3,7\r
+/ IF(I.NE.6)GOTO 6027\r
+ FLDA I\r
+ FSUB #LIT+6\r
+ JNE #6027\r
+/C\r
+/C THE PIRATE'S SPOTTED HIM. HE LEAVES HIM ALONE ONCE WE'VE FOUND CHEST.\r
+/C K COUNTS IF A TREASURE IS HERE. IF NOT, AND TALLY=TALLY2 PLUS ONE FOR\r
+/C AN UNSEEN CHEST, LET THE PIRATE BE SPOTTED.\r
+/C\r
+/ IF(LOC.EQ.CHLOC.OR.PROP(CHEST).GE.0)GOTO 6030\r
+\r
+ FLDA LOC\r
+ FSUB CHLOC\r
+ JEQ #6030\r
+ FLDA CHEST\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JGE #6030\r
+/ K=0\r
+ FCLA\r
+ FSTA K\r
+/ DO 6020 J=50,MAXTRS\r
+ FLDA #LIT+110\r
+ FSTA J\r
+/C\r
+/C PIRATE WON'T TAKE PYRAMID FROM PLOVER ROOM OR DARK ROOM (TOO EASY!).\r
+/C\r
+/ IF(J.EQ.PYRAM.AND.(LOC.EQ.PLAC(PYRAM)\r
+/ 1 .OR.LOC.EQ.PLAC(EMRALD)))GOTO 6020\r
+#G0057, FLDA J\r
+ FSUB PYRAM\r
+ JNE .+13\r
+ FLDA PYRAM\r
+ ATX 7\r
+ FLDA LOC\r
+ FSUB PLAC-3,7\r
+ JEQ #6020\r
+ FLDA EMRALD\r
+ ATX 6\r
+ FLDA LOC\r
+ FSUB PLAC-3,6\r
+ JEQ #6020\r
+/ IF(TOTING(J))GOTO 6022\r
+ FLDA J\r
+ JSA TOTING\r
+ JNE #6022\r
+\r
+/6020 IF(HERE(J))K=1\r
+#6020, FLDA J\r
+ JSA HERE\r
+ JEQ .+5\r
+ FLDA ONE\r
+ FSTA K\r
+ FLDA J\r
+ FADD ONE\r
+ FSTA J\r
+ FSUB MAXTRS\r
+ JLE #G0057\r
+/ IF(TALLY.EQ.TALLY2+1.AND.K.EQ.0.AND.PLACE(CHEST).EQ.0\r
+/ 1 .AND.HERE(LAMP).AND.PROP(LAMP).EQ.1)GOTO 6025\r
+ FLDA TALLY2\r
+ FADD ONE\r
+ FSUB TALLY\r
+ JNE #M4\r
+ FLDA K\r
+ JNE #M4\r
+ FLDA CHEST\r
+ ATX 7\r
+ FLDA PLACE-3,7\r
+ JNE #M4\r
+ FLDA LAMP\r
+ JSA HERE\r
+ JEQ #M4\r
+ FLDA LAMP\r
+ ATX 6\r
+ FLDA PROP-3,6\r
+ FSUB ONE\r
+ JEQ #6025\r
+/ IF(ODLOC(6).NE.DLOC(6).AND.PCT(20))CALL RSPEAK(127)\r
+#M4, FLDA #LIT+6\r
+ ATX 7\r
+ FLDA ODLOC-3,7\r
+ FSUB DLOC-3,7\r
+ JEQ #6030\r
+ JSR PCT\r
+ JA .+4\r
+ JA #LIT+36\r
+ JEQ #6030\r
+ JSR RSPEAK\r
+/ GOTO 6030\r
+ JA #6030\r
+ JA #LIT+176\r
+/C\r
+/6022 CALL RSPEAK(128)\r
+#6022, JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+201\r
+/C\r
+/C DON'T STEAL CHEST BACK FROM TROLL!\r
+/C\r
+/ IF(PLACE(MESSAG).EQ.0)CALL MOVE(CHEST,CHLOC)\r
+ FLDA MESSAG\r
+ ATX 7\r
+ FLDA PLACE-3,7\r
+ JNE .+12\r
+ JSR MOVE\r
+ JA .+6\r
+ JA CHEST\r
+ JA CHLOC\r
+/ CALL MOVE(MESSAG,CHLOC2)\r
+ JSR MOVE\r
+ JA .+6\r
+ JA MESSAG\r
+ JA CHLOC2\r
+/ DO 6023 J=50,MAXTRS\r
+ FLDA #LIT+110\r
+ FSTA J\r
+\r
+/ IF(J.EQ.PYRAM.AND.(LOC.EQ.PLAC(PYRAM)\r
+/ 1 .OR.LOC.EQ.PLAC(EMRALD)))GOTO 6023\r
+#G0063, FLDA J\r
+ FSUB PYRAM\r
+ JNE .+13\r
+ FLDA PYRAM\r
+ ATX 7\r
+ FLDA LOC\r
+ FSUB PLAC-3,7\r
+ JEQ #6023\r
+ FLDA EMRALD\r
+ ATX 6\r
+ FLDA LOC\r
+ FSUB PLAC-3,6\r
+ JEQ #6023\r
+/ IF(AT(J).AND.FIXED(J).EQ.0)CALL CARRY(J,LOC)\r
+ FLDA J\r
+ JSA AT\r
+ JEQ .+21\r
+ FLDA J\r
+ ATX 7\r
+ FLDA FIXED-3,7\r
+ JNE .+12\r
+ JSR CARRY\r
+ JA .+6\r
+ JA J\r
+ JA LOC\r
+/ IF(TOTING(J))CALL DROP(J,CHLOC)\r
+ FLDA J\r
+ JSA TOTING\r
+ JEQ #6023\r
+ JSR DROP\r
+ JA .+6\r
+ JA J\r
+ JA CHLOC\r
+/6023 CONTINUE\r
+#6023, FLDA J\r
+ FADD ONE\r
+ FSTA J\r
+ FSUB MAXTRS\r
+ JLE #G0063\r
+\r
+/6024 DLOC(6)=CHLOC\r
+#6024, FLDA #LIT+6\r
+ ATX 7\r
+ FLDA CHLOC\r
+ FSTA DLOC-3,7\r
+/ ODLOC(6)=CHLOC\r
+ FSTA ODLOC-3,7\r
+/ DSEEN(6)=.FALSE.\r
+ FCLA\r
+ FSTA DSEEN-3,7\r
+/ GOTO 6030\r
+ JA #6030\r
+\r
+/C\r
+/6025 CALL RSPEAK(186)\r
+\r
+#6025, JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+261\r
+/ CALL MOVE(CHEST,CHLOC)\r
+ JSR MOVE\r
+ JA .+6\r
+ JA CHEST\r
+ JA CHLOC\r
+/ CALL MOVE(MESSAG,CHLOC2)\r
+ JSR MOVE\r
+/ GOTO 6024\r
+ JA #6024\r
+ JA MESSAG\r
+ JA CHLOC2\r
+\r
+/C\r
+/C THIS THREATENING LITTLE DWARF IS IN THE ROOM WITH HIM!\r
+/C\r
+/6027 DTOTAL=DTOTAL+1\r
+#6027, FLDA ONE\r
+ FADDM DTOTAL\r
+/ IF(ODLOC(I).NE.DLOC(I))GOTO 6030\r
+ FLDA I\r
+ ATX 7\r
+ FLDA ODLOC-3,7\r
+ FSUB DLOC-3,7\r
+ JNE #6030\r
+/ ATTACK=ATTACK+1\r
+ FLDA ONE\r
+ FADDM ATTACK\r
+/ IF(KNFLOC.GE.0)KNFLOC=LOC\r
+ FLDA KNFLOC\r
+ JLT .+6\r
+ FLDA LOC\r
+ FSTA KNFLOC\r
+/ IF(RND(1000).LT.95*(DFLAG-2))STICK=STICK+1\r
+ JSR RND\r
+ JA .+4\r
+ JA #LIT+314\r
+ FSTA #TMP\r
+ FLDA DFLAG\r
+ FSUB TWO\r
+ FMUL #LIT+146\r
+ FSUB #TMP\r
+ JLT #6030\r
+ FLDA ONE\r
+ FADDM STICK\r
+/6030 CONTINUE\r
+#6030, FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+6\r
+ JLE #G0055\r
+/C\r
+/C NOW WE KNOW WHAT'S HAPPENING. LET'S TELL THE POOR SUCKER ABOUT IT.\r
+/C\r
+/ IF(DTOTAL.EQ.0)GOTO 2000\r
+ FLDA DTOTAL\r
+ JEQ #2000\r
+/ IF(DTOTAL.EQ.1)GOTO 75\r
+ FSUB ONE\r
+ JEQ #75\r
+/ TYPE 67,DTOTAL\r
+/67 FORMAT(' There are ',I1,' threatening little dwarves in the'\r
+/ 1 ,' room with you.')\r
+\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #67A\r
+ JA ZERO\r
+ JA TWO\r
+\r
+ TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #67\r
+ FLDA DTOTAL\r
+ TRAP3 #RSVO\r
+ TRAP3 #RENDO\r
+\r
+ JSR SIXOUT\r
+/ GOTO 77\r
+ JA #77\r
+\r JA #67B\r
+ JA ZERO\r
+ JA ONE\r
+\r
+/75 CALL RSPEAK(4)\r
+#75, JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT\r
+\r
+/77 IF(ATTACK.EQ.0)GOTO 2000\r
+#77, FLDA ATTACK\r
+ JEQ #2000\r
+/ IF(DFLAG.EQ.2)DFLAG=3\r
+ FLDA DFLAG\r
+ FSUB TWO\r
+ JNE .+5\r
+ FLDA THREE\r
+ FSTA DFLAG\r
+/ IF(ATTACK.EQ.1)GOTO 79\r
+ FLDA ATTACK\r
+ FSUB ONE\r
+ JEQ #79\r
+/ TYPE 78,ATTACK\r
+/78 FORMAT(' ',I1,' of them throw knives at you!')\r
+ TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #78\r
+ FLDA ATTACK\r
+ TRAP3 #RSVO\r
+ TRAP3 #RENDO\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #78B\r
+ JA ZERO\r
+ JA ONE\r
+/ K=6\r
+ FLDA #LIT+6\r
+ FSTA K\r
+\r
+/82 IF(STICK.GT.1)GOTO 83\r
+#82, FLDA STICK\r
+ FSUB ONE\r
+ JGT #83\r
+/ CALL RSPEAK(K+STICK)\r
+ FLDA K\r
+ FADD STICK\r
+ FSTA #TMP\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #TMP\r
+/ IF(STICK.EQ.0)GOTO 2000\r
+ FLDA STICK\r
+ JEQ #2000\r
+/ GOTO 84\r
+ JA #84\r
+\r
+/83 TYPE 68,STICK\r
+#83, TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #68\r
+ FLDA STICK\r
+ TRAP3 #RSVO\r
+ TRAP3 #RENDO\r
+\r
+/68 FORMAT(' ',I1,' of them get you!')\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #68B\r
+ JA ZERO\r
+ JA ONE\r
+/84 OLDLC2=LOC\r
+#84, FLDA LOC\r
+ FSTA OLDLC2\r
+/ GOTO 99\r
+ JA #99\r
+\r
+/C\r
+/79 CALL RSPEAK(5)\r
+#79, JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+3\r
+/ K=52\r
+ LDX 64,0 /52\r
+ XTA 0\r
+ FSTA K\r
+/ GOTO 82\r
+ JA #82\r
+\r
+/C DESCRIBE THE CURRENT LOCATION AND (MAYBE) GET NEXT COMMAND.\r
+/C\r
+/C PRINT TEXT FOR CURRENT LOC.\r
+/C\r
+/2000 IF(LOC.EQ.0)GOTO 99\r
+#2000, FLDA LOC\r
+ JEQ #99\r
+/ KK=STEXT(LOC)\r
+ FLDA LOC\r
+ ATX 7\r
+ FLDA STEXT-3,7\r
+ FSTA KK\r
+/ KENT=0\r
+ FCLA\r
+ FSTA KENT\r
+/ IF (ABBNUM.NE.0) KENT=MOD(ABB(LOC),ABBNUM)\r
+ FLDA ABBNUM\r
+ JEQ .+26\r
+ FLDA LOC\r
+ ATX 7\r
+ XTA 7\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PABB\r
+ FSTA .+7\r
+ STARTF\r
+ JSR MOD\r
+ JA .+6\r
+ JA .\r
+ JA ABBNUM\r
+ FSTA KENT\r
+/ IF (KENT.EQ.0.OR.KK.EQ.0) KK=LTEXT(LOC)\r
+NOMOD, FLDA KENT\r
+ JEQ .+6\r
+ FLDA KK\r
+ JNE .+11\r
+ FLDA LOC\r
+ ATX 7\r
+ FLDA LTEXT-3,7\r
+ FSTA KK\r
+/ IF(FORCED(LOC).OR..NOT.DARK(0))GOTO 2001\r
+ FLDA LOC\r
+ JSA FORCED\r
+ JNE #2001\r
+ JSA DARK\r
+ JEQ #2001\r
+/ IF(WZDARK.AND.PCT(35))GOTO 90\r
+ FLDA WZDARK\r
+ JEQ .+12\r
+ JSR PCT\r
+ JA .+4\r
+ JA #LIT+66\r
+ JNE #90\r
+/ KK=RTEXT(16)\r
+ FLDA RTEXT+55\r
+ FSTA KK\r
+\r
+/2001 IF(TOTING(BEAR))CALL RSPEAK(141)\r
+#2001, FLDA BEAR\r
+ JSA TOTING\r
+ JEQ .+10\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+226\r
+/ CALL SPEAK(KK)\r
+ JSR SPEAK\r
+ JA .+4\r
+ JA KK\r
+/ K=1\r
+ FLDA ONE\r
+ FSTA K\r
+/ IF(FORCED(LOC))GOTO 8\r
+ FLDA LOC\r
+ JSA FORCED\r
+ JNE #8\r
+/ IF(LOC.EQ.33.AND.PCT(25).AND..NOT.CLOSNG)CALL RSPEAK(8)\r
+ LDX 41,0 /33\r
+ XTA 0\r
+ FSUB LOC\r
+ JNE .+24\r
+ JSR PCT\r
+ JA .+4\r
+ JA #LIT+52\r
+ JEQ .+14\r
+ FLDA CLOSNG\r
+ JNE .+10\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+11\r
+/C\r
+/C PRINT OUT DESCRIPTIONS OF OBJECTS AT THIS LOCATION. IF NOT CLOSING AND\r
+/C PROPERTY VALUE IS NEGATIVE, TALLY OFF ANOTHER TREASURE. RUG IS SPECIAL\r
+/C CASE; ONCE SEEN, ITS PROP IS 1 (DRAGON ON IT) TILL DRAGON IS KILLED.\r
+/C SIMILARLY FOR CHAIN; PROP IS INITIALLY 1 (LOCKED TO BEAR). THESE HACKS\r
+/C ARE BECAUSE PROP=0 IS NEEDED TO GET FULL SCORE.\r
+/C\r
+/ IF(DARK(0))GOTO 2012\r
+ JSA DARK\r
+ JNE #2012\r
+/ ABB(LOC)=ABB(LOC)+1\r
+ FLDA LOC\r
+ ATX 7\r
+ FLDA ABB-3,7\r
+ FADD ONE\r
+ FSTA ABB-3,7\r
+/ I=ATLOC(LOC)\r
+ FLDA ATLOC-3,7\r
+ FSTA I\r
+\r
+/2004 IF(I.EQ.0)GOTO 2012\r
+#2004, FLDA I\r
+ JEQ #2012\r
+/ OBJ=I\r
+ FSTA OBJ\r
+/ IF(OBJ.GT.100)OBJ=OBJ-100\r
+ FSUB #LIT+154\r
+ JLE .+4\r
+/ FLDA OBJ\r
+/ FSUB #LIT+154\r
+ FSTA OBJ\r
+/ IF(OBJ.EQ.STEPS.AND.TOTING(NUGGET))GOTO 2008\r
+ FLDA OBJ\r
+ FSUB STEPS\r
+ JNE .+10\r
+ FLDA NUGGET\r
+ JSA TOTING\r
+ JNE #2008\r
+/ IF(PROP(OBJ).GE.0)GOTO 2006\r
+ FLDA OBJ\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JGE #2006\r
+/ IF(CLOSED)GOTO 2008\r
+ FLDA CLOSED\r
+ JNE #2008\r
+/ PROP(OBJ)=0\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ IF(OBJ.EQ.RUG.OR.OBJ.EQ.CHAIN)PROP(OBJ)=1\r
+ FLDA OBJ\r
+ FSUB RUG\r
+ JEQ .+10\r
+ FLDA OBJ\r
+ FSUB CHAIN\r
+ JNE .+5\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+/ TALLY=TALLY-1\r
+ FLDA TALLY\r
+ FADD MINUS1\r
+ FSTA TALLY\r
+/C IF REMAINING TREASURES TOO ELUSIVE, ZAP HIS LAMP.\r
+/ IF(TALLY.EQ.TALLY2.AND.TALLY.NE.0)LIMIT=MIN0(35,LIMIT)\r
+ JEQ #2006\r
+ FSUB TALLY2\r
+ JNE #2006\r
+ JSR MIN0\r
+ JA .+6\r
+ JA #LIT+66\r
+ JA LIMIT\r
+ FSTA LIMIT\r
+/2006 KK=PROP(OBJ)\r
+#2006, FLDA OBJ\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FSTA KK\r
+/ IF(OBJ.EQ.STEPS.AND.LOC.EQ.FIXED(STEPS))KK=1\r
+ FLDA OBJ\r
+ FSUB STEPS\r
+ JNE .+16\r
+ FLDA STEPS\r
+ ATX 7\r
+ FLDA LOC\r
+ FSUB FIXED-3,7\r
+ JNE .+5\r
+ FLDA ONE\r
+ FSTA KK\r
+/ CALL PSPEAK(OBJ,KK)\r
+ JSR PSPEAK\r
+ JA .+6\r
+ JA OBJ\r
+ JA KK\r
+\r
+/2008 I=LINK(I)\r
+#2008, FLDA I\r
+ ATX 7\r
+ FLDA LINK-3,7\r
+ FSTA I\r
+/ GOTO 2004\r
+ JA #2004\r
+\r
+/2009 K=54\r
+#2009, FLDA #LIT+113\r
+ FSTA K\r
+/2010 SPK=K\r
+#2010, FLDA K\r
+ FSTA SPK\r
+\r
+/2011 CALL RSPEAK(SPK)\r
+#2011, JSR RSPEAK\r
+ JA .+4\r
+ JA SPK\r
+\r
+/2012 VERB=0\r
+#2012, FCLA\r
+ FSTA VERB\r
+/ OBJ=0\r
+ FSTA OBJ\r
+\r
+/C\r
+/C CHECK IF THIS LOC IS ELIGIBLE FOR ANY HINTS. IF BEEN HERE LONG ENOUGH,\r
+/C BRANCH TO HELP SECTION (ON LATER PAGE). HINTS ALL COME BACK HERE EVENTUALLY\r
+/C TO FINISH THE LOOP. IGNORE "HINTS" < 4 (SPECIAL STUFF, SEE DATABASE NOTES).\r
+/C\r
+/2600 DO 2602 HINT=4,HNTMAX\r
+#2600, FLDA #LIT\r
+ FSTA HINT\r
+\r
+/ IF(HINTED(HINT))GOTO 2602\r
+#G0102, FLDA HINT\r
+ ATX 7\r
+ FLDA HINTED-3,7\r
+ JNE #2602\r
+/ IF(.NOT.BITSET(LOC,HINT))HINTLC(HINT)=-1\r
+ JSR BITSET\r
+ JA .+6\r
+ JA LOC\r
+ JA HINT\r
+ JNE .+6\r
+ FLDA MINUS1\r
+ FSTA HINTLC-3,7\r
+/ HINTLC(HINT)=HINTLC(HINT)+1\r
+ FLDA ONE\r
+ FADDM HINTLC-3,7\r
+/ IF(HINTLC(HINT).GE.HINTS(HINT,1))GOTO 40000\r
+ FLDA #LIT+36\r
+ FADD HINT\r
+ ATX 6\r
+ FLDA HINTLC-3,7\r
+ FSUB HINTS-0077,6\r
+ JGE #40000\r
+\r
+/2602 CONTINUE\r
+#2602, FLDA HINT\r
+ FADD ONE\r
+ FSTA HINT\r
+ FSUB HNTMAX\r
+ JLE #G0102\r
+/C\r
+/C KICK THE RANDOM NUMBER GENERATOR JUST TO ADD VARIETY TO THE CHASE. ALSO,\r
+/C IF CLOSING TIME, CHECK FOR ANY OBJECTS BEING TOTED WITH PROP < 0 AND SET\r
+/C THE PROP TO -1-PROP. THIS WAY OBJECTS WON'T BE DESCRIBED UNTIL THEY'VE\r
+/C BEEN PICKED UP AND PUT DOWN SEPARATE FROM THEIR RESPECTIVE PILES. DON'T\r
+/C TICK CLOCK1 UNLESS WELL INTO CAVE (AND NOT AT Y2).\r
+/C\r
+/ IF(.NOT.CLOSED)GOTO 2605\r
+ FLDA CLOSED\r
+ JEQ #2605\r
+/ IF(PROP(OYSTER).LT.0.AND.TOTING(OYSTER))\r
+/ 1 CALL PSPEAK(OYSTER,1)\r
+\r
+ FLDA OYSTER\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JGE .+20\r
+ FLDA OYSTER\r
+ JSA TOTING\r
+ JEQ .+12\r
+ JSR PSPEAK\r
+ JA .+6\r
+ JA OYSTER\r
+ JA ONE\r
+/ DO 2604 I=1,100\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/2604 IF(TOTING(I).AND.PROP(I).LT.0)PROP(I)=-1-PROP(I)\r
+#2604, FLDA I\r
+ ATX 7\r
+ JSA TOTING\r
+ JEQ .+13\r
+ FLDA PROP-3,7\r
+ JGE .+7\r
+ FLDA MINUS1\r
+ FSUB PROP-3,7\r
+ FSTA PROP-3,7\r
+ FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+154\r
+ JLE #2604\r
+\r
+/2605 WZDARK=DARK(0)\r
+#2605, JSA DARK\r
+ FSTA WZDARK\r
+/ IF(KNFLOC.GT.0.AND.KNFLOC.NE.LOC)KNFLOC=0\r
+ FLDA KNFLOC\r
+ JLE .+11\r
+ FSUB LOC\r
+ JEQ .+5\r
+ FCLA\r
+ FSTA KNFLOC\r
+/ I=RND(1)\r
+ JSR RND\r
+ JA .+4\r
+ JA ONE\r
+/ CALL GETIN(WD1,WD1X,WD2,WD2X)\r
+ JSR GETIN\r
+ JA .+12\r
+ JA WD1\r
+ JA WD1X\r
+ JA WD2\r
+ JA WD2X\r
+\r
+/C\r
+/C EVERY INPUT, CHECK "FOOBAR" FLAG. IF ZERO, NOTHING'S GOING ON. IF POS,\r
+/C MAKE NEG. IF NEG, HE SKIPPED A WORD, SO MAKE IT ZERO.\r
+/C\r
+/2608 FOOBAR=MIN0(0,-FOOBAR)\r
+#2608, FLDA FOOBAR\r
+ FNEG\r
+ FSTA #TMP\r
+ JSR MIN0\r
+ JA .+6\r
+ JA ZERO\r
+ JA #TMP\r
+ FSTA FOOBAR\r
+/ TURNS=TURNS+1\r
+ FLDA ONE\r
+ FADDM TURNS\r
+/C IF(VERB.EQ.SAY.AND.WD2.NE.0)VERB=0\r
+/C IF(VERB.EQ.SAY)GOTO 4090\r
+/ IF(TALLY.EQ.0.AND.LOC.GE.15.AND.LOC.NE.33)CLOCK1=CLOCK1-1\r
+ FLDA TALLY\r
+ JNE .+23\r
+ FLDA LOC\r
+ FSUB #LIT+25\r
+ JLT .+16\r
+ LDX 41,0 /33\r
+ XTA 0\r
+ FSUB LOC\r
+ JEQ .+7\r
+ FLDA CLOCK1\r
+ FSUB ONE\r
+ FSTA CLOCK1\r
+/ IF(CLOCK1.EQ.0)GOTO 10000\r
+ FLDA CLOCK1\r
+ JEQ #10000\r
+/ IF(CLOCK1.LT.0)CLOCK2=CLOCK2-1\r
+ JGE .+7\r
+ FLDA CLOCK2\r
+ FSUB ONE\r
+ FSTA CLOCK2\r
+/ IF(CLOCK2.EQ.0)GOTO 11000\r
+ FLDA CLOCK2\r
+ JEQ #11000\r
+/ IF(PROP(LAMP).EQ.1)LIMIT=LIMIT-1\r
+ FLDA LAMP\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FSUB ONE\r
+ JNE .+5\r
+ FLDA MINUS1\r
+ FADDM LIMIT\r
+/ IF(LIMIT.LE.30.AND.HERE(BATTER).AND.PROP(BATTER).EQ.0\r
+/ 1 .AND.HERE(LAMP))GOTO 12000\r
+ FLDA LIMIT\r
+ FSUB #LIT+63\r
+ JGT .+25\r
+ FLDA BATTER\r
+ JSA HERE\r
+ JEQ .+17\r
+ FLDA BATTER\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JNE .+10\r
+ FLDA LAMP\r
+ JSA HERE\r
+ JNE #12000\r
+/ IF(LIMIT.EQ.0)GOTO 12400\r
+ FLDA LIMIT\r
+ JEQ #12400\r
+/ IF(LIMIT.LT.0.AND.LOC.LE.8)GOTO 12600\r
+ FLDA LIMIT\r
+ JGE .+7\r
+ FLDA LOC\r
+ FSUB #LIT+11\r
+ JLE #12600\r
+/ IF(LIMIT.LE.30)GOTO 12200\r
+ FLDA LIMIT\r
+ FSUB #LIT+63\r
+ JLE #12200\r
+\r
+/19999 K=43\r
+#19999, LDX 53,0 /43\r
+ XTA 0\r
+ FSTA K\r
+/ IF(LIQLOC(LOC).EQ.WATER)K=70\r
+ JSA LIQLOC\r
+ FSUB WATER\r
+ JNE .+7\r
+ LDX 106,0 /70\r
+ XTA 0\r
+ FSTA K\r
+/C\r
+/C DO PRELIMINARY ANALYSIS OF SENTENCE TO FIND CERTAIN SPECIAL\r
+/C CASES, VIZ,\r
+/C\r
+/C ENTER <WATER,STREAM>\r
+/C ENTER <LOCATION>\r
+/C <WATER,OIL> <PLANT,DOOR>\r
+/C\r
+/ CALL VOCAB(WD1,WD1A,-1,I)\r
+ JSR VOCAB\r
+ JA .+6\r
+ JA WD1\r
+ JA MINUS1\r
+ FSTA I\r
+/ CALL VOCAB(WD2,WD2A,-1,J)\r
+ JSR VOCAB\r
+ JA .+6\r
+ JA WD2\r
+ JA MINUS1\r
+ FSTA J\r
+/ IF(WD1.NE.'ENTE') GO TO 2609\r
+ FLDA WD1\r
+ FSUB TENTE\r
+ JNE #2609\r
+/ IF(J .EQ. (WATER+1000)\r
+/ 1 .OR. J .EQ. STREAM) GO TO 2010\r
+ FLDA WATER\r
+ FADD #LIT+314\r
+ FSUB J\r
+ JEQ #2010\r
+ FLDA J\r
+ FSUB STREAM\r
+ JEQ #2010\r
+/ IF(WD2 .NE. 0) GO TO 2800\r
+ FLDA WD2\r
+ JNE #2800\r
+\r
+/2609 IF((I .NE. (WATER+1000) .AND. I .NE. (OIL+1000))\r
+/ 1 .OR. (J .NE. (PLANT+1000) .AND. J .NE. (DOOR+1000)))\r
+/ 2 GO TO 2610\r
+#2609, FLDA WATER\r
+ FADD #LIT+314\r
+ FSUB I\r
+ JEQ .+11\r
+ FLDA OIL\r
+ FADD #LIT+314\r
+ FSUB I\r
+ JNE #2610\r
+ FLDA PLANT\r
+ FADD #LIT+314\r
+ FSUB J\r
+ JEQ .+11\r
+ FLDA DOOR\r
+ FADD #LIT+314\r
+ FSUB J\r
+ JNE #2610\r
+/ WD2="POUR"\r
+ FLDA TPOUR\r
+ FSTA WD2\r
+\r
+/2610 IF(WD1 .EQ. 'WEST' .AND. PCT(10))\r
+/ 1 CALL RSPEAK(17)\r
+\r
+#2610, FLDA WD1\r
+ FSUB TWEST\r
+ JNE #2630\r
+ JSR PCT\r
+ JA .+4\r
+ JA #LIT+17\r
+ JEQ #2630\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+33\r
+/2630 CALL VOCAB(WD1,-1,I)\r
+#2630, JSR VOCAB\r
+ JA .+6\r
+ JA WD1\r
+ JA MINUS1\r
+ FSTA I\r
+/ IF(I.EQ.-1)GOTO 3000\r
+ FADD ONE\r
+ JEQ #3000\r
+/ K=MOD(I,1000)\r
+ JSR MOD\r
+ JA .+6\r
+ JA I\r
+ JA #LIT+314\r
+ FSTA K\r
+/ KQ=I/1000+1\r
+ FLDA I\r
+ FDIV #LIT+314\r
+ JSA #FIX\r
+ FADD ONE\r
+ FSTA KQ\r
+/ GOTO (8,5000,4000,2010)KQ\r
+ FLDA KQ\r
+ ATX 1\r
+ STARTD\r
+ FLDA .+2,1\r
+ STARTF\r
+ JAC\r
+ JA #8\r
+ JA #5000\r
+ JA #4000\r
+ JA #2010\r
+/ CALL BUG(22)\r
+ JSR BUG\r
+ JA .+4\r
+ JA #LIT+41\r
+\r
+/C\r
+/C GET SECOND WORD FOR ANALYSIS.\r
+/C\r
+/2800 WD1=WD2\r
+/ WD1A=WD2A\r
+\r
+#2800, FLDA WD2\r
+ FSTA WD1\r
+/ WD1X=WD2X\r
+ FLDA WD2X\r
+ FSTA WD1X\r
+/ WD2=0\r
+ FCLA\r
+ FSTA WD2\r
+/ GOTO 2610\r
+ JA #2610\r
+\r
+/C\r
+/C GEE, I DON'T UNDERSTAND.\r
+/C\r
+/3000 SPK=60\r
+#3000, LDX 74,0 /60\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(PCT(20))SPK=61\r
+ JSR PCT\r
+ JA .+4\r
+ JA #LIT+36\r
+ JEQ .+6\r
+ LDX 75,0 /61\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(PCT(20))SPK=13\r
+ JSR PCT\r
+ JA .+4\r
+ JA #LIT+36\r
+ JEQ .+6\r
+ LDX 15,0 /13\r
+ XTA 0\r
+ FSTA SPK\r
+/ CALL RSPEAK(SPK)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA SPK\r
+/ GOTO 2600\r
+ JA #2600\r
+\r
+/C\r
+/C ANALYSE A VERB. REMEMBER WHAT IT WAS, GO BACK FOR OBJECT IF SECOND WORD\r
+/C UNLESS VERB IS "SAY", WHICH SNARFS ARBITRARY SECOND WORD.\r
+/C\r
+/4000 VERB=K\r
+#4000, FLDA K\r
+ FSTA VERB\r
+/ SPK=ACTSPK(VERB)\r
+ ATX 7\r
+ FLDA ACTSPK-3,7\r
+ FSTA SPK\r
+/ IF(WD2.NE.0.AND.VERB.NE.SAY)GOTO 2800\r
+ FLDA WD2\r
+ JEQ .+10\r
+ FLDA VERB\r
+ FSUB SAY\r
+ JNE #2800\r
+/ IF(VERB.EQ.SAY)OBJ=WD2\r
+ FLDA VERB\r
+ FSUB SAY\r
+ JNE .+5\r
+ FLDA WD2\r
+ FSTA OBJ\r
+/ IF(OBJ.NE.0)GOTO 4090\r
+ FLDA OBJ\r
+ FSUB ZERO\r
+ JNE #4090\r
+\r
+/C\r
+/C ANALYSE AN INTRANSITIVE VERB (IE, NO OBJECT GIVEN YET).\r
+/C\r
+/4080 GOTO(8010,8000,8000,8040,2009,8040,9070,9080,8000,8000,\r
+/ 1 2011,9120,9130,8140,9150,8000,8000,8180,8000,8200,\r
+/ 2 8000,9220,9230,8240,8250,8260,8270,8000,8000,8300,\r
+/ 3 8310,8320)VERB\r
+/C TAKE DROP SAY OPEN NOTH LOCK ON OFF WAVE CALM\r
+/C WALK KILL POUR EAT DRNK RUB TOSS QUIT FIND INVN\r
+/C FEED FILL BLST SCOR FOO BRF READ BREK WAKE SUSP\r
+/C HOUR RESU\r
+#4080, FLDA VERB\r
+ ATX 1\r
+ STARTD\r
+ FLDA .+2,1\r
+ STARTF\r
+ JAC\r
+ JA #8010\r
+ JA #8000\r
+ JA #8000\r
+ JA #8040\r
+ JA #2009\r
+ JA #8040\r
+ JA #9070\r
+ JA #9080\r
+ JA #8000\r
+ JA #8000\r
+ JA #2011\r
+ JA #9120\r
+ JA #9130\r
+ JA #8140\r
+ JA #9150\r
+ JA #8000\r
+ JA #8000\r
+ JA #8180\r
+ JA #8000\r
+ JA #8200\r
+ JA #8000\r
+ JA #9220\r
+ JA #9230\r
+ JA #8240\r
+ JA #8250\r
+ JA #8260\r
+ JA #8270\r
+ JA #8000\r
+ JA #8000\r
+ JA #8300\r
+ JA #8310\r
+ JA #8320\r
+/ CALL BUG(23)\r
+ JSR BUG\r
+ JA .+4\r
+ JA #LIT+44\r
+\r
+/C\r
+/C ANALYSE A TRANSITIVE VERB.\r
+/C\r
+/4090 GOTO(9010,9020,9030,9040,2009,9040,9070,9080,9090,2011,\r
+/ 1 2011,9120,9130,9140,9150,9160,9170,2011,9190,9190,\r
+/ 2 9210,9220,9230,2011,2011,2011,9270,9280,9290,2011,\r
+/ 3 2011,2011)VERB\r
+/C TAKE DROP SAY OPEN NOTH LOCK ON OFF WAVE CALM\r
+/C WALK KILL POUR EAT DRNK RUB TOSS QUIT FIND INVN\r
+/C FEED FILL BLST SCOR FOO BRF READ BREK WAKE SUSP\r
+/C HOUR RESU\r
+#4090, FLDA VERB\r
+ ATX 1\r
+ STARTD\r
+ FLDA .+2,1\r
+ STARTF\r
+ JAC\r
+ JA #9010\r
+ JA #9020\r
+ JA #9030\r
+ JA #9040\r
+ JA #2009\r
+ JA #9040\r
+ JA #9070\r
+ JA #9080\r
+ JA #9090\r
+ JA #2011\r
+ JA #2011\r
+ JA #9120\r
+ JA #9130\r
+ JA #9140\r
+ JA #9150\r
+ JA #9160\r
+ JA #9170\r
+ JA #2011\r
+ JA #9190\r
+ JA #9190\r
+ JA #9210\r
+ JA #9220\r
+ JA #9230\r
+ JA #2011\r
+ JA #2011\r
+ JA #2011\r
+ JA #9270\r
+ JA #9280\r
+ JA #9290\r
+ JA #2011\r
+ JA #2011\r
+ JA #2011\r
+ JA #2011\r
+/ CALL BUG(24)\r
+ JSR BUG\r
+ JA .+4\r
+ JA #LIT+47\r
+\r
+/C\r
+/C ANALYSE AN OBJECT WORD. SEE IF THE THING IS HERE, WHETHER WE'VE GOT A VERB\r
+/C YET, AND SO ON. OBJECT MUST BE HERE UNLESS VERB IS "FIND" OR "INVENT(ORY)"\r
+/C (AND NO NEW VERB YET TO BE ANALYSED). WATER AND OIL ARE ALSO FUNNY, SINCE\r
+/C THEY ARE NEVER ACTUALLY DROPPED AT ANY LOCATION, BUT MIGHT BE HERE INSIDE\r
+/C THE BOTTLE OR AS A FEATURE OF THE LOCATION.\r
+/C\r
+/5000 OBJ=K\r
+#5000, FLDA K\r
+ FSTA OBJ\r
+/ IF(FIXED(K).NE.LOC.AND..NOT.HERE(K))GOTO 5100\r
+ FLDA K\r
+ ATX 7\r
+ FLDA FIXED-3,7\r
+ FSUB LOC\r
+ JEQ #5010\r
+ FLDA K\r
+ JSA HERE\r
+ JEQ #5100\r
+\r
+/5010 IF(WD2.NE.0)GOTO 2800\r
+#5010, FLDA WD2\r
+ JNE #2800\r
+/ IF(VERB.NE.0)GOTO 4090\r
+ FLDA VERB\r
+ JNE #4090\r
+/ TYPE 5015\r
+/5015 FORMAT(' What do you want to do with the ',$)\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #5015\r
+ JA ZERO\r
+ JA TWO\r
+\r
+/ CALL A5TOA1(WD1,WD1A,WD1X,'?')\r
+ JSR A5TOA1\r
+ JA .+10\r
+ JA WD1\r
+ JA WD1X\r
+ JA TQUES\r
+ TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #LINEF+2\r
+ TRAP3 #RENDO\r
+/ GOTO 2600\r
+#LINEF, JA #2600\r
+ TEXT +(' ')+\r
+\r
+/C\r
+/5100 IF(K.NE.GRATE)GOTO 5110\r
+#5100, FLDA K\r
+ FSUB GRATE\r
+ JNE #5110\r
+/ IF(LOC.EQ.1.OR.LOC.EQ.4.OR.LOC.EQ.7)K=DPRSSN\r
+ FLDA LOC\r
+ FSUB ONE\r
+ JEQ .+10\r
+ FSUB THREE\r
+ JEQ .+5\r
+ FSUB THREE\r
+ JNE .+6\r
+ FLDA DPRSSN\r
+ FSTA K\r
+/ IF(LOC.GT.9.AND.LOC.LT.15)K=ENTRNC\r
+ FLDA LOC\r
+ FSUB #LIT+14\r
+ JLE .+13\r
+ FLDA LOC\r
+ FSUB #LIT+25\r
+ JGE .+6\r
+ FLDA ENTRNC\r
+ FSTA K\r
+/ IF(K.NE.GRATE)GOTO 8\r
+ FLDA K\r
+ FSUB GRATE\r
+ JNE #8\r
+\r
+/5110 IF(K.NE.DWARF)GOTO 5120\r
+#5110, FLDA K\r
+ FSUB DWARF\r
+ JNE #5120\r
+/ DO 5112 I=1,5\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/ IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2)GOTO 5010\r
+#G0122, FLDA I\r
+ ATX 7\r
+ FLDA DLOC-3,7\r
+ FSUB LOC\r
+ JNE #5112\r
+ FLDA DFLAG\r
+ FSUB TWO\r
+ JGE #5010\r
+/5112 CONTINUE\r
+#5112, FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+3\r
+ JLE #G0122\r
+\r
+/5120 IF((LIQ(0).EQ.K.AND.HERE(BOTTLE)).OR.K.EQ.LIQLOC(LOC))GOTO 5010\r
+#5120, JSA LIQ\r
+ FSUB K\r
+ JNE .+10\r
+ FLDA BOTTLE\r
+ JSA HERE\r
+ JNE #5010\r
+ JSA LIQLOC\r
+ FSUB K\r
+ JEQ #5010\r
+/ IF(OBJ.NE.PLANT.OR..NOT.AT(PLANT2).OR.PROP(PLANT2).EQ.0)GOTO 5130\r
+ FLDA OBJ\r
+ FSUB PLANT\r
+ JNE #5130\r
+ FLDA PLANT2\r
+ JSA AT\r
+ JEQ #5130\r
+ FLDA PLANT2\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JEQ #5130\r
+/ OBJ=PLANT2\r
+ FLDA PLANT2\r
+ FSTA OBJ\r
+/ GOTO 5010\r
+ JA #5010\r
+\r
+/5130 IF(OBJ.NE.KNIFE.OR.KNFLOC.NE.LOC)GOTO 5140\r
+#5130, FLDA OBJ\r
+ FSUB KNIFE\r
+ JNE #5140\r
+ FLDA KNFLOC\r
+ FSUB LOC\r
+ JNE #5140\r
+/ KNFLOC=-1\r
+ FLDA MINUS1\r
+ FSTA KNFLOC\r
+/ SPK=116\r
+ FLDA #LIT+170\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/5140 IF(OBJ.NE.ROD.OR..NOT.HERE(ROD2))GOTO 5190\r
+#5140, FLDA OBJ\r
+ FSUB ROD\r
+ JNE #5190\r
+ FLDA ROD2\r
+ JSA HERE\r
+ JEQ #5190\r
+/ OBJ=ROD2\r
+ FLDA ROD2\r
+ FSTA OBJ\r
+/ GOTO 5010\r
+ JA #5010\r
+\r
+/5190 IF((VERB.EQ.FIND.OR.VERB.EQ.INVENT).AND.WD2.EQ.0)GOTO 5010\r
+#5190, FLDA VERB\r
+ FSUB INVENT\r
+ JEQ .+10\r
+ FLDA VERB\r
+ FSUB FIND\r
+ JNE .+5\r
+ FLDA WD2\r
+ JEQ #5010\r
+/ TYPE 5199\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #5199\r
+ JA ZERO\r
+ JA TWO\r
+\r
+/5199 FORMAT(' I don''t see any ',$)\r
+\r
+/ CALL A5TOA1(WD1,WD1A,WD1X,'.')\r
+/ GOTO 2012\r
+ JSR A5TOA1\r
+ JA #2012\r
+ JA WD1\r
+ JA WD1X\r
+ JA TQDOT\r
+\r
+/C FIGURE OUT THE NEW LOCATION\r
+/C\r
+/C GIVEN THE CURRENT LOCATION IN "LOC", AND A MOTION VERB NUMBER IN "K", PUT\r
+/C THE NEW LOCATION IN "NEWLOC". THE CURRENT LOC IS SAVED IN "OLDLOC" IN CASE\r
+/C HE WANTS TO RETREAT. THE CURRENT OLDLOC IS SAVED IN OLDLC2, IN CASE HE\r
+/C DIES. (IF HE DOES, NEWLOC WILL BE LIMBO, AND OLDLOC WILL BE WHAT KILLED\r
+/C HIM, SO WE NEED OLDLC2, WHICH IS THE LAST PLACE HE WAS SAFE.)\r
+/C\r
+/8 KK=KEY(LOC)\r
+#8, FLDA LOC\r
+ ATX 7\r
+ FLDA KEY-3,7\r
+ FSTA KK\r
+/ NEWLOC=LOC\r
+ FLDA LOC\r
+ FSTA NEWLOC\r
+/ IF(KK.EQ.0)CALL BUG(26)\r
+ FLDA KK\r
+ JNE .+10\r
+ JSR BUG\r
+ JA .+4\r
+ JA #LIT+55\r
+/ IF(K.EQ.NULL)GOTO 2\r
+ FLDA K\r
+ FSUB NULL\r
+ JEQ #2\r
+/ IF(K.EQ.BACK)GOTO 20\r
+ FLDA K\r
+ FSUB BACK\r
+ JEQ #20\r
+/ IF(K.EQ.LOOK)GOTO 30\r
+ FLDA K\r
+ FSUB LOOK\r
+ JEQ #30\r
+/ IF(K.EQ.CAVE)GOTO 40\r
+ FLDA K\r
+ FSUB CAVE\r
+ JEQ #40\r
+/ OLDLC2=OLDLOC\r
+ FLDA OLDLOC\r
+ FSTA OLDLC2\r
+/ OLDLOC=LOC\r
+ FLDA LOC\r
+ FSTA OLDLOC\r
+/C\r
+/9 LL=IABS(TRAVEL(KK))\r
+#9, JSR GETWRD\r
+ JA .+10\r
+ JA TRAVEL\r
+ JA KK\r
+ JA ZERO\r
+ FSTA #TMP\r
+ JSR IABS\r
+ JA .+4\r
+ JA #TMP\r
+ FSTA LL\r
+/ IF(LL.EQ.1 .OR. LL.EQ.K)GOTO 10\r
+ FSUB ONE\r
+ JEQ #10\r
+ FLDA LL\r
+ FSUB K\r
+ JEQ #10\r
+/ IF(TRAVEL(KK).LT.0)GOTO 50\r
+ JSR GETWRD\r
+ JA .+10\r
+ JA TRAVEL\r
+ JA KK\r
+ JA ZERO\r
+ JLT #50\r
+/ KK=KK+1\r
+ FLDA ONE\r
+ FADDM KK\r
+/ GOTO 9\r
+ JA #9\r
+\r
+/C\r
+/10 NEWLOC=TRVCON(KK)\r
+#10, JSR GETWRD\r
+ JA .+10\r
+ JA TRVCON\r
+ JA KK\r
+ JA ZERO\r
+ FSTA NEWLOC\r
+/ K=MOD(NEWLOC,100)\r
+ JSR MOD\r
+ JA .+6\r
+ JA NEWLOC\r
+ JA #LIT+154\r
+ FSTA K\r
+/ IF(NEWLOC.LE.300)GOTO 13\r
+ FLDA NEWLOC\r
+ FSUB #LIT+306\r
+ JLE #13\r
+/ IF(PROP(K).NE.NEWLOC/100-3)GOTO 16\r
+ FLDA K\r
+ ATX 7\r
+ FLDA NEWLOC\r
+ FDIV #LIT+154\r
+ JSA #FIX\r
+ FSUB THREE\r
+ FSUB PROP-3,7\r
+ JNE #16\r
+/C\r
+/C TRY NEXT ENTRY IN TRAVEL TABLE\r
+/C\r
+/12 IF(TRAVEL(KK).LT.0)CALL BUG(25)\r
+#12, JSR GETWRD\r
+ JA .+10\r
+ JA TRAVEL\r
+ JA KK\r
+ JA ZERO\r
+ JGE .+10\r
+ JSR BUG\r
+ JA .+4\r
+ JA #LIT+52\r
+/ KK=KK+1\r
+ FLDA KK\r
+ FSTA #TMP\r
+ FADD ONE\r
+ FSTA KK\r
+\r
+/C MAKE SURE HE DOESN'T GO THROUGH SAME TEST AGAIN\r
+/C\r
+/ IF(TRVCON(KK-1).EQ.TRVCON(KK) .AND. TRVLOC(KK-1).EQ.TRVLOC(KK))\r
+/ 1 GOTO 12\r
+ JSR GETWRD\r
+ JA .+10\r
+ JA TRVCON\r
+ JA #TMP\r
+ JA ZERO\r
+ FSTA #TMP+3\r
+ JSR GETWRD\r
+ JA .+10\r
+ JA TRVCON\r
+ JA KK\r
+ JA ZERO\r
+ FSUB #TMP+3\r
+ JNE #10\r
+\r
+ JSR GETWRD\r
+ JA .+10\r
+ JA TRVLOC\r
+ JA #TMP\r
+ JA ZERO\r
+ FSTA #TMP+3\r
+\r
+ JSR GETWRD\r
+ JA .+10\r
+ JA TRVLOC\r
+ JA #TMP\r
+ FSUB #TMP+3\r
+ JEQ #12\r
+/ GO TO 10\r
+ JA #10\r
+/C\r
+/13 IF(NEWLOC.LE.100)GOTO 14\r
+#13, FLDA NEWLOC\r
+ FSUB #LIT+154\r
+ JLE #14\r
+/ IF(TOTING(K).OR.(NEWLOC.GT.200.AND.AT(K)))GOTO 16\r
+ FLDA K\r
+ JSA TOTING\r
+ JNE #16\r
+ LDX 310,0 /200\r
+ XTA 0\r
+ FSUB NEWLOC\r
+ JGT #12\r
+ FLDA K\r
+ JSA AT\r
+ JNE #16\r
+/ GOTO 12\r
+ JA #12\r
+\r
+/C\r
+/14 IF(NEWLOC.NE.0.AND..NOT.PCT(NEWLOC))GOTO 12\r
+#14, FLDA NEWLOC\r
+ JEQ #16\r
+ JSR PCT\r
+ JA .+4\r
+ JA NEWLOC\r
+ JEQ #12\r
+\r
+/16 NEWLOC=TRVLOC(KK)\r
+#16, JSR GETWRD\r
+ JA .+10\r
+ JA TRVLOC\r
+ JA KK\r
+ JA ZERO\r
+ FSTA NEWLOC\r
+/ IF(NEWLOC.LE.300)GOTO 2\r
+ FSUB #LIT+306\r
+ JLE #2\r
+/ IF(NEWLOC.LE.500)GOTO 30000\r
+ FLDA NEWLOC\r
+ FSUB #LIT+311\r
+ JLE #30000\r
+/ CALL RSPEAK(NEWLOC-500)\r
+/ FLDA NEWLOC\r
+/ FSUB #LIT+311\r
+ FSTA #TMP\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #TMP\r
+/ NEWLOC=LOC\r
+ FLDA LOC\r
+ FSTA NEWLOC\r
+/ GOTO 2\r
+ JA #2\r
+\r
+/C\r
+/C SPECIAL MOTIONS COME HERE. LABELLING CONVENTION: STATEMENT NUMBERS NNNXX\r
+/C (XX=00-99) ARE USED FOR SPECIAL CASE NUMBER NNN (NNN=301-500).\r
+/C\r
+/30000 NEWLOC=NEWLOC-300\r
+#30000, FLDA NEWLOC\r
+ FSUB #LIT+306\r
+ FSTA NEWLOC\r
+/ GOTO (30100,30200,30300)NEWLOC\r
+/ FLDA NEWLOC\r
+ ATX 1\r
+ STARTD\r
+ FLDA .+2,1\r
+ STARTF\r
+ JAC\r
+ JA #30100\r
+ JA #30200\r
+ JA #30300\r
+/ CALL BUG(20)\r
+ JSR BUG\r
+ JA .+4\r
+ JA #LIT+36\r
+\r
+/C\r
+/C TRAVEL 301. PLOVER-ALCOVE PASSAGE. CAN CARRY ONLY EMERALD. NOTE: TRAVEL\r
+/C TABLE MUST INCLUDE "USELESS" ENTRIES GOING THROUGH PASSAGE, WHICH CAN NEVER\r
+/C BE USED FOR ACTUAL MOTION, BUT CAN BE SPOTTED BY "GO BACK".\r
+/C\r
+/30100 NEWLOC=99+100-LOC\r
+#30100, FLDA #LIT+300 /199\r
+ FSUB LOC\r
+ FSTA NEWLOC\r
+/ IF(HOLDNG.EQ.0.OR.(HOLDNG.EQ.1.AND.TOTING(EMRALD)))GOTO 2\r
+ FLDA HOLDNG\r
+ JEQ #2\r
+ FSUB ONE\r
+ JNE #M27\r
+ FLDA EMRALD\r
+ JSA TOTING\r
+ JNE #2\r
+/ NEWLOC=LOC\r
+#M27, FLDA LOC\r
+ FSTA NEWLOC\r
+/ CALL RSPEAK(117)\r
+/ GOTO 2\r
+ JSR RSPEAK\r
+ JA #2\r
+ JA #LIT+173\r
+\r
+/C\r
+/C TRAVEL 302. PLOVER TRANSPORT. DROP THE EMERALD (ONLY USE SPECIAL TRAVEL IF\r
+/C TOTING IT), SO HE'S FORCED TO USE THE PLOVER-PASSAGE TO GET IT OUT. HAVING\r
+/C DROPPED IT, GO BACK AND PRETEND HE WASN'T CARRYING IT AFTER ALL.\r
+/C\r
+/30200 CALL DROP(EMRALD,LOC)\r
+/GOTO 12\r
+#30200, JSR DROP\r
+ JA #12\r
+ JA EMRALD\r
+ JA LOC\r
+\r
+/C\r
+/C TRAVEL 303. TROLL BRIDGE. MUST BE DONE ONLY AS SPECIAL MOTION SO THAT\r
+/C DWARVES WON'T WANDER ACROSS AND ENCOUNTER THE BEAR. (THEY WON'T FOLLOW THE\r
+/C PLAYER THERE BECAUSE THAT REGION IS FORBIDDEN TO THE PIRATE.) IF\r
+/C PROP(TROLL)=1, HE'S CROSSED SINCE PAYING, SO STEP OUT AND BLOCK HIM.\r
+/C (STANDARD TRAVEL ENTRIES CHECK FOR PROP(TROLL)=0.) SPECIAL STUFF FOR BEAR.\r
+/C\r
+/30300 IF(PROP(TROLL).NE.1)GOTO 30310\r
+#30300, FLDA TROLL\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FSUB ONE\r
+ JNE #30310\r
+/ CALL PSPEAK(TROLL,1)\r
+ JSR PSPEAK\r
+ JA .+6\r
+ JA TROLL\r
+ JA ONE\r
+/ PROP(TROLL)=0\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ CALL MOVE(TROLL2,0)\r
+ JSR MOVE\r
+ JA .+6\r
+ JA TROLL2\r
+ JA ZERO\r
+/ CALL MOVE(TROLL2+100,0)\r
+ FLDA TROLL2\r
+ FADD #LIT+154\r
+ FSTA #TMP\r
+ JSR MOVE\r
+ JA .+6\r
+ JA #TMP\r
+ JA ZERO\r
+/ CALL MOVE(TROLL,PLAC(TROLL))\r
+ FLDA TROLL\r
+ ATX 7\r
+ XTA 7\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PPLAC\r
+ FSTA .+11\r
+ STARTF\r
+ JSR MOVE\r
+ JA .+6\r
+ JA TROLL\r
+ JA .\r
+/ CALL MOVE(TROLL+100,FIXD(TROLL))\r
+ FLDA TROLL\r
+ FADD #LIT+154\r
+ FSTA #TMP\r
+ FLDA TROLL\r
+ ATX 7\r
+ XTA 7\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PFIXD\r
+ FSTA .+11\r
+ STARTF\r
+ JSR MOVE\r
+ JA .+6\r
+ JA #TMP\r
+ JA .\r
+/ CALL JUGGLE(CHASM)\r
+ JSR JUGGLE\r
+ JA .+4\r
+ JA CHASM\r
+/ NEWLOC=LOC\r
+ FLDA LOC\r
+ FSTA NEWLOC\r
+/ GOTO 2\r
+ JA #2\r
+\r
+/C\r
+/30310 NEWLOC=PLAC(TROLL)+FIXD(TROLL)-LOC\r
+#30310, FLDA TROLL\r
+ ATX 7\r
+ FLDA PLAC-3,7\r
+ FADD FIXD-3,7\r
+ FSUB LOC\r
+ FSTA NEWLOC\r
+/ IF(PROP(TROLL).EQ.0)PROP(TROLL)=1\r
+ FLDA PROP-3,7\r
+ JNE .+5\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+/ IF(.NOT.TOTING(BEAR))GOTO 2\r
+ FLDA BEAR\r
+ JSA TOTING\r
+ JEQ #2\r
+/ CALL RSPEAK(162)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+237\r
+/ PROP(CHASM)=1\r
+ FLDA CHASM\r
+ ATX 7\r
+ FLDA ONE\r
+/ PROP(TROLL)=2\r
+ FSTA PROP-3,7\r
+ FLDA TROLL\r
+ ATX 7\r
+ FLDA TWO\r
+ FSTA PROP-3,7\r
+/ CALL DROP(BEAR,NEWLOC)\r
+ JSR DROP\r
+ JA .+6\r
+ JA BEAR\r
+ JA NEWLOC\r
+/ FIXED(BEAR)=-1\r
+ FLDA BEAR\r
+ ATX 7\r
+ FLDA MINUS1\r
+ FSTA FIXED-3,7\r
+/ PROP(BEAR)=3\r
+ FLDA THREE\r
+ FSTA PROP-3,7\r
+/ IF(PROP(SPICES).LT.0)TALLY2=TALLY2+1\r
+ FLDA SPICES\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JGE .+7\r
+ FLDA TALLY2\r
+ FADD ONE\r
+ FSTA TALLY2\r
+/ OLDLC2=NEWLOC\r
+ FLDA NEWLOC\r
+ FSTA OLDLC2\r
+/ GOTO 99\r
+ JA #99\r
+\r
+/C\r
+/C END OF SPECIALS.\r
+/C\r
+/C HANDLE "GO BACK". LOOK FOR VERB WHICH GOES FROM LOC TO OLDLOC, OR TO OLDLC2\r
+/C IF OLDLOC HAS FORCED-MOTION. K2 SAVES ENTRY -> FORCED LOC -> PREVIOUS LOC.\r
+/C\r
+/20 K=OLDLOC\r
+#20, FLDA OLDLOC\r
+ FSTA K\r
+/ IF(FORCED(K))K=OLDLC2\r
+/ FLDA K\r
+ JSA FORCED\r
+ JEQ .+6\r
+ FLDA OLDLC2\r
+ FSTA K\r
+/ OLDLC2=OLDLOC\r
+ FLDA OLDLOC\r
+ FSTA OLDLC2\r
+/ OLDLOC=LOC\r
+ FLDA LOC\r
+ FSTA OLDLOC\r
+/ K2=0\r
+ FCLA\r
+ FSTA K2\r
+/ IF(K.NE.LOC)GOTO 21\r
+ FLDA K\r
+ FSUB LOC\r
+ JNE #21\r
+/ CALL RSPEAK(91)\r
+/ GOTO 2\r
+ JSR RSPEAK\r
+ JA #2\r
+ JA #LIT+140\r
+\r
+/C\r
+/21 LL=TRVLOC(KK)\r
+#21, JSR GETWRD\r
+ JA .+10\r
+ JA TRVLOC\r
+ JA KK\r
+ JA ZERO\r
+ FSTA LL\r
+/ IF(LL.EQ.K)GOTO 25\r
+ FSUB K\r
+ JEQ #25\r
+/ IF(LL.GT.300)GOTO 22\r
+ FLDA LL\r
+ FSUB #LIT+306\r
+ JGT #22\r
+/ J=KEY(LL)\r
+ FLDA LL\r
+ ATX 7\r
+ FLDA KEY-3,7\r
+ FSTA J\r
+/ IF(FORCED(LL).AND.TRVLOC(KK).EQ.K)K2=KK\r
+ FLDA LL\r
+ JSA FORCED\r
+ JEQ #22\r
+ JSR GETWRD\r
+ JA .+10\r
+ JA TRVLOC\r
+ JA KK\r
+ JA ZERO\r
+ FSUB K\r
+ JNE #22\r
+ FLDA KK\r
+ FSTA K2\r
+/22 IF(TRAVEL(KK).LT.0)GOTO 23\r
+#22, JSR GETWRD\r
+ JA .+10\r
+ JA TRAVEL\r
+ JA KK\r
+ JA ZERO\r
+ JLT #23\r
+/ KK=KK+1\r
+ FLDA ONE\r
+ FADDM KK\r
+/ GOTO 21\r
+ JA #21\r
+\r
+/C\r
+/23 KK=K2\r
+#23, FLDA K2\r
+ FSTA KK\r
+/ IF(KK.NE.0)GOTO 25\r
+ JNE #25\r
+/ CALL RSPEAK(140)\r
+/ GOTO 2\r
+ JSR RSPEAK\r
+ JA #2\r
+ JA #LIT+223\r
+\r
+/C\r
+/25 K=IABS(TRAVEL(KK))\r
+#25, JSR GETWRD\r
+ JA .+10\r
+ JA TRAVEL\r
+ JA KK\r
+ JA ZERO\r
+ FSTA #TMP\r
+ JSR IABS\r
+ JA .+4\r
+ JA #TMP\r
+ FSTA K\r
+/ KK=KEY(LOC)\r
+ FLDA LOC\r
+ ATX 7\r
+ FLDA KEY-3,7\r
+ FSTA KK\r
+/ GOTO 9\r
+ JA #9\r
+\r
+/C\r
+/C LOOK. CAN'T GIVE MORE DETAIL. PRETEND IT WASN'T DARK (THOUGH IT MAY "NOW"\r
+/C BE DARK) SO HE WON'T FALL INTO A PIT WHILE STARING INTO THE GLOOM.\r
+/C\r
+/30 IF(DETAIL.LT.3)CALL RSPEAK(15)\r
+#30, FLDA DETAIL\r
+ FSUB THREE\r
+ JGE .+10\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+25\r
+/ DETAIL=DETAIL+1\r
+ FLDA ONE\r
+ FADDM DETAIL\r
+/ WZDARK=.FALSE.\r
+ FCLA\r
+ FSTA WZDARK\r
+/ ABB(LOC)=0\r
+ FLDA LOC\r
+ ATX 7\r
+ FCLA\r
+ FSTA ABB-3,7\r
+/ GOTO 2\r
+ JA #2\r
+\r
+/C\r
+/C CAVE. DIFFERENT MESSAGES DEPENDING ON WHETHER ABOVE GROUND.\r
+/C\r
+/40 IF(LOC.LT.8)CALL RSPEAK(57)\r
+#40, FLDA LOC\r
+ FSUB #LIT+11\r
+ JGE .+10\r
+ JSR RSPEAK\r
+ JA #2\r
+ JA #LIT+116\r
+/ IF(LOC.GE.8)CALL RSPEAK(58)\r
+/ GOTO 2\r
+ JSR RSPEAK\r
+ JA #2\r
+ JA #LIT+121\r
+\r
+/C\r
+/C NON-APPLICABLE MOTION. VARIOUS MESSAGES DEPENDING ON WORD GIVEN.\r
+/C\r
+/50 SPK=12\r
+#50, FLDA #LIT+22\r
+ FSTA SPK\r
+/ IF(K.GE.43.AND.K.LE.50)SPK=9\r
+ LDX 53,0 /43\r
+ XTA 0\r
+ FSUB K\r
+ JGE .+7\r
+ FLDA K\r
+ FSUB #LIT+110\r
+ JLE #M31\r
+/ IF(K.EQ.29.OR.K.EQ.30)SPK=9\r
+ LDX 35,0 /29\r
+ XTA 0\r
+ FSUB K\r
+ JEQ #M31\r
+ FADD ONE\r
+ JEQ #M31\r
+ JA #M33\r
+#M31, FLDA #LIT+14\r
+ FSTA SPK\r
+ JA #M32\r
+/ IF(K.EQ.7.OR.K.EQ.36.OR.K.EQ.37)SPK=10\r
+ LDX 7,0\r
+ XTA 0\r
+ FSUB K\r
+ JEQ #M34\r
+ LDX 44,0\r
+ XTA 0\r
+ FSUB K\r
+ JEQ #M34\r
+ FADD ONE\r
+ JNE #M35\r
+#M34, FLDA #LIT+17\r
+ FSTA SPK\r
+ JA #M32\r
+/ IF(K.EQ.11.OR.K.EQ.19)SPK=11\r
+#M35, LDX 13,0 /11\r
+ XTA 0\r
+ FSUB K\r
+ JEQ #M36\r
+ LDX 23,0 /19\r
+ XTA 0\r
+ FSUB K\r
+ JNE #M32\r
+#M36, LDX 13,0\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(VERB.EQ.FIND.OR.VERB.EQ.INVENT)SPK=59\r
+#M32, FLDA VERB\r
+ FSUB INVENT\r
+ JEQ #M37\r
+ FLDA VERB\r
+ FSUB FIND\r
+ JNE #M38\r
+#M37, LDX 73,0 /59\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(K.EQ.62.OR.K.EQ.65)SPK=42\r
+#M38, FLDA K\r
+ FSUB #LIT+124\r
+ JEQ #M39\r
+ FSUB THREE\r
+ JNE #M40\r
+#M39, LDX 52,0 /42\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(K.EQ.17)SPK=80\r
+#M40, FLDA K\r
+ FSUB #LIT+33\r
+ JNE #M33\r
+ LDX 120,0 /80\r
+ XTA 0\r
+ FSTA SPK\r
+/ CALL RSPEAK(SPK)\r
+/ GOTO 2\r
+#M33, JSR RSPEAK\r
+ JA #2\r
+ JA SPK\r
+\r
+/C "YOU'RE DEAD, JIM."\r
+/C\r
+/C IF THE CURRENT LOC IS ZERO, IT MEANS THE CLOWN GOT HIMSELF KILLED. WE'LL\r
+/C ALLOW THIS MAXDIE TIMES. MAXDIE IS AUTOMATICALLY SET BASED ON THE NUMBER OF\r
+/C SNIDE MESSAGES AVAILABLE. EACH DEATH RESULTS IN A MESSAGE (81, 83, ETC.)\r
+/C WHICH OFFERS REINCARNATION; IF ACCEPTED, THIS RESULTS IN MESSAGE 82, 84,\r
+/C ETC. THE LAST TIME, IF HE WANTS ANOTHER CHANCE, HE GETS A SNIDE REMARK AS\r
+/C WE EXIT. WHEN REINCARNATED, ALL OBJECTS BEING CARRIED GET DROPPED AT OLDLC2\r
+/C (PRESUMABLY THE LAST PLACE PRIOR TO BEING KILLED) WITHOUT CHANGE OF PROPS.\r
+/C THE LOOP RUNS BACKWARDS TO ASSURE THAT THE BIRD IS DROPPED BEFORE THE CAGE.\r
+/C (THIS KLUGE COULD BE CHANGED ONCE WE'RE SURE ALL REFERENCES TO BIRD AND CAGE\r
+/C ARE DONE BY KEYWORDS.) THE LAMP IS A SPECIAL CASE (IT WOULDN'T DO TO LEAVE\r
+/C IT IN THE CAVE). IT IS TURNED OFF AND LEFT OUTSIDE THE BUILDING (ONLY IF HE\r
+/C WAS CARRYING IT, OF COURSE). HE HIMSELF IS LEFT INSIDE THE BUILDING (AND\r
+/C HEAVEN HELP HIM IF HE TRIES TO XYZZY BACK INTO THE CAVE WITHOUT THE LAMP!).\r
+/C OLDLOC IS ZAPPED SO HE CAN'T JUST "RETREAT".\r
+/C\r
+/C THE EASIEST WAY TO GET KILLED IS TO FALL INTO A PIT IN PITCH DARKNESS.\r
+/C\r
+/90 CALL RSPEAK(23)\r
+#90, JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+44\r
+/ OLDLC2=LOC\r
+ FLDA LOC\r
+ FSTA OLDLC2\r
+/C\r
+/C OKAY, HE'S DEAD. LET'S GET ON WITH IT.\r
+/C\r
+/99 IF(CLOSNG)GOTO 95\r
+#99, FLDA CLOSNG\r
+ JNE #95\r
+/ YEA=YES(81+NUMDIE*2,82+NUMDIE*2,54)\r
+ FLDA NUMDIE\r
+ FADD NUMDIE\r
+ FADD #LIT+132\r
+ FSTA #TMP\r
+ FLDA #TMP\r
+ FADD ONE\r
+ FSTA #TMP+3\r
+ JSR YES\r
+ JA .+10\r
+ JA #TMP\r
+ JA #TMP+3\r
+ JA #LIT+113\r
+ FSTA YEA\r
+/ NUMDIE=NUMDIE+1\r
+ FLDA NUMDIE\r
+ FADD ONE\r
+ FSTA NUMDIE\r
+/ IF(NUMDIE.EQ.MAXDIE.OR..NOT.YEA)GOTO 20000\r
+ FSUB MAXDIE\r
+ JEQ #20000\r
+ FLDA YEA\r
+ JEQ #20000\r
+/ PLACE(WATER)=0\r
+ FLDA WATER\r
+ ATX 7\r
+ FCLA\r
+ FSTA PLACE-3,7\r
+/ PLACE(OIL)=0\r
+ FLDA OIL\r
+ ATX 7\r
+ FCLA\r
+ FSTA PLACE-3,7\r
+/ IF(TOTING(LAMP))PROP(LAMP)=0\r
+ FLDA LAMP\r
+ JSA TOTING\r
+ JEQ .+10\r
+ FLDA LAMP\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ DO 98 J=1,100\r
+ FLDA ONE\r
+ FSTA J\r
+\r
+/ I=101-J\r
+#G0150, LDX 145,0 /101\r
+ XTA 0\r
+ FSUB J\r
+ FSTA I\r
+/ IF(.NOT.TOTING(I))GOTO 98\r
+ JSA TOTING\r
+ JEQ #98\r
+/ K=OLDLC2\r
+ FLDA OLDLC2\r
+ FSTA K\r
+/ IF(I.EQ.LAMP)K=1\r
+ FLDA I\r
+ FSUB LAMP\r
+ JNE .+5\r
+ FLDA ONE\r
+ FSTA K\r
+/ CALL DROP(I,K)\r
+ JSR DROP\r
+ JA .+6\r
+ JA I\r
+ JA K\r
+\r
+/98 CONTINUE\r
+#98, FLDA J\r
+ FADD ONE\r
+ FSTA J\r
+ FSUB #LIT+154\r
+ JLE #G0150\r
+/ LOC=3\r
+ FLDA THREE\r
+/ OLDLOC=LOC\r
+ FSTA LOC\r
+ FSTA OLDLOC\r
+/ GOTO 2000\r
+ JA #2000\r
+\r
+/C\r
+/C HE DIED DURING CLOSING TIME. NO RESURRECTION. TALLY UP A DEATH AND EXIT.\r
+/C\r
+/95 CALL RSPEAK(131)\r
+#95, JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+212\r
+/ NUMDIE=NUMDIE+1\r
+ FLDA ONE\r
+ FADDM NUMDIE\r
+/ GOTO 20000\r
+ JA #20000\r
+\r
+/C ROUTINES FOR PERFORMING THE VARIOUS ACTION VERBS\r
+/C\r
+/C STATEMENT NUMBERS IN THIS SECTION ARE 8000 FOR INTRANSITIVE VERBS, 9000 FOR\r
+/C TRANSITIVE, PLUS TEN TIMES THE VERB NUMBER. MANY INTRANSITIVE VERBS USE THE\r
+/C TRANSITIVE CODE, AND SOME VERBS USE CODE FOR OTHER VERBS, AS NOTED BELOW.\r
+/C\r
+/C RANDOM INTRANSITIVE VERBS COME HERE. CLEAR OBJ JUST IN CASE (SEE "ATTACK").\r
+/C\r
+/8000 TYPE 8002\r
+#8000, JSR SIXOUT\r
+ JA .+10\r
+ JA #8002\r
+ JA ZERO\r
+ JA TWO\r
+\r
+/8002 FORMAT(' I don''t understand "',$)\r
+/ CALL A5TOA1(WD1,WD1A,WD1X,'".')\r
+ JSR A5TOA1\r
+ JA .+10\r
+ JA WD1\r
+ JA WD1X\r
+ JA TQDOT\r
+/ OBJ=0\r
+ FCLA\r
+ FSTA OBJ\r
+ TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #LINEF+2\r
+ TRAP3 #RENDO\r
+/ GOTO 2600\r
+ JA #2600\r
+\r
+/C\r
+/C CARRY, NO OBJECT GIVEN YET. OK IF ONLY ONE OBJECT PRESENT.\r
+/C\r
+/8010 IF(ATLOC(LOC).EQ.0.OR.LINK(ATLOC(LOC)).NE.0)GOTO 8000\r
+#8010, FLDA LOC\r
+ ATX 7\r
+ FLDA ATLOC-3,7\r
+ JEQ #8000\r
+ ATX 6\r
+ FLDA LINK-3,6\r
+ JNE #8000\r
+/ DO 8012 I=1,5\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/ IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2)GOTO 8000\r
+#G0152, FLDA I\r
+ ATX 7\r
+ FLDA DLOC-3,7\r
+ FSUB LOC\r
+ JNE #8012\r
+ FLDA DFLAG\r
+ FSUB TWO\r
+ JGE #8000\r
+\r
+/8012 CONTINUE\r
+#8012, FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+3\r
+ JLE #G0152\r
+/ OBJ=ATLOC(LOC)\r
+ FLDA LOC\r
+ ATX 7\r
+ FLDA ATLOC-3,7\r
+ FSTA OBJ\r
+\r
+/C\r
+/C CARRY AN OBJECT. SPECIAL CASES FOR BIRD AND CAGE (IF BIRD IN CAGE, CAN'T\r
+/C TAKE ONE WITHOUT THE OTHER. LIQUIDS ALSO SPECIAL, SINCE THEY DEPEND ON\r
+/C STATUS OF BOTTLE. ALSO VARIOUS SIDE EFFECTS, ETC.\r
+/C\r
+/9010 IF(TOTING(OBJ))GOTO 2011\r
+#9010, FLDA OBJ\r
+ JSA TOTING\r
+ JNE #2011\r
+/ SPK=25\r
+ FLDA #LIT+52\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.PLANT.AND.PROP(PLANT).LE.0)SPK=115\r
+ FLDA OBJ\r
+ FSUB PLANT\r
+ JNE .+13\r
+ FLDA PLANT\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JGT .+4\r
+ FLDA #LIT+165\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.BEAR.AND.PROP(BEAR).EQ.1)SPK=169\r
+ FLDA OBJ\r
+ FSUB BEAR\r
+ JNE .+16\r
+ FLDA BEAR\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FSUB ONE\r
+ JNE .+6\r
+ LDX 251,0 /169\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.CHAIN.AND.PROP(BEAR).NE.0)SPK=170\r
+ FLDA OBJ\r
+ FSUB CHAIN\r
+ JNE .+15\r
+ FLDA BEAR\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JEQ .+6\r
+ LDX 252,0 /170\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(FIXED(OBJ).NE.0)GOTO 2011\r
+ FLDA OBJ\r
+ ATX 7\r
+ FLDA FIXED-3,7\r
+ JNE #2011\r
+/ IF(OBJ.NE.WATER.AND.OBJ.NE.OIL)GOTO 9017\r
+ FLDA OBJ\r
+ FSUB WATER\r
+ JEQ .+10\r
+ FLDA OBJ\r
+ FSUB OIL\r
+ JNE #9017\r
+/ IF(HERE(BOTTLE).AND.LIQ(0).EQ.OBJ)GOTO 9018\r
+ FLDA BOTTLE\r
+ JSA HERE\r
+ JEQ .+10\r
+ JSA LIQ\r
+ FSUB OBJ\r
+ JEQ #9018\r
+/ OBJ=BOTTLE\r
+ FLDA BOTTLE\r
+ FSTA OBJ\r
+/ IF(TOTING(BOTTLE).AND.PROP(BOTTLE).EQ.1)GOTO 9220\r
+ FLDA BOTTLE\r
+ JSA TOTING\r
+ JEQ #M222\r
+ FLDA BOTTLE\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FSUB ONE\r
+ JEQ #9220\r
+\r
+/ IF(PROP(BOTTLE).NE.1)SPK=105\r
+#M222, FLDA BOTTLE\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FSUB ONE\r
+ JEQ .+4\r
+ FLDA #LIT+157\r
+ FSTA SPK\r
+/ IF(.NOT.TOTING(BOTTLE))SPK=104\r
+ FLDA BOTTLE\r
+ JSA TOTING\r
+ JNE #2011\r
+ LDX 150,0 / 104\r
+ XTA 0\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/9018 OBJ=BOTTLE\r
+#9018, FLDA BOTTLE\r
+ FSTA OBJ\r
+\r
+/9017 IF(HOLDNG.LT.7)GOTO 9016\r
+#9017, LDX 7,0\r
+ XTA 0\r
+ FSUB HOLDNG\r
+ JGE #9016\r
+/ CALL RSPEAK(92)\r
+ JSR RSPEAK\r
+ JA #2012\r
+ JA #LIT+143\r
+/ GOTO 2012\r
+\r
+/9016 IF(OBJ.NE.BIRD)GOTO 9014\r
+#9016, FLDA OBJ\r
+ FSUB BIRD\r
+ JNE #9014\r
+/ IF(PROP(BIRD).NE.0)GOTO 9014\r
+ FLDA BIRD\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JNE #9014\r
+/ IF(.NOT.TOTING(ROD))GOTO 9013\r
+ FLDA ROD\r
+ JSA TOTING\r
+ JEQ #9013\r
+/ CALL RSPEAK(26)\r
+ JSR RSPEAK\r
+ JA #2012\r
+ JA #LIT+55\r
+/ GOTO 2012\r
+\r
+/9013 IF(TOTING(CAGE))GOTO 9015\r
+#9013, FLDA CAGE\r
+ JSA TOTING\r
+ JNE #9015\r
+/ CALL RSPEAK(27)\r
+ JSR RSPEAK\r
+ JA #2012\r
+ JA #LIT+60\r
+/ GOTO 2012\r
+\r
+/9015 PROP(BIRD)=1\r
+#9015, FLDA BIRD\r
+ ATX 7\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+\r
+/9014 IF((OBJ.EQ.BIRD.OR.OBJ.EQ.CAGE).AND.PROP(BIRD).NE.0)\r
+/ 1 CALL CARRY(BIRD+CAGE-OBJ,LOC)\r
+#9014, FLDA OBJ\r
+ FSUB BIRD\r
+ JEQ .+10\r
+ FLDA OBJ\r
+ FSUB CAGE\r
+ JNE .+30\r
+ FLDA BIRD\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JEQ .+21\r
+ FLDA BIRD\r
+ FADD CAGE\r
+ FSUB OBJ\r
+ FSTA #TMP\r
+ JSR CARRY\r
+ JA .+6\r
+ JA #TMP\r
+ JA LOC\r
+/ CALL CARRY(OBJ,LOC)\r
+ JSR CARRY\r
+ JA .+6\r
+ JA OBJ\r
+ JA LOC\r
+/ K=LIQ(0)\r
+ JSA LIQ\r
+ FSTA K\r
+/ IF(OBJ.EQ.BOTTLE.AND.K.NE.0)PLACE(K)=-1\r
+ FLDA OBJ\r
+ FSUB BOTTLE\r
+ JNE #2009A\r
+ FLDA K\r
+ JEQ #2009A\r
+ ATX 7\r
+ FLDA MINUS1\r
+ FSTA PLACE-3,7\r
+/ GOTO 2009\r
+#2009A, FLDA #LIT+135 /RHM - "Taken" message\r
+ FSTA K\r
+ JA #2010\r
+\r
+/C\r
+/C DISCARD OBJECT. "THROW" ALSO COMES HERE FOR MOST OBJECTS. SPECIAL CASES FOR\r
+/C BIRD (MIGHT ATTACK SNAKE OR DRAGON) AND CAGE (MIGHT CONTAIN BIRD) AND VASE.\r
+/C DROP COINS AT VENDING MACHINE FOR EXTRA BATTERIES.\r
+/C\r
+/9020 IF(TOTING(ROD2).AND.OBJ.EQ.ROD.AND..NOT.TOTING(ROD))OBJ=ROD2\r
+#9020, FLDA ROD2\r
+ JSA TOTING\r
+ JEQ .+22\r
+ FLDA OBJ\r
+ FSUB ROD\r
+ JNE .+14\r
+ FLDA ROD\r
+ JSA TOTING\r
+ JNE .+6\r
+ FLDA ROD2\r
+ FSTA OBJ\r
+/ IF(.NOT.TOTING(OBJ))GOTO 2011\r
+ FLDA OBJ\r
+ JSA TOTING\r
+ JEQ #2011\r
+/ IF(OBJ.NE.BIRD.OR..NOT.HERE(SNAKE))GOTO 9024\r
+ FLDA OBJ\r
+ FSUB BIRD\r
+ JNE #9024\r
+ FLDA SNAKE\r
+ JSA HERE\r
+ JEQ #9024\r
+/ CALL RSPEAK(30)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+63\r
+/ IF(CLOSED)GOTO 19000\r
+ FLDA CLOSED\r
+ JNE #19000\r
+/ CALL DSTROY(SNAKE)\r
+ JSR DSTROY\r
+ JA .+4\r
+ JA SNAKE\r
+/C\r
+/C SET PROP FOR USE BY TRAVEL OPTIONS\r
+/C\r
+/ PROP(SNAKE)=1\r
+ FLDA SNAKE\r
+ ATX 7\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+\r
+/9021 K=LIQ(0)\r
+#9021, JSA LIQ\r
+ FSTA K\r
+/ IF(K.EQ.OBJ)OBJ=BOTTLE\r
+ FSUB OBJ\r
+ JNE .+6\r
+ FLDA BOTTLE\r
+ FSTA OBJ\r
+/ IF(OBJ.EQ.BOTTLE.AND.K.NE.0)PLACE(K)=0\r
+ FLDA OBJ\r
+ FSUB BOTTLE\r
+ JNE .+12\r
+ FLDA K\r
+ JEQ .+6\r
+ ATX 7\r
+ FCLA\r
+ FSTA PLACE-3,7\r
+/ IF(OBJ.EQ.CAGE.AND.PROP(BIRD).NE.0)CALL DROP(BIRD,LOC)\r
+ FLDA OBJ\r
+ FSUB CAGE\r
+ JNE .+21\r
+ FLDA BIRD\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JEQ .+12\r
+ JSR DROP\r
+ JA .+6\r
+ JA BIRD\r
+ JA LOC\r
+/ IF(OBJ.EQ.BIRD)PROP(BIRD)=0\r
+ FLDA OBJ\r
+ FSUB BIRD\r
+ JNE .+10\r
+ FLDA BIRD\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ CALL DROP(OBJ,LOC)\r
+ JSR DROP\r
+/ GO TO 2012\r
+ JA #2012\r
+/\r
+ JA OBJ\r
+ JA LOC\r
+\r
+/C\r
+/9024 IF(OBJ.NE.COINS.OR..NOT.HERE(VEND))GOTO 9025\r
+#9024, FLDA OBJ\r
+ FSUB COINS\r
+ JNE #9025\r
+ FLDA VEND\r
+ JSA HERE\r
+ JEQ #9025\r
+/ CALL DSTROY(COINS)\r
+ JSR DSTROY\r
+ JA .+4\r
+ JA COINS\r
+/ CALL DROP(BATTER,LOC)\r
+ JSR DROP\r
+ JA .+6\r
+ JA BATTER\r
+ JA LOC\r
+/ CALL PSPEAK(BATTER,0)\r
+ JSR PSPEAK\r
+ JA .+6\r
+ JA BATTER\r
+ JA ZERO\r
+/ GOTO 2012\r
+ JA #2012\r
+\r
+\f/C\r
+/9025 IF(OBJ.NE.BIRD.OR..NOT.AT(DRAGON).OR.PROP(DRAGON).NE.0)GOTO 9026\r
+#9025, FLDA OBJ\r
+ FSUB BIRD\r
+ JNE #9026\r
+ FLDA DRAGON\r
+ JSA AT\r
+ JEQ #9026\r
+ FLDA DRAGON\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JNE #9026\r
+/ CALL RSPEAK(154)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+374\r
+/ CALL DSTROY(BIRD)\r
+ JSR DSTROY\r
+ JA .+4\r
+ JA BIRD\r
+/ PROP(BIRD)=0\r
+ FLDA BIRD\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ IF(PLACE(SNAKE).EQ.PLAC(SNAKE))TALLY2=TALLY2+1\r
+ FLDA SNAKE\r
+ ATX 7\r
+ FLDA PLACE-3,7\r
+ FSUB PLAC-3,7\r
+ JNE #2012\r
+ FLDA TALLY2\r
+ FADD ONE\r
+ FSTA TALLY2\r
+/ GOTO 2012\r
+ JA #2012\r
+\r
+/C\r
+/9026 IF(OBJ.NE.BEAR.OR..NOT.AT(TROLL))GOTO 9027\r
+#9026, FLDA OBJ\r
+ FSUB BEAR\r
+ JNE #9027\r
+ FLDA TROLL\r
+ JSA AT\r
+ JEQ #9027\r
+/ CALL RSPEAK(163)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+242\r
+/ CALL MOVE(TROLL,0)\r
+ JSR MOVE\r
+ JA .+6\r
+ JA TROLL\r
+ JA ZERO\r
+/ CALL MOVE(TROLL+100,0)\r
+ FLDA TROLL\r
+ FADD #LIT+154\r
+ FSTA #TMP\r
+ JSR MOVE\r
+ JA .+6\r
+ JA #TMP\r
+ JA ZERO\r
+/ CALL MOVE(TROLL2,PLAC(TROLL))\r
+ FLDA TROLL\r
+ ATX 7\r
+ XTA 7\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PPLAC\r
+ FSTA .+11\r
+ STARTF\r
+ JSR MOVE\r
+ JA .+6\r
+ JA TROLL2\r
+ JA .\r
+/ CALL MOVE(TROLL2+100,FIXD(TROLL))\r
+ FLDA TROLL2\r
+ FADD #LIT+154\r
+ FSTA #TMP\r
+ FLDA TROLL\r
+ ATX 7\r
+ XTA 7\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PFIXD\r
+ FSTA .+11\r
+ STARTF\r
+ JSR MOVE\r
+ JA .+6\r
+ JA #TMP\r
+ JA .\r
+/ CALL JUGGLE(CHASM)\r
+ JSR JUGGLE\r
+ JA .+4\r
+ JA CHASM\r
+ FLDA TROLL\r
+ ATX 7\r
+/ PROP(TROLL)=2\r
+ FLDA TWO\r
+ FSTA PROP-3,7\r
+/ GOTO 9021\r
+ JA #9021\r
+\r
+/C\r
+/9027 IF(OBJ.EQ.VASE.AND.LOC.NE.PLAC(PILLOW))GOTO 9028\r
+#9027, FLDA OBJ\r
+ FSUB VASE\r
+ JNE .+13\r
+ FLDA PILLOW\r
+ ATX 7\r
+ FLDA LOC\r
+ FSUB PLAC-3,7\r
+ JNE #9028\r
+/ CALL RSPEAK(54)\r
+ JSR RSPEAK\r
+ JA #9021\r
+ JA #LIT+113\r
+/ GOTO 9021\r
+\r
+/C\r
+/9028 PROP(VASE)=2\r
+#9028, FLDA VASE\r
+ ATX 7\r
+ FLDA TWO\r
+ FSTA PROP-3,7\r
+/ IF(AT(PILLOW))PROP(VASE)=0\r
+ FLDA PILLOW\r
+ JSA AT\r
+ JEQ .+10\r
+ FLDA VASE\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ CALL PSPEAK(VASE,PROP(VASE)+1)\r
+ FLDA VASE\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FADD ONE\r
+ FSTA #TMP\r
+ JSR PSPEAK\r
+ JA .+6\r
+ JA VASE\r
+ JA #TMP\r
+/ IF(PROP(VASE).NE.0)FIXED(VASE)=-1\r
+ FLDA VASE\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JEQ #9021\r
+ FLDA MINUS1\r
+ FSTA FIXED-3,7\r
+/ GOTO 9021\r
+ JA #9021\r
+\r
+/C\r
+/C SAY. ECHO WD2 (OR WD1 IF NO WD2 (SAY WHAT?, ETC.).) MAGIC WORDS OVERRIDE.\r
+/C\r
+/9030 IF(WD2.EQ.0)GOTO 9031\r
+#9030, FLDA WD2\r
+ JEQ #9031\r
+/ WD1=WD2 WD1A=WD2A\r
+ FLDA WD2\r
+ FSTA WD1\r
+/ WD1X=WD2X\r
+ FLDA WD2X\r
+ FSTA WD1X\r
+\r
+/9031 CALL VOCAB(WD1,WD1A,-1,I)\r
+#9031, JSR VOCAB\r
+ JA .+6\r
+ JA WD1\r
+ JA MINUS1\r
+ FSTA I\r
+/ IF(I.EQ.62.OR.I.EQ.65.OR.I.EQ.71.OR.I.EQ.2025)GOTO 9035\r
+ FSUB #LIT+124\r
+ JEQ #9035\r
+ FSUB THREE\r
+ JEQ #9035\r
+ FSUB #LIT+3\r
+ JEQ #9035\r
+ LDX 3751,0 /2025\r
+ XTA 0\r
+ FSUB I\r
+ JEQ #9035\r
+/ TYPE 9032\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #9032\r
+ JA ZERO\r
+ JA TWO\r
+/9032 FORMAT(' Okay, "',$)\r
+/ CALL A5TOA1(WD1,WD1A,WD1X,'".')\r
+ JSR A5TOA1\r
+ JA #2012\r
+ JA WD1\r
+ JA WD1X\r
+ JA TQDOT\r
+/ GOTO 2012\r
+\r
+/C\r
+/9035 WD2=0\r
+#9035, FCLA\r
+ FSTA WD2\r
+/ OBJ=0\r
+ FSTA OBJ\r
+/ GOTO 2630\r
+ JA #2630\r
+\r
+/C\r
+/C LOCK, UNLOCK, NO OBJECT GIVEN. ASSUME VARIOUS THINGS IF PRESENT.\r
+/C\r
+/8040 SPK=28\r
+#8040, LDX 34,0 /28\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(HERE(CLAM))OBJ=CLAM\r
+ FLDA CLAM\r
+ JSA HERE\r
+ JEQ .+6\r
+ FLDA CLAM\r
+ FSTA OBJ\r
+/ IF(HERE(OYSTER))OBJ=OYSTER\r
+ FLDA OYSTER\r
+ JSA HERE\r
+ JEQ .+6\r
+ FLDA OYSTER\r
+ FSTA OBJ\r
+/ IF(AT(DOOR))OBJ=DOOR\r
+ FLDA DOOR\r
+ JSA AT\r
+ JEQ .+6\r
+ FLDA DOOR\r
+ FSTA OBJ\r
+/ IF(AT(GRATE))OBJ=GRATE\r
+ FLDA GRATE\r
+ JSA AT\r
+ JEQ .+6\r
+ FLDA GRATE\r
+ FSTA OBJ\r
+/ IF(OBJ.NE.0.AND.HERE(CHAIN))GOTO 8000\r
+ FLDA OBJ\r
+ JEQ .+10\r
+ FLDA CHAIN\r
+ JSA HERE\r
+ JNE #8000\r
+/ IF(HERE(CHAIN))OBJ=CHAIN\r
+ FLDA CHAIN\r
+ JSA HERE\r
+ JEQ .+6\r
+ FLDA CHAIN\r
+ FSTA OBJ\r
+/ IF(OBJ.EQ.0)GOTO 2011\r
+ FLDA OBJ\r
+ JEQ #2011\r
+\r
+/C\r
+/C LOCK, UNLOCK OBJECT. SPECIAL STUFF FOR OPENING CLAM/OYSTER AND FOR CHAIN.\r
+/C\r
+/9040 IF(OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER)GOTO 9046\r
+#9040, FLDA OBJ\r
+ FSUB CLAM\r
+ JEQ #9046\r
+ FLDA OBJ\r
+ FSUB OYSTER\r
+ JEQ #9046\r
+/ IF(OBJ.EQ.DOOR)SPK=111\r
+ FLDA OBJ\r
+ FSUB DOOR\r
+ JNE #9040A\r
+ LDX 157,0 /111\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.DOOR.AND.PROP(DOOR).EQ.1)SPK=54\r
+#9040A, FLDA OBJ\r
+ FSUB DOOR\r
+ JNE .+16\r
+ FLDA DOOR\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FSUB ONE\r
+ JEQ .+6\r
+ LDX 74,0 /60\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.CAGE)SPK=32\r
+ FLDA OBJ\r
+ FSUB CAGE\r
+ JNE .+6\r
+ LDX 40,0 /32\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.KEYS)SPK=55\r
+ FLDA OBJ\r
+ FSUB KEYS\r
+ JNE .+6\r
+ LDX 67,0 /55\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.GRATE.OR.OBJ.EQ.CHAIN)SPK=31\r
+ FLDA OBJ\r
+ FSUB GRATE\r
+ JEQ .+10\r
+ FLDA OBJ\r
+ FSUB CHAIN\r
+ JNE .+6\r
+ LDX 37,0 /31\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(SPK.NE.31.OR..NOT.HERE(KEYS))GOTO 2011\r
+ LDX 37,0 /31\r
+ XTA 0\r
+ FSUB SPK\r
+ JNE #2011\r
+ FLDA KEYS\r
+ JSA HERE\r
+ JEQ #2011\r
+/ IF(OBJ.EQ.CHAIN)GOTO 9048\r
+ FLDA OBJ\r
+ FSUB CHAIN\r
+ JEQ #9048\r
+/ IF(.NOT.CLOSNG)GOTO 9043\r
+ FLDA CLOSNG\r
+ JEQ #9043\r
+/ K=130\r
+ FLDA #LIT+207\r
+ FSTA K\r
+/ IF(.NOT.PANIC)CLOCK2=15\r
+ FLDA PANIC\r
+ JNE .+5\r
+ FLDA #LIT+25\r
+ FSTA CLOCK2\r
+/ PANIC=.TRUE.\r
+ FLDA ONE\r
+ FSTA PANIC\r
+/ GOTO 2010\r
+ JA #2010\r
+\r
+/C\r
+/9043 K=34+PROP(GRATE)\r
+#9043, FLDA GRATE\r
+ ATX 7\r
+ LDX 42,0 /34\r
+ XTA 0\r
+ FADD PROP-3,7\r
+ FSTA K\r
+/ IF(VERB.EQ.LOCK)PROP(GRATE)=0\r
+ FLDA GRATE\r
+ ATX 7\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+ FLDA VERB\r
+ FSUB LOCK\r
+ JNE .+10\r
+ FLDA GRATE\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ K=K+2*PROP(GRATE)\r
+ FLDA GRATE\r
+ ATX 7\r
+ FLDA TWO\r
+ FMUL PROP-3,7\r
+ FADD K\r
+ FSTA K\r
+/ GOTO 2010\r
+ JA #2010\r
+\r
+/C\r
+/C CLAM/OYSTER.\r
+/C\r
+/9046 K=0\r
+#9046, FCLA\r
+ FSTA K\r
+/ IF(OBJ.EQ.OYSTER)K=1\r
+ FLDA OBJ\r
+ FSUB OYSTER\r
+ JNE .+5\r
+ FLDA ONE\r
+ FSTA K\r
+/ SPK=124+K\r
+ LDX 174,0\r
+ XTA 0\r
+ FADD K\r
+ FSTA SPK\r
+/ IF(TOTING(OBJ))SPK=120+K\r
+ FLDA OBJ\r
+ JSA TOTING\r
+ JEQ #9046A\r
+ LDX 170,0 /120\r
+ XTA 0\r
+ FADD K\r
+ FSTA SPK\r
+/ IF(.NOT.TOTING(TRIDNT))SPK=122+K\r
+#9046A, FLDA TRIDNT\r
+ JSA TOTING\r
+ JNE .+10\r
+ LDX 172,0 /122\r
+ XTA 0\r
+ FADD K\r
+ FSTA SPK\r
+/ IF(VERB.EQ.LOCK)SPK=61\r
+ FLDA VERB\r
+ FSUB LOCK\r
+ JNE .+6\r
+ LDX 75,0 /61\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(SPK.NE.124)GOTO 2011\r
+ LDX 174,0 /124\r
+ XTA 0\r
+ FSUB SPK\r
+ JNE #2011\r
+/ CALL DSTROY(CLAM)\r
+ JSR DSTROY\r
+ JA .+4\r
+ JA CLAM\r
+/ CALL DROP(OYSTER,LOC)\r
+ JSR DROP\r
+ JA .+6\r
+ JA OYSTER\r
+ JA LOC\r
+/ CALL DROP(PEARL,105)\r
+ JSR DROP\r
+ JA #2011\r
+ JA PEARL\r
+ JA #LIT+157\r
+/ GOTO 2011\r
+\r
+/C\r
+/C CHAIN.\r
+/C\r
+/9048 IF(VERB.EQ.LOCK)GOTO 9049\r
+#9048, FLDA VERB\r
+ FSUB LOCK\r
+ JEQ #9049\r
+/ SPK=171\r
+ LDX 253,0 /171\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(PROP(BEAR).EQ.0)SPK=41\r
+ FLDA BEAR\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JNE .+6\r
+ LDX 51,0 /41\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(PROP(CHAIN).EQ.0)SPK=37\r
+ FLDA CHAIN\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JNE .+4\r
+ FLDA #LIT+71\r
+ FSTA SPK\r
+/ IF(SPK.NE.171)GOTO 2011\r
+ LDX 253,0 /171\r
+ XTA 0\r
+ FSUB SPK\r
+ JNE #2011\r
+/ PROP(CHAIN)=0\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ FIXED(CHAIN)=0\r
+ FSTA FIXED-3,7\r
+/ IF(PROP(BEAR).NE.3)PROP(BEAR)=2\r
+ FLDA BEAR\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FSUB THREE\r
+ JEQ .+5\r
+ FLDA TWO\r
+ FSTA PROP-3,7\r
+/ FIXED(BEAR)=2-PROP(BEAR)\r
+ FLDA TWO\r
+ FSUB PROP-3,7\r
+ FSTA FIXED-3,7\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/9049 SPK=172\r
+#9049, LDX 254,0 /172\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(PROP(CHAIN).NE.0)SPK=34\r
+ FLDA CHAIN\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JEQ .+6\r
+ LDX 42,0 /34\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(LOC.NE.PLAC(CHAIN))SPK=173\r
+ FLDA LOC\r
+ FSUB PLAC-3,7\r
+ JEQ .+6\r
+ LDX 255,0 /173\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(SPK.NE.172)GOTO 2011\r
+ LDX 254,0 /172\r
+ XTA 0\r
+ FSUB SPK\r
+ JNE #2011\r
+/ PROP(CHAIN)=2\r
+ FLDA TWO\r
+ FSTA PROP-3,7\r
+/ IF(TOTING(CHAIN))CALL DROP(CHAIN,LOC)\r
+ FLDA CHAIN\r
+ JSA TOTING\r
+ JEQ .+12\r
+ JSR DROP\r
+ JA .+6\r
+ JA CHAIN\r
+ JA LOC\r
+/ FIXED(CHAIN)=-1\r
+ FLDA MINUS1\r
+ FSTA FIXED-3,7\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/C LIGHT LAMP\r
+/C\r
+/9070 IF(.NOT.HERE(LAMP))GOTO 2011\r
+#9070, FLDA LAMP\r
+ JSA HERE\r
+ JEQ #2011\r
+/ SPK=184\r
+ FLDA #LIT+253\r
+ FSTA SPK\r
+/ IF(LIMIT.LT.0)GOTO 2011\r
+ FLDA LIMIT\r
+ JLT #2011\r
+/ PROP(LAMP)=1\r
+ FLDA LAMP\r
+ ATX 7\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+/ CALL RSPEAK(39)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+74\r
+/ IF(WZDARK)GOTO 2000\r
+ FLDA WZDARK\r
+ JNE #2000\r
+/ GOTO 2012\r
+ JA #2012\r
+\r
+/C\r
+/C LAMP OFF\r
+/C\r
+/9080 IF(.NOT.HERE(LAMP))GOTO 2011\r
+#9080, FLDA LAMP\r
+ JSA HERE\r
+ JEQ #2011\r
+/ PROP(LAMP)=0\r
+ FLDA LAMP\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ CALL RSPEAK(40)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+77\r
+/ IF(DARK(0))CALL RSPEAK(16)\r
+ JSA DARK\r
+ JEQ #2012\r
+ JSR RSPEAK\r
+ JA #2012\r
+ JA #LIT+30\r
+/ GOTO 2012\r
+\r
+/C\r
+/C WAVE. NO EFFECT UNLESS WAVING ROD AT FISSURE.\r
+/C\r
+/9090 IF((.NOT.TOTING(OBJ)).AND.(OBJ.NE.ROD.OR..NOT.TOTING(ROD2)))\r
+/ 1 SPK=29\r
+#9090, FLDA OBJ\r
+ JSA TOTING\r
+ JNE .+20\r
+ FLDA OBJ\r
+ FSUB ROD\r
+ JNE .+12\r
+ FLDA ROD2\r
+ JSA TOTING\r
+ JNE .+4\r
+ FLDA #LIT+402\r
+ FSTA SPK\r
+/ IF(OBJ.NE.ROD.OR..NOT.AT(FISSUR).OR..NOT.TOTING(OBJ)\r
+/ 1 .OR.CLOSNG)GOTO 2011\r
+ FLDA OBJ\r
+ FSUB ROD\r
+ JNE #2011\r
+ FLDA FISSUR\r
+ JSA AT\r
+ JEQ #2011\r
+ FLDA OBJ\r
+ JSA TOTING\r
+ JEQ #2011\r
+ FLDA CLOSNG\r
+ JNE #2011\r
+/ PROP(FISSUR)=1-PROP(FISSUR)\r
+ FLDA FISSUR\r
+ ATX 7\r
+ FLDA ONE\r
+ FSUB PROP-3,7\r
+ FSTA PROP-3,7\r
+/ CALL PSPEAK(FISSUR,2-PROP(FISSUR))\r
+ FLDA FISSUR\r
+ ATX 7\r
+ FLDA TWO\r
+ FSUB PROP-3,7\r
+ FSTA #TMP\r
+ JSR PSPEAK\r
+ JA #2012\r
+ JA FISSUR\r
+ JA #TMP\r
+/ GOTO 2012\r
+\r
+/C\r
+/C ATTACK. ASSUME TARGET IF UNAMBIGUOUS. "THROW" ALSO LINKS HERE. ATTACKABLE\r
+/C OBJECTS FALL INTO TWO CATEGORIES: ENEMIES (SNAKE, DWARF, ETC.) AND OTHERS\r
+/C (BIRD, CLAM). AMBIGUOUS IF TWO ENEMIES, OR IF NO ENEMIES BUT TWO OTHERS.\r
+/C\r
+/9120 DO 9121 I=1,5\r
+#9120, FLDA ONE\r
+ FSTA I\r
+\r
+#H0102, FLDA I\r
+ ATX 7\r
+/ IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2)GOTO 9122\r
+ FLDA DLOC-3,7\r
+ FSUB LOC\r
+ JNE #9121\r
+ FLDA DFLAG\r
+ FSUB TWO\r
+ JGE #9122\r
+\r
+/9121 CONTINUE\r
+#9121, FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+3\r
+ JLE #H0102\r
+/ I=0\r
+ FCLA\r
+ FSTA I\r
+\r
+/9122 IF(OBJ.NE.0)GOTO 9124\r
+#9122, FLDA OBJ\r
+ JNE #9124\r
+/ IF(I.NE.0)OBJ=DWARF\r
+ FLDA I\r
+ JEQ .+6\r
+ FLDA DWARF\r
+ FSTA OBJ\r
+/ IF(HERE(SNAKE))OBJ=OBJ*100+SNAKE\r
+ FLDA SNAKE\r
+ JSA HERE\r
+ JEQ .+11\r
+ FLDA OBJ\r
+ FMUL #LIT+154\r
+ FADD SNAKE\r
+ FSTA OBJ\r
+/ IF(AT(DRAGON).AND.PROP(DRAGON).EQ.0)OBJ=OBJ*100+DRAGON\r
+ FLDA DRAGON\r
+ JSA AT\r
+ JEQ .+20\r
+ FLDA DRAGON\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JNE .+11\r
+ FLDA OBJ\r
+ FMUL #LIT+154\r
+ FADD DRAGON\r
+ FSTA OBJ\r
+/ IF(AT(TROLL))OBJ=OBJ*100+TROLL\r
+ FLDA TROLL\r
+ JSA AT\r
+ JEQ .+11\r
+ FLDA OBJ\r
+ FMUL #LIT+154\r
+ FADD TROLL\r
+ FSTA OBJ\r
+/ IF(HERE(BEAR).AND.PROP(BEAR).EQ.0)OBJ=OBJ*100+BEAR\r
+ FLDA BEAR\r
+ JSA HERE\r
+ JEQ .+20\r
+ FLDA BEAR\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JNE .+11\r
+ FLDA OBJ\r
+ FMUL #LIT+154\r
+ FADD BEAR\r
+ FSTA OBJ\r
+/ IF(OBJ.GT.100)GOTO 8000\r
+ FLDA OBJ\r
+ FSUB #LIT+154\r
+ JGT #8000\r
+/ IF(OBJ.NE.0)GOTO 9124\r
+ FLDA OBJ\r
+ JNE #9124\r
+/C\r
+/C CAN'T ATTACK BIRD BY THROWING AXE.\r
+/C\r
+/ IF(HERE(BIRD).AND.VERB.NE.THROW)OBJ=BIRD\r
+ FLDA BEAR\r
+ JSA HERE\r
+ JEQ .+14\r
+ FLDA VERB\r
+ FSUB THROW\r
+ JNE .+6\r
+ FLDA BIRD\r
+ FSTA OBJ\r
+/C\r
+/C CLAM AND OYSTER BOTH TREATED AS CLAM FOR INTRANSITIVE CASE; NO HARM DONE.\r
+/C\r
+/ IF(HERE(CLAM).OR.HERE(OYSTER))OBJ=100*OBJ+CLAM\r
+ FLDA CLAM\r
+ JSA HERE\r
+ JNE .+10\r
+ FLDA OYSTER\r
+ JSA HERE\r
+ JEQ .+11\r
+ FLDA #LIT+154\r
+ FMUL OBJ\r
+ FADD CLAM\r
+ FSTA OBJ\r
+/ IF(OBJ.GT.100)GOTO 8000\r
+ FLDA OBJ\r
+ FSUB #LIT+154\r
+ JGT #8000\r
+\r
+/9124 IF(OBJ.NE.BIRD)GOTO 9125\r
+#9124, FLDA OBJ\r
+ FSUB BIRD\r
+ JNE #9125\r
+/ SPK=137\r
+ LDX 211,0 /137\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(CLOSED)GOTO 2011\r
+ FLDA CLOSED\r
+ JNE #2011\r
+/ CALL DSTROY(BIRD)\r
+ JSR DSTROY\r
+ JA .+4\r
+ JA BIRD\r
+/ PROP(BIRD)=0\r
+ FLDA BIRD\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ IF(PLACE(SNAKE).EQ.PLAC(SNAKE))TALLY2=TALLY2+1\r
+ FLDA SNAKE\r
+ ATX 7\r
+ FLDA PLACE-3,7\r
+ FSUB PLAC-3,7\r
+ JNE .+7\r
+ FLDA TALLY2\r
+ FADD ONE\r
+ FSTA TALLY2\r
+/ SPK=45\r
+ FLDA #LIT+102\r
+ FSTA SPK\r
+\r
+/9125 IF(OBJ.EQ.0)SPK=44\r
+#9125, FLDA OBJ\r
+ JNE .+6\r
+ LDX 54,0 /44\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER)SPK=150\r
+ FLDA OBJ\r
+ FSUB CLAM\r
+ JEQ .+10\r
+ FLDA OBJ\r
+ FSUB OYSTER\r
+ JNE .+6\r
+ LDX 226,0 /150\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.SNAKE)SPK=46\r
+ FLDA OBJ\r
+ FSUB SNAKE\r
+ JNE .+6\r
+ LDX 56,0 /46\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.DWARF)SPK=49\r
+ FLDA OBJ\r
+ FSUB DWARF\r
+ JNE .+4\r
+ FLDA #LIT+105\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.DWARF.AND.CLOSED)GOTO 19000\r
+ FLDA OBJ\r
+ FSUB DWARF\r
+ JNE .+6\r
+ FLDA CLOSED\r
+ JNE #19000\r
+/ IF(OBJ.EQ.DRAGON)SPK=167\r
+ FLDA OBJ\r
+ FSUB DRAGON\r
+ JNE .+6\r
+ LDX 247,0 /167\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.TROLL)SPK=157\r
+ FLDA OBJ\r
+ FSUB TROLL\r
+ JNE .+6\r
+ LDX 235,0 /157\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.BEAR)SPK=165+(PROP(BEAR)+1)/2\r
+ FLDA OBJ\r
+ FSUB BEAR\r
+ JNE .+15\r
+ FLDA BEAR\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FADD ONE\r
+ FDIV TWO\r
+ JSA #FIX\r
+ FADD #LIT+245\r
+ FSTA SPK\r
+/ IF(OBJ.NE.DRAGON.OR.PROP(DRAGON).NE.0)GOTO 2011\r
+ FLDA OBJ\r
+ FSUB DRAGON\r
+ JNE #2011\r
+ FLDA DRAGON\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JNE #2011\r
+/C\r
+/C FUN STUFF FOR DRAGON. IF HE INSISTS ON ATTACKING IT, WIN! SET PROP TO DEAD,\r
+/C MOVE DRAGON TO CENTRAL LOC (STILL FIXED), MOVE RUG THERE (NOT FIXED), AND\r
+/C MOVE HIM THERE, TOO. THEN DO A NULL MOTION TO GET NEW DESCRIPTION.\r
+/C\r
+/ CALL RSPEAK(49)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+105\r
+/ VERB=0\r
+ FCLA\r
+ FSTA VERB\r
+/ OBJ=0\r
+ FSTA OBJ\r
+/ CALL GETIN(WD1,WD1A,WD1X,WD2,WD2A,WD2X)\r
+ JSR GETIN\r
+ JA .+12\r
+ JA WD1\r
+ JA WD1X\r
+ JA WD2\r
+ JA WD2X\r
+/ IF(WD1.NE.'YE'.AND.WD1.NE.'Y')GOTO 2608\r
+ FLDA WD1\r
+ FSUB TYES\r
+ JEQ OKKILL\r
+ FLDA WD1\r
+ FSUB TYE\r
+ JEQ OKKILL\r
+ FLDA WD1\r
+ FSUB TY\r
+ JNE #2608\r
+/ CALL PSPEAK(DRAGON,1)\r
+OKKILL, JSR PSPEAK\r
+ JA .+6\r
+ JA DRAGON\r
+ JA ONE\r
+/ PROP(DRAGON)=2\r
+ FLDA DRAGON\r
+ ATX 7\r
+ FLDA TWO\r
+ FSTA PROP-3,7\r
+/ PROP(RUG)=0\r
+ FLDA RUG\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ K=(PLAC(DRAGON)+FIXD(DRAGON))/2\r
+ FLDA DRAGON\r
+ ATX 7\r
+ FLDA PLAC-3,7\r
+ FADD FIXD-3,7\r
+ FDIV TWO\r
+ JSA #FIX\r
+ FSTA K\r
+/ CALL MOVE(DRAGON+100,-1)\r
+ FLDA DRAGON\r
+ FADD #LIT+154\r
+ FSTA #TMP\r
+ JSR MOVE\r
+ JA .+6\r
+ JA #TMP\r
+ JA MINUS1\r
+/ CALL MOVE(RUG+100,0)\r
+ FLDA RUG\r
+ FADD #LIT+154\r
+ FSTA #TMP\r
+ JSR MOVE\r
+ JA .+6\r
+ JA #TMP\r
+ JA ZERO\r
+/ CALL MOVE(DRAGON,K)\r
+ JSR MOVE\r
+ JA .+6\r
+ JA DRAGON\r
+ JA K\r
+/ CALL MOVE(RUG,K)\r
+ JSR MOVE\r
+ JA .+6\r
+ JA RUG\r
+ JA K\r
+/ DO 9126 OBJ=1,100\r
+ FLDA ONE\r
+ FSTA OBJ\r
+\r
+/ IF(PLACE(OBJ).EQ.PLAC(DRAGON).OR.PLACE(OBJ).EQ.FIXD(DRAGON))\r
+/ 1 CALL MOVE(OBJ,K)\r
+#H0122, FLDA OBJ\r
+ ATX 7\r
+ FLDA DRAGON\r
+ ATX 6\r
+ FLDA PLACE-3,7\r
+ FSUB PLAC-3,6\r
+ JEQ .+10\r
+ FLDA PLACE-3,7\r
+ FSUB FIXD-3,6\r
+ JNE #9126\r
+ JSR MOVE\r
+ JA .+6\r
+ JA OBJ\r
+ JA K\r
+/9126 CONTINUE\r
+#9126, FLDA OBJ\r
+ FADD ONE\r
+ FSTA OBJ\r
+ FSUB #LIT+154\r
+ JLE #H0122\r
+/ LOC=K\r
+ FLDA K\r
+ FSTA LOC\r
+/ K=NULL\r
+ FLDA NULL\r
+ FSTA K\r
+/ GOTO 8\r
+ JA #8\r
+\r
+/C\r
+/C POUR. IF NO OBJECT, OR OBJECT IS BOTTLE, ASSUME CONTENTS OF BOTTLE.\r
+/C SPECIAL TESTS FOR POURING WATER OR OIL ON PLANT OR RUSTY DOOR.\r
+/C\r
+/9130 IF(OBJ.EQ.BOTTLE.OR.OBJ.EQ.0)OBJ=LIQ(0)\r
+#9130, FLDA OBJ\r
+ FSUB BOTTLE\r
+ JEQ .+6\r
+ FLDA OBJ\r
+ JNE .+6\r
+ JSA LIQ\r
+ FSTA OBJ\r
+/ IF(OBJ.EQ.0)GOTO 8000\r
+ FLDA OBJ\r
+ JEQ #8000\r
+/ IF(.NOT.TOTING(OBJ))GOTO 2011\r
+ FLDA OBJ\r
+ JSA TOTING\r
+ JEQ #2011\r
+/ SPK=78\r
+ LDX 116,0 /78\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.NE.OIL.AND.OBJ.NE.WATER)GOTO 2011\r
+ FLDA OBJ\r
+ FSUB OIL\r
+ JEQ .+10\r
+ FLDA OBJ\r
+ FSUB WATER\r
+ JNE #2011\r
+/ PROP(BOTTLE)=1\r
+ FLDA BOTTLE\r
+ ATX 7\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+/ PLACE(OBJ)=0\r
+ FLDA OBJ\r
+ ATX 7\r
+ FCLA\r
+ FSTA PLACE-3,7\r
+/ SPK=77\r
+ LDX 115,0 /77\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(.NOT.(AT(PLANT).OR.AT(DOOR)))GOTO 2011\r
+ FLDA PLANT\r
+ JSA AT\r
+ JNE .+10\r
+ FLDA DOOR\r
+ JSA AT\r
+ JEQ #2011\r
+/C\r
+/ IF(AT(DOOR))GOTO 9132\r
+ FLDA DOOR\r
+ JSA AT\r
+ JNE #9132\r
+/ SPK=112\r
+ LDX 160,0 /112\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.NE.WATER)GOTO 2011\r
+ FLDA OBJ\r
+ FSUB WATER\r
+ JNE #2011\r
+/ CALL PSPEAK(PLANT,PROP(PLANT)+1)\r
+ FLDA PLANT\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FADD ONE\r
+ FSTA #TMP\r
+ JSR PSPEAK\r
+ JA .+6\r
+ JA PLANT\r
+ JA #TMP\r
+/ PROP(PLANT)=MOD(PROP(PLANT)+2,6)\r
+ FLDA PLANT\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FADD TWO\r
+ FSTA #TMP\r
+ JSR MOD\r
+ JA .+6\r
+ JA #TMP\r
+ JA #LIT+6\r
+ FSTA PROP-3,7\r
+/ PROP(PLANT2)=PROP(PLANT)/2\r
+ FLDA PLANT2\r
+ ATX 7\r
+ FLDA PLANT\r
+ ATX 6\r
+ FLDA PROP-3,6\r
+ FDIV TWO\r
+ JSA #FIX\r
+ FSTA PROP-3,7\r
+/ K=NULL\r
+ FLDA NULL\r
+ FSTA K\r
+/ GOTO 8\r
+ JA #8\r
+\r
+/C\r
+/9132 PROP(DOOR)=0\r
+#9132, FLDA DOOR\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ IF(OBJ.EQ.OIL)PROP(DOOR)=1\r
+ FLDA OBJ\r
+ FSUB OIL\r
+ JNE .+10\r
+ FLDA DOOR\r
+ ATX 7\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+/ SPK=113+PROP(DOOR)\r
+ FLDA DOOR\r
+ ATX 7\r
+ LDX 161,0 /113\r
+ XTA 0\r
+ FADD PROP-3,7\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/C EAT. INTRANSITIVE: ASSUME FOOD IF PRESENT, ELSE ASK WHAT. TRANSITIVE: FOOD\r
+/C OK, SOME THINGS LOSE APPETITE, REST ARE RIDICULOUS.\r
+/C\r
+/8140 IF(.NOT.HERE(FOOD))GOTO 8000\r
+#8140, FLDA FOOD\r
+ JSA HERE\r
+ JEQ #8000\r
+\r
+/8142 CALL DSTROY(FOOD)\r
+#8142, JSR DSTROY\r
+ JA .+4\r
+ JA FOOD\r
+/ SPK=72\r
+ LDX 110,0 /72\r
+ XTA 0\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+/C\r
+/9140 IF(OBJ.EQ.FOOD)GOTO 8142\r
+#9140, FLDA OBJ\r
+ FSUB FOOD\r
+ JEQ #8142\r
+/ IF(OBJ.EQ.BIRD.OR.OBJ.EQ.SNAKE.OR.OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER\r
+/ 1 .OR.OBJ.EQ.DWARF.OR.OBJ.EQ.DRAGON.OR.OBJ.EQ.TROLL\r
+/ 2 .OR.OBJ.EQ.BEAR)SPK=71\r
+ FLDA OBJ\r
+ FSUB BIRD\r
+ JEQ #M78\r
+ FLDA OBJ\r
+ FSUB SNAKE\r
+ JEQ #M78\r
+ FLDA OBJ\r
+ FSUB CLAM\r
+ JEQ #M78\r
+ FLDA OBJ\r
+ FSUB OYSTER\r
+ JEQ #M78\r
+ FLDA OBJ\r
+ FSUB DWARF\r
+ JEQ #M78\r
+ FLDA OBJ\r
+ FSUB DRAGON\r
+ JEQ #M78\r
+ FLDA OBJ\r
+ FSUB TROLL\r
+ JEQ #M78\r
+ FLDA OBJ\r
+ FSUB BEAR\r
+ JNE #2011\r
+#M78, LDX 107,0 /71\r
+ XTA 0\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/C DRINK. IF NO OBJECT, ASSUME WATER AND LOOK FOR IT HERE. IF WATER IS IN\r
+/C THE BOTTLE, DRINK THAT, ELSE MUST BE AT A WATER LOC, SO DRINK STREAM.\r
+/C\r
+/9150 IF(OBJ.EQ.0.AND.LIQLOC(LOC).NE.WATER.AND.(LIQ(0).NE.WATER\r
+/ 1 .OR..NOT.HERE(BOTTLE)))GOTO 8000\r
+#9150, FLDA OBJ\r
+ JNE #M79\r
+ JSA LIQLOC\r
+ FSUB WATER\r
+ JEQ #M79\r
+ JSA LIQ\r
+ FSUB WATER\r
+ JNE #8000\r
+ FLDA BOTTLE\r
+ JSA HERE\r
+ JEQ #8000\r
+/ IF(OBJ.NE.0.AND.OBJ.NE.WATER)SPK=110\r
+#M79, FLDA OBJ\r
+ JEQ .+12\r
+ FLDA OBJ\r
+ FSUB WATER\r
+ JEQ .+4\r
+ FLDA #LIT+162\r
+ FSTA SPK\r
+/ IF(SPK.EQ.110.OR.LIQ(0).NE.WATER.OR..NOT.HERE(BOTTLE))GOTO 2011\r
+ FLDA SPK\r
+ FSUB #LIT+162\r
+ JEQ #2011\r
+ JSA LIQ\r
+ FSUB WATER\r
+ JNE #2011\r
+ FLDA BOTTLE\r
+ JSA HERE\r
+ JEQ #2011\r
+/ PROP(BOTTLE)=1\r
+ FLDA BOTTLE\r
+ ATX 7\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+/ PLACE(WATER)=0\r
+ FLDA WATER\r
+ ATX 7\r
+ FCLA\r
+ FSTA PLACE-3,7\r
+/ SPK=74\r
+ LDX 112,0 /74\r
+ XTA 0\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/C RUB. YIELDS VARIOUS SNIDE REMARKS.\r
+/C\r
+/9160 IF(OBJ.NE.LAMP)SPK=76\r
+#9160, FLDA OBJ\r
+ FSUB LAMP\r
+ JEQ #2011\r
+ LDX 114,0 /76\r
+ XTA 0\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/C THROW. SAME AS DISCARD UNLESS AXE. THEN SAME AS ATTACK EXCEPT IGNORE BIRD,\r
+/C AND IF DWARF IS PRESENT THEN ONE MIGHT BE KILLED. (ONLY WAY TO DO SO!)\r
+/C AXE ALSO SPECIAL FOR DRAGON, BEAR, AND TROLL. TREASURES SPECIAL FOR TROLL.\r
+/C\r
+/9170 IF(TOTING(ROD2).AND.OBJ.EQ.ROD.AND..NOT.TOTING(ROD))OBJ=ROD2\r
+#9170, FLDA ROD2\r
+ JSA TOTING\r
+ JEQ #M81\r
+ FLDA OBJ\r
+ FSUB ROD\r
+ JNE #M81\r
+ FLDA ROD\r
+ JSA TOTING\r
+ JNE #M81\r
+ FLDA ROD2\r
+ FSTA OBJ\r
+/ IF(.NOT.TOTING(OBJ))GOTO 2011\r
+#M81, FLDA OBJ\r
+ JSA TOTING\r
+ JEQ #2011\r
+/ IF(OBJ.GE.50.AND.OBJ.LE.MAXTRS.AND.AT(TROLL))GOTO 9178\r
+ FLDA OBJ\r
+ FSUB #LIT+110\r
+ JLT #M82\r
+ FLDA OBJ\r
+ FSUB MAXTRS\r
+ JGT #M82\r
+ FLDA TROLL\r
+ JSA AT\r
+ JNE #9178\r
+/ IF(OBJ.EQ.FOOD.AND.HERE(BEAR))GOTO 9177\r
+#M82, FLDA OBJ\r
+ FSUB FOOD\r
+ JNE #M83\r
+ FLDA BEAR\r
+ JSA HERE\r
+ JNE #9177\r
+/ IF(OBJ.NE.AXE)GOTO 9020\r
+#M83, FLDA OBJ\r
+ FSUB AXE\r
+ JNE #9020\r
+/ DO 9171 I=1,5\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/C\r
+/C NEEDN'T CHECK DFLAG IF AXE IS HERE.\r
+/C\r
+/ IF(DLOC(I).EQ.LOC)GOTO 9172\r
+#H0132, FLDA I\r
+ ATX 7\r
+ FLDA DLOC-3,7\r
+ FSUB LOC\r
+ JEQ #9172\r
+\r
+/9171 CONTINUE\r
+#9171, FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+3\r
+ JLE #H0132\r
+/ SPK=152\r
+ LDX 230,0 /152\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(AT(DRAGON).AND.PROP(DRAGON).EQ.0)GOTO 9175\r
+ FLDA DRAGON\r
+ JSA AT\r
+ JEQ #M84\r
+ FLDA DRAGON\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JEQ #9175\r
+/ SPK=158\r
+#M84, LDX 236,0 /158\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(AT(TROLL))GOTO 9175\r
+ FLDA TROLL\r
+ JSA AT\r
+ JNE #9175\r
+/ IF(HERE(BEAR).AND.PROP(BEAR).EQ.0)GOTO 9176\r
+ FLDA BEAR\r
+ JSA HERE\r
+ JEQ #M85\r
+ FLDA BEAR\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JEQ #9176\r
+/ OBJ=0\r
+#M85, FCLA\r
+ FSTA OBJ\r
+/ GOTO 9120\r
+ JA #9120\r
+\r
+/C\r
+/9172 SPK=48\r
+#9172, LDX 60,0 /48\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(RND(3).EQ.0)GOTO 9175\r
+ JSR RND\r
+ JA .+4\r
+ JA THREE\r
+ JEQ #9175\r
+/ DSEEN(I)=.FALSE.\r
+ FLDA I\r
+ ATX 7\r
+ FCLA\r
+ FSTA DSEEN-3,7\r
+/ DLOC(I)=0\r
+ FSTA DLOC-3,7\r
+/ SPK=47\r
+ LDX 57,0 /47\r
+ XTA 0\r
+ FSTA SPK\r
+/ DKILL=DKILL+1\r
+ FLDA ONE\r
+ FADDM DKILL\r
+/ IF(DKILL.EQ.1)SPK=149\r
+ FSUB ONE\r
+ JNE #9175\r
+ LDX 225,0 /149\r
+ XTA 0\r
+ FSTA SPK\r
+/9175 CALL RSPEAK(SPK)\r
+#9175, JSR RSPEAK\r
+ JA .+4\r
+ JA SPK\r
+/ CALL DROP(AXE,LOC)\r
+ JSR DROP\r
+ JA .+6\r
+ JA AXE\r
+ JA LOC\r
+/ K=NULL\r
+ FLDA NULL\r
+ FSTA K\r
+/ GOTO 8\r
+ JA #8\r
+\r
+/C\r
+/C THIS'LL TEACH HIM TO THROW THE AXE AT THE BEAR!\r
+/C\r
+/9176 SPK=164\r
+#9176, LDX 244,0 /164\r
+ XTA 0\r
+ FSTA SPK\r
+/ CALL DROP(AXE,LOC)\r
+ JSR DROP\r
+ JA .+6\r
+ JA AXE\r
+ JA LOC\r
+/ FIXED(AXE)=-1\r
+ FLDA AXE\r
+ ATX 7\r
+ FLDA MINUS1\r
+ FSTA FIXED-3,7\r
+/ PROP(AXE)=1\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+/ CALL JUGGLE(BEAR)\r
+ JSR JUGGLE\r
+/ GOTO 2011\r
+ JA #2011\r
+ JA BEAR\r
+\r
+/C\r
+/C BUT THROWING FOOD IS ANOTHER STORY.\r
+/C\r
+/9177 OBJ=BEAR\r
+#9177, FLDA BEAR\r
+ FSTA OBJ\r
+/ GOTO 9210\r
+ JA #9210\r
+\r
+/C\r
+/C SNARF A TREASURE FOR THE TROLL.\r
+/C\r
+/9178 SPK=159\r
+#9178, LDX 237,0 /159\r
+ XTA 0\r
+ FSTA SPK\r
+/ CALL DROP(OBJ,0)\r
+ JSR DROP\r
+ JA .+6\r
+ JA OBJ\r
+ JA ZERO\r
+/ CALL MOVE(TROLL,0)\r
+ JSR MOVE\r
+ JA .+6\r
+ JA TROLL\r
+ JA ZERO\r
+/ CALL MOVE(TROLL+100,0)\r
+ FLDA TROLL\r
+ FADD #LIT+154\r
+ FSTA #TMP\r
+ JSR MOVE\r
+ JA .+6\r
+ JA #TMP\r
+ JA ZERO\r
+/ CALL DROP(TROLL2,PLAC(TROLL))\r
+ FLDA TROLL\r
+ ATX 7\r
+ XTA 7\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PPLAC\r
+ FSTA .+11\r
+ STARTF\r
+ JSR DROP\r
+ JA .+6\r
+ JA TROLL2\r
+ JA .\r
+/ CALL DROP(TROLL2+100,FIXD(TROLL))\r
+ FLDA TROLL2\r
+ FADD #LIT+154\r
+ FSTA #TMP\r
+ FLDA TROLL\r
+ ATX 7\r
+ XTA 7\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PFIXD\r
+ FSTA .+11\r
+ STARTF\r
+ JSR DROP\r
+ JA .+6\r
+ JA #TMP\r
+ JA .\r
+/ CALL JUGGLE(CHASM)\r
+ JSR JUGGLE\r
+ JA .+4\r
+ JA CHASM\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/C QUIT. INTRANSITIVE ONLY. VERIFY INTENT AND EXIT IF THAT'S WHAT HE WANTS.\r
+/C\r
+/8180 GAVEUP=YES(22,54,54)\r
+#8180, JSR YES\r
+ JA .+10\r
+ JA #LIT+41\r
+ JA #LIT+113\r
+ JA #LIT+113\r
+ FSTA GAVEUP\r
+\r
+/8185 IF(GAVEUP)GOTO 20000\r
+#8185, FLDA GAVEUP\r
+ JNE #20000\r
+/ GOTO 2012\r
+ JA #2012\r
+/C\r
+/C FIND. MIGHT BE CARRYING IT, OR IT MIGHT BE HERE. ELSE GIVE CAVEAT.\r
+/C\r
+/9190 IF(AT(OBJ).OR.(LIQ(0).EQ.OBJ.AND.AT(BOTTLE))\r
+/ 1 .OR.K.EQ.LIQLOC(LOC))SPK=94\r
+#9190, FLDA OBJ\r
+ JSA AT\r
+ JNE #M86\r
+ JSA LIQ\r
+ FSUB OBJ\r
+ JNE #M87\r
+ FLDA BOTTLE\r
+ JSA AT\r
+ JNE #M86\r
+#M87, JSA LIQLOC\r
+ FSUB K\r
+ JNE .+6\r
+#M86, LDX 136,0 /94\r
+ XTA 0\r
+ FSTA SPK\r
+/ DO 9192 I=1,5\r
+ FLDA ONE\r
+ FSTA I\r
+/9192 IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2.AND.OBJ.EQ.DWARF)SPK=94\r
+#9192, FLDA I\r
+ ATX 7\r
+ FLDA DLOC-3,7\r
+ FSUB LOC\r
+ JNE #M88\r
+ FLDA DFLAG\r
+ FSUB TWO\r
+ JLT #M88\r
+ FLDA OBJ\r
+ FSUB DWARF\r
+ JNE #M88\r
+ LDX 136,0 /94\r
+ XTA 0\r
+ FSTA SPK\r
+#M88, FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+3\r
+ JLE #9192\r
+/ IF(CLOSED)SPK=138\r
+ FLDA CLOSED\r
+ JEQ .+6\r
+ LDX 212,0 /138\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(TOTING(OBJ))SPK=24\r
+ FLDA OBJ\r
+ JSA TOTING\r
+ JEQ #2011\r
+ FLDA #LIT+47\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/C INVENTORY. IF OBJECT, TREAT SAME AS FIND. ELSE REPORT ON CURRENT BURDEN.\r
+/C\r
+/8200 SPK=98\r
+#8200, LDX 142,0 /98\r
+ XTA 0\r
+ FSTA SPK\r
+/ DO 8201 I=1,100\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/ IF(I.EQ.BEAR.OR..NOT.TOTING(I))GOTO 8201\r
+#H0143, FLDA I\r
+ FSUB BEAR\r
+ JEQ #8201\r
+ FLDA I\r
+ JSA TOTING\r
+ JEQ #8201\r
+/ IF(SPK.EQ.98)CALL RSPEAK(99)\r
+ LDX 142,0 /98\r
+ XTA 0\r
+ FSUB SPK\r
+ JNE .+10\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+151\r
+/ CALL PSPEAK(I,-1)\r
+ JSR PSPEAK\r
+ JA .+6\r
+ JA I\r
+ JA MINUS1\r
+/ SPK=0\r
+ FCLA\r
+ FSTA SPK\r
+\r
+/8201 CONTINUE\r
+#8201, FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+154\r
+ JLE #H0143\r
+/ IF(TOTING(BEAR))SPK=141\r
+ FLDA BEAR\r
+ JSA TOTING\r
+ JEQ #2011\r
+ FLDA #LIT+226\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/C FEED. IF BIRD, NO SEED. SNAKE, DRAGON, TROLL: QUIP. IF DWARF, MAKE HIM\r
+/C MAD. BEAR, SPECIAL.\r
+/C\r
+/9210 IF(OBJ.NE.BIRD)GOTO 9212\r
+#9210, FLDA OBJ\r
+ FSUB BIRD\r
+ JNE #9212\r
+/ SPK=100\r
+ FLDA #LIT+154\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/9212 IF(OBJ.NE.SNAKE.AND.OBJ.NE.DRAGON.AND.OBJ.NE.TROLL)GOTO 9213\r
+#9212, FLDA OBJ\r
+ FSUB SNAKE\r
+ JEQ #M89\r
+ FLDA OBJ\r
+ FSUB DRAGON\r
+ JEQ #M89\r
+ FLDA OBJ\r
+ FSUB TROLL\r
+ JNE #9213\r
+/ SPK=102\r
+#M89, LDX 146,0 /102\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.DRAGON.AND.PROP(DRAGON).NE.0)SPK=110\r
+ FLDA OBJ\r
+ FSUB DRAGON\r
+ JNE #M90\r
+ FLDA DRAGON\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JEQ .+4\r
+ FLDA #LIT+162\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.TROLL)SPK=182\r
+#M90, FLDA OBJ\r
+ FSUB TROLL\r
+ JNE .+6\r
+ LDX 266,0 /182\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.NE.SNAKE.OR.CLOSED.OR..NOT.HERE(BIRD))GOTO 2011\r
+ FLDA OBJ\r
+ FSUB SNAKE\r
+ JNE #2011\r
+ FLDA CLOSED\r
+ JNE #2011\r
+ FLDA BIRD\r
+ JSA HERE\r
+ JEQ #2011\r
+/ SPK=101\r
+ LDX 145,0 /101\r
+ XTA 0\r
+ FSTA SPK\r
+/ CALL DSTROY(BIRD)\r
+ JSR DSTROY\r
+ JA .+4\r
+ JA BIRD\r
+/ PROP(BIRD)=0\r
+ FLDA BIRD\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ TALLY2=TALLY2+1\r
+ FLDA TALLY2\r
+ FADD ONE\r
+ FSTA TALLY2\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/9213 IF(OBJ.NE.DWARF)GOTO 9214\r
+#9213, FLDA OBJ\r
+ FSUB DWARF\r
+ JNE #9214\r
+/ IF(.NOT.HERE(FOOD))GOTO 2011\r
+ FLDA FOOD\r
+ JSA HERE\r
+ JEQ #2011\r
+/ SPK=103\r
+ LDX 147,0 / 103\r
+ XTA 0\r
+ FSTA SPK\r
+/ DFLAG=DFLAG+1\r
+ FLDA ONE\r
+ FADDM DFLAG\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/9214 IF(OBJ.NE.BEAR)GOTO 9215\r
+#9214, FLDA OBJ\r
+ FSUB BEAR\r
+ JNE #9215\r
+/ IF(PROP(BEAR).EQ.0)SPK=102\r
+ FLDA BEAR\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JNE .+6\r
+ LDX 146,0 /102\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(PROP(BEAR).EQ.3)SPK=110\r
+ FLDA PROP-3,7\r
+ FSUB THREE\r
+ JNE .+4\r
+ FLDA #LIT+162\r
+ FSTA SPK\r
+/ IF(.NOT.HERE(FOOD))GOTO 2011\r
+ FLDA FOOD\r
+ JSA HERE\r
+ JEQ #2011\r
+/ CALL DSTROY(FOOD)\r
+ JSR DSTROY\r
+ JA .+4\r
+ JA FOOD\r
+/ PROP(BEAR)=1\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+/ FIXED(AXE)=0\r
+ FLDA AXE\r
+ ATX 7\r
+ FCLA\r
+ FSTA FIXED-3,7\r
+/ PROP(AXE)=0\r
+ FSTA PROP-3,7\r
+/ SPK=168\r
+ LDX 250,0 /168\r
+ XTA 0\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/9215 SPK=14\r
+#9215, LDX 16,0 /14\r
+ XTA 0\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/C FILL. BOTTLE MUST BE EMPTY, AND SOME LIQUID AVAILABLE. (VASE IS NASTY.)\r
+/C\r
+/9220 IF(OBJ.EQ.VASE)GOTO 9222\r
+#9220, FLDA OBJ\r
+ FSUB VASE\r
+ JEQ #9222\r
+/ IF(OBJ.NE.0.AND.OBJ.NE.BOTTLE)GOTO 2011\r
+ FLDA OBJ\r
+ JEQ #M91\r
+ FLDA OBJ\r
+ FSUB BOTTLE\r
+ JNE #2011\r
+/ IF(OBJ.EQ.0.AND..NOT.HERE(BOTTLE))GOTO 8000\r
+#M91, FLDA OBJ\r
+ JNE #M92\r
+ FLDA BOTTLE\r
+ JSA HERE\r
+ JEQ #8000\r
+/ SPK=107\r
+#M92, LDX 153,0 /107\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(LIQLOC(LOC).EQ.0)SPK=106\r
+ JSA LIQLOC\r
+ JNE #M92A\r
+ LDX 152,0 /106\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(LIQ(0).NE.0)SPK=105\r
+#M92A, JSA LIQ\r
+ JEQ .+4\r
+ FLDA #LIT+157\r
+ FSTA SPK\r
+/ IF(SPK.NE.107)GOTO 2011\r
+ LDX 153,0 /107\r
+ XTA 0\r
+ FSUB SPK\r
+ JNE #2011\r
+/ PROP(BOTTLE)=MOD(COND(LOC),4)/2*2\r
+ FLDA BOTTLE\r
+ ATX 7\r
+ FLDA LOC\r
+ ATX 6\r
+ XTA 6\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PCOND\r
+ FSTA .+7\r
+ STARTF\r
+ JSR MOD\r
+ JA .+6\r
+ JA .\r
+ JA #LIT\r
+ FDIV TWO\r
+ JSA #FIX\r
+ FMUL TWO\r
+ FSTA PROP-3,7\r
+/ K=LIQ(0)\r
+ JSA LIQ\r
+ FSTA K\r
+/ IF(TOTING(BOTTLE))PLACE(K)=-1\r
+ FLDA BOTTLE\r
+ JSA TOTING\r
+ JEQ .+11\r
+ FLDA K\r
+ ATX 7\r
+ FLDA MINUS1\r
+ FSTA PLACE-3,7\r
+/ IF(K.EQ.OIL)SPK=108\r
+ FLDA K\r
+ FSUB OIL\r
+ JNE #2011\r
+ LDX 154,0 /108\r
+ XTA 0\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/9222 SPK=29\r
+#9222, LDX 35,0 /29\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(LIQLOC(LOC).EQ.0)SPK=144\r
+ JSA LIQLOC\r
+ JNE .+6\r
+ LDX 220,0 /144\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(LIQLOC(LOC).EQ.0.OR..NOT.TOTING(VASE))GOTO 2011\r
+ JSA LIQLOC\r
+ JEQ #2011\r
+ FLDA VASE\r
+ JSA TOTING\r
+ JEQ #2011\r
+/ CALL RSPEAK(145)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+234\r
+/ PROP(VASE)=2\r
+ FLDA VASE\r
+ ATX 7\r
+ FLDA TWO\r
+ FSTA PROP-3,7\r
+/ FIXED(VASE)=-1\r
+ FLDA MINUS1\r
+ FSTA FIXED-3,7\r
+/ GOTO 9024\r
+ JA #9024\r
+\r
+/C\r
+/C BLAST. NO EFFECT UNLESS YOU'VE GOT DYNAMITE, WHICH IS A NEAT TRICK!\r
+/C\r
+/9230 IF(PROP(ROD2).LT.0.OR..NOT.CLOSED)GOTO 2011\r
+#9230, FLDA ROD2\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JLT #2011\r
+ FLDA CLOSED\r
+ JEQ #2011\r
+/ BONUS=133\r
+ LDX 205,0 /133\r
+ XTA 0\r
+ FSTA BONUS\r
+/ IF(LOC.EQ.115)BONUS=134\r
+ FLDA LOC\r
+ FSUB #LIT+165\r
+ JNE .+7\r
+ LDX 206,0 /134\r
+ XTA 0\r
+ FSTA BONUS\r
+/ IF(HERE(ROD2))BONUS=135\r
+ FLDA ROD2\r
+ JSA HERE\r
+ JEQ .+7\r
+ LDX 207,0 /135\r
+ XTA 0\r
+ FSTA BONUS\r
+/ CALL RSPEAK(BONUS)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA BONUS\r
+/ GOTO 20000\r
+ JA #20000\r
+\r
+/C\r
+/C SCORE. GO TO SCORING SECTION, WHICH WILL RETURN TO 8241 IF SCORNG IS TRUE.\r
+/C\r
+/8240 SCORNG=.TRUE.\r
+#8240, FLDA ONE\r
+ FSTA SCORNG\r
+/ GOTO 20000\r
+ JA #20000\r
+\r
+/C\r
+/8241 SCORNG=.FALSE.\r
+#8241, FCLA\r
+ FSTA SCORNG\r
+/ TYPE 8243,SCORE,MXSCOR\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #8243\r
+ JA ZERO\r
+ JA TWO\r
+ \r
+ TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #8243A\r
+ FLDA SCORE\r
+ TRAP3 #RSVO\r
+ TRAP3 #RENDO\r
+\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #8243B\r
+ JA ZERO\r
+ JA THREE\r
+\r
+ TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #8243A\r
+ FLDA MXSCOR\r
+ TRAP3 #RSVO\r
+ TRAP3 #RENDO\r
+\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #8243C\r
+ JA ZERO\r
+ JA ONE\r
+\r
+/8243 FORMAT(' If you were to quit now, you would score',I4\r
+/ 1 ,' out of a possible',I4,'.')\r
+/ GAVEUP=YES(143,54,54)\r
+ JSR YES\r
+ JA .+10\r
+ JA #LIT+231\r
+ JA #LIT+113\r
+ JA #LIT+113\r
+ FSTA GAVEUP\r
+/ GOTO 8185\r
+ JA #8185\r
+\r
+/C\r
+/C FEE FIE FOE FOO (AND FUM). ADVANCE TO NEXT STATE IF GIVEN IN PROPER ORDER.\r
+/C LOOK UP WD1 IN SECTION 3 OF VOCAB TO DETERMINE WHICH WORD WE'VE GOT. LAST\r
+/C WORD ZIPS THE EGGS BACK TO THE GIANT ROOM (UNLESS ALREADY THERE).\r
+/C\r
+/8250 CALL VOCAB(WD1,WD1A,3,K)\r
+#8250, JSR VOCAB\r
+ JA .+6\r
+ JA WD1\r
+ JA THREE\r
+ FSTA K\r
+/ SPK=42\r
+ LDX 52,0 /42\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(FOOBAR.EQ.1-K)GOTO 8252\r
+ FLDA ONE\r
+ FSUB K\r
+ FSUB FOOBAR\r
+ JEQ #8252\r
+/ IF(FOOBAR.NE.0)SPK=151\r
+ FLDA FOOBAR\r
+ JEQ #2011\r
+ LDX 227,0 /151\r
+ XTA 0\r
+ FSTA SPK\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/8252 FOOBAR=K\r
+#8252, FLDA K\r
+ FSTA FOOBAR\r
+/ IF(K.NE.4)GOTO 2009\r
+ FSUB #LIT\r
+ JNE #2009\r
+/ FOOBAR=0\r
+ FCLA\r
+ FSTA FOOBAR\r
+/ IF(PLACE(EGGS).EQ.PLAC(EGGS)\r
+/ 1 .OR.(TOTING(EGGS).AND.LOC.EQ.PLAC(EGGS)))GOTO 2011\r
+ FLDA EGGS\r
+ ATX 7\r
+ FLDA PLACE-3,7\r
+ FSUB PLAC-3,7\r
+ JEQ #2011\r
+ FLDA EGGS\r
+ JSA TOTING\r
+ JEQ #M93\r
+ FLDA LOC\r
+ FSUB PLAC-3,7\r
+ JEQ #2011\r
+/C\r
+/C BRING BACK TROLL IF WE STEAL THE EGGS BACK FROM HIM BEFORE CROSSING.\r
+/C\r
+/ IF(PLACE(EGGS).EQ.0.AND.PLACE(TROLL).EQ.0.AND.PROP(TROLL).EQ.0)\r
+/ 1 PROP(TROLL)=1\r
+#M93, FLDA PLACE-3,7\r
+ JNE #M94\r
+ FLDA TROLL\r
+ ATX 6\r
+ FLDA PLACE-3,6\r
+ JNE #M94\r
+ FLDA PROP-3,6\r
+ JNE #M94\r
+ FLDA ONE\r
+ FSTA PROP-3,6\r
+/ K=2\r
+#M94, FLDA TWO\r
+ FSTA K\r
+/ IF(HERE(EGGS))K=1\r
+ FLDA EGGS\r
+ JSA HERE\r
+ JEQ .+5\r
+ FLDA ONE\r
+ FSTA K\r
+/ IF(LOC.EQ.PLAC(EGGS))K=0\r
+ FLDA LOC\r
+ FSUB PLAC-3,7\r
+ JNE .+5\r
+ FCLA\r
+ FSTA K\r
+/ CALL MOVE(EGGS,PLAC(EGGS))\r
+ XTA 7\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PPLAC\r
+ FSTA .+11\r
+ STARTF\r
+ JSR MOVE\r
+ JA .+6\r
+ JA EGGS\r
+ JA .\r
+/ CALL PSPEAK(EGGS,K)\r
+ JSR PSPEAK\r
+ JA .+6\r
+ JA EGGS\r
+ JA K\r
+/ GOTO 2012\r
+ JA #2012\r
+\r
+/C\r
+/C BRIEF. INTRANSITIVE ONLY. SUPPRESS LONG DESCRIPTIONS AFTER FIRST TIME.\r
+/C\r
+/8260 SPK=156\r
+#8260, LDX 234,0 /156\r
+ XTA 0\r
+ FSTA SPK\r
+/ ABBNUM=10000\r
+ FLDA #LIT+322\r
+ FSTA ABBNUM\r
+/ DETAIL=3\r
+ FLDA THREE\r
+ FSTA DETAIL\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/C READ. MAGAZINES IN DWARVISH, MESSAGE WE'VE SEEN, AND . . . OYSTER?\r
+/C\r
+/8270 IF(HERE(MAGZIN))OBJ=MAGZIN\r
+#8270, FLDA MAGZIN\r
+ JSA HERE\r
+ JEQ .+6\r
+ FLDA MAGZIN\r
+ FSTA OBJ\r
+/ IF(HERE(TABLET))OBJ=OBJ*100+TABLET\r
+ FLDA TABLET\r
+ JSA HERE\r
+ JEQ .+11\r
+ FLDA OBJ\r
+ FMUL #LIT+154\r
+ FADD TABLET\r
+ FSTA OBJ\r
+/ IF(HERE(MESSAG))OBJ=OBJ*100+MESSAG\r
+ FLDA MESSAGE\r
+ JSA HERE\r
+ JEQ .+11\r
+ FLDA OBJ\r
+ FMUL #LIT+154\r
+ FADD MESSAG\r
+ FSTA OBJ\r
+/ IF(CLOSED.AND.TOTING(OYSTER))OBJ=OYSTER\r
+ FLDA OYSTER\r
+ JSA TOTING\r
+ FMUL CLOSED\r
+ JEQ .+6\r
+ FLDA OYSTER\r
+ FSTA OBJ\r
+/ IF(OBJ.GT.100.OR.OBJ.EQ.0.OR.DARK(0))GOTO 8000\r
+ FLDA OBJ\r
+ FSUB #LIT+154\r
+ JGT #8000\r
+ FLDA OBJ\r
+ JEQ #8000\r
+ JSA DARK\r
+ JNE #8000\r
+\r
+/C\r
+/9270 IF(DARK(0))GOTO 5190\r
+#9270, JSA DARK\r
+ JNE #5190\r
+/ IF(OBJ.EQ.MAGZIN)SPK=190\r
+ FLDA OBJ\r
+ FSUB MAGZIN\r
+ JNE .+6\r
+ LDX 276,0 /190\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.TABLET)SPK=196\r
+ FLDA OBJ\r
+ FSUB TABLET\r
+ JNE .+6\r
+ LDX 304,0 /196\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.MESSAG)SPK=191\r
+ FLDA OBJ\r
+ FSUB MESSAG\r
+ JNE .+6\r
+ LDX 277,0 /191\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.OYSTER.AND.HINTED(2).AND.TOTING(OYSTER))SPK=194\r
+ FLDA OBJ\r
+ FSUB OYSTER\r
+ JNE #M95\r
+ FLDA TWO\r
+ ATX 7\r
+ FLDA HINTED-3,7\r
+ JEQ #M95\r
+ FLDA OYSTER\r
+ JSA TOTING\r
+ JEQ .+6\r
+ LDX 302,0 /194\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.NE.OYSTER.OR.HINTED(2).OR..NOT.TOTING(OYSTER)\r
+/ 1 .OR..NOT.CLOSED)GOTO 2011\r
+#M95, FLDA OBJ\r
+ FSUB OYSTER\r
+ JNE #2011\r
+ FLDA HINTED-3,7\r
+ JNE #2011\r
+ FLDA OYSTER\r
+ JSA TOTING\r
+ JEQ #2011\r
+ FLDA CLOSED\r
+ JEQ #2011\r
+/ HINTED(2)=YES(192,193,54)\r
+ FLDA TWO\r
+ ATX 7\r
+ JSR YES\r
+ JA .+10\r
+ JA #LIT+267\r
+ JA #LIT+272\r
+ JA #LIT+113\r
+ FSTA HINTED-3,7\r
+/ GOTO 2012\r
+ JA #2012\r
+\r
+/C\r
+/C BREAK. ONLY WORKS FOR MIRROR IN REPOSITORY AND, OF COURSE, THE VASE.\r
+/C\r
+/9280 IF(OBJ.EQ.MIRROR)SPK=148\r
+#9280, FLDA OBJ\r
+ FSUB MIRROR\r
+ JNE .+6\r
+ LDX 224,0 /148\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(OBJ.EQ.VASE.AND.PROP(VASE).EQ.0)GOTO 9282\r
+ FLDA OBJ\r
+ FSUB VASE\r
+ JNE #M96\r
+ FLDA VASE\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JEQ #9282\r
+/ IF(OBJ.NE.MIRROR.OR..NOT.CLOSED)GOTO 2011\r
+#M96, FLDA OBJ\r
+ FSUB MIRROR\r
+ JNE #2011\r
+ FLDA CLOSED\r
+ JEQ #2011\r
+/ CALL RSPEAK(197)\r
+ JSR RSPEAK\r
+/ GOTO 19000\r
+ JA #19000\r
+ JA #LIT+275\r
+\r
+/C\r
+/9282 SPK=198\r
+#9282, LDX 306,0 /198\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(TOTING(VASE))CALL DROP(VASE,LOC)\r
+ FLDA VASE\r
+ JSA TOTING\r
+ JEQ .+12\r
+ JSR DROP\r
+ JA .+6\r
+ JA VASE\r
+ JA LOC\r
+/ PROP(VASE)=2\r
+ FLDA VASE\r
+ ATX 7\r
+ FLDA TWO\r
+ FSTA PROP-3,7\r
+/ FIXED(VASE)=-1\r
+ FLDA MINUS1\r
+ FSTA FIXED-3,7\r
+/ GOTO 2011\r
+ JA #2011\r
+\r
+/C\r
+/C WAKE. ONLY USE IS TO DISTURB THE DWARVES.\r
+/C\r
+/9290 IF(OBJ.NE.DWARF.OR..NOT.CLOSED)GOTO 2011\r
+#9290, FLDA OBJ\r
+ FSUB DWARF\r
+ JNE #2011\r
+ FLDA CLOSED\r
+ JEQ #2011\r
+/ CALL RSPEAK(199)\r
+ JSR RSPEAK\r
+/ GOTO 19000\r
+ JA #19000\r
+ JA #LIT+300\r
+\r
+/C\r
+/C SUSPEND. SAVE THE WORLD.\r
+/C\r
+/8300 CALL SAVEGM(.TRUE.,I)\r
+/ GOTO 2012\r
+#8300, JSR SAVEGM\r
+ JA #2012\r
+ JA ONE\r
+ JA I\r
+\r
+/C\r
+/C HOURS. JUST A JOKE.\r
+/C\r
+/8310 CALL RSPEAK(201)\r
+#8310, JSR RSPEAK\r
+/ GOTO 2012\r
+ JA #2012\r
+ JA #LIT+303\r
+\r
+/C\r
+/C RESUME. RESTORE THE WORLD.\r
+/C\r
+/8320 CALL RSTRGM(.TRUE.,I)\r
+/ GO TO 2012\r
+\r
+#8320, JSR RSTRGM\r
+ JA #2012\r
+ JA ONE\r
+ JA I\r
+\r
+\r
+/C HINTS\r
+/C\r
+/C COME HERE IF HE'S BEEN LONG ENOUGH AT REQUIRED LOC(S) FOR SOME UNUSED HINT.\r
+/C HINT NUMBER IS IN VARIABLE "HINT". BRANCH TO QUICK TEST FOR ADDITIONAL\r
+/C CONDITIONS, THEN COME BACK TO DO NEAT STUFF. GOTO 40010 IF CONDITIONS ARE\r
+/C MET AND WE WANT TO OFFER THE HINT. GOTO 40020 TO CLEAR HINTLC BACK TO ZERO,\r
+/C 40030 TO TAKE NO ACTION YET.\r
+/C\r
+/40000 GOTO (40400,40500,40600,40700,40800,40900)(HINT-3)\r
+/C CAVE BIRD SNAKE MAZE DARK WITT\r
+#40000, FLDA HINT\r
+ FSUB THREE\r
+ ATX 1\r
+ STARTD\r
+ FLDA .+2,1\r
+ STARTF\r
+ JAC\r
+ JA #40400\r
+ JA #40500\r
+ JA #40600\r
+ JA #40700\r
+ JA #40800\r
+ JA #40010\r
+/ CALL BUG(27)\r
+ JSR BUG\r
+ JA .+4\r
+ JA #LIT+60\r
+/C\r
+/40010 HINTLC(HINT)=0\r
+#40010, FLDA HINT\r
+ ATX 7\r
+ FCLA\r
+ FSTA HINTLC-3,7\r
+/ IF(.NOT.YES(HINTS(HINT,3),0,54))GOTO 2602\r
+ FLDA #LIT+377\r
+ FADD HINT\r
+ ATX 7\r
+ XTA 7\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PHINTS\r
+ FSTA .+7\r
+ STARTF\r
+ JSR YES\r
+ JA .+10\r
+ JA .\r
+ JA ZERO\r
+ JA #LIT+113\r
+ JEQ #2602\r
+/ TYPE 40012,HINTS(HINT,2)\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #40012\r
+ JA ZERO\r
+ JA TWO\r
+\r
+ TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #4001A\r
+ FLDA TWO\r
+ FMUL #LIT+36\r
+ FADD HINT\r
+ ATX 7\r
+ FLDA HINTS-0077,7\r
+ TRAP3 #RSVO\r
+ TRAP3 #RENDO\r
+\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #4001B\r
+ JA ZERO\r
+ JA ONE\r
+/40012 FORMAT(' I am prepared to give you a hint, but it will cost you',\r
+/ 1 I2,' points.')\r
+\r
+/ HINTED(HINT)=YES(175,HINTS(HINT,4),54)\r
+ FLDA HINT\r
+ ATX 7\r
+ FLDA #LIT\r
+ FMUL #LIT+36\r
+ FADD HINT\r
+ ATX 6\r
+ XTA 6\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PHINTS\r
+ FSTA .+11\r
+ STARTF\r
+ JSR YES\r
+ JA .+10\r
+ JA #LIT+250\r
+ JA .\r
+ JA #LIT+113\r
+ FSTA HINTED-3,7\r
+/ IF(HINTED(HINT).AND.LIMIT.GT.30)LIMIT=LIMIT+30*HINTS(HINT,2)\r
+ JEQ #40020\r
+ FLDA LIMIT\r
+ FSUB #LIT+63\r
+ JLE #40020\r
+ FLDA TWO\r
+ FMUL #LIT+36\r
+ FADD HINT\r
+ ATX 6\r
+ FLDA #LIT+63\r
+ FMUL HINTS-0077,6\r
+ FADD LIMIT\r
+ FSTA LIMIT\r
+/40020 HINTLC(HINT)=0\r
+#40020, FLDA HINT\r
+ ATX 7\r
+ FCLA\r
+ FSTA HINTLC-3,7\r
+/40030 GOTO 2602\r
+#40030, JA #2602\r
+\r
+/C\r
+/C NOW FOR THE QUICK TESTS. SEE DATABASE DESCRIPTION FOR ONE-LINE NOTES.\r
+/C\r
+/40400 IF(PROP(GRATE).EQ.0.AND..NOT.HERE(KEYS))GOTO 40010\r
+#40400, FLDA GRATE\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ JNE #40020\r
+ FLDA KEYS\r
+ JSA HERE\r
+ JEQ #40010\r
+/ GOTO 40020\r
+ JA #40020\r
+\r
+/40500 IF(HERE(BIRD).AND.TOTING(ROD).AND.OBJ.EQ.BIRD)GOTO 40010\r
+#40500, FLDA BIRD\r
+ JSA HERE\r
+ JEQ #2602\r
+ FLDA ROD\r
+ JSA TOTING\r
+ JEQ #2602\r
+ FLDA OBJ\r
+ JEQ #40010\r
+ FSUB BIRD\r
+ JEQ #40010\r
+/ GOTO 40030\r
+ JA #2602\r
+\r
+/C\r
+/40600 IF(HERE(SNAKE).AND..NOT.HERE(BIRD))GOTO 40010\r
+#40600, FLDA SNAKE\r
+ JSA HERE\r
+ JEQ #40020\r
+ FLDA BIRD\r
+ JSA HERE\r
+ JEQ #40010\r
+/ GOTO 40020\r
+ JA #40020\r
+\r
+/C\r
+/40700 IF(ATLOC(LOC).EQ.0.AND.ATLOC(OLDLOC).EQ.0\r
+/ 1 .AND.ATLOC(OLDLC2).EQ.0.AND.HOLDNG.GT.1)GOTO 40010\r
+#40700, FLDA LOC\r
+ ATX 7\r
+ FLDA ATLOC-3,7\r
+ JNE #40020\r
+ FLDA OLDLOC\r
+ ATX 6\r
+ FLDA ATLOC-3,6\r
+ JNE #40020\r
+ FLDA OLDLC2\r
+ ATX 5\r
+ FLDA ATLOC-3,5\r
+ JNE #40020\r
+ FLDA HOLDNG\r
+ FSUB ONE\r
+ JGT #40010\r
+/ GOTO 40020\r
+ JA #40020\r
+\r
+/C\r
+/40800 IF(PROP(EMRALD).NE.-1.AND.PROP(PYRAM).EQ.-1)GOTO 40010\r
+/ GOTO 40020\r
+#40800, FLDA EMRALD\r
+ ATX 7\r
+ FLDA MINUS1\r
+ FSUB PROP-3,7\r
+ JEQ #40020\r
+ FLDA PYRAM\r
+ ATX 6\r
+ FLDA MINUS1\r
+ FSUB PROP-3,6\r
+ JEQ #40010\r
+/ GOTO 40020\r
+ JA #40020\r
+/C\r
+/40900 JA #40010\r
+/#40900 JA 40010\r
+\r
+/C CAVE CLOSING AND SCORING\r
+/C\r
+/C\r
+/C THESE SECTIONS HANDLE THE CLOSING OF THE CAVE. THE CAVE CLOSES "CLOCK1"\r
+/C TURNS AFTER THE LAST TREASURE HAS BEEN LOCATED (INCLUDING THE PIRATE'S\r
+/C CHEST, WHICH MAY OF COURSE NEVER SHOW UP). NOTE THAT THE TREASURES NEED NOT\r
+/C HAVE BEEN TAKEN YET, JUST LOCATED. HENCE CLOCK1 MUST BE LARGE ENOUGH TO GET\r
+/C OUT OF THE CAVE (IT ONLY TICKS WHILE INSIDE THE CAVE). WHEN IT HITS ZERO,\r
+/C WE BRANCH TO 10000 TO START CLOSING THE CAVE, AND THEN SIT BACK AND WAIT FOR\r
+/C HIM TO TRY TO GET OUT. IF HE DOESN'T WITHIN CLOCK2 TURNS, WE CLOSE THE\r
+/C CAVE; IF HE DOES TRY, WE ASSUME HE PANICS, AND GIVE HIM A FEW ADDITIONAL\r
+/C TURNS TO GET FRANTIC BEFORE WE CLOSE. WHEN CLOCK2 HITS ZERO, WE BRANCH TO\r
+/C 11000 TO TRANSPORT HIM INTO THE FINAL PUZZLE. NOTE THAT THE PUZZLE DEPENDS\r
+/C UPON ALL SORTS OF RANDOM THINGS. FOR INSTANCE, THERE MUST BE NO WATER OR\r
+/C OIL, SINCE THERE ARE BEANSTALKS WHICH WE DON'T WANT TO BE ABLE TO WATER,\r
+/C SINCE THE CODE CAN'T HANDLE IT. ALSO, WE CAN HAVE NO KEYS, SINCE THERE IS A\r
+/C GRATE (HAVING MOVED THE FIXED OBJECT!) THERE SEPARATING HIM FROM ALL THE\r
+/C TREASURES. MOST OF THESE PROBLEMS ARISE FROM THE USE OF NEGATIVE PROP\r
+/C NUMBERS TO SUPPRESS THE OBJECT DESCRIPTIONS UNTIL HE'S ACTUALLY MOVED THE\r
+/C OBJECTS.\r
+/C\r
+/C WHEN THE FIRST WARNING COMES, WE LOCK THE GRATE, DESTROY THE BRIDGE, KILL\r
+/C ALL THE DWARVES (AND THE PIRATE), REMOVE THE TROLL AND BEAR (UNLESS DEAD),\r
+/C AND SET "CLOSNG" TO TRUE. LEAVE THE DRAGON; TOO MUCH TROUBLE TO MOVE IT.\r
+/C FROM NOW UNTIL CLOCK2 RUNS OUT, HE CANNOT UNLOCK THE GRATE, MOVE TO ANY\r
+/C LOCATION OUTSIDE THE CAVE (LOC<9), OR CREATE THE BRIDGE. NOR CAN HE BE\r
+/C RESURRECTED IF HE DIES. NOTE THAT THE SNAKE IS ALREADY GONE, SINCE HE GOT\r
+/C TO THE TREASURE ACCESSIBLE ONLY VIA THE HALL OF THE MT. KING. ALSO, HE'S\r
+/C BEEN IN GIANT ROOM (TO GET EGGS), SO WE CAN REFER TO IT. ALSO ALSO, HE'S\r
+/C GOTTEN THE PEARL, SO WE KNOW THE BIVALVE IS AN OYSTER. *AND*, THE DWARVES\r
+/C MUST HAVE BEEN ACTIVATED, SINCE WE'VE FOUND CHEST.\r
+/C\r
+/10000 PROP(GRATE)=0\r
+#10000, FLDA GRATE\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ PROP(FISSUR)=0\r
+ FLDA FISSUR\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ DO 10010 I=1,6\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/ DSEEN(I)=.FALSE.\r
+#H0204, FLDA I\r
+ ATX 7\r
+ FCLA\r
+ FSTA DSEEN-3,7\r
+/10010 DLOC(I)=0\r
+/#10010, FLDA I\r
+/ ATX 7\r
+/ FCLA\r
+ FSTA DLOC-3,7\r
+ FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+6\r
+ JLE #H0204\r
+/ CALL MOVE(TROLL,0)\r
+ JSR MOVE\r
+ JA .+6\r
+ JA TROLL\r
+ JA ZERO\r
+/ CALL MOVE(TROLL+100,0)\r
+ FLDA TROLL\r
+ FADD #LIT+154\r
+ FSTA #TMP\r
+ JSR MOVE\r
+ JA .+6\r
+ JA #TMP\r
+ JA ZERO\r
+/ CALL MOVE(TROLL2,PLAC(TROLL))\r
+ FLDA TROLL\r
+ ATX 7\r
+ XTA 7\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PPLAC\r
+ FSTA .+11\r
+ STARTF\r
+ JSR MOVE\r
+ JA .+6\r
+ JA TROLL2\r
+ JA .\r
+/ CALL MOVE(TROLL2+100,FIXD(TROLL))\r
+ FLDA TROLL2\r
+ FADD #LIT+154\r
+ FSTA #TMP\r
+ FLDA TROLL\r
+ ATX 7\r
+ XTA 7\r
+ FMUL THREE\r
+ ALN 0\r
+ STARTD\r
+ FADD PFIXD\r
+ FSTA .+11\r
+ STARTF\r
+ JSR MOVE\r
+ JA .+6\r
+ JA #TMP\r
+ JA .\r
+/ CALL JUGGLE(CHASM)\r
+ JSR JUGGLE\r
+ JA .+4\r
+ JA CHASM\r
+/ IF(PROP(BEAR).NE.3)CALL DSTROY(BEAR)\r
+ FLDA BEAR\r
+ ATX 7\r
+ FLDA PROP-3,7\r
+ FSUB THREE\r
+ JEQ .+10\r
+ JSR DSTROY\r
+ JA .+4\r
+ JA BEAR\r
+/ PROP(CHAIN)=0\r
+ FLDA CHAIN\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ FIXED(CHAIN)=0\r
+/ PROP(AXE)=0\r
+ FLDA AXE\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ FIXED(AXE)=0\r
+ FSTA FIXED-3,7\r
+/ CALL RSPEAK(129)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+204\r
+/ CLOCK1=-1\r
+ FLDA MINUS1\r
+ FSTA CLOCK1\r
+/ CLOSNG=.TRUE.\r
+ FLDA ONE\r
+ FSTA CLOSNG\r
+/ GOTO 19999\r
+ JA #19999\r
+\r
+/C\r
+/C ONCE HE'S PANICKED, AND CLOCK2 HAS RUN OUT, WE COME HERE TO SET UP THE\r
+/C STORAGE ROOM. THE ROOM HAS TWO LOCS, HARDWIRED AS 115 (NE) AND 116 (SW).\r
+/C AT THE NE END, WE PLACE EMPTY BOTTLES, A NURSERY OF PLANTS, A BED OF\r
+/C OYSTERS, A PILE OF LAMPS, RODS WITH STARS, SLEEPING DWARVES, AND HIM. AND\r
+/C THE SW END WE PLACE GRATE OVER TREASURES, SNAKE PIT, COVEY OF CAGED BIRDS,\r
+/C MORE RODS, AND PILLOWS. A MIRROR STRETCHES ACROSS ONE WALL. MANY OF THE\r
+/C OBJECTS COME FROM KNOWN LOCATIONS AND/OR STATES (E.G. THE SNAKE IS KNOWN TO\r
+/C HAVE BEEN DESTROYED AND NEEDN'T BE CARRIED AWAY FROM ITS OLD "PLACE"),\r
+/C MAKING THE VARIOUS OBJECTS BE HANDLED DIFFERENTLY. WE ALSO DROP ALL OTHER\r
+/C OBJECTS HE MIGHT BE CARRYING (LEST HE HAVE SOME WHICH COULD CAUSE TROUBLE,\r
+/C SUCH AS THE KEYS). WE DESCRIBE THE FLASH OF LIGHT AND TRUNDLE BACK.\r
+/C\r
+/11000 PROP(BOTTLE)=PUT(BOTTLE,115,1)\r
+#11000, FLDA BOTTLE\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA BOTTLE\r
+ JA #LIT+165\r
+ JA ONE\r
+ FSTA PROP-3,7\r
+/ PROP(PLANT)=PUT(PLANT,115,0)\r
+ FLDA PLANT\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA PLANT\r
+ JA #LIT+165\r
+ JA ZERO\r
+ FSTA PROP-3,7\r
+/ PROP(OYSTER)=PUT(OYSTER,115,0)\r
+ FLDA OYSTER\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA OYSTER\r
+ JA #LIT+165\r
+ JA ZERO\r
+ FSTA PROP-3,7\r
+/ PROP(LAMP)=PUT(LAMP,115,0)\r
+ FLDA LAMP\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA LAMP\r
+ JA #LIT+165\r
+ JA ZERO\r
+ FSTA PROP-3,7\r
+/ PROP(ROD)=PUT(ROD,115,0)\r
+ FLDA ROD\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA ROD\r
+ JA #LIT+165\r
+ JA ZERO\r
+ FSTA PROP-3,7\r
+/ PROP(DWARF)=PUT(DWARF,115,0)\r
+ FLDA DWARF\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA DWARF\r
+ JA #LIT+165\r
+ JA ZERO\r
+ FSTA PROP-3,7\r
+/ LOC=115\r
+/ OLDLOC=115\r
+/ NEWLOC=115\r
+ FLDA #LIT+165\r
+ FSTA LOC\r
+ FSTA OLDLOC\r
+ FSTA NEWLOC\r
+/C\r
+/C LEAVE THE GRATE WITH NORMAL (NON-NEGATIVE PROPERTY).\r
+/C\r
+/ I=PUT(GRATE,116,0)\r
+ JSR PUT\r
+ JA .+10\r
+ JA GRATE\r
+ JA #LIT+170\r
+ JA ZERO\r
+ FSTA I\r
+/ PROP(SNAKE)=PUT(SNAKE,116,1)\r
+ FLDA SNAKE\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA SNAKE\r
+ JA #LIT+170\r
+ JA ONE\r
+ FSTA PROP-3,7\r
+/ PROP(BIRD)=PUT(BIRD,116,1)\r
+ FLDA BIRD\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA BIRD\r
+ JA #LIT+170\r
+ JA ONE\r
+ FSTA PROP-3,7\r
+/ PROP(CAGE)=PUT(CAGE,116,0)\r
+ FLDA CAGE\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA CAGE\r
+ JA #LIT+170\r
+ JA ZERO\r
+ FSTA PROP-3,7\r
+/ PROP(ROD2)=PUT(ROD2,116,0)\r
+ FLDA ROD2\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA ROD2\r
+ JA #LIT+170\r
+ JA MINUS1\r
+ FSTA PROP-3,7\r
+/ PROP(PILLOW)=PUT(PILLOW,116,0)\r
+ FLDA PILLOW\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA PILLOW\r
+ JA #LIT+170\r
+ JA ZERO\r
+ FSTA PROP-3,7\r
+/C\r
+/ PROP(MIRROR)=PUT(MIRROR,115,0)\r
+ FLDA MIRROR\r
+ ATX 7\r
+ JSR PUT\r
+ JA .+10\r
+ JA MIRROR\r
+ JA #LIT+165\r
+ JA ZERO\r
+ FSTA PROP-3,7\r
+/ FIXED(MIRROR)=116\r
+ FLDA #LIT+170\r
+ FSTA FIXED-3,7\r
+/C\r
+/ DO 11010 I=1,100\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/11010 IF(TOTING(I))CALL DSTROY(I)\r
+#11010, FLDA I\r
+ JSA TOTING\r
+ JEQ .+10\r
+ JSR DSTROY\r
+ JA .+4\r
+ JA I\r
+ FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB #LIT+154\r
+ JLE #11010\r
+/C\r
+/ CALL RSPEAK(132)\r
+ JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+215\r
+/ CLOSED=.TRUE.\r
+ FLDA ONE\r
+ FSTA CLOSED\r
+/ GOTO 2\r
+ JA #2\r
+\r
+/C\r
+/C ANOTHER WAY WE CAN FORCE AN END TO THINGS IS BY HAVING THE LAMP GIVE OUT.\r
+/C WHEN IT GETS CLOSE, WE COME HERE TO WARN HIM. WE GO TO 12000 IF THE LAMP\r
+/C AND FRESH BATTERIES ARE HERE, IN WHICH CASE WE REPLACE THE BATTERIES AND\r
+/C CONTINUE. 12200 IS FOR OTHER CASES OF LAMP DYING.12400 IS WHEN IT GOES\r
+/C OUT, AND 12600 IS IF HE'S WANDERED OUTSIDE AND THE LAMP IS USED UP, IN WHICH\r
+/C CASE WE FORCE HIM TO GIVE UP.\r
+/C\r
+/12000 CALL RSPEAK(188)\r
+#12000, JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+264\r
+/ PROP(BATTER)=1\r
+ FLDA BATTER\r
+ ATX 7\r
+ FLDA ONE\r
+ FSTA PROP-3,7\r
+/ IF(TOTING(BATTER))CALL DROP(BATTER,LOC)\r
+ FLDA BATTER\r
+ JSA TOTING\r
+ JEQ .+12\r
+ JSR DROP\r
+ JA .+6\r
+ JA BATTER\r
+ JA LOC\r
+/ LIMIT=LIMIT+2500\r
+ FLDA #LIT+317\r
+ FADDM LIMIT\r
+/ LMWARN=.FALSE.\r
+ FCLA\r
+ FSTA LMWARN\r
+/ GOTO 19999\r
+ JA #19999\r
+\r
+/C\r
+/12200 IF(LMWARN.OR..NOT.HERE(LAMP))GOTO 19999\r
+#12200, FLDA LAMP\r
+ JSA HERE\r
+ JEQ #19999\r
+ FLDA LMWARN\r
+ JNE #19999\r
+/ LMWARN=.TRUE.\r
+ FLDA ONE\r
+ FSTA LMWARN\r
+/ SPK=187\r
+ LDX 273,0 /187\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(PLACE(BATTER).EQ.0)SPK=183\r
+ FLDA BATTER\r
+ ATX 7\r
+ FLDA PLACE-3,7\r
+ JNE .+6\r
+ LDX 267,0 /183\r
+ XTA 0\r
+ FSTA SPK\r
+/ IF(PROP(BATTER).EQ.1)SPK=189\r
+ FLDA PROP-3,7\r
+ FSUB ONE\r
+ JNE .+6\r
+ LDX 275,0 /189\r
+ XTA 0\r
+ FSTA SPK\r
+/ CALL RSPEAK(SPK)\r
+#H0214, JSR RSPEAK\r
+ JA #19999\r
+ JA SPK\r
+/ GOTO 19999\r
+\r
+/C\r
+/12400 LIMIT=-1\r
+#12400, FLDA MINUS1\r
+ FSTA LIMIT\r
+/ PROP(LAMP)=0\r
+ FLDA LAMP\r
+ ATX 7\r
+ FCLA\r
+ FSTA PROP-3,7\r
+/ IF(HERE(LAMP))CALL RSPEAK(184)\r
+ FLDA LAMP\r
+ JSA HERE\r
+/ GOTO 19999\r
+ JEQ #19999\r
+ JSR RSPEAK\r
+ JA #19999\r
+ JA #LIT+253\r
+\r
+/C\r
+/12600 CALL RSPEAK(185)\r
+#12600, JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+256\r
+/ GAVEUP=.TRUE.\r
+ FLDA ONE\r
+ FSTA GAVEUP\r
+/ GOTO 20000\r
+ JA #20000\r
+\r
+/C\r
+/C\r
+/C OH DEAR, HE'S DISTURBED THE DWARVES.\r
+/C\r
+/19000 CALL RSPEAK(136)\r
+#19000, JSR RSPEAK\r
+ JA .+4\r
+ JA #LIT+220\r
+\r
+/C\r
+/C EXIT CODE. WILL EVENTUALLY INCLUDE SCORING. FOR NOW, HOWEVER, ...\r
+/C\r
+/C THE PRESENT SCORING ALGORITHM IS AS FOLLOWS:\r
+/C OBJECTIVE: POINTS: PRESENT TOTAL POSSIBLE:\r
+/C GETTING WELL INTO CAVE 25 25\r
+/C EACH TREASURE < CHEST 12 60\r
+/C TREASURE CHEST ITSELF 14 14\r
+/C EACH TREASURE > CHEST 16 144\r
+/C SURVIVING (MAX-NUM)*10 30\r
+/C NOT QUITTING 4 4\r
+/C REACHING "CLOSNG" 25 25\r
+/C "CLOSED": QUIT/KILLED 10\r
+/C KLUTZED 25\r
+/C WRONG WAY 30\r
+/C SUCCESS 45 45\r
+/C CAME TO WITT'S END 1 1\r
+/C ROUND OUT THE TOTAL 2 2\r
+/C TOTAL: 350\r
+/20000 SCORE=0\r
+#20000, FCLA\r
+ FSTA SCORE\r
+/ MXSCOR=0\r
+ FSTA MXSCOR\r
+/C\r
+/C FIRST TALLY UP THE TREASURES. MUST BE IN BUILDING AND NOT BROKEN.\r
+/C GIVE THE POOR GUY 2 POINTS JUST FOR FINDING EACH TREASURE.\r
+/C\r
+/ DO 20010 I=50,MAXTRS\r
+ FLDA #LIT+110\r
+ FSTA I\r
+\r
+/ IF(PTEXT(I).EQ.0)GOTO 20010\r
+#H0216, FLDA I\r
+ ATX 7\r
+ FLDA PTEXT-3,7\r
+ JEQ #20010\r
+/ K=12\r
+ FLDA #LIT+22\r
+ FSTA K\r
+/ IF(I.EQ.CHEST)K=14\r
+ FLDA I\r
+ FSUB CHEST\r
+ JNE .+7\r
+ LDX 16,0 /14\r
+ XTA 0\r
+ FSTA K\r
+/ IF(I.GT.CHEST)K=16\r
+ FLDA I\r
+ FSUB CHEST\r
+ JLE .+5\r
+ FLDA #LIT+30\r
+ FSTA K\r
+/ IF(PROP(I).GE.0)SCORE=SCORE+2\r
+ FLDA PROP-3,7\r
+ JLT .+5\r
+ FLDA TWO\r
+ FADDM SCORE\r
+/ IF(PLACE(I).EQ.3.AND.PROP(I).EQ.0)SCORE=SCORE+K-2\r
+ FLDA PLACE-3,7\r
+ FSUB THREE\r
+ JNE #M100\r
+ FLDA PROP-3,7\r
+ JNE #M100\r
+ FLDA SCORE\r
+ FADD K\r
+ FSUB TWO\r
+ FSTA SCORE\r
+/ MXSCOR=MXSCOR+K\r
+#M100, FLDA K\r
+ FADDM MXSCOR\r
+\r
+/20010 CONTINUE\r
+#20010, FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB MAXTRS\r
+ JLE #H0216\r
+/C\r
+/C NOW LOOK AT HOW HE FINISHED AND HOW FAR HE GOT. MAXDIE AND NUMDIE TELL US\r
+/C HOW WELL HE SURVIVED. GAVEUP SAYS WHETHER HE EXITED VIA QUIT. DFLAG WILL\r
+/C TELL US IF HE EVER GOT SUITABLY DEEP INTO THE CAVE. CLOSNG STILL INDICATES\r
+/C WHETHER HE REACHED THE ENDGAME. AND IF HE GOT AS FAR AS "CAVE CLOSED"\r
+/C (INDICATED BY "CLOSED"), THEN BONUS IS ZERO FOR MUNDANE EXITS OR 133, 134,\r
+/C 135 IF HE BLEW IT (SO TO SPEAK).\r
+/C\r
+/ SCORE=SCORE+(MAXDIE-NUMDIE)*10\r
+ FLDA MAXDIE\r
+ FSUB NUMDIE\r
+ FMUL #LIT+17\r
+ FADDM SCORE\r
+/ MXSCOR=MXSCOR+MAXDIE*10\r
+ FLDA MAXDIE\r
+ FMUL #LIT+17\r
+ FADDM MXSCOR\r
+/ IF(.NOT.(SCORNG.OR.GAVEUP))SCORE=SCORE+4\r
+ FLDA SCORNG\r
+ FADD GAVEUP\r
+ JNE .+5\r
+ FLDA #LIT\r
+ FADDM SCORE\r
+/ MXSCOR=MXSCOR+4\r
+ FLDA #LIT\r
+ FADDM MXSCOR\r
+\f\r
+/ IF(DFLAG.NE.0)SCORE=SCORE+25\r
+ FLDA DFLAG\r
+ JEQ .+5\r
+ FLDA #LIT+52\r
+ FADDM SCORE\r
+/ MXSCOR=MXSCOR+25\r
+ FLDA #LIT+52\r
+ FADDM MXSCOR\r
+/ IF(CLOSNG)SCORE=SCORE+25\r
+ FLDA CLOSNG\r
+ JEQ .+5\r
+ FLDA #LIT+52\r
+ FADDM SCORE\r
+/ MXSCOR=MXSCOR+25\r
+ FLDA #LIT+52\r
+ FADDM MXSCOR\r
+/ IF(.NOT.CLOSED)GOTO 20020\r
+ FLDA CLOSED\r
+ JEQ #20020\r
+/ IF(BONUS.EQ.0)SCORE=SCORE+10\r
+ FLDA BONUS\r
+ JNE .+5\r
+ FLDA #LIT+17\r
+ FADDM SCORE\r
+/ IF(BONUS.EQ.135)SCORE=SCORE+25\r
+ LDX 207,0 /135\r
+ XTA 0\r
+ FSUB BONUS\r
+ JNE .+5\r
+ FLDA #LIT+52\r
+ FADDM SCORE\r
+/ IF(BONUS.EQ.134)SCORE=SCORE+30\r
+ LDX 206,0 /134\r
+ XTA 0\r
+ FSUB BONUS \r
+ JNE .+5\r
+ FLDA #LIT+63\r
+ FADDM SCORE\r
+/ IF(BONUS.EQ.133)SCORE=SCORE+45\r
+ LDX 205,0 /133\r
+ XTA 0\r
+ FSUB BONUS\r
+ JNE #20020\r
+ FLDA #LIT+102\r
+ FADDM SCORE\r
+/20020 MXSCOR=MXSCOR+45\r
+#20020, FLDA #LIT+102\r
+ FADDM MXSCOR\r
+/C\r
+/C DID HE COME TO WITT'S END AS HE SHOULD?\r
+/C\r
+/ IF(PLACE(MAGZIN).EQ.108)SCORE=SCORE+1\r
+ FLDA MAGZIN\r
+ ATX 7\r
+ LDX 154,0 /108\r
+ XTA 0\r
+ FSUB PLACE-3,7\r
+ JNE .+5\r
+ FLDA ONE\r
+ FADDM SCORE\r
+/ MXSCOR=MXSCOR+1\r
+ FLDA ONE\r
+ FADDM MXSCOR\r
+/C\r
+/C ROUND IT OFF.\r
+/C\r
+/ SCORE=SCORE+2\r
+ FLDA TWO\r
+ FADDM SCORE\r
+/ MXSCOR=MXSCOR+2\r
+ FADDM MXSCOR\r
+/C\r
+/C DEDUCT POINTS FOR HINTS. HINTS < 4 ARE SPECIAL; SEE DATABASE DESCRIPTION.\r
+/C\r
+/ DO 20030 I=1,HNTMAX\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/20030 IF(HINTED(I))SCORE=SCORE-HINTS(I,2)\r
+#20030, FLDA I\r
+ ATX 7\r
+ FLDA HINTED-3,7\r
+ JEQ .+15\r
+ FLDA TWO\r
+ FMUL #LIT+36\r
+ FADD I\r
+ ATX 6\r
+ FLDA SCORE\r
+ FSUB HINTS-0077,6\r
+ FSTA SCORE\r
+\r
+ FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB HNTMAX\r
+ JLE #20030\r
+/C\r
+/C RETURN TO SCORE COMMAND IF THAT'S WHERE WE CAME FROM.\r
+/C\r
+/ IF(SCORNG)GOTO 8241\r
+ FLDA SCORNG\r
+ JNE #8241\r
+/C\r
+/C THAT SHOULD BE GOOD ENOUGH. LET'S TELL HIM ALL ABOUT IT.\r
+/C\r
+/ TYPE 20100,SCORE,MXSCOR,TURNS\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #20100\r
+ JA ZERO\r
+ JA TWO\r
+\r
+ TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #2010A\r
+ FLDA SCORE\r
+ TRAP3 #RSVO\r
+ TRAP3 #RENDO\r
+\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #2010B\r
+ JA ZERO\r
+ JA THREE\r
+\r
+ TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #2010A\r
+ FLDA MXSCOR\r
+ TRAP3 #RSVO\r
+ TRAP3 #RENDO\r
+\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #2010C\r
+ JA ZERO\r
+ JA THREE\r
+\r
+ TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #2010D\r
+\r
+ FLDA TURNS\r
+ TRAP3 #RSVO\r
+ TRAP3 #RENDO\r
+\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #2010E\r
+ JA ZERO\r
+ JA ONE\r
+\r
+/20100 FORMAT(/' You scored',I4,' out of a possible',I4,\r
+/ 1 ', using',I5,' turns.')\r
+/C\r
+/ DO 20200 I=1,CLSSES\r
+ FLDA ONE\r
+ FSTA I\r
+\r
+/ IF(CVAL(I).GE.SCORE)GOTO 20210\r
+#I0064, FLDA I\r
+ ATX 7\r
+ FLDA CVAL-3,7\r
+ FSUB SCORE\r
+ JGE #20210\r
+\r
+/20200 CONTINUE\r
+#20200, FLDA I\r
+ FADD ONE\r
+ FSTA I\r
+ FSUB CLSSES\r
+ JLE #I0064\r
+/ TYPE 20202\r
+ JSR SIXOUT\r
+ JA #25000\r
+ JA #20202\r
+ JA ZERO\r
+ JA ZERO\r
+\r
+/20202 FORMAT(' You just went off my scale!!'/)\r
+/ GOTO 25000\r
+\r
+/C\r
+/20210 CALL SPEAK(CTEXT(I))\r
+#20210, FLDA I\r
+ ATX 7\r
+ FLDA CTEXT-3,7 /GET CLASS MESSAGE\r
+ FSTA #TMP+3\r
+ JSR SPEAK\r
+ JA .+4\r
+ JA #TMP+3\r
+/ IF(I.EQ.CLSSES-1)GOTO 20220\r
+ FLDA CLSSES\r
+ FSUB ONE\r
+ FSUB I\r
+ JEQ #20220\r
+/ K=CVAL(I)+1-SCORE\r
+ FLDA I\r
+ ATX 7\r
+ FLDA CVAL-3,7\r
+ FADD ONE\r
+ FSUB SCORE\r
+ FSTA K\r
+/ TYPE 20212,K\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #20212\r
+ JA ZERO\r
+ JA TWO\r
+\r
+ TRAP3 #WRITO\r
+ JA #LIT\r
+ JA #2021A\r
+ FLDA K\r
+ TRAP3 #RSVO\r
+ TRAP3 #RENDO\r
+\r
+ JSR SIXOUT\r
+ JA .+10\r
+ JA #2021B\r
+ JA ZERO\r
+ JA THREE\r
+ \r
+/20212 FORMAT(' To achieve the next higher rating, you need',I3,\r
+/ 1 ' more point',$)\r
+/ IF(K.EQ.1) TYPE 20213\r
+ FLDA K\r
+ FSUB ONE\r
+ JNE .+14\r
+ JSR SIXOUT\r
+ JA #25000\r
+ JA #20213\r
+ JA ZERO\r
+ JA ONE\r
+\r
+/ IF(K.NE.1) TYPE 20214\r
+ JSR SIXOUT\r
+ JA #25000\r
+ JA #20214\r
+ JA ZERO\r
+ JA ONE\r
+/20213 FORMAT('+.'/)\r
+\r
+/20214 FORMAT('+s.'/)\r
+/ GOTO 25000\r
+\r
+/C\r
+/20220 TYPE 20222\r
+#20220, JSR SIXOUT\r
+ JA .+10\r
+ JA #20222\r
+ JA ZERO\r
+ JA ZERO\r
+ JSR SIXOUT\r
+ JA #GOBAK\r
+ JA #20223\r
+ JA ZERO\r
+ JA ZERO\r
+\r
+/20222 FORMAT(' To achieve the next higher rating ',\r
+/ 1 'would be a neat trick!'/' Congratulations!!'/)\r
+/ RETURN\r
+/ END\r
+/\r
+/ Fortran Formats:\r
+/\r
+#67A, TEXT %T]HERE ARE @%\r
+#67, TEXT %('+',I1,$)%\r
+#67B, TEXT % T]HREATENING LITTLE DWARVES IN THE ROOM WITH YOU.@%\r
+#68,\r
+#78, TEXT %(1X,I1,$)%\r
+#78B, TEXT % ]OF THEM THROW KNIVES AT YOU!@%\r
+#68B, TEXT % ]OF THEM GET YOU!@%\r
+#5015, TEXT %W]HAT DO YOU WANT TO DO WITH THE @%\r
+#5199, TEXT %I] DON'T SEE ANY "@%\r
+#8002, TEXT %I ]DON'T UNDERSTAND "@%\r
+#9032, TEXT %O]KAY, "@%\r
+#8243, TEXT %I]F YOU WERE TO QUIT NOW, YOU WOULD SCORE @%\r
+#2010A,\r
+#8243A, TEXT %('+',I4,$)%\r
+#8243B, TEXT % ]OUT OF A POSSIBLE @%\r
+#20213, \r
+#8243C, TEXT %.@%\r
+#40012, TEXT %I] AM PREPARED TO GIVE YOU A HINT, BUT IT WILL COST YOU @%\r
+#4001A, TEXT %('+',I2,$)%\r
+#4001B, TEXT % ]POINTS.@%\r
+#20100, TEXT %Y]OU SCORED @%\r
+#2010B, TEXT % ]OUT OF A POSSIBLE @%\r
+#2010C, TEXT % ]USING @%\r
+#2010D, TEXT %('+',I5,$)%\r
+#2010E, TEXT % ]TURNS.@%\r
+#20202, TEXT %Y]OU JUST WENT OFF MY SCALE!!@%\r
+#20212, TEXT %T]O ACHIEVE THE NEXT HIGHER RATING, YOU NEED @%\r
+#2021A, TEXT %('+',I3,$)%\r
+#2021B, TEXT % ]MORE POINT@%\r
+#20214, TEXT %]S.@%\r
+#20222, TEXT %T]O ACHIEVE THE NEXT HIGHER RATING WOULD BE A NEAT TRICK!@%\r
+#20223, TEXT %C]ONGRATULATIONS!!@%\r
+ END\r