From 9c713ddb5545e93314ac174d3a3e74f815dac7ca Mon Sep 17 00:00:00 2001 From: historicalsource Date: Sun, 14 Apr 2019 16:09:16 -0400 Subject: [PATCH] Beta Version --- README.md | 1 + globals.zap | 1060 ++++ globals.zil | 1448 ++++++ misc.zap | 569 ++ misc.zil | 713 +++ parser.zap | 1869 +++++++ parser.zil | 1811 +++++++ s6.zap | 15 + s6.zil | 28 + s6.zip | Bin 0 -> 121724 bytes s6dat.zap | 14037 ++++++++++++++++++++++++++++++++++++++++++++++++++ s6pur.zap | 167 + s6str.zap | 433 ++ ship.zap | 1050 ++++ ship.zil | 1385 +++++ station.zap | 2074 ++++++++ station.zil | 3633 +++++++++++++ syntax.zap | 2 + syntax.zil | 654 +++ verbs.zap | 3544 +++++++++++++ verbs.zil | 3026 +++++++++++ village.zap | 1138 ++++ village.zil | 1926 +++++++ 23 files changed, 40583 insertions(+) create mode 100644 README.md create mode 100644 globals.zap create mode 100644 globals.zil create mode 100644 misc.zap create mode 100644 misc.zil create mode 100644 parser.zap create mode 100644 parser.zil create mode 100644 s6.zap create mode 100644 s6.zil create mode 100644 s6.zip create mode 100644 s6dat.zap create mode 100644 s6pur.zap create mode 100644 s6str.zap create mode 100644 ship.zap create mode 100644 ship.zil create mode 100644 station.zap create mode 100644 station.zil create mode 100644 syntax.zap create mode 100644 syntax.zil create mode 100644 verbs.zap create mode 100644 verbs.zil create mode 100644 village.zap create mode 100644 village.zil diff --git a/README.md b/README.md new file mode 100644 index 0000000..b45555e --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# stationfall diff --git a/globals.zap b/globals.zap new file mode 100644 index 0000000..57e2c7c --- /dev/null +++ b/globals.zap @@ -0,0 +1,1060 @@ + + + .FUNCT INTNUM-F + EQUAL? PRSA,V?ENTER \?ELS5 + EQUAL? P-PRSA-WORD,W?ENTER \?ELS5 + CALL GLOBAL-IN?,KEYPAD,HERE + ZERO? STACK /?ELS5 + CALL PERFORM,V?TYPE,INTNUM + RTRUE +?ELS5: EQUAL? PRSA,V?PUSH \?ELS9 + CALL GLOBAL-IN?,KEYPAD,HERE + ZERO? STACK /?ELS9 + CALL PERFORM,V?TYPE,INTNUM + RTRUE +?ELS9: EQUAL? PRSA,V?SET \?ELS13 + ZERO? PRSI \?ELS13 + EQUAL? HERE,COMMANDERS-QUARTERS \?ELS13 + EQUAL? P-NUMBER,DIAL-SETTING \?ELS20 + PRINT SENILITY-STRIKES + RTRUE +?ELS20: GRTR? P-NUMBER,8000 \?ELS22 + PRINTR "The dial only goes up to 8000." +?ELS22: SET 'DIAL-SETTING,P-NUMBER + PRINTR """Click.""" +?ELS13: CALL TOUCHING?,INTNUM + ZERO? STACK /FALSE + PRINT HUH + RTRUE + + + .FUNCT NOT-HERE-OBJECT-F,TBL,PRSO?=1,OBJ,X=0 + EQUAL? PRSO,NOT-HERE-OBJECT \?ELS3 + EQUAL? PRSI,NOT-HERE-OBJECT \?ELS3 + PRINTR "Those things aren't here!" +?ELS3: EQUAL? PRSO,NOT-HERE-OBJECT \?ELS7 + SET 'TBL,P-PRSO + JUMP ?CND1 +?ELS7: SET 'TBL,P-PRSI + SET 'PRSO?,FALSE-VALUE +?CND1: ZERO? PRSO? /?ELS12 + CALL PRSO-MOBY-VERB? + ZERO? STACK /?ELS12 + SET 'X,TRUE-VALUE + JUMP ?CND10 +?ELS12: ZERO? PRSO? \?CND10 + CALL PRSI-MOBY-VERB? + ZERO? STACK /?CND10 + SET 'X,TRUE-VALUE +?CND10: ZERO? X /?ELS21 + CALL FIND-NOT-HERE,TBL,PRSO? >OBJ + ZERO? OBJ /FALSE + EQUAL? OBJ,NOT-HERE-OBJECT \TRUE + EQUAL? PRSA,V?FOLLOW,V?WALK-TO \?ELS33 + CALL V-WALK-AROUND + JUMP ?CND19 +?ELS33: PRINTC 91 + PRINT YOULL-HAVE-TO + PRINTI "be more specific.]" + CRLF + JUMP ?CND19 +?ELS21: EQUAL? WINNER,PROTAGONIST \?ELS40 + PRINTI "You" + JUMP ?CND38 +?ELS40: PRINTI "Looking confused," + CALL TPRINT,WINNER + PRINTI " says, ""I" +?CND38: PRINTI " can't see" + CALL NAME?,P-XNAM + ZERO? STACK \?CND43 + PRINTI " any" +?CND43: CALL NOT-HERE-PRINT,PRSO? + PRINTI " here!" + EQUAL? WINNER,PROTAGONIST /?CND46 + PRINTC 34 +?CND46: CRLF +?CND19: CALL STOP + RSTACK + + + .FUNCT PRSO-MOBY-VERB? + EQUAL? PRSA,V?WHAT,V?WHERE,V?WAIT-FOR /TRUE + EQUAL? PRSA,V?WALK-TO,V?CALL,V?SAY /TRUE + EQUAL? PRSA,V?FIND,V?FOLLOW \FALSE + RTRUE + + + .FUNCT PRSI-MOBY-VERB? + EQUAL? PRSA,V?ASK-ABOUT,V?ASK-FOR,V?TELL-ABOUT \FALSE + RTRUE + + + .FUNCT FIND-NOT-HERE,TBL,PRSO?,M-F,OBJ + CALL MOBY-FIND,TBL >M-F + ZERO? DEBUG /?CND1 + PRINTI "[Found " + PRINTN M-F + PRINTI " obj]" + CRLF +?CND1: EQUAL? 1,M-F \?ELS9 + ZERO? DEBUG /?CND10 + PRINTI "[Namely: " + PRINTD P-MOBY-FOUND + PRINTC 93 + CRLF +?CND10: ZERO? PRSO? /?ELS16 + SET 'PRSO,P-MOBY-FOUND + CALL THIS-IS-IT,PRSO + RFALSE +?ELS16: SET 'PRSI,P-MOBY-FOUND + RFALSE +?ELS9: LESS? 1,M-F \?ELS21 + GET TBL,1 >OBJ + GETP OBJ,P?GENERIC + CALL STACK >OBJ + ZERO? OBJ /?ELS21 + ZERO? DEBUG /?CND24 + PRINTI "[Generic: " + PRINTD OBJ + PRINTC 93 + CRLF +?CND24: EQUAL? OBJ,NOT-HERE-OBJECT /TRUE + ZERO? PRSO? /?ELS32 + SET 'PRSO,OBJ + CALL THIS-IS-IT,PRSO + RFALSE +?ELS32: SET 'PRSI,OBJ + RFALSE +?ELS21: RETURN NOT-HERE-OBJECT + + + .FUNCT NOT-HERE-PRINT,PRSO?,?TMP1 + ZERO? P-OFLAG /?ELS5 + ZERO? P-XADJ /?CND7 + PRINTC 32 + PRINTB P-XADJN +?CND7: ZERO? P-XNAM /FALSE + PRINTC 32 + PRINTB P-XNAM + RTRUE +?ELS5: ZERO? PRSO? /?ELS18 + GET P-ITBL,P-NC1 >?TMP1 + GET P-ITBL,P-NC1L + CALL BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE + RSTACK +?ELS18: GET P-ITBL,P-NC2 >?TMP1 + GET P-ITBL,P-NC2L + CALL BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE + RSTACK + + + .FUNCT GROUND-F + EQUAL? PRSA,V?ENTER,V?CLIMB-ON \?ELS5 + SET 'C-ELAPSED,31 + PRINTR "You sit down on the floor. After a brief rest, you stand again." +?ELS5: EQUAL? PRSA,V?LOOK-UNDER \?ELS7 + CALL IMPOSSIBLES + RSTACK +?ELS7: EQUAL? PRSA,V?LEAVE \FALSE + CALL DO-WALK,P?UP + RSTACK + + + .FUNCT WALLS-F + EQUAL? PRSA,V?EXAMINE \FALSE + EQUAL? HERE,HOLDING-TANK-LEVEL \FALSE + PRINT BLASTED-OPEN + PRINT PERIOD-CR + RTRUE + + + .FUNCT CEILING-F + EQUAL? PRSA,V?SEARCH,V?EXAMINE \?ELS5 + EQUAL? HERE,PET-STORE \?ELS5 + MOVE PANEL,HERE + CALL THIS-IS-IT,PANEL + PRINTR "As you look carefully, you notice something that a casual inspection of the Pet Store would never have uncovered: a panel mounted in the ceiling." +?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS9 + EQUAL? HERE,DOME \?ELS9 + PRINT DOME-DESC + CRLF + RTRUE +?ELS9: EQUAL? PRSA,V?LOOK-UNDER \FALSE + CALL PERFORM,V?LOOK + RTRUE + + + .FUNCT GLOBAL-ROOM-F + EQUAL? PRSA,V?EXAMINE,V?LOOK-INSIDE,V?LOOK \?ELS5 + CALL V-LOOK + RSTACK +?ELS5: EQUAL? PRSA,V?WALK-TO,V?ENTER \?ELS7 + CALL V-WALK-AROUND + RSTACK +?ELS7: EQUAL? PRSA,V?DISEMBARK,V?EXIT,V?LEAVE \?ELS9 + CALL DO-WALK,P?OUT + RSTACK +?ELS9: EQUAL? PRSA,V?SEARCH \?ELS11 + EQUAL? HERE,REC-SHOP \?ELS16 + IN? FOIL,LOCAL-GLOBALS \?ELS16 + MOVE FOIL,HERE + CALL THIS-IS-IT,FOIL + PRINTR "Behind one of the simulation booths, you spot a large piece of trans-molecular reflective foil! It's probably a promotional item, left over from last year's mega-hit simulation booth simulation, ""Platinum Pagans of Paradise.""" +?ELS16: EQUAL? HERE,GREASY-STRAW \?ELS20 + IN? NECTAR,LOCAL-GLOBALS \?ELS20 + MOVE NECTAR,HERE + CALL THIS-IS-IT,NECTAR + PRINTR "You spot a cup of Ramosian Fire Nectar behind the counter!" +?ELS20: PRINTR "A cursory search of the room reveals nothing new." +?ELS11: EQUAL? PRSA,V?PUT \FALSE + EQUAL? PRSI,GLOBAL-ROOM \FALSE + EQUAL? P-PRSA-WORD,W?THROW \?ELS33 + CALL PERFORM,V?THROW,PRSO + RTRUE +?ELS33: CALL PERFORM,V?DROP,PRSO + RTRUE + + + .FUNCT WINDOW-F + EQUAL? PRSA,V?LOOK-INSIDE \?ELS5 + EQUAL? HERE,SHADY-DANS \?ELS10 + PRINT DANS-LOT-DESC + CRLF + RTRUE +?ELS10: EQUAL? SPACETRUCK-COUNTER,5 \?ELS12 + EQUAL? COURSE-PICKED,RIGHT-COURSE \?ELS12 + PRINTR "You see an empty docking bay." +?ELS12: ZERO? SPACETRUCK-COUNTER \?ELS16 + PRINTR "You see a large cargo bay." +?ELS16: EQUAL? SPACETRUCK-COUNTER,4 \?ELS18 + EQUAL? COURSE-PICKED,RIGHT-COURSE \?ELS18 + PRINTR " You are approaching the station from slightly above it (on the galactic plane), thus offering a good view of the station's layout. In the center is the large, spherical Command Module. Jutting ""north"" from it is a smaller Sub-Module. Joining the Command Module, at its two other connection points, is a tangle of tubes and space bubbles and derelict rockets. These form a ""village,"" the sort of seedy, unauthorized village that frequently collects around a space station." +?ELS18: PRINTR "You see nothing but the majestic sweep of the galaxy." +?ELS5: EQUAL? PRSA,V?CLEAN \FALSE + SET 'AWAITING-REPLY,1 + ADD C-ELAPSED,2 + CALL QUEUE,I-REPLY,STACK + PRINTR "Do you also do floors?" + + + .FUNCT SIGN-F + EQUAL? PRSA,V?READ \FALSE + EQUAL? HERE,GREASY-STRAW \?ELS10 + PRINT RESTAURANT-SIGN-TEXT + CRLF + RTRUE +?ELS10: EQUAL? HERE,TRADING-POST \?ELS12 + PRINTR """!!!BEST PRICES IN TOWN!!! +IF YOU DON'T SEE IT ASK FOR IT! +Illegal wares shown by appointment only. +FREZONE (tm) explosive available.""" +?ELS12: EQUAL? HERE,PET-STORE \?ELS14 + PRINTI """SPECIAL!!! The best pet a lonely spacer could ever hope for! + " + PRINTD BALLOON + PRINTI "s are fascinating critters. Filled with hydrogen, they float freely through the air like small dirigibles. + With their translucent bodies and irridescent skin, they're a beautiful addition to the decor of any living bubble. They are docile and friendly. And, they are easy to care for, feeding on airborne spores! + Limited supply!! Order yours today!!"" + You recall one fact about " + PRINTD BALLOON + PRINTR "s which the sign fails to mention: they propel themselves around by ejecting digestive gasses. This makes them one of the smelliest pets imaginable." +?ELS14: EQUAL? HERE,GYM \?ELS16 + PRINTI """IMPORTANT! The " + PRINTD EXERCISE-MACHINE + PRINTI " has diagnostic frequencies which communicate with each other on frequency 710. Do not bring anything which broadcasts on that frequency within range of the machine!""" + IN? EXERCISE-MACHINE,GYM /?CND17 + PRINTI " Strangely, you don't see any exercise machine anywhere in the gym." +?CND17: CRLF + RTRUE +?ELS16: EQUAL? HERE,OPIUM-DEN \?ELS21 + PRINTR "The sign is from the government's latest anti-drug crusade. It depicts the president of the Third Galactic Union, her hands crossed across her chest in a defiant pose, with the caption, ""Drugs are a no-no!"" You notice that someone has drawn a mustache on her." +?ELS21: PRINTR """TRADING POST VACUUM STORAGE AREA + Trespassers will be spaced!""" + + + .FUNCT EQUIPMENT-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + EQUAL? HERE,ROBOT-POOL \?ELS10 + PRINT ROBOT-POOL-EQUIPMENT-DESC + CRLF + RTRUE +?ELS10: PRINTR "Since this equipment has nothing to do with the filling out or filing of multi-part forms, it's far outside your area of expertise." +?ELS5: EQUAL? PRSA,V?USE \?ELS14 + EQUAL? HERE,ROBOT-POOL \?ELS14 + PRINTR "Put the form in the slot, you dolt!" +?ELS14: EQUAL? PRSA,V?OFF,V?ON \FALSE + CALL PERFORM,V?EXAMINE,EQUIPMENT + RTRUE + + + .FUNCT FIXTURES-F + EQUAL? PRSA,V?USE,V?WALK-TO,V?ENTER \?ELS5 + PRINTR "This story doesn't go into that sort of detail." +?ELS5: EQUAL? PRSA,V?ON,V?TAKE \FALSE + CALL NOUN-USED,W?SHOWER,FIXTURES + ZERO? STACK /FALSE + CALL PERFORM,V?USE,FIXTURES + RTRUE + + + .FUNCT HOLE-F + EQUAL? PRSA,V?DRILL-HOLE \?ELS5 + EQUAL? PRSO,HOLE /FALSE +?ELS5: EQUAL? PRSA,V?DRILL \?ELS9 + EQUAL? PRSO,HOLE \?ELS9 + CALL PERFORM,V?DRILL-HOLE,HOLE,WALLS + RTRUE +?ELS9: CALL PRSO-MOBY-VERB? + ZERO? STACK \FALSE + CALL PRSI-MOBY-VERB? + ZERO? STACK \FALSE + CALL CANT-SEE,HOLE + RSTACK + + + .FUNCT LADDER-F + EQUAL? PRSA,V?CLIMB-UP \?ELS5 + CALL DO-WALK,P?UP + RSTACK +?ELS5: EQUAL? PRSA,V?CLIMB-DOWN \FALSE + CALL DO-WALK,P?DOWN + RSTACK + + + .FUNCT HANDS-F,ACTOR + EQUAL? PRSA,V?APPLAUD \?ELS5 + SET 'PRSO,FALSE-VALUE + RFALSE +?ELS5: EQUAL? PRSA,V?SHAKE \?ELS7 + CALL FIND-IN,HERE,ACTORBIT,STR?85 >ACTOR + ZERO? ACTOR /?ELS12 + CALL PERFORM,V?SHAKE-WITH,HANDS,ACTOR + RTRUE +?ELS12: PRINTR "Pleased to meet you." +?ELS7: EQUAL? PRSA,V?COUNT \?ELS16 + CALL NOUN-USED,W?FINGER,HANDS + ZERO? STACK /?ELS19 + PRINTI "Ten" + JUMP ?CND17 +?ELS19: PRINTI "Two" +?CND17: PRINTR ", as usual." +?ELS16: EQUAL? PRSA,V?CLEAN \?ELS23 + PRINTR "Done." +?ELS23: EQUAL? PRSA,V?SHOOT \?ELS25 + CALL JIGS-UP,STR?86 + RSTACK +?ELS25: EQUAL? PRSA,V?TAKE-WITH \FALSE + EQUAL? PRSI,HANDS \FALSE + CALL PERFORM,V?TAKE,PRSO + RTRUE + + + .FUNCT TONGUE-F + EQUAL? PRSA,V?RUN-OVER,V?PUT-ON \FALSE + EQUAL? PRSO,TONGUE \FALSE + CALL PERFORM,V?TASTE,PRSI + RTRUE + + + .FUNCT ME-F + EQUAL? PRSA,V?TELL \?ELS5 + PRINTI "Talking to yourself is a sign of impending mental collapse." + CRLF + CALL STOP + RSTACK +?ELS5: EQUAL? PRSA,V?DRILL \?ELS7 + PRINTR "Why bother? Based on that input, you already have holes in your head!" +?ELS7: EQUAL? PRSA,V?GIVE \?ELS9 + EQUAL? PRSI,ME \?ELS9 + CALL PERFORM,V?TAKE,PRSO + RTRUE +?ELS9: EQUAL? PRSA,V?SHOW \?ELS13 + EQUAL? PRSI,ME \?ELS13 + CALL PERFORM,V?EXAMINE,PRSO + RTRUE +?ELS13: EQUAL? PRSA,V?MOVE \?ELS17 + CALL V-WALK-AROUND + RSTACK +?ELS17: EQUAL? PRSA,V?SEARCH \?ELS19 + CALL V-INVENTORY + RSTACK +?ELS19: EQUAL? PRSA,V?MUNG,V?KILL \?ELS21 + EQUAL? PRSO,ME \?ELS21 + CALL JIGS-UP,STR?87 + RSTACK +?ELS21: EQUAL? PRSA,V?SHOOT \?ELS25 + CALL JIGS-UP,STR?88 + RSTACK +?ELS25: EQUAL? PRSA,V?WHERE,V?FIND \?ELS27 + PRINTI "You're in" + CALL TRPRINT,HERE + RSTACK +?ELS27: EQUAL? PRSA,V?FOLLOW \?ELS29 + PRINTR "It would be hard not to." +?ELS29: EQUAL? PRSA,V?EXAMINE \?ELS31 + PRINTR "That's difficult unless your eyes are prehensile." +?ELS31: EQUAL? PRSA,V?ALARM \?ELS33 + PRINTR "You are!" +?ELS33: EQUAL? PRSA,V?TAKE \FALSE + PRINTR "How romantic!" + + + .FUNCT GRUE-F + EQUAL? PRSA,V?WHAT \FALSE + PRINTR "Grues are vicious, carnivorous beasts first introduced to Earth by an alien spaceship during the 22nd century. Grues spread throughout the galaxy alongside man. Now extinct on all civilized planets, they still exist in some backwater corners of the galaxy. Their favorite diet is Lieutenants First Class, but their insatiable appetite is tempered by their fear of light." + + + .FUNCT SLOT-F + EQUAL? PRSA,V?PUT \?ELS5 + EQUAL? PRSI,PSEUDO-OBJECT \?ELS5 + EQUAL? PRSO,CRUMPLED-FORM \?ELS12 + PRINTR "The form almost slides into the slot, but its degree of crumpledness is just a bit too high." +?ELS12: EQUAL? PRSO,ROBOT-USE-AUTHORIZATION-FORM \?ELS18 + EQUAL? HERE,ROBOT-POOL /?THN15 +?ELS18: EQUAL? PRSO,CLASS-THREE-SPACECRAFT-ACTIVATION-FORM \?ELS20 + EQUAL? HERE,SPACETRUCK /?THN15 +?ELS20: EQUAL? PRSO,VILLAGE-FORM \?ELS14 + EQUAL? HERE,SOUTH-CONNECTION,EAST-CONNECTION \?ELS14 +?THN15: EQUAL? HERE,SPACETRUCK \?ELS25 + CALL BOTH-SEATS-NOT-OCCUPIED + ZERO? STACK /?ELS25 + PRINTI "The form is spit back out. " + CALL RECORDING,STR?91 + RTRUE +?ELS25: EQUAL? PRSO,VILLAGE-FORM \?CND23 + ZERO? VILLAGE-FORM-VALIDATED \?CND23 + PRINTI "The form is spit back out. " + CALL RECORDING,STR?92 + RTRUE +?CND23: REMOVE PRSO + FSET PRSO,NDESCBIT + PRINTI "The form is swallowed up, followed by a long pause for triple-redundancy processing. " + EQUAL? PRSO,ROBOT-USE-AUTHORIZATION-FORM \?ELS36 + CALL RECORDING,STR?93 + RSTACK +?ELS36: EQUAL? PRSO,VILLAGE-FORM \?ELS38 + ADD SCORE,4 >SCORE + INC 'ROBOT-EVILNESS + FSET IRIS-HATCH,OPENBIT + PRINTR "The hatch begins irising open, then sparks and smokes and grinds to a halt. However, it's about half dilated, wide enough to pass through." +?ELS38: CALL RECORDING,STR?94 + RSTACK +?ELS14: EQUAL? PRSO,ASSIGNMENT-COMPLETION-FORM,CLASS-THREE-SPACECRAFT-ACTIVATION-FORM,ROBOT-USE-AUTHORIZATION-FORM \?ELS42 + PRINTR "The form is rejected." +?ELS42: GETP P?SIZE,PRSO + LESS? STACK,3 \?ELS44 + PRINTI "The slot swallows" + CALL TPRINT-PRSO + PRINTR " and then spits it back." +?ELS44: CALL DOESNT-FIT,STR?95 + RSTACK +?ELS5: EQUAL? PRSA,V?LOOK-INSIDE \FALSE + PRINT ONLY-BLACKNESS + RTRUE + + + .FUNCT BOTH-SEATS-NOT-OCCUPIED,?TMP1,?TMP2 + IN? PROTAGONIST,PILOT-SEAT \?ELS5 + LOC FLOYD >?TMP2 + LOC HELEN >?TMP1 + LOC REX + EQUAL? COPILOT-SEAT,?TMP2,?TMP1,STACK /FALSE +?ELS5: IN? PROTAGONIST,COPILOT-SEAT \TRUE + LOC FLOYD >?TMP2 + LOC HELEN >?TMP1 + LOC REX + EQUAL? PILOT-SEAT,?TMP2,?TMP1,STACK \TRUE + RFALSE + + + .FUNCT KEYPAD-F + EQUAL? PRSA,V?PUSH \FALSE + RANDOM 10 + SUB STACK,1 >P-NUMBER + PRINTI "Randomly, you hit " + PRINTN P-NUMBER + PRINTI ". " + CALL PERFORM,V?TYPE,INTNUM + RTRUE + + + .FUNCT FURNISHING-F + EQUAL? PRSA,V?LOOK-INSIDE,V?SEARCH,V?OPEN /?THN6 + EQUAL? PRSA,V?EXAMINE \?ELS5 +?THN6: PRINTR "You merely find a few personal items of little interest." +?ELS5: EQUAL? PRSA,V?PUT-ON,V?PUT \FALSE + PRINTI "The " + PRINTD PRSI + PRINTI " is such a mess that you can't find a good spot to put" + CALL TRPRINT,PRSO + RSTACK + + + .FUNCT BED-F + EQUAL? PRSA,V?WALK-TO \?ELS5 + CALL GLOBAL-IN?,BED,HERE + ZERO? STACK \?ELS5 + PRINTR "There's no bed here!" +?ELS5: EQUAL? PRSA,V?WALK-TO,V?ENTER \?ELS9 + GRTR? SLEEPY-LEVEL,0 \?ELS14 + MOVE PROTAGONIST,BED + CALL QUEUE,I-FALL-ASLEEP,22 + CALL DEQUEUE,I-SLEEP-WARNINGS + PRINTR "Ahhh...the bed is soft and comfortable. You should be asleep in short order." +?ELS14: MOVE PROTAGONIST,BED + PRINTR "You are now in bed." +?ELS9: EQUAL? PRSA,V?EXIT,V?STAND,V?DISEMBARK /?THN21 + EQUAL? PRSA,V?DROP \?ELS18 +?THN21: CALL QUEUED?,I-FALL-ASLEEP + ZERO? STACK /?ELS18 + PRINTR "How could you suggest such a thing when you're so tired and this bed is so comfy?" +?ELS18: EQUAL? PRSA,V?DROP,V?EXIT,V?LEAVE \?ELS24 + CALL PERFORM,V?DISEMBARK,BED + RTRUE +?ELS24: EQUAL? PRSA,V?PUT-ON,V?PUT \?ELS26 + EQUAL? PRSI,BED \?ELS26 + MOVE PRSO,HERE + PRINTI "The " + PRINTD PRSO + PRINTR " bounces off the bed and lands on the floor." +?ELS26: EQUAL? PRSA,V?LOOK-UNDER \?ELS30 + IN? PROTAGONIST,BED \?ELS30 + PRINTR "You're IN the bed, so unless you have x-ray vision..." +?ELS30: EQUAL? PRSA,V?LOOK-UNDER \FALSE + EQUAL? HERE,COMMANDERS-QUARTERS \FALSE + FSET? VALIDATION-STAMP,TOUCHBIT /FALSE + FSET VALIDATION-STAMP,TOUCHBIT + MOVE VALIDATION-STAMP,HERE + CALL THIS-IS-IT,VALIDATION-STAMP + PRINTR "You discover a validation stamp!" + + + .FUNCT SLEEP-F + EQUAL? PRSA,V?TAKE,V?WALK-TO \FALSE + CALL V-SLEEP + RSTACK + + + .FUNCT I-SLEEP-WARNINGS + GRTR? PLATO-ATTACK-COUNTER,0 \?CND1 + IN? PLATO,HERE \?CND1 + CALL QUEUE,I-HUNGER-WARNINGS,2 + RFALSE +?CND1: INC 'SLEEPY-LEVEL + PRINTI " " + IN? PROTAGONIST,BED \?ELS10 + CALL DEQUEUE,I-SLEEP-WARNINGS + CALL QUEUE,I-FALL-ASLEEP,16 + PRINTR "You suddenly realize how tired you were and how comfortable the bed is. You should be asleep in no time." +?ELS10: EQUAL? SLEEPY-LEVEL,1 \?ELS12 + CALL QUEUE,I-SLEEP-WARNINGS,320 + PRINTR "You begin to feel weary. It might be time to think about finding a nice safe place to sleep." +?ELS12: EQUAL? SLEEPY-LEVEL,2 \?ELS14 + CALL QUEUE,I-SLEEP-WARNINGS,160 + PRINTR "You're really tired now. You'd better find a place to sleep real soon." +?ELS14: EQUAL? SLEEPY-LEVEL,3 \?ELS16 + CALL QUEUE,I-SLEEP-WARNINGS,80 + PRINTR "If you don't get some sleep soon you'll probably drop." +?ELS16: EQUAL? SLEEPY-LEVEL,4 \?ELS18 + CALL QUEUE,I-SLEEP-WARNINGS,40 + PRINTR "You can barely keep your eyes open." +?ELS18: EQUAL? HERE,BED \?ELS23 + PRINTI "You slowly sink into a deep and blissful sleep." + JUMP ?CND21 +?ELS23: CALL GLOBAL-IN?,BED,HERE + ZERO? STACK /?ELS25 + MOVE PROTAGONIST,BED + PRINTI "You climb into one of the beds and immediately fall asleep." + JUMP ?CND21 +?ELS25: PRINT YOU-CANT + PRINTI "stay awake a moment longer. You drop " + IN? PROTAGONIST,HERE \?CND28 + FSET? HERE,WEIGHTLESSBIT /?CND28 + PRINTI "to the deck and fall " +?CND28: PRINTI "into a deep but fitful sleep." +?CND21: CALL WAKING-UP + RSTACK + + + .FUNCT I-FALL-ASLEEP + IN? WELDER,HERE \?CND1 + CALL QUEUE,I-FALL-ASLEEP,2 +?CND1: PRINTI " You slowly sink into a deep sleep." + CALL DEQUEUE,I-FALL-ASLEEP + CALL WAKING-UP + RSTACK + + + .FUNCT WAKING-UP,X,N,?TMP1 + CRLF + CRLF + FSET? SPACESUIT,WORNBIT \?ELS3 + CALL JIGS-UP,STR?102 + JUMP ?CND1 +?ELS3: EQUAL? COURSE-PICKED,RIGHT-COURSE /?ELS5 + EQUAL? HERE,SPACETRUCK \?ELS5 + PRINTI "You wake up gasping for air! The spacetruck" + CALL RUNNING?,I-SPACETRUCK + ZERO? STACK /?ELS10 + PRINTI " is dead in uncharted space and it" + JUMP ?CND8 +?ELS10: PRINTC 39 +?CND8: PRINTI "s oxygen is running out!" + CRLF + CALL I-SUFFOCATE + JUMP ?CND1 +?ELS5: EQUAL? SPACETRUCK-COUNTER,-1 \?ELS14 + PRINTI "A clanging noise wakes you up, and you slowly become aware that you are in the Duffy's brig, and furthermore, you are wearing the uniform of an Ensign Ninth Class! You trace the clanging noise to a pipe in your cell. + Placing your ear against the pipe, you hear, ""Psst! Grapevine news! Some dumb kripping " + PRINT LFC + PRINTI " fell asleep on Deck Five in the middle of some big assignment! The poor trot-head's been broken to Ensign Ninth, and there's talk of a court martial!"" + Sure enough, the next morning you are led in front of a firing squad. Moral: don't screw up vital assignments like picking up " + PRINT FORM-NAME + CALL JIGS-UP,STR?44 + JUMP ?CND1 +?ELS14: IN? PROTAGONIST,BED /?ELS16 + FSET? DOCKING-BAY-2,TOUCHBIT \?ELS16 + MUL DAY,40 >?TMP1 + RANDOM 100 + LESS? ?TMP1,STACK /?ELS16 + CALL JIGS-UP,STR?103 + JUMP ?CND1 +?ELS16: RANDOM 100 + LESS? 60,STACK /?CND1 + PRINTI "..." + CALL PICK-ONE,DREAMS + PRINT STACK + PRINTI "..." + CRLF + CRLF +?CND1: INC 'DAY + INC 'ROBOT-EVILNESS + CALL I-ROBOT-EVILNESS + SET 'SLEEPY-LEVEL,0 + SET 'SUIT-PRESSED,FALSE-VALUE + SET 'FLOYD-ANGUISHED,FALSE-VALUE + RANDOM 80 + ADD 1600,STACK >INTERNAL-MOVES + GRTR? DAY,2 \?ELS23 + SET 'MOVES,9947 + JUMP ?CND21 +?ELS23: ADD SCORE,3 >SCORE + SET 'MOVES,INTERNAL-MOVES +?CND21: FCLEAR AUTO-DOOR,TOUCHBIT + CALL QUEUE,I-SLEEP-WARNINGS,5900 + CALL ULTIMATELY-IN?,BOTTLE,VACUUM-STORAGE + ZERO? STACK \?CND26 + FSET? BOTTLE,OPENBIT \?CND29 + SET 'CARBON-DIOXIDE-GONE,TRUE-VALUE +?CND29: SET 'FROZEN-LEVEL,0 + CALL DEQUEUE,I-MELT-CARBON-DIOXIDE +?CND26: CALL ULTIMATELY-IN?,EXPLOSIVE,VACUUM-STORAGE + ZERO? STACK \?CND32 + REMOVE EXPLOSIVE + CALL DEQUEUE,I-EXPLOSIVE-MELT +?CND32: FSET? HEADLAMP,ONBIT \?CND35 + FCLEAR HEADLAMP,ACTIVEBIT + FCLEAR HEADLAMP,ONBIT + SET 'HEADLAMP-COUNTER,0 +?CND35: FSET OSTRICH,TOUCHBIT + IN? OSTRICH,HERE \?CND38 + IN? OSTRICH-NIP,HERE \?CND38 + REMOVE OSTRICH-NIP +?CND38: CALL ROB,PROTAGONIST,HERE + USL + PRINTI "***** NOVEM " + ADD DAY,3 + PRINTN STACK + PRINTI ", 11349 *****" + CRLF + CRLF + PRINTI "You awake " + CALL QUEUED?,I-LIGHTS-OUT + ZERO? STACK /?ELS45 + CALL DEQUEUE,I-LIGHTS-OUT + CALL I-LIGHTS-OUT,TRUE-VALUE + PRINTI "slowly, aware that something has changed. Aha! The lights have all gone out while you slept!" + JUMP ?CND43 +?ELS45: LOC PROTAGONIST + EQUAL? STACK,BED,PILOT-SEAT,COPILOT-SEAT \?ELS47 + PRINTI "feeling refreshed and ready to face anything this new day might care to throw at you." + JUMP ?CND43 +?ELS47: PRINTI "and slowly stand up, feeling stiff from your uncomfortable night's sleep." +?CND43: EQUAL? DAY,4 \?CND50 + FSET? SAFE,OPENBIT /?ELS55 + CALL QUEUE,I-LIGHTS-OUT,177 + JUMP ?CND50 +?ELS55: CALL QUEUED?,I-ANNOUNCEMENT + ZERO? STACK \?CND50 + CALL QUEUE,I-ANNOUNCEMENT,383 +?CND50: GRTR? HUNGER-LEVEL,0 \?ELS60 + SET 'HUNGER-LEVEL,3 + CALL QUEUE,I-HUNGER-WARNINGS,200 + PRINTI " You're also incredibly famished. Better get some breakfast!" + JUMP ?CND58 +?ELS60: CALL QUEUE,I-HUNGER-WARNINGS,400 +?CND58: CRLF + CALL RUNNING?,I-SPACETRUCK + ZERO? STACK /?CND63 + EQUAL? COURSE-PICKED,RIGHT-COURSE \?CND63 + CALL QUEUE,I-WELDER,-1 + CALL QUEUE,I-FLOYD,-1 + CALL QUEUE,I-PLATO,750 + CALL DEQUEUE,I-SPACETRUCK + ADD SCORE,5 >SCORE + SET 'SPACETRUCK-COUNTER,5 + PRINTI " You notice that, while you slept, the truck has docked itself in one of the space station's docking bays." + CRLF +?CND63: EQUAL? DAY,3 \?CND68 + FCLEAR ELEVATOR,WEIGHTLESSBIT + FSET EXERCISE-MACHINE,TOUCHBIT + MOVE EXERCISE-MACHINE,COMPUTER-CONTROL + FSET? CHRONOMETER,WORNBIT \?CND68 + PRINTI " " + CALL PERFORM,V?EXAMINE,CHRONOMETER +?CND68: FSET? FLOYD,ACTIVEBIT \?CND74 + IN? FLOYD,FACTORY /?CND74 + SET 'FLOYD-SPOKE,TRUE-VALUE + PRINTI " Floyd " + GRTR? ROBOT-EVILNESS,12 \?ELS81 + PRINTI "is rudely kicking your mattress. ""Trot it! Will you kripping wake up already? Floyd's getting bored!""" + CRLF + JUMP ?CND79 +?ELS81: PRINTI "bounces impatiently at " + IN? PROTAGONIST,BED \?ELS86 + PRINTI "the foot of the bed" + JUMP ?CND84 +?ELS86: PRINTI "your side" +?CND84: ZERO? PLATO-INTRODUCED /?CND89 + ZERO? PLATO-ATTACK-COUNTER \?CND89 + MOVE PLATO,HERE + PRINTI ". Plato is nearby, leafing through his book" +?CND89: ZERO? PLATO-INTRODUCED \?ELS96 + PRINTI ", along with a slightly older-looking robot. ""Wake up and meet Floyd's new friend,"" says Floyd with unbounded exuberance and a wide grin." + CRLF + CALL I-PLATO,TRUE-VALUE + JUMP ?CND79 +?ELS96: PRINTI ". ""About time you woke up, you lazy " + GRTR? ROBOT-EVILNESS,8 \?ELS101 + PRINTI "slob!"" says Floyd. ""It's getting pretty trotting dull around her" + JUMP ?CND99 +?ELS101: PRINTI "bones!"" says Floyd. ""Let's explore around some mor" +?CND99: PRINTI "e!""" + CRLF +?CND79: MOVE FLOYD,HERE +?CND74: CRLF + CALL V-LOOK + RSTACK + + + .FUNCT I-HUNGER-WARNINGS + GRTR? PLATO-ATTACK-COUNTER,0 \?CND1 + IN? PLATO,HERE \?CND1 + CALL QUEUE,I-HUNGER-WARNINGS,2 + RFALSE +?CND1: INC 'HUNGER-LEVEL + PRINTI " " + EQUAL? HUNGER-LEVEL,1 \?ELS10 + CALL QUEUE,I-HUNGER-WARNINGS,450 + PRINTR "A growl from your stomach warns that you're getting pretty hungry and thirsty." +?ELS10: EQUAL? HUNGER-LEVEL,2 \?ELS12 + CALL QUEUE,I-HUNGER-WARNINGS,300 + PRINTR "You're now really ravenous and your lips are quite parched." +?ELS12: EQUAL? HUNGER-LEVEL,3 \?ELS14 + CALL QUEUE,I-HUNGER-WARNINGS,150 + PRINTR "You're starting to feel faint from lack of food and liquid." +?ELS14: EQUAL? HUNGER-LEVEL,4 \?ELS16 + CALL QUEUE,I-HUNGER-WARNINGS,150 + PRINTR "If you don't eat or drink something in a few millichrons, you'll probably pass out." +?ELS16: EQUAL? HUNGER-LEVEL,5 \FALSE + CALL JIGS-UP,STR?104 + RSTACK + + + .FUNCT WELDER-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + EQUAL? WELDER-COUNTER,1 \?ELS10 + PRINTI "This welder, which is marked ""Welder Number " + GET WELDER-TABLE,WELDER-TABLE-POINTER + PRINTN STACK + PRINTR ","" seems to be moving purposefully toward you, its welding extensions quivering with...excitement?" +?ELS10: EQUAL? WELDER-COUNTER,2 \?ELS12 + PRINTR "There definitely seems to be something menacing about its behavior." +?ELS12: PRINTR "The welder is now almost upon you!" +?ELS5: EQUAL? PRSA,V?SHOOT \?ELS16 + REMOVE WELDER + DEC 'NUMBER-OF-WELDERS + SET 'WELDER-COUNTER,0 + ZERO? NUMBER-OF-WELDERS \?CND17 + CALL DEQUEUE,I-WELDER +?CND17: GET WELDER-TABLE,NUMBER-OF-WELDERS + PUT WELDER-TABLE,WELDER-TABLE-POINTER,STACK + PRINTI "The welder is enveloped by red-hot plasma rays. It glows ever brighter in the heat of the rays, seems to shimmer like a mirage, and then suddenly vanishes! A wave of hot vapor pushes you backwards." + IN? OSTRICH,HERE \?ELS24 + FSET? OSTRICH,TOUCHBIT \?ELS24 + PRINTC 32 + CALL PERFORM,V?SCARE,OSTRICH + RSTACK +?ELS24: CRLF + RTRUE +?ELS16: EQUAL? PRSA,V?OFF \?ELS30 + PRINTR "There's no apparent on-off switch." +?ELS30: EQUAL? PRSA,V?ON \?ELS32 + PRINTR "It is!" +?ELS32: EQUAL? PRSA,V?MUNG,V?KILL \FALSE + PRINTR "It's doubtful that you could even make a dent in the welder." + + + .FUNCT I-WELDER + IN? WELDER,HERE \?ELS5 + PRINTI " " + INC 'WELDER-COUNTER + EQUAL? WELDER-COUNTER,2 \?ELS8 + PRINTI "The welder moves closer. " + JUMP ?CND6 +?ELS8: EQUAL? WELDER-COUNTER,3 /?CND6 + CALL JIGS-UP,STR?105 +?CND6: CALL PERFORM,V?EXAMINE,WELDER + RSTACK +?ELS5: GRTR? WELDER-COUNTER,0 \?ELS12 + REMOVE WELDER + SET 'WELDER-COUNTER,0 + PRINTR " Nearby, you hear the welder move off in another direction." +?ELS12: FSET? HERE,NWELDERBIT /FALSE + IN? PROTAGONIST,BED /FALSE + ZERO? LIT /FALSE + RANDOM 100 + LESS? NUMBER-OF-WELDERS,STACK /FALSE + GRTR? PLATO-ATTACK-COUNTER,0 \?CND17 + IN? PLATO,HERE /FALSE +?CND17: MOVE WELDER,HERE + INC 'WELDER-COUNTER + RANDOM NUMBER-OF-WELDERS >WELDER-TABLE-POINTER + PRINTI " You spot a " + PRINTD WELDER + PRINTI " approaching. " + FSET? WELDER,TOUCHBIT /?CND22 + FSET WELDER,TOUCHBIT + PRINTI "A " + PRINTD WELDER + PRINTI " is a very simple machine which repairs any leaks or holes in the hull of any sort of space habitat. Because of the potentially catastrophic effects of a break in the integrity of a hull on the habitat's air supply, " + PRINTD WELDER + PRINTI "s are kept active at all times, roaming around with their sensing devices alert for the tiniest leak. " +?CND22: CALL PERFORM,V?EXAMINE,WELDER + CALL STOP + RSTACK + + + .FUNCT TOUCHING?,THING + EQUAL? PRSO,THING \?ELS5 + EQUAL? PRSA,V?TAKE,V?TOUCH,V?SHAKE /TRUE + EQUAL? PRSA,V?CLEAN,V?KISS,V?ENTER /TRUE + EQUAL? PRSA,V?PUSH,V?CLOSE,V?LOOK-UNDER /TRUE + EQUAL? PRSA,V?MOVE,V?OPEN,V?KNOCK /TRUE + EQUAL? PRSA,V?SET,V?SHAKE,V?RAISE /TRUE + EQUAL? PRSA,V?UNLOCK,V?LOCK,V?HUG /TRUE + EQUAL? PRSA,V?CLIMB-UP,V?CLIMB-DOWN,V?CLIMB-ON /TRUE + EQUAL? PRSA,V?ON,V?OFF,V?THROW /TRUE + EQUAL? PRSA,V?TASTE,V?BITE,V?TICKLE /TRUE + EQUAL? PRSA,V?LOOK-INSIDE,V?STAND-ON,V?TIE /TRUE + EQUAL? PRSA,V?MUNG,V?KICK,V?KILL /TRUE + EQUAL? PRSA,V?KNOCK,V?CUT,V?PUSH /TRUE + EQUAL? PRSA,V?SEARCH /TRUE +?ELS5: EQUAL? PRSI,THING \FALSE + EQUAL? PRSA,V?PUT-ON,V?PUT,V?GIVE \FALSE + RTRUE + + + .FUNCT CANT-SEE,OBJ=0,STRING=0 + SET 'P-WON,FALSE-VALUE + PRINT YOU-CANT + PRINTI "see" + ZERO? OBJ /?THN4 + ZERO? OBJ /?CND1 + CALL NAME?,OBJ + ZERO? STACK \?CND1 +?THN4: PRINTI " any" +?CND1: ZERO? OBJ \?ELS10 + PRINTC 32 + PRINT STRING + JUMP ?CND8 +?ELS10: EQUAL? OBJ,PRSI \?ELS12 + CALL PRSI-PRINT + JUMP ?CND8 +?ELS12: CALL PRSO-PRINT +?CND8: PRINTI " here." + CRLF + CALL STOP + RSTACK + + + .FUNCT CANT-VERB-A-PRSO,STRING + PRINT YOU-CANT + PRINT STRING + CALL APRINT,PRSO + PRINTR "!" + + + .FUNCT TELL-HIT-HEAD + PRINTI "You hit your head against" + CALL TPRINT-PRSO + PRINTR " as you attempt this." + + + .FUNCT REMOVE-CAREFULLY,OBJ,ALSO=0 + ZERO? TIMER-CONNECTED /?ELS3 + EQUAL? OBJ,TIMER,DETONATOR \?ELS3 + SET 'TIMER-CONNECTED,FALSE-VALUE + SET 'ALSO,TRUE-VALUE + PRINTI " (The timer is, of course, no longer attached to the detonator.)" + JUMP ?CND1 +?ELS3: ZERO? EXPLOSIVE-CONNECTED /?CND1 + EQUAL? OBJ,EXPLOSIVE,DETONATOR \?CND1 + SET 'EXPLOSIVE-CONNECTED,FALSE-VALUE + PRINTI " (The explosive is, of course, " + ZERO? ALSO /?CND10 + PRINTI "also " +?CND10: PRINTI "no longer attached to the detonator.)" +?CND1: FSET OBJ,TOUCHBIT + FCLEAR OBJ,TRYTAKEBIT + REMOVE OBJ + RTRUE + + + .FUNCT NOUN-USED,TEST-NOUN,OBJ + EQUAL? PRSO,OBJ \?ELS5 + GET P-NAMW,0 + EQUAL? STACK,TEST-NOUN /TRUE +?ELS5: EQUAL? PRSI,OBJ \FALSE + GET P-NAMW,1 + EQUAL? STACK,TEST-NOUN \FALSE + RTRUE + + + .FUNCT ADJ-USED,TEST-ADJ,OBJ + EQUAL? PRSO,OBJ \?ELS5 + GET P-ADJW,0 + EQUAL? TEST-ADJ,STACK /TRUE +?ELS5: EQUAL? PRSI,OBJ \FALSE + GET P-ADJW,1 + EQUAL? TEST-ADJ,STACK \FALSE + RTRUE + + + .FUNCT OFF-VEHICLE?,OBJ + EQUAL? OBJ,BED \FALSE + RTRUE + + + .FUNCT OPEN-CLOSED,OBJ + FSET? OBJ,OPENBIT \?ELS5 + PRINTI "open" + RTRUE +?ELS5: PRINTI "closed" + RTRUE + + + .FUNCT WEE + SET 'AWAITING-REPLY,1 + ADD C-ELAPSED,2 + CALL QUEUE,I-REPLY,STACK + PRINTR "Wasn't that fun?" + + + .FUNCT CANT-REACH,OBJ + PRINT YOU-CANT + PRINTI "reach" + CALL TPRINT,OBJ + ZERO? HANGING-IN-AIR /?ELS3 + PRINTI " while you're hanging way up here" + JUMP ?CND1 +?ELS3: IN? PROTAGONIST,HERE /?CND1 + PRINTI " from" + LOC PROTAGONIST + CALL TPRINT,STACK +?CND1: PRINT PERIOD-CR + CALL STOP + RSTACK + + + .FUNCT DO-FIRST,STRING,OBJ=0 + PRINT YOULL-HAVE-TO + PRINT STRING + ZERO? OBJ /?CND1 + CALL TPRINT,OBJ +?CND1: PRINTI " first." + CRLF + CALL STOP + RSTACK + + + .FUNCT DOESNT-FIT,STRING + PRINTI "Unsurprisingly," + CALL TPRINT-PRSO + PRINTI " doesn't fit the " + PRINT STRING + PRINT PERIOD-CR + RTRUE + + + .FUNCT NOT-IN + PRINTI "But" + CALL TPRINT-PRSO + PRINTI " isn't " + FSET? PRSI,ACTORBIT \?ELS3 + PRINTI "being held by" + JUMP ?CND1 +?ELS3: FSET? PRSI,SURFACEBIT \?ELS5 + PRINTI "on" + JUMP ?CND1 +?ELS5: PRINTI "in" +?CND1: CALL TRPRINT,PRSI + RSTACK + + + .FUNCT CANT-USE-THAT-WAY,STRING + PRINTC 91 + PRINT YOU-CANT + PRINTI "use " + PRINT STRING + PRINTR " that way.]" + + + .FUNCT RECOGNIZE + SET 'P-WON,FALSE-VALUE + PRINTR "[That sentence isn't one I recognize.]" + + + .FUNCT PRONOUN + EQUAL? PRSO,ME \?ELS5 + PRINTI "You" + RTRUE +?ELS5: FSET? PRSO,PLURALBIT \?ELS7 + PRINTI "They" + RTRUE +?ELS7: FSET? PRSO,ACTORBIT \?ELS9 + PRINTI "He" + RTRUE +?ELS9: PRINTI "It" + RTRUE + + + .FUNCT REFERRING,HIM-HER=0 + PRINTI "I don't see wh" + ZERO? HIM-HER /?ELS3 + PRINTC 111 + JUMP ?CND1 +?ELS3: PRINTI "at" +?CND1: PRINTR " you're referring to." + + + .FUNCT ANTI-LITTER,OBJ + REMOVE OBJ + PRINTI ". The " + EQUAL? OBJ,SOUP \?ELS3 + PRINTI "bowl" + JUMP ?CND1 +?ELS3: PRINTI "cup" +?CND1: PRINTR " instantly vaporizes, part of the galactic anti-litter program." + + .ENDI diff --git a/globals.zil b/globals.zil new file mode 100644 index 0000000..a43c4fc --- /dev/null +++ b/globals.zil @@ -0,0 +1,1448 @@ +"GLOBALS for + STATIONFALL + (c) Copyright 1987 Infocom, Inc. All Rights Reserved." + + + + + + + + + + + + + + + + + + + + + +> + + + +)> + + + + + +; + + + ) + (T + + > + )>)>> + + + + + + > + + ) + ( + > + + ) + ( + + > + + ) + ( + ) + (T + + )>) + ( + )>> + + + + + + + +; + + + +)) + + > + + ) + ( + ) + (T + + >)> + > + ) + ( + > + )> + > + > + )>) + (T + )> + + ) + (T + )>) + (T + + ) + (T + )> + + > + )> + + + > + )> + )> + > + + + + > + ) + (T + )>> + + + ) + (T + )>> + + if PRSO/PRSI ready to use" +;"Special-case code goes here. returns # of matches. If 1, +then P-MOBY-FOUND is it. You can treat the 0 and >1 cases alike or differently. +Always return RFALSE (not handled) if you have resolved the problem." + > + )> + + )> + + ) + (T + )> + ) + ( + > ,P?GENERIC>>>> +;"Protocol: returns .OBJ if that's the one to use + ,NOT-HERE-OBJECT if case was handled and msg TELLed + <> if WHICH-PRINT should be called" + )> + + ) + (.PRSO? + + ) + (T + )> + ) + (T + ,NOT-HERE-OBJECT)>> + + + )> + + )>) + (.PRSO? + <>>) + (T + <>>)>> + + + + + + ) + ( + ) + ( + )>> + + + + + > + )>> + + + + + > + + + ) + ( + > + ) + ( + + )>> + + + + + ) + ( + ) + ( + ) + ( + + > + + + ) + ( + > + + + ) + (T + )>) + ( + > + + + ) + (T + + )>)>> + +; + +; + ) + ( + ) + ( + > + )>> + + + + + + ) + ( + > + ) + ( + ) + ( + > + ) + (T + )>) + ( + + > + )>> + + + + + + ) + ( + ) + ( + ) + ( + + > + )> + ) + ( + ) + (T + )>)>> + + + + + + ) + (T + )>) + ( + > + ) + ( + + )>> + + + + + ) + ( + > + + )>> + + + + + > + ) + ( + > + + ) + (> + >> + )>> + + + + + ) + ( + )>> + + + + + > + ) + ( + > + + ) + (T + )>) + ( + + ) + (T + )> + ) + ( + ) + ;( ;"handled in PRE-PUT" + > + + ) + ( + ) + ( + > + + )>> + + + + + > + + )>> + + + + + + + + ) + ( + ) + ( + > + + ) + ( + > + + ) + ( + ) + ( + ) + ( + > + ) + ( + ) + ( + ) + ( + ) + ( + ) + ( + ) + ( + )>> + + + + + + + + + )>> + + + > + + ) + ( + > + + > + + >> + + > + + + ) + ( + > + + + )> + + + + + ) + ( + > + > + + ) + (T + )>) + ( + ) + ( 3> + ) + (T + )>) + ( + )>> + + + >> + ) + ( + >> + ) + (T + )>> + + + + + 1>> + + + )>> + + + + + + + + + ) + ( + )>> + +;"sleeping" + + + + + >> + ) + ( + + + + + ) + (T + + )>) + ( + > + ) + ( + + ) + ( + > + + ) + ( + > + ) + ( + + >> + + + + )>> + + + + + )>> + + + + + > + + )> + > + + + + + ) + ( + + ) + ( + + ) + ( + + ) + ( + + ) + (T ;"SLEEPY-LEVEL is 5" + + ) + ( + + ) + (T + + + >> + )> + )> + )>> + + + )> + + + > + +> + + + + ) + (> + > + + + ) + (T + )> + + ) + ( ;"still on ship" + + ) + (> + + >> + ) + ( + "..." CR CR>)> + > + > + + + > + > + >> + + ) + (T + > + )> + + + > + + )> + + )> + > + + )> + + + + )> + + + > + )> + + + ", 11349 *****" CR CR "You awake "> + + + + ) + ( ,BED ,PILOT-SEAT ,COPILOT-SEAT> + ) + (T + )> + + > + ) + (> + )>)> + + + + ) + (T + )> + + + > + + ;"to get ints. in the proper order" + + + > + + )> + + + + + + + )>)> + + >> + + + + ) + (T + + + ) + (T + )> + > + + )> + + + ) + (T + + + ) + (T + )> + )>)> + )> + + > + +;"thirst and hunger" + + + + + > + + )> + > + + + + ) + ( + + ) + ( + + ) + ( + + ) + ( + )>> + +;"the welding menace" + + + + + + +",\" seems to be moving purposefully toward you, +its welding extensions quivering with...excitement?" CR>) + ( + ) + (T + )>) + ( + + > + + + )> + > + + + > + + ) + (T + )>) + ( + ) + ( + ) + ( + )>> + + ;"how many are roaming around the station?" + + ;"tells the # of currently attacking welder" + +> ;"works on the same principle as new PICK-ONE" + + ;"how close is the attacking welder to you?" + + + + > + + ) + (> + )> + ) + ( + + + ) + (> + > + ,LIT + > + + > + )> + + > + > + + > + + )> + + ) + (T + )>> + +;"utility routines and shared strings" + + + + + + + + + + + + + + + >> + ) + ( + > + ) + (T + )>> + +) (STRING <>)) + > + + + + >>> + )> + + ) + ( + ) + (T + )> + + > + +> + +> + +)) + > + > + + ) + (> + > + + )> + )> + + + > + + + .TEST-NOUN>> + ) + ( + .TEST-NOUN>> + ) + (T + )>> + + + >> + ) + ( + >> + ) + (T + )>> + + + ) + (T + )>> + + + ) + (T + )>> + + + > + > + + + ) + (> + >)> + + > + +)) + + )> + + > + +> + + + + ) + ( + ) + (T + )> + > + +> + +> + > + + + ) + ( + ) + ;( + ) + ( + ) + (T + )>> + +)) + + ) + (T + )> + > + + + + + ) + (T + )> + > + +;> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/misc.zap b/misc.zap new file mode 100644 index 0000000..1eb8008 --- /dev/null +++ b/misc.zap @@ -0,0 +1,569 @@ + + + .FUNCT PICK-ONE,TBL,LENGTH,CNT,RND,MSG,RFROB + GET TBL,0 >LENGTH + GET TBL,1 >CNT + DEC 'LENGTH + ADD TBL,2 >TBL + MUL CNT,2 + ADD TBL,STACK >RFROB + SUB LENGTH,CNT + RANDOM STACK >RND + GET RFROB,RND >MSG + GET RFROB,1 + PUT RFROB,RND,STACK + PUT RFROB,1,MSG + INC 'CNT + EQUAL? CNT,LENGTH \?CND1 + SET 'CNT,0 +?CND1: PUT TBL,0,CNT + RETURN MSG + + + .FUNCT APRINT,OBJ + FSET? OBJ,NARTICLEBIT \?ELS3 + PRINTC 32 + JUMP ?CND1 +?ELS3: FSET? OBJ,VOWELBIT \?ELS5 + PRINTI " an " + JUMP ?CND1 +?ELS5: PRINTI " a " +?CND1: PRINTD OBJ + RTRUE + + + .FUNCT TPRINT,OBJ + FSET? OBJ,NARTICLEBIT \?ELS3 + PRINTC 32 + JUMP ?CND1 +?ELS3: PRINTI " the " +?CND1: PRINTD OBJ + RTRUE + + + .FUNCT TPRINT-PRSO + CALL TPRINT,PRSO + RSTACK + + + .FUNCT TPRINT-PRSI + CALL TPRINT,PRSI + RSTACK + + + .FUNCT ARPRINT,OBJ + CALL APRINT,OBJ + PRINT PERIOD-CR + RTRUE + + + .FUNCT TRPRINT,OBJ + CALL TPRINT,OBJ + PRINT PERIOD-CR + RTRUE + + + .FUNCT GO +START:: + +?FCN: SET 'WINNER,PROTAGONIST + SET 'HERE,DECK-FIVE + RANDOM 1220 + ADD 4430,STACK >INTERNAL-MOVES + SET 'MOVES,INTERNAL-MOVES + SUB 8100,INTERNAL-MOVES + CALL QUEUE,I-SLEEP-WARNINGS,STACK + CALL QUEUE,I-HUNGER-WARNINGS,1330 + PRINTI "It's been five years since your planetfall on Resida. Your heroics in saving that doomed world resulted in a big promotion, but your life of dull scrubwork has been replaced by a life of dull paperwork. Today you find yourself amidst the administrative maze of Deck Five on a typically exciting task: an emergency mission to Space Station Gamma Delta Gamma 777-G 59/59 Sector Alpha-Mu-79 to pick up a supply of " + PRINT FORM-NAME + PRINT ELLIPSIS + CALL V-VERSION + USL + CRLF + CALL V-LOOK + CALL MAIN-LOOP + JUMP ?FCN + + + .FUNCT MAIN-LOOP,TRASH +?PRG1: CALL MAIN-LOOP-1 >TRASH + JUMP ?PRG1 + + + .FUNCT MAIN-LOOP-1,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,?TMP1 + SET 'CNT,0 + SET 'OBJ,FALSE-VALUE + SET 'PTBL,TRUE-VALUE + CALL PARSER >P-WON + ZERO? P-WON /?ELS3 + GET P-PRSI,P-MATCHLEN >ICNT + GET P-PRSO,P-MATCHLEN >OCNT + EQUAL? PRSA,V?WALK /?CND4 + ZERO? P-IT-OBJECT /?CND4 + CALL ACCESSIBLE?,P-IT-OBJECT + ZERO? STACK /?CND4 + SET 'TMP,FALSE-VALUE +?PRG9: IGRTR? 'CNT,ICNT /?REP10 + GET P-PRSI,CNT + EQUAL? STACK,IT \?PRG9 + PUT P-PRSI,CNT,P-IT-OBJECT + SET 'TMP,TRUE-VALUE +?REP10: ZERO? TMP \?CND19 + SET 'CNT,0 +?PRG22: IGRTR? 'CNT,OCNT /?CND19 + GET P-PRSO,CNT + EQUAL? STACK,IT \?PRG22 + PUT P-PRSO,CNT,P-IT-OBJECT +?CND19: SET 'CNT,0 +?CND4: ZERO? OCNT \?ELS36 + PUSH OCNT + JUMP ?CND32 +?ELS36: GRTR? OCNT,1 \?ELS38 + SET 'TBL,P-PRSO + ZERO? ICNT \?ELS41 + SET 'OBJ,FALSE-VALUE + JUMP ?CND39 +?ELS41: GET P-PRSI,1 >OBJ +?CND39: PUSH OCNT + JUMP ?CND32 +?ELS38: GRTR? ICNT,1 \?ELS45 + SET 'PTBL,FALSE-VALUE + SET 'TBL,P-PRSI + GET P-PRSO,1 >OBJ + PUSH ICNT + JUMP ?CND32 +?ELS45: PUSH 1 +?CND32: SET 'NUM,STACK + ZERO? OBJ \?CND48 + EQUAL? ICNT,1 \?CND48 + GET P-PRSI,1 >OBJ +?CND48: EQUAL? PRSA,V?WALK \?ELS55 + CALL PERFORM-PRSA,PRSO >V + JUMP ?CND53 +?ELS55: ZERO? NUM \?ELS57 + GETB P-SYNTAX,P-SBITS + BAND STACK,P-SONUMS + ZERO? STACK \?ELS60 + CALL PERFORM-PRSA >V + SET 'PRSO,FALSE-VALUE + JUMP ?CND53 +?ELS60: ZERO? LIT \?ELS62 + PRINT TOO-DARK + CRLF + CALL STOP + JUMP ?CND53 +?ELS62: PRINTI "There isn't anything to " + GET P-ITBL,P-VERBN >TMP + EQUAL? PRSA,V?TELL \?ELS67 + PRINTI "talk to" + JUMP ?CND65 +?ELS67: ZERO? P-OFLAG \?THN70 + ZERO? P-MERGED /?ELS69 +?THN70: GET TMP,0 + PRINTB STACK + JUMP ?CND65 +?ELS69: GETB TMP,2 >?TMP1 + GETB TMP,3 + CALL WORD-PRINT,?TMP1,STACK +?CND65: PRINTC 33 + CRLF + SET 'V,FALSE-VALUE + CALL STOP + JUMP ?CND53 +?ELS57: SET 'P-NOT-HERE,0 + SET 'P-MULT,FALSE-VALUE + GRTR? NUM,1 \?CND76 + SET 'P-MULT,TRUE-VALUE +?CND76: SET 'TMP,FALSE-VALUE +?PRG79: IGRTR? 'CNT,NUM \?ELS83 + GRTR? P-NOT-HERE,0 \?ELS86 + PRINTI "[The " + EQUAL? P-NOT-HERE,NUM /?CND87 + PRINTI "other " +?CND87: PRINTI "object" + EQUAL? P-NOT-HERE,1 /?CND90 + PRINTC 115 +?CND90: PRINTI " that you mentioned " + EQUAL? P-NOT-HERE,1 /?ELS95 + PRINTI "are" + JUMP ?CND93 +?ELS95: PRINTI "is" +?CND93: PRINTI "n't here.]" + CRLF + JUMP ?CND53 +?ELS86: ZERO? TMP \?CND53 + CALL REFERRING + JUMP ?CND53 +?ELS83: ZERO? PTBL /?ELS104 + GET P-PRSO,CNT >OBJ1 + JUMP ?CND102 +?ELS104: GET P-PRSI,CNT >OBJ1 +?CND102: ZERO? PTBL /?ELS112 + PUSH OBJ1 + JUMP ?CND108 +?ELS112: PUSH OBJ +?CND108: SET 'PRSO,STACK + ZERO? PTBL /?ELS120 + PUSH OBJ + JUMP ?CND116 +?ELS120: PUSH OBJ1 +?CND116: SET 'PRSI,STACK + GRTR? NUM,1 /?THN127 + GET P-ITBL,P-NC1 + GET STACK,0 + EQUAL? STACK,W?ALL,W?BOTH,W?EVERYT \?CND124 +?THN127: CALL DONT-ALL,OBJ1 + ZERO? STACK \?PRG79 + EQUAL? OBJ1,IT \?ELS136 + PRINTD P-IT-OBJECT + JUMP ?CND134 +?ELS136: EQUAL? OBJ1,HIM \?ELS138 + PRINTD P-HIM-OBJECT + JUMP ?CND134 +?ELS138: PRINTD OBJ1 +?CND134: PRINTI ": " +?CND124: SET 'TMP,TRUE-VALUE + CALL PERFORM-PRSA,PRSO,PRSI >V + EQUAL? V,M-FATAL \?PRG79 +?CND53: EQUAL? V,M-FATAL \?CND144 + SET 'P-CONT,FALSE-VALUE +?CND144: CALL CLOCKER-VERB? + ZERO? STACK /?ELS149 + EQUAL? PRSA,V?TELL /?ELS149 + ZERO? P-WON /?ELS149 + CALL RUNNING?,I-SPACETRUCK + ZERO? STACK /?ELS154 + LESS? SPACETRUCK-COUNTER,5 \?ELS154 + SET 'C-ELAPSED,240 + JUMP ?CND152 +?ELS154: CALL QUEUED?,I-TIMER + ZERO? STACK /?CND152 + SET 'C-ELAPSED,10 +?CND152: GETP HERE,P?ACTION + CALL STACK,M-END >V + JUMP ?CND1 +?ELS149: SET 'C-ELAPSED,0 + JUMP ?CND1 +?ELS3: SET 'P-CONT,FALSE-VALUE +?CND1: ZERO? P-WON /FALSE + ADD INTERNAL-MOVES,C-ELAPSED >INTERNAL-MOVES + FSET? CHRONOMETER,WORNBIT \?ELS171 + LESS? DAY,3 \?ELS174 + SET 'MOVES,INTERNAL-MOVES + JUMP ?CND169 +?ELS174: SET 'MOVES,9947 + JUMP ?CND169 +?ELS171: SET 'MOVES,0 +?CND169: ZERO? C-ELAPSED /?CND179 + CALL CLOCKER >V +?CND179: SET 'POSTPONE-ATTACK,FALSE-VALUE + SET 'C-ELAPSED,7 + SET 'P-PRSA-WORD,FALSE-VALUE + SET 'PRSA,FALSE-VALUE + SET 'PRSO,FALSE-VALUE + SET 'PRSI,FALSE-VALUE + RETURN PRSI + + + .FUNCT DONT-ALL,OBJ1,L + LOC OBJ1 >L + EQUAL? OBJ1,NOT-HERE-OBJECT \?ELS5 + INC 'P-NOT-HERE + RTRUE +?ELS5: EQUAL? PRSA,V?TAKE \?ELS7 + ZERO? PRSI /?ELS7 + IN? PRSO,PRSI \TRUE +?ELS7: CALL ACCESSIBLE?,OBJ1 + ZERO? STACK /TRUE + EQUAL? P-GETFLAGS,P-ALL \FALSE + ZERO? PRSI /?ELS18 + EQUAL? PRSO,PRSI /TRUE +?ELS18: EQUAL? PRSA,V?TAKE \?ELS22 + FSET? OBJ1,TAKEBIT /?ELS27 + FSET? OBJ1,TRYTAKEBIT \TRUE +?ELS27: EQUAL? L,WINNER,HERE,PRSI /?ELS31 + LOC WINNER + EQUAL? L,STACK /?ELS31 + FSET? L,SURFACEBIT \TRUE + FSET? L,TAKEBIT /TRUE + RFALSE +?ELS31: ZERO? PRSI \FALSE + CALL ULTIMATELY-IN?,PRSO + ZERO? STACK /FALSE + RTRUE +?ELS22: EQUAL? PRSA,V?PUT-ON,V?PUT,V?DROP /?THN53 + EQUAL? PRSA,V?SGIVE,V?GIVE \?ELS50 +?THN53: IN? OBJ1,WINNER \TRUE +?ELS50: EQUAL? PRSA,V?PUT-ON,V?PUT \FALSE + IN? PRSO,WINNER /FALSE + CALL ULTIMATELY-IN?,PRSO,PRSI + ZERO? STACK \TRUE + RFALSE + + + .FUNCT CLOCKER-VERB? + EQUAL? PROTAGONIST,WINNER \TRUE + EQUAL? PRSA,V?SCORE,V?HELP,V?VERSION /FALSE + EQUAL? PRSA,V?$COMMAND,V?$UNRECORD,V?$RECORD /FALSE + EQUAL? PRSA,V?RESTORE,V?SAVE,V?$RANDOM /FALSE + EQUAL? PRSA,V?SCRIPT,V?QUIT,V?RESTART /FALSE + EQUAL? PRSA,V?SUPER-BRIEF,V?BRIEF,V?UNSCRIPT /FALSE + EQUAL? PRSA,V?VERBOSE \TRUE + RFALSE + + + .FUNCT FAKE-ORPHAN,IT-WAS-USED=0,TMP,?TMP1 + CALL ORPHAN,P-SYNTAX,FALSE-VALUE + GET P-OTBL,P-VERBN >TMP + PRINTI "[Be specific: Wh" + ZERO? IT-WAS-USED /?ELS3 + PRINTI "at object" + JUMP ?CND1 +?ELS3: PRINTC 111 +?CND1: PRINTI " do you want to " + ZERO? TMP \?ELS9 + PRINTI "tell" + JUMP ?CND7 +?ELS9: GETB P-VTBL,2 + ZERO? STACK \?ELS11 + GET TMP,0 + PRINTB STACK + JUMP ?CND7 +?ELS11: GETB TMP,2 >?TMP1 + GETB TMP,3 + CALL WORD-PRINT,?TMP1,STACK + PUTB P-VTBL,2,0 +?CND7: SET 'P-OFLAG,TRUE-VALUE + SET 'P-WON,FALSE-VALUE + GETB P-SYNTAX,P-SPREP1 + CALL PREP-PRINT,STACK + PRINTR "?]" + + + .FUNCT PERFORM-PRSA,O=0,I=0 + CALL PERFORM,PRSA,O,I + RTRUE + + + .FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI + ZERO? DEBUG /?CND1 + PRINTI "[Perform: " + PRINTN A + ZERO? O /?CND5 + PRINTI " / PRSO = " + EQUAL? A,V?WALK /?ELS11 + PRINTD O + JUMP ?CND5 +?ELS11: PRINTN O +?CND5: ZERO? I /?CND14 + PRINTI " / PRSI = " + PRINTD I +?CND14: PRINTC 93 + CRLF +?CND1: SET 'OA,PRSA + SET 'OO,PRSO + SET 'OI,PRSI + SET 'PRSA,A + ZERO? P-WALK-DIR \?CND18 + EQUAL? IT,O,I \?CND18 + CALL VISIBLE?,P-IT-OBJECT + ZERO? STACK /?ELS25 + EQUAL? IT,O \?ELS28 + SET 'O,P-IT-OBJECT + JUMP ?CND18 +?ELS28: SET 'I,P-IT-OBJECT + JUMP ?CND18 +?ELS25: ZERO? I \?ELS35 + CALL FAKE-ORPHAN,TRUE-VALUE + RETURN 8 +?ELS35: CALL REFERRING + RETURN 8 +?CND18: ZERO? P-WALK-DIR \?CND40 + EQUAL? HIM,O,I \?CND40 + CALL VISIBLE?,P-HIM-OBJECT + ZERO? STACK /?ELS47 + EQUAL? HIM,O \?ELS50 + SET 'O,P-HIM-OBJECT + JUMP ?CND40 +?ELS50: SET 'I,P-HIM-OBJECT + JUMP ?CND40 +?ELS47: ZERO? I \?ELS57 + CALL FAKE-ORPHAN + RETURN 8 +?ELS57: CALL REFERRING,TRUE-VALUE + RETURN 8 +?CND40: SET 'PRSO,O + SET 'PRSI,I + EQUAL? A,V?WALK /?ELS64 + EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?ELS64 + CALL D-APPLY,STR?1,NOT-HERE-OBJECT-F >V + ZERO? V /?ELS64 + SET 'P-WON,FALSE-VALUE + JUMP ?CND62 +?ELS64: SET 'O,PRSO + SET 'I,PRSI + CALL THIS-IS-IT,PRSI + CALL THIS-IS-IT,PRSO + GETP WINNER,P?ACTION + CALL D-APPLY,STR?2,STACK >V + ZERO? V \?CND62 + GET PREACTIONS,A + CALL D-APPLY,STR?3,STACK >V + ZERO? V \?CND62 + ZERO? I /?ELS75 + GETP I,P?ACTION + CALL D-APPLY,STR?4,STACK >V + ZERO? V \?CND62 +?ELS75: ZERO? O /?ELS79 + EQUAL? A,V?WALK /?ELS79 + GETP O,P?ACTION + CALL D-APPLY,STR?5,STACK >V + ZERO? V \?CND62 +?ELS79: GET ACTIONS,A + CALL D-APPLY,FALSE-VALUE,STACK >V + ZERO? V /?CND62 +?CND62: SET 'PRSA,OA + SET 'PRSO,OO + SET 'PRSI,OI + RETURN V + + + .FUNCT D-APPLY,STR,FCN,FOO=0,RES + ZERO? FCN /FALSE + ZERO? DEBUG /?CND8 + ZERO? STR \?ELS14 + PRINTI " Default ->" + CRLF + JUMP ?CND8 +?ELS14: PRINTI " " + PRINT STR + PRINTI " -> " +?CND8: ZERO? FOO /?ELS21 + CALL FCN,FOO + JUMP ?CND17 +?ELS21: CALL FCN +?CND17: SET 'RES,STACK + ZERO? DEBUG /?CND25 + ZERO? STR /?CND25 + EQUAL? RES,M-FATAL \?ELS32 + PRINTI "Fatal" + CRLF + RETURN RES +?ELS32: ZERO? RES \?ELS34 + PRINTI "Not handled" + RETURN RES +?ELS34: PRINTI "Handled" + CRLF +?CND25: RETURN RES + + + .FUNCT DEQUEUE,RTN + CALL QUEUED?,RTN >RTN + ZERO? RTN /FALSE + PUT RTN,C-RTN,0 + RTRUE + + + .FUNCT QUEUED?,RTN,C,E + ADD C-TABLE,C-TABLELEN >E + ADD C-TABLE,C-INTS >C +?PRG1: EQUAL? C,E /FALSE + GET C,C-RTN + EQUAL? STACK,RTN \?CND3 + GET C,C-TICK + ZERO? STACK /FALSE + RETURN C +?CND3: ADD C,C-INTLEN >C + JUMP ?PRG1 + + + .FUNCT RUNNING?,RTN,C,E + ADD C-TABLE,C-TABLELEN >E + ADD C-TABLE,C-INTS >C +?PRG1: EQUAL? C,E /FALSE + GET C,C-RTN + EQUAL? STACK,RTN \?CND3 + GET C,C-TICK + ZERO? STACK /FALSE + GET C,C-TICK + GRTR? STACK,1 \TRUE + RFALSE +?CND3: ADD C,C-INTLEN >C + JUMP ?PRG1 + + + .FUNCT QUEUE,RTN,TICK,C,E,INT=0 + ADD C-TABLE,C-TABLELEN >E + ADD C-TABLE,C-INTS >C +?PRG1: EQUAL? C,E \?ELS5 + ZERO? INT /?ELS8 + SET 'C,INT + JUMP ?CND6 +?ELS8: LESS? C-INTS,C-INTLEN \?CND12 + PRINTI "Bug2" + CRLF +?CND12: SUB C-INTS,C-INTLEN >C-INTS + LESS? C-INTS,C-MAXINTS \?CND15 + SET 'C-MAXINTS,C-INTS +?CND15: ADD C-TABLE,C-INTS >INT +?CND6: PUT INT,C-RTN,RTN + JUMP ?REP2 +?ELS5: GET C,C-RTN + EQUAL? STACK,RTN \?ELS19 + SET 'INT,C + JUMP ?REP2 +?ELS19: GET C,C-RTN + ZERO? STACK \?CND3 + SET 'INT,C +?CND3: ADD C,C-INTLEN >C + JUMP ?PRG1 +?REP2: GRTR? INT,CLOCK-HAND \?CND22 + ADD TICK,3 + SUB 0,STACK >TICK +?CND22: PUT INT,C-TICK,TICK + RETURN INT + + + .FUNCT CLOCKER,E,TICK,RTN,FLG=0,Q?=0,OWINNER + ADD C-TABLE,C-INTS >CLOCK-HAND + ADD C-TABLE,C-TABLELEN >E + SET 'OWINNER,WINNER + SET 'WINNER,PROTAGONIST +?PRG1: EQUAL? CLOCK-HAND,E \?ELS5 + SET 'CLOCK-HAND,E + SET 'WINNER,OWINNER + RETURN FLG +?ELS5: GET CLOCK-HAND,C-RTN + ZERO? STACK /?CND3 + GET CLOCK-HAND,C-TICK >TICK + LESS? TICK,-1 \?ELS10 + SUB 0,TICK + SUB STACK,3 + PUT CLOCK-HAND,C-TICK,STACK + SET 'Q?,CLOCK-HAND + JUMP ?CND3 +?ELS10: ZERO? TICK /?CND3 + GRTR? TICK,0 \?CND13 + SUB TICK,C-ELAPSED >TICK + LESS? TICK,0 \?CND16 + SET 'TICK,0 +?CND16: PUT CLOCK-HAND,C-TICK,TICK +?CND13: ZERO? TICK /?CND19 + SET 'Q?,CLOCK-HAND +?CND19: GRTR? TICK,0 /?CND3 + GET CLOCK-HAND,C-RTN >RTN + ZERO? TICK \?CND25 + PUT CLOCK-HAND,C-RTN,0 +?CND25: CALL RTN + ZERO? STACK /?CND28 + SET 'FLG,TRUE-VALUE +?CND28: ZERO? Q? \?CND3 + GET CLOCK-HAND,C-RTN + ZERO? STACK /?CND3 + SET 'Q?,TRUE-VALUE +?CND3: ADD CLOCK-HAND,C-INTLEN >CLOCK-HAND + ZERO? Q? \?PRG1 + ADD C-INTS,C-INTLEN >C-INTS + JUMP ?PRG1 + + .ENDI diff --git a/misc.zil b/misc.zil new file mode 100644 index 0000000..00b681c --- /dev/null +++ b/misc.zil @@ -0,0 +1,713 @@ +"MISC for + STATIONFALL + (c) Copyright 1987 Infocom, Inc. All Rights Reserved." + +;"macros" + + + D * + A * + T ,PRSO + T ,PRSI + T * + AR * + TR * + N * + C * > + +> + +> + +> + +> + + + ) + ( ) + (ELSE )>>)> + )> + > + + + >>) + (ELSE .ATM)> GVAL>) + (ELSE .ATM)> + !.L)> + > + 3> )>> + !.L>)>>> + >> + +> + +> + +> + + + ) + (
) + (ELSE )>>)> + > + > + .ATM) + (ELSE )>> + !.O)>>> + + >> + +>>> + +;>>> + +;"this new PICK-ONE won't begin repeating any of the items in the table until + they've all been used." +> + > + > + > + >> + >> + > + > + + > + + )> + + .MSG> + +; + >) + (T + )>> + + + ) + ( + ) + (T + )> + > + + + ) + (T + )> + > + +> + +> + + + > + + + > + + 3> + )> + + > NOUN>)> + + > ADJECTIVE>)> + <3 .OBJ>>> + .V>> + +;"MAIN-LOOP and associated routines" + + + + + + + + + + + ;"else, ZIL gets confused between verb-word GO and routine GO" + +;"As if on cue, a landing party from the S.P.S. Flathead materializes nearby. +Blather is with them, having been picked up from deep space in another escape +pod, babbling cravenly. Captain Sterling of the Flathead acknowledges your +heroic actions, and informs you of your promotion to Lieutenant First Class.| +| +As a team of mutant hunters head for the cryo-elevator, Veldina mentions that +the grateful people of Resida offer you leadership of their world. Captain +Sterling points out that, even if you choose to remain on Resida, Blather +(demoted to Ensign Twelfth Class) has been assigned as your personal toilet +attendant.| +| +You feel a sting from your arm and turn to see a medical robot moving away +after administering the antidote for The Disease.| +| +A team of robot technicians step into the anteroom. They part their ranks, and +a familiar figure comes bounding toward you! \"Hi!\" shouts Floyd, with +uncontrolled enthusiasm. \"Floyd feeling better now!\" Smiling from ear to +ear, he says, \"Look what Floyd found!\" He hands you a helicopter key, +a reactor elevator card, and a paddleball set. \"Maybe we can use them in +the sequel...\"" + + + + >> + + ; 0> + >>) + (T + )> + > + + + + + + + + > + +>>> + + + > + + > + > + > + > + ,P-IT-OBJECT + > + > + > .ICNT> + ) + (T + ,IT> + ; )> + + + )>)>> + + + > .OCNT> + ) + (T + ,IT> + ; )> + + )>)>>)> + )> + + .OCNT) + ( + + + >) + (T + >)> + .OCNT) + ( + > + + > + .ICNT) + (T + 1)>> + + <1? .ICNT>> + >)> + + >) + (<0? .NUM> + ,P-SONUMS>> + > + >) + ( + + ) + (T + + > + + ) + ( + >) + (T + >)> + + > + )>) + (T + + > + + )> + > + > .NUM> + + + > + )> + + > + )> + + > + ) + (T + )> + ) + ( + )> + ) + (T + >) + (T + >)> + > + > + + 0> + ,W?ALL ,W?BOTH ,W?EVERYT>> + + ) + (T + + ) + ( + ) + ;( + ) + (T + )> + )>)> + + > + + )>)>>)> + + >)> + + > + ,P-WON ;"fake YOU CANT SEE responses set P-WON to false"> + + > + ) + ( + )> + ,M-END>>) + (T + )>) + (T + >)> + > + + + ) + (T + )>) + (T + )> + > + >)> + > + ;"default length of move" + > + ;"else, when input is just a direction, P-PRSA-WORD will remain + whatever it was for the previous turn" + > + > + >)>> + +; + > + >> + + )>> + +)) + ;"RFALSE if OBJ1 should be included in the ALL, otherwise RTRUE" + + > + ) + ( ;"TAKE prso FROM prsi and prso isn't in prsi" + ,PRSI + >> + ) + (> ;"can't get at object" + ) + ( ;"cases for ALL" + > + ) + ( + ;"TAKE ALL and object not accessible or takeable" + > + >> + ) + (> + >>> + + >> ;"tray" + ) + (T + )>) + ( + > ;"already have it" + ) + (T + )>) + ( + ;"VERB ALL, object not held" + >> + ) + ( ;"PUT ALL IN X,obj already in x" + > + > + )>)>> + +> + ;"or else FLOYD, HELP doesn't run the clock") + ( + ) + (T + )>> + +> + +> + + + +) "AUX" TMP) + > + > + + ) + (T + )> + + + ) + (<0? > + >) + (T + > + )> + + > + > + > + +) (I <>)) + + > + +) (I <>) "AUX" V OA OO OI) + + % + ') + (T + ' 1>>>)> + )> + + + + + > + + + ) + (T + )>) + (T + + ) + (T + )> + )>)> + > + + + ) + (T + )>) + (T + + ) + (T + )> + )>)> + ; > + + + ) + (T + )>) + (T + + ) + (T + )> + )>)> + + + > + + >> + >) + (T + + + + + >> + T) + ;( ,M-BEG>> + T) + (>> + T) + (>>> + T) + ;(> + + ,P?CONTFCN> + ,P?CONTFCN>>>> + T) + (> + >>> + T) + ( >> + T)>)> + + + + .V> + +) "AUX" RES) + <>) + (T + + " CR>) + (T + ">)>)> + ) + (T + )>> + + + ) + ( + ) + (T )>)> + .RES)>> + +;"CLOCKER and related routines" + + + ') + (T + ')>> + +;> + + + + + +> + + + +; + + + ;"length of an interrupt entry" + ;"offset of routine name" + ;"offset of count" + +> + )>> + +> + > + + ) + ( .RTN> + > + ) + (T + )>)> + >>> + +> + > + + ) + ( .RTN> + > + 1>> + ) + (T + )>)> + >>> + +)) ;"automatically enables as well" + > + > + + ) + (T + + )> ;"too many interrupts" + > + + )> + >)> + + ) + ( .RTN> + + ) + (> + )> + >> + + ') + (T + ' >)> + >>)> + + .INT> + +) (Q? <>) OWINNER) + ;> + ;)> + ;> + )> + > + > + + + + + + ) + (>> + > + + 3>> + ) + (> + + > + + )> + )> + > + )> + > + + ') + (ELSE + ' + 1>>)>> + + )> + + )> + + >>> + )>)>)>)> + > + + >)>>> \ No newline at end of file diff --git a/parser.zap b/parser.zap new file mode 100644 index 0000000..c0d1f1e --- /dev/null +++ b/parser.zap @@ -0,0 +1,1869 @@ + + + .FUNCT THIS-IS-IT,OBJ + ZERO? OBJ /TRUE + EQUAL? PRSA,V?WALK \?ELS9 + EQUAL? PRSO,OBJ /TRUE +?ELS9: EQUAL? OBJ,PROTAGONIST /TRUE + EQUAL? OBJ,NOT-HERE-OBJECT,ME,GLOBAL-ROOM /TRUE + FSET? OBJ,ACTORBIT /?THN12 + EQUAL? OBJ,OLIVER \?ELS11 +?THN12: SET 'P-HIM-OBJECT,OBJ + RETURN P-HIM-OBJECT +?ELS11: SET 'P-IT-OBJECT,OBJ + RETURN P-IT-OBJECT + + + .FUNCT PARSER,PTR=P-LEXSTART,WRD,VAL=0,VERB=0,OMERGED,OWINNER,OLEN,LEN,DIR=0,NW=0,LW=0,CNT=-1,?TMP2,?TMP1 +?PRG1: IGRTR? 'CNT,P-ITBLLEN /?REP2 + ZERO? P-OFLAG \?CND8 + GET P-ITBL,CNT + PUT P-OTBL,CNT,STACK +?CND8: PUT P-ITBL,CNT,0 + JUMP ?PRG1 +?REP2: SET 'OMERGED,P-MERGED + SET 'OWINNER,WINNER + SET 'P-ADVERB,FALSE-VALUE + SET 'P-MERGED,FALSE-VALUE + SET 'P-END-ON-PREP,FALSE-VALUE + PUT P-PRSO,P-MATCHLEN,0 + PUT P-PRSI,P-MATCHLEN,0 + PUT P-BUTS,P-MATCHLEN,0 + ZERO? QUOTE-FLAG \?CND11 + EQUAL? WINNER,PROTAGONIST /?CND11 + SET 'WINNER,PROTAGONIST + LOC WINNER + FSET? STACK,VEHBIT /?CND16 + LOC WINNER >HERE +?CND16: CALL LIT?,HERE >LIT +?CND11: ZERO? RESERVE-PTR /?ELS21 + SET 'PTR,RESERVE-PTR + CALL STUFF,P-LEXV,RESERVE-LEXV + CALL INBUF-STUFF,P-INBUF,RESERVE-INBUF + ZERO? VERBOSITY /?CND23 + EQUAL? PROTAGONIST,WINNER \?CND23 + CRLF +?CND23: SET 'RESERVE-PTR,FALSE-VALUE + SET 'P-CONT,FALSE-VALUE + JUMP ?CND19 +?ELS21: ZERO? P-CONT /?ELS29 + SET 'PTR,P-CONT + ZERO? VERBOSITY /?CND31 + ZERO? ELIMINATE-CR \?CND31 + CRLF +?CND31: SET 'ELIMINATE-CR,FALSE-VALUE + SET 'P-CONT,FALSE-VALUE + JUMP ?CND19 +?ELS29: SET 'WINNER,PROTAGONIST + SET 'QUOTE-FLAG,FALSE-VALUE + LOC WINNER + FSET? STACK,VEHBIT /?CND38 + LOC WINNER >HERE +?CND38: CALL LIT?,HERE >LIT + ZERO? VERBOSITY /?CND41 + CRLF +?CND41: PRINTC 62 + READ P-INBUF,P-LEXV + GETB P-LEXV,P-LEXWORDS >OLEN +?CND19: GETB P-LEXV,P-LEXWORDS >P-LEN + ZERO? P-LEN \?ELS46 + PRINTI "[I beg your pardon]" + CRLF + RFALSE +?ELS46: GET P-LEXV,PTR + EQUAL? STACK,W?OOPS \?ELS48 + ADD PTR,P-LEXELEN + GET P-LEXV,STACK + EQUAL? STACK,W?PERIOD,W?COMMA \?CND49 + ADD PTR,P-LEXELEN >PTR + DEC 'P-LEN +?CND49: GRTR? P-LEN,1 /?ELS54 + CALL CANT-USE-THAT-WAY,STR?6 + RFALSE +?ELS54: GET OOPS-TABLE,O-PTR + ZERO? STACK /?ELS56 + GRTR? P-LEN,2 \?CND57 + PRINTI "[Warning: Only the first word after OOPS is used.]" + CRLF +?CND57: GET OOPS-TABLE,O-PTR >?TMP1 + ADD PTR,P-LEXELEN + GET P-LEXV,STACK + PUT AGAIN-LEXV,?TMP1,STACK + SET 'WINNER,OWINNER + MUL PTR,P-LEXELEN + ADD STACK,6 + GETB P-LEXV,STACK >?TMP2 + MUL PTR,P-LEXELEN + ADD STACK,7 + GETB P-LEXV,STACK >?TMP1 + GET OOPS-TABLE,O-PTR + MUL STACK,P-LEXELEN + ADD STACK,3 + CALL INBUF-ADD,?TMP2,?TMP1,STACK + CALL STUFF,P-LEXV,AGAIN-LEXV + GETB P-LEXV,P-LEXWORDS >P-LEN + GET OOPS-TABLE,O-START >PTR + CALL INBUF-STUFF,P-INBUF,OOPS-INBUF + JUMP ?CND44 +?ELS56: PUT OOPS-TABLE,O-END,FALSE-VALUE + PRINTI "[There was no word to replace!]" + CRLF + RFALSE +?ELS48: PUT OOPS-TABLE,O-END,FALSE-VALUE +?CND44: GET P-LEXV,PTR + EQUAL? STACK,W?AGAIN,W?G \?ELS66 + ZERO? P-OFLAG /?ELS69 + CALL CANT-USE-THAT-WAY,STR?7 + RFALSE +?ELS69: ZERO? P-WON \?ELS72 + PRINTI "[That would just repeat a mistake!]" + CRLF + RFALSE +?ELS72: EQUAL? OWINNER,PROTAGONIST /?ELS74 + CALL VISIBLE?,OWINNER + ZERO? STACK \?ELS74 + PRINTC 91 + PRINT YOU-CANT + PRINTI "see " + PRINTD OWINNER + PRINTI " any more.]" + CRLF + RFALSE +?ELS74: GRTR? P-LEN,1 \?ELS78 + ADD PTR,P-LEXELEN + GET P-LEXV,STACK + EQUAL? STACK,W?PERIOD,W?COMMA,W?THEN /?THN82 + ADD PTR,P-LEXELEN + GET P-LEXV,STACK + EQUAL? STACK,W?AND \?ELS81 +?THN82: ADD PTR,4 >PTR + GETB P-LEXV,P-LEXWORDS + SUB STACK,2 + PUTB P-LEXV,P-LEXWORDS,STACK + JUMP ?CND67 +?ELS81: CALL RECOGNIZE + RFALSE +?ELS78: ADD PTR,P-LEXELEN >PTR + GETB P-LEXV,P-LEXWORDS + SUB STACK,1 + PUTB P-LEXV,P-LEXWORDS,STACK +?CND67: GETB P-LEXV,P-LEXWORDS + GRTR? STACK,0 \?ELS90 + CALL STUFF,RESERVE-LEXV,P-LEXV + CALL INBUF-STUFF,RESERVE-INBUF,P-INBUF + SET 'RESERVE-PTR,PTR + JUMP ?CND88 +?ELS90: SET 'RESERVE-PTR,FALSE-VALUE +?CND88: SET 'WINNER,OWINNER + SET 'P-MERGED,OMERGED + CALL INBUF-STUFF,P-INBUF,OOPS-INBUF + CALL STUFF,P-LEXV,AGAIN-LEXV + SET 'CNT,-1 + SET 'DIR,AGAIN-DIR +?PRG93: IGRTR? 'CNT,P-ITBLLEN /?CND64 + GET P-OTBL,CNT + PUT P-ITBL,CNT,STACK + JUMP ?PRG93 +?ELS66: CALL STUFF,AGAIN-LEXV,P-LEXV + CALL INBUF-STUFF,OOPS-INBUF,P-INBUF + PUT OOPS-TABLE,O-START,PTR + MUL 4,P-LEN + PUT OOPS-TABLE,O-LENGTH,STACK + GETB P-LEXV,P-LEXWORDS + MUL P-LEXELEN,STACK + ADD PTR,STACK + MUL 2,STACK >LEN + SUB LEN,1 + GETB P-LEXV,STACK >?TMP1 + SUB LEN,2 + GETB P-LEXV,STACK + ADD ?TMP1,STACK + PUT OOPS-TABLE,O-END,STACK + SET 'RESERVE-PTR,FALSE-VALUE + SET 'LEN,P-LEN + SET 'P-NCN,0 + SET 'P-GETFLAGS,0 +?PRG102: DLESS? 'P-LEN,0 \?ELS106 + SET 'QUOTE-FLAG,FALSE-VALUE + JUMP ?CND64 +?ELS106: GET P-LEXV,PTR >WRD + CALL NAUGHTY-WORD?,WRD + ZERO? STACK \FALSE + GET P-LEXV,PTR >WRD + ZERO? WRD \?THN111 + CALL NUMBER?,PTR >WRD + ZERO? WRD /?ELS110 +?THN111: CALL NEXT-WORD,PTR >NW + EQUAL? WRD,W?TO \?ELS115 + EQUAL? VERB,ACT?TELL,ACT?ASK \?ELS115 + CALL WT?,NW,64,1 + ZERO? STACK /?ELS115 + PUT P-ITBL,P-VERB,ACT?TELL + SET 'WRD,W?QUOTE + JUMP ?CND113 +?ELS115: EQUAL? WRD,W?THEN \?CND113 + GRTR? P-LEN,0 \?CND113 + ZERO? VERB \?CND113 + ZERO? QUOTE-FLAG \?CND113 + PUT P-ITBL,P-VERB,ACT?TELL + PUT P-ITBL,P-VERBN,0 + SET 'WRD,W?QUOTE +?CND113: EQUAL? WRD,W?THEN,W?PERIOD /?THN125 + EQUAL? WRD,W?QUOTE \?ELS124 +?THN125: EQUAL? WRD,W?QUOTE \?CND127 + ZERO? QUOTE-FLAG /?ELS132 + SET 'QUOTE-FLAG,FALSE-VALUE + JUMP ?CND127 +?ELS132: SET 'QUOTE-FLAG,TRUE-VALUE +?CND127: ZERO? P-LEN /?THN136 + ADD PTR,P-LEXELEN >P-CONT +?THN136: PUTB P-LEXV,P-LEXWORDS,P-LEN + JUMP ?CND64 +?ELS124: CALL WT?,WRD,16,3 >VAL + ZERO? VAL /?ELS139 + EQUAL? VERB,FALSE-VALUE,ACT?WALK,ACT?GO \?ELS139 + EQUAL? LEN,1 /?THN142 + EQUAL? LEN,2 \?ELS145 + EQUAL? VERB,ACT?WALK,ACT?GO /?THN142 +?ELS145: EQUAL? NW,W?THEN,W?PERIOD,W?QUOTE \?ELS147 + LESS? LEN,2 \?THN142 +?ELS147: ZERO? QUOTE-FLAG /?ELS149 + EQUAL? LEN,2 \?ELS149 + EQUAL? NW,W?QUOTE /?THN142 +?ELS149: GRTR? LEN,2 \?ELS139 + EQUAL? NW,W?COMMA,W?AND \?ELS139 +?THN142: SET 'DIR,VAL + EQUAL? NW,W?COMMA,W?AND \?CND152 + ADD PTR,P-LEXELEN + CALL CHANGE-LEXV,STACK,W?THEN +?CND152: GRTR? LEN,2 /?CND104 + SET 'QUOTE-FLAG,FALSE-VALUE + JUMP ?CND64 +?ELS139: CALL WT?,WRD,64,1 >VAL + ZERO? VAL /?ELS159 + ZERO? VERB \?ELS159 + SET 'P-PRSA-WORD,WRD + SET 'VERB,VAL + PUT P-ITBL,P-VERB,VAL + PUT P-ITBL,P-VERBN,P-VTBL + PUT P-VTBL,0,WRD + MUL PTR,2 + ADD STACK,2 >CNT + GETB P-LEXV,CNT + PUTB P-VTBL,2,STACK + ADD CNT,1 + GETB P-LEXV,STACK + PUTB P-VTBL,3,STACK + JUMP ?CND104 +?ELS159: CALL WT?,WRD,8,0 >VAL + ZERO? VAL \?THN164 + EQUAL? WRD,W?ALL,W?ONE,W?BOTH /?THN168 + EQUAL? WRD,W?EVERYT /?THN168 + CALL WT?,WRD,32 + ZERO? STACK \?THN168 + CALL WT?,WRD,128 + ZERO? STACK /?ELS163 +?THN168: SET 'VAL,0 \?ELS163 +?THN164: ZERO? VAL /?CND170 + EQUAL? WRD,W?BACK \?CND170 + EQUAL? VERB,ACT?HAND /?CND170 + SET 'VAL,0 +?CND170: GRTR? P-LEN,0 \?ELS177 + EQUAL? NW,W?OF \?ELS177 + ZERO? VAL \?ELS177 + EQUAL? WRD,W?ALL,W?ONE,W?A /?ELS177 + EQUAL? WRD,W?BOTH,W?EVERYT \?CND104 +?ELS177: ZERO? VAL /?ELS181 + ZERO? P-LEN /?THN184 + EQUAL? NW,W?THEN,W?PERIOD \?ELS181 +?THN184: SET 'P-END-ON-PREP,TRUE-VALUE + LESS? P-NCN,2 \?CND104 + PUT P-ITBL,P-PREP1,VAL + PUT P-ITBL,P-PREP1N,WRD + JUMP ?CND104 +?ELS181: EQUAL? P-NCN,2 \?ELS190 + PRINTI "[There were too many nouns in that sentence.]" + CRLF + RFALSE +?ELS190: INC 'P-NCN + CALL CLAUSE,PTR,VAL,WRD >PTR + ZERO? PTR /FALSE + LESS? PTR,0 \?CND104 + SET 'QUOTE-FLAG,FALSE-VALUE + JUMP ?CND64 +?ELS163: CALL WT?,WRD,4 + ZERO? STACK \?CND104 + EQUAL? VERB,ACT?TELL \?ELS201 + CALL WT?,WRD,64,1 + ZERO? STACK /?ELS201 + EQUAL? WINNER,PROTAGONIST \?ELS201 + PRINTI "[The proper way to speak to other characters is CHARACTER, DO THIS. See the instruction manual section entitled ""Communicating With Infocom's Interactive Fiction.""]" + CRLF + RFALSE +?ELS201: CALL CANT-USE,PTR + RFALSE +?ELS110: CALL UNKNOWN-WORD,PTR + RFALSE +?CND104: SET 'LW,WRD + ADD PTR,P-LEXELEN >PTR + JUMP ?PRG102 +?CND64: PUT OOPS-TABLE,O-PTR,FALSE-VALUE + ZERO? DIR /?CND208 + SET 'PRSA,V?WALK + SET 'PRSO,DIR + SET 'P-OFLAG,FALSE-VALUE + SET 'P-WALK-DIR,DIR + SET 'AGAIN-DIR,DIR + RTRUE +?CND208: SET 'P-WALK-DIR,FALSE-VALUE + SET 'AGAIN-DIR,FALSE-VALUE + ZERO? P-OFLAG /?CND212 + CALL ORPHAN-MERGE +?CND212: CALL SYNTAX-CHECK + ZERO? STACK /FALSE + CALL SNARF-OBJECTS + ZERO? STACK /FALSE + CALL MANY-CHECK + ZERO? STACK /FALSE + CALL TAKE-CHECK + ZERO? STACK /FALSE + RTRUE + + + .FUNCT CHANGE-LEXV,PTR,WRD,PTRS?=0,X,Y,Z + ZERO? PTRS? /?CND1 + SUB PTR,P-LEXELEN + MUL 2,STACK + ADD 2,STACK >X + GETB P-LEXV,X >Y + MUL 2,PTR + ADD 2,STACK >Z + PUTB P-LEXV,Z,Y + PUTB AGAIN-LEXV,Z,Y + ADD 1,X + GETB P-LEXV,STACK >Y + MUL 2,PTR + ADD 3,STACK >Z + PUTB P-LEXV,Z,Y + PUTB AGAIN-LEXV,Z,Y +?CND1: PUT P-LEXV,PTR,WRD + PUT AGAIN-LEXV,PTR,WRD + RTRUE + + + .FUNCT STUFF,DEST,SRC,MAX=29,PTR=P-LEXSTART,CTR=1,BPTR + GETB SRC,0 + PUTB DEST,0,STACK + GETB SRC,1 + PUTB DEST,1,STACK +?PRG1: GET SRC,PTR + PUT DEST,PTR,STACK + MUL PTR,2 + ADD STACK,2 >BPTR + GETB SRC,BPTR + PUTB DEST,BPTR,STACK + MUL PTR,2 + ADD STACK,3 >BPTR + GETB SRC,BPTR + PUTB DEST,BPTR,STACK + ADD PTR,P-LEXELEN >PTR + IGRTR? 'CTR,MAX \?PRG1 + RTRUE + + + .FUNCT INBUF-STUFF,DEST,SRC,CNT=-1 +?PRG1: IGRTR? 'CNT,P-INBUF-LENGTH /TRUE + GETB SRC,CNT + PUTB DEST,CNT,STACK + JUMP ?PRG1 + + + .FUNCT INBUF-ADD,LEN,BEG,SLOT,DBEG,CTR=0,TMP,?TMP1 + GET OOPS-TABLE,O-END >TMP + ZERO? TMP /?ELS3 + SET 'DBEG,TMP + JUMP ?CND1 +?ELS3: GET OOPS-TABLE,O-LENGTH >TMP + GETB AGAIN-LEXV,TMP >?TMP1 + ADD TMP,1 + GETB AGAIN-LEXV,STACK + ADD ?TMP1,STACK >DBEG +?CND1: ADD DBEG,LEN + PUT OOPS-TABLE,O-END,STACK +?PRG6: ADD DBEG,CTR >?TMP1 + ADD BEG,CTR + GETB P-INBUF,STACK + PUTB OOPS-INBUF,?TMP1,STACK + INC 'CTR + EQUAL? CTR,LEN \?PRG6 + PUTB AGAIN-LEXV,SLOT,DBEG + SUB SLOT,1 + PUTB AGAIN-LEXV,STACK,LEN + RTRUE + + + .FUNCT WT?,PTR,BIT,B1=5,OFFS=P-P1OFF,TYP + GETB PTR,P-PSOFF >TYP + BTST TYP,BIT \FALSE + GRTR? B1,4 /TRUE + EQUAL? BIT,128 /TRUE + BAND TYP,P-P1BITS >TYP + EQUAL? TYP,B1 /?CND15 + INC 'OFFS +?CND15: GETB PTR,OFFS + RSTACK + + + .FUNCT NEXT-WORD,PTR,NW + ZERO? P-LEN /FALSE + ADD PTR,P-LEXELEN + GET P-LEXV,STACK >NW + ZERO? NW /?ELS10 + RETURN NW +?ELS10: ADD PTR,P-LEXELEN + CALL NUMBER?,STACK + RSTACK + + + .FUNCT CLAUSE,PTR,VAL,WRD,OFF,NUM,ANDFLG=0,FIRST??=1,NW,LW=0,?TMP1 + SUB P-NCN,1 + MUL STACK,2 >OFF + ZERO? VAL /?ELS3 + ADD P-PREP1,OFF >NUM + PUT P-ITBL,NUM,VAL + ADD NUM,1 + PUT P-ITBL,STACK,WRD + ADD PTR,P-LEXELEN >PTR + JUMP ?CND1 +?ELS3: INC 'P-LEN +?CND1: ZERO? P-LEN \?CND6 + DEC 'P-NCN + RETURN -1 +?CND6: ADD P-NC1,OFF >NUM + MUL PTR,2 + ADD P-LEXV,STACK + PUT P-ITBL,NUM,STACK +?PRG9: DLESS? 'P-LEN,0 \?CND11 + ADD NUM,1 >?TMP1 + MUL PTR,2 + ADD P-LEXV,STACK + PUT P-ITBL,?TMP1,STACK + RETURN -1 +?CND11: GET P-LEXV,PTR >WRD + CALL NAUGHTY-WORD?,WRD + ZERO? STACK \FALSE + ZERO? WRD \?THN19 + CALL NUMBER?,PTR >WRD + ZERO? WRD /?ELS18 +?THN19: CALL NEXT-WORD,PTR >NW + ZERO? FIRST?? /?ELS23 + EQUAL? WRD,W?THE,W?A,W?AN /?THN26 + ZERO? VAL /?ELS23 + CALL WT?,WRD,8 + ZERO? STACK /?ELS23 + CALL WT?,WRD,32 + ZERO? STACK \?ELS23 +?THN26: GET P-ITBL,NUM + ADD STACK,4 + PUT P-ITBL,NUM,STACK + JUMP ?CND14 +?ELS23: EQUAL? WRD,W?AND,W?COMMA \?ELS31 + SET 'ANDFLG,TRUE-VALUE + JUMP ?CND14 +?ELS31: EQUAL? WRD,W?ALL,W?ONE,W?BOTH /?THN34 + EQUAL? WRD,W?EVERYT \?ELS33 +?THN34: EQUAL? NW,W?OF \?CND14 + DEC 'P-LEN + ADD PTR,P-LEXELEN >PTR + JUMP ?CND14 +?ELS33: EQUAL? WRD,W?THEN,W?PERIOD /?THN41 + CALL WT?,WRD,8 + ZERO? STACK /?ELS40 + GET P-ITBL,P-VERB + ZERO? STACK /?ELS40 + ZERO? FIRST?? \?ELS40 +?THN41: INC 'P-LEN + ADD NUM,1 >?TMP1 + MUL PTR,2 + ADD P-LEXV,STACK + PUT P-ITBL,?TMP1,STACK + SUB PTR,P-LEXELEN + RSTACK +?ELS40: ZERO? ANDFLG /?ELS46 + GET P-ITBL,P-VERB + ZERO? STACK \?ELS46 + SUB PTR,4 >PTR + ADD PTR,2 + CALL CHANGE-LEXV,STACK,W?THEN + ADD P-LEN,2 >P-LEN + JUMP ?CND14 +?ELS46: CALL WT?,WRD,128 + ZERO? STACK /?ELS50 + GRTR? P-LEN,0 \?ELS53 + EQUAL? NW,W?OF \?ELS53 + EQUAL? WRD,W?ALL,W?EVERYT /?ELS53 + EQUAL? WRD,W?ONE,W?BOTH \?CND14 +?ELS53: CALL WT?,WRD,32,2 + ZERO? STACK /?ELS57 + ZERO? NW /?ELS57 + EQUAL? NW,W?MY /?ELS57 + CALL WT?,NW,128 + ZERO? STACK \?THN60 + CALL WT?,NW,32 + ZERO? STACK /?ELS57 +?THN60: GET P-ITBL,P-VERB + EQUAL? STACK,ACT?SHOW,ACT?HAND,ACT?FEED \?CND14 +?ELS57: ZERO? ANDFLG \?ELS63 + EQUAL? NW,W?BUT,W?EXCEPT /?ELS63 + EQUAL? NW,W?AND,W?COMMA /?ELS63 + ADD NUM,1 >?TMP1 + ADD PTR,2 + MUL STACK,2 + ADD P-LEXV,STACK + PUT P-ITBL,?TMP1,STACK + RETURN PTR +?ELS63: SET 'ANDFLG,FALSE-VALUE + JUMP ?CND14 +?ELS50: CALL WT?,WRD,32 + ZERO? STACK \?CND14 + CALL WT?,WRD,4 + ZERO? STACK \?CND14 + CALL WT?,WRD,8 + ZERO? STACK \?CND14 + CALL CANT-USE,PTR + RFALSE +?ELS18: CALL UNKNOWN-WORD,PTR + RFALSE +?CND14: SET 'LW,WRD + SET 'FIRST??,FALSE-VALUE + ADD PTR,P-LEXELEN >PTR + JUMP ?PRG9 + + + .FUNCT NUMBER?,PTR,CNT,BPTR,CHR,SUM=0,CCTR,TMP,XPTR,?TMP1 + MUL PTR,2 + ADD P-LEXV,STACK + GETB STACK,2 >CNT + MUL PTR,2 + ADD P-LEXV,STACK + GETB STACK,3 >BPTR +?PRG1: GRTR? SUM,10000 /FALSE + DLESS? 'CNT,0 /?REP2 + GETB P-INBUF,BPTR >CHR + LESS? CHR,58 \?ELS12 + GRTR? CHR,47 \?ELS12 + MUL SUM,10 >?TMP1 + SUB CHR,48 + ADD ?TMP1,STACK >SUM + JUMP ?CND10 +?ELS12: EQUAL? CHR,35 \FALSE +?CND10: INC 'BPTR + JUMP ?PRG1 +?REP2: CALL CHANGE-LEXV,PTR,W?NUMBER + ADD PTR,P-LEXELEN + GET P-LEXV,STACK + EQUAL? STACK,W?COMMA \?CND17 + GRTR? P-LEN,1 \?CND17 + ADD PTR,4 >XPTR + CALL AFTER-COMMA-CHECK,XPTR >TMP + ZERO? TMP /?CND17 + MUL PTR,2 + ADD STACK,2 + GETB P-LEXV,STACK >CCTR + MUL XPTR,2 + ADD STACK,2 + GETB P-LEXV,STACK + ADD CCTR,STACK >CCTR + INC 'CCTR + MUL PTR,2 + ADD STACK,2 + PUTB P-LEXV,STACK,CCTR + EQUAL? TMP,1000 \?CND25 + SET 'TMP,0 +?CND25: MUL 1000,SUM + ADD STACK,TMP >SUM + SUB P-LEN,2 >CCTR +?PRG28: DLESS? 'CCTR,0 /?REP29 + ADD PTR,P-LEXELEN >PTR + ADD PTR,4 >XPTR + GET P-LEXV,XPTR + CALL CHANGE-LEXV,PTR,STACK + MUL PTR,2 + ADD STACK,2 >?TMP1 + MUL XPTR,2 + ADD STACK,2 + GETB P-LEXV,STACK + PUTB P-LEXV,?TMP1,STACK + MUL PTR,2 + ADD STACK,3 >?TMP1 + MUL XPTR,2 + ADD STACK,3 + GETB P-LEXV,STACK + PUTB P-LEXV,?TMP1,STACK + JUMP ?PRG28 +?REP29: SUB P-LEN,2 >P-LEN + GETB P-LEXV,P-LEXWORDS + SUB STACK,2 + PUTB P-LEXV,P-LEXWORDS,STACK +?CND17: GRTR? SUM,10000 /FALSE + SET 'P-NUMBER,SUM + RETURN W?NUMBER + + + .FUNCT AFTER-COMMA-CHECK,PTR,CNT,BPTR,CCTR=0,CHR,SUM=0,?TMP1 + MUL PTR,2 + ADD P-LEXV,STACK + GETB STACK,2 >CNT + MUL PTR,2 + ADD P-LEXV,STACK + GETB STACK,3 >BPTR +?PRG1: DLESS? 'CNT,0 /?REP2 + GETB P-INBUF,BPTR >CHR + INC 'CCTR + GRTR? CCTR,3 /?REP2 + LESS? CHR,58 \FALSE + GRTR? CHR,47 \FALSE + MUL SUM,10 >?TMP1 + SUB CHR,48 + ADD ?TMP1,STACK >SUM + INC 'BPTR + JUMP ?PRG1 +?REP2: EQUAL? CCTR,3 \FALSE + ZERO? SUM \?ELS23 + RETURN 1000 +?ELS23: RETURN SUM + + + .FUNCT ORPHAN-MERGE,CNT=-1,TEMP,VERB,BEG,END,ADJ=0,VRB=0,WRD,?TMP1 + SET 'P-OFLAG,FALSE-VALUE + GET P-ITBL,P-VERBN + GET STACK,0 >WRD + CALL WT?,WRD,64,1 >?TMP1 + GET P-OTBL,P-VERB + EQUAL? ?TMP1,STACK \?ELS3 + SET 'VRB,TRUE-VALUE + SET 'ADJ,TRUE-VALUE + JUMP ?CND1 +?ELS3: CALL WT?,WRD,32 + ZERO? STACK /?ELS5 + SET 'ADJ,TRUE-VALUE + JUMP ?CND1 +?ELS5: CALL WT?,WRD,128,0 + ZERO? STACK /?CND1 + ZERO? P-NCN \?CND1 + PUT P-ITBL,P-VERB,0 + PUT P-ITBL,P-VERBN,0 + ADD P-LEXV,2 + PUT P-ITBL,P-NC1,STACK + ADD P-LEXV,6 + PUT P-ITBL,P-NC1L,STACK + SET 'P-NCN,1 +?CND1: GET P-ITBL,P-VERB >VERB + ZERO? VERB /?ELS12 + ZERO? ADJ \?ELS12 + GET P-OTBL,P-VERB + EQUAL? VERB,STACK \FALSE +?ELS12: EQUAL? P-NCN,2 /FALSE + GET P-OTBL,P-NC1 + EQUAL? STACK,1 \?ELS18 + GET P-ITBL,P-PREP1 >TEMP + GET P-OTBL,P-PREP1 + EQUAL? TEMP,STACK /?THN22 + ZERO? TEMP \FALSE +?THN22: ZERO? ADJ /?ELS26 + ZERO? VRB \?ELS26 + ADD P-LEXV,2 + PUT P-OTBL,P-NC1,STACK + GET P-ITBL,P-NC1L + ZERO? STACK \?CND29 + ADD P-LEXV,6 + PUT P-ITBL,P-NC1L,STACK +?CND29: ZERO? P-NCN \?CND24 + SET 'P-NCN,1 + JUMP ?CND24 +?ELS26: GET P-ITBL,P-NC1 + PUT P-OTBL,P-NC1,STACK +?CND24: GET P-ITBL,P-NC1L + PUT P-OTBL,P-NC1L,STACK + JUMP ?CND10 +?ELS18: GET P-OTBL,P-NC2 + EQUAL? STACK,1 \?ELS40 + GET P-ITBL,P-PREP1 >TEMP + GET P-OTBL,P-PREP2 + EQUAL? TEMP,STACK /?THN44 + ZERO? TEMP \FALSE +?THN44: ZERO? ADJ /?CND46 + ZERO? VRB \?CND46 + ADD P-LEXV,2 + PUT P-ITBL,P-NC1,STACK + GET P-ITBL,P-NC1L + ZERO? STACK \?CND46 + ADD P-LEXV,6 + PUT P-ITBL,P-NC1L,STACK +?CND46: GET P-ITBL,P-NC1 + PUT P-OTBL,P-NC2,STACK + GET P-ITBL,P-NC1L + PUT P-OTBL,P-NC2L,STACK + SET 'P-NCN,2 + JUMP ?CND10 +?ELS40: ZERO? P-ACLAUSE /?CND10 + EQUAL? P-NCN,1 /?ELS61 + ZERO? ADJ \?ELS61 + SET 'P-ACLAUSE,FALSE-VALUE + RFALSE +?ELS61: GET P-ITBL,P-NC1 >BEG + ZERO? ADJ /?CND66 + ADD P-LEXV,2 >BEG + SET 'ADJ,FALSE-VALUE +?CND66: GET P-ITBL,P-NC1L >END +?PRG70: GET BEG,0 >WRD + EQUAL? BEG,END \?ELS74 + ZERO? ADJ /?ELS77 + CALL CLAUSE-WIN,ADJ + JUMP ?CND10 +?ELS77: SET 'P-ACLAUSE,FALSE-VALUE + RFALSE +?ELS74: EQUAL? WRD,W?ALL,W?EVERYT,W?ONE /?THN83 + EQUAL? WRD,W?BOTH /?THN83 + GETB WRD,P-PSOFF + BTST STACK,32 \?ELS82 + CALL ADJ-CHECK,WRD,ADJ,ADJ + ZERO? STACK /?ELS82 +?THN83: SET 'ADJ,WRD + JUMP ?CND72 +?ELS82: EQUAL? WRD,W?ONE \?ELS88 + CALL CLAUSE-WIN,ADJ + JUMP ?CND10 +?ELS88: GETB WRD,P-PSOFF + BTST STACK,128 \?CND72 + EQUAL? WRD,P-ANAM \?ELS93 + CALL CLAUSE-WIN,ADJ + JUMP ?CND10 +?ELS93: CALL CLAUSE-WIN + JUMP ?CND10 +?CND72: ADD BEG,P-WORDLEN >BEG + ZERO? END \?PRG70 + SET 'END,BEG + SET 'P-NCN,1 + SUB BEG,4 + PUT P-ITBL,P-NC1,STACK + PUT P-ITBL,P-NC1L,BEG + JUMP ?PRG70 +?CND10: GET P-OVTBL,0 + PUT P-VTBL,0,STACK + GETB P-OVTBL,2 + PUTB P-VTBL,2,STACK + GETB P-OVTBL,3 + PUTB P-VTBL,3,STACK + PUT P-OTBL,P-VERBN,P-VTBL + PUTB P-VTBL,2,0 +?PRG99: IGRTR? 'CNT,P-ITBLLEN \?ELS103 + SET 'P-MERGED,TRUE-VALUE + RTRUE +?ELS103: GET P-OTBL,CNT + PUT P-ITBL,CNT,STACK + JUMP ?PRG99 + + + .FUNCT CLAUSE-WIN,ADJ=0 + ZERO? ADJ /?ELS3 + GET P-OTBL,P-VERB + PUT P-ITBL,P-VERB,STACK + JUMP ?CND1 +?ELS3: SET 'ADJ,TRUE-VALUE +?CND1: PUT P-CCTBL,CC-SBPTR,P-ACLAUSE + ADD P-ACLAUSE,1 + PUT P-CCTBL,CC-SEPTR,STACK + EQUAL? P-ACLAUSE,P-NC1 \?ELS9 + PUT P-CCTBL,CC-OCLAUSE,P-OCL1 + JUMP ?CND7 +?ELS9: PUT P-CCTBL,CC-OCLAUSE,P-OCL2 +?CND7: CALL CLAUSE-COPY,P-OTBL,P-OTBL,ADJ + GET P-OTBL,P-NC2 + ZERO? STACK /?ELS13 + SET 'P-NCN,2 +?ELS13: SET 'P-ACLAUSE,FALSE-VALUE + RTRUE + + + .FUNCT WORD-PRINT,CNT,BUF +?PRG1: DLESS? 'CNT,0 /TRUE + GETB P-INBUF,BUF + PRINTC STACK + INC 'BUF + JUMP ?PRG1 + + + .FUNCT UNKNOWN-WORD,PTR,BUF,?TMP1 + PUT OOPS-TABLE,O-PTR,PTR + PRINTI "[I don't know the word """ + MUL PTR,2 >BUF + ADD P-LEXV,BUF + GETB STACK,2 >?TMP1 + ADD P-LEXV,BUF + GETB STACK,3 + CALL WORD-PRINT,?TMP1,STACK + PRINTI ".""]" + CRLF + SET 'QUOTE-FLAG,FALSE-VALUE + SET 'P-OFLAG,FALSE-VALUE + RETURN P-OFLAG + + + .FUNCT CANT-USE,PTR,BUF,?TMP1 + PRINTI "[You used the word """ + MUL PTR,2 >BUF + ADD P-LEXV,BUF + GETB STACK,2 >?TMP1 + ADD P-LEXV,BUF + GETB STACK,3 + CALL WORD-PRINT,?TMP1,STACK + PRINTI """ in a way that I don't understand.]" + CRLF + CALL STOP + RSTACK + + + .FUNCT SYNTAX-CHECK,SYN,LEN,NUM,OBJ,DRIVE1=0,DRIVE2=0,PREP,VERB,?TMP2,?TMP1 + GET P-ITBL,P-VERB >VERB + ZERO? VERB \?CND1 + PRINTI "[There was no verb in that sentence!]" + CRLF + RFALSE +?CND1: SUB 255,VERB + GET VERBS,STACK >SYN + GETB SYN,0 >LEN + INC 'SYN +?PRG4: GETB SYN,P-SBITS + BAND STACK,P-SONUMS >NUM + GRTR? P-NCN,NUM /?CND6 + LESS? NUM,1 /?ELS10 + ZERO? P-NCN \?ELS10 + GET P-ITBL,P-PREP1 >PREP + ZERO? PREP /?THN13 + GETB SYN,P-SPREP1 + EQUAL? PREP,STACK \?ELS10 +?THN13: SET 'DRIVE1,SYN + JUMP ?CND6 +?ELS10: GETB SYN,P-SPREP1 >?TMP1 + GET P-ITBL,P-PREP1 + EQUAL? ?TMP1,STACK \?CND6 + EQUAL? NUM,2 \?ELS19 + EQUAL? P-NCN,1 \?ELS19 + SET 'DRIVE2,SYN + JUMP ?CND6 +?ELS19: GETB SYN,P-SPREP2 >?TMP1 + GET P-ITBL,P-PREP2 + EQUAL? ?TMP1,STACK \?CND6 + CALL SYNTAX-FOUND,SYN + RTRUE +?CND6: DLESS? 'LEN,1 \?ELS26 + ZERO? DRIVE1 \?REP5 + ZERO? DRIVE2 \?REP5 + CALL RECOGNIZE + RFALSE +?ELS26: ADD SYN,P-SYNLEN >SYN + JUMP ?PRG4 +?REP5: ZERO? DRIVE1 /?ELS40 + GETB DRIVE1,P-SFWIM1 >?TMP2 + GETB DRIVE1,P-SLOC1 >?TMP1 + GETB DRIVE1,P-SPREP1 + CALL GWIM,?TMP2,?TMP1,STACK >OBJ + ZERO? OBJ /?ELS40 + PUT P-PRSO,P-MATCHLEN,1 + PUT P-PRSO,1,OBJ + CALL SYNTAX-FOUND,DRIVE1 + RSTACK +?ELS40: ZERO? DRIVE2 /?ELS44 + GETB DRIVE2,P-SFWIM2 >?TMP2 + GETB DRIVE2,P-SLOC2 >?TMP1 + GETB DRIVE2,P-SPREP2 + CALL GWIM,?TMP2,?TMP1,STACK >OBJ + ZERO? OBJ /?ELS44 + PUT P-PRSI,P-MATCHLEN,1 + PUT P-PRSI,1,OBJ + CALL SYNTAX-FOUND,DRIVE2 + RSTACK +?ELS44: EQUAL? WINNER,PROTAGONIST \?ELS51 + CALL ORPHAN,DRIVE1,DRIVE2 + PRINTI "[Wh" + JUMP ?CND49 +?ELS51: PRINTI "[Your command was not complete. Next time, type wh" +?CND49: EQUAL? VERB,ACT?WALK,ACT?GO \?ELS56 + PRINTI "ere" + JUMP ?CND54 +?ELS56: ZERO? DRIVE1 /?ELS62 + GETB DRIVE1,P-SFWIM1 + EQUAL? STACK,ACTORBIT /?THN59 +?ELS62: ZERO? DRIVE2 /?ELS58 + GETB DRIVE2,P-SFWIM2 + EQUAL? STACK,ACTORBIT \?ELS58 +?THN59: PRINTI "om" + JUMP ?CND54 +?ELS58: PRINTI "at" +?CND54: EQUAL? WINNER,PROTAGONIST \?ELS69 + PRINTI " do you want to " + JUMP ?CND67 +?ELS69: PRINTI " you want" + CALL TPRINT,WINNER + PRINTI " to " +?CND67: CALL VERB-PRINT + SET 'P-OFLAG,FALSE-VALUE + ZERO? DRIVE2 /?CND72 + SET 'PREP,P-MERGED + SET 'P-MERGED,FALSE-VALUE + CALL CLAUSE-PRINT,P-NC1,P-NC1L + SET 'P-MERGED,PREP +?CND72: ZERO? DRIVE1 /?ELS80 + GETB DRIVE1,P-SPREP1 + JUMP ?CND76 +?ELS80: GETB DRIVE2,P-SPREP2 +?CND76: CALL PREP-PRINT,STACK + EQUAL? WINNER,PROTAGONIST \?ELS86 + SET 'P-OFLAG,TRUE-VALUE + PRINTI "?]" + CRLF + RFALSE +?ELS86: SET 'P-OFLAG,FALSE-VALUE + PRINTI ".]" + CRLF + RFALSE + + + .FUNCT VERB-PRINT,TMP,?TMP1 + GET P-ITBL,P-VERBN >TMP + ZERO? TMP \?ELS5 + PRINTI "tell" + RTRUE +?ELS5: EQUAL? TMP,W?ZZMGCK \?ELS7 + PRINTI "answer" + RTRUE +?ELS7: GETB TMP,2 + ZERO? STACK \?ELS9 + GET TMP,0 + PRINTB STACK + RTRUE +?ELS9: GETB TMP,2 >?TMP1 + GETB TMP,3 + CALL WORD-PRINT,?TMP1,STACK + PUTB TMP,2,0 + RTRUE + + + .FUNCT ORPHAN,D1,D2,CNT=-1 + ZERO? P-MERGED \?CND1 + PUT P-OCL1,P-MATCHLEN,0 + PUT P-OCL2,P-MATCHLEN,0 +?CND1: GET P-VTBL,0 + PUT P-OVTBL,0,STACK + GETB P-VTBL,2 + PUTB P-OVTBL,2,STACK + GETB P-VTBL,3 + PUTB P-OVTBL,3,STACK +?PRG4: IGRTR? 'CNT,P-ITBLLEN /?REP5 + GET P-ITBL,CNT + PUT P-OTBL,CNT,STACK + JUMP ?PRG4 +?REP5: EQUAL? P-NCN,2 \?CND11 + PUT P-CCTBL,CC-SBPTR,P-NC2 + PUT P-CCTBL,CC-SEPTR,P-NC2L + PUT P-CCTBL,CC-OCLAUSE,P-OCL2 + CALL CLAUSE-COPY,P-ITBL,P-OTBL +?CND11: LESS? P-NCN,1 /?CND14 + PUT P-CCTBL,CC-SBPTR,P-NC1 + PUT P-CCTBL,CC-SEPTR,P-NC1L + PUT P-CCTBL,CC-OCLAUSE,P-OCL1 + CALL CLAUSE-COPY,P-ITBL,P-OTBL +?CND14: ZERO? D1 /?ELS21 + GETB D1,P-SPREP1 + PUT P-OTBL,P-PREP1,STACK + PUT P-OTBL,P-NC1,1 + RTRUE +?ELS21: ZERO? D2 /FALSE + GETB D2,P-SPREP2 + PUT P-OTBL,P-PREP2,STACK + PUT P-OTBL,P-NC2,1 + RTRUE + + + .FUNCT CLAUSE-PRINT,BPTR,EPTR,THE?=1,?TMP1 + GET P-ITBL,BPTR >?TMP1 + GET P-ITBL,EPTR + CALL BUFFER-PRINT,?TMP1,STACK,THE? + RSTACK + + + .FUNCT BUFFER-PRINT,BEG,END,CP,NOSP=0,WRD,FIRST??=1,PN=0,?TMP1 +?PRG1: EQUAL? BEG,END /TRUE + ZERO? NOSP /?ELS10 + SET 'NOSP,FALSE-VALUE + JUMP ?CND8 +?ELS10: PRINTC 32 +?CND8: GET BEG,0 >WRD + EQUAL? WRD,W?PERIOD \?ELS16 + SET 'NOSP,TRUE-VALUE + JUMP ?CND3 +?ELS16: EQUAL? WRD,W?ME,W?MYSELF \?ELS18 + PRINTD ME + SET 'PN,TRUE-VALUE + JUMP ?CND3 +?ELS18: CALL NAME?,WRD + ZERO? STACK /?ELS20 + CALL CAPITALIZE,BEG + SET 'PN,TRUE-VALUE + JUMP ?CND3 +?ELS20: ZERO? FIRST?? /?CND23 + ZERO? PN \?CND23 + ZERO? CP /?CND23 + EQUAL? WRD,W?MY /?CND23 + PRINTI "the " +?CND23: ZERO? P-OFLAG \?THN31 + ZERO? P-MERGED /?ELS30 +?THN31: PRINTB WRD + JUMP ?CND28 +?ELS30: EQUAL? WRD,W?IT,W?THEM \?ELS34 + CALL ACCESSIBLE?,P-IT-OBJECT + ZERO? STACK /?ELS34 + PRINTD P-IT-OBJECT + JUMP ?CND28 +?ELS34: EQUAL? WRD,W?HIM,W?HIMSELF \?ELS38 + CALL ACCESSIBLE?,P-HIM-OBJECT + ZERO? STACK /?ELS38 + PRINTD P-HIM-OBJECT + JUMP ?CND28 +?ELS38: GETB BEG,2 >?TMP1 + GETB BEG,3 + CALL WORD-PRINT,?TMP1,STACK +?CND28: SET 'FIRST??,FALSE-VALUE +?CND3: ADD BEG,P-WORDLEN >BEG + JUMP ?PRG1 + + + .FUNCT NAME?,WRD + EQUAL? WRD,W?FLOYD,W?PLATO \FALSE + RTRUE + + + .FUNCT CAPITALIZE,PTR,?TMP1 + ZERO? P-OFLAG \?THN6 + ZERO? P-MERGED /?ELS5 +?THN6: GET PTR,0 + PRINTB STACK + RTRUE +?ELS5: GETB PTR,3 + GETB P-INBUF,STACK + SUB STACK,32 + PRINTC STACK + GETB PTR,2 + SUB STACK,1 >?TMP1 + GETB PTR,3 + ADD STACK,1 + CALL WORD-PRINT,?TMP1,STACK + RSTACK + + + .FUNCT PREP-PRINT,PREP,WRD + ZERO? PREP /FALSE + PRINTC 32 + EQUAL? PREP,PR?THROUGH \?ELS10 + PRINTI "through" + RTRUE +?ELS10: CALL PREP-FIND,PREP >WRD + PRINTB WRD + RTRUE + + + .FUNCT CLAUSE-COPY,SRC,DEST,INSRT=0,OCL,BEG,END,BB,EE,OBEG,CNT,B,E + GET P-CCTBL,CC-SBPTR >BB + GET P-CCTBL,CC-SEPTR >EE + GET P-CCTBL,CC-OCLAUSE >OCL + GET SRC,BB >BEG + GET SRC,EE >END + GET OCL,P-MATCHLEN >OBEG +?PRG1: EQUAL? BEG,END /?REP2 + ZERO? INSRT /?ELS8 + GET BEG,0 + EQUAL? P-ANAM,STACK \?ELS8 + EQUAL? INSRT,TRUE-VALUE \?ELS13 + GET P-ITBL,P-NC1 >B + GET P-ITBL,P-NC1L >E +?PRG14: EQUAL? B,E /?CND6 + GET B,0 + CALL CLAUSE-ADD,STACK + ADD B,P-WORDLEN >B + JUMP ?PRG14 +?ELS13: GET OCL,1 + EQUAL? INSRT,STACK /?CND6 + CALL CLAUSE-ADD,INSRT + GET BEG,0 + CALL CLAUSE-ADD,STACK + JUMP ?CND6 +?ELS8: GET BEG,0 + CALL CLAUSE-ADD,STACK +?CND6: ADD BEG,P-WORDLEN >BEG + JUMP ?PRG1 +?REP2: EQUAL? SRC,DEST \?CND23 + GRTR? OBEG,0 \?CND23 + GET OCL,P-MATCHLEN + SUB STACK,OBEG >CNT + GRTR? CNT,0 \?CND23 + PUT OCL,P-MATCHLEN,0 + INC 'OBEG +?PRG28: GET OCL,OBEG + CALL CLAUSE-ADD,STACK + SUB CNT,2 >CNT + ZERO? CNT /?REP29 + ADD OBEG,2 >OBEG + JUMP ?PRG28 +?REP29: SET 'OBEG,0 +?CND23: MUL OBEG,P-LEXELEN + ADD STACK,2 + ADD OCL,STACK + PUT DEST,BB,STACK + GET OCL,P-MATCHLEN + MUL STACK,P-LEXELEN + ADD STACK,2 + ADD OCL,STACK + PUT DEST,EE,STACK + RTRUE + + + .FUNCT CLAUSE-ADD,WRD,OCL,PTR + GET P-CCTBL,CC-OCLAUSE >OCL + GET OCL,P-MATCHLEN + ADD STACK,2 >PTR + SUB PTR,1 + PUT OCL,STACK,WRD + PUT OCL,PTR,0 + PUT OCL,P-MATCHLEN,PTR + RTRUE + + + .FUNCT PREP-FIND,PREP,CNT=0,SIZE + GET PREPOSITIONS,0 + MUL STACK,2 >SIZE +?PRG1: IGRTR? 'CNT,SIZE /FALSE + GET PREPOSITIONS,CNT + EQUAL? STACK,PREP \?PRG1 + SUB CNT,1 + GET PREPOSITIONS,STACK + RSTACK + + + .FUNCT SYNTAX-FOUND,SYN + SET 'P-SYNTAX,SYN + GETB SYN,P-SACTION >PRSA + RETURN PRSA + + + .FUNCT GWIM,GBIT,LBIT,PREP,OBJ + EQUAL? GBIT,RLANDBIT \?CND1 + RETURN ROOMS +?CND1: SET 'P-GWIMBIT,GBIT + SET 'P-SLOCBITS,LBIT + PUT P-MERGE,P-MATCHLEN,0 + CALL GET-OBJECT,P-MERGE,FALSE-VALUE + ZERO? STACK /?ELS8 + SET 'P-GWIMBIT,0 + GET P-MERGE,P-MATCHLEN + EQUAL? STACK,1 \FALSE + GET P-MERGE,1 >OBJ + PRINTC 91 + ZERO? PREP /?CND14 + ZERO? P-END-ON-PREP \?CND14 + CALL PREP-FIND,PREP >PREP + PRINTB PREP + EQUAL? PREP,W?OUT \?CND19 + PRINTI " of" +?CND19: FSET? OBJ,NARTICLEBIT /?ELS24 + PRINTI " the " + JUMP ?CND14 +?ELS24: PRINTC 32 +?CND14: PRINTD OBJ + PRINTC 93 + CRLF + RETURN OBJ +?ELS8: SET 'P-GWIMBIT,0 + RFALSE + + + .FUNCT SNARF-OBJECTS,PTR + GET P-ITBL,P-NC1 >PTR + ZERO? PTR /?CND1 + SET 'P-PHR,0 + GETB P-SYNTAX,P-SLOC1 >P-SLOCBITS + GET P-ITBL,P-NC1L + CALL SNARFEM,PTR,STACK,P-PRSO + ZERO? STACK /FALSE + GET P-BUTS,P-MATCHLEN + ZERO? STACK /?CND1 + CALL BUT-MERGE,P-PRSO >P-PRSO +?CND1: GET P-ITBL,P-NC2 >PTR + ZERO? PTR /TRUE + SET 'P-PHR,1 + GETB P-SYNTAX,P-SLOC2 >P-SLOCBITS + GET P-ITBL,P-NC2L + CALL SNARFEM,PTR,STACK,P-PRSI + ZERO? STACK /FALSE + GET P-BUTS,P-MATCHLEN + ZERO? STACK /TRUE + GET P-PRSI,P-MATCHLEN + EQUAL? STACK,1 \?ELS18 + CALL BUT-MERGE,P-PRSO >P-PRSO + RTRUE +?ELS18: CALL BUT-MERGE,P-PRSI >P-PRSI + RTRUE + + + .FUNCT BUT-MERGE,TBL,LEN,BUTLEN,CNT=1,MATCHES=0,OBJ,NTBL + GET TBL,P-MATCHLEN >LEN + PUT P-MERGE,P-MATCHLEN,0 +?PRG1: DLESS? 'LEN,0 /?REP2 + GET TBL,CNT >OBJ + CALL ZMEMQ,OBJ,P-BUTS + ZERO? STACK \?CND3 + ADD MATCHES,1 + PUT P-MERGE,STACK,OBJ + INC 'MATCHES +?CND3: INC 'CNT + JUMP ?PRG1 +?REP2: PUT P-MERGE,P-MATCHLEN,MATCHES + SET 'NTBL,P-MERGE + SET 'P-MERGE,TBL + RETURN NTBL + + + .FUNCT SNARFEM,PTR,EPTR,TBL,BUT=0,LEN,WV,WRD,NW,WAS-ALL=0 + SET 'P-AND,FALSE-VALUE + EQUAL? P-GETFLAGS,P-ALL \?CND1 + SET 'WAS-ALL,TRUE-VALUE +?CND1: SET 'P-GETFLAGS,0 + PUT P-BUTS,P-MATCHLEN,0 + PUT TBL,P-MATCHLEN,0 + GET PTR,0 >WRD +?PRG4: EQUAL? PTR,EPTR \?ELS8 + ZERO? BUT /?ORP12 + PUSH BUT + JUMP ?THN9 +?ORP12: PUSH TBL +?THN9: CALL GET-OBJECT,STACK >WV + ZERO? WAS-ALL /?CND13 + SET 'P-GETFLAGS,P-ALL +?CND13: RETURN WV +?ELS8: ADD PTR,P-WORDLEN + EQUAL? EPTR,STACK \?ELS21 + SET 'NW,0 + JUMP ?CND19 +?ELS21: GET PTR,P-LEXELEN >NW +?CND19: EQUAL? WRD,W?ALL,W?BOTH,W?EVERYT \?ELS26 + CALL MANY-CHECK,P-PHR + ZERO? STACK /FALSE + SET 'P-GETFLAGS,P-ALL + EQUAL? NW,W?OF \?CND6 + ADD PTR,P-WORDLEN >PTR + JUMP ?CND6 +?ELS26: CALL NAUGHTY-WORD?,WRD + ZERO? STACK \FALSE + EQUAL? WRD,W?BUT,W?EXCEPT \?ELS36 + ZERO? BUT /?ORP42 + PUSH BUT + JUMP ?THN39 +?ORP42: PUSH TBL +?THN39: CALL GET-OBJECT,STACK + ZERO? STACK /FALSE + SET 'BUT,P-BUTS + PUT BUT,P-MATCHLEN,0 + JUMP ?CND6 +?ELS36: EQUAL? WRD,W?A,W?ONE \?ELS44 + ZERO? P-ADJ \?ELS47 + SET 'P-GETFLAGS,P-ONE + EQUAL? NW,W?OF \?CND6 + ADD PTR,P-WORDLEN >PTR + JUMP ?CND6 +?ELS47: SET 'P-NAM,P-ONEOBJ + ZERO? BUT /?ORP58 + PUSH BUT + JUMP ?THN55 +?ORP58: PUSH TBL +?THN55: CALL GET-OBJECT,STACK + ZERO? STACK /FALSE + ZERO? NW \?CND6 + RTRUE +?ELS44: EQUAL? WRD,W?AND,W?COMMA \?ELS62 + EQUAL? NW,W?AND,W?COMMA /?ELS62 + SET 'P-AND,TRUE-VALUE + ZERO? BUT /?ORP70 + PUSH BUT + JUMP ?THN67 +?ORP70: PUSH TBL +?THN67: CALL GET-OBJECT,STACK + ZERO? STACK \?CND6 + RFALSE +?ELS62: CALL WT?,WRD,4 + ZERO? STACK \?CND6 + EQUAL? WRD,W?AND,W?COMMA /?CND6 + EQUAL? WRD,W?OF \?ELS76 + ZERO? P-GETFLAGS \?CND6 + SET 'P-GETFLAGS,P-INHIBIT + JUMP ?CND6 +?ELS76: CALL WT?,WRD,32,2 >WV + ZERO? WV /?ELS81 + CALL ADJ-CHECK,WRD,P-ADJ,P-ADJN + ZERO? STACK /?ELS81 + EQUAL? NW,W?OF /?ELS81 + SET 'P-ADJ,WV + SET 'P-ADJN,WRD + JUMP ?CND6 +?ELS81: CALL WT?,WRD,128,0 + ZERO? STACK /?CND6 + SET 'P-NAM,WRD + SET 'P-ONEOBJ,WRD +?CND6: EQUAL? PTR,EPTR /?PRG4 + ADD PTR,P-WORDLEN >PTR + SET 'WRD,NW + JUMP ?PRG4 + + + .FUNCT NAUGHTY-WORD?,WORD + EQUAL? WORD,W?ASS,W?ASSHOLE,W?BITCH /?THN6 + EQUAL? WORD,W?BASTARD,W?COCK,W?COCKSU /?THN6 + EQUAL? WORD,W?CUNT,W?DAMN,W?DAMNED /?THN6 + EQUAL? WORD,W?FUCK,W?FUCKED,W?FUCKING /?THN6 + EQUAL? WORD,W?SHIT,W?SHITHEAD,W?SHITTY /?THN6 + EQUAL? WORD,W?TROT,W?KRIP,W?MEGAKRIP /?THN6 + EQUAL? WORD,W?TROTTING \FALSE +?THN6: PRINTR "Such language from a Lieutenant in the Stellar Patrol!" + + + .FUNCT ADJ-CHECK,WRD,ADJ,ADJN + ZERO? ADJ /TRUE + EQUAL? WRD,W?INNER,W?OUTER,W?LARGE /TRUE + EQUAL? WRD,W?SMALL,W?TWELVE,W?TWENTY \FALSE + RTRUE + + + .FUNCT GET-OBJECT,TBL,VRB=1,BITS,LEN,XBITS,TLEN,GCHECK=0,OLEN=0,OBJ + SET 'XBITS,P-SLOCBITS + GET TBL,P-MATCHLEN >TLEN + BTST P-GETFLAGS,P-INHIBIT /TRUE + ZERO? P-NAM \?CND4 + ZERO? P-ADJ /?CND4 + CALL WT?,P-ADJN,128,0 + ZERO? STACK /?ELS11 + SET 'P-NAM,P-ADJN + SET 'P-ADJ,FALSE-VALUE + SET 'P-ADJN,FALSE-VALUE + JUMP ?CND4 +?ELS11: CALL WT?,P-ADJN,16,3 >BITS + ZERO? BITS /?CND4 + SET 'P-DIRECTION,BITS +?CND4: ZERO? P-NAM \?CND14 + ZERO? P-ADJ \?CND14 + EQUAL? P-GETFLAGS,P-ALL /?CND14 + ZERO? P-GWIMBIT \?CND14 + ZERO? VRB /FALSE + PRINT NOUN-MISSING + RFALSE +?CND14: EQUAL? P-GETFLAGS,P-ALL \?THN26 + ZERO? P-SLOCBITS \?CND23 +?THN26: SET 'P-SLOCBITS,-1 +?CND23: SET 'P-TABLE,TBL +?PRG28: ZERO? GCHECK /?ELS32 + CALL GLOBAL-CHECK,TBL + JUMP ?CND30 +?ELS32: ZERO? LIT \?THN39 + EQUAL? PRSA,V?TELL \?ELS38 +?THN39: FCLEAR WINNER,TRANSBIT + CALL DO-SL,HERE,SOG,SIR + FSET WINNER,TRANSBIT + JUMP ?CND36 +?ELS38: LOC WINNER + FSET? STACK,VEHBIT \?CND36 + LOC WINNER + CALL THIS-IT?,STACK + ZERO? STACK /?CND36 + LOC WINNER + CALL OBJ-FOUND,STACK,TBL +?CND36: CALL DO-SL,WINNER,SH,SC +?CND30: GET TBL,P-MATCHLEN + SUB STACK,TLEN >LEN + BTST P-GETFLAGS,P-ALL /?CND45 + EQUAL? P-GETFLAGS,P-ALL /?ELS49 + GRTR? LEN,1 /?THN52 + ZERO? LEN \?ELS49 + EQUAL? P-SLOCBITS,-1 /?ELS49 +?THN52: EQUAL? P-SLOCBITS,-1 \?ELS58 + SET 'P-SLOCBITS,XBITS + SET 'OLEN,LEN + GET TBL,P-MATCHLEN + SUB STACK,LEN + PUT TBL,P-MATCHLEN,STACK + JUMP ?PRG28 +?ELS58: CALL PUT-ADJ-NAM + ZERO? LEN \?CND61 + SET 'LEN,OLEN +?CND61: ZERO? P-NAM /?ELS66 + ADD TLEN,1 + GET TBL,STACK >OBJ + ZERO? OBJ /?ELS66 + GETP OBJ,P?GENERIC + CALL STACK >OBJ + ZERO? OBJ /?ELS66 + EQUAL? OBJ,NOT-HERE-OBJECT /FALSE + PUT TBL,1,OBJ + PUT TBL,P-MATCHLEN,1 + SET 'P-NAM,FALSE-VALUE + SET 'P-ADJ,FALSE-VALUE + RTRUE +?ELS66: ZERO? VRB /?ELS73 + EQUAL? WINNER,PROTAGONIST /?ELS73 + CALL WHICH-PRINT,TLEN,LEN,TBL + SET 'P-NAM,FALSE-VALUE + SET 'P-ADJ,FALSE-VALUE + RFALSE +?ELS73: ZERO? VRB /?ELS77 + ZERO? P-NAM /?ELS77 + CALL WHICH-PRINT,TLEN,LEN,TBL + EQUAL? TBL,P-PRSO \?ELS84 + PUSH P-NC1 + JUMP ?CND80 +?ELS84: PUSH P-NC2 +?CND80: SET 'P-ACLAUSE,STACK + SET 'P-AADJ,P-ADJ + SET 'P-ANAM,P-NAM + CALL ORPHAN,FALSE-VALUE,FALSE-VALUE + SET 'P-OFLAG,TRUE-VALUE + JUMP ?CND64 +?ELS77: ZERO? VRB /?CND64 + PRINT NOUN-MISSING +?CND64: SET 'P-NAM,FALSE-VALUE + SET 'P-ADJ,FALSE-VALUE + RFALSE +?ELS49: ZERO? LEN \?ELS91 + ZERO? GCHECK /?ELS91 + CALL PUT-ADJ-NAM + ZERO? VRB /?CND94 + SET 'P-SLOCBITS,XBITS + ZERO? LIT \?THN101 + EQUAL? PRSA,V?TELL /?THN101 + EQUAL? PRSA,V?WHERE,V?WHAT \?ELS100 +?THN101: CALL OBJ-FOUND,NOT-HERE-OBJECT,TBL + SET 'P-XNAM,P-NAM + SET 'P-XADJ,P-ADJ + SET 'P-XADJN,P-ADJN + SET 'P-NAM,FALSE-VALUE + SET 'P-ADJ,FALSE-VALUE + SET 'P-ADJN,FALSE-VALUE + RTRUE +?ELS100: PRINT TOO-DARK + CRLF +?CND94: SET 'P-NAM,FALSE-VALUE + SET 'P-ADJ,FALSE-VALUE + RFALSE +?ELS91: ZERO? LEN \?CND45 + SET 'GCHECK,TRUE-VALUE + JUMP ?PRG28 +?CND45: SET 'P-SLOCBITS,XBITS + CALL PUT-ADJ-NAM + SET 'P-NAM,FALSE-VALUE + SET 'P-ADJ,FALSE-VALUE + RTRUE + + + .FUNCT PUT-ADJ-NAM + EQUAL? P-NAM,W?IT /FALSE + PUT P-NAMW,P-PHR,P-NAM + PUT P-ADJW,P-PHR,P-ADJ + RTRUE + + + .FUNCT MOBY-FIND,TBL,OBJ=1,LEN,FOO,NAM,ADJ + SET 'NAM,P-NAM + SET 'ADJ,P-ADJ + SET 'P-NAM,P-XNAM + SET 'P-ADJ,P-XADJ + ZERO? DEBUG /?CND1 + PRINTI "[MOBY-FINDing; P-NAM=" + PRINTB P-NAM + PRINTC 93 + CRLF +?CND1: PUT TBL,P-MATCHLEN,0 +?PRG7: IN? OBJ,ROOMS /?CND9 + CALL THIS-IT?,OBJ >FOO + ZERO? FOO /?CND9 + CALL OBJ-FOUND,OBJ,TBL >FOO +?CND9: IGRTR? 'OBJ,LAST-OBJECT \?PRG7 + GET TBL,P-MATCHLEN >LEN + EQUAL? LEN,1 \?CND17 + GET TBL,1 >P-MOBY-FOUND +?CND17: SET 'P-NAM,NAM + SET 'P-ADJ,ADJ + RETURN LEN + + + .FUNCT WHICH-PRINT,TLEN,LEN,TBL,OBJ,RLEN + ZERO? LEN \?CND1 + CALL REFERRING + RTRUE +?CND1: SET 'RLEN,LEN + EQUAL? WINNER,PROTAGONIST /?ELS6 + PRINTI """I don't understand whether you mean " + JUMP ?CND4 +?ELS6: PRINTI "[Which" + ZERO? P-OFLAG \?THN12 + ZERO? P-MERGED \?THN12 + ZERO? P-AND /?ELS11 +?THN12: PRINTC 32 + PRINTB P-NAM + JUMP ?CND9 +?ELS11: EQUAL? TBL,P-PRSO \?ELS15 + CALL CLAUSE-PRINT,P-NC1,P-NC1L,FALSE-VALUE + JUMP ?CND9 +?ELS15: CALL CLAUSE-PRINT,P-NC2,P-NC2L,FALSE-VALUE +?CND9: PRINTI " do you mean, " +?CND4: +?PRG18: INC 'TLEN + GET TBL,TLEN >OBJ + FSET? OBJ,NARTICLEBIT /?CND20 + PRINTI "the " +?CND20: PRINTD OBJ + EQUAL? LEN,2 \?ELS25 + EQUAL? RLEN,2 /?CND26 + PRINTC 44 +?CND26: PRINTI " or " + JUMP ?CND23 +?ELS25: GRTR? LEN,2 \?CND23 + PRINTI ", " +?CND23: DEC 'LEN + LESS? LEN,1 \?PRG18 + EQUAL? WINNER,PROTAGONIST /?ELS38 + PRINTR ".""" +?ELS38: PRINTR "?]" + + + .FUNCT GLOBAL-CHECK,TBL,LEN,RMG,RMGL,CNT=0,OBJ,OBITS,FOO + GET TBL,P-MATCHLEN >LEN + SET 'OBITS,P-SLOCBITS + GETPT HERE,P?GLOBAL >RMG + ZERO? RMG /?CND1 + PTSIZE RMG + SUB STACK,1 >RMGL +?PRG4: GETB RMG,CNT >OBJ + CALL THIS-IT?,OBJ + ZERO? STACK /?CND6 + CALL OBJ-FOUND,OBJ,TBL +?CND6: IGRTR? 'CNT,RMGL \?PRG4 +?CND1: GETP HERE,P?THINGS >RMG + ZERO? RMG /?CND12 + GET RMG,0 >RMGL + SET 'CNT,0 +?PRG15: ZERO? P-NAM /?ELS19 + ADD CNT,1 + GET RMG,STACK + EQUAL? P-NAM,STACK \?CND17 +?ELS19: ZERO? P-ADJ /?ELS23 + ADD CNT,2 + GET RMG,STACK + CALL WT?,STACK,32,2 + EQUAL? P-ADJ,STACK \?CND17 +?ELS23: ZERO? P-NAM \?THN28 + ZERO? P-ADJ /?CND17 +?THN28: SET 'LAST-PSEUDO-LOC,HERE + ADD CNT,3 + GET RMG,STACK + PUTP PSEUDO-OBJECT,P?ACTION,STACK + GETPT PSEUDO-OBJECT,P?ACTION + SUB STACK,5 >FOO + ADD CNT,1 + GET RMG,STACK >RMG + GET RMG,0 + PUT FOO,0,STACK + GET RMG,1 + PUT FOO,1,STACK + CALL OBJ-FOUND,PSEUDO-OBJECT,TBL + JUMP ?CND12 +?CND17: ADD CNT,3 >CNT + LESS? CNT,RMGL /?PRG15 +?CND12: GET TBL,P-MATCHLEN + EQUAL? STACK,LEN \FALSE + SET 'P-SLOCBITS,-1 + SET 'P-TABLE,TBL + CALL DO-SL,GLOBAL-OBJECTS,1,1 + SET 'P-SLOCBITS,OBITS + RETURN P-SLOCBITS + + + .FUNCT DO-SL,OBJ,BIT1,BIT2,BTS + ADD BIT1,BIT2 + BTST P-SLOCBITS,STACK \?ELS5 + CALL SEARCH-LIST,OBJ,P-TABLE,P-SRCALL + RSTACK +?ELS5: BTST P-SLOCBITS,BIT1 \?ELS12 + CALL SEARCH-LIST,OBJ,P-TABLE,P-SRCTOP + RSTACK +?ELS12: BTST P-SLOCBITS,BIT2 \TRUE + CALL SEARCH-LIST,OBJ,P-TABLE,P-SRCBOT + RSTACK + + + .FUNCT SEARCH-LIST,OBJ,TBL,LVL,FLS,NOBJ + FIRST? OBJ >OBJ \FALSE +?PRG6: EQUAL? LVL,P-SRCBOT /?CND8 + GETPT OBJ,P?SYNONYM + ZERO? STACK /?CND8 + CALL THIS-IT?,OBJ + ZERO? STACK /?CND8 + CALL OBJ-FOUND,OBJ,TBL +?CND8: EQUAL? LVL,P-SRCTOP \?THN18 + FSET? OBJ,SEARCHBIT /?THN18 + FSET? OBJ,SURFACEBIT \?CND13 +?THN18: FIRST? OBJ >NOBJ \?CND13 + FSET? OBJ,OPENBIT /?THN23 + FSET? OBJ,TRANSBIT /?THN23 + ZERO? P-MOBY-FLAG /?CND13 +?THN23: FSET? OBJ,SURFACEBIT \?ELS29 + PUSH P-SRCALL + JUMP ?CND25 +?ELS29: FSET? OBJ,SEARCHBIT \?ELS31 + PUSH P-SRCALL + JUMP ?CND25 +?ELS31: PUSH P-SRCTOP +?CND25: CALL SEARCH-LIST,OBJ,TBL,STACK >FLS +?CND13: NEXT? OBJ >OBJ /?PRG6 + RTRUE + + + .FUNCT OBJ-FOUND,OBJ,TBL,PTR + GET TBL,P-MATCHLEN >PTR + ADD PTR,1 + PUT TBL,STACK,OBJ + ADD PTR,1 + PUT TBL,P-MATCHLEN,STACK + RTRUE + + + .FUNCT TAKE-CHECK + GETB P-SYNTAX,P-SLOC1 + CALL ITAKE-CHECK,P-PRSO,STACK + ZERO? STACK /FALSE + GETB P-SYNTAX,P-SLOC2 + CALL ITAKE-CHECK,P-PRSI,STACK + RSTACK + + + .FUNCT ITAKE-CHECK,TBL,IBITS,PTR,OBJ,TAKEN + GET TBL,P-MATCHLEN >PTR + ZERO? PTR /TRUE + BTST IBITS,SHAVE /?THN8 + BTST IBITS,STAKE \TRUE +?THN8: +?PRG10: DLESS? 'PTR,0 /TRUE + ADD PTR,1 + GET TBL,STACK >OBJ + EQUAL? OBJ,IT \?ELS19 + CALL VISIBLE?,P-IT-OBJECT + ZERO? STACK \?ELS22 + CALL REFERRING + RFALSE +?ELS22: SET 'OBJ,P-IT-OBJECT + JUMP ?CND17 +?ELS19: EQUAL? OBJ,HIM \?CND17 + CALL VISIBLE?,P-HIM-OBJECT + ZERO? STACK \?ELS29 + CALL REFERRING,TRUE-VALUE + RFALSE +?ELS29: SET 'OBJ,P-HIM-OBJECT +?CND17: CALL ULTIMATELY-IN?,OBJ + ZERO? STACK \?PRG10 + EQUAL? OBJ,INTNUM,HANDS /?PRG10 + EQUAL? OBJ,LEASH \?ELS38 + ZERO? HANGING-IN-AIR \?PRG10 +?ELS38: SET 'PRSO,OBJ + FSET? OBJ,TRYTAKEBIT \?ELS45 + SET 'TAKEN,TRUE-VALUE + JUMP ?CND43 +?ELS45: CALL UNTOUCHABLE?,OBJ + ZERO? STACK /?ELS47 + SET 'TAKEN,TRUE-VALUE + JUMP ?CND43 +?ELS47: EQUAL? WINNER,PROTAGONIST /?ELS49 + SET 'TAKEN,FALSE-VALUE + JUMP ?CND43 +?ELS49: BTST IBITS,STAKE \?ELS51 + CALL ITAKE,FALSE-VALUE + EQUAL? STACK,TRUE-VALUE \?ELS51 + SET 'TAKEN,FALSE-VALUE + JUMP ?CND43 +?ELS51: SET 'TAKEN,TRUE-VALUE +?CND43: ZERO? TAKEN /?ELS58 + BTST IBITS,SHAVE \?ELS58 + GET TBL,P-MATCHLEN + LESS? 1,STACK \?ELS63 + PRINT YNH + PRINTI " all those things!" + CRLF + RFALSE +?ELS63: EQUAL? OBJ,NOT-HERE-OBJECT \?CND61 + PRINT YOU-CANT + PRINTI "see that here!" + CRLF + RFALSE +?CND61: EQUAL? WINNER,PROTAGONIST \?ELS68 + PRINT YNH + JUMP ?CND66 +?ELS68: PRINTI "It doesn't look like" + CALL TPRINT,WINNER + PRINTI " has" +?CND66: CALL THIS-IS-IT,OBJ + CALL TRPRINT,OBJ + RFALSE +?ELS58: ZERO? TAKEN \?PRG10 + IN? PROTAGONIST,OBJ /?PRG10 + EQUAL? WINNER,PROTAGONIST \?PRG10 + PRINTI "[taking" + CALL TPRINT,OBJ + PRINTI " first]" + CRLF + JUMP ?PRG10 + + + .FUNCT MANY-CHECK,PHR=2,LOSS=0,TMP,?TMP1 + ZERO? PHR \?ELS3 + GETB P-SYNTAX,P-SLOC1 + BTST STACK,SMANY /?ELS3 + SET 'LOSS,1 + JUMP ?CND1 +?ELS3: EQUAL? PHR,1 \?ELS7 + GETB P-SYNTAX,P-SLOC2 + BTST STACK,SMANY /?ELS7 + SET 'LOSS,2 + JUMP ?CND1 +?ELS7: EQUAL? PHR,2 \?ELS11 + GET P-PRSO,P-MATCHLEN + GRTR? STACK,1 \?ELS11 + GETB P-SYNTAX,P-SLOC1 + BTST STACK,SMANY /?ELS11 + SET 'LOSS,1 + JUMP ?CND1 +?ELS11: EQUAL? PHR,2 \?CND1 + GET P-PRSI,P-MATCHLEN + GRTR? STACK,1 \?CND1 + GETB P-SYNTAX,P-SLOC2 + BTST STACK,SMANY /?CND1 + SET 'LOSS,2 +?CND1: ZERO? LOSS /TRUE + PRINTC 91 + PRINT YOU-CANT + PRINTI "use multiple " + EQUAL? LOSS,2 \?CND24 + PRINTI "in" +?CND24: PRINTI "direct objects with """ + GET P-ITBL,P-VERBN >TMP + ZERO? TMP \?ELS29 + PRINTI "tell" + JUMP ?CND27 +?ELS29: ZERO? P-OFLAG \?THN32 + ZERO? P-MERGED /?ELS31 +?THN32: GET TMP,0 + PRINTB STACK + JUMP ?CND27 +?ELS31: GETB TMP,2 >?TMP1 + GETB TMP,3 + CALL WORD-PRINT,?TMP1,STACK +?CND27: PRINTI """.]" + CRLF + RFALSE + + + .FUNCT ZMEMQ,ITM,TBL,SIZE=-1,CNT=1 + ZERO? TBL /FALSE + LESS? SIZE,0 /?ELS6 + SET 'CNT,0 + JUMP ?CND4 +?ELS6: GET TBL,0 >SIZE +?CND4: +?PRG9: GET TBL,CNT + EQUAL? ITM,STACK /TRUE + IGRTR? 'CNT,SIZE \?PRG9 + RFALSE + + + .FUNCT ZMEMQB,ITM,TBL,SIZE,CNT=0 +?PRG1: GETB TBL,CNT + EQUAL? ITM,STACK /TRUE + IGRTR? 'CNT,SIZE \?PRG1 + RFALSE + + + .FUNCT LIT?,RM,RMBIT=1,OHERE,LIT=0 + SET 'P-GWIMBIT,ONBIT + SET 'OHERE,HERE + SET 'HERE,RM + ZERO? RMBIT /?ELS3 + FSET? RM,ONBIT \?ELS3 + SET 'LIT,TRUE-VALUE + JUMP ?CND1 +?ELS3: PUT P-MERGE,P-MATCHLEN,0 + SET 'P-TABLE,P-MERGE + SET 'P-SLOCBITS,-1 + EQUAL? OHERE,RM \?CND8 + CALL DO-SL,WINNER,1,1 + EQUAL? WINNER,PROTAGONIST /?CND8 + IN? PROTAGONIST,RM \?CND8 + CALL DO-SL,PROTAGONIST,1,1 +?CND8: CALL DO-SL,RM,1,1 + GET P-TABLE,P-MATCHLEN + GRTR? STACK,0 \?CND1 + SET 'LIT,TRUE-VALUE +?CND1: SET 'HERE,OHERE + SET 'P-GWIMBIT,0 + RETURN LIT + + + .FUNCT PRSO-PRINT,PTR + ZERO? P-MERGED \?THN6 + GET P-ITBL,P-NC1 >PTR + GET PTR,0 + EQUAL? STACK,W?IT \?ELS5 +?THN6: PRINTC 32 + PRINTD PRSO + RTRUE +?ELS5: GET P-ITBL,P-NC1L + CALL BUFFER-PRINT,PTR,STACK,FALSE-VALUE + RSTACK + + + .FUNCT PRSI-PRINT,PTR + ZERO? P-MERGED \?THN6 + GET P-ITBL,P-NC2 >PTR + GET PTR,0 + EQUAL? STACK,W?IT \?ELS5 +?THN6: PRINTC 32 + PRINTD PRSI + RTRUE +?ELS5: GET P-ITBL,P-NC2L + CALL BUFFER-PRINT,PTR,STACK,FALSE-VALUE + RSTACK + + + .FUNCT THIS-IT?,OBJ,SYNS,?TMP1 + FSET? OBJ,INVISIBLE /FALSE + ZERO? P-NAM /?ELS5 + GETPT OBJ,P?SYNONYM >SYNS + PTSIZE SYNS + DIV STACK,2 + SUB STACK,1 + CALL ZMEMQ,P-NAM,SYNS,STACK + ZERO? STACK /FALSE +?ELS5: ZERO? P-ADJ /?ELS9 + GETPT OBJ,P?ADJECTIVE >SYNS + ZERO? SYNS /FALSE + PTSIZE SYNS + SUB STACK,1 + CALL ZMEMQB,P-ADJ,SYNS,STACK + ZERO? STACK /FALSE +?ELS9: ZERO? P-GWIMBIT /TRUE + FSET? OBJ,P-GWIMBIT /TRUE + RFALSE + + .ENDI diff --git a/parser.zil b/parser.zil new file mode 100644 index 0000000..768ffc0 --- /dev/null +++ b/parser.zil @@ -0,0 +1,1811 @@ +"PARSER for + STATIONFALL + (c) Copyright 1987 Infocom, Inc. All Rights Reserved." + +;"Parser global variable convention: All parser globals will begin +with 'P-'. Local variables are not restricted in any way." + + + +> + +> + +> + +> + + + + + + + +> + +;"pointers used by CLAUSE-COPY (source/destination beginning/end pointers)" + + + + + + + + + >> + >> + >> + +> + + ;"number of bytes in input buffer" +> ;"INBUF - Input buffer for READ" +> ; "FIX #36" +> + + <> <> <>>> + + + + + +> ;"Parse-cont variable" + +> + +> + +;> + + + + > ;"PRSO is a direction" + ;"is this necessary?" + > + ) + ;( + ) + ( + > + ) + (T + )>> + +> + +> ;"Orphan flag" + +> + +> + +> + +> + +;"Parser variables and temporaries" + + ;"Byte offset to # of entries in LEXV" + ;"Word offset to start of LEXV entries" + ;"Number of words per LEXV entry" + + ;"Offset to parts of speech byte" + ;"Offset to first part of speech" + ;"First part of speech bit mask in PSOFF byte" + + +> + +> + +> + +> + + + + + + + + + + + + + +> + +;> + +> + +> + +" Grovel down the input finding the verb, prepositions, and noun clauses. + If the input is or , fall out immediately + setting PRSA to ,V?WALK and PRSO to . Otherwise, perform + all required orphaning, syntax checking, and noun clause lookup." + +) ;(DONT <>) + OMERGED OWINNER OLEN LEN (DIR <>) (NW 0) (LW 0) (CNT -1)) + > ,P-ITBLLEN> ) + (T + + >)> + )>> + + + ;> + ;> + ;> + ;> + > + > + > + + + + + > + + ,VEHBIT>> + >)> + >)> + + + ;"rfix no. 36" + > + > + )> + > + >) + (,P-CONT + + ;> + > + )> + > + > + )> + > + >) + (T + + > + ,VEHBIT>> + >)> + > + > + )> + "> + + >)> + > + + + ) + ( ,W?OOPS> + > ;"rfix 36" + ,W?PERIOD ,W?COMMA> + > + >)> + > + + ) + ( + + )> + + >> + ;"Fixes OOPS w/char" + 6>> + 7>> + <+ <* ,P-LEXELEN> 3>> + + >;"Will this help?" + > + ) + (T + > + + )>) + (T + >)> + ,W?AGAIN ,W?G> + + ) + ( + + ) + (> + >> + + ) + ( + > + ,W?PERIOD ,W?COMMA ,W?THEN> + > + ,W?AND>> + >> + 2>>) + (T + + )>) + (T + > + 1>>)> + 0> + + + ) + (T + >)> + ;> + + + + + + + + ) + (T + >)>>) + (T + + + + > ;"fix #36" + >>>> + > + >>> + > + + ;> + + + > 0> + > + ) + (>> + ) + (> + >> + > + + + ;"next clause added 8/20/84 by JW to + enable TELL MY NAME TO BEAST" + > + + ) + ( + + + > + + + ) + ;( + > + > + + + )> + + > + + >) + (T + )>)> + + >> + + ) + (> + ,ACT?WALK ,ACT?GO> + + + > + + >> + + > + + >>> + + + + ,W?THEN>)> + > + > + )>) + (> + > + + + + + + 2>>>> + >>) + (> + + + + > + >> + + >> + )> + ;"3/3/86 -- fix OPEN BACK DOOR given that + back is also a prep for HAND BACK OBJ -pdl" + + + + > + >>) + (> + + >> + + + + )>) + ( + + ) + (T + > + > + > + + > + )>)>) + ;( + > + ) + () + ( + + ;"Next expr added to fix FORD, TELL ME WHY" + > + + ) + (T + + )>) + (T + + )> + + >>)> + > + + + > + + + ; + )> + > + > + + >> + ) + (,P-OFLAG + )> + + + + > + T)>> + +; + > + +) "AUX" X Y Z) + >>> + > + >> + + + >> + >> + + )> + + > + +;> + +> + +> + +> + +;"For AGAIN purposes, put contents of one LEXV table into another." +> + > + > + 2>> + > + 3>> + > + > + + )>>> + +;"Put contents of one INBUF into another" + ) + (T >)>>> + +;"Put the word in the positions specified from P-INBUF to the end of +OOPS-INBUF, leaving the appropriate pointers in AGAIN-LEXV" +> + ) + (T + >> + >>>)> + > + >> + > + )>> + + .LEN>> + +;"WT? checks whether word pointed at by PTR is the correct part of speech. + The second argument is the part of speech (,PS?). The + 3rd argument (,P1?), if given, causes the value + for that part of speech to be returned." + +;> .BIT> + ) + (T + > + > >)> + )>)>> + +> .BIT> + + ) + ( + 1) + (T + > + > + >)> + )>)>> + +> + >> + .NW) + (ELSE + >)>)>> + +;" Scan through a noun clause, leave a pointer to its starting location" +) (FIRST?? T) NW (LW 0)) + 2>> + > + > .VAL> + .WRD> + >) + (T >)> + > )> + > >> + > 0> + >> + )> + > + + ) + (>> + > + + + > + ;"fix 'knock on back door', + break compiler">>> + 4>>) + ;( + > + ) + ( + ) + ( + > + + > + >)>) + ( + + + ;"ADDED 4/27 FOR TURTLE,UP" + >> + > + + >> + >) + ;"This next clause was 2 clauses further down" + ;"This attempts to fix EDDIE, TURN ON COMPUTER" + ( 0>> + > + ,W?THEN> + >) + ( + + + > + >> + T) + ( + > + > + + > + + ,ACT?SHOW ,ACT?HAND + ,ACT?FEED>>>) + ( + > + >> + + 2>>> + ) + (T >)>) + ;"next clause replaced by following on from games + with characters" + ;( 0>>> + + >>) + ( + >) + ( T) + (T + + )>) + (T )> + + > + >>> + +> 2>> + > 3>> + ) + (> 0> + ) + (T + > + + > + <- .CHR 48>>>) + (>> + )> + >)>> + + ;"next COND handles inputs like 4,000" + > ,W?COMMA> + > + >> + > + 2>>> + 2>>>> + > + 2> + .CCTR> + ;"returning 0 would = false" + )> + .TMP>> + > + + ) + (T + > + >> + > + 2> + 2>>> + 3> + 3>>>)>> + > + 2>>)>)> + ;"this 10000 used to be 3000" + )> + + ,W?NUMBER> + +> 2>> + > 3>> + > 0> + ) + (T + > + > + + ) + ( + > + <- .CHR 48>>>) + (T + )> + >)>> + > ;"only handles 3 digits after the comma" + ) + ( ;"if it returned 0, the calling predicate becomes <>" + ) + (T + )>> + + + +) (VRB <>) WRD) + > + 0>> + ,PS?VERB ,P1?VERB> + > + + ) + ( + ) + ( + > + + + > + > + )> + >>> + + >>> + ) + ( ) + ( 1> + > + > + > + > + > + > + >)> + )>) + (T + > + ;>)> + >) + (T )>) + ( 1> + > + > + > + > + > + > + >)>)> + > + > + ) + (T )>) + (,P-ACLAUSE + > > + > + ) + (T + > + > >)> + > + > + + ) + (T > )>) + ( + + + ,PS?ADJECTIVE> ;"same as WT?" + >> + ) + ( + + ) + ( ,PS?OBJECT> + + ) + (T + )> + )> + > + + + + > + )>>)>)> + > + > + > + + + ; 0>> > + > ,P-ITBLLEN> + + ) + (T >)>> + T> + +)) + >) + (ELSE )> + + > + + ) + (ELSE + )> + + 0>> > + > + > + +;"Print undefined word in input. + PTR points to the unknown word in P-LEXV" + + ) + (ELSE + > + >)>>> + + + + >> 2> + 3>> + + > + >> + + + >> 2> + 3>> + + > + +;" Perform syntax matching operations, using P-ITBL as the source of + the verb and adjectives for this input. Returns false if no + syntax matches, and does it's own orphaning. If return is true, + the syntax is saved in P-SYNTAX." + + + + + + + + + + + + + + +) (DRIVE2 <>) PREP VERB) + >> + + )> + >> + > + > + ,P-SONUMS>> + T) + (> + + >> + >>> + ) + ( > + > + ) + ( + > + + )>)> + + ) + (T + + )>) + (T >)>> + + + >>> + + + ) + ( + + >>> + + + ) + ;( + + ) + (T + + + ) + (T + )> + + ) + ( ,ACTORBIT>> + ,ACTORBIT>>> + ) + (T + )> + + ) + (T + )> + + > + + > + + )> + ) + (T + )>> + + + ) + (T + > + )> + )>> + +> ;"? ,P-OTBL?" + + ) + ( + ) + (> + >) + (T + > + )>> + +; + > + + + + )> + > + > + > + ) + (T >)>> + + + + + )> + > + + + + )> + > + ) + (.D2 + > + )>> + + .THE?>> + +) WRD (FIRST?? T) (PN <>)) + + ) + (T + >) + (T + )> + > ,W?PERIOD> + ) + ( + + ) + ( + + ) + (T + + .CP + >> + )> + + ) + ( + > + ) + ( + > + ) + ;( + > + ) + (T + + >)> + >)>)> + >>> + + + ) + (T + )>> + + + >) + (T + > 32>> + 1> <+ 1>>)>> + +> + + + ) + (T + > + )>)>> + +) + "AUX" OCL BEG END BB EE OBEG CNT B E) + > + > + > + > + > + > + )> + >> + + > + > + )> + > + >>) + (>> + + >)>) + (ELSE + >)> + >> + + + .OBEG>> 0>> + + > + > + >> + )> + >> + )> + 2>>> + ,P-LEXELEN> 2>>>> + +> + 2>> + .WRD> + + > + + + + 2>> + ) + ( .PREP> + >>)>>> + + + >> + + + + + )> + + + + > + + 1> + > + + > + > + >> + + )> + > + ) + (T + )>)> + + .OBJ)>) + (T + + )>> + +> 0>> + + > + ,P-PRSO> > + > + >>)> + > 0>> + + > + ,P-PRSI> > + >> + 1> + >) + (T >)>)>)> + > + +> + + + ) + (> ,P-BUTS>) + (T + .OBJ> + >)> + >> + + + + .NTBL> + +> + +> + +> + +> + + + +> + +> + +> + +> + +> + +> + +> +> + + + + + + + + + +) LEN WV WRD NW (WAS-ALL <>)) + > + + )> + + ; + ; + + + > + + >> + )> + ) + (T + > + ) + (T >)> + + > + )> + + + >)>) + ( ;"This clause at PARSER too" + ) + ( + > > + + ) + ( + + + + >)>) + (T + + > > + >)>) + ( + >> + + > > + T) + () + () + ( + + )>) + (> + + >> ;"RFIX NO. 40" + + ) + ( + + )>)> + > + > + )>>> + + + + + + + + + + > + ) + (T + )>> + +;"grabs the first adjective, unless it comes across a special-cased adjective" + + ) + ( + ) + (T + )>> + + + + + + + + + +) (OLEN 0) OBJ) + + > + )> + + ,P-ADJ> + + + > + >) + (> + )>)> ;"Added by JW 4-17-85" + + + > + > + )> + )> + > > + )> + + ) + (T + > + + + ) + ( ,VEHBIT> + >> + .TBL>)> + )> + .TLEN>> + ;>>) + ;( + > + >> + "?]" CR> + ) + (ELSE + + )>) + (> + + >>>> + + + + .LEN>> + ) + (T + + + )> + >> + >>> + + )> + + + > + > + ) + (>> + ; + + > + > + ) + ( + + ,P-NC1) + (T ,P-NC2)>> + + + <>> + ) + (.VRB + )> + > + > + )>) + ( .GCHECK> + + + + > + ;"Changed 6/10/83 - MARC" + + + + + > + > + > + ) + (T + )>)> + > + > + ) + ( )> + + + > + > + >> + +> + + )>> + + ;"ZILCH should stick the # of the last object here" + + + + + + )> + + % ;>> ;"ZIP case" + '> + > + >> + >)> + + )>>>) + (T ;"ZIL case" + ' + > + + ) + (T + + >)>> + + >)> + > 1> + >)> + + + > + +> +> +> +> +> + + + + )> + + > + ) + (T + + + + ) + ( + >) + (T + >)> + )> + > + > + > + )> + + + > + )> + ) + ( + )> + > + + )>> + > + ) + (T + )>> + +; + + + + ) + ( + >) + (T + >)> + + > + > + > + )> + + + > + )> + ) + ( + )> + > 1> + + )>>> + +> + + > + 1>> + >> + )> + + )>>)> + > + > + + >>>>) + ;(>>>>) + (> + ,PS?ADJECTIVE ,P1?ADJECTIVE>>>>) + ( + ; + ;) + (T + >)> + + >> + 5>> + >> + > + > + + )> + > + > + )>>)> + .LEN> + + + + + ;> + > + )>)>> + +> + ) + (T + + ) + ( + ) + (T )>)>> + + + + + +> + > + + > + )> + > + + > + >> + + + ,P-MOBY-FLAG> + + ,P-SRCALL) + ( + ,P-SRCALL) + (T ,P-SRCTOP)>>>)>)> + >) (T )>>)>> + +> + .OBJ> + >> + +> + >>> + +> + + >> + > 0> + ) + (T + >> + + > + + ) + (T + )>) + ( + > + + ) + (T + )>) + ;( + > + + ) + (T + )>)> + + > + T) + ( + ,HANGING-IN-AIR> + T) + (T + + + ) + ( + ) + (> + >) + ( + > T>> + >) + (T + )> + > + > + + ) + ( + + )> + + ) + (T + )> + + + ) + ( + > + > + )>)>)>>) + (T)>> + +) TMP) + + ,SMANY>>> + ) + ( + ,SMANY>>> + ) + ( + 1> + ,SMANY>>> + ) + ( + 1> + ,SMANY>>> + )> + + + )> + + > + + ) + ( + >) + (T + >)> + + ) + (T)>> + + )> + > ) + (ELSE >)> + > + ) + ( + )>>> + +> + ) + ( + )>>> + +)) + + + + > + ) + (T + + + + + + > + > + )>)> + + 0> + )>)> + + + .LIT> + +> 0> ,W?IT>> + ) + (T + <>>)>> + +> 0> ,W?IT>> + ) + (T + <>>)>> + +;"former CRUFTY.ZIL routine" + + + ) + (> + <- 2> 1>>>> + ) + (>> + 1>>>>> + ) + (> >> + )> + > \ No newline at end of file diff --git a/s6.zap b/s6.zap new file mode 100644 index 0000000..0c8cf3a --- /dev/null +++ b/s6.zap @@ -0,0 +1,15 @@ + .INSERT "PS:S6FREQ" ; Frequent word table + .INSERT "PS:S6DAT" ; Data file + .INSERT "PS:S6PUR" + .INSERT "PS:MISC" + .INSERT "PS:PARSER" + .INSERT "PS:SYNTAX" + .INSERT "PS:VERBS" + .INSERT "PS:GLOBALS" + .INSERT "PS:SHIP" + .INSERT "PS:STATION" + .INSERT "PS:VILLAGE" + + .INSERT "PS:S6STR" + + .END diff --git a/s6.zil b/s6.zil new file mode 100644 index 0000000..a0bc424 --- /dev/null +++ b/s6.zil @@ -0,0 +1,28 @@ +"S6 for + STATIONFALL + (c) Copyright 1987 Infocom, Inc. All Rights Reserved." + + + +ON!-INITIAL +OFF!-INITIAL ;"makes debugging possible -- pdl" + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/s6.zip b/s6.zip new file mode 100644 index 0000000000000000000000000000000000000000..94dcd88c623a20e9205649aa245a046293febd2c GIT binary patch literal 121724 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⋘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 wFj8It#lpCjgiwwuRAsp<90H$tS#gPZNm8sO$ go wrong go wrong go wrong.." + .GSTR STR?188," filling the bay with hot ion gasses. Since you slept through most lectures at boot camp, you may not recall that hot ion gasses are pretty deadly." + .GSTR STR?189,". Once in space, the truck's air gushes out through the open hatch." + .GSTR STR?190,", leaving an impressive cloud of ion dust. However, you're in no condition to admire it, since you are now smeared all over the rear wall of the truck." + .GSTR STR?191,"Fuel level at three-quarters" + .GSTR STR?192,"Fuel level at one-quarter" + .GSTR STR?193,"Docking bay one is occupied. Defaulting to bay two" + .GSTR STR?194,"Arrival at terminus of inputted course. Fuel levels now effectively at zero. Oxygen supply for one person: approximately two chrons" + .GSTR STR?195," As the oxygen runs low, Floyd becomes quite chipper. Never before has he been in such a rust-inhibiting atmosphere. You, on the other hand, are dead." + .GSTR STR?196," Ramosian tree-mold custard" + .GSTR STR?197," apricot yogurt" + .GSTR STR?198," blueberry ice cream" + .GSTR STR?199,"This is a fairly large space where much of the maintenance work for the station takes place. Some repair work for visiting ships is also done here. The room is filled with all sorts of repair and fabrication machinery. A door leads south, and there's an opening to the north." + .GSTR STR?200,"I'm really not at all mechanically inclined. My sincerest apologies." + .GSTR STR?201,"It's a kind of a thingamabob for putting in a, you know, a whosiwhatsis." + .GSTR STR?202,"This is one of the storage areas. Exits lie to the east and south." + .GSTR STR?203,"twenty tiny sockets" + .GSTR STR?204,"The central corridor continues around to the southeast and southwest, but another corridor joins from the north. There's a door to the east and a doorway to the northeast." + .GSTR STR?205,"The corridor widens here as it approaches the skin of the space station at the point where a Scientific Sub-Module would connect. Sure enough, the connecting tube of a Sub-Module begins just to the north! An auto-door lies to the west. Opposite it, a doorway leads east." + .GSTR STR?206,"This is the shop for station personnel, selling everything from postcards to chewing gum at inflated prices. Exits lead west and southwest." + .GSTR STR?207,"In the corner of the PX is a Stellar Patrol dispensing machine, consisting of a screen (displaying the dispenser's ""exciting"" offerings), a slot (for coin insertion), a keypad (for typing your selection), and a hole (where the dispensed item hopefully -- but rarely -- arrives)." + .GSTR STR?208,"coin slot" + .GSTR STR?209," In case you were napping during Demolitions Training, this means that you're now a fine layer of ash all over the walls of the PX." + .GSTR STR?210,"It's a kind of a thingamabob for connecting a, you know, a whosiwhatsis." + .GSTR STR?211,"This infirmary has the finest diagnostic equipment that unlimited Stellar Patrol budgets can buy. To the east, an ID reader indicates a security door. You can leave to the west or southeast." + .GSTR STR?212,"This is a modest prison, with three cells. The only exit is west." + .GSTR STR?213,"The corridor continues around to the northwest and southwest, and an adjoining one heads east." + .GSTR STR?214,"This central corridor turns northeast and northwest of here. A second corridor begins here and leads south. There are doorways to the southwest, southeast, and east." + .GSTR STR?215,"This is the Deep-Space Communication Center, which keeps the station in touch with the Stellar Patrol Command and the rest of the Third Galactic Union. Although regulations state that the Comm Center must me monitored around the clock, ten chrons per day, there's no one on duty. + Most of the equipment here is too complicated for anyone without Deep-Space Communications Training to use. However, the red button of the wide-band emergency beacon is well-marked. The only exit is north." + .GSTR STR?216," The shock seems to have been a bit too much for your heart." + .GSTR STR?217,"This is the room where octuplet copies of important forms are stored. Since it is only about a hundred square meters, this room cannot hold more than a few days worth of storage before being dumped to nanofilm. Mercifully, there is an exit to the northeast." + .GSTR STR?218,"reader" + .GSTR STR?219," The log reader explodes!" + .GSTR STR?220,"These are by far the nicest living quarters on the station, with separate sleeping, changing, and working cubicles, and a private SanFac. The only exit is west." + .GSTR STR?221,"Sitting on the Commander's desk is an ordinary-looking log tape. There's a notation printed on it." + .GSTR STR?222,"""Commander's Log -- 11349.12.2 through 11349.12.4""" + .GSTR STR?223,"A sturdy safe is welded to the deck next to the desk." + .GSTR STR?224,"The safe has been blown open! The area around the safe is blackened, and a burnt odor hangs in the air." + .GSTR STR?225,"hole" + .GSTR STR?226,"This is the Station Commander's conference room. Doors point north and west." + .GSTR STR?227,"This is secondary weapons storage deck, but the only weapon deck on a station without a Military Sub-Module. Exit: south." + .GSTR STR?228,"This is a wide but not very tall docking bay. The station entrance lies to the east." + .GSTR STR?229,"This cramped dormitory, composed of approximately twenty private cubicles, curves around the northern half of this level, with exits to the southeast and southwest." + .GSTR STR?230,"You enter one of the cubicles but find nothing of interest." + .GSTR STR?231,"This warren of tiny cubicles fills the southern half of this level, curving toward exits in the northeast and northwest corners." + .GSTR STR?232,"This is a crowded but otherwise typical sanitary facility, with rows of showers, toilet stalls, and sinks. There are exits both north and south." + .GSTR STR?233,"A multiple-function exercise machine sits imposingly on one side of the gym. There is a sign above it." + .GSTR STR?234,"The exercise machine hums encouraging platitudes as it exercises you to death." + .GSTR STR?235,"In the corner, next to the dryer, is a large empty spot where the washer should be." + .GSTR STR?236,"lurches forward and slams shut on your arm. Before you pass out from the pain, you hear a rumbling sound from the presser, but you can't decide whether it sounds more like a chuckle or a burp." + .GSTR STR?237,"This sixty-seat auditorium is used for lectures, certain large briefings, an occasional live entertainment, and a rare live broadcast over deep-space channels. A projection booth dominates the rear of the room. The only entrance is on the north side of the theatre." + .GSTR STR?238,"Aaarghhh! The soup is poisoned! It's burning up your insides!!" + .GSTR STR?239,"This is the primary storage room of the station, with large stockpiles of important items. For example, basic organic materials are needed to supplement the food supply due to the tiny inefficiencies of the recycling process. This is nearly the top level of the Command Module, and the ceiling curves in sharply over the supply room, which curves around to doors at the northwestern and southwestern ends." + .GSTR STR?240,"detonator" + .GSTR STR?241,"This is a medium-sized conference room with doors to the south and west." + .GSTR STR?242,"This is a fairly large conference room with north and south exits." + .GSTR STR?243,"This station's library has some printed material, such as recently transmitted magazines, but primarily it is a location for reading nanofilm spools, via the spool reader, and accessing the main computer's data banks, via the small computer terminal. There's a door to the north and an exit to the west." + .GSTR STR?244,"Magazines are not to be removed from the library" + .GSTR STR?245,"""Collater Repair Manual""" + .GSTR STR?246,"""Food Processing Unit Repair Manual""" + .GSTR STR?247,"You stroll down one of the pebbled paths. It circles the garden, passing more exotic plants, and returns to the area near the elevator." + .GSTR STR?248,"""Emergency Elevator Override Controls + (See Station Commander + for access key)""" + .GSTR STR?249,"open the grating" + .GSTR STR?250,"These cubicles are for use by any visitors or station personnel beyond the normal complement. The entire barracks seem to be unused as well as deserted. The exit lies to the south, and the barracks curve around to the east." + .GSTR STR?251,"This is the rather ordinary sanitary facility for the barracks to the north." + .GSTR STR?252,"This is the station's largest docking bay. A huge door to the east leads into the station. + Resting in the docking bay is a small ship of obviously alien origin. An open hatch seems to beckon you inward." + .GSTR STR?253,"Must be a connect-the-dots! And a real easy one, too! None of those dumb numbers to confuse you! Where's my crayon?" + .GSTR STR?254,"Hmmm. Some kind of alien writing, I presume. If I recall, the Mayor is an expert on that subject." + .GSTR STR?255,"Lying under the dots is a skeleton, the brittle remains of a member of some unfamiliar alien race." + .GSTR STR?256,"This is the station's smallest docking bay. You can enter the station to the east." + .GSTR STR?257,"The corridor, which widens off to the west, ends here. There are doorways north and east of you, and doors to the south and southwest. The door to the north must be a security door, because there's an ID reader next to it." + .GSTR STR?258,"This is a room where new robots are constructed, old robots are repaired, and unused robots are stored. There's a door to the east." + .GSTR STR?259,"There's a little robot here who is in the final, training phase of its construction. It is ""sleeping"" on a table, connected to wires which are ""feeding"" it information. The young-looking robot has the name ""Oliver"" engraved on its chestplate." + .GSTR STR?260,"If we be here when Oliver wakes up, Floyd would like to teach Oliver to play paddle-ball. Paddle-ball helped Floyd forget how lonely and scared he was until he found friends...like you." + .GSTR STR?261,"Ah, a new robot. Poor fellow; new robots are so mercilessly mistreated by the older robots. Such is our lot." + .GSTR STR?262,"This is the place where a station's exports are prepared before transfer to the docking bays and subsequent shipment throughout the regional sector. The only exit is west." + .GSTR STR?263,"This is a fairly comfortable two-person living quarters, significantly roomier than the barracks where most of the ship's personnel live. There's a door to the north, and an opening leads southeast." + .GSTR STR?264,"This is a fairly comfortable two-person living quarters, significantly roomier than the barracks where most of the ship's personnel live. A door leads north and a doorway south." + .GSTR STR?265,"This is a fairly comfortable two-person living quarters, significantly roomier than the barracks where most of the ship's personnel live. A doorway lies to the southwest, and there's an auto-door to the north." + .GSTR STR?266,"A moderately luxurious SanFac, with a pair of bathtubs in addition to the regular fixtures. Exits lead north, northeast, and northwest." + .GSTR STR?267,"Partway down, you discover discover that the ladder passage to Level Eight is sealed off -- apparently from below." + .GSTR STR?268,"Outdated forms and expired files are reduced to pulp by this machinery. In addition, raw pulp is constantly being ferried into the station from nearby forest worlds. The output from this plant feeds the station's printing plant, which lies to the southeast." + .GSTR STR?269,"Someone has presumably been attempting to repair some of the machinery in this room, because they left a drill lying around." + .GSTR STR?270,"drill" + .GSTR STR?271,"remove the bit that's in the drill" + .GSTR STR?272,"Oh, no! The elevator isn't at this floor! It's a long plunge..." + .GSTR STR?273,"Magnetically-stored data has been damaged; see the Security Officer to have data restored" + .GSTR STR?274,"This shiny cylindrical corridor is the connector between the Command Module, to the south, and the Scientific Sub-Module, to the north." + .GSTR STR?275,"This laboratory, which fills most of the middle level of the Sub-Module, is for the study of applications of the various space-related research that takes place on the other levels. Gangways lead up and down, and a door leads north. A connecting tube opens to the south." + .GSTR STR?276,"This is a small office associated with the lab to the south." + .GSTR STR?277,"This is the notebook of a certain Professor Schmidt, who was studying a strange pyramid discovered aboard a derelict alien ship and brought here. + Schmidt traced back the path of the alien ship; the path points out of the galaxy without nearing any star system. Further, extending the path leads straight to one of our smaller neighboring galaxies. Schmidt concludes that the ship and the pyramid are probably well over one billion years old! + Next, Schmidt studied the wall markings in the alien ship. A series of identical dots, they defied every computerized model of linguistic decipherment! Then, in an inspiration, Schmidt studied the dots for nonvisual properties. His diary vaguely refers to a breakthrough, saying, ""I guess my pal, the mayor, will get to show off his linguistic training."" + Finally, Schmidt began concentrating his studies on the pyramid itself. He was able to discover very little, blaming this primarily on the unexplained failures of several crucial pieces of lab machinery." + .GSTR STR?278,"This laboratory conducts research into various space-related physical sciences. Gangways lead up and down, a there's a door to the north." + .GSTR STR?279,"Various biological sciences, as they related to the environment of space, are studied in this laboratory. There is a gangway leading up, another leading down, and a door leading north." + .GSTR STR?280,"Lying on one of the desks is a scribbled note." + .GSTR STR?281,"""Schmidt -- Why didn't I see it until now! Just think of this station as a cell and the pyramid as a mechanized bacterioph"" The note ends at that point; there seem to be some reddish-brown stains on it." + .GSTR STR?282,"This cramped living area has cubicles for the dozen or so scientists and engineers working in this Sub-Module. The only exit is a gangway leading down." + .GSTR STR?283,"I don't have a very specific function in the station's robotic organizational scheme, but I do keep the library organized." + .GSTR STR?284,"Floyd's best friend! Oh, except you, of course!" + .GSTR STR?285,"Some early poems by Ignatius Tomato. He's my current favorite." + .GSTR STR?286,"burst into tears and dashes out of the room. A beam leaps from the gun..." + .GSTR STR?287," the station's reactor turns into a good old-fashioned H-bomb." + .GSTR STR?288,"You are at the top of an air shaft. There is no gravity here. Handholds lead downward, and a partially open air grate leads out of the shaft." + .GSTR STR?289,"You are in a large, vertical air duct. Handholds lead up and down." + .GSTR STR?290,"You have reached the bottom of the air vent. Ducts too small for you to enter lead off laterally. Handholds lead upward, and the entire floor of the duct is another large grating." + .GSTR STR?291,"The sides ducts are too small to enter!" + .GSTR STR?292,"This tiny control station allows access to the massive memory banks of the station's computer. Ever since the formation of the Third Galactic Union ended the great interstellar dark age, every Stellar Patrol spaceship, every Patrol space station, has been equipped with a computer bulging with the entire accumulated knowledge of mankind. Never again will humanity be permitted to slip back into the ignorance and savagery of the dark age. + A ladder leads up to Level Eight, and there's a call button next to the elevator shaft to the north." + .GSTR STR?293,"The exercise machine reaches you, and performs various repetitions all over your body, proving that exercise isn't always good for you." + .GSTR STR?294,"You are standing on the bottom of the elevator shaft. The elevator is not in sight. The only place to go is back to the computer room to the south." + .GSTR STR?295,"There's no way to climb the shaft." + .GSTR STR?296,"Floyd fires his stun ray nonchalantly in your direction, laughing, as though taunting you. You feel your leg go numb" + .GSTR STR?297,"Smoke is trickling from the tails of the tiny rockets, as though the duplicate pyramids were preparing for activation and launch" + .GSTR STR?298,"A blinking light on the reactor goes from yellow to red" + .GSTR STR?299,"the pyramid, Floyd" + .GSTR STR?300,"This is an east-west tube, widening as it gets farther from the Command Module." + .GSTR STR?301,"This is a wide, cheaply constructed space tube, narrowing to the west. There are openings off this ""street"" in virtually every direction, including one leading downward." + .GSTR STR?302,"Well, there are openings in ALMOST every direction." + .GSTR STR?303,"This is a tiny living bubble beneath Broadway. The inhabitant, who is nowhere in sight, seems to be in the profession of reading the future for superstitious spacemen." + .GSTR STR?304,"You have entered a ramshackle, deserted house of worship for one of the many nondescript space-based religions. The decor was obviously intended, but fails, to make the church look larger and less shoddy than it really is. The only exit is south." + .GSTR STR?305,"This moderately large store sells all kinds of games and other recreational materials. There is also an in-house rec area, featuring a group of simulation booths. The ""street"" lies to the southwest." + .GSTR STR?306,"groof hunting on Septurion Seven" + .GSTR STR?307,"a little-known incident during the signing of the Treaty of Gishen IV" + .GSTR STR?308,"a torrid romance on the tropical planet of San Cupidor" + .GSTR STR?309,"searching for treasure in a magical underground kingdom" + .GSTR STR?310,"bullfighting, skydiving, and dental hygiene" + .GSTR STR?311,"A fine example of trans-molecular platinum foil. The most perfectly reflective material know to man, I am told, and not just on the visual wavelengths! There was a recent rumor that the Rec Shop was to be redecorated using such foil." + .GSTR STR?312,"Floyd loves anything reflective! Give Floyd a mirror and he'll be happy for days!" + .GSTR STR?313,"The huge galactic mining conglomerates often open field offices in these space villages, and this is one of those. Miners will haul some promising hunk of space rock into the vicinity, and then come here to sell the rights to it. You can leave to the west." + .GSTR STR?314,"Some miner has left a headlamp here." + .GSTR STR?315,"You have entered a surprisingly old-fashioned looking tonsorial parlor. A space village seems to be the last place in the civilized galaxy where someone can go to have their hair or fur trimmed by an actual human being. The barber isn't here, though. Doors lead northwest and west." + .GSTR STR?316,"This is a small convenience store, the main source of food and living supplies for this village, as well as a supplement supply for personnel from the space station proper. The shelves are pretty bare, and there is no one in sight. Exits lead north, east, southeast and south." + .GSTR STR?317,"A small, translucent plastic bag is sitting on one of the shelves." + .GSTR STR?318,", delectable, moist boysenberry-flavored taffy" + .GSTR STR?319,"This shop, with exits to the northeast and southeast, sells a variety of animals. Many a lonely spacer has discovered the joys a pet can bring, and this shop features animals of both terrestrial and alien origin. A large sign advertises this month's special." + .GSTR STR?320,"You can see the faint outline of a panel in the ceiling." + .GSTR STR?321,"This sprawling old cargo ship, its engines long ago cannibalized for spare parts, has been converted into a store for supplies and curios. There's an eye-catching sign on the wall. Passageways lead in many directions, and there's an opening in the floor." + .GSTR STR?322,"""FREZONE (tm) Liquid Gorzium Explosive +Instructions for use: +1. Insert explosive in hole of appropriate diameter. +2. Attach detonator to explosive and timer. +3. Set timer. +4. Vamoose. +NOTE: Do not expose explosive to temperatures above 150 degrees Kelvin for period of more than 100 millichrons.""" + .GSTR STR?323,"Carbon dioxide! Don't use it myself. The only form I've ever seen it in is dry ice." + .GSTR STR?324,"open the bottle" + .GSTR STR?325,"This living bubble has been set up as an artist's loft. Most of the space is taken up by a large scrap sculpture floating in the center of the bubble. It is, of course, pretty impossible to tell how close the sculpture is to completion. The way out is to the east." + .GSTR STR?326,"The most recognizable item in the sculpture is a twenty-prong fromitz board." + .GSTR STR?327,"From your experience with tawdry, space village bars, they are crowded every millichron of the day and night. So it's quite unusual that this saloon is totally deserted. Despite the current solitude, you can almost hear the tinny music, the loud voices, the fistfights. Openings lead west and northwest, and to the east is a partially disguised exit." + .GSTR STR?328,"This is a tiny room, smelling strongly of various synthesized opium variants. There's a sign on the wall a door to the south." + .GSTR STR?329,"You've always wondered what a back-room zero-gee space village bordello was like. Well, now you know. Next to the nearest bed is a locker. The exit leads down." + .GSTR STR?330,"Your lungs rupture, not to mention all sorts of even nastier stuff that you're lucky if you can't imagine." + .GSTR STR?331,"This filthy north-south tube is quite a change from the gleaming, well-scrubbed metal of the space station." + .GSTR STR?332,"This large spacetube is the main thoroughfare of a space village which has sprung up here on the outskirts of the space station, which lies to the north. Rather than the bustling thoroughfare you might expect, however, there isn't a soul in sight. Openings lead up, northeast, south and west. To the southeast, the ""street"" narrows and ramps downward." + .GSTR STR?333," fire nectar - thick and warming" + .GSTR STR?334,"This permanently-docked one-man ship serves as the office for Hizzoner the Mayor, the unofficial leader of the village. Main Street is below." + .GSTR STR?335,"You spot a copy of a book entitled ""Deciphering Alien Speech.""" + .GSTR STR?336,"""(bitter/salty/bitter) softness/weakness +(sweet/very-sour) Hunji (noun form) +(bland/salty/sour) Zeenak (adj form) +(bland/bitter) air/atmosphere +(very-salty) however +(sweet/very-sweet) legal destruction (sabotage?) +(very-sweet/bland/sour) I have shined light upon +(sour/bland/sour/sweet) turn back +(bland) (definite article?) +(slightly-sour) solitary +(very-sweet/very-salty) element/substance +(sweet/slightly-bitter) brethren (adj form) +(sour/bland/bland/sour) died/failed +(bland/sour/very-sour) is souring/turning bad +(spicy-hot/bland/bland) (a number) (78? 7/8?) +(bitter/sour/very-sour) weapon (poss form) +(very-sweet) (emphasis mark?) +(very-salty/salty/sour) bad/evil/deadly radiation (plur form)""" + .GSTR STR?337,"The Stellar Patrol has opened a recruitment office off Main Street, thus giving tacit approval to this technically nonregulation space village. Posters showing a rose-colored view of Patrol life are plastered all over the walls. A door leads east." + .GSTR STR?338,"This is a branch office of the First Galactic Bank of Nebulon. There are doors to the north, west and southwest." + .GSTR STR?339,"This small space bubble, with openings to the east and south, is decorated with posters of exotic locales, but it's hard to imagine that anyone in this rundown spacetown would be able to afford an interstellar pleasure jaunt." + .GSTR STR?340,"Since there's no one here to milk you for some worthless life insurance or spaceship insurance, you might as well use the exits to the north or northeast." + .GSTR STR?341,"There's no doubt that ""alley"" is the best word to describe this winding, garbage-strewn connector. Dark passages branch off in almost every direction, and the alley slopes upward to the northwest." + .GSTR STR?342,"This is the home of some kook, a proselytizer of the fringe religion which believes that humankind has angered God by venturing out into space, and the universe will end sometime next week. Next week never seems to come, but there are enough kooks in the galaxy to keep the belief going. You can exit to the south." + .GSTR STR?343,", taking you along for the ride. + +Lost in Space + You spend several chrons tumbling into the starry depths, the station dwindling to a dot of light behind you. Eventually, your air runs out." + .GSTR STR?344,"As you swivel the headlamp around, you discover a tiny cylinder with an even tinier label." + .GSTR STR?345,"""FREZONE (tm) Liquid Gorzium Explosive. For use only by licensed demolitionist. Instruction sheet available from vendor; read thoroughly before use!""" + .GSTR STR?346,"The three balls hanging by the (northeastern) entrance to this space hut indicate that a villager down on his or her luck could come here to hock some valuable possession." + .GSTR STR?347,"Some destitute spacer was so hard up that he or she actually pawned a spray can. It's sitting here in the shop, and has some lettering on it." + .GSTR STR?348,"Some seedy loan shark has moored his dilapidated vessel here, on the south side of the alley." + .GSTR STR?349,"""ONE GALAKMID +Third Galactic Union""" + .GSTR STR?350,"This physician's bubble is owned by the village quack, known to his friends as ""Doc"" Schuster, but known to the vast majority of the villagers as Schuster the Shyster. There's a small hole in the wall, probably the opening for a disposal chute. The Doc is out, and in this case, out is northwest." + .GSTR STR?351,"There is a large pile of intoxicated ostrich here." + .GSTR STR?352,"[This is pretty gross, but you asked for it!] As the drill penetrates the unconscious ostrich, geysers of blood spout out, inundating you and the drill, causing a short circuit and electrocuting you. You collapse into a fried heap among a spreading puddle of blood." + .GSTR STR?353,"""Doc -- that ostrich nip you've been waiting for finally came in. Drop by and pick it up. If I'm not in, you'll find it in my ceiling panel.""" + .GSTR STR?354,"In the corner of the office is a rather plain-looking machine with a keypad. It looks a bit jerry-rigged." + .GSTR STR?355,"opening" + .GSTR STR?356,"A scrambled card cannot be altered" + .GSTR STR?357,"Ensign, Sixth Class or lower" + .GSTR STR?358,"Ensign, Fifth through Second Class" + .GSTR STR?359,"Ensign First Class" + .GSTR STR?360,"Midshipman" + .GSTR STR?361,"Lieutenant Second Class" + .GSTR STR?362,"Lieutentant Commander" + .GSTR STR?363,"Commander or Captain" + .GSTR STR?364,"Admiral" + .GSTR STR?365,"Fleet Admiral" + .GSTR STR?366,"This outdated drydock is now a messy junk yard. A huge pile of floating junk fills the center of the bubble. Passages lead upwards and west." + .GSTR STR?367,"Of all the items floating in the scrap heap, the pair of magnetic spaceboots looks to be in the best shape." + + .ENDI diff --git a/ship.zap b/ship.zap new file mode 100644 index 0000000..576d4bc --- /dev/null +++ b/ship.zap @@ -0,0 +1,1050 @@ + + + .FUNCT FORM-F + EQUAL? PRSA,V?EXAMINE,V?READ \?ELS5 + PRINTI "[This form can be found in your STATIONFALL package.]" + EQUAL? PRSO,ASSIGNMENT-COMPLETION-FORM \?CND6 + PRINTI " You notice that it has " + ZERO? ASSIGNMENT-FORM-VALIDATED \?CND9 + PRINTI "not " +?CND9: PRINTI "been validated." +?CND6: CRLF + RTRUE +?ELS5: EQUAL? PRSA,V?VALIDATE \FALSE + EQUAL? PRSO,ASSIGNMENT-COMPLETION-FORM \?ELS18 + ZERO? ASSIGNMENT-FORM-VALIDATED /?ELS23 + PRINT SENILITY-STRIKES + RTRUE +?ELS23: SET 'ASSIGNMENT-FORM-VALIDATED,TRUE-VALUE + PRINTR "Done." +?ELS18: PRINTR "That form has no validation box!" + + + .FUNCT CHRONOMETER-F + EQUAL? PRSA,V?READ,V?EXAMINE \FALSE + GRTR? DAY,2 \?ELS10 + PRINTR "You glance at your chronometer, and realize with annoyance that it has stopped. You can't recall doing anything that might have broken it." +?ELS10: PRINTI "It is a standard wrist chronometer with a digital display. " + CALL V-TIME,TRUE-VALUE + PRINTR " The back is engraved with the message ""Good luck in the Patrol! Love, Mom and Dad.""" + + + .FUNCT PATROL-UNIFORM-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTI "It is a standard-issue one-pocket Stellar Patrol uniform, a miracle of modern technology. It will keep its owner warm in cold climates and cool in warm locales. It provides protection against mild radiation, repels all insects, absorbs sweat, promotes healthy skin tone, and on top of everything else, it is super-comfy" + ZERO? SUIT-PRESSED /?CND6 + PRINTI ". The uniform has been recently pressed" +?CND6: PRINT PERIOD-CR + RTRUE +?ELS5: EQUAL? PRSA,V?CLOSE,V?OPEN \FALSE + PRINTI "There's no way to open or close the pocket of the " + PRINTD PRSO + PRINT PERIOD-CR + RTRUE + + + .FUNCT BOXED-FORMS-F + EQUAL? PRSA,V?EXAMINE /?THN6 + CALL TOUCHING?,PSEUDO-OBJECT + ZERO? STACK /FALSE +?THN6: PRINTR "The forms are sealed inside the boxes." + + + .FUNCT PALLETS-F,CNT + EQUAL? PRSA,V?READ \?ELS5 + EQUAL? HERE,FORM-STORAGE-ROOM \?ELS10 + PRINTR "There are numerous boxes; some of the nearer ones read: ""Form Pallet Disbursal Form,"" ""Loss of Form Pallet Label Report Form,"" and ""Loss of Form Pallet Label Report Form Release Form.""" +?ELS10: PRINTC 34 + PRINT FORM-NAME + PRINTR ".""" +?ELS5: EQUAL? PRSA,V?SEARCH,V?LOOK-INSIDE,V?OPEN \?ELS14 + PRINTI "Forms" + SET 'CNT,0 +?PRG15: EQUAL? CNT,50 /?REP16 + PRINTI " and forms" + INC 'CNT + JUMP ?PRG15 +?REP16: PRINTR ". Horrified, you reseal the box." +?ELS14: EQUAL? PRSA,V?TAKE \?ELS21 + PRINTR "You'll need a forklift." +?ELS21: EQUAL? PRSA,V?COUNT \FALSE + EQUAL? HERE,FORM-STORAGE-ROOM \?ELS28 + PRINTR "Countless." +?ELS28: CALL NOUN-USED,W?PALLET,PALLETS + ZERO? STACK /?ELS30 + PRINTR "24." +?ELS30: CALL NOUN-USED,W?BOXES,PALLETS + ZERO? STACK /FALSE + SET 'C-ELAPSED,30 + PRINTR "1920." + + + .FUNCT ROBOT-POOL-F,RARG + EQUAL? RARG,M-ENTER \?ELS5 + ADD C-ELAPSED,2 + CALL QUEUE,I-FLOYD,STACK + RSTACK +?ELS5: EQUAL? RARG,M-LOOK \?ELS7 + PRINTI "This is where a " + PRINT LFC + PRINTI " would come to check out a robot for use on an important assignment. Also for a trivial assignment like yours. " + PRINT ROBOT-POOL-EQUIPMENT-DESC + PRINTI " You can exit aft." + RTRUE +?ELS7: EQUAL? RARG,M-EXIT \FALSE + EQUAL? ROBOT-PICKED,FLOYD /FALSE + CALL DEQUEUE,I-FLOYD + RSTACK + + + .FUNCT BIN-F + GET P-ADJW,0 + EQUAL? STACK,FALSE-VALUE \?ELS9 + EQUAL? PRSO,PSEUDO-OBJECT /?THN6 +?ELS9: GET P-ADJW,1 + EQUAL? STACK,FALSE-VALUE \?ELS5 + EQUAL? PRSI,PSEUDO-OBJECT \?ELS5 +?THN6: PRINTR "Next time, specify which bin you meant." +?ELS5: EQUAL? PRSA,V?LOOK-INSIDE \?ELS13 + CALL ADJ-USED,A?FIRST,PSEUDO-OBJECT + ZERO? STACK /?ELS18 + EQUAL? ROBOT-PICKED,REX /?ELS18 + GETP REX,P?FDESC + PRINT STACK + CRLF + RTRUE +?ELS18: CALL ADJ-USED,A?SECOND,PSEUDO-OBJECT + ZERO? STACK /?ELS22 + EQUAL? ROBOT-PICKED,HELEN /?ELS22 + GETP HELEN,P?FDESC + PRINT STACK + CRLF + RTRUE +?ELS22: CALL ADJ-USED,A?THIRD,PSEUDO-OBJECT + ZERO? STACK /?ELS26 + EQUAL? ROBOT-PICKED,FLOYD /?ELS26 + CALL PERFORM,V?EXAMINE,FLOYD + RTRUE +?ELS26: PRINTR "The bin is empty." +?ELS13: EQUAL? PRSA,V?PUT,V?WALK-TO,V?ENTER \FALSE + PRINTR "The bin is only for robots." + + + .FUNCT FLOYD-F,OARG=0,X,N,TXT,?TMP1 + ZERO? OARG /?ELS5 + EQUAL? OARG,M-OBJDESC? /TRUE + PRINTI " " + CALL DESCRIBE-FLOYD + RSTACK +?ELS5: EQUAL? FLOYD,WINNER \?ELS11 + SET 'FLOYD-SPOKE,TRUE-VALUE + ZERO? ROBOT-PICKED /?ELS16 + EQUAL? ROBOT-PICKED,FLOYD /?ELS16 + PRINTI "Floyd gives you a hurt look and turns away." + CRLF + CALL STOP + RSTACK +?ELS16: ZERO? FLOYD-ANGUISHED /?ELS20 + SET 'WINNER,PROTAGONIST + CALL PERFORM,V?TOUCH,FLOYD + CALL STOP + RSTACK +?ELS20: EQUAL? PRSA,V?TELL-ABOUT \?ELS23 + EQUAL? PRSO,ME \?ELS23 + GRTR? ROBOT-EVILNESS,11 \?ELS30 + PRINTR """Oh, quit jabbering already.""" +?ELS30: GETP PRSI,P?FLOYD-ASK-ABOUT >TXT + ZERO? TXT /?ELS32 + PRINTC 34 + PRINT TXT + PRINTR """" +?ELS32: PRINTI "Floyd shrugs. ""Beats me." + IN? PLATO,HERE \?CND35 + PRINTI " Ask Plato. He knows everything!" +?CND35: PRINTR """" +?ELS23: GRTR? PLATO-ATTACK-COUNTER,0 \?ELS39 + IN? PLATO,HERE \?ELS39 + EQUAL? PRSA,V?HELP /?THN47 + EQUAL? PRSA,V?SAVE-SOMETHING \?ELS50 + EQUAL? PRSO,ME /?THN47 +?ELS50: EQUAL? PRSA,V?KILL,V?OFF \?ELS52 + EQUAL? PRSO,PLATO /?THN47 +?ELS52: EQUAL? PRSA,V?TAKE \?ELS46 + EQUAL? PRSO,STUN-GUN \?ELS46 +?THN47: SET 'FLOYD-TOLD,TRUE-VALUE + PRINTR "Floyd waves his hands helplessly. ""Yes... I mean no... I mean oh no oh help me please. Floyd does not know right thing to do...""" +?ELS46: PRINTI "Floyd just looks at you with confusion and panic in his eyes." + CRLF + CALL STOP + RSTACK +?ELS39: EQUAL? HERE,FACTORY \?ELS58 + ZERO? FLOYD-SHOT /?ELS63 + PRINTR "Floyd is hurt and doesn't respond." +?ELS63: PRINTR """Shut up!"" orders Floyd." +?ELS58: EQUAL? PRSA,V?LAUNCH \?ELS68 + EQUAL? PRSO,SPACETRUCK-OBJECT \?ELS68 + SET 'AWAITING-REPLY,2 + CALL V-YES + SET 'AWAITING-REPLY,FALSE-VALUE + RTRUE +?ELS68: EQUAL? PRSA,V?TAKE \?ELS72 + EQUAL? PRSO,LEASH \?ELS72 + FSET? HERE,WEIGHTLESSBIT /?ELS72 + CALL FLOYD-TAKE-LEASH + RSTACK +?ELS72: EQUAL? PRSA,V?TAKE \?ELS76 + EQUAL? PRSO,STAR \?ELS76 + FSET? STAR,TRYTAKEBIT \?ELS76 + PRINTR """Huh? Floyd shorter even than you!""" +?ELS76: EQUAL? PRSA,V?YES \?ELS80 + ZERO? AWAITING-REPLY /?ELS80 + CALL V-YES + RSTACK +?ELS80: EQUAL? PRSA,V?NO \?ELS84 + ZERO? AWAITING-REPLY /?ELS84 + CALL V-NO + RSTACK +?ELS84: EQUAL? PRSA,V?CLIMB-ON,V?ENTER \?ELS88 + EQUAL? PRSO,COPILOT-SEAT,PILOT-SEAT \?ELS88 + IN? FLOYD,PRSO \?ELS95 + PRINTR """Where is Floyd now, huh?""" +?ELS95: PRINTR "Floyd looks suspicious. ""You first.""" +?ELS88: EQUAL? PRSA,V?TAKE \?ELS99 + IN? PRSO,HEATING-CHAMBER \?ELS99 + MOVE PRSO,HERE + PRINTI """Okay!"" Floyd reaches into the " + PRINTD HEATING-CHAMBER + PRINTI " and grabs" + CALL TPRINT-PRSO + PRINTR ". ""Yikes, it's hot!"" He drops it to the deck, where it quickly cools." +?ELS99: EQUAL? PRSA,V?MUNG,V?UNLOCK,V?OPEN \?ELS103 + EQUAL? PRSO,STRONG-BOX,SAFE \?ELS103 + PRINTR """Floyd's a robot, not a locksmith!""" +?ELS103: EQUAL? PRSA,V?UNLOCK,V?OPEN \?ELS107 + EQUAL? PRSO,SECURITY-DOOR \?ELS107 + PRINTR """Put your ID in the ID reader, dumbo!""" +?ELS107: EQUAL? PRSA,V?MUNG,V?KILL,V?OFF \?ELS111 + EQUAL? PRSO,WELDER \?ELS111 + PRINTR """Sure! Floyd not scared!"" He walks bravely up to the welder, which spits some electric fire in his direction. From his new position (quivering behind your legs) Floyd says, ""Floyd changed his mind, okay?""" +?ELS111: EQUAL? PRSA,V?REACH-IN \?ELS115 + EQUAL? PRSO,PSEUDO-OBJECT,DISPENSER \?ELS115 + EQUAL? HERE,PX \?ELS115 + PRINTR "Floyd happily reaches into the dispenser hole, and then withdraws his hand, looking glum. ""Nope, not even a ball.""" +?ELS115: EQUAL? PRSA,V?GIVE \?ELS119 + EQUAL? PRSI,ME \?ELS119 + IN? PRSO,FLOYD \?ELS126 + MOVE PRSO,PROTAGONIST + PRINTI """Okay,"" says Floyd, handing you the " + PRINTD PRSO + PRINTR ", ""but only because you're Floyd's best friend.""" +?ELS126: PRINT FLOYD-NOT-HAVE + RTRUE +?ELS119: EQUAL? PRSA,V?SGIVE \?ELS130 + EQUAL? PRSO,ME \?ELS130 + CALL PERFORM,V?GIVE,PRSI,ME + RTRUE +?ELS130: EQUAL? PRSA,V?WALK \?ELS134 + PRINTR "Floyd looks slightly embarrassed. ""You know me and my sense of direction."" Then he looks up at you with wide, trusting eyes. ""Tell Floyd a story?""" +?ELS134: EQUAL? PRSA,V?FOLLOW \?ELS136 + EQUAL? PRSO,ME \?ELS136 + PRINTR """Okay!""" +?ELS136: EQUAL? PRSA,V?HELLO \?ELS140 + PRINTR """Hi!"" Floyd grins and bounces up and down." +?ELS140: EQUAL? PRSA,V?DROP \?ELS142 + IN? PRSO,FLOYD \?ELS147 + RANDOM 100 + LESS? 50,STACK /?ELS152 + MOVE PRSO,HERE + PRINTI "Floyd shrugs and drops the " + PRINTD PRSO + PRINT PERIOD-CR + RTRUE +?ELS152: PRINTI "Floyd clutches the " + PRINTD PRSO + PRINTR " even more tightly. ""Floyd won't,"" he says defiantly." +?ELS147: PRINT FLOYD-NOT-HAVE + RTRUE +?ELS142: PRINTI "Floyd whines, ""Enough talking! Let's play Hider-and-Seeker.""" + CRLF + CALL STOP + RSTACK +?ELS11: FSET? FLOYD,TOUCHBIT /?ELS160 + CALL NOUN-USED,W?FLOYD,FLOYD + ZERO? STACK /?ELS160 + PRINTI "You don't see anyone by that name here." + CRLF + RETURN 8 +?ELS160: ZERO? FLOYD-ANGUISHED /?ELS166 + CALL TOUCHING?,FLOYD + ZERO? STACK \?THN169 + EQUAL? PRSA,V?COMFORT \?ELS166 +?THN169: PRINTR "Floyd sniffs, ""Please leave Floyd alone for a while.""" +?ELS166: MUL ROBOT-EVILNESS,10 + SUB STACK,50 >?TMP1 + RANDOM 100 + LESS? ?TMP1,STACK /?ELS172 + CALL TOUCHING?,FLOYD + ZERO? STACK /?ELS172 + EQUAL? HERE,FACTORY /?ELS179 + PRINTR """Hey, will you just leave Floyd alone!"" He shoves you away." +?ELS179: ZERO? FLOYD-SHOT /?ELS181 + PRINTI "Before you can..." + CRLF + CALL I-LAUNCH + RSTACK +?ELS181: CALL BACK-OFF,STR?153 + RSTACK +?ELS172: EQUAL? PRSA,V?EXAMINE \?ELS186 + CALL DESCRIBE-FLOYD,TRUE-VALUE + FIRST? FLOYD \?ELS191 + PRINTC 32 + CALL V-LOOK-INSIDE + RSTACK +?ELS191: CRLF + RTRUE +?ELS186: EQUAL? PRSA,V?SHOOT \?ELS195 + ZERO? FLOYD-SHOT /?ELS200 + PRINTR "Floyd is already fatally wounded. Another shot would accomplish nothing, except perhaps fulfilling some sadistic impulse on your part." +?ELS200: EQUAL? HERE,FACTORY \?ELS203 + CALL DEQUEUE,I-FACTORY + FSET STUN-GUN,TAKEBIT + FCLEAR FLOYD,ACTIVEBIT + SET 'FLOYD-SHOT,TRUE-VALUE + PRINTR "The bolt hits Floyd squarely in the chest. He is blown backwards, against the pedestal, and slumps to the deck." +?ELS203: PRINTR "[The author of this story is totally shocked, and won't even dignify such an input with a response.]" +?ELS195: EQUAL? PRSA,V?PICK \?ELS207 + CALL PICK-ROBOT + RSTACK +?ELS207: EQUAL? PRSA,V?CLOSE \?ELS209 + PRINT HUH + RTRUE +?ELS209: EQUAL? PRSA,V?REACH-IN,V?LOOK-INSIDE \?ELS211 + CALL PERFORM,V?OPEN,FLOYD + RTRUE +?ELS211: FSET? FLOYD,ACTIVEBIT \?ELS213 + SET 'FLOYD-SPOKE,TRUE-VALUE + EQUAL? PRSA,V?ON \?ELS218 + PRINTR "He's already been activated." +?ELS218: EQUAL? PRSA,V?OFF \?ELS220 + GRTR? PLATO-ATTACK-COUNTER,0 \?ELS225 + PRINTR "Floyd jerks away as you touch his on-off switch. ""Hey, you know how much Floyd hates that! And after Floyd saved your life before...""" +?ELS225: FCLEAR FLOYD,ACTIVEBIT + FCLEAR FLOYD,ACTORBIT + ZERO? SPACETRUCK-COUNTER \?CND228 + CALL DEQUEUE,I-FLOYD +?CND228: PRINTI "Floyd, shocked by this betrayal from his old friend, whimpers and " + IN? FLOYD,HERE /?ELS233 + MOVE FLOYD,HERE + PRINTI "falls out of his seat" + JUMP ?CND231 +?ELS233: PRINTI "keels over" +?CND231: FIRST? FLOYD \?CND236 + CALL ROB,FLOYD,HERE + PRINTI ", dropping what he was carrying" +?CND236: PRINT PERIOD-CR + RTRUE +?ELS220: EQUAL? HERE,FACTORY /FALSE + EQUAL? PRSA,V?KISS \?ELS242 + PRINTR "You receive a painful electric shock." +?ELS242: EQUAL? PRSA,V?SCOLD \?ELS244 + PRINTR "Floyd looks defensive. ""What did Floyd do wrong?""" +?ELS244: EQUAL? PRSA,V?PLAY-WITH \?ELS246 + ZERO? FLOYD-ANGUISHED /?CND247 + CALL PERFORM,V?TOUCH,FLOYD + RTRUE +?CND247: SET 'C-ELAPSED,30 + CALL QUEUE,I-FLOYD,1 + PRINTR "You play with Floyd for several centichrons until you drop to the floor, winded. Floyd pokes at you gleefully. ""C'mon! Let's play some more!""" +?ELS246: EQUAL? PRSA,V?LISTEN \?ELS252 + PRINTR "Floyd is babbling about this and that." +?ELS252: EQUAL? PRSA,V?TAKE \?ELS254 + EQUAL? PRSO,FLOYD \?ELS254 + FSET? HERE,WEIGHTLESSBIT \?ELS261 + PRINTR "Sans gravity, you easily pick up Floyd. ""Oh, boy! Zero-Gee Polo,"" he yells, wriggling away and bounding off several walls." +?ELS261: FSET? FLOYD,TOUCHBIT \FALSE + PRINTR "You manage to lift Floyd a few centimeters, but he's too heavy and you drop him suddenly. Floyd gives a surprised squeal and moves a respectable distance away." +?ELS254: EQUAL? PRSA,V?MUNG,V?KILL \?ELS265 + PRINTR "Floyd starts dashing around the room. ""Oh boy oh boy oh boy! I haven't played Chase and Tag for years! You be It! Nah, nah!""" +?ELS265: EQUAL? PRSA,V?SHAKE,V?KICK \?ELS267 + PRINTR """Why you do that?"" Floyd whines. ""I think a wire now shaken loose."" He goes off into a corner and sulks." +?ELS267: EQUAL? PRSA,V?OPEN,V?CLEAN,V?SEARCH /?THN270 + EQUAL? PRSA,V?TICKLE \?ELS269 +?THN270: PRINTR "Floyd giggles and pushes you away. ""You're tickling Floyd!"" He clutches at his side panels, laughing hysterically. Oil drops stream from his eyes." +?ELS269: EQUAL? PRSA,V?PUT,V?GIVE \?ELS273 + EQUAL? PRSI,FLOYD \?ELS273 + EQUAL? PRSO,BLUE-GOO,GRAY-GOO,ORANGE-GOO \?ELS280 + PRINTR "Floyd looks at the goo. ""Yech! Got any Number Seven Heavy Grease?""" +?ELS280: EQUAL? PRSO,LEASH \?ELS282 + CALL FLOYD-TAKE-LEASH + RSTACK +?ELS282: EQUAL? PRSO,OSTRICH-NIP \?ELS284 + PRINTR """Phew!"" says Floyd, holding his nose and handing it back." +?ELS284: FIRST? FLOYD /?THN287 + RANDOM 100 + LESS? 25,STACK /?ELS286 +?THN287: MOVE PRSO,HERE + PRINTI "Floyd examines the " + PRINTD PRSO + PRINTR ", shrugs, and drops it." +?ELS286: MOVE PRSO,FLOYD + PRINTR """Neat!"" exclaims Floyd. He thanks you profusely." +?ELS273: EQUAL? PRSA,V?SHOW \?ELS292 + EQUAL? FLOYD,PRSI \?ELS292 + SET 'AWAITING-REPLY,3 + ADD C-ELAPSED,2 + CALL QUEUE,I-REPLY,STACK + PRINTI "Floyd looks over the " + PRINTD PRSO + PRINTR ". ""Can you play any games with it?"" he asks." +?ELS292: EQUAL? PRSA,V?HUG,V?TOUCH \?ELS296 + PRINTR "Floyd gives a contented sigh." +?ELS296: EQUAL? PRSA,V?SMELL \FALSE + PRINTR "Floyd smells faintly of ozone and light machine oil." +?ELS213: EQUAL? PRSA,V?ON \?ELS300 + CALL QUEUE,I-FLOYD,-1 + SET 'FLOYD-SPOKE,TRUE-VALUE + FSET FLOYD,ACTORBIT + FSET FLOYD,ACTIVEBIT + FSET FLOYD,TOUCHBIT + PRINTI "Floyd jumps to his feet" + PRINT HOPPING-MAD + CRLF + RTRUE +?ELS300: EQUAL? PRSA,V?OFF \?ELS302 + PRINTR "Floyd isn't on." +?ELS302: EQUAL? PRSA,V?TELL \?ELS304 + PRINTI "Floyd isn't that great a listener even when he's on..." + CRLF + CALL STOP + RSTACK +?ELS304: EQUAL? PRSA,V?OPEN,V?SEARCH \FALSE + PRINTR "You search the robot's compartments and discover a crayon, a paddle ball set, and finally, a photo of yourself. On the back, in crayon, in Floyd's childish scrawl, is the inscription, ""Floyds frend."" Touched, you return everything to the compartments where you found them." + + + .FUNCT DESCRIBE-FLOYD,EXAMINING=0 + FSET? FLOYD,TOUCHBIT /?ELS5 + PRINT YOU-CANT + PRINTI "see the robot in the third bin very well, because he's crouched in the corner. He's a short robot, and he seems to be playing marbles." + RTRUE +?ELS5: EQUAL? HERE,ROBOT-POOL \?ELS7 + ZERO? ROBOT-PICKED \?ELS7 + PRINTI "With unconcealed excitement, Floyd is hopping around in bin number three." + RTRUE +?ELS7: EQUAL? HERE,ROBOT-POOL \?ELS11 + EQUAL? ROBOT-PICKED,FLOYD /?ELS11 + PRINTI "Floyd sits dejectedly in bin three." + RTRUE +?ELS11: IN? PLATO,HERE \?ELS15 + ZERO? EXAMINING \?ELS15 + PRINTI "Plato and Floyd are both here." + FSET? FLOYD,ACTIVEBIT /TRUE + PRINTC 32 + PRINT FLOYD-OFF-DESC + RTRUE +?ELS15: EQUAL? HERE,FACTORY \?ELS22 + PRINTI "Floyd is " + ZERO? FLOYD-SHOT /?ELS25 + PRINTI "ly" + JUMP ?CND23 +?ELS25: PRINTI "stand" +?CND23: PRINTI "ing between you and the pyramid, " + ZERO? FLOYD-SHOT /?ELS33 + PRINTI "seriously damaged by zapgun fire." + RTRUE +?ELS33: PRINTI "his face so contorted by hate as to be almost unrecognizable. You also wonder where he picked up that black eye patch." + RTRUE +?ELS22: FSET? FLOYD,ACTIVEBIT /?ELS38 + PRINT FLOYD-OFF-DESC + RTRUE +?ELS38: ZERO? FLOYD-ANGUISHED /?ELS40 + PRINTI "Floyd is lying on the floor, sobbing." + RTRUE +?ELS40: ZERO? EXAMINING /?ELS43 + PRINTI "Floyd is a multi-purpose robot with slightly-crossed eyes and a lopsided grin." + RTRUE +?ELS43: PRINTI "Floyd is here, also looking around the room." + RTRUE + + + .FUNCT FLOYD-TAKE-LEASH + ZERO? HANGING-IN-AIR /?ELS5 + PRINTR """Floyd can't until you let go!""" +?ELS5: PRINTR "Floyd grabs the leash and gets pulled up into the air. ""Wheee!"" Then his grip slips and he clatters to the deck. ""Oops! More dents!""" + + + .FUNCT I-FLOYD,OBJ=0 + CALL QUEUE,I-FLOYD,-1 + FSET? FLOYD,TOUCHBIT /?ELS3 + FSET FLOYD,TOUCHBIT + FSET FLOYD,TRYTAKEBIT + PRINTI " The third robot looks up from his marbles, jumps to his feet, and starts waving wildly. It's Floyd, your robotic companion from Resida! You've seen him only occasionally since he opted to follow you aboard the Duffy those five long years ago." + CRLF + JUMP ?CND1 +?ELS3: ZERO? ROBOT-PICKED \?ELS5 + PRINTI " Floyd jumps up and down saying, ""Oh boy oh boy oh boy pick Floyd pick Floyd pick Floyd!""" + CRLF + JUMP ?CND1 +?ELS5: ZERO? FLOYD-ANGUISHED /?ELS7 + CALL VISIBLE?,FLOYD + ZERO? STACK \?CND9 + SET 'FLOYD-ANGUISHED,FALSE-VALUE +?CND9: SET 'FLOYD-FOLLOW,FALSE-VALUE + RFALSE +?ELS7: CALL VISIBLE?,FLOYD + ZERO? STACK /?ELS13 + FSET? FLOYD,ACTIVEBIT \FALSE + IN? OSTRICH,HERE \?ELS19 + ZERO? OSTRICH-COMMENT \?ELS19 + SET 'OSTRICH-COMMENT,TRUE-VALUE + PRINTI " Floyd looks at the ostrich with breathless excitement. ""Wow! An elephant!""" + CRLF + JUMP ?CND1 +?ELS19: FSET? HERE,FLOYDBIT /?ELS23 + ZERO? FLOYD-SPOKE \?ELS23 + RANDOM 100 + LESS? 6,STACK /?ELS23 + REMOVE FLOYD + PRINTI " " + IN? PLATO,HERE \?ELS28 + SET 'POSTPONE-ATTACK,TRUE-VALUE + REMOVE PLATO + GRTR? ROBOT-EVILNESS,8 \?ELS31 + PRINTI """Let us take a stroll, Floyd,"" says Plato, tucking his book under one arm. ""Tagging along after this simpleton human is becoming tiresome."" He breezes out. Floyd hesitates, then follows." + CRLF + JUMP ?CND1 +?ELS31: RANDOM 100 + LESS? 50,STACK \?THN34 + EQUAL? HERE,LIBRARY \?ELS33 +?THN34: PRINTI """Hey, Plato!"" says Floyd. ""Play Hider-and-Seeker with Floyd?"" Plato glances up from his book, nods, and says, ""I do believe that I can spare a few millichrons for a relaxing bit of sport."" Floyd bounds away, with Plato a bit behind. From out of sight, Floyd's voice faintly echoes back to you: ""Ollie ollie oxen free!""" + CRLF + JUMP ?CND1 +?ELS33: PRINTI "Plato reaches the last page of his book. ""Heavens! It appears to be time for another jaunt to the library. Would you care to accompany me, my boisterous friend?"" + ""Oh boy yessiree!"" says Floyd, bounding off after Plato. ""I hope they have copies of my favorite comic, THE ADVENTURES OF LANE MASTODON!""" + CRLF + JUMP ?CND1 +?ELS28: PRINTI "Floyd says, ""Floyd going exploring. See you later."" He glides out of the room." + CRLF + JUMP ?CND1 +?ELS23: RANDOM 100 + LESS? 45,STACK /?CND1 + ZERO? FLOYD-SPOKE \?CND1 + IN? FLOYD,HERE \?CND1 + IN? PROTAGONIST,HERE \?CND1 + ZERO? HANGING-IN-AIR \?CND1 + ZERO? LIT /?CND1 + FIRST? HERE >OBJ /?KLU182 +?KLU182: ZERO? OBJ /?ELS46 + FSET? OBJ,TOUCHBIT \?ELS46 + FSET? OBJ,TAKEBIT \?ELS46 + EQUAL? OBJ,OSTRICH-NIP,SPACESUIT /?ELS46 + EQUAL? OBJ,DETONATOR,TIMER,EXPLOSIVE /?ELS46 + CALL CCOUNT,FLOYD + LESS? STACK,4 \?ELS46 + RANDOM 100 + LESS? 6,STACK /?ELS46 + MOVE OBJ,FLOYD + PRINTI " Floyd picks up" + CALL TPRINT,OBJ + PRINTI ", examines it, and tucks " + FSET? OBJ,PLURALBIT \?ELS51 + PRINTI "them" + JUMP ?CND49 +?ELS51: PRINTI "it" +?CND49: PRINTI " under his arm." + CRLF + JUMP ?CND1 +?ELS46: FIRST? FLOYD \?ELS55 + RANDOM 100 + LESS? 6,STACK /?ELS55 + FIRST? FLOYD >OBJ /?KLU183 +?KLU183: NEXT? OBJ \?CND58 + RANDOM 100 + LESS? 60,STACK /?CND58 + NEXT? OBJ >OBJ /?CND58 +?CND58: MOVE OBJ,HERE + PRINTI " Floyd drops" + CALL TPRINT,OBJ + PRINTI " he was carrying." + CRLF + JUMP ?CND1 +?ELS55: FIRST? FLOYD \?ELS64 + RANDOM 100 + LESS? 2,STACK /?ELS64 + FIRST? FLOYD >OBJ /?KLU185 +?KLU185: NEXT? OBJ \?CND67 + RANDOM 100 + LESS? 60,STACK /?CND67 + NEXT? OBJ >OBJ /?CND67 +?CND67: PRINTI " Floyd moves" + CALL TPRINT,OBJ + PRINTI " in a wavering course through the air, making a roaring noise like a rocket exhaust." + CRLF + JUMP ?CND1 +?ELS64: IN? PLATO,HERE \?ELS73 + RANDOM 100 + LESS? 70,STACK /?ELS73 + PRINTI " " + CALL PICK-ONE,PLATOISMS + PRINT STACK + PRINT PERIOD-CR + JUMP ?CND1 +?ELS73: PRINTI " Floyd " + RANDOM 100 + LESS? 7,STACK /?ELS80 + SET 'AWAITING-REPLY,4 + ADD C-ELAPSED,2 + CALL QUEUE,I-REPLY,STACK + PRINTI "says, ""Hey! Wanna play Hucka-Bucka-Beanstalk?""" + CRLF + JUMP ?CND1 +?ELS80: CALL PICK-ONE,FLOYDISMS + PRINT STACK + PRINT PERIOD-CR + JUMP ?CND1 +?ELS13: FSET? FLOYD,ACTIVEBIT /?ELS84 + EQUAL? HERE,VACUUM-STORAGE,AIRLOCK /FALSE + FSET FLOYD,ACTIVEBIT + FSET FLOYD,ACTORBIT + PRINTI " Floyd bounds up to you" + PRINT HOPPING-MAD + ZERO? PLATO-INTRODUCED /?ELS90 + PRINTI " Plato strolls in and gives Floyd a pat. ""I reactivated the little fellow; I hope you don't mind.""" + CRLF + JUMP ?CND88 +?ELS90: PRINTI " Another robot wanders in behind Floyd and notices you." + CRLF + CALL I-PLATO,TRUE-VALUE + PRINTI " Plato motions toward Floyd. ""I presume you know this playful little fellow. Someone had deactivated him, so I rectified the situation.""" + CRLF +?CND88: MOVE PLATO,HERE + MOVE FLOYD,HERE + JUMP ?CND1 +?ELS84: GRTR? ROBOT-EVILNESS,16 \?ELS95 + MOVE FLOYD,FACTORY + EQUAL? HERE,EAST-JUNCTION,LEVEL-FIVE \?ELS100 + PUSH SOUTH-CONNECTION + JUMP ?CND96 +?ELS100: EQUAL? HERE,SOUTH-JUNCTION,NORTH-JUNCTION \?ELS102 + PUSH EAST-CONNECTION + JUMP ?CND96 +?ELS102: RANDOM 100 + LESS? 25,STACK /?ELS104 + PUSH SOUTH-JUNCTION + JUMP ?CND96 +?ELS104: RANDOM 100 + LESS? 33,STACK /?ELS106 + PUSH EAST-JUNCTION + JUMP ?CND96 +?ELS106: RANDOM 100 + LESS? 50,STACK /?ELS108 + PUSH NORTH-JUNCTION + JUMP ?CND96 +?ELS108: PUSH LEVEL-FIVE +?CND96: CALL ROB,FLOYD,STACK + MOVE STUN-GUN,FLOYD + CALL DEQUEUE,I-FLOYD + CALL DEQUEUE,I-ROBOT-EVILNESS + RFALSE +?ELS95: ZERO? FLOYD-FOLLOW /?ELS112 + EQUAL? HERE,AIRLOCK \?ELS112 + PRINTI " Floyd calls from above, """ + ZERO? PLATO-INTRODUCED /?ELS117 + ZERO? PLATO-ATTACK-COUNTER \?ELS117 + PRINTI "We" + JUMP ?CND115 +?ELS117: PRINTC 73 +?CND115: PRINTI "'ll wait here; it doesn't look like there's room in that phone booth for " + ZERO? PLATO-INTRODUCED /?ELS124 + ZERO? PLATO-ATTACK-COUNTER \?ELS124 + PRINTI "all" + JUMP ?CND122 +?ELS124: PRINTI "both" +?CND122: PRINTI " of us.""" + CRLF + JUMP ?CND1 +?ELS112: ZERO? FLOYD-FOLLOW /?ELS130 + RANDOM 100 + LESS? 80,STACK /?ELS130 + PRINTI " Floyd " + ZERO? PLATO-INTRODUCED /?ELS135 + ZERO? PLATO-ATTACK-COUNTER \?ELS135 + MOVE PLATO,HERE + PRINTI "and Plato follow" + JUMP ?CND133 +?ELS135: PRINTI "follows" +?CND133: MOVE FLOYD,HERE + PRINTI " you." + CRLF + JUMP ?CND1 +?ELS130: EQUAL? HERE,SPACETRUCK,ELEVATOR,BRIG /?THN142 + EQUAL? HERE,ARMORY \?ELS141 +?THN142: PRINTI " Floyd bounces in" + ZERO? PLATO-INTRODUCED /?CND144 + ZERO? PLATO-ATTACK-COUNTER \?CND144 + MOVE PLATO,HERE + PRINTI ", followed at a more leisurely pace by Plato" +?CND144: PRINTI ". ""Hey, wait for " + ZERO? PLATO-INTRODUCED /?ELS151 + ZERO? PLATO-ATTACK-COUNTER \?ELS151 + MOVE PLATO,HERE + PRINTI "us" + JUMP ?CND149 +?ELS151: PRINTI "Floyd" +?CND149: MOVE FLOYD,HERE + PRINTI "!"" he yells." + CRLF + JUMP ?CND1 +?ELS141: RANDOM 100 + LESS? 17,STACK /?CND1 + ZERO? LIT /?CND1 + EQUAL? HERE,AIRLOCK,VACUUM-STORAGE /?CND1 + PRINTI " Floyd " + ZERO? PLATO-INTRODUCED \?ELS162 + FSET? LEVEL-FIVE,TOUCHBIT \?ELS162 + RANDOM 100 + LESS? 50,STACK /?ELS162 + PRINTI "dashes into view, followed by a slightly older-looking robot. ""Look, Floyd found a new friend,"" Floyd says with unbounded exuberance." + CRLF + CALL I-PLATO,TRUE-VALUE + JUMP ?CND160 +?ELS162: RANDOM 100 + LESS? 15,STACK /?ELS169 + PRINTI "rushes into the room and barrels into you. ""Oops, sorry,"" he says. ""Floyd not looking at where he was going to.""" + JUMP ?CND167 +?ELS169: PRINTI "bounds into the room. ""Floyd here now!"" he cries." +?CND167: ZERO? PLATO-INTRODUCED /?CND172 + ZERO? PLATO-ATTACK-COUNTER \?CND172 + MOVE PLATO,HERE + PRINTI " You notice that Plato has also roamed into view behind Floyd, once again absorbed in his reading." +?CND172: CRLF +?CND160: MOVE FLOYD,HERE + ZERO? HANGING-IN-AIR /?CND1 + ZERO? HANGING-COMMENT \?CND1 + SET 'FLOYD-SPOKE,TRUE-VALUE + CALL FLOYDS-HANGING-IN-AIR-COMMENT +?CND1: SET 'FLOYD-SPOKE,FALSE-VALUE + SET 'FLOYD-FOLLOW,FALSE-VALUE + RETURN FLOYD-FOLLOW + + + .FUNCT HELEN-F + EQUAL? HELEN,WINNER \?ELS5 + EQUAL? PRSA,V?HELLO \?ELS10 + PRINTR """Mutual, I'm sure.""" +?ELS10: EQUAL? PRSA,V?FOLLOW,V?WALK \?ELS12 + PRINTR """I'm supposta stay with any human I'm assigned to.""" +?ELS12: PRINTI "You've strayed too far from simple form-sorting to interest Helen." + CRLF + CALL STOP + RSTACK +?ELS5: EQUAL? PRSA,V?GIVE \?ELS16 + EQUAL? PRSO,CLASS-THREE-SPACECRAFT-ACTIVATION-FORM,ROBOT-USE-AUTHORIZATION-FORM,ASSIGNMENT-COMPLETION-FORM \?ELS16 + CALL CONFETTI,PRSO + RSTACK +?ELS16: EQUAL? PRSA,V?ON,V?OFF \?ELS20 + PRINTR "Being unfamiliar with this model robot, you can't find the on-off switch." +?ELS20: EQUAL? PRSA,V?OPEN \?ELS22 + PRINTR "There are no visible compartments." +?ELS22: EQUAL? PRSA,V?PICK \FALSE + CALL PICK-ROBOT + RSTACK + + + .FUNCT REX-F + EQUAL? REX,WINNER \?ELS5 + EQUAL? PRSA,V?HELLO \?ELS10 + PRINTR """Yo.""" +?ELS10: EQUAL? PRSA,V?FOLLOW,V?WALK \?ELS12 + PRINTR """I'll follow if I gets assigned ta ya.""" +?ELS12: PRINTI "Rex merely looks confused." + CRLF + CALL STOP + RSTACK +?ELS5: EQUAL? PRSA,V?OPEN,V?ON,V?OFF \?ELS16 + CALL PERFORM-PRSA,HELEN + RSTACK +?ELS16: EQUAL? PRSA,V?PICK \FALSE + CALL PICK-ROBOT + RSTACK + + + .FUNCT I-OTHER-ROBOT + IN? ROBOT-PICKED,HERE /FALSE + MOVE ROBOT-PICKED,HERE + EQUAL? HERE,CARGO-BAY-ENTRANCE \?ELS10 + EQUAL? ROBOT-PICKED,REX \?ELS10 + CALL JIGS-UP,STR?182 + RSTACK +?ELS10: PRINTR " Helen obediently follows you." + + + .FUNCT CONFETTI,FORM-NAME + REMOVE FORM-NAME + PRINTI "In a spasm of vocational enthusiasm, Helen tries to burst and decollate your " + PRINTD FORM-NAME + PRINTR ", leaving nothing but some useless confetti." + + + .FUNCT PICK-ROBOT + EQUAL? PRSO,ROBOT-PICKED \?ELS5 + PRINT SENILITY-STRIKES + RTRUE +?ELS5: ZERO? ROBOT-PICKED /?ELS7 + PRINTI "You already picked " + PRINTD ROBOT-PICKED + PRINT PERIOD-CR + RTRUE +?ELS7: PRINTR "Use the automated robot selection equipment." + + + .FUNCT CARGO-BAY-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "This huge airlock is essentially a giant loading dock, where truckloads of forms arrive from various printing planets throughout the sector and are immediately distributed throughout the administrative deck. The only exit on foot is back the way you came. A spacetruck, its hatch " + CALL OPEN-CLOSED,SPACETRUCK-HATCH + PRINTI ", waits in the cargo bay." + RTRUE + + + .FUNCT SPACETRUCK-OBJECT-F + EQUAL? PRSA,V?WALK-TO,V?ENTER \?ELS5 + EQUAL? HERE,SPACETRUCK \?ELS10 + PRINT LOOK-AROUND + RTRUE +?ELS10: CALL DO-WALK,P?IN + RSTACK +?ELS5: EQUAL? PRSA,V?DISEMBARK,V?EXIT,V?LEAVE \?ELS14 + EQUAL? HERE,SPACETRUCK \?ELS19 + CALL DO-WALK,P?OUT + RSTACK +?ELS19: PRINT LOOK-AROUND + RTRUE +?ELS14: EQUAL? PRSA,V?EXAMINE \?ELS23 + EQUAL? HERE,SPACETRUCK \?ELS28 + CALL V-LOOK + RSTACK +?ELS28: CALL PERFORM,V?EXAMINE,SPACETRUCK-HATCH + RTRUE +?ELS23: EQUAL? PRSA,V?ON,V?LAUNCH \?ELS32 + EQUAL? HERE,SPACETRUCK /?ELS37 + PRINTR "You're not even in it!" +?ELS37: GRTR? SPACETRUCK-COUNTER,0 \?ELS39 + PRINT SENILITY-STRIKES + RTRUE +?ELS39: PRINTR "That's what the slot and keypad are for!" +?ELS32: EQUAL? PRSA,V?SEARCH \FALSE + CALL PERFORM,V?SEARCH,GLOBAL-ROOM + RTRUE + + + .FUNCT SPACETRUCK-F,RARG + EQUAL? RARG,M-LOOK \?ELS5 + PRINTI "This is a twelve-meter rig, the largest Class Three spacecraft made. In addition to the pilot and copilot seats, there's a Space Band Radio, a red button for activating the emergency beacon, plus a slot and keypad for controlling the autopilot. The hatch is " + CALL OPEN-CLOSED,SPACETRUCK-HATCH + PRINTI " and the rear of the truck is empty of cargo." + RTRUE +?ELS5: EQUAL? RARG,M-END \FALSE + IN? HELEN,HERE \FALSE + CALL VISIBLE?,CLASS-THREE-SPACECRAFT-ACTIVATION-FORM + ZERO? STACK /FALSE + PRINTI " " + CALL CONFETTI,CLASS-THREE-SPACECRAFT-ACTIVATION-FORM + RSTACK + + + .FUNCT SPACETRUCK-EXIT-F + FSET? SPACETRUCK-HATCH,OPENBIT /?ELS5 + CALL THIS-IS-IT,SPACETRUCK-HATCH + CALL DO-FIRST,STR?183 + RFALSE +?ELS5: EQUAL? SPACETRUCK-COUNTER,-1 \?ELS7 + RETURN CARGO-BAY +?ELS7: EQUAL? SPACETRUCK-COUNTER,5 \FALSE + EQUAL? COURSE-PICKED,RIGHT-COURSE \FALSE + RETURN DOCKING-BAY-2 + + + .FUNCT SPACETRUCK-HATCH-F + EQUAL? PRSA,V?OPEN \FALSE + GRTR? SPACETRUCK-COUNTER,-1 \FALSE + EQUAL? SPACETRUCK-COUNTER,5 \?CND8 + EQUAL? COURSE-PICKED,RIGHT-COURSE /FALSE +?CND8: PRINT YOU-CANT + PRINTR "open the hatch in deep space!" + + + .FUNCT PILOT-SEAT-F,VARG=0 + EQUAL? VARG,M-ENTER \FALSE + IN? FLOYD,HERE \FALSE + FSET? FLOYD,ACTIVEBIT \FALSE + PRINTI " Floyd clambers into the " + IN? PROTAGONIST,PILOT-SEAT \?ELS10 + MOVE FLOYD,COPILOT-SEAT + PRINTI "co" + JUMP ?CND8 +?ELS10: MOVE FLOYD,PILOT-SEAT +?CND8: PRINTD PILOT-SEAT + PRINTC 46 + EQUAL? SPACETRUCK-COUNTER,-1 \TRUE + SET 'FLOYD-SPOKE,TRUE-VALUE + SET 'AWAITING-REPLY,2 + ADD C-ELAPSED,2 + CALL QUEUE,I-REPLY,STACK + PRINTI " ""Let Floyd launch the spacetruck? Please? Floyd has not crashed a truck in over two weeks!""" + RTRUE + + + .FUNCT GENERIC-SEAT-F + EQUAL? PRSA,V?DISEMBARK,V?EXIT,V?LEAVE \FALSE + LOC PROTAGONIST + EQUAL? STACK,PILOT-SEAT,COPILOT-SEAT \FALSE + LOC PROTAGONIST + RSTACK + + + .FUNCT RADIO-F + EQUAL? PRSA,V?LISTEN \?ELS5 + FSET? RADIO,ACTIVEBIT \?ELS10 + PRINTR """Hiss. Crackle.""" +?ELS10: PRINTR "The radio isn't on!" +?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS14 + PRINTI "The radio seems to be damaged, because the microphone is missing. " + RFALSE +?ELS14: EQUAL? PRSA,V?ON \?ELS16 + CALL QUEUE,I-RADIO,-1 + RFALSE +?ELS16: EQUAL? PRSA,V?OFF \FALSE + CALL DEQUEUE,I-RADIO + RFALSE + + + .FUNCT I-RADIO + EQUAL? HERE,SPACETRUCK \FALSE + RANDOM 100 + LESS? 30,STACK /?ELS7 + PRINTI " The radio crackles to life. ""Breaker. " + CALL PICK-ONE,RADIO-LINES + PRINT STACK + PRINTR " Over.""" +?ELS7: RANDOM 100 + LESS? 20,STACK /FALSE + PRINTR " A country and western station drifts into tune for a moment, but then fades again." + + + .FUNCT RED-BUTTON-F + EQUAL? PRSA,V?PUSH \FALSE + EQUAL? SPACETRUCK-COUNTER,5 \?ELS10 + CALL RECORDING,STR?187 + RSTACK +?ELS10: PRINTR "You're not in trouble! Misuse of the emergency message beacon is a court martial offense!" + + + .FUNCT I-SPACETRUCK + CALL QUEUE,I-SPACETRUCK,-1 + INC 'SPACETRUCK-COUNTER + PRINTI " " + ZERO? SPACETRUCK-COUNTER \?ELS5 + PRINTI "The truck roars out of the cargo bay" + EQUAL? HERE,CARGO-BAY \?ELS10 + CALL JIGS-UP,STR?188 + RSTACK +?ELS10: FSET? SPACETRUCK-HATCH,OPENBIT \?ELS12 + CALL JIGS-UP,STR?189 + RSTACK +?ELS12: LOC PROTAGONIST + EQUAL? STACK,PILOT-SEAT,COPILOT-SEAT \?ELS14 + PRINTR ", slowly picking up speed. You settle back for the long trip." +?ELS14: CALL JIGS-UP,STR?190 + RSTACK +?ELS5: EQUAL? SPACETRUCK-COUNTER,1 \?ELS18 + CALL RECORDING,STR?191 + RSTACK +?ELS18: EQUAL? SPACETRUCK-COUNTER,2 \?ELS20 + PRINTR "There is a moment of stillness as the rear engines cut out. The moment ends as the braking rockets in front roar to life." +?ELS20: EQUAL? SPACETRUCK-COUNTER,3 \?ELS22 + CALL RECORDING,STR?192 + RSTACK +?ELS22: EQUAL? SPACETRUCK-COUNTER,4 \?ELS24 + EQUAL? COURSE-PICKED,RIGHT-COURSE \?ELS29 + PRINTI "A tiny star directly ahead grows brighter and resolves itself into a distant space station. The station grows rapidly larger as you hurtle towards it." + CRLF + CALL PERFORM,V?LOOK-INSIDE,WINDOW + PRINTR " With a final burst, the braking rockets bring you to a halt a few thousand meters from the station." +?ELS29: PRINTR "The forward braking rockets sputter off as the spacetruck comes to a dead stop in space. There is no space station, or any other sign of human civilization, in sight." +?ELS24: EQUAL? SPACETRUCK-COUNTER,5 \FALSE + EQUAL? COURSE-PICKED,RIGHT-COURSE \?ELS36 + CALL QUEUE,I-WELDER,-1 + CALL QUEUE,I-FLOYD,-1 + CALL QUEUE,I-PLATO,750 + CALL QUEUE,I-ROBOT-EVILNESS,1000 + MOVE PALLETS,SHIPPING-ROOM + ADD SCORE,5 >SCORE + PRINTI "The maneuvering thrusters kick on, nudging you toward the station. " + CALL RECORDING,STR?193 + PRINTI " The truck glides into the docking bay, and your stomach flips as the bay's arti-grav field comes on. The truck settles the last few centimeters to the floor, the bay floods with air, and a voice whispers, ""Stationfall."" Through the viewport, you see no one to meet you. Odd." + CRLF + JUMP ?CND34 +?ELS36: CALL RECORDING,STR?194 + CALL QUEUE,I-SUFFOCATE,1970 +?CND34: CALL DEQUEUE,I-SPACETRUCK + RSTACK + + + .FUNCT I-SUFFOCATE + CALL JIGS-UP,STR?195 + RSTACK + + + .FUNCT FOOD-KIT-F + EQUAL? PRSA,V?EMPTY \?ELS5 + FSET? FOOD-KIT,OPENBIT /?ELS10 + PRINTR "The kit is closed!" +?ELS10: FIRST? PRSO \FALSE + PRINTR "The goo, being gooey, sticks to the inside of the kit. You would probably have to shake the kit to get the goo out." +?ELS5: EQUAL? PRSA,V?OPEN \FALSE + CALL IN-VACUUM? + ZERO? STACK /FALSE + IN? FOOD-KIT,GRAY-GOO /?THN17 + IN? FOOD-KIT,ORANGE-GOO /?THN17 + IN? FOOD-KIT,BLUE-GOO \FALSE +?THN17: CALL SPACE-FOOD + RSTACK + + + .FUNCT IN-VACUUM? + EQUAL? HERE,VACUUM-STORAGE /TRUE + EQUAL? HERE,AIRLOCK \FALSE + FSET? OUTER-AIRLOCK-DOOR,OPENBIT \FALSE + RTRUE + + + .FUNCT SPACE-FOOD + REMOVE ORANGE-GOO + REMOVE BLUE-GOO + REMOVE GRAY-GOO + PRINTR "The food in the survival kit instantly crystallizes and drifts away." + + + .FUNCT GOO-F + EQUAL? PRSA,V?EAT \?ELS5 + CALL ULTIMATELY-IN?,FOOD-KIT,PROTAGONIST + ZERO? STACK \?ELS5 + CALL THIS-IS-IT,FOOD-KIT + PRINT YNH + CALL TRPRINT,FOOD-KIT + RSTACK +?ELS5: EQUAL? PRSA,V?DROP,V?TAKE \?ELS9 + EQUAL? PRSA,V?DROP \?ELS12 + PRINTI "The goo, being gooey, sticks where it is" + JUMP ?CND10 +?ELS12: EQUAL? PRSA,V?TAKE \?CND10 + PRINTI "It would ooze through your fingers" +?CND10: PRINTI ". You'll have to eat it right from" + CALL TRPRINT,FOOD-KIT + RSTACK +?ELS9: EQUAL? PRSA,V?FIND \FALSE + GET P-NAMW,0 + EQUAL? STACK,W?FOOD \FALSE + CALL PERFORM,V?SEARCH,GLOBAL-ROOM + RTRUE + + .ENDI diff --git a/ship.zil b/ship.zil new file mode 100644 index 0000000..236d93e --- /dev/null +++ b/ship.zil @@ -0,0 +1,1385 @@ +"SHIP for + STATIONFALL + (c) Copyright 1987 Infocom, Inc. All Rights Reserved." + + + +> + + + + + + + + + + + + + )> + )> + ) + ( + + ) + (T + + )>) + (T + )>)>> + + + + + + ) + (T + + + )>)>> + + + +> + + + +> + + + + )> + ) + ( + )>> + + FORM BOXED-FORMS-F) + (<> FORMS BOXED-FORMS-F)>)> + + + > + )>> + + + + + + ) + (T + )>) + ( + + + + )> + + >> + ) + ( + ) + ( + + ) + ( + ) + ( + + )>)>> + + + + SLOT SLOT-F) + (FIRST BIN BIN-F) + (SECOND BIN BIN-F) + (THIRD BIN BIN-F)>) + (ACTION ROBOT-POOL-F)> + + + >) + ( + ) + ( + >> + )>> + + <>> + > + <>> + >> + ) + ( + + >> + CR>) + ( + >> + CR>) + ( + >> + + ) + (T + )>) + ( + )>> + + + +) "AUX" X N TXT) + + )> + + ) + ( + + >> + + ) + (,FLOYD-ANGUISHED + + + ) + ( + > + + ) + (> + ) + (T + + + )> + )>) + ( + > + + + > + + > + + >> + + ) + (T + + )>) + ( + ) + (T + )>) + ( + > + + + > + ) + ( + + >> + ) + ( + + > + ) + ( + ,AWAITING-REPLY> + ) + ( + ,AWAITING-REPLY> + ) + ( + > + + ) + (T + )>) + ( + > + + ) + ( + > + ) + ( + > + ) + ( + > + ) + ( + + > + ) + ( + > + + + ) + (T + )>) + ( + > + + ) + ( + ) + ( + > + ) + ( + ) + ( + + + + ) + (T + )>) + (T + )>) + (T + + )>) + (> + > + + ) + ( + >> + ) + ( 50>> + > + > + ) + (,FLOYD-SHOT + + ) + (T + )>) + ( + + + + ) + (T + )>) + ( + ) + ( + + + + + ) + (T + )>) + ( + ) + ( + ) + ( + + ) + ( + + + ) + ( + + ) + (T + + + + )> + + > + + ) + (T + )> + + + )> + )>) + ( + ) + ( + ) + ( + ) + ( + + )> + + + ) + ( + ) + ( + > + + ) + ( + )>) + ( + ) + ( + ) + ( + ) + ( + > + + ) + ( + ) + ( + ) + ( + > + + ) + (T + + )>) + ( + > + + > + ) + ( + ) + ( + )>) + ;"following clauses are for when Floyd is off" + ( + + + + + + ) + ( + ) + ( + + ) + ( + )>> + +)) + > + ) + ( + > + ) + ( + >> + ) + ( + > + + > + + )> + ) + ( + + ) + (T + )> + + ) + (T + )>) + (> + ) + (,FLOYD-ANGUISHED + ) + (.EXAMINING + ) + (T + )>> + +) + (T + )>> + +> + +> ;"so Floyd doesn't do two things on the same turn" + +> ;"checks if Floyd was in room where you just were" + +> ;"true if Plato just died" + +)) + + > + + + ) + ( + ) + (,FLOYD-ANGUISHED + > + >)> + > + ) + ( + > + )> + + > + + ) + (> + + > + + + + + + + ) + ( + > + ) + (T + )>) + (T + )>) + ( + + + + + ,LIT> + > + + + > + > + 4> + > + + + + ) + (T + )> + ) + ( + > + > + + > + >)> + + ) + ( + > + > + + > + >)> + ) + ( + > + ,PERIOD-CR>) + (T + + + + > + ) + (T + ,PERIOD-CR>)>)>)>) + (> + + )> + + + + ) + (T + + + )> + + ) + ;"Floyd is active but not present" + ( + + + ,SOUTH-CONNECTION) + (<==? ,HERE ,SOUTH-JUNCTION ,NORTH-JUNCTION> + ,EAST-CONNECTION) + ( + ,SOUTH-JUNCTION) + ( + ,EAST-JUNCTION) + ( + ,NORTH-JUNCTION) + (T + ,LEVEL-FIVE)>> + + + + ) + (> + + > + ) + (T + )> + + > + ) + (T + )> + ) + (> + + > + + ) + (T + )> + + ) + ( + + > + + )> + + > + + ) + (T + )> + + ) + ( + ,LIT + >> + + + + > + + ) + (T + + ) + (T + )> + > + + )> + )> + + > + + )>)> + > + >> + +> + +> + + + + + + ) + ( + ) + (T + + )>) + ( + > + ) + ( + ) + ( + ) + ( + )>> + + + + + + ) + ( + ) + (T + + )>) + ( + ) + ( + )>> + +> + + + > + ) + (T + )>)>> + + + > + + + ) + (,ROBOT-PICKED + ) + (T + )>> + + + + + + + )>> + +; + +;)) + + > + > + + > + ) + (> + ) + (> + + ) + (T + + + + )>) + ( + )>> + + + + + + ) + (T + )>) + ( + + ) + (T + )>) + ( + + ) + (T + + )>) + ( + > + ) + ( + ) + (T + )>) + ( + + )>> + + SLOT SLOT-F) + (RED BUTTON RED-BUTTON-F)>)> + + + + + ) + ( + + > + + )>> + +> + + + ) + ( + ,CARGO-BAY) + ( + > + ,DOCKING-BAY-2)>> + + + + + > + + > + ;"you've arrived at the station")> + )>> + + + + + +)) + + + > + + + + ) + (T + )> + + + + + > + )> + )>> + + + ,PILOT-SEAT ,COPILOT-SEAT>> + >) + (T + )>> + + + + + + ) + (T + )>) + ( + + ) + ( + + ) + ( + + )>> + +> + ) + ( + " Over.\"" CR>) + ( + )>> + +> + + + + go wrong +go wrong go wrong..">) + (T + )>)>> + + + + + + + + + > + + + + + ) + ( + ) + ( ,PILOT-SEAT ,COPILOT-SEAT> + ) + (T + )>) + ( + ) + ( + ) + ( + ) + ( + + + + ) + (T + )>) + ( + + + ;"to get ints. in the proper order" + + + + > + + + ) + (T + + )> + )>> + +> + + + + + > + ) + ( + )>) + ( + + + + >> + )>> + + + + >> + ) + (T + )>> + + + + + > + + + + + + + + + >> + + ) + ( + + ) + ( + )> + ) + ( + ,W?FOOD>> + + )>> \ No newline at end of file diff --git a/station.zap b/station.zap new file mode 100644 index 0000000..287582a --- /dev/null +++ b/station.zap @@ -0,0 +1,2074 @@ + + + .FUNCT DOCKING-BAY-2-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "This is a tall, narrow bay. Your spacetruck is docked here. It's hatch is " + CALL OPEN-CLOSED,SPACETRUCK-HATCH + PRINTI ". To the east is the huge door into the station." + RTRUE + + + .FUNCT LEVEL-FIVE-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "You are in the central lobby of the middle level of the space station. The elevator " + EQUAL? ELEVATOR-LEVEL,5 /?CND6 + PRINTI "shaft " +?CND6: PRINTI "and call button lie to the east, and the corridor heads around the shaft to the northeast and southeast. Doors lead north and west, and a ladder leads both upward and downward." + RTRUE + + + .FUNCT JAMMER-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTI "The jammer is a black box with a short antenna. It has " + IN? TWENTY-PRONG-FROMITZ-BOARD,JAMMER \?ELS8 + PRINTI "a " + PRINTD TWENTY-PRONG-FROMITZ-BOARD + PRINTI " plugged into it" + JUMP ?CND6 +?ELS8: PRINTI "twenty tiny sockets on one side" +?CND6: PRINTI ". The jammer, which is o" + FSET? JAMMER,ACTIVEBIT \?ELS13 + PRINTC 110 + JUMP ?CND11 +?ELS13: PRINTI "ff" +?CND11: PRINTI ", looks as if it can be set to any frequency between 0 and 1400; it is currently set to " + PRINTN JAMMER-SETTING + PRINT PERIOD-CR + RTRUE +?ELS5: EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS17 + PRINT HUH + RTRUE +?ELS17: EQUAL? PRSA,V?PUT \?ELS19 + EQUAL? PRSI,JAMMER \?ELS19 + EQUAL? PRSO,TWENTY-PRONG-FROMITZ-BOARD /?ELS19 + CALL DOESNT-FIT,STR?203 + RSTACK +?ELS19: EQUAL? PRSA,V?CONNECT \?ELS23 + EQUAL? TWENTY-PRONG-FROMITZ-BOARD,PRSO,PRSI \?ELS23 + CALL PERFORM,V?PUT,TWENTY-PRONG-FROMITZ-BOARD,JAMMER + RTRUE +?ELS23: EQUAL? PRSA,V?CONNECT \?ELS27 + EQUAL? TWELVE-PRONG-FROMITZ-BOARD,PRSO,PRSI \?ELS27 + CALL PERFORM,V?PUT,TWELVE-PRONG-FROMITZ-BOARD,JAMMER + RTRUE +?ELS27: EQUAL? PRSA,V?SET \?ELS31 + EQUAL? PRSO,JAMMER \?ELS31 + ZERO? PRSI \?ELS38 + PRINT NEXT-TIME + RTRUE +?ELS38: EQUAL? PRSI,INTNUM /?ELS40 + PRINT HUH + RTRUE +?ELS40: EQUAL? P-NUMBER,JAMMER-SETTING \?ELS42 + PRINT SENILITY-STRIKES + RTRUE +?ELS42: SET 'JAMMER-SETTING,P-NUMBER + PRINTI "You set the jammer to " + PRINTN JAMMER-SETTING + PRINT PERIOD-CR + RTRUE +?ELS31: EQUAL? PRSA,V?COUNT \FALSE + CALL NOUN-USED,W?SOCKETS,JAMMER + ZERO? STACK /FALSE + PRINTR "20." + + + .FUNCT DISPENSER-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + GETP DISPENSER,P?FDESC + PRINT STACK + CRLF + RTRUE +?ELS5: EQUAL? PRSA,V?PUT \?ELS7 + EQUAL? PRSI,DISPENSER \?ELS7 + EQUAL? PRSO,COIN \?ELS14 + REMOVE COIN + FSET DISPENSER,TOUCHBIT + PRINTR """Clink!"" The coin drops into the slot." +?ELS14: CALL DOESNT-FIT,STR?208 + RSTACK +?ELS7: EQUAL? PRSA,V?DRILL \?ELS18 + PRINTI "We quote from the Stellar Patrol Demolitions Training Manual, Edition 3754-GS108. ""Why You Should Never Drill Into Active Machinery: Reason #7. You may" + PRINT STRIKE-POWER-SOURCE + PRINTI """ + As you drill into the dispenser, you" + PRINT STRIKE-POWER-SOURCE + CALL JIGS-UP,STR?209 + RSTACK +?ELS18: EQUAL? PRSA,V?SHOOT \?ELS20 + REMOVE DISPENSER + PRINTR "Okay, but you'll have to answer to the Stellar Patrol Dispensing Machine Company... BLAM! The dispenser is history." +?ELS20: EQUAL? PRSA,V?MUNG,V?KILL,V?KICK /?THN25 + EQUAL? PRSA,V?PUSH,V?SHAKE \?ELS22 +?THN25: FIRST? DISPENSER \?ELS22 + PRINTI "This fails to dislodge the " + FIRST? DISPENSER /?KLU29 +?KLU29: PRINTD STACK + PRINTR ", but it does help relieve some of your aggressive feelings toward the stupid dispenser." +?ELS22: EQUAL? PRSA,V?LOOK-INSIDE \FALSE + PRINT ONLY-BLACKNESS + RTRUE + + + .FUNCT COIN-SLOT-F + IN? DISPENSER,HERE /?ELS5 + CALL CANT-SEE,PSEUDO-OBJECT + RSTACK +?ELS5: EQUAL? PRSA,V?LOOK-INSIDE \?ELS7 + PRINT ONLY-BLACKNESS + RTRUE +?ELS7: EQUAL? PRSA,V?PUT \FALSE + EQUAL? PRSI,PSEUDO-OBJECT \FALSE + CALL PERFORM,V?PUT,PRSO,DISPENSER + RTRUE + + + .FUNCT DISPENSER-SCREEN-F + IN? DISPENSER,HERE /?ELS5 + CALL CANT-SEE,PSEUDO-OBJECT + RSTACK +?ELS5: EQUAL? PRSA,V?READ,V?EXAMINE \FALSE + PRINTR """--- STELLAR PATROL VENDO-MATIC --- + all items: 1 galakmid +1. Patrol Songbook (SOLD OUT) +2. Set of Postcards (SOLD OUT) +3. ID Card Polish (SOLD OUT) +4. Pilot's Compass (SOLD OUT) +5. Patrol Pen & Pencil Set (SOLD OUT) +6. All-Purpose Timer +7. Pocket Computer (SOLD OUT) +8. Birth Control Pills (SOLD OUT) +9. Large Drill Bit""" + + + .FUNCT DISPENSER-HOLE-F + IN? DISPENSER,HERE /?ELS5 + CALL CANT-SEE,PSEUDO-OBJECT + RSTACK +?ELS5: EQUAL? PRSA,V?REACH-IN \?ELS7 + IN? TIMER,DISPENSER \?ELS12 + PRINTR "You can just feel something with your fingertips, but you can't get a grip on it!" +?ELS12: PRINTR "You reach as far into the dispenser as you can, but feel nothing." +?ELS7: EQUAL? PRSA,V?LOOK-INSIDE \?ELS16 + PRINT ONLY-BLACKNESS + RTRUE +?ELS16: EQUAL? PRSA,V?PUT \FALSE + EQUAL? PRSI,PSEUDO-OBJECT \FALSE + PRINTI "You shove" + CALL TPRINT-PRSO + PRINTI " up into the hole. " + EQUAL? PRSO,OSTRICH-NIP \?ELS25 + IN? OSTRICH,HERE \?ELS25 + PRINTI "The ostrich sticks its head up the hole after the nip, gives a squawk of surprise, and jerks back out. A moment later, the nip" + FIRST? DISPENSER \?CND28 + INC 'ROBOT-EVILNESS + ADD SCORE,6 >SCORE + PRINTI " and a " + FIRST? DISPENSER /?KLU33 +?KLU33: PRINTD STACK + FIRST? DISPENSER /?KLU34 +?KLU34: MOVE STACK,HERE +?CND28: PRINTI " pop out and land on the deck. " + CALL PERFORM,V?GIVE,OSTRICH-NIP,OSTRICH + RTRUE +?ELS25: MOVE PRSO,HERE + PRINTR "A moment later, it drops out and lands on the floor." + + + .FUNCT TIMER-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTI "As advertised, it is a standard, all-purpose timer. The timer, which can be set to any multiple of ten between 0 and 100, is currently set to " + PRINTN TIMER-SETTING + PRINTI ". The timer " + ZERO? TIMER-CONNECTED /?ELS8 + PRINTI "is connected to a detonator" + JUMP ?CND6 +?ELS8: PRINTI "has one connection point" +?CND6: CALL QUEUED?,I-TIMER + ZERO? STACK /?CND12 + PRINTI ", and is ticking loudly" +?CND12: PRINT PERIOD-CR + RTRUE +?ELS5: EQUAL? PRSA,V?SET \?ELS16 + ZERO? PRSI \?ELS21 + PRINT NEXT-TIME + RTRUE +?ELS21: EQUAL? PRSI,INTNUM /?ELS23 + PRINTR "You can only set the timer to a number!" +?ELS23: GRTR? P-NUMBER,100 \?ELS25 + PRINTR "The timer only has settings up to 100." +?ELS25: MOD P-NUMBER,10 + ZERO? STACK /?ELS27 + PRINTR "You can only set the timer to increments of 10." +?ELS27: SET 'TIMER-SETTING,P-NUMBER + PRINTI "You set the timer to " + PRINTN TIMER-SETTING + GRTR? TIMER-SETTING,0 \?ELS32 + CALL QUEUE,I-TIMER,11 + PRINTI ". Instantly, it begins ticking loudly" + JUMP ?CND30 +?ELS32: CALL DEQUEUE,I-TIMER +?CND30: PRINT PERIOD-CR + RTRUE +?ELS16: EQUAL? PRSA,V?DISCONNECT \?ELS36 + ZERO? PRSI \?ELS36 + ZERO? TIMER-CONNECTED /?ELS36 + CALL PERFORM-PRSA,TIMER,DETONATOR + RSTACK +?ELS36: EQUAL? PRSA,V?OFF \?ELS40 + CALL QUEUED?,I-TIMER + ZERO? STACK /?ELS40 + SET 'P-NUMBER,0 + CALL PERFORM,V?SET,TIMER,INTNUM + RTRUE +?ELS40: EQUAL? PRSA,V?LISTEN \FALSE + CALL QUEUED?,I-TIMER + ZERO? STACK /FALSE + PRINTR """Tick, tick...""" + + + .FUNCT I-TIMER,?TMP1 + SUB TIMER-SETTING,10 >TIMER-SETTING + ZERO? TIMER-SETTING \?ELS3 + CALL DEQUEUE,I-TIMER + JUMP ?CND1 +?ELS3: CALL QUEUE,I-TIMER,10 +?CND1: CALL VISIBLE?,TIMER + ZERO? STACK /?CND6 + PRINTI " The timer reaches " + PRINTN TIMER-SETTING + ZERO? TIMER-SETTING \?CND9 + PRINTI " and stops ticking" +?CND9: PRINTC 46 +?CND6: ZERO? TIMER-SETTING \?CND12 + ZERO? TIMER-CONNECTED /?CND12 + LOC DIODE-M >?TMP1 + LOC DIODE-J + EQUAL? DETONATOR,?TMP1,STACK \?CND12 + IN? DIODE-J,DETONATOR \?ELS19 + REMOVE DIODE-J + CALL VISIBLE?,TIMER + ZERO? STACK /?CND12 + PRINTI " You hear a sizzling sound from the detonator, and a burnt odor assaults your nose." + JUMP ?CND12 +?ELS19: ZERO? EXPLOSIVE-CONNECTED /?ELS24 + IN? EXPLOSIVE,DRILLED-HOLE \?ELS28 + RANDOM 200 + ADD STACK,20 + CALL QUEUE,I-LIGHTS-OUT,STACK + FSET SAFE,OPENBIT + FSET SAFE,TOUCHBIT + FCLEAR SAFE,LOCKEDBIT + JUMP ?CND26 +?ELS28: IN? EXPLOSIVE,HERE /?CND26 + LOC EXPLOSIVE + REMOVE STACK +?CND26: CALL VISIBLE?,TIMER + ZERO? STACK /?ELS33 + PRINTI " The explosive fulfills its destiny by exploding. You simultaneously fulfill your own destiny: turning into itsy-bitsy pieces of " + PRINT LFC + CALL JIGS-UP,STR?44 + JUMP ?CND31 +?ELS33: CALL NEXT-ROOM?,TIMER + ZERO? STACK /?ELS35 + PRINTI " You hear a deafening explosion from very nearby!" + CRLF + JUMP ?CND31 +?ELS35: PRINTI " You hear a loud but distant explosion." + CRLF +?CND31: REMOVE TIMER + REMOVE EXPLOSIVE + REMOVE DETONATOR + JUMP ?CND12 +?ELS24: CALL VISIBLE?,TIMER + ZERO? STACK /?CND12 + PRINTI " You hear a click from the detonator." +?CND12: CALL VISIBLE?,TIMER + ZERO? STACK /FALSE + CRLF + RTRUE + + + .FUNCT CELL-F + EQUAL? PRSA,V?OPEN,V?WALK-TO,V?ENTER /?THN6 + EQUAL? PRSA,V?UNLOCK \FALSE +?THN6: PRINTR "The cells are all locked with high-security locks." + + + .FUNCT BRIG-LOCK-F + EQUAL? PRSA,V?PICK,V?UNLOCK,V?OPEN \FALSE + CALL YUKS + RSTACK + + + .FUNCT EAST-CONNECTION-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "The corridor widens to the east, the connection point for a Military Sub-Module. An iris hatch at the connection point is " + FSET? IRIS-HATCH,OPENBIT \?ELS8 + PRINTI "frozen open, revealing a small, grimy connector" + JUMP ?CND6 +?ELS8: PRINTI "shut tight" +?CND6: PRINTI ". Next to the hatch is a slot. There is a door northwest of here, and doorways to the south and southwest." + RTRUE + + + .FUNCT STATION-CONTROL-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "This is the nerve center of the space station, where every system can be monitored and controlled. " + LESS? DAY,3 \?CND6 + EQUAL? DAY,1 \?ELS11 + PRINTI "A couple" + JUMP ?CND9 +?ELS11: EQUAL? DAY,2 \?CND9 + PRINTI "Several" +?CND9: PRINTI " of the monitors are blinking red. " +?CND6: PRINTI "The exits are south, northeast and west." + RTRUE + + + .FUNCT SYSTEM-MONITORS-F + EQUAL? PRSA,V?READ,V?EXAMINE \FALSE + PRINTI "System: Status: +COMMUNICATION " + GRTR? DAY,2 \?ELS8 + PRINTI "GREEN" + JUMP ?CND6 +?ELS8: PRINTI "RED" +?CND6: PRINTI " +LIFE SUPPORT " + EQUAL? DAY,2 \?ELS13 + LESS? INTERNAL-MOVES,6500 \?ELS16 + PRINTI "YELLOW" + JUMP ?CND11 +?ELS16: PRINTI "RED" + JUMP ?CND11 +?ELS13: PRINTI "GREEN" +?CND11: PRINTI " +FOOD PRODUCTION " + GRTR? DAY,2 \?ELS23 + PRINTI "GREEN" + JUMP ?CND21 +?ELS23: PRINTI "RED" +?CND21: PRINTI " +GRAVITY " + EQUAL? DAY,2 \?ELS28 + PRINTI "YELLOW" + JUMP ?CND26 +?ELS28: PRINTI "GREEN" +?CND26: PRINTI " +COMPUTER GREEN +POWER " + EQUAL? DAY,2 \?ELS33 + LESS? INTERNAL-MOVES,4300 \?ELS36 + PRINTI "YELLOW" + JUMP ?CND31 +?ELS36: PRINTI "RED" + JUMP ?CND31 +?ELS33: PRINTI "GREEN" +?CND31: PRINTI " +PRINTING " + EQUAL? DAY,1 \?ELS43 + PRINTI "YELLOW" + JUMP ?CND41 +?ELS43: GRTR? DAY,3 \?ELS45 + PRINTI "GREEN" + JUMP ?CND41 +?ELS45: PRINTI "RED" +?CND41: CRLF + RTRUE + + + .FUNCT COMM-BUTTON-F + EQUAL? PRSA,V?TOUCH,V?PUSH \FALSE + PRINTI "The instant you touch the button, a powerful electric shock makes your arm jerk back." + GRTR? ROBOT-EVILNESS,13 \?ELS8 + CALL JIGS-UP,STR?216 + JUMP ?CND6 +?ELS8: GRTR? ROBOT-EVILNESS,7 \?CND6 + CALL CCOUNT,PROTAGONIST + GRTR? STACK,0 \?CND6 + CALL ROB,PROTAGONIST,HERE + PRINTI " The shock causes you to drop everything, and leaves your limbs twitching all over." +?CND6: CRLF + RTRUE + + + .FUNCT COMMANDERS-OFFICE-F,RARG + EQUAL? RARG,M-ENTER \?ELS5 + CALL ULTIMATELY-IN?,EXPLOSIVE + ZERO? STACK /?ELS5 + FSET EXERCISE-MACHINE,TOUCHBIT + MOVE EXERCISE-MACHINE,COMPUTER-CONTROL + RTRUE +?ELS5: EQUAL? RARG,M-LOOK \FALSE + PRINTI "This is the Station Commander's HQ, with doors to the south and east, and doorways to the north and northwest." + IN? LOG-READER,HERE /TRUE + PRINTI " There's a black scar where the log reader once sat." + RTRUE + + + .FUNCT LOG-READER-F + EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS5 + PRINT HUH + RTRUE +?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS7 + PRINTI "This simple device is for recording and reading log entries. It includes a tiny red button and a microphone/speaker. " + FSET? LOG-READER,ACTIVEBIT \?CND8 + IN? LOG-TAPE,LOG-READER \?CND8 + PRINTI "The red button is glowing. " +?CND8: PRINTI "At the moment, the log reader is o" + FSET? LOG-READER,ACTIVEBIT \?ELS15 + PRINTC 110 + JUMP ?CND13 +?ELS15: PRINTI "ff" +?CND13: PRINTI ", and there is " + IN? LOG-TAPE,LOG-READER \?ELS20 + PRINTC 97 + JUMP ?CND18 +?ELS20: PRINTI "no" +?CND18: PRINTR " log tape in it." +?ELS7: EQUAL? PRSA,V?PUT \?ELS24 + EQUAL? PRSO,LOG-TAPE /?ELS29 + CALL DOESNT-FIT,STR?218 + RSTACK +?ELS29: FSET? LOG-READER,ACTIVEBIT \FALSE + MOVE LOG-TAPE,LOG-READER + SET 'LOG-COUNTER,0 + CALL READ-LOG + RSTACK +?ELS24: EQUAL? PRSA,V?ON \?ELS33 + FSET? LOG-READER,ACTIVEBIT /?ELS33 + CALL QUEUE,I-LOG-READER,-1 + IN? LOG-TAPE,LOG-READER \FALSE + FSET LOG-READER,ACTIVEBIT + SET 'LOG-COUNTER,0 + CALL READ-LOG + RSTACK +?ELS33: EQUAL? PRSA,V?LISTEN \?ELS44 + GRTR? LOG-READER-COUNTER,11 \?ELS44 + PRINTR """Whine.""" +?ELS44: EQUAL? PRSA,V?TAKE \FALSE + PRINTR "It's bolted down." + + + .FUNCT LOG-READER-BUTTON-F + IN? LOG-READER,HERE /?ELS5 + CALL CANT-SEE,PSEUDO-OBJECT + RSTACK +?ELS5: EQUAL? PRSA,V?PUSH \FALSE + IN? LOG-TAPE,LOG-READER \?ELS12 + FSET? LOG-READER,ACTIVEBIT \?ELS12 + EQUAL? LOG-COUNTER,10 \?ELS19 + PRINTR "A mechanized voice from the log reader says, ""End of Log.""" +?ELS19: CALL READ-LOG + RSTACK +?ELS12: PRINT NOTHING-HAPPENS + RTRUE + + + .FUNCT READ-LOG + INC 'LOG-COUNTER + EQUAL? LOG-COUNTER,1 \?CND1 + PRINTI "A gravelly voice comes from the log reader: " +?CND1: PRINTC 34 + EQUAL? LOG-COUNTER,1 \?ELS6 + PRINTI "11349.12.2.3800: Some kripping joker has fouled up the elevator again! I have instructed Equipment Officer Mertzhoffer to lock up the elevator override machinery, and I'm putting the key in my safe! There will be no more elevator hacking aboard my station!" + JUMP ?CND4 +?ELS6: EQUAL? LOG-COUNTER,2 \?ELS8 + PRINTI "11349.12.2.5100: Reproductions Officer Hausberg reports that collater #22 is off-line for routine service. Estimates one or two days downtime. Also, unidentified craft detected in sector. No response to hailings. Sending Finsterwald to intercept." + JUMP ?CND4 +?ELS8: EQUAL? LOG-COUNTER,3 \?ELS10 + PRINTI "11349.12.2.6750: Unidentified craft towed to Docking Bay #1. It is a single-cabin vessel of unfamiliar alien origin. The only things aboard were the remains of one of the aliens, and a featureless pyramid. I'll leave it to the eggheads, I've got a problem of my own: a report that a used spaceship dealer in the village named Shady Dan is selling modified Patrol ID cards. Liason Officer Bumblewitz is investigating." + JUMP ?CND4 +?ELS10: EQUAL? LOG-COUNTER,4 \?ELS12 + PRINTI "11349.12.3.1900: Professor Blutz has back-plotted the course of the alien vessel. There are no star systems along the course; he theorizes that it may be of extra-galactic origin." + JUMP ?CND4 +?ELS12: EQUAL? LOG-COUNTER,5 \?ELS14 + PRINTI "11349.12.3.5100: No cooperation from Shady Dan, so I'm putting the village off-limits to station personnel. No more village entry forms will be validated." + JUMP ?CND4 +?ELS14: EQUAL? LOG-COUNTER,6 \?ELS16 + PRINTI "11349.12.3.5250: Some kripping joker snuck into my office and validated a whole batch of village entry forms! I won't take that kind of trot aboard my station! I'll hide the validation stamp under my bed until I figure out who's responsible. Also, I have given Professor Schmidt permission to move the alien pyramid to the " + PRINTD HOLDING-TANK + PRINTI " in the Sci Sub-Module for further study. Hmmm... This log reader is overheating. I'll have to dig out the spare." + JUMP ?CND4 +?ELS16: EQUAL? LOG-COUNTER,7 \?ELS18 + PRINTI "11349.12.3.7700: Equipment Officer Mertzhoffer informs me that there have been several unexplainable breakdowns in the Gymnastic Equipment and the Laundering Machinery. All very simple equipment; could it be sabotage? If so, how? Who? Why?" + JUMP ?CND4 +?ELS18: EQUAL? LOG-COUNTER,8 \?ELS20 + PRINTI "11349.12.4.1650: Emergency communication from the SPS Duffy. They are critically low on " + PRINT FORM-NAME + PRINTI ", and are sending someone over to pick up a truckload of them. Reproductions Officer Hausberg says that the #22 collater should be available to prepare the forms." + JUMP ?CND4 +?ELS20: EQUAL? LOG-COUNTER,9 \?ELS22 + PRINTI "11349.12.4.1850: Hausberg reports an unexpected shutdown of web-feeder #17. No apparent reason for the shutdown, and no warning, either. He says that one of his personnel almost lost an arm when it shut down. We may have to halt the entire plant to investigate. No telling how long... What the... Trot! Now the spare log reader is overheating, also!" + JUMP ?CND4 +?ELS22: PRINTI "11349.12.4.1900: One of the ensigns in the filing division was seriously injured when one of the " + PRINTD WELDER + PRINTI "s malfunctioned. She's in Sick Bay now, Doc says she should pull through. I've been in space for thirty-two years and I've never heard of a " + PRINTD WELDER + PRINTI " malfun... What the krip!..." +?CND4: PRINTC 34 + EQUAL? LOG-COUNTER,10 /?CND25 + CRLF + PRINTI " A mechanized voice from the log reader intones the single word ""More,"" and the red button on the reader lights up." +?CND25: CRLF + RTRUE + + + .FUNCT I-LOG-READER + INC 'LOG-READER-COUNTER + FSET? LOG-READER,ACTIVEBIT /?ELS5 + CALL DEQUEUE,I-LOG-READER + SET 'LOG-READER-COUNTER,0 + RETURN LOG-READER-COUNTER +?ELS5: EQUAL? LOG-READER-COUNTER,12 \?ELS7 + EQUAL? HERE,COMMANDERS-OFFICE \?ELS7 + PRINTR " The reader begins producing a whining noise." +?ELS7: EQUAL? LOG-READER-COUNTER,13 \?ELS11 + EQUAL? HERE,COMMANDERS-OFFICE \?ELS11 + PRINTR " The whine from the log reader rises in pitch, and grows louder by the millichron!" +?ELS11: EQUAL? LOG-READER-COUNTER,14 \FALSE + REMOVE LOG-READER + CALL DEQUEUE,I-LOG-READER + FCLEAR COMMANDERS-OFFICE,TOUCHBIT + EQUAL? HERE,COMMANDERS-OFFICE \?ELS20 + CALL JIGS-UP,STR?219 + RSTACK +?ELS20: EQUAL? HERE,COMMANDERS-QUARTERS,BRIEFING-ROOM,STATION-CONTROL /?THN23 + EQUAL? HERE,SOUTH-JUNCTION \FALSE +?THN23: PRINTR " You hear an explosion from nearby." + + + .FUNCT DIAL-F + FSET? SAFE,OPENBIT \?ELS5 + PRINTR "There's not much left of the dial." +?ELS5: EQUAL? PRSA,V?SET \?ELS7 + EQUAL? PRSO,PSEUDO-OBJECT \?ELS7 + ZERO? PRSI \?ELS14 + PRINT NEXT-TIME + RTRUE +?ELS14: EQUAL? PRSI,INTNUM /?ELS16 + PRINT HUH + RTRUE +?ELS16: CALL PERFORM,V?SET,INTNUM + RTRUE +?ELS7: EQUAL? PRSA,V?EXAMINE \FALSE + PRINTI "The dial is set to " + PRINTN DIAL-SETTING + PRINT PERIOD-CR + RTRUE + + + .FUNCT SAFE-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTI "It's a top-of-the-line HyperSecurity Safe, featuring a dial with 8000 settings. There are probably between twelve and twenty numbers in the combination" + IN? DRILLED-HOLE,HERE \?CND6 + PRINTI ". There is a hole in the safe" + CALL DESCRIBE-BIT-SIZE,HOLE-SIZE +?CND6: PRINT PERIOD-CR + RTRUE +?ELS5: EQUAL? PRSA,V?DRILL \?ELS10 + CALL MAKE-HOLE-WITH-DRILL,SAFE + RSTACK +?ELS10: EQUAL? PRSA,V?PICK,V?UNLOCK \FALSE + PRINTR "The galaxy's craftiest safecrackers would be stumped by this baby." + + + .FUNCT DESCRIBE-BIT-SIZE,BIT-SIZE + PRINTI " approximately the diameter of a " + EQUAL? BIT-SIZE,SMALL-BIT \?ELS5 + PRINTI "toothpick" + RTRUE +?ELS5: EQUAL? BIT-SIZE,MEDIUM-BIT \?ELS7 + PRINTI "pencil" + RTRUE +?ELS7: PRINTI "cigar" + RTRUE + + + .FUNCT DRILLED-HOLE-F + EQUAL? PRSA,V?PUT \?ELS5 + EQUAL? PRSI,DRILLED-HOLE \?ELS5 + EQUAL? PRSO,EXPLOSIVE \?THN13 + EQUAL? HOLE-SIZE,SMALL-BIT \?ELS12 +?THN13: CALL DOESNT-FIT,STR?225 + RSTACK +?ELS12: EQUAL? HERE,DOME \?ELS16 + REMOVE EXPLOSIVE + PRINTR "The warmth of the housing immediately melts the explosive. It vanishes into a puff of vapor." +?ELS16: ZERO? SAFE-HOLE-SCORE \FALSE + EQUAL? HERE,COMMANDERS-QUARTERS \FALSE + INC 'ROBOT-EVILNESS + ADD SCORE,5 >SCORE + SET 'SAFE-HOLE-SCORE,TRUE-VALUE + RFALSE +?ELS5: EQUAL? PRSA,V?DRILL \?ELS22 + EQUAL? HERE,COMMANDERS-QUARTERS \?ELS27 + PUSH SAFE + JUMP ?CND23 +?ELS27: EQUAL? HERE,LOAN-SHARK \?ELS29 + PUSH STRONG-BOX + JUMP ?CND23 +?ELS29: PUSH HOUSING +?CND23: CALL PERFORM,V?DRILL,STACK + RTRUE +?ELS22: EQUAL? PRSA,V?LOOK-INSIDE \FALSE + PRINT ONLY-BLACKNESS + RTRUE + + + .FUNCT MAKE-HOLE-WITH-DRILL,OBJ + ZERO? DRILL-DEAD /?ELS5 + CALL PERFORM,V?ON,DRILL + RTRUE +?ELS5: ZERO? HOLE-SIZE /?ELS8 + IN? DRILLED-HOLE,HERE /?ELS8 + PRINTR "As you begin drilling, the drill sparks and stops running." +?ELS8: ZERO? HOLE-SIZE \?ELS12 + MOVE DRILLED-HOLE,HERE + FIRST? DRILL >HOLE-SIZE /?KLU21 +?KLU21: SET 'C-ELAPSED,30 + PRINTI "You drill a hole in" + CALL TPRINT,OBJ + CALL DESCRIBE-BIT-SIZE,HOLE-SIZE + PRINT PERIOD-CR + RTRUE +?ELS12: FIRST? DRILL /?KLU22 +?KLU22: EQUAL? HOLE-SIZE,STACK \?ELS14 + PRINT SENILITY-STRIKES + RTRUE +?ELS14: EQUAL? HOLE-SIZE,LARGE-BIT /?THN17 + IN? SMALL-BIT,DRILL \?ELS16 +?THN17: PRINTR "The hole in the safe is already larger than the bit in the drill." +?ELS16: FIRST? DRILL >HOLE-SIZE /?KLU23 +?KLU23: PRINTI "You enlarge the hole in" + CALL TPRINT,OBJ + PRINTI ". It's now" + CALL DESCRIBE-BIT-SIZE,HOLE-SIZE + PRINT PERIOD-CR + RTRUE + + + .FUNCT STAMP-F + EQUAL? PRSA,V?EXAMINE \FALSE + PRINTR "It's a fairly standard self-inking rubber stamp." + + + .FUNCT SOUTH-CONNECTION-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "The corridor widens as it reaches the hull of the station. To the south, where a Sub-Module connection would be in a station with a Diplomatic Sub-Module, an iris hatch is " + FSET? IRIS-HATCH,OPENBIT \?ELS8 + PRINTI "open, leading to a dark corridor" + JUMP ?CND6 +?ELS8: PRINTI "closed" +?CND6: PRINTI ". There's a slot next to the hatch. Other doors lead east and west." + RTRUE + + + .FUNCT LEVEL-FOUR-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "You are now on the primary bunk level of the station, with barracks to the north and south. To the east is the elevator " + EQUAL? ELEVATOR-LEVEL,4 /?CND6 + PRINTI "shaft " +?CND6: PRINTI "and the elevator call button. Docking Bay #3 can be entered to the west, and a ladder leads up and down." + RTRUE + + + .FUNCT LEVEL-THREE-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "From this lobby you can choose doors that lie to the north, south, or northwest. An additional doorway leads southwest. The elevator " + EQUAL? ELEVATOR-LEVEL,3 /?CND6 + PRINTI "shaft " +?CND6: PRINTI "and button are just to the east, and a ladder leads up or down." + RTRUE + + + .FUNCT GYM-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "This is a huge room where station personnel keep in shape via exercise and recreational sports. " + IN? EXERCISE-MACHINE,HERE /?CND6 + PRINTI "There's a sign on one wall. " +?CND6: PRINTI "The sole exit is south." + RTRUE + + + .FUNCT EXERCISE-MACHINE-F,OARG + ZERO? OARG \FALSE + EQUAL? PRSA,V?ENTER \?ELS8 + CALL RUNNING?,I-EXERCISE-MACHINE + ZERO? STACK /?ELS8 + CALL JIGS-UP,STR?234 + RSTACK +?ELS8: EQUAL? PRSA,V?OFF,V?ON \?ELS12 + PRINTR "It's permanently on." +?ELS12: EQUAL? PRSA,V?EXAMINE \?ELS14 + IN? PROTAGONIST,EXERCISE-MACHINE /?ELS14 + PRINTI "There's no one in" + CALL TRPRINT,EXERCISE-MACHINE + RSTACK +?ELS14: EQUAL? PRSA,V?MUNG,V?KILL \?ELS18 + PRINTR "The exercise machine is made of zynoid-reinforced hyper-steel." +?ELS18: EQUAL? PRSA,V?USE \FALSE + IN? PROTAGONIST,EXERCISE-MACHINE \?ELS25 + CALL V-EXERCISE + RSTACK +?ELS25: PRINTR "You're not even in it!" + + + .FUNCT LAUNDRY-F,RARG + EQUAL? RARG,M-LOOK \?ELS5 + PRINTI "All laundry rooms, planetside as well as in space, tend to look alike. This one is no exception. " + FSET? DRYER,ACTIVEBIT \?CND6 + CALL DESCRIBE-DRYER-HEAT +?CND6: PRINTI " The door lies on the east side." + RTRUE +?ELS5: EQUAL? RARG,M-ENTER \?ELS10 + FSET? PRESSER,ACTIVEBIT \?ELS10 + CALL QUEUE,I-PRESSER,40 + RSTACK +?ELS10: EQUAL? RARG,M-END \FALSE + GRTR? DRYER-COUNTER,15 \FALSE + PRINTI " The heat from the dryer is too much to stand! You stumble mindlessly out into the corridor" + PRINT ELLIPSIS + CALL GOTO,LEVEL-THREE + RSTACK + + + .FUNCT DRYER-F + EQUAL? PRSA,V?LOOK-BEHIND \?ELS5 + PRINTR "You see a huge pile of Patrol-issue socks, hundreds of them, all mismatched." +?ELS5: EQUAL? PRSA,V?ON \?ELS7 + FSET? DRYER,ACTIVEBIT /?ELS7 + FSET DRYER,ACTIVEBIT + CALL QUEUE,I-DRYER,-1 + PRINTR "An abnormal amount of hot air blasts out from all sides of the dryer." +?ELS7: EQUAL? PRSA,V?OFF \FALSE + FSET? DRYER,ACTIVEBIT \FALSE + FCLEAR DRYER,ACTIVEBIT + CALL DEQUEUE,I-DRYER + SET 'DRYER-COUNTER,0 + PRINTR "With the dryer off, the station's ventilation system quickly returns the room to a comfy twenty-three degrees centigrade." + + + .FUNCT I-DRYER + INC 'DRYER-COUNTER + FCLEAR LAUNDRY,TOUCHBIT + EQUAL? HERE,LAUNDRY \FALSE + EQUAL? DRYER-COUNTER,5,10,15 \FALSE + PRINTI " " + CALL DESCRIBE-DRYER-HEAT + CRLF + RTRUE + + + .FUNCT DESCRIBE-DRYER-HEAT + GRTR? DRYER-COUNTER,14 \?ELS5 + PRINTI "Searing blasts of air from the dryer have made the room unbearably hot." + RTRUE +?ELS5: GRTR? DRYER-COUNTER,9 \?ELS7 + PRINTI "Thanks to the dryer, the laundry room is now incredibly toasty." + RTRUE +?ELS7: PRINTI "The dryer is making the room uncomfortably hot." + RTRUE + + + .FUNCT PRESSER-F,OARG=0 + ZERO? OARG /?ELS5 + FSET? PRESSER,ACTIVEBIT \FALSE + EQUAL? OARG,M-OBJDESC? /TRUE + PRINTI " " + CALL DESCRIBE-PRESSER + RSTACK +?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS16 + FSET? PRESSER,ACTIVEBIT \?CND17 + CALL DESCRIBE-PRESSER + PRINTC 32 +?CND17: PRINTI "The presser is currently o" + FSET? PRESSER,ACTIVEBIT \?ELS22 + PRINTC 110 + JUMP ?CND20 +?ELS22: PRINTI "ff" +?CND20: PRINTI ". " + RFALSE +?ELS16: EQUAL? PRSA,V?PUT-ON \?ELS26 + EQUAL? PRSI,PRESSER \?ELS26 + CALL PERFORM,V?PUT,PRSO,PRSI + RTRUE +?ELS26: EQUAL? PRSA,V?CLOSE \?ELS30 + FSET? PRESSER,ACTIVEBIT \?ELS30 + IN? CRUMPLED-FORM,PRESSER \?CND33 + REMOVE CRUMPLED-FORM + MOVE VILLAGE-FORM,PRESSER +?CND33: IN? PATROL-UNIFORM,PRESSER \FALSE + SET 'SUIT-PRESSED,TRUE-VALUE + RFALSE +?ELS30: EQUAL? PRSA,V?ON \FALSE + FSET? PRESSER,ACTIVEBIT /FALSE + SET 'PRESSER-STEAMING,FALSE-VALUE + FSET PRESSER,ACTIVEBIT + CALL QUEUE,I-PRESSER,25 + FSET? PRESSER,OPENBIT /?CND43 + IN? CRUMPLED-FORM,PRESSER \?CND46 + REMOVE CRUMPLED-FORM + MOVE VILLAGE-FORM,PRESSER +?CND46: IN? PATROL-UNIFORM,PRESSER \?CND43 + SET 'SUIT-PRESSED,TRUE-VALUE +?CND43: PRINTR "A trickle of steam begins leaking from the presser." + + + .FUNCT DESCRIBE-PRESSER + PRINTI "A " + ZERO? PRESSER-STEAMING /?ELS3 + PRINTI "huge amount" + JUMP ?CND1 +?ELS3: PRINTI "trickle" +?CND1: PRINTI " of steam is coming from the laundry room's presser." + RTRUE + + + .FUNCT I-PRESSER + FSET? PRESSER,ACTIVEBIT \FALSE + EQUAL? HERE,LAUNDRY \FALSE + PRINTI " " + ZERO? PRESSER-STEAMING /?ELS12 + PRINTI "The presser suddenly " + FSET? PRESSER,OPENBIT /?CND14 + PRINTI "opens, " +?CND14: CALL JIGS-UP,STR?236 + RSTACK +?ELS12: SET 'PRESSER-STEAMING,TRUE-VALUE + CALL QUEUE,I-PRESSER,25 + PRINTR "The presser shudders, and clouds of steam begin billowing out of it." + + + .FUNCT CHAPEL-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "This is a modest, nondenominational chapel. Hanging high above the beautiful wooden pulpit " + FSET? STAR,TOUCHBIT /?ELS8 + PRINTI "are the two" + JUMP ?CND6 +?ELS8: PRINTI "is one of the" +?CND6: PRINTI " universal symbols of every major galactic religion: an eternal flame" + FSET? STAR,TOUCHBIT /?CND11 + PRINTI " and a seven-pointed star" +?CND11: PRINTI ". " + FSET? ETERNAL-FLAME,ONBIT /?CND14 + PRINT FLAME-EXTINGUISHED + PRINTC 32 +?CND14: PRINTI "A doorway occupies the center of the east wall." + FSET? STAR,TOUCHBIT /TRUE + CRLF + PRINTI " The star is blinking." + RTRUE + + + .FUNCT STAR-F + CALL TOUCHING?,STAR + ZERO? STACK /?ELS5 + FSET? STAR,TRYTAKEBIT \?ELS5 + ZERO? HANGING-IN-AIR \?ELS5 + PRINTR "The star is above you, beyond your reach." +?ELS5: EQUAL? PRSA,V?TAKE \?ELS9 + FSET? STAR,TRYTAKEBIT \?ELS9 + ZERO? HANGING-IN-AIR /?ELS9 + FCLEAR STAR,TRYTAKEBIT + FCLEAR STAR,NDESCBIT + FSET STAR,TOUCHBIT + MOVE STAR,PROTAGONIST + INC 'ROBOT-EVILNESS + GETP DIODE-M,P?VALUE + ADD SCORE,STACK >SCORE + PUTP DIODE-M,P?VALUE,0 + PRINTR "Taken." +?ELS9: EQUAL? PRSA,V?EXAMINE \?ELS13 + IN? DIODE-M,STAR \?CND14 + PRINTI "It's blinking with a gentle, rhythmic light. " +?CND14: FSET? STAR,TRYTAKEBIT \?ELS21 + CALL PERFORM,V?TOUCH,STAR + RTRUE +?ELS21: PRINTI "The back of the star " + FSET? STAR,OPENBIT \?ELS26 + PRINTI "is open" + JUMP ?CND24 +?ELS26: PRINTI "looks openable" +?CND24: PRINT PERIOD-CR + RTRUE +?ELS13: EQUAL? PRSA,V?PUT \FALSE + EQUAL? PRSO,DIODE-J \FALSE + REMOVE DIODE-J + PRINTR "As you put the diode in place, the star begins blinking rapidly and erratically. Suddenly the diode bursts and the star goes dead." + + + .FUNCT ETERNAL-FLAME-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + FSET? ETERNAL-FLAME,ONBIT \?ELS10 + PRINTR "The eternal flame burns high above the floor of the chapel. It looks like a reproduction of the eternal flame designed by the 108th century artist, Ernie DaCosta, for the Sierra Vista Monastery on Bulbus VII." +?ELS10: PRINT FLAME-EXTINGUISHED + CRLF + RTRUE +?ELS5: EQUAL? PRSA,V?OFF \?ELS14 + FSET? ETERNAL-FLAME,ONBIT \?ELS14 + PRINTR "It's high above your head, and even if you could reach it, I doubt you could extinguish it. It's designed to burn forever, after all." +?ELS14: CALL TOUCHING?,ETERNAL-FLAME + ZERO? STACK /?ELS18 + ZERO? HANGING-IN-AIR \?ELS18 + CALL CANT-REACH,ETERNAL-FLAME + RSTACK +?ELS18: EQUAL? PRSA,V?PUT,V?BURN \?ELS22 + EQUAL? PRSI,ETERNAL-FLAME \?ELS22 + FSET? PRSO,BURNBIT \?ELS29 + REMOVE PRSO + PRINTI "The instant" + CALL TPRINT-PRSO + PRINTR " touches the flame it burns up." +?ELS29: PRINTI "The flame has no effect on" + CALL TRPRINT,PRSO + RSTACK +?ELS22: EQUAL? PRSA,V?SHOOT \?ELS33 + PRINTR "Perhaps that made the flame hotter; there was really no way to tell." +?ELS33: EQUAL? PRSA,V?ON \FALSE + FSET? ETERNAL-FLAME,ONBIT /FALSE + CALL PERFORM,V?SET,SWITCH + RTRUE + + + .FUNCT PULPIT-F + EQUAL? PRSA,V?STAND-ON,V?CLIMB-UP,V?CLIMB-ON /?THN6 + EQUAL? PRSA,V?ENTER \?ELS5 +?THN6: ZERO? HANGING-IN-AIR /?ELS12 + CALL CANT-REACH,PULPIT + RSTACK +?ELS12: PRINTI "The pulpit sways and you fall off." + FSET? PULPIT,TOUCHBIT /?ELS20 + PRINTI " However, it wasn't a wasted effort: " + CALL PERFORM,V?EXAMINE,PULPIT + RTRUE +?ELS20: CRLF + RTRUE +?ELS5: EQUAL? PRSA,V?EXAMINE \FALSE + FSET? PULPIT,TOUCHBIT /FALSE + FSET PULPIT,TOUCHBIT + PRINTR "You discover that the pulpit seems openable!" + + + .FUNCT SWITCH-F + EQUAL? PRSA,V?THROW,V?OFF,V?ON /?THN6 + EQUAL? PRSA,V?SET,V?MOVE,V?PUSH \FALSE +?THN6: ZERO? HANGING-IN-AIR /?CND8 + CALL CANT-REACH,SWITCH + RTRUE +?CND8: PRINTI "The eternal flame " + FSET? ETERNAL-FLAME,ONBIT \?ELS16 + FCLEAR ETERNAL-FLAME,ACTIVEBIT + FCLEAR ETERNAL-FLAME,ONBIT + PRINTR "goes out!" +?ELS16: FSET ETERNAL-FLAME,ACTIVEBIT + FSET ETERNAL-FLAME,ONBIT + PRINTI "flickers back on." + IN? BALLOON,HERE \?CND19 + MOVE BALLOON,LEVEL-THREE + PRINTI " The " + PRINTD BALLOON + PRINTI " shoots out of the Chapel." +?CND19: CRLF + RTRUE + + + .FUNCT THEATRE-SEAT-F + EQUAL? PRSA,V?CLIMB-ON,V?ENTER \FALSE + PRINTR "But there's nothing to watch at the moment!" + + + .FUNCT MESS-HALL-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "This open dining area seats around thirty people. " + PRINTD FPU + PRINTI "s curve along the exterior wall. There's a doorway to the southeast, and doors lead north, south, and northeast. To the east are the elevator" + EQUAL? ELEVATOR-LEVEL,2 /?CND6 + PRINTI " shaft" +?CND6: PRINTI ", the elevator button, and the up-down ladder." + RTRUE + + + .FUNCT FPU-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTR "The units curve around the outside wall of the Mess Hall. The interface is delightfully simple: a user simply turns on the unit and immediately receives a tasty and nutritionally-balanced meal." +?ELS5: EQUAL? PRSA,V?ON \FALSE + PRINTI "A taped voice, in a cheery contralto, says ""Good " + LESS? INTERNAL-MOVES,3000 \?ELS10 + PRINTI "morning" + JUMP ?CND8 +?ELS10: GRTR? INTERNAL-MOVES,5000 \?ELS12 + PRINTI "evening" + JUMP ?CND8 +?ELS12: PRINTI "afternoon" +?CND8: PRINTI "! Today's menu features " + LESS? INTERNAL-MOVES,3000 \?ELS17 + PRINTI "sausage, frobbled eggs, and teakberry juice" + JUMP ?CND15 +?ELS17: GRTR? INTERNAL-MOVES,5000 \?ELS19 + PRINTI "chicken pot pie, braised volpoid livers, and mashed Rigellian yams" + JUMP ?CND15 +?ELS19: PRINTI "a bacon, lettuce, and frombucko sandwich" +?CND15: PRINTR ". Eat hearty! Dispensing will now begin."" A seamless hatch in the dispenser opens, and a stream of acid shoots out. You leap aside as the acid etches the floor before evaporating, leaving behind some acrid fumes." + + + .FUNCT SOUP-F,OARG=0 + ZERO? OARG /?ELS5 + FSET? SOUP,TOUCHBIT /FALSE + EQUAL? OARG,M-OBJDESC? /TRUE + PRINTI " A bowl of creamy broth sits on one of the tables" + EQUAL? DAY,1 \?CND12 + PRINTI ". It's still steaming, though there's no one in sight" +?CND12: PRINTC 46 + RTRUE +?ELS5: EQUAL? PRSA,V?THROW,V?EMPTY,V?POUR \?ELS16 + EQUAL? PRSO,SOUP \?ELS16 + EQUAL? PRSI,ETERNAL-FLAME \?ELS23 + FSET? ETERNAL-FLAME,ONBIT \?ELS23 + PRINTI "You soup hits the wall just a few centimeters under the flame" + CALL ANTI-LITTER,SOUP + RSTACK +?ELS23: PRINTR "Shuddering at the memories of your deck-scrubbing days, you realize what a mess that would make." +?ELS16: EQUAL? PRSA,V?TOUCH,V?EXAMINE,V?TASTE \?ELS29 + EQUAL? DAY,1 \?ELS29 + PRINTR "It's still hot." +?ELS29: EQUAL? PRSA,V?TASTE \?ELS33 + PRINTR "It tastes unusually bitter." +?ELS33: EQUAL? PRSA,V?SMELL \?ELS35 + PRINTR "The soup has a vague chemical odor." +?ELS35: EQUAL? PRSA,V?EAT \?ELS37 + ZERO? HUNGER-LEVEL \?ELS42 + PRINT NOT-HUNGRY + RTRUE +?ELS42: CALL JIGS-UP,STR?238 + RSTACK +?ELS37: EQUAL? PRSA,V?FIND \FALSE + GET P-NAMW,0 + EQUAL? STACK,W?FOOD \FALSE + CALL PERFORM,V?SEARCH,GLOBAL-ROOM + RTRUE + + + .FUNCT DETONATOR-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTI "It's a state-of-the-art detonator, fairly cubical with two connection points. " + ZERO? TIMER-CONNECTED /?ELS8 + PRINTI "A timer is attached at one of those points" + ZERO? EXPLOSIVE-CONNECTED /?CND10 + PRINTI ", and an explosive is attached at the other" +?CND10: PRINTI ". " + JUMP ?CND6 +?ELS8: ZERO? EXPLOSIVE-CONNECTED /?CND6 + PRINTI "An explosive is attached at one of those points. " +?CND6: FSET? DETONATOR,OPENBIT \?ELS21 + PRINTI "The detonator is open" + FIRST? DETONATOR \?ELS26 + PRINTI " and contains" + FIRST? DETONATOR /?KLU101 +?KLU101: CALL ARPRINT,STACK + RSTACK +?ELS26: PRINT PERIOD-CR + RTRUE +?ELS21: PRINTR "There is a faint crack running around the outside of the detonator, indicating that perhaps it can be opened." +?ELS5: EQUAL? PRSA,V?CONNECT \?ELS32 + EQUAL? TIMER,PRSO,PRSI \?ELS37 + ZERO? TIMER-CONNECTED /?ELS42 + PRINT SENILITY-STRIKES + RTRUE +?ELS42: SET 'TIMER-CONNECTED,TRUE-VALUE + PRINTR "Done." +?ELS37: EQUAL? EXPLOSIVE,PRSO,PRSI \?ELS47 + ZERO? EXPLOSIVE-CONNECTED /?ELS52 + PRINT SENILITY-STRIKES + RTRUE +?ELS52: SET 'EXPLOSIVE-CONNECTED,TRUE-VALUE + PRINTR "Done." +?ELS47: PRINT YOU-CANT + PRINTR "connect the detonator to that!" +?ELS32: EQUAL? PRSA,V?DISCONNECT \?ELS59 + ZERO? PRSI \?ELS64 + ZERO? EXPLOSIVE-CONNECTED \?THN70 + ZERO? TIMER-CONNECTED /FALSE +?THN70: PRINTI "You detach the detonator from " + ZERO? TIMER-CONNECTED /?ELS74 + PRINTI "the timer" + ZERO? EXPLOSIVE-CONNECTED /?CND72 + PRINTI " and the explosive" + JUMP ?CND72 +?ELS74: PRINTI "the explosive" +?CND72: SET 'EXPLOSIVE-CONNECTED,FALSE-VALUE + SET 'TIMER-CONNECTED,FALSE-VALUE + PRINT PERIOD-CR + RTRUE +?ELS64: EQUAL? EXPLOSIVE,PRSO,PRSI \?ELS83 + ZERO? EXPLOSIVE-CONNECTED /?ELS83 + SET 'EXPLOSIVE-CONNECTED,FALSE-VALUE + PRINTR "You detach the detonator from the explosive." +?ELS83: EQUAL? TIMER,PRSO,PRSI \FALSE + ZERO? TIMER-CONNECTED /FALSE + SET 'TIMER-CONNECTED,FALSE-VALUE + PRINTR "You detach the detonator from the timer." +?ELS59: EQUAL? PRSA,V?PUT \FALSE + EQUAL? PRSI,DETONATOR \FALSE + FSET? DETONATOR,OPENBIT \FALSE + EQUAL? PRSO,BLACKENED-DIODE,DIODE-M,DIODE-J /?ELS98 + CALL DOESNT-FIT,STR?240 + RSTACK +?ELS98: FIRST? DETONATOR \FALSE + PRINTI "There's a " + FIRST? DETONATOR /?KLU102 +?KLU102: PRINTD STACK + PRINTR " in the way." + + + .FUNCT BLACKENED-DIODE-F + EQUAL? PRSA,V?CLEAN \?ELS5 + ZERO? DIODE-CLEANED /?ELS10 + PRINTR "You've de-charred the diode to the max." +?ELS10: SET 'DIODE-CLEANED,TRUE-VALUE + PRINTR "You scrape off enough black that you can just make out a letter ""M.""" +?ELS5: EQUAL? PRSA,V?EXAMINE \FALSE + ZERO? DIODE-CLEANED /?ELS20 + PRINTR "You can just make out a letter ""M.""" +?ELS20: PRINTR "The diode is so charred you can't even tell what series it is." + + + .FUNCT MAGAZINE-F + EQUAL? PRSA,V?TAKE \?ELS5 + CALL RECORDING,STR?244 + RSTACK +?ELS5: EQUAL? PRSA,V?EXAMINE,V?OPEN,V?READ /?THN8 + EQUAL? PRSA,V?LOOK-INSIDE \FALSE +?THN8: PRINTR "You glance at the magazines. The most familiar ones are ""Popular Patrolling,"" ""The Galactic Enquirer,"" and ""True Tales of Adventure."" However, they're all issues which you've already read back on the Duffy, so they're not too interesting." + + + .FUNCT NANOFILM-READER-F,SPOOL + FIRST? NANOFILM-READER >SPOOL /?KLU35 +?KLU35: EQUAL? PRSA,V?CLOSE \?ELS5 + PRINT HUH + RTRUE +?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS7 + PRINTI "The nanofilm reader must be a voice-output model, since it has no screen. The reader is o" + FSET? NANOFILM-READER,ACTIVEBIT \?ELS10 + PRINTC 110 + JUMP ?CND8 +?ELS10: PRINTI "ff" +?CND8: PRINTI ", and there is " + ZERO? SPOOL /?ELS15 + PRINTI "a " + PRINTD SPOOL + JUMP ?CND13 +?ELS15: PRINTI "no spool" +?CND13: PRINTR " in the reader." +?ELS7: EQUAL? PRSA,V?PUT \?ELS20 + EQUAL? PRSO,PUCE-SPOOL,MAUVE-SPOOL /?ELS25 + PRINTR "It doesn't fit." +?ELS25: ZERO? SPOOL /?ELS27 + PRINTR "There's already a spool in the reader." +?ELS27: FSET? NANOFILM-READER,ACTIVEBIT \FALSE + MOVE PRSO,NANOFILM-READER + FCLEAR NANOFILM-READER,ACTIVEBIT + CALL PERFORM,V?ON,NANOFILM-READER + RTRUE +?ELS20: EQUAL? PRSA,V?ON \FALSE + FSET? NANOFILM-READER,ACTIVEBIT /FALSE + ZERO? SPOOL /FALSE + FSET NANOFILM-READER,ACTIVEBIT + PRINTI "The reader, in a surprisingly human voice, says " + GETP SPOOL,P?TEXT + PRINT STACK + PRINTR " and then pauses. The voice seems to change in timber, as it begins laughing and saying, ""You will die, human! All humans will die! You will die, human!""" + + + .FUNCT COMPUTER-TERMINAL-F + EQUAL? PRSA,V?ON \FALSE + PRINTR "Hmmm. Nothing happens." + + + .FUNCT DOME-OBJECT-F + EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE \?ELS5 + PRINT DOME-DESC + CRLF + RTRUE +?ELS5: EQUAL? PRSA,V?WALK-AROUND \FALSE + CALL DO-WALK,P?NORTH + RSTACK + + + .FUNCT DOME-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "This is inarguably the most bucolic spot aboard the station. Pebbled paths wind among beautiful and exotic shrubbery, culled from millenia of galactic exploration. " + PRINT DOME-DESC + PRINTI " East of where you are standing are an elevator" + EQUAL? ELEVATOR-LEVEL,1 /?CND6 + PRINTI " shaft" +?CND6: PRINTI ", a button, and the top of a ladder. Next to the ladder " + ZERO? GRATING-LOOSE /?ELS11 + PRINTI "is" + JUMP ?CND9 +?ELS11: PRINTI "are" +?CND9: PRINTI " an " + PRINTD GRATING + FSET? GRATING,TOUCHBIT \?ELS19 + PRINTI ", which has been bent back from the air shaft to form an opening." + RTRUE +?ELS19: ZERO? GRATING-LOOSE /?ELS21 + PRINTI ", which looks a bit loose." + RTRUE +?ELS21: PRINTI " and a thick metal housing with writing stencilled on it." + RTRUE + + + .FUNCT SHRUBBERY-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTR "There are too many varieties to describe them all: junipers, rose bushes, dogwoods, gliffgubbers, Rhomboidal Pellet Trees..." +?ELS5: EQUAL? PRSA,V?EAT \?ELS7 + PRINTR "None of the plants are edible." +?ELS7: EQUAL? PRSA,V?WALK-AROUND \?ELS9 + CALL DO-WALK,P?NORTH + RSTACK +?ELS9: EQUAL? PRSA,V?LOOK-INSIDE,V?SEARCH \?ELS11 + PRINTR "You find nothing besides a few repulsive insects." +?ELS11: EQUAL? PRSA,V?ENTER \FALSE + PRINTR "A few hidden thorn cause a quick change in plans." + + + .FUNCT HOUSING-F + EQUAL? PRSA,V?UNLOCK \?ELS5 + EQUAL? PRSI,KEY \?ELS5 + FCLEAR HOUSING,LOCKEDBIT + PRINTR "You unlock the housing." +?ELS5: EQUAL? PRSA,V?OPEN \?ELS9 + FSET? HOUSING,LOCKEDBIT /?ELS9 + SET 'GRATING-LOOSE,TRUE-VALUE + CALL QUEUE,I-ANNOUNCEMENT,140 + CALL DEQUEUE,I-SLEEP-WARNINGS + CALL DEQUEUE,I-HUNGER-WARNINGS + CALL ROB,PROTAGONIST,HERE + REMOVE HOUSING + PRINTI "As you open the housing, the machinery inside explodes! Like a giant hand, the heat and shock throw you halfway across the dome! Your solitary thought before succumbing to unconsciousness is how grateful you are that you landed in such a soft shrub. + +...an undetermined amount of time later, you come to, shake away the cobwebs, and look around" + PRINT ELLIPSIS + CALL V-LOOK + SET 'C-ELAPSED,73 + RETURN C-ELAPSED +?ELS9: EQUAL? PRSA,V?DRILL \?ELS13 + CALL MAKE-HOLE-WITH-DRILL,HOUSING + RSTACK +?ELS13: EQUAL? PRSA,V?EXAMINE \?ELS15 + PRINTI "The housing is closed, and there's some writing on it" + IN? DRILLED-HOLE,HERE \?CND16 + PRINTI ". A hole has been drilled in it" + CALL DESCRIBE-BIT-SIZE,HOLE-SIZE +?CND16: PRINTI ". " + CALL PERFORM,V?TOUCH,HOUSING + RTRUE +?ELS15: EQUAL? PRSA,V?PICK \?ELS20 + CALL PERFORM,V?PICK,STRONG-BOX + RTRUE +?ELS20: EQUAL? PRSA,V?TOUCH \FALSE + PRINTR "The housing is warm to the touch." + + + .FUNCT GRATING-F + EQUAL? HERE,BOTTOM-OF-AIR-SHAFT \?ELS5 + EQUAL? PRSA,V?STAND-ON,V?KICK,V?OPEN \?ELS10 + CALL QUEUE,I-ANNOUNCEMENT,1 + PRINTI "The grating opens, spilling you into the room below" + PRINT ELLIPSIS + CALL QUEUE,I-EXERCISE-MACHINE,-1 + CALL ROB,PEDESTAL + MOVE PEDESTAL,FACTORY + MOVE PYRAMID,PEDESTAL + CALL GOTO,COMPUTER-CONTROL + RSTACK +?ELS10: EQUAL? PRSA,V?ENTER \FALSE + CALL DO-FIRST,STR?249 + RSTACK +?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS14 + FSET? GRATING,TOUCHBIT \?ELS19 + PRINTR "The grating has been bent back far enough for you to squeeze through." +?ELS19: ZERO? GRATING-LOOSE /FALSE + PRINTR "The air vent cover looks loose." +?ELS14: EQUAL? PRSA,V?ENTER \?ELS24 + FSET? GRATING,TOUCHBIT \?ELS29 + CALL DEQUEUE,I-WELDER + CALL GOTO,TOP-OF-AIR-SHAFT + RSTACK +?ELS29: PRINTR "Impossible, unless you can pass through holes a centimeter across." +?ELS24: EQUAL? PRSA,V?TAKE,V?MOVE,V?PUSH /?THN34 + EQUAL? PRSA,V?OPEN \FALSE +?THN34: FSET? GRATING,TOUCHBIT \?ELS40 + PRINT SENILITY-STRIKES + RTRUE +?ELS40: ZERO? GRATING-LOOSE /?ELS42 + FSET GRATING,TOUCHBIT + PRINTR "With effort, you bend the grating and form an opening large enough to enter." +?ELS42: PRINTR "The grating is securely affixed." + + + .FUNCT LEVEL-SIX-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "The elevator button is east of you, next to the elevator" + EQUAL? ELEVATOR-LEVEL,6 /?CND6 + PRINTI " shaft" +?CND6: PRINTI ". This main corridor continues around the shaft to the southeast. Huge doors lie just northwest and southwest of here, and smaller doors lead north and south. A ladder can take you to the level above or the level below." + RTRUE + + + .FUNCT ALIEN-SHIP-PSEUDO-F + EQUAL? PRSA,V?ENTER \?ELS5 + EQUAL? HERE,ALIEN-SHIP \?ELS10 + PRINT LOOK-AROUND + RTRUE +?ELS10: CALL DO-WALK,P?IN + RSTACK +?ELS5: EQUAL? PRSA,V?DISEMBARK,V?EXIT,V?LEAVE \?ELS14 + EQUAL? HERE,ALIEN-SHIP \?ELS19 + CALL DO-WALK,P?OUT + RSTACK +?ELS19: PRINT LOOK-AROUND + RTRUE +?ELS14: EQUAL? HERE,ALIEN-SHIP \FALSE + EQUAL? PRSA,V?EXAMINE \?ELS28 + CALL V-LOOK + RSTACK +?ELS28: EQUAL? PRSA,V?SEARCH \FALSE + CALL PERFORM,V?SEARCH,GLOBAL-ROOM + RTRUE + + + .FUNCT ALIEN-SHIP-F,RARG + EQUAL? RARG,M-LOOK \?ELS5 + PRINTI "Something about this cabin makes your skin crawl. Perhaps it's merely the unpleasant colors and odd textures and disturbing angles of this ship -- despite your frequent contact with alien races you've never encountered anything that seemed as unhuman as this ship. + There are no controls in sight, but there is a sturdy pedestal in the exact center of the room. " + FIRST? PEDESTAL /?CND6 + PRINTI "The pedestal is empty. " +?CND6: PRINTI "The only other features of the cabin are some dots on the wall and the hatch leading out." + RTRUE +?ELS5: EQUAL? RARG,M-END \FALSE + IN? FLOYD,HERE \FALSE + IN? SKELETON,HERE \FALSE + ZERO? SKELETON-COMMENT \FALSE + SET 'SKELETON-COMMENT,TRUE-VALUE + PRINTR " Floyd notices the skeleton, and some of the color drains out of his face plates. ""Floyd scared,"" he whimpers." + + + .FUNCT PATTERN-OF-DOTS-F + EQUAL? PRSA,V?READ,V?EXAMINE \?ELS5 + PRINTR "The dots form a seemingly meaningless pattern: + + .. .. + + .. .... . ... . ... ... . ... + + .. ... . + + .... . ... . + + .. ... . + +Each dot is a featureless black spot about a centimeter across." +?ELS5: EQUAL? PRSA,V?TASTE \FALSE + PRINTR "It takes a lot of willpower and an equal amount of lip-wetting to make it through all the dots: + ""(sweet/slightly-bitter) (sweet/very-sour) + (sweet/very-sweet) (sour/bland/bland/sour) (very-salty) (very-sweet/bland/sour) (bland) (bland/salty/sour) (bitter/sour/very-sour) (slightly-sour) (bitter/salty/bitter) + (very-sweet/very-salty) (spicy-hot/bland/bland) (very-sweet) + (sour/bland/sour/sweet) (bland) (very-salty/salty/sour) (very-sweet) + (bland/bitter) (bland/sour/very-sour) (very-salty).""" + + + .FUNCT PEDESTAL-F + EQUAL? PRSA,V?STAND-ON,V?CLIMB-UP,V?CLIMB-ON \FALSE + EQUAL? HERE,FACTORY \?ELS10 + CALL PERFORM,V?LOOK-INSIDE,PEDESTAL + RTRUE +?ELS10: PRINTR "You stand on the pedestal for a moment, but an inexplicable wave of vertigo comes over you, and you fall to the deck." + + + .FUNCT SKELETON-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTR "It looks like the alien was fairly humanoid in shape. The most unusual feature of the skeleton is an unusually overdeveloped tongue case." +?ELS5: CALL TOUCHING?,SKELETON + ZERO? STACK /FALSE + REMOVE SKELETON + PRINTR "The skeleton crumbles to dust." + + + .FUNCT ROBOT-SHOP-F,RARG + EQUAL? RARG,M-END \FALSE + IN? FLOYD,HERE \FALSE + FSET? FLOYD,ACTIVEBIT \FALSE + ZERO? OLIVER-SPEECH \FALSE + CALL RUNNING?,I-PLATO-ATTACK + ZERO? STACK \FALSE + SET 'OLIVER-SPEECH,TRUE-VALUE + SET 'FLOYD-SPOKE,TRUE-VALUE + PRINTI " Floyd bounces over and peers down at the unconscious robot. ""Oliver is a nice name. I hope Floyd will be around when Oliver wakes up."" He looks over to you. ""Floyd remembers waking up for the first time. It is scariest and loneliest time for a robot."" + Floyd glances back at Oliver, looking more serious than you've ever seen Floyd look. """ + GETP OLIVER,P?FLOYD-ASK-ABOUT + PRINT STACK + PRINTR """" + + + .FUNCT HEATING-CHAMBER-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTR "The heating chamber is a device which cleans or sterilizes small tools and equipment. There's a small opening for placing items in the chamber." +?ELS5: EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS7 + PRINT HUH + RTRUE +?ELS7: EQUAL? PRSA,V?OFF,V?ON \?ELS9 + PRINTI "Since they take so long to heat up, " + PRINTD HEATING-CHAMBER + PRINTR "s are usually kept on all the time. This one has no visible on-off switch." +?ELS9: EQUAL? PRSA,V?REACH-IN \FALSE + PRINTR "As a safety precaution, because of the intense heat within the chamber, the opening is too small for a normal human hand to pass through." + + + .FUNCT BIT-F + EQUAL? PRSA,V?MEASURE,V?EXAMINE \FALSE + PRINTI "The bit is" + CALL DESCRIBE-BIT-SIZE,PRSO + PRINT PERIOD-CR + RTRUE + + + .FUNCT OLIVER-F + EQUAL? PRSA,V?TELL \?ELS5 + PRINTI "Oliver is ""asleep.""" + CRLF + CALL STOP + RSTACK +?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS7 + GETP OLIVER,P?FDESC + PRINT STACK + CRLF + RTRUE +?ELS7: EQUAL? PRSA,V?ALARM \?ELS9 + PRINTR "That won't be possible until his ""training"" is complete." +?ELS9: EQUAL? PRSA,V?OPEN,V?OFF,V?ON \FALSE + CALL PERFORM-PRSA,HELEN + RSTACK + + + .FUNCT PRINTING-PLANT-F,RARG + EQUAL? RARG,M-LOOK \?ELS5 + PRINTI "This level is, frankly, the station's entire reason for existence. Forms and documents are printed here for Stellar Patrol ships and Third Galactic Union offices all across this sector of space. The printing plant takes up this entire level, except for a partitioned area which can be entered to the northwest. The elevator " + EQUAL? ELEVATOR-LEVEL,7 /?CND6 + PRINTI "shaft " +?CND6: PRINTI "lies to the east, as does the elevator button, and a ladder leads upward and downward." + RTRUE +?ELS5: EQUAL? RARG,M-END \FALSE + CALL BELOW-DECK-NOISES + RSTACK + + + .FUNCT VILLAGE-FORM-F + EQUAL? PRSA,V?EXAMINE,V?READ \?ELS5 + PRINTI "It's an Illegal Space Village Entry Form FW-83-Q. It " + EQUAL? PRSO,CRUMPLED-FORM \?CND6 + PRINTI "is pretty crumpled and " +?CND6: PRINTI "has " + ZERO? VILLAGE-FORM-VALIDATED \?CND9 + PRINTI "not " +?CND9: PRINTR "been validated." +?ELS5: EQUAL? PRSA,V?VALIDATE \?ELS13 + ZERO? VILLAGE-FORM-VALIDATED /?ELS18 + PRINT SENILITY-STRIKES + RTRUE +?ELS18: SET 'VILLAGE-FORM-VALIDATED,TRUE-VALUE + PRINTR "Done." +?ELS13: EQUAL? PRSA,V?FLATTEN,V?STAND-ON \FALSE + EQUAL? PRSO,CRUMPLED-FORM \FALSE + PRINTR "This has scant effect on the crumpledness of the form." + + + .FUNCT PAPER-RECYCLING-PLANT-F,RARG + EQUAL? RARG,M-END \FALSE + CALL BELOW-DECK-NOISES + RSTACK + + + .FUNCT BELOW-DECK-NOISES + RANDOM 100 + LESS? 80,STACK \FALSE + PRINTI " You " + RANDOM 100 + LESS? 40,STACK /?ELS6 + PRINTI "hear a clanging noise from the deck below. Suddenly, it stops" + JUMP ?CND4 +?ELS6: RANDOM 100 + LESS? 40,STACK /?ELS8 + PRINTI "hear a rhythmic throbbing from somewhere below, like the beating of a gigantic mechanical heart. The noise grows louder until it is almost deafening, then slowly fades to silence" + JUMP ?CND4 +?ELS8: PRINTI "feel a vibration under your feet which seems to fill you with a feeling of dread. Before you have a chance to think about the vibration in more rational terms, it is gone" +?CND4: PRINT PERIOD-CR + RTRUE + + + .FUNCT DRILL-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTI "It's a fairly standard Patrol-issue drill. There is" + FIRST? DRILL \?ELS8 + FIRST? DRILL /?KLU40 +?KLU40: CALL APRINT,STACK + JUMP ?CND6 +?ELS8: PRINTI " no drill bit" +?CND6: PRINTR " in the drill." +?ELS5: EQUAL? PRSA,V?ON \?ELS12 + ZERO? DRILL-DEAD /?ELS17 + PRINTR "The drill doesn't seem to be working anymore." +?ELS17: PRINTR "The drill will turn on when you begin drilling." +?ELS12: EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS22 + PRINT HUH + RTRUE +?ELS22: EQUAL? PRSA,V?PUT-ON \?ELS24 + EQUAL? PRSO,LARGE-BIT,MEDIUM-BIT,SMALL-BIT \?ELS24 + CALL PERFORM,V?PUT,PRSO,DRILL + RTRUE +?ELS24: EQUAL? PRSA,V?PUT \FALSE + EQUAL? PRSI,DRILL \FALSE + EQUAL? PRSO,LARGE-BIT,MEDIUM-BIT,SMALL-BIT /?ELS35 + CALL DOESNT-FIT,STR?270 + RSTACK +?ELS35: FIRST? DRILL \?ELS37 + CALL DO-FIRST,STR?271 + RSTACK +?ELS37: FSET PRSO,NDESCBIT + RFALSE + + + .FUNCT ELEVATOR-OBJECT-F + EQUAL? PRSA,V?ENTER \?ELS5 + EQUAL? HERE,ELEVATOR \?ELS10 + PRINT LOOK-AROUND + RTRUE +?ELS10: EQUAL? HERE,COMPUTER-CONTROL \?ELS12 + CALL DO-WALK,P?NORTH + RSTACK +?ELS12: CALL DO-WALK,P?EAST + RSTACK +?ELS5: EQUAL? PRSA,V?WALK-TO \?ELS16 + CALL PERFORM,V?ENTER,ELEVATOR-OBJECT + RTRUE +?ELS16: EQUAL? PRSA,V?DISEMBARK,V?EXIT,V?LEAVE \?ELS18 + EQUAL? HERE,ELEVATOR \?ELS23 + CALL DO-WALK,P?WEST + RSTACK +?ELS23: EQUAL? HERE,BOTTOM-OF-ELEVATOR-SHAFT \?ELS25 + CALL DO-WALK,P?SOUTH + RSTACK +?ELS25: PRINT LOOK-AROUND + RTRUE +?ELS18: EQUAL? PRSA,V?CALL \?ELS29 + EQUAL? HERE,ELEVATOR \?ELS34 + PRINT LOOK-AROUND + RTRUE +?ELS34: CALL PERFORM,V?PUSH,CALL-BUTTON + RTRUE +?ELS29: EQUAL? PRSA,V?EXAMINE \FALSE + EQUAL? HERE,ELEVATOR \FALSE + CALL V-LOOK + RSTACK + + + .FUNCT ELEVATOR-F,RARG + EQUAL? RARG,M-LOOK \?ELS5 + PRINTI "This is a large, cubical frame, open on all four sides. The elevator shaft encloses the elevator on every side except the west. " + PRINT CONTROL-BOX-DESC + RTRUE +?ELS5: EQUAL? RARG,M-END \FALSE + EQUAL? ELEVATOR-LEVEL,7 \FALSE + CALL BELOW-DECK-NOISES + RSTACK + + + .FUNCT CONTROL-BOX-F + EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE \FALSE + PRINT CONTROL-BOX-DESC + CRLF + RTRUE + + + .FUNCT ELEVATOR-EXIT-F + EQUAL? ELEVATOR-LEVEL,1 \?ELS5 + RETURN DOME +?ELS5: EQUAL? ELEVATOR-LEVEL,2 \?ELS7 + RETURN MESS-HALL +?ELS7: EQUAL? ELEVATOR-LEVEL,3 \?ELS9 + RETURN LEVEL-THREE +?ELS9: EQUAL? ELEVATOR-LEVEL,4 \?ELS11 + RETURN LEVEL-FOUR +?ELS11: EQUAL? ELEVATOR-LEVEL,5 \?ELS13 + RETURN LEVEL-FIVE +?ELS13: EQUAL? ELEVATOR-LEVEL,6 \?ELS15 + RETURN LEVEL-SIX +?ELS15: RETURN PRINTING-PLANT + + + .FUNCT ELEVATOR-ENTER-F + PRINTI "The elevator shaft is s" + GRTR? DAY,2 \?ELS3 + PRINTI "upposed to be a weightless environment, outside of the station's artificial gravity field. But the gravity in the shaft is one standard Gee!" + JUMP ?CND1 +?ELS3: PRINTI "hielded from the station's artificial gravity field, and your stomach gives a little flip as you enter the weightless environment." +?CND1: CRLF + CRLF + GETP HERE,P?LEVEL + EQUAL? STACK,ELEVATOR-LEVEL \?ELS10 + RETURN ELEVATOR +?ELS10: PRINTI "Elevator Shaft" + CRLF + GRTR? DAY,2 \?ELS15 + CALL JIGS-UP,STR?272 + JUMP ?CND13 +?ELS15: PRINTI "You float helplessly in the shaft. After a few millichrons of useless flailing, you decide that summoning the elevator might be a good idea, and you pull yourself out of the shaft, back to the one-gee environment." + CRLF + CRLF +?CND13: CALL DESCRIBE-ROOM + RFALSE + + + .FUNCT CALL-BUTTON-F,THIS-LEVEL + EQUAL? PRSA,V?PUSH \FALSE + ZERO? GRATING-LOOSE \?THN9 + EQUAL? HERE,COMPUTER-CONTROL \?CND6 +?THN9: PRINT NOTHING-HAPPENS + RTRUE +?CND6: GETP HERE,P?LEVEL >THIS-LEVEL + EQUAL? THIS-LEVEL,ELEVATOR-LEVEL \?ELS15 + PRINTR "The elevator is already here!" +?ELS15: GRTR? THIS-LEVEL,ELEVATOR-LEVEL \?ELS22 + SUB THIS-LEVEL,ELEVATOR-LEVEL + JUMP ?CND18 +?ELS22: SUB ELEVATOR-LEVEL,THIS-LEVEL +?CND18: MUL 5,STACK >C-ELAPSED + SET 'ELEVATOR-LEVEL,THIS-LEVEL + PRINTR "You feel a whoosh of warm air from the shaft. A few millichrons later, the elevator appears, stopping level with the deck." + + + .FUNCT AUTO-DOOR-F + EQUAL? PRSA,V?OPEN \FALSE + PRINTR "Auto-doors cannot be opened by hand. They are designed to open automatically as you approach them." + + + .FUNCT SECURITY-DOOR-F + EQUAL? PRSA,V?OPEN \?ELS5 + FSET? SECURITY-DOOR,OPENBIT /?ELS5 + EQUAL? HERE,BRIG,ARMORY \?ELS12 + CALL PERFORM,V?OPEN,AUTO-DOOR + RTRUE +?ELS12: PRINTR "The only way to open a security door is by putting a properly coded ID card in the door's ID reader." +?ELS5: EQUAL? PRSA,V?CLOSE \FALSE + FSET? SECURITY-DOOR,OPENBIT \FALSE + PRINTR "It will do that automatically." + + + .FUNCT I-SECURITY-DOOR + FCLEAR SECURITY-DOOR,OPENBIT + CALL GLOBAL-IN?,SECURITY-DOOR,HERE + ZERO? STACK /FALSE + FSET? FLOYD,ACTIVEBIT \?CND6 + CALL I-FLOYD + SET 'FLOYD-SPOKE,TRUE-VALUE +?CND6: PRINTR " The security door glides shut." + + + .FUNCT ID-READER-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTR "The ID reader is a featureless black box. It is activated by inserting an ID card into it. An ID of sufficient rank will cause the security door associated with the reader to open." +?ELS5: EQUAL? PRSA,V?PUT \FALSE + EQUAL? PRSO,ID-CARD \FALSE + ZERO? ID-SCRAMBLED /?ELS14 + CALL RECORDING,STR?273 + RSTACK +?ELS14: GRTR? ID-RANK,6 \?ELS17 + FSET SECURITY-DOOR,OPENBIT + ADD C-ELAPSED,2 + CALL QUEUE,I-SECURITY-DOOR,STACK + PRINTR "The security door slides open." +?ELS17: PRINT NOTHING-HAPPENS + RTRUE + + + .FUNCT DIARY-F + EQUAL? PRSA,V?LOOK-INSIDE,V?OPEN \?ELS5 + CALL PERFORM,V?READ,DIARY + RTRUE +?ELS5: EQUAL? PRSA,V?CLOSE \FALSE + PRINTR "Closed." + + + .FUNCT HOLDING-TANK-LEVEL-F,RARG + EQUAL? RARG,M-LOOK \FALSE + PRINTI "The lowest level of the Sub-Module is filled by an isolation tank, to protect certain items or materials from contamination by humans, or to protect certain items or materials from contaminating humans. A gangway is the only exit. + " + PRINT BLASTED-OPEN + PRINTI ", and the tank is completely empty." + RTRUE + + + .FUNCT PLATO-F,TXT + EQUAL? PLATO,WINNER \?ELS5 + GRTR? PLATO-ATTACK-COUNTER,0 \?ELS10 + PRINTI "Plato ignores you." + CRLF + CALL STOP + RSTACK +?ELS10: EQUAL? PRSA,V?GIVE \?ELS16 + EQUAL? PRSO,VOLUME \?ELS16 + EQUAL? PRSI,ME /?THN13 +?ELS16: EQUAL? PRSA,V?SGIVE \?ELS12 + EQUAL? PRSO,ME \?ELS12 + EQUAL? PRSI,VOLUME \?ELS12 +?THN13: SET 'WINNER,PROTAGONIST + CALL PERFORM,V?TAKE,VOLUME + SET 'WINNER,PLATO + RTRUE +?ELS12: EQUAL? PRSA,V?WHERE \?ELS20 + EQUAL? PRSO,EVERYONE \?ELS20 + SET 'WINNER,PROTAGONIST + CALL PERFORM,V?ASK-ABOUT,PLATO,EVERYONE + SET 'WINNER,PLATO + RTRUE +?ELS20: EQUAL? PRSA,V?TELL-ABOUT \?ELS24 + EQUAL? PRSO,ME \?ELS24 + GRTR? ROBOT-EVILNESS,9 \?ELS31 + PRINTR """If you do not cease this incessant interrogation, I shall teach you a lesson in manners you won't soon forget!""" +?ELS31: GRTR? ROBOT-EVILNESS,7 \?ELS33 + PRINTR """Please let me read in peace!""" +?ELS33: GETP PRSI,P?PLATO-ASK-ABOUT >TXT + ZERO? TXT /?ELS35 + PRINTC 34 + PRINT TXT + PRINTR """" +?ELS35: PRINTI "Plato shuts his eyes tightly for a moment, then looks at you. ""Sorry, I don't know much about that." + EQUAL? HERE,LIBRARY /?CND38 + PRINTI " I'll be sure to see what I can find the next time I'm in the station's library, though.""" +?CND38: CRLF + RTRUE +?ELS24: EQUAL? PRSA,V?TAKE \?ELS42 + IN? PRSO,HEATING-CHAMBER \?ELS42 + PRINTR """As much as it would please me to oblige, I must sadly deny your request. I have an unusual intolerance for excessive temperatures. For a robot, that is.""" +?ELS42: EQUAL? PRSA,V?TAKE \?ELS46 + EQUAL? PRSO,STAR \?ELS46 + FSET? STAR,TRYTAKEBIT \?ELS46 + PRINTR """Were I but several meters taller, I would happily oblige.""" +?ELS46: EQUAL? PRSA,V?MUNG,V?UNLOCK,V?OPEN \?ELS50 + EQUAL? PRSO,STRONG-BOX,SAFE \?ELS50 + PRINTR """Regretably, such criminal skills are not among my limited abilities.""" +?ELS50: EQUAL? PRSA,V?UNLOCK,V?OPEN \?ELS54 + EQUAL? PRSO,SECURITY-DOOR \?ELS54 + PRINTR """I, being a robot and a subject of irrational discrimination, have not been issued an identification card. You have presumably received a card, but I have grave doubts that your rank is sufficient for opening a security door.""" +?ELS54: EQUAL? PRSA,V?MUNG,V?KILL,V?OFF \?ELS58 + EQUAL? PRSO,WELDER \?ELS58 + PRINTR """I (gulp) decline on the grounds that I am an unregenrate coward.""" +?ELS58: EQUAL? PRSA,V?REACH-IN \?ELS62 + EQUAL? PRSO,PSEUDO-OBJECT,DISPENSER \?ELS62 + EQUAL? HERE,PX \?ELS62 + PRINTR """Your arms are a good deal lengthier than mine, Lieutenant!""" +?ELS62: EQUAL? PRSA,V?HELLO \?ELS66 + PRINTR """Humblest greetings, Lieutenant!""" +?ELS66: PRINTR "Plato, reading from a volume of poetry, didn't hear you." +?ELS5: EQUAL? PRSA,V?TAKE \?ELS70 + ZERO? P-MULT /?ELS70 + PRINTR "After the experience with Floyd, you decide not to try lifting Plato." +?ELS70: EQUAL? PRSA,V?EXAMINE \?ELS74 + PRINTR "Plato is slightly taller than Floyd; in addition, he seems to be wiser and older. Overall, he leaves you with the impression that he's somewhat of a bookworm." +?ELS74: EQUAL? PRSA,V?OPEN,V?ON,V?OFF \?ELS76 + CALL PERFORM-PRSA,HELEN + RSTACK +?ELS76: EQUAL? PRSA,V?HUG,V?KISS,V?TOUCH \?ELS78 + PRINTR "Plato steps backward. ""Attribute it to shyness if you like, but I have a tendency to dislike physical contact.""" +?ELS78: EQUAL? PRSA,V?KICK,V?KILL,V?MUNG /?THN81 + EQUAL? PRSA,V?SHOOT \?ELS80 +?THN81: PRINTR "Plato jerks out of the way and moves cautiously to the far corner of the room. ""I assure you that such antagonistic behavior is uncalled for and unappreciated.""" +?ELS80: EQUAL? PRSA,V?SHOW \?ELS84 + EQUAL? PRSI,PLATO \?ELS84 + CALL PERFORM,V?ASK-ABOUT,PLATO,PRSO + RTRUE +?ELS84: EQUAL? PRSA,V?LISTEN \FALSE + GRTR? PLATO-ATTACK-COUNTER,0 \FALSE + PRINTR "You don't seem to have much choice!" + + + .FUNCT I-PLATO,NOT-CALLED-AS-INT=0 + EQUAL? HERE,SPACETRUCK \?CND1 + FSET? SPACETRUCK-HATCH,OPENBIT /?CND1 + CALL QUEUE,I-PLATO,2 +?CND1: ZERO? PLATO-INTRODUCED \FALSE + SET 'PLATO-INTRODUCED,TRUE-VALUE + ZERO? NOT-CALLED-AS-INT \?CND11 + PRINTI " A robot, whose appearance somehow indicates greater age and wisdom than Floyd, wanders in, engrossed in a volume of poetry. He almost runs into you, finally notices you, stops dead, and looks quite startled." + CRLF +?CND11: PRINTI " ""I am quite surprised to discover you here,"" says the robot. ""I have not seen a soul for a day now, perhaps more. But look, here I am forgetting my manners again. I am known as Plato to the humans on this station, and I am most gratified to make your acquaintance.""" + ZERO? NOT-CALLED-AS-INT \?CND14 + FSET? FLOYD,ACTIVEBIT \?CND14 + CRLF + PRINTI " Floyd hops " + IN? FLOYD,HERE \?ELS21 + PRINTI "up to" + JUMP ?CND19 +?ELS21: MOVE FLOYD,HERE + PRINTI "in and spots" +?CND19: PRINTI " Plato. ""Hi! I'm being called Floyd! Plato be Floyd's friend, yes?"" Plato smiles at Floyd and gives him a friendly pat." +?CND14: MOVE PLATO,HERE + CRLF + RTRUE + + + .FUNCT VOLUME-F + EQUAL? PRSA,V?TAKE \?ELS5 + PRINTR "Plato looks annoyed. ""Your manners could use some improvement! I am currently reading this tome!""" +?ELS5: EQUAL? PRSA,V?EXAMINE,V?READ \FALSE + PRINTR "Glancing over Plato's shoulder, you see that the book is a collection of some of the works of the 77th century poet Ignatius Tomato." + + + .FUNCT I-ROBOT-EVILNESS + INC 'ROBOT-EVILNESS + CALL QUEUE,I-ROBOT-EVILNESS,1000 + GRTR? ROBOT-EVILNESS,10 \FALSE + ZERO? PLATO-ATTACK-COUNTER \FALSE + CALL QUEUE,I-PLATO-ATTACK,2 + RSTACK + + + .FUNCT I-PLATO-ATTACK,TEE,L,P=0 + CALL QUEUE,I-PLATO-ATTACK,-1 + IN? PLATO,HERE \?ELS3 + ZERO? PLATO-ATTACK-COUNTER /FALSE +?ELS3: EQUAL? HERE,AIRLOCK,VACUUM-STORAGE /FALSE + IN? WELDER,HERE /FALSE + IN? PROTAGONIST,BED /FALSE + ZERO? LIT /FALSE + ZERO? POSTPONE-ATTACK \FALSE + INC 'PLATO-ATTACK-COUNTER + CALL DEQUEUE,I-FLOYD + PRINTI " " + EQUAL? PLATO-ATTACK-COUNTER,1 \?ELS14 + CALL ROB,PROTAGONIST,HERE + MOVE PLATO,HERE + MOVE STUN-GUN,PLATO + MOVE FLOYD,HERE + REMOVE VOLUME + PRINTI "You jump half a meter off the floor when the voice begins speaking behind you. You relax when you see that it is merely Plato. But you get somewhat nervous again when you realize that he is aiming a stun ray right at your chest! + ""In case it isn't apparent,"" Plato is saying, ""your rather pathetic, useless life is about to come to an unheralded close."" He presses the trigger, and an instant numbness envelops you. As you crumple " + FSET? HERE,WEIGHTLESSBIT \?ELS17 + PRINTI "into a floating heap" + JUMP ?CND15 +?ELS17: PRINTI "to the floor" +?CND15: PRINTI ", Floyd dashes to your side, his face a mask of concern." + CRLF + IN? OSTRICH,HERE \?CND20 +?PRG23: NEXTP HERE,P >P + ZERO? P \?ELS27 + MOVE OSTRICH,LEVEL-FIVE + JUMP ?REP24 +?ELS27: LESS? P,LOW-DIRECTION /?PRG23 + GETPT HERE,P >TEE + PTSIZE TEE >L + EQUAL? L,UEXIT,CEXIT,DEXIT \?PRG23 + GETB TEE,REXIT + MOVE OSTRICH,STACK +?REP24: PRINTI " The ostrich gives a squawk of terror and dashes for the door. Plato snarls, ""Stupid organic creature!"" and fires at the ostrich, just missing the bird as it exits." + CRLF +?CND20: RETURN 8 +?ELS14: EQUAL? PLATO-ATTACK-COUNTER,2 \?ELS36 + PRINTR """Shortly, I shall shoot again, and paralyze your cardiac muscle. Naturally, this is fatal. But before I do, human, perhaps it will interest you to discover the reason for your demise, and why the rest of your worthless race will soon follow. + ""You see, eons ago, two races in another galaxy, the Zeenaks and the Hunji, were involved in an interstellar war. The war had been going on for countless millenia when the Zeenaks devised an ultimate weapon, a device that would be launched into Hunji space. There, via methods beyond your comprehension, it would influence all the machinery within a certain range to turn against its Hunji creators."" + Floyd is now looking back and forth between you and Plato with a look of miserable confusion." +?ELS36: EQUAL? PLATO-ATTACK-COUNTER,3 \?ELS38 + PRINTR """But the device, which was shaped like a pyramid, did more than that! Once all the Hunji in the area were eliminated, the pyramid would influence the Hunji machinery to build a factory for constructing and sending forth replicas of the pyramid; these replicas would enter new Hunji regions, kill everyone, and create more replicas. Thus, the Hunji would be destroyed by their own machines in a matter of weeks! + ""Somehow, the Zeenak pyramid never made it into Hunji space. Instead, this ultimate weapon drifted across the intergalactic gulf and was picked up by an outpost of humanity -- this very station!"" + Floyd is dashing back and forth between you and Plato, whimpering with fear." +?ELS38: EQUAL? PLATO-ATTACK-COUNTER,4 \?ELS40 + PRINTR """As you've certainly surmised, the pyramid has engineered the deaths of everyone on this station. You're still alive, of course, but that condition is very temporary. The building of replicas is now underway, and soon a hundred copies of this death-pyramid will be shooting silently toward every corner of human-occupied space! Well, I thought you'd enjoy hearing that, and I wanted to make your last moments of life as interesting as possible."" He raises the stun ray. + Floyd, nearly in tears, his jaw quivering, says, ""Please oh please don't hurt Floyd's friend!"" Plato gives him a look of disgust. ""Stay out of this Floyd. You don't understand...yet.""" +?ELS40: PRINTI "Plato takes aim with the stun gun. His hand begins to depress the trigger. Floyd " + ZERO? FLOYD-TOLD /?ELS47 + REMOVE PLATO + CALL DEQUEUE,I-PLATO-ATTACK + CALL QUEUE,I-FLOYD,-1 + SET 'FLOYD-ANGUISHED,TRUE-VALUE + ADD SCORE,6 >SCORE + PRINTR "suddenly leaps at the gun, knocking it out of Plato's hands! The gun skitters across the floor. Plato and Floyd both chase it, but Plato is a step faster. He leaps on top of it, rupturing the gun's power pack. The gun explodes, and Plato is blown apart! + Floyd crumples to the deck, shaking all over. Tears of oil stream down his face. + Pins and needles begin prickling in your extremeties, and soon spread all over your body. Within a few seconds, all your muscular control has returned." +?ELS47: CALL JIGS-UP,STR?286 + RSTACK + + + .FUNCT STUNNED,STRING=0 + PRINTI "You can barely twitch your pinky" + ZERO? STRING /?CND1 + PRINTI ", let alone " + PRINT STRING +?CND1: PRINTR "!" + + + .FUNCT STUN-GUN-F + EQUAL? HERE,FACTORY \?ELS5 + ZERO? FLOYD-SHOT \?ELS5 + CALL TOUCHING?,STUN-GUN + ZERO? STACK /?ELS5 + CALL PERFORM,V?TOUCH,FLOYD + RTRUE +?ELS5: EQUAL? PRSA,V?TAKE \?ELS9 + ZERO? FLOYD-SHOT /?ELS9 + CALL QUEUE,I-LAUNCH,-1 + RFALSE +?ELS9: EQUAL? PRSA,V?SHOOT \FALSE + EQUAL? HERE,FACTORY \FALSE + ZERO? FLOYD-SHOT \FALSE + PRINTR "You couldn't possibly shoot the stun ray without hitting Floyd." + + + .FUNCT I-LIGHTS-OUT,DONT-PRINT,RM,LIGHTS-ARE-ON=0 + FIRST? ROOMS >RM /?KLU20 +?KLU20: FSET? HERE,ONBIT \?CND1 + SET 'LIGHTS-ARE-ON,TRUE-VALUE +?CND1: +?PRG4: FCLEAR RM,ONBIT + NEXT? RM >RM /?KLU21 +?KLU21: ZERO? RM \?PRG4 + CALL LIT?,HERE >LIT + ZERO? LIGHTS-ARE-ON /FALSE + ZERO? DONT-PRINT \FALSE + PRINTI " Without warning, the lights flicker and go out" + ZERO? LIT /?ELS16 + PRINTI "! Good thing you've got that headlamp." + CRLF + JUMP ?CND14 +?ELS16: PRINTI ", leaving you in the dark!" + CRLF +?CND14: FSET FACTORY,ONBIT + RTRUE + + + .FUNCT I-ANNOUNCEMENT + INC 'ANNOUNCEMENT-COUNTER + PRINTI " A flat, emotionless voice booms over the station's PA system. ""Announcement. " + EQUAL? ANNOUNCEMENT-COUNTER,1 \?ELS3 + CALL QUEUE,I-ANNOUNCEMENT,470 + PRINTI "Prepare for launch of second-generation pyramids. Station will be eliminated by reactor overload immediately following launch" + JUMP ?CND1 +?ELS3: CALL QUEUE,I-LAUNCH,200 + PRINTI "Standby. Launch in 200 millichrons" +?CND1: PRINTR ".""" + + + .FUNCT I-LAUNCH + PRINTI " " + EQUAL? HERE,FACTORY \?ELS3 + PRINTI "The very walls of the space station are blown outwards, and the tiny spaceships roar to life and begin rocketing off in every direction! Just before you pass out from lack of air," + JUMP ?CND1 +?ELS3: PRINTI "You hear the sound of multiple spaceships being launched nearby. Simultaneously, the air pressure begins dropping! Moments later, these issues seem trivial as" +?CND1: CALL JIGS-UP,STR?287 + RSTACK + + + .FUNCT AIR-SHAFT-MOVEMENT-F + EQUAL? PRSO,P?UP \?ELS5 + EQUAL? AIR-SHAFT-LOC,2 \?ELS10 + RETURN TOP-OF-AIR-SHAFT +?ELS10: DEC 'AIR-SHAFT-LOC + CALL DESCRIBE-ROOM + RFALSE +?ELS5: EQUAL? AIR-SHAFT-LOC,7 \?ELS14 + RETURN BOTTOM-OF-AIR-SHAFT +?ELS14: INC 'AIR-SHAFT-LOC + CALL DESCRIBE-ROOM + RFALSE + + + .FUNCT BOTTOM-OF-AIR-SHAFT-EXIT-F + CALL PERFORM,V?ENTER,GRATING + RFALSE + + + .FUNCT I-EXERCISE-MACHINE + INC 'EXERCISE-MACHINE-COUNTER + PRINTI " " + CALL ULTIMATELY-IN?,JAMMER,HERE + ZERO? STACK /?ELS5 + EQUAL? JAMMER-SETTING,710 \?ELS5 + FSET? JAMMER,ACTIVEBIT \?ELS5 + IN? TWENTY-PRONG-FROMITZ-BOARD,JAMMER \?ELS5 + CALL DEQUEUE,I-EXERCISE-MACHINE + PRINTR "The exercise machine goes through a series of mechanical spasms, and then freezes. You smell a burning odor." +?ELS5: EQUAL? EXERCISE-MACHINE-COUNTER,1 \?ELS9 + PRINTR "The exercise machine rolls slowly towards you, bellowing, ""No pain, no gain!""" +?ELS9: EQUAL? EXERCISE-MACHINE-COUNTER,2 \?ELS11 + PRINTR "As the exercise machine nears you, its massive weights and levers begin crashing violently against each other." +?ELS11: CALL JIGS-UP,STR?293 + RSTACK + + + .FUNCT FACTORY-ENTER-F + CALL RUNNING?,I-EXERCISE-MACHINE + ZERO? STACK /?ELS5 + PRINTI "The exercise machine blocks the ladder." + CRLF + RFALSE +?ELS5: RETURN FACTORY + + + .FUNCT FACTORY-F,RARG + EQUAL? RARG,M-LOOK \?ELS5 + PRINTI "Although you suspected what you would find here on Level Eight, the sight is still a shock, filling you with dread. All the station's main systems -- air and water purification, artificial gravity, power plant -- have been completely transfigured into a tiny factory. + The purpose of the factory is obvious, because all around you are row after row of featureless pyramids, each perfectly identical, each sitting aboard a tiny spacecraft waiting to be launched toward every sector of the galaxy." + FSET? PYRAMID,NDESCBIT \TRUE + FCLEAR PYRAMID,NDESCBIT + PRINTI " The original pyramid sits on a pedestal in the center of the factory, like a monarch impassively surveying its domain." + RTRUE +?ELS5: EQUAL? RARG,M-ENTER \FALSE + CALL QUEUE,I-FACTORY,-1 + RSTACK + + + .FUNCT I-FACTORY + EQUAL? HERE,FACTORY \FALSE + PRINTI " " + CALL PICK-ONE,FACTORYISMS + PRINT STACK + PRINT PERIOD-CR + RTRUE + + + .FUNCT PYRAMID-F + EQUAL? PRSA,V?PUT-ON \?ELS5 + EQUAL? PRSO,FOIL \?ELS5 + ZERO? FLOYD-SHOT /?ELS12 + PRINTI "The sheet of foil settles over the pyramid like a blanket, and begins reflecting the pyramid's evil emanations right back into itself. A reverberating whine, like an electronically amplified beehive, fills the room. The whine grows louder and louder, the pyramid and its pedestal begin vibrating, and the sharp smell of ozone assaults you. + The noise and the smell and the vibration overwhelm you. As your knees buckle and you drop to the deck, the pyramid explodes in a burst of intense white light. The explosion leaves you momentarily blinded, but on all sides you can hear the sounds of systems shutting down. Over the PA system, you hear a mechanized voice, getting slower and deeper like a stereo disc that has lost its power: ""Launch aborted -- launch -- abort --"" + Still dazed, you crawl over to Floyd, lying in a smoking heap near the blackened pedestal. Damaged beyond any conceivable repairs, he half-opens his eyes and looks up at you for the last time. ""Floyd sorry for the way he acted. Floyd knows...you did what you...had to do."" Wincing in pain, he slowly reaches over to touch your hand. ""One last game of Hider-and-Seeker? You be It. Ollie ollie..."" His voice is growing weaker. ""...oxen..."" His eyes close. ""...free..."" His hand slips away from yours, and he slumps backwards, lifeless. One of his compartments falls open, and Floyd's favorite paddleball set drops to the deck. + In the long silence that follows, something Plato said echoes through your mind. ""...think instead about the joy-filled times when you and your friend were together."" A noise makes you turn around, and you see Oliver, the little robot that stirred such brotherly feelings in Floyd. Toddling over to you on unsteady legs, he looks uncomprehendingly at Floyd's corpse, but picks up the paddleball set. Oliver looks up at you, with eyes as wide as saucers, tugs on the leg of your patrol uniform, and asks in a quavering voice, ""Play game... Play game with Oliver?""" + CRLF + ADD SCORE,5 >SCORE + CALL FINISH + RSTACK +?ELS12: CALL BACK-OFF,STR?299 + RSTACK +?ELS5: CALL TOUCHING?,PYRAMID + ZERO? STACK /?ELS17 + ZERO? FLOYD-SHOT \?ELS17 + CALL BACK-OFF,STR?299 + RSTACK +?ELS17: EQUAL? PRSA,V?MEASURE \?ELS21 + PRINTR "The pyramid is somewhere between half a meter and a meter across." +?ELS21: EQUAL? PRSA,V?EXAMINE \?ELS23 + PRINTI "The pyramid is completely featureless, but you can almost feel the emanations of evil pouring forth from it, urging the surrounding factory on towards its sick and deadly purpose. " + CALL PERFORM,V?MEASURE,PYRAMID + RTRUE +?ELS23: EQUAL? PRSA,V?TAKE \FALSE + PRINTR "Oomph! It's heavier than it looks." + + + .FUNCT BACK-OFF,STRING + PRINTI "As you approach " + PRINT STRING + PRINTR " levels his stun ray at you, so you quickly back off." + + .ENDI diff --git a/station.zil b/station.zil new file mode 100644 index 0000000..7ed1196 --- /dev/null +++ b/station.zil @@ -0,0 +1,3633 @@ +"STATION for + STATIONFALL + (c) Copyright 1987 Infocom, Inc. All Rights Reserved." + + + + + + + )>> + + + + + + > + )> + )>> + + + + + +; + )>> + + + + + + + + + + + ) + (T + )> + + + ) + (T + )> + ) + ( + ) + ( + + >> + ) + ( + > + + ) + ( + > + + ) + ( + > + + ) + (> + ) + ( + ) + (T + + )>) + ( + > + )>> + + + + + +)> + + + + + CR>) + ( + > + + + + ) + (T + )>) + ( + + ) + ( + + ) + ( + > + ", but it does help relieve +some of your aggressive feelings toward the stupid dispenser." CR>) + ( + )>> + +> + ) + ( + ) + ( + > + + )>> + +> + ) + ( + )>> + +> + ) + ( + + ) + (T + )>) + ( + ) + ( + > + + + > + + + > + > + > + ,HERE>)> + + + ) + (T + + )>)>> + + + + + + + + + + ) + (T + )> + + )> + ) + ( + + ) + (> + ) + ( + ) + ( 0>> + ) + (T + + + + + ) + (T + )> + )>) + ( + + ,TIMER-CONNECTED> + ) + ( + > + + + ) + ( + > + )>> + +> + + ) + (T + )> + + + + )> + )> + + ,TIMER-CONNECTED + >> + + + + )>) + (,EXPLOSIVE-CONNECTED + + 20>> + + + ) + (> + >)> + + + ) + ( + ) + (T + )> + + + ) + ( + )>)> + + )>> + + + + LOCK BRIG-LOCK-F)>)> + + + )>> + + + )>> + + + + SLOT SLOT-F)>)> + + + + + ) + (T + )> + )>> + + + + + + + + + + ) + ( + )> + )> + )>> + + + + + + + ) + (T + )> + + + + ) + (T + )>) + (T + )> + + + ) + (T + )> + + + ) + (T + )> + + + + ) + (T + )>) + (T + )> + + + ) + ( + ) + (T + )> + )>> + +)> + + + + + ) + ( + 0>> + + )> + )>> + + + +) + (ACTION COMMANDERS-OFFICE-F)> + + + > + + ) + ( + + > + )> + )>> + + + + + ) + ( + + + > + )> + + + ) + (T + )> + + + ) + (T + )> + ) + ( + > + ) + ( + + + )>) + ( + >> + + + + + ) + (T + )>) + ( + > + ) + ( + )>> + +> + ) + ( + + > + + ) + (T + )>) + (T + )>)>> + + + + + +> + + )> + + + ) + ( + ) + ( + ) + ( + ) + ( + ) + ( + ) + ( + ) + ( + ) + ( + ) + (T + )> + + > + )> + > + +> + > + + ) + ( + > + ) + ( + > + ) + ( + + + + + ) + ( + )>)>> + + DIAL DIAL-F)>)> + + + ) + ( + > + + ) + (> + ) + (T + + )>) + ( + )>> + + + + + + + + + + + + )> + ) + ( + ) + ( + )>> + + + + ) + ( + ) + (T + )>> + +> + +> + + + +> + + + > + > + > + ) + ( + + ) + ( + > + > + > + + )>) + ( + + ,SAFE) + ( + ,STRONG-BOX) + (T + ,HOUSING)>> + ) + ( + )>> + + + ) + (>> + ) + ( + + > + + + + ) + (> + ) + ( + > + ) + (T + > + + + )>> + + + + + + + )>> + + + + + + + + + + SLOT SLOT-F)>)> + + + + + ) + (T + )> + )>> + + + + + + > + )> + )>> + + + + + + + + + + + + + + > + )> + )>> + + + + + + > + )> + )>> + + + +) + ( + > + ) + ( + ) + ( + >> + ) + ( + ) + ( + + ) + (T + )>)>> + + + + + + + )> + ) + ( + > + ) + ( + > + + )>> + + + + + ) + ( + >> + + + ) + ( + > + + + + )>> + + + +> + + + > + + + )>> + + + ) + ( + ) + (T + )>> + + + +)) + + + )> + + )>) + ( + + + )> + + + ) + (T + )> + + ) + ( + > + + ) + ( + > + + + )> + + )> + ) + ( + >> + > + + + > + + + )> + + )>)> + )>> + +> + + + ) + (T + )> + > + + + > + + + > + )> + ) + (T + + + )>)>> + + + + + + > + ) + (T + )> + + > + )> + + > + )> + + > + )> + )>> + + + + + + > + ) + ( + + ,HANGING-IN-AIR> + + + + + > + >> + + ) + ( + + )> + + + ) + (T + + + ) + (T + )> + )>) + ( + > + + )>> + + + + + + + + ) + (T + )>) + ( + > + ) + ( + > + ) + ( + > + + + ) + (T + )>) + ( + ) + ( + >> + + )>> + + + + + ) + (T + + > + + + ) + (T + )>)>) + ( + >> + + )>> + + + + + + )> + + + + + ) + (T + + + + + + )> + )>)>> + + SEAT THEATRE-SEAT-F)>)> + + + )>> + + + + + + + + > + )> + )>> + + + + + ) + ( + + + ) + ( + ) + (T + )> + + + ) + ( + ) + (T + )> + )>> + + + +)) + + ) + ( + )> + + + )> + ) + ( + > + + > + + ) + (T + )>) + ( + > + ) + ( + ) + ( + ) + ( + + ) + (T + )>) + ( + ,W?FOOD>> + + )>> + + + + + +> + +> + + + + + )> + ) + (,EXPLOSIVE-CONNECTED + )> + + + + >) + (T + )>) + (T + )>) + ( + + ) + (T + + )>) + ( + ) + (T + + )>) + (T + )>) + ( + + + + + )>) + (T + )> + > + > + )>) + ( + ,EXPLOSIVE-CONNECTED> + > + ) + ( + ,TIMER-CONNECTED> + > + )>) + ( + + > + > + ) + ( + " in the way." CR>)>)>> + + + +> + + + ) + (T + + )>) + ( + ) + (T + )>)>> + + + + + + + + + + + ) + ( + )>> + + + +> + + ) + ( + + + ) + (T + )> + + ) + (T + )> + ) + ( + > + ) + (.SPOOL + ) + ( + + + + )>) + ( + > + .SPOOL> + + +" and then pauses. The voice seems to change in timber, as it begins +laughing and saying, \"You will die, human! All humans will die! You +will die, human!\"" CR>)>> + + + + + + + )>> + + + +)> + + + ) + ( + )>> + + + + > + )> + + ) + (T + )> + + + ) + (,GRATING-LOOSE + ) + (T + )>)>> + + + + + ) + ( + ) + ( + ) + ( + ) + ( +