+++ /dev/null
- 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
-ZERO, F 0\r
-ONE, F 1\r
-TWO, F 2\r
-THREE, F 3\r
-MINUS1, F -1\r
-IND, 0;0;0\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
-#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 29 /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
- F 80 /325\r
- F 60 /330\r
- F 154 /333\r
-TENTE, TEXT +ENTE +\r
-TPOUR, TEXT +POUR +\r
-TWEST, TEXT +WEST +\r
-TQUES, TEXT +?@ +\r
-TQDOT, TEXT +".@ +\r
-TYES, TEXT +YES +\r
-TYE, TEXT +YE +\r
-TY, TEXT +Y +\r
-\f #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 PROP-3,3\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
-/\r
-/ Read the property field - object passed in FAC\r
-/\r
-RDPROP, 0;0\r
- ATX 7\r
- FLDA PROP-3,7\r
- JA RDPROP\r
-/\r
-/ Print a string\r
-/\r
-SPRINT, 0;0\r
- LDX 0,1\r
- STARTD\r
- FLDA SPRINT\r
- FSTA IND /Indirect pointer\r
- FLDA% IND,1\r
- FSTA PTR\r
- FLDA% IND,1+\r
- FSTA CNT\r
- FLDA D4 /Add four to skip arguments\r
- FADDM SPRINT\r
- STARTD\r
- JSR SIXOUT\r
- JA SPRINT\r
-PTR, 0;0\r
- JA ZERO\r
-CNT, 0;0\r
-D4, 0;4\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
- JSR YES\r
- JA .+10\r
- JA #LIT+127\r
- JA ONE\r
- JA ZERO\r
- FSTA HINTED+6 /HINTED(3)\r
-/ NEWLOC=1\r
- FLDA ONE\r
- FSTA NEWLOC\r
-/ LOC = NEWLOC\r
- FSTA LOC\r
-/ LIMIT=330\r
- DECIMAL\r
- LDX 330,0\r
- OCTAL\r
- XTA 0\r
- FSTA LIMIT\r
-/ IF(HINTED(3))LIMIT=1000\r
- FLDA HINTED+6 /HINTED(3)\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
-/ FLDA LOC\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
- JSA RDPROP\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 .+24\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 PROP-3,3\r
- FSUB ONE\r
- JEQ #6025\r
-/ IF(ODLOC(6).NE.DLOC(6).AND.PCT(20))CALL RSPEAK(127)\r
-#M4, FLDA ODLOC+17 /ODLOC(6)\r
- FSUB DLOC+17 /DLOC(6)\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 .+24\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 .+16\r
-/ FLDA J\r
-/ ATX 3\r
- FLDA FIXED-3,3\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 SPRINT\r
- JA #67A\r
- JA TWO\r
-\r
- TRAP3 #WRITO\r
- JA #LIT\r
- JA #67\r
- FLDA DTOTAL\r
- TRAP3 #RSVO\r
- TRAP3 #RENDO\r
-\r
- JSA SPRINT\r
-\r JA #67B\r
- JA ONE\r
-/ GOTO 77\r
- JA #77\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
- JSA SPRINT\r
- JA #78B\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
- JSA SPRINT\r
- JA #68B\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
- DECIMAL\r
- LDX 52,0\r
- OCTAL\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 NOMOD\r
-/ FLDA LOC\r
-/ ATX 7\r
- FLDA ABB-3,7\r
- FSTA #TMP\r
- JSR MOD\r
- JA .+6\r
- JA #TMP\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
- DECIMAL\r
- LDX 33,0\r
- OCTAL\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 4\r
- FLDA ONE\r
- FADDM 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
- JSA RDPROP\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
- JSA RDPROP\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 .+5\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 / 20\r
- FADD HINT / HINT,1\r
- ATX 6\r
- FLDA HINTLC-3,7\r
- FSUB HINTS-77,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
- JSA TOTING\r
- JEQ .+16\r
- FLDA PROP-3,3\r
- JGE .+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
- JSA TOTING\r
- JEQ .+13\r
- FLDA PROP-3,3\r
- JGE .+7\r
- FLDA MINUS1\r
- FSUB PROP-3,3\r
- FSTA PROP-3,3\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
- DECIMAL\r
- LDX 33,0\r
- OCTAL\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
- JSA RDPROP\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 .+22\r
- FLDA BATTER\r
- JSA HERE\r
- JEQ .+14\r
- FLDA PROP-3,3\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
- DECIMAL\r
-#19999, LDX 43,0\r
- OCTAL\r
- XTA 0\r
- FSTA K\r
-/ IF(LIQLOC(LOC).EQ.WATER)K=70\r
- JSA LIQLOC\r
- FSUB WATER\r
- JNE .+7\r
- DECIMAL\r
- LDX 70,0\r
- OCTAL\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, FLDA #LIT+330\r
- FSTA SPK\r
-/ IF(PCT(20))SPK=61\r
- JSR PCT\r
- JA .+4\r
- JA #LIT+36\r
- JEQ .+6\r
- DECIMAL\r
- LDX 61,0\r
- OCTAL\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
- DECIMAL\r
- LDX 13,0\r
- OCTAL\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
- JSA SPRINT\r
- JA #5015\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 3\r
- FLDA PROP-3,3\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
- JSA SPRINT\r
- JA #5199\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
- DECIMAL\r
- LDX 200,0\r
- OCTAL\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
- JSA RDPROP\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
- FLDA PLAC-3,7\r
- FSTA #TMP\r
- JSR MOVE\r
- JA .+6\r
- JA TROLL\r
- JA #TMP\r
-/ CALL MOVE(TROLL+100,FIXD(TROLL))\r
- FLDA TROLL\r
- ATX 7\r
- FADD #LIT+154\r
- FSTA #TMP\r
- FLDA FIXD-3,7\r
- FSTA #TMP+3\r
- JSR MOVE\r
- JA .+6\r
- JA #TMP\r
- JA #TMP+3\r
-/ CALL JUGGLE(CHASM)\r
- FLDA CHASM\r
- JSA JUGGLE\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
- FSTA PROP-3,7\r
-/ PROP(TROLL)=2\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
- JSA RDPROP\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
- DECIMAL\r
- LDX 43,0\r
- OCTAL\r
- XTA 0\r
- FSUB K\r
- JGT .+7\r
- FLDA K\r
- FSUB #LIT+110\r
- JLE #M31\r
-/ IF(K.EQ.29.OR.K.EQ.30)SPK=9\r
- FLDA #LIT+135\r
- FSUB K\r
- JEQ #M31\r
- FADD ONE\r
- JNE .+6\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
- DECIMAL\r
- LDX 36,0\r
- OCTAL\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, DECIMAL\r
- LDX 11,0\r
- OCTAL\r
- XTA 0\r
- FSUB K\r
- JEQ #M36\r
- DECIMAL\r
- LDX 19,0\r
- OCTAL\r
- XTA 0\r
- FSUB K\r
- JNE #M32\r
-#M36, DECIMAL\r
- LDX 11,0\r
- OCTAL\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, DECIMAL\r
- LDX 59,0\r
- OCTAL\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, DECIMAL\r
- LDX 42,0\r
- OCTAL\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
- FLDA #LIT+325\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
- 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 .+5\r
- FCLA\r
- FSTA PROP-3,3\r
-/ DO 98 J=1,100\r
- FLDA ONE\r
- FSTA J\r
-\r
-/ I=101-J\r
-#G0150, DECIMAL\r
- LDX 101,0\r
- OCTAL\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, JSA SPRINT\r
- JA #8002\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 .+12\r
- FLDA PLANT\r
- JSA RDPROP\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 .+15\r
- FLDA BEAR\r
- JSA RDPROP\r
- FSUB ONE\r
- JNE .+6\r
- DECIMAL\r
- LDX 169,0\r
- OCTAL\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 .+14\r
- FLDA BEAR\r
- JSA RDPROP\r
- JEQ .+6\r
- DECIMAL\r
- LDX 170,0\r
- OCTAL\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 .+7\r
- FLDA PROP-3,3\r
- FSUB ONE\r
- JEQ #9220\r
-\r
-/ IF(PROP(BOTTLE).NE.1)SPK=105\r
- FLDA PROP-3,3\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
- DECIMAL\r
- LDX 104,0\r
- OCTAL\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
- JSA RDPROP\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 .+27\r
- FLDA BIRD\r
- JSA RDPROP\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, DECIMAL\r
- LDX 202,0\r
- OCTAL\r
- XTA 0\r
- FSTA K /RHM - "Taken" message\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
- FLDA SNAKE\r
- JSA DSTROY\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 .+20\r
- FLDA BIRD\r
- JSA RDPROP\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
- FLDA COINS\r
- JSA DSTROY\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 3\r
- FLDA PROP-3,3\r
- JNE #9026\r
-/ CALL RSPEAK(154)\r
- JSR RSPEAK\r
- JA .+4\r
- JA #LIT+333\r
-/ CALL DSTROY(BIRD)\r
- FLDA BIRD\r
- JSA DSTROY\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
- FLDA PLAC-3,7\r
- FSTA #TMP\r
- JSR MOVE\r
- JA .+6\r
- JA TROLL2\r
- JA #TMP\r
-/ CALL MOVE(TROLL2+100,FIXD(TROLL))\r
- FLDA TROLL2\r
- FADD #LIT+154\r
- FSTA #TMP\r
-/ FLDA TROLL\r
-/ ATX 7\r
- FLDA FIXD-3,7\r
- FSTA #TMP+3\r
- JSR MOVE\r
- JA .+6\r
- JA #TMP\r
- JA #TMP+3\r
-/ CALL JUGGLE(CHASM)\r
- FLDA CHASM\r
- JSA JUGGLE\r
-/ PROP(TROLL)=2\r
-/ FLDA TROLL\r
-/ ATX 7\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
- JSA RDPROP\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
- DECIMAL\r
- LDX 2025,0\r
- OCTAL\r
- XTA 0\r
- FSUB I\r
- JEQ #9035\r
-/ TYPE 9032\r
- JSA SPRINT\r
- JA #9032\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, DECIMAL\r
- LDX 28,0\r
- OCTAL\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
- DECIMAL\r
- LDX 111,0\r
- OCTAL\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 .+13\r
- FLDA DOOR\r
- JSA RDPROP\r
- FSUB ONE\r
- JEQ .+4\r
- FLDA #LIT+113\r
- FSTA SPK\r
-/ IF(OBJ.EQ.CAGE)SPK=32\r
- FLDA OBJ\r
- FSUB CAGE\r
- JNE .+6\r
- DECIMAL\r
- LDX 32,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(OBJ.EQ.KEYS)SPK=55\r
- FLDA OBJ\r
- FSUB KEYS\r
- JNE .+6\r
- DECIMAL\r
- LDX 55,0\r
- OCTAL\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
- DECIMAL\r
- LDX 31,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(SPK.NE.31.OR..NOT.HERE(KEYS))GOTO 2011\r
- DECIMAL\r
- LDX 31,0\r
- OCTAL\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
- DECIMAL\r
- LDX 34,0\r
- OCTAL\r
- XTA 0\r
- FADD PROP-3,7\r
- FSTA K\r
-/ IF(VERB.EQ.LOCK)PROP(GRATE)=0\r
- FLDA ONE\r
- FSTA PROP-3,7\r
- FLDA VERB\r
- FSUB LOCK\r
- JNE .+4\r
-/ FCLA / already zero\r
- FSTA PROP-3,7\r
-/ K=K+2*PROP(GRATE)\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
- DECIMAL\r
- LDX 124,0\r
- OCTAL\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
- DECIMAL\r
- LDX 120,0\r
- OCTAL\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
- DECIMAL\r
- LDX 122,0\r
- OCTAL\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
- DECIMAL\r
- LDX 61,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(SPK.NE.124)GOTO 2011\r
- DECIMAL\r
- LDX 124,0\r
- OCTAL\r
- XTA 0\r
- FSUB SPK\r
- JNE #2011\r
-/ CALL DSTROY(CLAM)\r
- FLDA CLAM\r
- JSA DSTROY\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
- DECIMAL\r
- LDX 171,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(PROP(BEAR).EQ.0)SPK=41\r
- FLDA BEAR\r
- JSA RDPROP\r
- JNE .+6\r
- DECIMAL\r
- LDX 41,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(PROP(CHAIN).EQ.0)SPK=37\r
- FLDA CHAIN\r
- JSA RDPROP\r
- JNE .+4\r
- FLDA #LIT+71\r
- FSTA SPK\r
-/ IF(SPK.NE.171)GOTO 2011\r
- DECIMAL\r
- LDX 171,0\r
- OCTAL\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
- JSA RDPROP\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, DECIMAL\r
- LDX 172,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(PROP(CHAIN).NE.0)SPK=34\r
- FLDA CHAIN\r
- JSA RDPROP\r
- JEQ .+6\r
- DECIMAL\r
- LDX 34,0\r
- OCTAL\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
- DECIMAL\r
- LDX 173,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(SPK.NE.172)GOTO 2011\r
- DECIMAL\r
- LDX 172,0\r
- OCTAL\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
- ATX 7\r
- JSA HERE\r
- JEQ #2011\r
-/ PROP(LAMP)=0\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+135\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 .+15\r
-/ FLDA DRAGON\r
-/ ATX 3\r
- FLDA PROP-3,3\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 .+15\r
- FLDA PROP-3,3\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
- DECIMAL\r
- LDX 137,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(CLOSED)GOTO 2011\r
- FLDA CLOSED\r
- JNE #2011\r
-/ CALL DSTROY(BIRD)\r
- FLDA BIRD\r
- JSA DSTROY\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
- DECIMAL\r
- LDX 44,0\r
- OCTAL\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
- DECIMAL\r
- LDX 150,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(OBJ.EQ.SNAKE)SPK=46\r
- FLDA OBJ\r
- FSUB SNAKE\r
- JNE .+6\r
- DECIMAL\r
- LDX 46,0\r
- OCTAL\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
- DECIMAL\r
- LDX 167,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(OBJ.EQ.TROLL)SPK=157\r
- FLDA OBJ\r
- FSUB TROLL\r
- JNE .+6\r
- DECIMAL\r
- LDX 157,0\r
- OCTAL\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 .+14\r
- FLDA BEAR\r
- JSA RDPROP\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
- JSA RDPROP\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
- DECIMAL\r
- LDX 78,0\r
- OCTAL\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
- DECIMAL\r
- LDX 77,0\r
- OCTAL\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
- DECIMAL\r
- LDX 112,0\r
- OCTAL\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
- JSA RDPROP\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
- JSA RDPROP\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
- JSA RDPROP\r
- FDIV TWO\r
- JSA #FIX\r
- FSTA PROP-3,6\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
- DECIMAL\r
- LDX 113,0\r
- OCTAL\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, FLDA FOOD\r
- JSA DSTROY\r
-/ SPK=72\r
- DECIMAL\r
- LDX 72,0\r
- OCTAL\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, DECIMAL\r
- LDX 71,0\r
- OCTAL\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 .+10\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 ONE\r
- FSTA PROP-3,3\r
-/ PLACE(WATER)=0\r
- FLDA WATER\r
- ATX 7\r
- FCLA\r
- FSTA PLACE-3,7\r
-/ SPK=74\r
- DECIMAL\r
- LDX 74,0\r
- OCTAL\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
- DECIMAL\r
- LDX 76,0\r
- OCTAL\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
- DECIMAL\r
- LDX 152,0\r
- OCTAL\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 3\r
- FLDA PROP-3,3\r
- JEQ #9175\r
-/ SPK=158\r
-#M84, DECIMAL\r
- LDX 158,0\r
- OCTAL\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 PROP-3,3\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, DECIMAL\r
- LDX 48,0\r
- OCTAL\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
- DECIMAL\r
- LDX 47,0\r
- OCTAL\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
- DECIMAL\r
- LDX 149,0\r
- OCTAL\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, DECIMAL\r
- LDX 164,0\r
- OCTAL\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
- FLDA BEAR\r
- JSA JUGGLE\r
-/ GOTO 2011\r
- JA #2011\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, DECIMAL\r
- LDX 159,0\r
- OCTAL\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
- FLDA PLAC-3,7\r
- FSTA #TMP\r
- JSR DROP\r
- JA .+6\r
- JA TROLL2\r
- JA #TMP\r
-/ CALL DROP(TROLL2+100,FIXD(TROLL))\r
- FLDA TROLL2\r
- FADD #LIT+154\r
- FSTA #TMP\r
-/ FLDA TROLL\r
-/ ATX 7\r
- FLDA FIXD-3,7\r
- FSTA #TMP+3\r
- JSR DROP\r
- JA .+6\r
- JA #TMP\r
- JA #TMP+3\r
-/ CALL JUGGLE(CHASM)\r
- FLDA CHASM\r
- JSA JUGGLE\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, DECIMAL\r
- LDX 94,0\r
- OCTAL\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
- DECIMAL\r
- LDX 94,0\r
- OCTAL\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
- DECIMAL\r
- LDX 138,0\r
- OCTAL\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, DECIMAL\r
- LDX 98,0\r
- OCTAL\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
- DECIMAL\r
- LDX 98,0\r
- OCTAL\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, DECIMAL\r
- LDX 102,0\r
- OCTAL\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
- JSA RDPROP\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
- DECIMAL\r
- LDX 182,0\r
- OCTAL\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
- DECIMAL\r
- LDX 101,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ CALL DSTROY(BIRD)\r
- FLDA BIRD\r
- JSA DSTROY\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
- DECIMAL\r
- LDX 103,0\r
- OCTAL\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
- JSA RDPROP\r
- JNE .+6\r
- DECIMAL\r
- LDX 102,0\r
- OCTAL\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
- FLDA FOOD\r
- JSA DSTROY\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
- DECIMAL\r
- LDX 168,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ GOTO 2011\r
- JA #2011\r
-\r
-/C\r
-/9215 SPK=14\r
-#9215, DECIMAL\r
- LDX 14,0\r
- OCTAL\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, DECIMAL\r
- LDX 107,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(LIQLOC(LOC).EQ.0)SPK=106\r
- JSA LIQLOC\r
- JNE #M92A\r
- DECIMAL\r
- LDX 106,0\r
- OCTAL\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
- DECIMAL\r
- LDX 107,0\r
- OCTAL\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
- FLDA COND-3,6\r
- FSTA #TMP\r
- JSR MOD\r
- JA .+6\r
- JA #TMP\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 .+10\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
- DECIMAL\r
- LDX 108,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ GOTO 2011\r
- JA #2011\r
-\r
-/C\r
-/9222 SPK=29\r
-#9222, FLDA #LIT+135\r
- FSTA SPK\r
-/ IF(LIQLOC(LOC).EQ.0)SPK=144\r
- JSA LIQLOC\r
- JNE .+6\r
- DECIMAL\r
- LDX 144,0\r
- OCTAL\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
- JSA RDPROP\r
- JLT #2011\r
- FLDA CLOSED\r
- JEQ #2011\r
-/ BONUS=133\r
- DECIMAL\r
- LDX 133,0\r
- OCTAL\r
- XTA 0\r
- FSTA BONUS\r
-/ IF(LOC.EQ.115)BONUS=134\r
- FLDA LOC\r
- FSUB #LIT+165\r
- JNE .+7\r
- DECIMAL\r
- LDX 134,0\r
- OCTAL\r
- XTA 0\r
- FSTA BONUS\r
-/ IF(HERE(ROD2))BONUS=135\r
- FLDA ROD2\r
- JSA HERE\r
- JEQ .+7\r
- DECIMAL\r
- LDX 135,0\r
- OCTAL\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
- JSA SPRINT\r
- JA #8243\r
- JA TWO\r
- \r
- TRAP3 #WRITO\r
- JA #LIT\r
- JA #8243A\r
- FLDA SCORE\r
- TRAP3 #RSVO\r
- TRAP3 #RENDO\r
-\r
- JSA SPRINT\r
- JA #8243B\r
- JA THREE\r
-\r
- TRAP3 #WRITO\r
- JA #LIT\r
- JA #8243A\r
- FLDA MXSCOR\r
- TRAP3 #RSVO\r
- TRAP3 #RENDO\r
-\r
- JSA SPRINT\r
- JA #8243C\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
- DECIMAL\r
- LDX 42,0\r
- OCTAL\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
- DECIMAL\r
- LDX 151,0\r
- OCTAL\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
- FLDA PLAC-3,7\r
- FSTA #TMP\r
- JSR MOVE\r
- JA .+6\r
- JA EGGS\r
- JA #TMP\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, DECIMAL\r
- LDX 156,0\r
- OCTAL\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
- DECIMAL\r
- LDX 190,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(OBJ.EQ.TABLET)SPK=196\r
- FLDA OBJ\r
- FSUB TABLET\r
- JNE .+6\r
- DECIMAL\r
- LDX 196,0\r
- OCTAL\r
- XTA 0\r
- FSTA SPK\r
-/ IF(OBJ.EQ.MESSAG)SPK=191\r
- FLDA OBJ\r
- FSUB MESSAG\r
- JNE .+6\r
- DECIMAL\r
- LDX 191,0\r
- OCTAL\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 HINTED+3 / HINTED(2)\r
- JEQ #M95\r
- FLDA OYSTER\r
- JSA TOTING\r
- JEQ .+6\r
- DECIMAL\r
- LDX 194,0\r
- OCTAL\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\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
- JSR YES\r
- JA #2012\r
- JA #LIT+267\r
- JA #LIT+272\r
- JA #LIT+113\r
- FSTA HINTED+3 /HINTED(2)\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
- DECIMAL\r
- LDX 148,0\r
- OCTAL\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
- JSA RDPROP\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, DECIMAL\r
- LDX 198,0\r
- OCTAL\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 TWO\r
- FSTA PROP-3,3\r
-/ FIXED(VASE)=-1\r
- FLDA MINUS1\r
- FSTA FIXED-3,3\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+330 / 60 (index 3)\r
- FADD HINT / hint,3\r
- ATX 7\r
- FLDA HINTS-77,7\r
- FSTA #TMP\r
- JSR YES\r
- JA .+10\r
- JA #TMP\r
- JA ZERO\r
- JA #LIT+113\r
- JEQ #2602\r
-/ TYPE 40012,HINTS(HINT,2)\r
- JSA SPRINT\r
- JA #40012\r
- JA TWO\r
-\r
- TRAP3 #WRITO\r
- JA #LIT\r
- JA #4001A\r
- FLDA #LIT+77 / 40\r
- FADD HINT / HINT, 2\r
- ATX 7\r
- FLDA HINTS-77,7\r
- TRAP3 #RSVO\r
- TRAP3 #RENDO\r
-\r
- JSA SPRINT\r
- JA #4001B\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 6\r
- FADD #LIT+325 / 80: HINT,4\r
- ATX 7\r
- FLDA HINTS-77,7\r
- FSTA #TMP\r
- JSR YES\r
- JA .+10\r
- JA #LIT+250\r
- JA #TMP\r
- JA #LIT+113\r
- FSTA HINTED-3,6\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 #LIT+77 /80\r
- FADD HINT /HINT,2\r
- ATX 6\r
- FLDA #LIT+63\r
- FMUL HINTS-77,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
- JSA RDPROP\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
- ATX 7\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
- FLDA PLAC-3,7\r
- FSTA #TMP\r
- JSR MOVE\r
- JA .+6\r
- JA TROLL2\r
- JA #TMP\r
-/ CALL MOVE(TROLL2+100,FIXD(TROLL))\r
- FLDA TROLL2\r
- FADD #LIT+154\r
- FSTA #TMP\r
-/ FLDA TROLL\r
-/ ATX 7\r
- FLDA FIXD-3,7\r
- FSTA #TMP+3\r
- JSR MOVE\r
- JA .+6\r
- JA #TMP\r
- JA #TMP+3\r
-/ CALL JUGGLE(CHASM)\r
- FLDA CHASM\r
- JSA JUGGLE\r
-/ IF(PROP(BEAR).NE.3)CALL DSTROY(BEAR)\r
- FLDA BEAR\r
- JSA RDPROP\r
- FSUB THREE\r
- JEQ .+6\r
- FLDA BEAR\r
- JSA DSTROY\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 ZERO\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 .+6\r
- FLDA I\r
- JSA DSTROY\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
- DECIMAL\r
- LDX 187,0\r
- OCTAL\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
- DECIMAL\r
- LDX 183,0\r
- OCTAL\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
- DECIMAL\r
- LDX 189,0\r
- OCTAL\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
- DECIMAL\r
- LDX 14,0\r
- OCTAL\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
- DECIMAL\r
- LDX 135,0\r
- OCTAL\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
- DECIMAL\r
- LDX 134,0\r
- OCTAL\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
- DECIMAL\r
- LDX 133,0\r
- OCTAL\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
- DECIMAL\r
- LDX 108,0\r
- OCTAL\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 .+14\r
- FLDA #LIT+77 /20\r
- FADD I /I, 2\r
- ATX 6\r
- FLDA SCORE\r
- FSUB HINTS-77,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
- JSA SPRINT\r
- JA #20100\r
- JA TWO\r
-\r
- TRAP3 #WRITO\r
- JA #LIT\r
- JA #2010A\r
- FLDA SCORE\r
- TRAP3 #RSVO\r
- TRAP3 #RENDO\r
-\r
- JSA SPRINT\r
- JA #2010B\r
- JA THREE\r
-\r
- TRAP3 #WRITO\r
- JA #LIT\r
- JA #2010A\r
- FLDA MXSCOR\r
- TRAP3 #RSVO\r
- TRAP3 #RENDO\r
-\r
- JSA SPRINT\r
- JA #2010C\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
- JSA SPRINT\r
- JA #2010E\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
- JSA SPRINT\r
- JA #20202\r
- JA ZERO\r
- \r
-/20202 FORMAT(' You just went off my scale!!'/)\r
-/ GOTO 25000\r
- JA #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
- JSA SPRINT\r
- JA #20212\r
- JA TWO\r
-\r
- JSA SPRINT\r
- JA #2021A\r
- JA THREE\r
-\r
- TRAP3 #WRITO\r
- JA #LIT\r
- JA #2021B\r
- FLDA K\r
- TRAP3 #RSVO\r
- TRAP3 #RENDO\r
-\r
- JSA SPRINT\r
- JA #2021C\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 .+12\r
- JSA SPRINT\r
- JA #20213\r
- JA ONE\r
- JA #25000\r
-\r
-/ IF(K.NE.1) TYPE 20214\r
- JSA SPRINT\r
- JA #20214\r
- JA ONE\r
-/20213 FORMAT('+.'/)\r
-\r
-/20214 FORMAT('+s.'/)\r
-/ GOTO 25000\r
- JA #25000\r
-/C\r
-/20220 TYPE 20222\r
-#20220, JSA SPRINT\r
- JA #20212\r
- JA TWO\r
-\r
- JSA SPRINT\r
- JA #20222\r
- JA ONE\r
-\r
- JSA SPRINT\r
- JA #20223\r
- JA ZERO\r
-/20222 FORMAT(' To achieve the next higher rating ',\r
-/ 1 'would be a neat trick!'/' Congratulations!!'/)\r
-/ RETURN\r
- JA #GOBAK\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
-#2021B,\r
-#8243A, TEXT %('+',I3,$)%\r
-#2010B,\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
-#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@%\r
-#2021A, TEXT %, ]YOU NEED @%\r
-#2021C, TEXT % ]MORE POINT@%\r
-#20214, TEXT %]S.@%\r
-#20222, TEXT %] WOULD BE A NEAT TRICK!@%\r
-#20223, TEXT %C]ONGRATULATIONS!!@%\r
- END\r