commit 18809a2b43fd14b7fc2c9977b5f2c4424a4c8fe5 Author: historicalsource Date: Sat Apr 13 22:34:27 2019 -0400 Revision 15 (Original Source) diff --git a/README.md b/README.md new file mode 100644 index 0000000..eab5609 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# seastalker diff --git a/atari.errors b/atari.errors new file mode 100644 index 0000000..4f8aa35 --- /dev/null +++ b/atari.errors @@ -0,0 +1,26 @@ +Assembling J1.XZAP.8 + + +Inserting J1FREQ.XZAP.7 ( 620 bytes) +Inserting J1DAT.ZAP.2 (22305 bytes) +Inserting MACROS.ZAP.2 ( 104 bytes) +Inserting MAIN.ZAP.2 ( 2259 bytes) +Inserting CLOCK.ZAP.2 ( 186 bytes) +Inserting SUB.ZAP.4 (16333 bytes) +Inserting BATTLE.ZAP.2 ( 5651 bytes) +Inserting DOME.ZAP.3 ( 9902 bytes) +Inserting PLACES.ZAP.2 ( 4753 bytes) +Inserting PEOPLE.ZAP.3 (15561 bytes) +Inserting THINGS.ZAP.2 ( 2058 bytes) +Inserting GLOBAL.ZAP.2 ( 5836 bytes) +Inserting PARSER.ZAP.2 ( 5735 bytes) +Inserting SYNTAX.ZAP.3 ( 778 bytes) +Inserting VERBS.ZAP.3 (15666 bytes) +Inserting EVENTS.ZAP.2 ( 7364 bytes) +Inserting J1STR.ZAP.1 ( 2553 bytes) +25538 bytes of preload. + +117728 bytes (115K). +32736 bytes too large for one-disk game on ATARI. +255 objects. +239 globals. diff --git a/atari.xzap b/atari.xzap new file mode 100644 index 0000000..d819467 --- /dev/null +++ b/atari.xzap @@ -0,0 +1,19 @@ + .INSERT "J1FREQ" + .INSERT "J1DAT" + .INSERT "MACROS" + .INSERT "MAIN" + .INSERT "CLOCK" +ENDLOD:: + .INSERT "SUB" + .INSERT "BATTLE" + .INSERT "DOME" + .INSERT "PLACES" + .INSERT "PEOPLE" + .INSERT "THINGS" + .INSERT "GLOBAL" + .INSERT "PARSER" + .INSERT "SYNTAX" + .INSERT "VERBS" + .INSERT "EVENTS" + .INSERT "J1STR" + .END diff --git a/atari.zip b/atari.zip new file mode 100644 index 0000000..9c3ce3b Binary files /dev/null and b/atari.zip differ diff --git a/battle.zil b/battle.zil new file mode 100644 index 0000000..3e1e7be --- /dev/null +++ b/battle.zil @@ -0,0 +1,639 @@ +"BATTLE for SEASTALKER +Copyright (C) 1984 Infocom, Inc. All rights reserved." + +> + "position" + + "motion" + + "heading" + + "position" + + "heading" + +> + +) + (T + + >)>> + +> + <* ,THORPE-HLON <- .Y ,THORPE-LAT>>>>> + ) + (T )>> + +> + <* ,THORPE-HLAT <- ,THORPE-LAT .Y>>>>> + ) + (T )>> + +> + ) + (> + <==? .LON <- ,THORPE-LON ,THORPE-HLON>>> + ) + ( + <==? .LON ,THORPE-LON>> + )>> + + + >> + +> + ) + ( <==? .LON ,SNARK-LON>> + )>> + +> + ) + (,SNARK-TRANKED + + ) + (T + + )> + > + > + <==? .LON .X>> + )> + > + > + <==? .LON .X>> + )> + > + <==? .LON <- .X .HLON>>> + )>> + + + + + + ) + ( ) + ( + %) + ( )>> + +> + +> + > + <0? ,THORPE-DLAT>> + > + + + ) + (<==? -1 .Z> + ) + (<==? +1 .Z> + ) + (T >)>) + (T + + >) + (<==? -1 .Z> + ) + (<==? +1 .Z> + ) + (T )>)>) + (T )> + ;)>) + (T + % + )>)> + > + > + ;)> + > + + + > + >) + (T + > + >)>) + (<==? -1 .Z> + > + ) + (<==? +1 .Z> + > + )> + > + +> +> +> + <>>> + <>>> + + + +> + + ) + ( + + + + > + + >>> + ) + ;( + + >> + )>> + +> + +) (SOMEONE <>)) + ; + ) + ( T) + ( T) + ( )> + + )> + >> + )> + .NOT-ON-SUB> + % + )> + + > + >> + + + )>) + ( + + + + )>)>) + ( + > ) + (> T)> + + >> + + ) + (> + + )>)> + + >> + % + ) + (T + + > + )>)> + + + + )> + ) + (T + + + + )>) + ( + ) + (T + + >> + %) + (T + )> + > + )> + )>)>) + (T + + %) + ( > + %) + ( ) + ;(,SUB-IN-DOME ;> + %) + ( + %) + ( + + + ) + ( + > + + ) + (T + )> + + + )>) + ( + + + ) + (T )> + ;> + "] ">)> + %) + ( + > + + % + ) + ( + % + )> + ; )> + + >> + + >>> + % + )> + + ,THORPE-LON> + <==? ,THORPE-LAT>> + + ) + (T + %)>) + (T + + )>) + ( + ,SNARK-LON> + <==? ,SNARK-LAT>> + + + + + + % + + ) + (T %)>) + (T + + )>) + ;(T )>)>)>> + + + + % + + )>> + % + >> + + )> + + + % + > + +> )> + + ; ) + (T )>> + + + + + >> + + )> + ) + (<==? .OBJ ,DART> + + + ) + ( + + + ) + (T )>) + (T )> + ) + (,SUB-IN-DOME ) + (T )> + + + > + + + ) + ( + )> + + % "ask") (T "shout")> + "s anxiously."> + > )> + % + + > + + + +> + + + + >> + > + + % + + )>) + (T + + + > + + % + + % + % + + + + % + > + ) + (T )> + % + > ) + (T )> + % + + + )>> + + > + + + >> + > + > + + + % + + )>> + +> + )> + + + > + + %)> + % + > + + )> + + % + + )>> + % + + )> + %> + % + + % + + %) + (T )>)> + > + + + )> + > + + + + + + + + + + % + + + > + + %)> + > + > diff --git a/clock.zap b/clock.zap new file mode 100644 index 0000000..9c38185 --- /dev/null +++ b/clock.zap @@ -0,0 +1,57 @@ + + + .FUNCT QUEUE,RTN,TICK,CINT + CALL INT,RTN >CINT + PUT CINT,C-TICK,TICK + RETURN CINT + + + .FUNCT INT,RTN,DEMON=0,E,C,INT + ADD C-TABLE,C-TABLELEN >E + ADD C-TABLE,C-INTS >C +?PRG1: EQUAL? C,E \?ELS5 + SUB C-INTS,C-INTLEN >C-INTS + ZERO? DEMON /?ELS7 + SUB C-DEMONS,C-INTLEN >C-DEMONS +?ELS7: ADD C-TABLE,C-INTS >INT + PUT INT,C-RTN,RTN + RETURN INT +?ELS5: GET C,C-RTN + EQUAL? STACK,RTN \?CND3 + RETURN C +?CND3: ADD C,C-INTLEN >C + JUMP ?PRG1 + + + .FUNCT CLOCKER,C,E,TICK,FLG=0,VAL + ZERO? CLOCK-WAIT /?CND1 + SET 'CLOCK-WAIT,0 + RFALSE +?CND1: ZERO? P-WON /?ELS9 + PUSH C-INTS + JUMP ?CND5 +?ELS9: PUSH C-DEMONS +?CND5: ADD C-TABLE,STACK >C + ADD C-TABLE,C-TABLELEN >E +?PRG13: EQUAL? C,E \?ELS17 + INC 'MOVES + RETURN FLG +?ELS17: GET C,C-ENABLED? + ZERO? STACK /?CND15 + GET C,C-TICK >TICK + ZERO? TICK \?ELS22 + JUMP ?CND15 +?ELS22: SUB TICK,1 + PUT C,C-TICK,STACK + GRTR? TICK,1 /?CND20 + GET C,C-RTN + CALL STACK >VAL + ZERO? VAL /?CND20 + ZERO? FLG /?THN33 + EQUAL? VAL,M-FATAL \?CND15 +?THN33: SET 'FLG,VAL +?CND20: +?CND15: ADD C,C-INTLEN >C + JUMP ?PRG13 + + .ENDI diff --git a/clock.zil b/clock.zil new file mode 100644 index 0000000..c22790e --- /dev/null +++ b/clock.zil @@ -0,0 +1,101 @@ +"CLOCK for SEASTALKER +Copyright (C) 1984 Infocom, Inc. All rights reserved." + +"Interrupt table needs room for 33 3-word slots: +I-AIRLOCK-EMPTY +I-ALARM-RINGING +I-ANALYSIS +I-ANTRIM-REPORTS +I-ANTRIM-TO-SUB +I-AUTO-PILOT +I-BLY-PRIVATELY +I-BLY-SAYS +I-CHECK-POD +I-DOME-AIR +I-GREENUP-ESCAPE +I-LAMP-ON-SCOPE +I-LOWELL-REPORTS +I-POISON-JAB +I-PROMPT-1 +I-PROMPT-2 +I-SEND-SUB +I-SHARON +I-SHARON-GONE +I-SHARON-TO-HALLWAY +I-SHOW-SONAR +I-SIEGEL-REPORTS +I-SNARK-ATTACKS +I-SYNTHESIS +I-THORPE-APPEARS +I-THORPE-AWAKES +I-TIP-PRIVATELY +I-TIP-REPORTS +I-TIP-SAYS +I-TIP-SONAR-PLAN +I-UPDATE-FREIGHTER +I-UPDATE-SUB-POSITION +I-UPDATE-THORPE" + + + +> + + + + + + + + + + + + + +;) + > ,C-TICK .TICK> + .CINT> + +) + > ,C-TICK .TICK> + .CINT> + +) E C INT) + #DECL ((RTN) ATOM (DEMON) (E C INT) ) + > + > + + > + >> + > + + ) + ( .RTN> )> + >>> + +> +; +) VAL) + #DECL ((C E) (TICK) FIX ;(FLG) ;) + > )> + >> + > + + > + ) + (>> + > + ) + (T + > + > + >>> + + <==? .VAL ,M-FATAL>> + )>)>)>)> + >>> diff --git a/coco.errors b/coco.errors new file mode 100644 index 0000000..15eed51 --- /dev/null +++ b/coco.errors @@ -0,0 +1,26 @@ +Assembling J1.XZAP.8 + + +Inserting J1FREQ.XZAP.7 ( 620 bytes) +Inserting J1DAT.ZAP.1 (22305 bytes) +Inserting MACROS.ZAP.1 ( 104 bytes) +Inserting MAIN.ZAP.1 ( 2259 bytes) +Inserting CLOCK.ZAP.1 ( 186 bytes) +Inserting SUB.ZAP.3 (16341 bytes) +Inserting BATTLE.ZAP.1 ( 5651 bytes) +Inserting DOME.ZAP.1 ( 9902 bytes) +Inserting PLACES.ZAP.1 ( 4753 bytes) +Inserting PEOPLE.ZAP.1 (15561 bytes) +Inserting THINGS.ZAP.1 ( 2058 bytes) +Inserting GLOBAL.ZAP.1 ( 5836 bytes) +Inserting PARSER.ZAP.1 ( 5735 bytes) +Inserting SYNTAX.ZAP.1 ( 778 bytes) +Inserting VERBS.ZAP.1 (15666 bytes) +Inserting EVENTS.ZAP.1 ( 7364 bytes) +Inserting J1STR.ZAP.1 ( 2553 bytes) +25538 bytes of preload. + +117736 bytes (115K). +32744 bytes too large for one-disk game on ATARI. +255 objects. +239 globals. diff --git a/coco.zip b/coco.zip new file mode 100644 index 0000000..8c0ee6b Binary files /dev/null and b/coco.zip differ diff --git a/dome.zap b/dome.zap new file mode 100644 index 0000000..d6f9dab --- /dev/null +++ b/dome.zap @@ -0,0 +1,1398 @@ + + + .FUNCT AQUADOME-F + EQUAL? PRSA,V?WHAT,V?FIND /?THN6 + EQUAL? PRSA,V?ASK-ABOUT \?ELS5 + FSET? PRSO,PERSON \?ELS5 +?THN6: EQUAL? NOW-TERRAIN,SEA-TERRAIN \?ELS14 + EQUAL? HERE,SUB \?ELS14 + CALL PERFORM,V?FIND,PLAYER + RTRUE +?ELS14: ZERO? SUB-IN-OPEN-SEA /?ELS18 + PRINTI "Its location is stored in the " + PRINTD AUTO-PILOT + PRINTR "'s computer memory." +?ELS18: ZERO? SUB-IN-DOME \FALSE + EQUAL? NOW-TERRAIN,SEA-TERRAIN /FALSE + PRINTI """The " + PRINTD AQUADOME + PRINTI " encloses the " + PRINT URS + PRINTI " of " + PRINTD IU-GLOBAL + PRINTI ", on the ocean floor off the Atlantic coast. Most " + CALL PRINT-NAME,LAST-NAME + PRINTI " subs can reach it by " + PRINTD AUTO-PILOT + PRINTR ".""" +?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS29 + LESS? DISTANCE-FROM-BAY,AQUADOME-VISIBLE /?ELS29 + SET 'P-WON,0 + GETP LOCAL-SUB,P?TEXT + PRINT STACK + CRLF + RTRUE +?ELS29: EQUAL? PRSA,V?LOOK-OUTSIDE,V?LOOK-INSIDE \?ELS35 + CALL PERFORM,PRSA,WINDOW + RTRUE +?ELS35: EQUAL? PRSA,V?THROUGH \?ELS37 + EQUAL? HERE,SUB,CRAWL-SPACE \FALSE + PRINTR "Wait until you're close enough." +?ELS37: EQUAL? PRSA,V?WALK-AROUND \?ELS46 + CALL GO-NEXT,IN-DOME-AROUND + ZERO? STACK /TRUE + EQUAL? WINNER,PLAYER /TRUE + CALL OKAY + RTRUE +?ELS46: EQUAL? PRSA,V?WALK-TO \FALSE + ZERO? SUB-IN-DOME /?ELS58 + PRINTR "You're in it!" +?ELS58: ZERO? SUB-IN-OPEN-SEA /?ELS63 + PRINTI "Let the " + PRINTD AUTO-PILOT + PRINTR " handle that." +?ELS63: PRINTR "First you must reach the open sea." + + + .FUNCT IN-DOME?,RM + ZERO? SUB-IN-DOME /?ELS5 + EQUAL? RM,SUB,CRAWL-SPACE /?THN1 +?ELS5: CALL ZMEMQ,RM,IN-DOME-AROUND + RSTACK +?THN1: RSTACK + + + .FUNCT AIR-ROOM?,RM + EQUAL? RM,FOOT-OF-RAMP,AIRLOCK,AIRLOCK-WALL /TRUE + EQUAL? RM,CENTER-OF-DOME,OUTSIDE-ADMIN-BLDG /TRUE + EQUAL? RM,BLY-OFFICE,SUB /TRUE + RFALSE + + + .FUNCT THROUGH-ROOF?,RM,HR=0 + ZERO? HR \?CND1 + SET 'HR,HERE +?CND1: EQUAL? HR,SUB,CRAWL-SPACE,AIRLOCK \?ELS8 + EQUAL? RM,SUB,CRAWL-SPACE,AIRLOCK /FALSE + RTRUE +?ELS8: EQUAL? RM,SUB,CRAWL-SPACE,AIRLOCK /TRUE + RFALSE + + + .FUNCT WINDOW-F,POP + EQUAL? PRSA,V?BRUSH \?ELS5 + PRINTR "The window is clean enough without your interference." +?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS9 + PRINTR "The window is a simple plastic sheet, giving a view of the dome outside." +?ELS9: EQUAL? PRSA,V?LOOK-OUTSIDE,V?LOOK-INSIDE \?ELS13 + ZERO? SNARK-ATTACK-COUNT \?ELS18 + PRINTR "You can see the dome outside." +?ELS18: MOVE BLY,HERE + PRINTI "The " + PRINTD AQUADOME + PRINTI "'s search lights probe the ocean, but the " + PRINTD GLOBAL-WATER + PRINTI " is too murky for the beams to penetrate. +""Tip's right!"" " + PRINTD BLY + PRINTI " says. ""That must be the " + PRINTD SNARK + PRINTI " out there. Its tentacles churned up silt from the seabed that way during its first attack, " + CALL PRINT-NAME,FIRST-NAME + PRINTR "!""" +?ELS13: EQUAL? PRSA,V?MUNG \?ELS26 + PRINTR "Vandalism is for vandals, not famous inventors!" +?ELS26: EQUAL? PRSA,V?UNLOCK /?THN31 + EQUAL? PRSA,V?LOCK,V?CLOSE,V?OPEN \FALSE +?THN31: PRINTR "The window can't be opened." + + + .FUNCT EXERCISE-TRACK-F + EQUAL? PRSA,V?WALK-TO,V?THROUGH,V?FIND \FALSE + ZERO? SUB-IN-DOME /FALSE + PRINTR "You don't need exercise!" + + + .FUNCT AIRLOCK-F,RARG=0 + EQUAL? RARG,M-ENTER \?ELS5 + ZERO? GREENUP-ESCAPE \?THN11 + ZERO? GREENUP-TRAPPED /FALSE +?THN11: MOVE LOWELL,HERE + MOVE ANTRIM,HERE + PRINTR "Two of the crew are with you." +?ELS5: EQUAL? RARG,M-LOOK \?ELS16 + PRINTI "You're now in the " + PRINTD AIRLOCK + PRINTR ", at the foot of the ramp." +?ELS16: ZERO? RARG \FALSE + ZERO? SUB-IN-DOME \?ELS23 + CALL SUB-OUTSIDE-AIRLOCK? + ZERO? STACK \?ELS23 + CALL NOT-HERE,AIRLOCK + RSTACK +?ELS23: EQUAL? PRSA,V?EMPTY \?ELS27 + ZERO? AIRLOCK-FULL \?ELS32 + CALL ALREADY,AIRLOCK,STR?70 + RSTACK +?ELS32: FSET? AIRLOCK-HATCH,OPENBIT \?ELS34 + CALL YOU-CANT,0,AIRLOCK-HATCH,STR?23 + RSTACK +?ELS34: EQUAL? HERE,SUB,CRAWL-SPACE /?THN37 + EQUAL? HERE,BLY-OFFICE,FOOT-OF-RAMP \FALSE +?THN37: CALL QUEUE,I-AIRLOCK-EMPTY,2 + PUT STACK,0,1 + PRINTR "This will take 1 turn." +?ELS27: EQUAL? PRSA,V?FILL \?ELS42 + ZERO? AIRLOCK-FULL /?ELS45 + CALL ALREADY,AIRLOCK,STR?71 + RTRUE +?ELS45: FSET? AIRLOCK-ELECTRICITY,ONBIT /?ELS48 + CALL YOU-CANT,0,AIRLOCK-ELECTRICITY,STR?44 + RTRUE +?ELS48: CALL AIRLOCK-POP? + ZERO? STACK /?CND43 + CALL YOU-CANT,0,AIRLOCK,STR?72 + RTRUE +?CND43: ZERO? GREENUP-ESCAPE \?CND51 + FSET? SUB-DOOR,OPENBIT \?CND54 + CALL YOU-CANT,0,SUB-DOOR,STR?23 + RTRUE +?CND54: FSET? AIRLOCK-ROOF,OPENBIT \?CND51 + CALL THIS-IS-IT,AIRLOCK-ROOF + PRINTI "A safety mechanism prevents it. The " + PRINTD AIRLOCK-ROOF + PRINTR " is open!" +?CND51: ZERO? GREENUP-ESCAPE /?ELS66 + GRTR? 4,GREENUP-ESCAPE \?ELS66 + PRINTI "Greenup is frantically scrambling back up the ladder to avoid being swept off and drowned! " + CALL GREENUP-CUFF + PRINTI "Tip immediately empties the " + PRINTD AIRLOCK + PRINTR " again." +?ELS66: EQUAL? HERE,SUB,CRAWL-SPACE /?THN75 + EQUAL? HERE,BLY-OFFICE,FOOT-OF-RAMP \FALSE +?THN75: CALL QUEUE,I-AIRLOCK-EMPTY,2 + PUT STACK,0,1 + PRINTR "This will take 1 turn." +?ELS42: EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS80 + CALL PERFORM,PRSA,AIRLOCK-HATCH + RTRUE +?ELS80: EQUAL? PRSA,V?WALK-TO,V?THROUGH \FALSE + ZERO? SUB-IN-DOME \?CND83 + EQUAL? HERE,SUB,CRAWL-SPACE \?CND83 + CALL TOO-BAD-BUT,PRSO,STR?16 + RTRUE +?CND83: SET 'PRSO,AIRLOCK + CALL CHEERS? + RFALSE + + + .FUNCT CHEERS? + EQUAL? WINNER,PLAYER \FALSE + CALL ZMEMQ,HERE,IN-DOME-AROUND + ZERO? STACK /FALSE + EQUAL? HERE,AIRLOCK,AIRLOCK-WALL /FALSE + CALL READY-FOR-SNARK? + ZERO? STACK /FALSE + PRINTI "Cheers follow as you start up the ladder into the " + PRINTD AIRLOCK + PRINTR "." + + + .FUNCT I-AIRLOCK-EMPTY + ZERO? AIRLOCK-FULL /?ELS5 + FSET? AIRLOCK-HATCH,OPENBIT /FALSE + SET 'AIRLOCK-FULL,0 + CRLF + PRINTI "The " + PRINTD AIRLOCK + PRINTI " is now clear of " + PRINTD GLOBAL-WATER + PRINTI " and filled with air at sea-level pressure." + FSET? ENGINE,ONBIT \?CND12 + FCLEAR ENGINE,ONBIT + PRINTI " The engine shuts off." +?CND12: FSET AIRLOCK-ROOF,OPENBIT + CALL THIS-IS-IT,SUB-DOOR + CRLF + PRINTI "The roof of the " + PRINTD AIRLOCK + PRINTI " is sliding open, and the " + PRINTD SUB + PRINTI " is in dry dock. +A ramp swings down from the top of the " + PRINTD AIRLOCK + PRINTI "'s north wall to your " + PRINTD SUB-DOOR + PRINTI "." + CRLF + RETURN 2 +?ELS5: SET 'AIRLOCK-FULL,1 + CRLF + PRINTI "The " + PRINTD AIRLOCK + PRINTI " is now filled with " + PRINTD GLOBAL-WATER + PRINTI "." + CRLF + ZERO? SUB-IN-DOME /FALSE + PRINTI "The adjustable cradle then releases the " + PRINTD SUB + PRINTR "'s keel from its grip." + + + .FUNCT GREENUP-LADDER-F + EQUAL? PRSA,V?THROUGH,V?CLIMB-UP /?THN6 + EQUAL? PRSA,V?CLIMB-ON,V?CLIMB-DOWN,V?BOARD \FALSE +?THN6: PRINTI "The " + PRINTD GREENUP-LADDER + PRINTR " is only for emergencies." + + + .FUNCT AIRLOCK-RAMP-F + EQUAL? PRSA,V?CLIMB-ON,V?CLIMB-DOWN,V?BOARD \?ELS5 + EQUAL? HERE,AIRLOCK-WALL \?ELS5 + CALL DO-WALK,P?SOUTH + RTRUE +?ELS5: EQUAL? PRSA,V?CLIMB-ON,V?CLIMB-UP,V?BOARD \FALSE + EQUAL? HERE,AIRLOCK \FALSE + CALL DO-WALK,P?NORTH + RTRUE + + + .FUNCT AIRLOCK-WALL-F,ARG=0 + EQUAL? ARG,M-LOOK \FALSE + PRINTI "You're now atop the north wall of the " + PRINTD AQUADOME + PRINTI "'s " + PRINTD AIRLOCK + PRINTI "." + CRLF + PRINTI "This gives you a bird's-eye view of the whole " + PRINT URS + PRINTI " of " + PRINTD IU-GLOBAL + PRINTI ". + +The dome is a transparent hemisphere made of plastic of great strength, developed by you for this specific purpose. The dome encloses the four attached buildings of the " + PRINT URS + PRINTI ": the workshop/lab and dormitory in the western half of the dome, and the administration and communication buildings in the eastern half. +" + FSET? AIR-SUPPLY-SYSTEM,MUNGBIT \?CND10 + PRINTI "In the very center is the " + PRINTD AIR-SUPPLY-SYSTEM + PRINTI ". This is in a cylinder that runs from the floor to the top of the dome. It extracts oxygen from " + PRINTD GLOBAL-WATER + PRINTI " and emits it through small holes around its base to keep the air fresh at all times. +" +?CND10: PRINTI "A ladder goes from here down to the floor of the " + PRINTD AQUADOME + PRINTI ", outside the " + PRINTD AIRLOCK + PRINTI "'s north wall. +" + CALL CREW-5-TOGETHER? + ZERO? STACK /FALSE + IN? CREW,FOOT-OF-RAMP \FALSE + FSET? BLY,MUNGBIT /FALSE + PRINTD BLY + PRINTI " and her five " + PRINTD CREW + PRINTI " are" + FSET? FOOT-OF-RAMP,TOUCHBIT /?CND26 + PRINTI " waiting to greet you" +?CND26: PRINTR " at the foot of this ladder." + + + .FUNCT AIRLOCK-LADDER-F + EQUAL? PRSA,V?CLIMB-ON,V?CLIMB-DOWN,V?BOARD \?ELS5 + EQUAL? HERE,AIRLOCK-WALL \?ELS5 + CALL DO-WALK,P?NORTH + RTRUE +?ELS5: EQUAL? PRSA,V?CLIMB-ON,V?CLIMB-UP,V?BOARD \FALSE + EQUAL? HERE,FOOT-OF-RAMP \FALSE + CALL DO-WALK,P?SOUTH + RTRUE + + + .FUNCT CREW-F + ZERO? DOME-AIR-BAD? /?THN8 + FSET? AIR-SUPPLY-SYSTEM,MUNGBIT /?ELS5 +?THN8: EQUAL? PRSA,V?ASK-ABOUT \?ELS13 + FSET? PRSO,PERSON \?ELS13 + EQUAL? PRSI,CREW-GLOBAL,CREW /?THN10 +?ELS13: EQUAL? PRSA,V?WHAT \?ELS15 + EQUAL? PRSO,CREW-GLOBAL,CREW /?THN10 +?ELS15: EQUAL? PRSA,V?TELL-ABOUT \?ELS5 + EQUAL? PRSO,PLAYER \?ELS5 +?THN10: PRINTI """The crew consists of: +Doctor Walt Horvak, marine biologist and first-aid medic; +" + PRINTD ANTRIM + PRINTI ", laser expert and frogman; +" + PRINTD SIEGEL + PRINTI ", electronics expert in charge of communications; and +" + PRINTD GREENUP + PRINTI " and " + PRINTD LOWELL + PRINTR ", diver-technicians.""" +?ELS5: EQUAL? PRSA,V?TELL-ABOUT,V?TELL /?THN24 + EQUAL? PRSA,V?ASK-FOR,V?ASK-ABOUT,V?ASK \?ELS21 +?THN24: EQUAL? PRSO,CREW \?ELS21 + PRINTI "You'd better talk to one crew member at a time." + CRLF + RETURN 2 +?ELS21: EQUAL? PRSA,V?HELLO,V?GOODBYE \?ELS31 + EQUAL? PRSO,CREW \?ELS31 + PRINTD PRSO + PRINTR " nods at you." +?ELS31: EQUAL? PRSA,V?EXAMINE,V?DIAGNOSE \FALSE + ZERO? DOME-AIR-BAD? /?ELS42 + PRINTD BLY + PRINTR " and the two divers, Greenup and Lowell, are without oxygen." +?ELS42: PRINTR "All the crew members are okay now." + + + .FUNCT CREW-GLOBAL-F,L + CALL SPEAKING-VERB? + ZERO? STACK /?ELS5 + EQUAL? PRSO,CREW-GLOBAL \?ELS5 + PRINTI "The " + PRINTD CREW-GLOBAL + CALL NOT-HERE-PERSON,CREW + SET 'P-CONT,0 + RTRUE +?ELS5: EQUAL? PRSA,V?WALK-TO \?ELS11 + CALL PERFORM,PRSA,CREW + RTRUE +?ELS11: CALL CREW-F + RSTACK + + + .FUNCT GENERIC-BADGE-F,OBJ + RETURN BADGE-GLOBAL + + + .FUNCT BADGE-GLOBAL-F + ZERO? SUB-IN-DOME /?THN6 + CALL FIND-FLAG,HERE,PERSON,WINNER + ZERO? STACK \?ELS5 +?THN6: CALL NOT-HERE,BADGE-GLOBAL-3 + RSTACK +?ELS5: EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE + CALL EXAMINE-BADGE + CRLF + RTRUE + + + .FUNCT EXAMINE-BADGE + ZERO? DOME-AIR-BAD? /?ELS5 + FSET? AIR-SUPPLY-SYSTEM,MUNGBIT \?ELS11 + PRINTI "The badge is turning red! The air is becoming unbreathable!" + RTRUE +?ELS11: PRINTI "The badge is less red now. The air is improving." + RTRUE +?ELS5: PRINTI "When a badge turns red, the air is no longer breathable. It's not red now." + RTRUE + + + .FUNCT BAD-AIR? + ZERO? DOME-AIR-BAD? /FALSE + FSET? AIR-SUPPLY-SYSTEM,MUNGBIT \FALSE + CALL AIR-SUPPLY-VERB? + ZERO? STACK \FALSE + PRINTI "Shouldn't you fix the " + PRINTD AIR-SUPPLY-SYSTEM + PRINTR " first?" + + + .FUNCT TROUBLE-BREATHING? + EQUAL? PRSA,V?WAIT-UNTIL,V?WAIT-FOR /FALSE + IN? OXYGEN-GEAR,PLAYER \?THN8 + FSET? OXYGEN-GEAR,ONBIT /FALSE +?THN8: PRINTI "You are having" + GRTR? 13,DOME-AIR-BAD? /?CND12 + PRINTI " real" +?CND12: PRINTR " trouble breathing." + + + .FUNCT TIP-REPORTS? + EQUAL? HERE,CENTER-OF-DOME /FALSE + CALL CORRIDOR-LOOK,AIR-SUPPLY-SYSTEM + ZERO? STACK \FALSE + EQUAL? HERE,SUB,CRAWL-SPACE,AIRLOCK \?CND8 + MOVE TIP,AIRLOCK-WALL +?CND8: PRINTI "Tip, who is standing near the exit, reports that " + RTRUE + + + .FUNCT I-DOME-AIR,CALLED?=0,X + FSET? AIR-SUPPLY-SYSTEM,MUNGBIT \?ELS5 + ZERO? DOME-AIR-BAD? \?CND6 + SET 'DOME-AIR-BAD?,INITIAL-DOME-AIR-BAD + SET 'DOME-AIR-CRIME,1 + CALL QUEUE,I-DOME-AIR,-1 + PUT STACK,0,1 + CALL VISIBLE?,BLY >X + FSET BLY,MUNGBIT + FSET GREENUP,MUNGBIT + FSET LOWELL,MUNGBIT + CALL TIP-REPORTS? + ZERO? STACK \?CND9 + PRINTI "Suddenly you realize that " +?CND9: PRINTI "Zoe is literally gasping for breath. Her face is turning reddish-purple! She clutches her throat... +Everyone" + ZERO? CALLED? /?ELS18 + JUMP ?CND16 +?ELS18: IN? OXYGEN-GEAR,PLAYER \?ELS21 + FSET? OXYGEN-GEAR,ONBIT \?ELS21 + PRINTI ", except you," + JUMP ?CND16 +?ELS21: PRINTI ", including yourself," +?CND16: PRINTR " is having trouble breathing!" +?CND6: CALL TROUBLE-BREATHING? + INC 'DOME-AIR-BAD? + EQUAL? 7,DOME-AIR-BAD? \?ELS36 + CRLF + PRINTI "In 10 turns Bly, Greenup and Lowell, who were not carrying " + PRINTD OXYGEN-GEAR + PRINTI ", will suffocate from lack of oxygen. In 20 turns, " + IN? OXYGEN-GEAR,PLAYER \?ELS41 + PRINTI "you and the others" + JUMP ?CND39 +?ELS41: PRINTI "those" +?CND39: PRINTI " who do have " + PRINTD OXYGEN-GEAR + PRINTR " will have exhausted their supply of oxygen. Need we say more?" +?ELS36: EQUAL? 13,DOME-AIR-BAD? \?ELS51 + CRLF + PRINTI "Zoe Bly and the two crew members without " + PRINTD OXYGEN-GEAR + PRINTI " now have only 4 TURNS left to live! Their lives depend on you, " + CALL PRINT-NAME,FIRST-NAME + PRINTI "!" + CRLF + FSET? ACCESS-PLATE,OPENBIT /TRUE + FSET? UNIVERSAL-TOOL,TOUCHBIT /TRUE + FSET UNIVERSAL-TOOL,TOUCHBIT + FCLEAR UNIVERSAL-TOOL,NDESCBIT + MOVE UNIVERSAL-TOOL,PLAYER + PRINTI "Tip" + IN? TIP,HERE /?CND61 + MOVE TIP,HERE + PRINTI " runs up and" +?CND61: PRINTI " gives you a " + PRINTD UNIVERSAL-TOOL + PRINTI " and says, ""Here, " + CALL PRINT-NAME,FIRST-NAME + FSET? CENTER-OF-DOME,TOUCHBIT \?ELS70 + PRINTR ", open the cylinder with this! It'll fit anything!""" +?ELS70: PRINTI ", maybe you can use this somehow.""" + CRLF + RTRUE +?ELS51: EQUAL? 17,DOME-AIR-BAD? \FALSE + LOC SPECIAL-TOOL + EQUAL? STACK,BLY-OFFICE,HORVAK /?PRD79 + PUSH 0 + JUMP ?PRD80 +?PRD79: PUSH 1 +?PRD80: SET 'X,STACK + MOVE HORVAK,CENTER-OF-DOME + PRINTI " +At this desperate moment, " + CALL TIP-REPORTS? + PRINTD HORVAK + PRINTI " runs from the " + PRINTD BLY-OFFICE + ZERO? X /?ELS89 + LOC ELECTROLYTE-RELAY + EQUAL? STACK,AIR-SUPPLY-SYSTEM,CENTER-OF-DOME,HORVAK \?ELS89 + CALL QUEUE,I-BLY-PRIVATELY,3 + PUT STACK,0,1 + MOVE SPECIAL-TOOL,HORVAK + FCLEAR SPECIAL-TOOL,INVISIBLE + FSET SPECIAL-TOOL,TOUCHBIT + REMOVE SPECIAL-TOOL-GLOBAL + CALL FIX-AIR-SUPPLY + SET 'HORVAK-FIXED-AIR,1 + PRINTI ". He's clutching an oddly-shaped gadget. +" + CALL TIP-SAYS + PRINTI "Hey, that's the " + PRINTD SPECIAL-TOOL + PRINTI "!"" +" + FSET? ACCESS-PLATE,OPENBIT /?CND96 + FSET ACCESS-PLATE,OPENBIT + FSET AIR-SUPPLY-SYSTEM,OPENBIT + PRINTI "Using the " + PRINTD SPECIAL-TOOL + PRINTI ", " + PRINTD HORVAK + PRINTI " quickly opens the " + PRINTD ACCESS-PLATE + PRINTI ". " +?CND96: PRINTI "Inside the cylinder, the " + PRINTD ELECTROLYTE-RELAY + PRINTI " has come unscrewed and fallen out of its socket. Horvak" + IN? ELECTROLYTE-RELAY,HORVAK /?CND103 + PRINTI " takes it and" +?CND103: PRINTI " screws it back in place; and within seconds, a fresh supply of oxygen is flowing out into the " + PRINTD AQUADOME + PRINTR "." +?ELS89: PRINTI ". He " + LOC HORVAK + EQUAL? HERE,STACK \?ELS118 + PUSH STR?74 + JUMP ?CND114 +?ELS118: PUSH STR?65 +?CND114: PRINT STACK + PRINTI "s, ""I never wanted it to go this far! I sabotaged the " + PRINTD AIR-SUPPLY-SYSTEM + PRINTI " to embarrass " + PRINTD BLY + PRINTI ", but now I can't find the " + ZERO? X /?ELS123 + PRINTD ELECTROLYTE-RELAY + JUMP ?CND121 +?ELS123: PRINTD SPECIAL-TOOL +?CND121: PRINTI " to fix it!"" +As Doc breaks down in tears and Bly suffocates, you realize there's no point in continuing your mission." + CALL FINISH + RSTACK +?ELS5: SUB DOME-AIR-BAD?,DOME-AIR-FIX-RATE >DOME-AIR-BAD? + LESS? 0,DOME-AIR-BAD? /FALSE + CALL INT,I-DOME-AIR + PUT STACK,0,0 + CALL QUEUE,I-ANTRIM-TO-SUB,10 + PUT STACK,0,1 + SET 'DOME-AIR-BAD?,0 + FSET? BLY,MUNGBIT \FALSE + FCLEAR BLY,MUNGBIT + FCLEAR GREENUP,MUNGBIT + FCLEAR LOWELL,MUNGBIT + CALL VISIBLE?,BLY + ZERO? STACK /FALSE + CALL VISIBLE?,GREENUP + ZERO? STACK /FALSE + CALL VISIBLE?,LOWELL + ZERO? STACK /FALSE + ZERO? HORVAK-FIXED-AIR \?CND152 + CRLF + PRINTD HORVAK + PRINTI " has just returned from the " + PRINTD BLY-OFFICE + PRINTI ", where he went to get Bly's " + PRINTD OXYGEN-GEAR + PRINTI ", but it's no longer needed." + CRLF +?CND152: CRLF + PRINTD BLY + PRINTI " is sitting up and her normal color has returned. Ditto for Greenup and Lowell, who collapsed. All are recovering from their temporary lack of air." + CRLF + CALL TELL-HINT,41,ELECTROLYTE-RELAY + RTRUE + + + .FUNCT FOOT-OF-RAMP-F,ARG=0 + EQUAL? ARG,M-BEG \?ELS5 + EQUAL? PRSA,V?WALK \FALSE + EQUAL? PRSO,P?UP,P?SOUTH \FALSE + CALL CHEERS? + RFALSE +?ELS5: EQUAL? ARG,M-ENTER \?ELS17 + CALL READY-FOR-SNARK? + ZERO? STACK \?THN23 + ZERO? GREENUP-ESCAPE \?THN23 + ZERO? GREENUP-TRAPPED /?ELS22 +?THN23: MOVE BLY,HERE + MOVE ANTRIM,HERE + MOVE HORVAK,HERE + MOVE SIEGEL,HERE + MOVE LOWELL,HERE + ZERO? GREENUP-ESCAPE \?THN30 + ZERO? GREENUP-TRAPPED /?ELS29 +?THN30: PRINTI "The rest of the " + PRINTD CREW + PRINTR " are with you." +?ELS29: PRINTD BLY + PRINTR " and the others gather to shake your hand and wish you luck on your perilous mission." +?ELS22: ZERO? BLY-WELCOMED \FALSE + SET 'BLY-WELCOMED,1 + PRINTD BLY + PRINTI " says, """ + CALL BLY-WELCOME + PRINTR """" +?ELS17: EQUAL? ARG,M-LOOK \?ELS45 + CALL CREW-5-TOGETHER? + ZERO? STACK /?ELS50 + IN? CREW,FOOT-OF-RAMP \?ELS50 + FSET? BLY,MUNGBIT /?ELS50 + FSET? CREW,TOUCHBIT /?ELS57 + FSET CREW,TOUCHBIT + CALL QUEUE,I-BLY-PRIVATELY,15 + PUT STACK,0,1 + PRINTI "You're now face-to-face with Zoe Bly and the " + PRINTD CREW + PRINTI ". They are wearing badges which show the air quality in the " + PRINTD AQUADOME + PRINTR "." +?ELS57: PRINTI "You're at the foot of the ladder. " + IN? BLY,FOOT-OF-RAMP \?ELS66 + PRINTI "Zoe Bly and t" + JUMP ?CND64 +?ELS66: PRINTI "T" +?CND64: PRINTI "he " + PRINTD CREW + PRINTR " are still here." +?ELS50: PRINTR "You're now at the foot of the ladder." +?ELS45: EQUAL? ARG,M-END \FALSE + EQUAL? EXCLAM-DOME-AIR-BAD,DOME-AIR-BAD? \FALSE + FSET? AIR-SUPPLY-SYSTEM,MUNGBIT \FALSE + CRLF + CALL BADGES-RED,1 + RTRUE + + + .FUNCT BADGES-RED,SHOUT?=0 + ZERO? BADGES-RED-SAID? \FALSE + SET 'BADGES-RED-SAID?,1 + ZERO? SHOUT? /?CND6 + PRINTI "Someone shouts, " +?CND6: PRINTI """Our badges are turning red! The air's bad! Everyone use your " + PRINTD OXYGEN-GEAR + PRINTR "!""" + + + .FUNCT OUTSIDE-DORM-F,RARG=0 + EQUAL? RARG,M-LOOK \FALSE + CALL FROM-HERE,P?WEST,P?SOUTH + RSTACK + + + .FUNCT FROM-HERE,DIR1,DIR2 + PRINTI "From here, you can go " + CALL DIR-PRINT,DIR1,0 + PRINTI " or " + CALL DIR-PRINT,DIR2,0 + PRINTR " into the building." + + + .FUNCT WOMENS-QUARTERS-F,RARG=0 + EQUAL? RARG,M-LOOK \FALSE + CALL QUARTERS-F,WOMENS-QUARTERS,STR?75 + RSTACK + + + .FUNCT GENERIC-FURNITURE-F,OBJ + ZERO? SUB-IN-TANK /?ELS5 + RETURN WORKBENCH +?ELS5: RETURN HORVAK-LOCKER + + + .FUNCT MENS-QUARTERS-F,RARG=0 + EQUAL? RARG,M-LOOK \FALSE + CALL QUARTERS-F,MENS-QUARTERS,STR?76 + RSTACK + + + .FUNCT QUARTERS-F,RM,STR + PRINTI "You're in the " + PRINTD RM + PRINTI ". " + PRINT STR + PRINTR " of the room is a bunk and locker. In the center of the room are a table and chairs." + + + .FUNCT HORVAK-LOCKER-F + EQUAL? PRSA,V?LOOK-INSIDE \?ELS5 + FSET? HORVAK-LOCKER,OPENBIT \?ELS5 + PRINTI "The locker contains mostly clothing, toilet articles and books." + IN? DIARY,HORVAK-LOCKER \?CND10 + PRINTI " One of the books is labeled DIARY." + IN? PHOTO,DIARY \?CND10 + FCLEAR PHOTO,INVISIBLE + PRINTI " Something has been inserted between its pages." +?CND10: CRLF + RTRUE +?ELS5: EQUAL? PRSA,V?UNLOCK,V?OPEN-WITH,V?OPEN \FALSE + EQUAL? PRSO,HORVAK-LOCKER \FALSE + FSET? HORVAK-LOCKER,OPENBIT /FALSE + FSET? HORVAK-LOCKER,LOCKED \?CND24 + EQUAL? PRSI,UNIVERSAL-TOOL /?CND24 + CALL THIS-IS-IT,HORVAK-KEY + PRINTI "It's locked. The normal way to open its lock (which you yourself designed, " + CALL PRINT-NAME,FIRST-NAME + PRINTR ") is with a key." +?CND24: FCLEAR HORVAK-LOCKER,LOCKED + FSET HORVAK-LOCKER,OPENBIT + FSET DIARY,TAKEBIT + CALL PERFORM,V?LOOK-INSIDE,HORVAK-LOCKER + RTRUE + + + .FUNCT HORVAK-KEY-F + EQUAL? PRSI,HORVAK \?ELS9 + EQUAL? PRSA,V?TAKE /?THN6 +?ELS9: EQUAL? PRSO,HORVAK \FALSE + EQUAL? PRSA,V?SEARCH-FOR,V?ASK-FOR \FALSE +?THN6: EQUAL? WINNER,PLAYER \?ELS16 + PRINTI "Be warned, " + CALL PRINT-NAME,FIRST-NAME + PRINTI ", that he will never willingly surrender it. You have no right to demand it without a search warrant. The " + PRINTD AQUADOME + PRINTR " is neither a military establishment nor a ship at sea, so you could get in legal trouble." +?ELS16: CALL HE-SHE-IT,WINNER,1,STR?77 + PRINTI ", " + CALL PRINT-NAME,FIRST-NAME + PRINTI ". Do not pursue this any further, or you will lose the respect and cooperation of the " + PRINTD CREW + PRINTR ", and thereby abort your rescue mission. If you attempt to use force, they may even mutiny and place you under arrest." + + + .FUNCT DIARY-F + EQUAL? PRSA,V?OPEN \?ELS5 + FSET? DIARY,OPENBIT /?ELS5 + IN? PHOTO,DIARY \?ELS5 + FSET DIARY,OPENBIT + MOVE PHOTO,HERE + PRINTR "As you do so, a picture falls out. Oh, oh! It's a snapshot of Zoe Bly!" +?ELS5: EQUAL? PRSA,V?LOOK-INSIDE,V?READ \FALSE + FSET? DIARY,OPENBIT /?ELS16 + PRINTR "You must open it first." +?ELS16: PRINTI "You quickly discover references to Zoe Bly. It seems clear that " + PRINTD HORVAK + PRINTI " has fallen for Zoe. But her unsentimental manner is a large obstacle. +The last entry reads: +""If only I could find some way to break down that icy reserve of Zoe's, and make her realize she's not just a scientific thinking machine or a commanding officer...! +There must be some way! She doesn't do everything by the rule book. She even breaks regulations at times. If I can prove this and embarrass her, maybe she'll realize she's just a human being like the rest of us -- and not only a human being, but a warm, desirable woman...!"" +" + FSET? SPECIAL-TOOL,TOUCHBIT \TRUE + PRINTI " +Well! Sounds as if " + PRINTD HORVAK + PRINTI " found the answer to his problem by sabotaging the " + PRINTD AIR-SUPPLY-SYSTEM + PRINTI " -- at a time when " + PRINTD BLY + PRINTI " was breaking regulations by not wearing her " + PRINTD OXYGEN-GEAR + PRINTR "!" + + + .FUNCT PHOTO-F + EQUAL? PRSA,V?TELL-ABOUT,V?EXAMINE,V?ANALYZE \FALSE + PRINTI "It's a " + PRINTD PHOTO + PRINTI " of " + PRINTD BLY + PRINTR "." + + + .FUNCT OUTSIDE-WORKSHOP-F,RARG=0 + EQUAL? RARG,M-LOOK \FALSE + CALL FROM-HERE,P?WEST,P?NORTH + RSTACK + + + .FUNCT WORKSHOP-F,RARG=0 + EQUAL? RARG,M-LOOK \FALSE + PRINTI "The " + PRINTD WORKSHOP + PRINTR " is equipped for mechanical repair work. It contains assorted hand tools, machine tools, and spare parts." + + + .FUNCT WORKSHOP-STUFF-F + EQUAL? PRSA,V?MAKE \FALSE + PRINTR "That's too difficult, even for a famous young inventor." + + + .FUNCT DOME-LAB-F,RARG=0,MAGLOC + EQUAL? RARG,M-LOOK \?ELS5 + PRINTI "The " + PRINTD DOME-LAB + PRINTI " is equipped for all sorts of marine biochemical research. " + CALL ROOM-IS-CROWDED + RSTACK +?ELS5: EQUAL? RARG,M-ENTER \FALSE + FSET? AIR-SUPPLY-SYSTEM,MUNGBIT /FALSE + IN? BLY,DOME-LAB /?CND12 + MOVE BLY,DOME-LAB + PRINTD BLY + PRINTI " comes too." + CRLF +?CND12: FSET? HORVAK,BUSYBIT /?CND17 + IN? HORVAK,DOME-LAB /?CND17 + MOVE HORVAK,DOME-LAB + PRINTD HORVAK + PRINTI " comes too." + CRLF +?CND17: ZERO? HORVAK-TOLD-AH \TRUE + FSET? DART,MUNGBIT \TRUE + FSET? HORVAK,BUSYBIT /TRUE + SET 'HORVAK-TOLD-AH,1 + CRLF + PRINTD HORVAK + PRINTI " says: +""" + CALL PRINT-NAME,FIRST-NAME + PRINTI ", right after the Snark ceased its attack, I detected a high concentration of AH molecules in the " + PRINTD GLOBAL-WATER + PRINTI " around the " + PRINTD AQUADOME + PRINTI ". Have you ever heard of such a phenomenon before?""" + CALL YES? + ZERO? STACK \?CND31 + PRINTI """I can make up an intense tranquilizer to subdue the " + PRINTD SNARK + PRINTI ","" " + PRINTD HORVAK + PRINTI " continues. ""You could use one of our aquatic dart guns to inject it into the creature. You could mount the gun on one of the " + PRINTD SUB + PRINTI "'s " + PRINTD CLAW + PRINTI "s. +But without knowing the creature's biochemistry, there's no guarantee the 'trank' will work. Shall I go ahead and make some up, anyhow?""" + CALL YES? +?CND31: CALL META-LOC,MAGAZINE >MAGLOC + CALL IN-DOME?,MAGLOC + ZERO? STACK /TRUE + CALL TIP-SAYS + PRINTI "Wait a minute! Wasn't there something about AH molecules in that " + PRINTD MAGAZINE + PRINTI "? Shall " + EQUAL? MAGLOC,HERE \?ELS43 + PRINTI "we" + JUMP ?CND41 +?ELS43: PRINTI "I get it and" +?CND41: PRINTI " see?""" + CALL THIS-IS-IT,MAGAZINE + CALL YES? + ZERO? STACK /TRUE + IN? MAGAZINE,PLAYER /?CND55 + MOVE MAGAZINE,PLAYER + PRINTI "Tip " + EQUAL? MAGLOC,HERE /?CND60 + PRINTI "returns quickly and " +?CND60: PRINTI "hands you the magazine. " +?CND55: CALL THIS-IS-IT,HORVAK + PRINTD HORVAK + PRINTR " looks interested. ""I'd like to see that.""" + + + .FUNCT OUTSIDE-COMM-BLDG-F,RARG=0 + EQUAL? RARG,M-LOOK \FALSE + CALL FROM-HERE,P?EAST,P?NORTH + RSTACK + + + .FUNCT COMM-BLDG-F,RARG=0 + EQUAL? RARG,M-LOOK \FALSE + PRINTI "The " + PRINTD COMM-BLDG + PRINTI " has both a " + PRINTD VIDEOPHONE + PRINTI " for communicating with other places and the " + PRINTD SONAR-EQUIPMENT + PRINTI " for detecting objects in the " + PRINTD GLOBAL-WATER + PRINTR " around the dome." + + + .FUNCT SONAR-EQUIPMENT-F + EQUAL? PRSA,V?LAMP-OFF \?ELS5 + PRINTR "It should stay on all the time." +?ELS5: EQUAL? PRSA,V?TELL-ABOUT,V?LOOK-ON,V?LOOK-INSIDE /?THN10 + EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \?ELS9 +?THN10: PRINTI "The " + PRINTD SONAR-EQUIPMENT + PRINTI " detects objects in the " + PRINTD GLOBAL-WATER + PRINTI " near the " + PRINTD AQUADOME + PRINTR "." +?ELS9: EQUAL? PRSA,V?TIE-TO \FALSE + EQUAL? PRSI,SONAR-EQUIPMENT \FALSE + CALL PERFORM,V?PUT,PRSO,PRSI + RTRUE + + + .FUNCT MICROPHONE-DOME-F + CALL MICROPHONE-F,1 + RSTACK + + + .FUNCT GALLEY-F,RARG=0 + EQUAL? RARG,M-LOOK \FALSE + PRINTR "This room serves as both galley and mess; the crew can both prepare food and eat it here." + + + .FUNCT OUTSIDE-ADMIN-BLDG-F,RARG=0 + EQUAL? RARG,M-LOOK \FALSE + CALL FROM-HERE,P?EAST,P?SOUTH + RSTACK + + + .FUNCT BLY-OFFICE-F,ARG=0 + EQUAL? ARG,M-LOOK \?ELS5 + PRINTI "The " + PRINTD BLY-OFFICE + PRINTI " is small but tidy, with a single door leading out and a good view of the ocean through the " + PRINTD WINDOW + PRINTR "." +?ELS5: EQUAL? ARG,M-ENTER \?ELS9 + FSET? AIR-SUPPLY-SYSTEM,MUNGBIT /?ELS9 + IN? BLY,BLY-OFFICE \?ELS16 + ZERO? GREENUP-ESCAPE \?ELS16 + ZERO? GREENUP-TRAPPED \?ELS16 + ZERO? GREENUP-CUFFED \?ELS16 + ZERO? ZOE-MENTIONED-EVIDENCE \?ELS16 + FCLEAR BLY,NDESCBIT + PRINTI "As you enter the office, " + CALL ZOE-MENTIONS-EVIDENCE + RSTACK +?ELS16: ZERO? GREENUP-ESCAPE /FALSE + IN? BLY,BLY-OFFICE /FALSE + MOVE BLY,BLY-OFFICE + PRINTR "Zoe comes with you." +?ELS9: EQUAL? ARG,M-BEG \?ELS28 + CALL EXIT-VERB? + ZERO? STACK /?ELS28 + ZERO? GREENUP-ESCAPE /?ELS35 + CALL HE-SHE-IT,WINNER,1 + PRINTR "'d better stay here and trap Greenup." +?ELS35: FSET? SPECIAL-TOOL,INVISIBLE \FALSE + EQUAL? WINNER,PLAYER \FALSE + PRINTI "As you start to leave, you notice" + CALL SPECIAL-TOOL-VISIBLE + RSTACK +?ELS28: EQUAL? PRSA,V?SEARCH-FOR,V?SEARCH \FALSE + FSET? SPECIAL-TOOL,INVISIBLE \FALSE + PRINTI "You find" + CALL SPECIAL-TOOL-VISIBLE + RSTACK + + + .FUNCT SPECIAL-TOOL-VISIBLE + FCLEAR SPECIAL-TOOL,INVISIBLE + FSET SPECIAL-TOOL,TOUCHBIT + REMOVE SPECIAL-TOOL-GLOBAL + CALL THIS-IS-IT,SPECIAL-TOOL + PRINTI " an oddly shaped metallic object lying under Zoe's desk. It must be the " + PRINTD SPECIAL-TOOL + PRINTR "!" + + + .FUNCT ZOE-MENTIONS-EVIDENCE + SET 'ZOE-MENTIONED-EVIDENCE,1 + MOVE TRAITOR,GLOBAL-OBJECTS + CALL THIS-IS-IT,EVIDENCE + CALL QUEUE,I-BLY-SAYS,6 + PUT STACK,0,1 + CALL SAID-TO,BLY + PRINTI "Zoe" + FSET? BLY-DOOR,OPENBIT \?CND3 + FCLEAR BLY-DOOR,OPENBIT + PRINTI " closes the door and" +?CND3: PRINTI " says: +""There's a " + PRINTD TRAITOR + PRINTI " here at the " + PRINTD AQUADOME + PRINTI ", " + CALL PRINT-NAME,FIRST-NAME + PRINTI "!" + ZERO? DOME-AIR-CRIME /?CND10 + PRINTI " I'm not saying that just because the " + PRINTD AIR-SUPPLY-SYSTEM + PRINTI " had been sabotaged." +?CND10: PRINTI " I discovered " + ZERO? DOME-AIR-CRIME /?ELS22 + PUSH STR?78 + JUMP ?CND18 +?ELS22: PUSH STR?79 +?CND18: PRINT STACK + PRINTD EVIDENCE + PRINTI " after we talked on the " + PRINTD VIDEOPHONE + PRINTR "!""" + + + .FUNCT BLY-DESK-F + EQUAL? PRSA,V?LOOK-UNDER \FALSE + FSET? SPECIAL-TOOL,TOUCHBIT /FALSE + PRINTI "There's" + CALL SPECIAL-TOOL-VISIBLE + RSTACK + + + .FUNCT BLACK-BOX-F + EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE \?ELS5 + FSET? BLACK-BOX,OPENBIT \?ELS10 + SET 'BLACK-BOX-EXAMINED,1 + PRINTI "After a brief study of the " + PRINTD BLACK-CIRCUITRY + PRINTR ", you deduce its purpose: it was designed to change the sonar output so the ultrasonic pulses make a more complex pattern (for example BURPETY-BURP-B'DURP) instead of just a simple, clear-cut BURP. This would also make fuzzier blips." +?ELS10: PRINTR "You'll need a suitable tool to open its cover." +?ELS5: EQUAL? PRSA,V?OPEN-WITH,V?OPEN \FALSE + FSET? BLACK-BOX,OPENBIT \?ELS23 + CALL ALREADY,BLACK-BOX,STR?23 + RSTACK +?ELS23: EQUAL? PRSI,UNIVERSAL-TOOL \?ELS25 + CALL OKAY,BLACK-BOX,STR?23 + RSTACK +?ELS25: PRINTI "You can't open it with" + ZERO? PRSI /?ELS32 + CALL THE-PRSI-PRINT + JUMP ?CND30 +?ELS32: PRINTI " your bare hands" +?CND30: PRINTR "!" + + + .FUNCT BLACK-CIRCUITRY-F + CALL DIVESTMENT?,BLACK-CIRCUITRY + ZERO? STACK /FALSE + CALL PERFORM,PRSA,BLACK-BOX,PRSI + RTRUE + + + .FUNCT STATION-MONITOR-F + EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE + ZERO? GREENUP-ESCAPE /?ELS10 + CALL QUEUE,I-GREENUP-ESCAPE,-1 + PUT STACK,0,1 + EQUAL? GREENUP-ESCAPE,1 \TRUE + PRINTI "The monitor screen shows Greenup's head just coming into view above the top of the " + PRINTD AIRLOCK + PRINTI "'s west wall, as he climbs the outside ladder. +" + FSET? AIRLOCK-ROOF,OPENBIT /?ELS23 + PRINTI "But since the " + PRINTD AIRLOCK-ROOF + PRINTI " is closed, Greenup can't get into the " + PRINTD SUB + PRINTI " to escape. " + CALL GREENUP-CUFF + RTRUE +?ELS23: PRINTI "Once he reaches the top of this wall, he will come down the inside ladder to the " + PRINTD SUB + PRINTR "." +?ELS10: PRINTD BLY + PRINTI " uses this monitor to check on activities in the " + PRINTD AQUADOME + PRINTR "." + + + .FUNCT AIRLOCK-ELECTRICITY-F + EQUAL? PRSA,V?CUT \?ELS5 + CALL PERFORM,V?LAMP-OFF,PRSO + RTRUE +?ELS5: EQUAL? PRSA,V?LAMP-OFF \FALSE + ZERO? GREENUP-ESCAPE /FALSE + FCLEAR AIRLOCK-ELECTRICITY,ONBIT + PRINTI "Very good, " + CALL PRINT-NAME,FIRST-NAME + PRINTI "! With the " + PRINTD AIRLOCK-ELECTRICITY + PRINTI " off, the " + PRINTD AIRLOCK-HATCH + PRINTI " won't respond to command signals from the " + PRINTD SUB + PRINTI " and will remain closed. +" + CALL GREENUP-CUFF + RTRUE + + + .FUNCT CONTROLS-OFFICE-F + EQUAL? PRSA,V?LAMP-OFF,V?CUT \?ELS5 + CALL PERFORM,V?LAMP-OFF,AIRLOCK-ELECTRICITY + RTRUE +?ELS5: EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE + PRINTI "MAIN OPERATING CONTROLS: +" + CALL FIXED-FONT-ON + PRINTD AIRLOCK-ROOF + PRINTI ": " + FSET? AIRLOCK-ROOF,OPENBIT \?ELS16 + PUSH STR?23 + JUMP ?CND12 +?ELS16: PUSH STR?17 +?CND12: PRINT STACK + CRLF + PRINTD FILL-TANK-BUTTON + PRINTI " : " + CALL TANK-STATUS + PRINT STACK + CRLF + PRINTD OPEN-GATE-BUTTON + PRINTI " : " + CALL GATE-STATUS + PRINT STACK + CRLF + CALL FIXED-FONT-OFF + RTRUE + + + .FUNCT DOME-STORAGE-F,RARG=0 + EQUAL? RARG,M-LOOK \FALSE + CALL ROOM-IS-CROWDED + RSTACK + + + .FUNCT ROOM-IS-CROWDED + PRINTR "The room is crowded with supplies and equipment. If you want to find something, you'll have to search for it." + + + .FUNCT I-CHECK-POD + IN? SYRINGE,ESCAPE-POD-UNIT \FALSE + FSET? SYRINGE,MUNGBIT \FALSE + ZERO? SUB-IN-DOME /?CND8 + CALL TELL-HINT,51,ESCAPE-POD-UNIT +?CND8: CALL QUEUE,I-CHECK-POD,7 + PUT STACK,0,1 + RFALSE + + + .FUNCT ESCAPE-POD-UNIT-F + CALL REMOTE-VERB? + ZERO? STACK \FALSE + IN? ESCAPE-POD-UNIT,SUB \FALSE + EQUAL? PRSA,V?EXAMINE,V?ANALYZE \?ELS12 + PRINTI "A brief inspection under your seat leads to a horrifying discovery! A body-heat sensor was substituted for the electronic monitor, and a wire leads from the sensor to " + IN? SYRINGE,ESCAPE-POD-UNIT \?ELS17 + PRINTI "the " + PRINTD SYRINGE + JUMP ?CND15 +?ELS17: PRINTI "where the " + PRINTD SYRINGE + PRINTI " was" +?CND15: PRINTI ". +Tip reports that the part under his seat appears to be okay." + FSET? SYRINGE,MUNGBIT \?CND26 + IN? SYRINGE,ESCAPE-POD-UNIT \?CND26 + PRINTI " ""But I sure don't like the looks of that " + PRINTD SYRINGE + PRINTI " in YOUR part, " + CALL PRINT-NAME,FIRST-NAME + PRINTI "!"" he adds. ""Let's take it to " + PRINTD HORVAK + PRINTI " to analyze it.""" +?CND26: CRLF + RTRUE +?ELS12: EQUAL? PRSA,V?FIX \FALSE + PRINTI "Maybe " + PRINTD HORVAK + PRINTR " can do that." + + + .FUNCT SYRINGE-F + EQUAL? PRSO,SYRINGE \FALSE + EQUAL? PRSA,V?FIX,V?EXAMINE,V?ANALYZE \?ELS10 + PRINTI "Maybe " + PRINTD HORVAK + PRINTR " can do that." +?ELS10: EQUAL? PRSA,V?TAKE \?ELS14 + FSET ESCAPE-POD-UNIT,NDESCBIT + SET 'TEST-BUTTON-READOUT,TEST-BUTTON-NORMAL + RFALSE +?ELS14: EQUAL? PRSA,V?PUT \FALSE + EQUAL? PRSI,ESCAPE-POD-UNIT \FALSE + FCLEAR ESCAPE-POD-UNIT,NDESCBIT + SET 'TEST-BUTTON-READOUT,TEST-BUTTON-POD + RFALSE + + + .FUNCT FINE-GRID-F + EQUAL? PRSA,V?FIND \FALSE + ZERO? FINE-SONAR /FALSE + PRINTI "It's installed in the " + PRINTD SUB + PRINTR "." + + + .FUNCT CENTER-OF-DOME-F,ARG=0 + EQUAL? ARG,M-LOOK \FALSE + PRINTI "You're in the very center of the " + PRINTD AQUADOME + PRINTI ", where the " + PRINTD AIR-SUPPLY-SYSTEM + PRINTR " rises like a tower, almost to the top of the dome itself." + + + .FUNCT AIR-SUPPLY-SYSTEM-F + EQUAL? PRSA,V?ANALYZE \?ELS5 + PRINTR "How do you propose to do that?" +?ELS5: EQUAL? PRSA,V?READ,V?LOOK-INSIDE,V?EXAMINE \?ELS9 + EQUAL? HERE,CENTER-OF-DOME \?ELS14 + FSET? ACCESS-PLATE,OPENBIT \?ELS19 + FSET? ELECTROLYTE-RELAY,MUNGBIT \?ELS24 + PRINTI "You notice an " + PRINTD EMPTY-SPACE + PRINTI " in the complicated assembly facing you. Something has been unscrewed from this space!" + CRLF + IN? ELECTROLYTE-RELAY,AIR-SUPPLY-SYSTEM \FALSE + CALL THIS-IS-IT,ELECTROLYTE-RELAY + PRINTR "Something is lying at the base of the cylinder, just inside the housing." +?ELS24: PRINTR "There's a lot of complicated machinery inside." +?ELS19: PRINTI "The first thing you notice is a stenciled sign saying: ""To repair " + PRINTD AIR-SUPPLY-SYSTEM + PRINTI ", first open " + PRINTD ACCESS-PLATE + PRINTI " with " + PRINTD SPECIAL-TOOL + PRINTR " hanging on hook at right."" An arrow points to this hook." +?ELS14: CALL TOO-FAR-AWAY,AIR-SUPPLY-SYSTEM + RSTACK +?ELS9: EQUAL? PRSA,V?WALK-TO,V?FIND \?ELS45 + EQUAL? PRSO,AIR-SUPPLY-SYSTEM-GLOBAL \FALSE + CALL PERFORM,PRSA,AIR-SUPPLY-SYSTEM,PRSI + RTRUE +?ELS45: EQUAL? PRSA,V?FIX \?ELS52 + PRINTR "How do you propose doing that, when you don't know what's wrong with it?" +?ELS52: EQUAL? PRSA,V?CLOSE,V?OPEN-WITH,V?OPEN \FALSE + CALL PERFORM,PRSA,ACCESS-PLATE,PRSI + RTRUE + + + .FUNCT AIR-SUPPLY-VERB? + EQUAL? PRSA,V?YELL-FOR /?THN6 + EQUAL? PRSA,V?TAKE,V?FIND,V?GIVE \?ELS5 +?THN6: EQUAL? PRSO,AIR-SUPPLY-SYSTEM-GLOBAL,AIR-SUPPLY-SYSTEM /TRUE + EQUAL? PRSO,SPECIAL-TOOL-GLOBAL,SPECIAL-TOOL,UNIVERSAL-TOOL /TRUE +?ELS5: EQUAL? PRSA,V?TELL-ABOUT /?THN17 + EQUAL? PRSA,V?ASK-FOR,V?ASK-ABOUT,V?SGIVE \FALSE +?THN17: EQUAL? PRSI,AIR-SUPPLY-SYSTEM-GLOBAL,AIR-SUPPLY-SYSTEM /TRUE + EQUAL? PRSI,SPECIAL-TOOL-GLOBAL,SPECIAL-TOOL,UNIVERSAL-TOOL /TRUE + RFALSE + + + .FUNCT ACCESS-PLATE-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + FSET? ACCESS-PLATE,OPENBIT \?ELS10 + PRINTR "It's open." +?ELS10: PRINTI "It's held in place on the cylinder by curiously-shaped fram bolts, which no ordinary wrench will fit." + FSET AIR-SUPPLY-SYSTEM,TOUCHBIT + PRINTI " To open it, you need a " + PRINTD SPECIAL-TOOL + PRINTR ", or something like it." +?ELS5: EQUAL? PRSA,V?LOOK-INSIDE \?ELS23 + CALL PERFORM,PRSA,AIR-SUPPLY-SYSTEM,PRSI + RTRUE +?ELS23: EQUAL? PRSA,V?CLOSE \?ELS25 + FSET? ACCESS-PLATE,OPENBIT \?ELS32 + FCLEAR ACCESS-PLATE,OPENBIT + CALL OKAY,AIR-SUPPLY-SYSTEM,STR?17 + RSTACK +?ELS32: CALL ALREADY,AIR-SUPPLY-SYSTEM,STR?17 + RSTACK +?ELS25: EQUAL? PRSA,V?TAKE-WITH,V?OPEN-WITH,V?OPEN \?ELS36 + EQUAL? PRSI,SPECIAL-TOOL,UNIVERSAL-TOOL \?ELS36 + FSET? ACCESS-PLATE,OPENBIT \?ELS43 + CALL ALREADY,ACCESS-PLATE,STR?23 + RSTACK +?ELS43: CALL OKAY,ACCESS-PLATE,STR?23 + FSET AIR-SUPPLY-SYSTEM,OPENBIT + FSET AIR-SUPPLY-SYSTEM,TOUCHBIT + CALL PERFORM,V?LOOK-INSIDE,AIR-SUPPLY-SYSTEM + CALL SCORE-OBJ,AIR-SUPPLY-SYSTEM + RTRUE +?ELS36: EQUAL? PRSA,V?TAKE-WITH,V?TAKE,V?OPEN \FALSE + FSET? ACCESS-PLATE,OPENBIT \?ELS52 + CALL ALREADY,ACCESS-PLATE,STR?23 + RSTACK +?ELS52: EQUAL? PRSI,SPECIAL-TOOL-GLOBAL \?ELS54 + CALL NOT-HERE,PRSI + RTRUE +?ELS54: PRINTI "You can't remove" + CALL THE-PRSO-PRINT + PRINTR " with your bare hands!" + + + .FUNCT HOOK-F + FIRST? HOOK /?ELS5 + EQUAL? PRSA,V?LOOK-ON,V?EXAMINE \?ELS10 + PRINTI "There's nothing hanging on the " + PRINTD HOOK + PRINTR "." +?ELS10: EQUAL? PRSA,V?PUT \FALSE + EQUAL? PRSO,SPECIAL-TOOL \?ELS19 + MOVE PRSO,HOOK + PRINTR "Okay." +?ELS19: PRINTI "It won't fit on the " + PRINTD HOOK + PRINTR "." +?ELS5: EQUAL? PRSA,V?LOOK-ON,V?EXAMINE \FALSE + PRINTI "There's " + CALL PRINTA,SPECIAL-TOOL + PRINTI " hanging on the " + PRINTD HOOK + PRINTR "." + + + .FUNCT ARROW-F + EQUAL? PRSA,V?FOLLOW \FALSE + PRINTR "It points to the hook." + + + .FUNCT ELECTROLYTE-RELAY-F + EQUAL? PRSA,V?TAKE \?ELS5 + FSET? PRSO,TAKEBIT /FALSE + PRINTI "What!? You don't want to spoil the " + PRINTD AIR-SUPPLY-SYSTEM + PRINTR " again!" +?ELS5: CALL REMOTE-VERB? + ZERO? STACK \FALSE + CALL NOT-HOLDING?,ELECTROLYTE-RELAY + ZERO? STACK \TRUE + EQUAL? PRSA,V?COMPARE \?ELS18 + EQUAL? PRSI,ELECTROLYTE-RELAY \?ELS24 + EQUAL? PRSO,EMPTY-SPACE /?THN21 +?ELS24: EQUAL? PRSO,ELECTROLYTE-RELAY \?ELS18 + EQUAL? PRSI,EMPTY-SPACE \?ELS18 +?THN21: PRINTI "It looks as if the " + PRINTD ELECTROLYTE-RELAY + PRINTI " fits perfectly into the " + PRINTD EMPTY-SPACE + PRINTR "." +?ELS18: EQUAL? PRSA,V?EXAMINE \?ELS30 + PRINTI "It has screw threads and, judging by its size and shape, it should screw very neatly into that " + PRINTD EMPTY-SPACE + PRINTI " in the " + PRINTD AIR-SUPPLY-SYSTEM + PRINTR " assembly." +?ELS30: EQUAL? PRSA,V?SCREW,V?PUT \?ELS38 + EQUAL? PRSI,EMPTY-SPACE,AIR-SUPPLY-SYSTEM /?THN35 +?ELS38: EQUAL? PRSA,V?SCREW-IN \FALSE + EQUAL? HERE,CENTER-OF-DOME \FALSE +?THN35: FSET? ACCESS-PLATE,OPENBIT /?CND41 + CALL TOO-BAD-BUT,ACCESS-PLATE,STR?17 + RTRUE +?CND41: CALL FIX-AIR-SUPPLY + PRINTI "It fits!" + CRLF + CALL SCORE-OBJ,ACCESS-PLATE + RTRUE + + + .FUNCT FIX-AIR-SUPPLY + FCLEAR AIR-SUPPLY-SYSTEM,MUNGBIT + REMOVE EMPTY-SPACE + MOVE ELECTROLYTE-RELAY,AIR-SUPPLY-SYSTEM + FCLEAR ELECTROLYTE-RELAY,TAKEBIT + FSET ELECTROLYTE-RELAY,NDESCBIT + FCLEAR ELECTROLYTE-RELAY,MUNGBIT + PUTP ELECTROLYTE-RELAY,P?TEXT,STR?82 + RTRUE + + + .FUNCT EMPTY-SPACE-F + EQUAL? PRSA,V?PUT \FALSE + EQUAL? PRSI,EMPTY-SPACE \FALSE + PRINTI "Sorry, but" + CALL THE-PRSO-PRINT + PRINTR " won't stay unless you screw it in." + + .ENDI diff --git a/dome.zil b/dome.zil new file mode 100644 index 0000000..f37555a --- /dev/null +++ b/dome.zil @@ -0,0 +1,1794 @@ +"DOME for SEASTALKER +Copyright (C) 1984 Infocom, Inc. All rights reserved." + + + + + + + >> + <==? ,HERE ,SUB>> + + ) + (,SUB-IN-OPEN-SEA + %) + ( + >> + %)>) + ( >> + > + % CR>) + ( + + ) + ( + + )>) + ( + >> + )> + ) + ( + + + + ) + (,SUB-IN-DOME + %) + (,SUB-IN-OPEN-SEA ; + %) + (T %)>)>> + +> + >> + + + + >> + +)) + )> + + >) + (T )>> + + + +) POP) + + %) + ( + %) + ( + + %) + (T + ; + + %)>) + ( + %) + ( + %)>> + + + + + + )>)>> +[ + + + +)) + + + + + %)>) + (<==? .RARG ,M-LOOK> + ) + (.RARG ) + ( >> + ) + ( + + ) + ( + ,AIRLOCK-HATCH "open">) + ( + > + > + % + ; + + ) + ( + + + + + + + )>)>)> + )>) + ( + + ) + (> + ,AIRLOCK-ELECTRICITY "off"> + ) + ( + ,AIRLOCK "full of people"> + ; + )> + + + ,SUB-DOOR "open"> + ; + )> + + ;> + + % + )>)> + > + % + + ) + ( + > + > + % + )>) + ( + ; + )> + + ) + ( + > + + ; + )> + + + ; + )>> + + + + >> + + %)>)>> + + )> + > + % + + + )> + + + + % + )>) + (T + + % + )>)>> + + + + + %)>> +] + + + > + + ) + ( > + + )>> + + + +)) + + % + % + + )> + + + + >> + % + > + )> + %)>)>> + + + + > + + ) + ( > + + )>> + + + + + >> + + + > + > + >>> + %) + ( + > + + ) + ( + > + ) + ( + ) + (T %)>)>> + + + + + > + + + > + ) + ( + + ) + (T )>> + + + + + + + + + +> + >> + ) + ( + + )>> + + + %) + (T %)>) + (T %)>> + +> + + + + + +> +> + + ) + (> ) + ( ) + (T + %)>> + + + ) + (> + >> + + > + )> + )>> + +> + >> + + )> + )>> + +) "AUX" X) + + + + + ;)> + > + > + + + + > + )> + + + > + ) + (T )> + + )> + + > + ;)> + + % + ) + (T )> + %) + (<==? 13 ,DOME-AIR-BAD?> + % + > + >> + + + + + > + + )> + % + + %) + (T %)>)> + ) + (<==? 17 ,DOME-AIR-BAD?> + ,BLY-OFFICE ,HORVAK>> + + + + + + ,AIR-SUPPLY-SYSTEM ,CENTER-OF-DOME ,HORVAK>> + > + + + + + + + % + + + > + + + )> + + > + )> + %) + (T + > "say") + (T "shout")> +"s, \"I never wanted it to go this far! I sabotaged the " D ,AIR-SUPPLY-SYSTEM +" to embarrass " D ,BLY ", but now I can't find the "> + ) + (T )> + + )>)>) + (T + > + ;)> + > + > + > + > + ;)> + + + + + + + > + + )> + % + + )>)>)>)>> + + + +)) + + + + + )>)>) + (<==? .ARG ,M-ENTER> + + ,GREENUP-ESCAPE + ,GREENUP-TRAPPED> + + + + + + + %) + (T %)>) + ( + + + + )>) + (<==? .ARG ,M-LOOK> + + + >> + > + + > + %) + (T + % + + ) + (T )> + %)>) + (T %)>) + ( + <==? ,EXCLAM-DOME-AIR-BAD ,DOME-AIR-BAD?> + > + + + )>> + +> +)) + + + )> + %)>> + + + +)) + + )>> + + + > + + > + > + + + + + +)) + + )>> + + + +> + + +[ + + +)) + + )>> + +> + + + + + + + + > + % + + + + + )>)> + ) + ( > + ) + ( + >> + + % + )> + + + + + )>> + + + + > + >> + + %) + (T + + %)>)>> + + + + > > + ;> + + + %) + ( + > + %) + (T % + ;,DOME-AIR-CRIME + )> + )>)>> + + + + + )>> +] + + +)) + + )>> + + + + + +)) + + )>> + + + + + %)>> + + + + + +> +) MAGLOC) + + + ) + ( + >> + > + + )> + > + >> + + )> + > + > + )> + + % + > + % + )> + > + > )> + + % + + ) + (T + )> + + + + > + + + > + %)> + )> + + )> + )>> + + + +)) + + )>> + + + + + +)) + + )>> + + + + ) + ( ) + ( + ) + ( > + + )>> + + + +> + + + + + +)) + + )>> + + + +)) + + )>> + + +[ + + +> +)) + + ) + ( + >> + + + + + > + + % + ) + (>> + + %)>) + ( > + + %) + ( <==? ,WINNER ,PLAYER>> + + )>) + ( > + + )>> + + + + + + %> + + + + ; + + > + + + + + )> + % + )> + + D ,EVIDENCE " after we talked on the " D ,VIDEOPHONE + "!\"" CR>> + + + + + > + + + ;)>)>> + + + +> + + + + %) + (T %)>) + ( + + ) + ( + ) + (T + + ) (T )> + )>)>> + + + + + + )>> + + + + + > + + % + > + % + + ) + (T )>) + (T ;"output from I-GREENUP-ESCAPE")>) + (T %)>)>> + + + + + + ) + ( + > + + % + + )>)>> + + + + + + ) + ( + % + + "open") (T "closed")> CR + D ,FILL-TANK-BUTTON " : " CR + D ,OPEN-GATE-BUTTON " : " CR> + + )>> +] + + + + + +)) + + )>> + +> + + + + > + )> + > + )>> + + ) + ;(> + ) + ( + + % + + ) + (T )> + + + > + )> + ) + ( + )>)>> + + + + + + ) + ( + + + ) + ( > + + + )>)>> + + + + + + ) + ( + )>)>> + + + +)) + + ) + ;(<==? .ARG ,M-BEG> + > + )>)>> + + + + + + + ) + ( + + + + + + + %)>) + (T )>) + (T )>) + (T )>) + ( + + + )>) + ( + ) + ( + + ) + ;( > + )>> + + + + )>) + ( + + )>)>> + + + + + ) + (T + + > + )> + )>) + ( + + ) + (> + + + ) + (T )>) + ( + > + + ) + (T + + + + + + )>) + ( + + ) + ( ) + (T %)>)>> + + + +> + + %) + ( + + + ) + (T )>)>) + ( + %)>> + + + + )>> + + + + + + + + + > + %)>) + ( ) + ( + ) + ( + > + >>> + ) + ( + %) + ( > + >> + > + + )> + + % + + )>> + + + + + + + + > + + + + > + )>> + +> diff --git a/events.zap b/events.zap new file mode 100644 index 0000000..c85df89 --- /dev/null +++ b/events.zap @@ -0,0 +1,1134 @@ + + + .FUNCT I-ALARM-RINGING + CALL IN-LAB?,HERE + ZERO? STACK /FALSE + PRINTI "The " + PRINTD ALARM + PRINTR " continues to ring." + + + .FUNCT GRAB-ATTENTION,X,OBJ=0 + CALL BAD-AIR? + ZERO? STACK \FALSE + FSET? X,BUSYBIT \?ELS7 + CALL TOO-BAD-BUT,X,STR?203 + RFALSE +?ELS7: ZERO? SNARK-ATTACK-COUNT /TRUE + CALL DONT-KNOW,X,OBJ + RFALSE + + + .FUNCT TELL-HINT,CARDNUM,OBJ,CR?=1 + ZERO? CR? /?CND1 + CRLF +?CND1: PRINTI "(If you want a clue, find Infocard #" + DIV CARDNUM,10 + PRINTN STACK + PRINTI " in your " + PRINTD GAME + PRINTI " package. Read hidden clue #" + MOD CARDNUM,10 + PRINTN STACK + PRINTI " and put """ + PRINTD OBJ + PRINTR """ in the blank space.)" + + + .FUNCT I-LAMP-ON-SCOPE + CALL GLOBAL-IN?,VIDEOPHONE,HERE + ZERO? STACK /?ELS5 + ZERO? ALARM-RINGING /FALSE + FSET? VIDEOPHONE,ONBIT /FALSE + CALL QUEUE,I-LAMP-ON-SCOPE,7 + PUT STACK,0,1 + CALL TELL-HINT,82,VIDEOPHONE + RSTACK +?ELS5: ZERO? SUB-IN-TANK /FALSE + CALL QUEUE,I-LAMP-ON-SCOPE,1 + PUT STACK,0,1 + RFALSE + + + .FUNCT I-SEND-SUB + FSET? VIDEOPHONE,ONBIT \FALSE + ZERO? WOMAN-ON-SCREEN \FALSE + CALL TELL-HINT,81,LOCAL-SUB + RSTACK + + + .FUNCT TIP-FOLLOWS-YOU,RM + ZERO? TIP-FOLLOWS-YOU? /FALSE + CALL IN-LAB?,RM + ZERO? STACK /?ELS7 + CALL IN-LAB?,OLD-HERE + ZERO? STACK \FALSE +?ELS7: CALL IN-TANK-AREA?,RM + ZERO? STACK /?ELS11 + CALL IN-TANK-AREA?,OLD-HERE + ZERO? STACK \FALSE +?ELS11: EQUAL? RM,CRAWL-SPACE /FALSE + EQUAL? OLD-HERE,RM /FALSE + SET 'OLD-HERE,RM + IN? MICROPHONE,TIP \?ELS20 + MOVE MICROPHONE,CENTER-OF-LAB + JUMP ?CND18 +?ELS20: IN? MICROPHONE-DOME,TIP \?CND18 + MOVE MICROPHONE-DOME,COMM-BLDG +?CND18: LOC TIP + EQUAL? RM,SUB,STACK /?CND23 + FCLEAR TIP,TOUCHBIT +?CND23: MOVE TIP,RM + RTRUE + + + .FUNCT DIR-FROM,HERE,THERE,P=0,L,T,O +?PRG1: NEXTP HERE,P >P + ZERO? P /FALSE + EQUAL? P,P?IN,P?OUT \?ELS7 + JUMP ?PRG1 +?ELS7: LESS? P,LOW-DIRECTION /?PRG1 + GETPT HERE,P >T + PTSIZE T >L + EQUAL? L,DEXIT,UEXIT,CEXIT \?PRG1 + GETB T,REXIT + EQUAL? STACK,THERE \?PRG1 + RETURN P + + + .FUNCT I-SHARON-GONE,L + ZERO? MONSTER-GONE \?CND1 + CALL QUEUE,I-SHARON-GONE,4 + RFALSE +?CND1: CALL META-LOC,SHARON >L + REMOVE SHARON + CALL ROB,SHARON,GLOBAL-SHARON + FCLEAR FILE-DRAWER,NDESCBIT + FCLEAR PAPERS,NDESCBIT + CALL SHARON-PASSES-YOU?,L + ZERO? STACK /FALSE + CALL SUDDENLY-SHARON,L + PRINTI "really must go now, " + CALL PRINT-NAME,FIRST-NAME + PRINTI ". I'll see you later.""" + CRLF + EQUAL? HERE,OFFICE \TRUE + PRINTI "She leaves through the " + PRINTD OFFICE-DOOR + PRINTR "." + + + .FUNCT ROB,WHAT,THIEF,N,X + FIRST? WHAT >X /?KLU6 +?KLU6: +?PRG1: ZERO? X /TRUE + NEXT? X >N /?KLU7 +?KLU7: MOVE X,THIEF + FCLEAR X,TAKEBIT + SET 'X,N + JUMP ?PRG1 + + + .FUNCT SUDDENLY-SHARON,L + PRINTI " +Suddenly Sharon " + EQUAL? L,HERE /?ELS5 + PRINTI "passes by and says" + JUMP ?CND3 +?ELS5: PRINTI "leaves, saying" +?CND3: PRINTI ", ""I " + RTRUE + + + .FUNCT I-SHARON-TO-HALLWAY,L + CALL QUEUE,I-SHARON-TO-HALLWAY,0 + CALL META-LOC,SHARON >L + MOVE SHARON,HALLWAY + CALL SHARON-PASSES-YOU?,L + ZERO? STACK /?CND1 + CALL SUDDENLY-SHARON,L + PRINTI "must go back to my office now, " + CALL PRINT-NAME,FIRST-NAME + PRINTI ".""" + CRLF +?CND1: CALL I-SHARON,G-REACHED + RSTACK + + + .FUNCT I-SHARON,GARG=0,L + LOC SHARON >L + EQUAL? GARG,G-REACHED \FALSE + EQUAL? L,HALLWAY \FALSE + MOVE SHARON,OFFICE + FSET SHARON,NDESCBIT + FSET FILE-DRAWER,NDESCBIT + FSET PAPERS,NDESCBIT + FSET? VIDEOPHONE,ONBIT \FALSE + FCLEAR VIDEOPHONE,ONBIT + FSET VIDEOPHONE,MUNGBIT + CALL PHONE-OFF + SET 'SHARON-BROKE-CIRCUIT,1 + FSET CIRCUIT-BREAKER,MUNGBIT + FSET CIRCUIT-BREAKER,OPENBIT + SET 'MONSTER-GONE,1 + CALL IN-LAB?,HERE + ZERO? STACK /?CND16 + CRLF + PRINTI "Something's wrong! The picture vanished from your " + PRINTD VIDEOPHONE + PRINTI " screen, and the sound conked out! +" + CALL TIP-SAYS + PRINTI "That's strange! Maybe you should use the " + PRINTD COMPUTESTOR + PRINTI ".""" + CRLF +?CND16: CALL SCORE-UPD,-3 + RTRUE + + + .FUNCT TIP-SAYS,QUIET=0 + PRINTI "Tip s" + IN? TIP,HERE \?ELS5 + PRINTI "ays" + JUMP ?CND3 +?ELS5: PRINTI "houts" +?CND3: ZERO? QUIET /?CND12 + PRINTI " quietly" +?CND12: PRINTI ", """ + RTRUE + + + .FUNCT NOT-NOW?,BLY?=1 + ZERO? BLY? /?ELS5 + ZERO? BLY-PRIVATELY-DELAY \TRUE +?ELS5: FSET? BLY,MUNGBIT /TRUE + ZERO? GREENUP-ESCAPE \TRUE + EQUAL? HERE,CRAWL-SPACE,SUB /TRUE + RFALSE + + + .FUNCT I-BLY-PRIVATELY + CALL READY-FOR-SNARK? + ZERO? STACK \FALSE + ZERO? ZOE-MENTIONED-EVIDENCE \FALSE + CALL NOT-NOW? + ZERO? STACK /?CND8 + SET 'BLY-PRIVATELY-DELAY,0 + CALL QUEUE,I-BLY-PRIVATELY,7 + RFALSE +?CND8: SET 'BLY-PRIVATELY-DELAY,1 + MOVE PRIVATE-MATTER,GLOBAL-OBJECTS + CRLF + PRINTI "Suddenly " + PRINTD BLY + PRINTI " " + CALL META-LOC,BLY + EQUAL? STACK,HERE /?CND13 + MOVE BLY,HERE + PRINTI "comes over and " +?CND13: ZERO? BLY-PRIVATELY-COUNT \?ELS20 + PRINTI "say" + JUMP ?CND18 +?ELS20: PRINTI "repeat" +?CND18: PRINTI "s, """ + CALL PRINT-NAME,FIRST-NAME + PRINTI ", can we discuss a " + PRINTD PRIVATE-MATTER + PRINTI " now?""" + INC 'BLY-PRIVATELY-COUNT + CALL YES? + ZERO? STACK \?CND29 + CALL QUEUE,I-BLY-PRIVATELY,7 + RFALSE +?CND29: CALL ASK-BLY-ABOUT-PRIVATE-MATTER + RTRUE + + + .FUNCT I-BLY-SAYS,ASKED?=0,L + ZERO? ASKED? /?ELS3 + CALL QUEUE,I-BLY-SAYS,0 + JUMP ?CND1 +?ELS3: CALL READY-FOR-SNARK? + ZERO? STACK \FALSE + CALL NOT-NOW? + ZERO? STACK /?CND1 + SET 'BLY-PRIVATELY-DELAY,0 + CALL QUEUE,I-BLY-SAYS,7 + RFALSE +?CND1: SET 'BLY-PRIVATELY-DELAY,1 + CALL META-LOC,BLY >L + ZERO? ASKED? \?THN14 + EQUAL? L,BLY-OFFICE \?ELS13 + EQUAL? L,HERE \?ELS13 +?THN14: ZERO? ASKED? \?CND18 + CRLF +?CND18: PRINTI """" + CALL PRINT-NAME,FIRST-NAME + PRINTI ","" says Zoe, ""we could be in danger! The Snark may attack again any time! Would you answer some questions?""" + CALL YES? + ZERO? STACK \?CND23 + ZERO? ASKED? \TRUE + CALL QUEUE,I-BLY-SAYS,3 + PUT STACK,0,1 + RFALSE +?CND23: PRINTI """Can you use the " + PRINTD SUB + PRINTI " to hunt the " + PRINTD GLOBAL-SNARK + PRINTI ", instead of waiting for it to attack?""" + CALL YES? + ZERO? STACK /?CND34 + PRINTI """Do you wish to arm the " + PRINTD SUB + PRINTI " for attacking?""" + CALL YES? + ZERO? STACK /?CND34 + CALL TELL-HINT,73,CLAW,0 + CALL TELL-HINT,72,DART + EQUAL? HERE,DOME-LAB /?CND39 + PRINTI " +""If you want to think it over, we should go to the " + PRINTD DOME-LAB + PRINTI ". Shall we go now?""" + CALL YES? + ZERO? STACK /?CND34 + PRINTI """Okay, let's go."" + +" + IN? BLACK-BOX,BLY \?CND52 + MOVE BLACK-BOX,HERE +?CND52: SET 'WINNER,PLAYER + CALL GOTO,DOME-LAB + ZERO? STACK /?CND39 + MOVE BLY,DOME-LAB +?CND39: +?CND34: RETURN 2 +?ELS13: CALL QUEUE,I-BLY-SAYS,3 + PUT STACK,0,1 + RFALSE + + + .FUNCT I-TIP-SAYS + EQUAL? TIP-SAYS-2,MAGAZINE \?ELS5 + FSET? MAGAZINE,TOUCHBIT /FALSE +?ELS5: ZERO? TIP-SAYS-1 /FALSE + CALL META-LOC,MAGAZINE + EQUAL? STACK,SUB,CRAWL-SPACE \FALSE + CALL TELL-HINT,TIP-SAYS-1,TIP-SAYS-2 + RSTACK + + + .FUNCT I-TIP-SONAR-PLAN,P + FSET? TIP,BUSYBIT \?ELS3 + CALL QUEUE,I-TIP-SONAR-PLAN,3 + RFALSE +?ELS3: CALL READY-FOR-SNARK? + ZERO? STACK /?CND1 + CALL QUEUE,I-TIP-SONAR-PLAN,0 + RFALSE +?CND1: CALL FIND-FLAG,HERE,PERSON,PLAYER >P + ZERO? P \?ELS10 + CALL TIP-COMES + RSTACK +?ELS10: EQUAL? P,TIP \?ELS12 + REMOVE PLAYER + CALL FIND-FLAG,HERE,PERSON,TIP >P + MOVE PLAYER,HERE + CALL TIP-COMES,P + RSTACK +?ELS12: CALL TIP-COMES,1 + RSTACK + + + .FUNCT MIKE-1-F,OBJ,FOO=0 + ZERO? FOO \?ELS5 + PRINTI """Is " + PRINTD OBJ + PRINTI " a suspect?""" + RTRUE +?ELS5: PRINTI """Do you think " + PRINTD OBJ + PRINTI " could be the " + PRINTD TRAITOR + PRINTI "?""" + RTRUE + + + .FUNCT TIP-COMES,ALMOST=0 + ZERO? SIEGEL-TESTED \FALSE + FSET? SIEGEL,BUSYBIT /FALSE + ZERO? GREENUP-ESCAPE \FALSE + ZERO? GREENUP-TRAPPED \FALSE + ZERO? GREENUP-CUFFED \FALSE + EQUAL? HERE,SUB,CRAWL-SPACE /?THN12 + FSET? TIP,BUSYBIT \?ELS11 +?THN12: CALL QUEUE,I-TIP-SONAR-PLAN,3 + RFALSE +?ELS11: ZERO? ALMOST /?CND1 + MOVE TIP,HERE + CALL INT,I-TIP-SONAR-PLAN + GET STACK,1 >ALMOST + GRTR? ALMOST,-1 /?THN20 + SUB 0,ALMOST + MOD STACK,7 + EQUAL? STACK,2 \FALSE +?THN20: CALL TIP-SAYS,1 + CALL PRINT-NAME,FIRST-NAME + PRINTI ", I'd like to talk with you alone.""" + CRLF + GRTR? ALMOST,-1 \TRUE + CALL QUEUE,I-TIP-SONAR-PLAN,-1 + RTRUE +?CND1: CALL QUEUE,I-TIP-SONAR-PLAN,0 + CRLF + ZERO? BLACK-BOX-EXAMINED \?CND29 + CALL TELL-HINT,11,BLACK-BOX +?CND29: MOVE TIP,HERE + CALL TIP-SAYS,1 + CALL PRINT-NAME,FIRST-NAME + PRINTI ", did " + PRINTD BLY + PRINTI " mention any troublemakers among the " + PRINTD CREW + PRINTI "?""" + CALL YES? + ZERO? STACK /TRUE + PRINTI """Do you suspect " + PRINTD ANTRIM + PRINTI " or " + PRINTD HORVAK + PRINTI " or " + PRINTD SIEGEL + PRINTI "?""" + CALL YES? + ZERO? STACK /TRUE + PRINTI """Marv maintains the " + PRINTD SONAR-EQUIPMENT + PRINTI ","" " + CALL TIP-SAYS + PRINTI "and we'll need it to warn us if the " + PRINTD SNARK + PRINTI " comes back. Didn't Zoe say something is wrong with it?""" + CALL YES? + ZERO? STACK /TRUE + PRINTI """" + CALL PRINT-NAME,FIRST-NAME + PRINTI ", do you think someone tampered with it?""" + CALL YES? + ZERO? STACK /TRUE + PRINTI """Does Marv suspect you've discovered signs of tampering?""" + CALL YES? + ZERO? STACK \TRUE + CALL THIS-IS-IT,TIP-IDEA + PRINTI """Then I have an idea how to trap Marv and find out if he's the " + PRINTD TRAITOR + PRINTI "!""" + CRLF + RTRUE + + + .FUNCT REACTION-MAY-BE,PER + PRINTD PER + PRINTI "'s reaction may be all you need to prove he's NOT the " + PRINTD TRAITOR + PRINTR ". But you'll have to decide for yourself." + + + .FUNCT SIEGEL-BOX + PRINTR "It will modulate the sonar's ultrasonic pulses!""" + + + .FUNCT I-SIEGEL-REPORTS + ZERO? DOME-AIR-BAD? /?CND1 + CALL QUEUE,I-SIEGEL-REPORTS,3 + PUT STACK,0,1 + RFALSE +?CND1: FCLEAR SIEGEL,BUSYBIT + IN? SIEGEL,COMM-BLDG \FALSE + CALL MOVE-HERE-NOT-SUB,SIEGEL + IN? BLACK-BOX,SONAR-EQUIPMENT /?CND8 + PRINTI "Suddenly " + PRINTD SIEGEL + PRINTI " reports: ""The " + PRINTD SONAR-EQUIPMENT + PRINTI " looks okay to me, " + CALL PRINT-NAME,FIRST-NAME + PRINTR ".""" +?CND8: EQUAL? HERE,COMM-BLDG \?ELS15 + PRINTI "Suddenly " + PRINTD SIEGEL + PRINTI " turns to you" + JUMP ?CND13 +?ELS15: IN? TIP,HERE \?CND20 + CALL TIP-SAYS + CALL PRINT-NAME,FIRST-NAME + PRINTI ", here comes Marv, and he looks excited!"" +" +?CND20: PRINTI "Marv comes running up to you" +?CND13: PRINTI " with the " + PRINTD BLACK-BOX + PRINTI " and says: ""Look" + MOVE BLACK-BOX,SIEGEL + ZERO? SIEGEL-TESTED /?ELS31 + PRINTI "! I found the same " + PRINTD BLACK-BOX + PRINTI " on the " + PRINTD SONAR-EQUIPMENT + PRINTR " again!""" +?ELS31: SET 'SIEGEL-TESTED,1 + PRINTI " what I found attached to the " + PRINTD SONAR-EQUIPMENT + PRINTI ", " + CALL PRINT-NAME,FIRST-NAME + PRINTI "! " + CALL SIEGEL-BOX + IN? TIP,HERE \TRUE + CALL TIP-FLASHES + CALL REACTION-MAY-BE,SIEGEL + PRINTI " +Tip snaps his fingers and says: """ + CALL PRINT-NAME,FIRST-NAME + PRINTI "! Didn't that article in the " + PRINTD MAGAZINE + PRINTI " say " + PRINTD THORPE + PRINTI "'s synthetic sea creatures reacted to ultrasonic pulses in a special way?""" + CALL QUEUE,I-TIP-PRIVATELY,1 + PUT STACK,0,1 + CALL YES? + ZERO? STACK /?ELS46 + PRINTR """That's what I thought.""" +?ELS46: PRINTI """I think you should check that.""" + CRLF + RTRUE + + + .FUNCT I-TIP-PRIVATELY + CALL READY-FOR-SNARK? + ZERO? STACK \?THN4 + ZERO? ANTRIM-CHECKED-SUB /?ELS3 +?THN4: CALL QUEUE,I-TIP-PRIVATELY,0 + RFALSE +?ELS3: FSET? TIP,BUSYBIT \?CND1 + CALL QUEUE,I-TIP-PRIVATELY,3 + PUT STACK,0,1 + RFALSE +?CND1: MOVE TIP,HERE + CRLF + PRINTI "Tip draws you aside. ""Could I speak to you privately, " + CALL PRINT-NAME,FIRST-NAME + PRINTI "?""" + CALL YES? + ZERO? STACK \?CND10 + CALL QUEUE,I-TIP-PRIVATELY,3 + PUT STACK,0,1 + RFALSE +?CND10: PRINTI """The Snark could be a synthetic monster created by " + PRINTD THORPE + PRINTI "!"" he says when you're alone. ""I read about them in that magazine. If I'm right, whoever attached the " + PRINTD BLACK-BOX + PRINTI " to the " + PRINTD SONAR-EQUIPMENT + PRINTI " could be working for Thorpe! That way the " + PRINTD GLOBAL-SNARK + PRINTI " would be lured into attacking the " + PRINTD AQUADOME + PRINTI "! Do you agree, " + CALL PRINT-NAME,FIRST-NAME + PRINTI "?""" + CALL YES? + ZERO? STACK \?CND15 + PRINT RECONSIDER? + PRINTI """" + CRLF +?CND15: CALL MIKE-1-F,ANTRIM,1 + CALL YES? + ZERO? STACK \?ELS22 + PRINT RECONSIDER? + PRINTI " In fact " + JUMP ?CND20 +?ELS22: PRINTI """Then " +?CND20: PRINTI "why not test him" + ZERO? SIEGEL-TESTED /?CND31 + PRINTI ", since you tested " + PRINTD SIEGEL +?CND31: PRINTI "?"" Tip asks. ""Mick is a laser expert in charge of maintenance on subs at the " + PRINTD AQUADOME + PRINTI ".""" + CRLF + IN? PRIVATE-MATTER,GLOBAL-OBJECTS \?CND39 + CALL TELL-HINT,12,OVERHEATING,0 + ZERO? REGULATOR-MSG-SEEN /?CND39 + CALL TELL-HINT,43,ANTRIM,0 +?CND39: CALL TELL-HINT,22,ANTRIM,0 + RSTACK + + + .FUNCT I-ANTRIM-TO-SUB,STR=0 + CALL READY-FOR-SNARK? + ZERO? STACK \FALSE + ZERO? ANTRIM-CHECKED-SUB \FALSE + ZERO? STR /?ELS8 + JUMP ?CND1 +?ELS8: CALL NOT-NOW?,0 + ZERO? STACK /?CND1 + CALL QUEUE,I-ANTRIM-TO-SUB,3 + RFALSE +?CND1: FSET? VOLTAGE-REGULATOR,MUNGBIT \?ELS14 + CALL QUEUE,I-ANTRIM-REPORTS,9 + PUT STACK,0,1 + JUMP ?CND12 +?ELS14: CALL QUEUE,I-ANTRIM-REPORTS,19 + PUT STACK,0,1 +?CND12: SET 'ANTRIM-CHECKED-SUB,1 + IN? BLY,HERE \?CND17 + SET 'BLY-HEARD-ANTRIM,1 +?CND17: FSET ANTRIM,BUSYBIT + ZERO? STR /?ELS22 + PRINT STR + JUMP ?CND20 +?ELS22: PRINTI " +Suddenly " + PRINTD ANTRIM + IN? ANTRIM,HERE /?CND30 + PRINTI " appears and" +?CND30: PRINTI " says, ""I'm going to check out your new " + PRINTD SUB + PRINTI ", " +?CND20: CALL PRINT-NAME,FIRST-NAME + PRINTI "!"" Mick turns and " + MOVE ANTRIM,CRAWL-SPACE + FSET ENGINE-ACCESS-HATCH,OPENBIT + EQUAL? HERE,SUB,CRAWL-SPACE \?ELS43 + PRINTR "goes to work." +?ELS43: EQUAL? HERE,AIRLOCK \?ELS47 + PRINTI "climbs aboard the " + PRINTD SUB + PRINTR "." +?ELS47: PRINTI "hurries toward the " + PRINTD AIRLOCK + PRINTR "." + + + .FUNCT TIP-FLASHES + ZERO? TIP-FLASHED /?CND1 + PRINTI "Once again " +?CND1: SET 'TIP-FLASHED,1 + PRINTI "Tip flashes you a meaningful glance. " + RTRUE + + + .FUNCT I-ANTRIM-REPORTS + ZERO? DOME-AIR-BAD? /?CND1 + CALL QUEUE,I-ANTRIM-REPORTS,3 + RFALSE +?CND1: FCLEAR ANTRIM,BUSYBIT + CALL MOVE-HERE-NOT-SUB,ANTRIM + CRLF + ZERO? ASKED-ANTRIM /?ELS8 + PRINTD ANTRIM + PRINTI " reports back " + EQUAL? HERE,SUB,AIRLOCK \?ELS14 + PRINTI "to you" + JUMP ?CND12 +?ELS14: PRINTI "from the " + PRINTD AIRLOCK +?CND12: FSET? VOLTAGE-REGULATOR,MUNGBIT \?ELS23 + PRINTI ". +""I think I found your " + PRINTD OVERHEATING + PRINTI " problem. The " + PRINTD VOLTAGE-REGULATOR + PRINTI " was making the lasers overcharge. +I've adjusted it, but I could replace it. Want me to?""" + CALL YES? + ZERO? STACK /?CND6 + FCLEAR VOLTAGE-REGULATOR,MUNGBIT + JUMP ?CND6 +?ELS23: PRINTI ", looking somewhat puzzled. +""" + CALL PRINT-NAME,FIRST-NAME + PRINTI ", I ran the " + PRINTD ENGINE + PRINTI " on full, but it didn't overheat. +The " + PRINTD VOLTAGE-REGULATOR + PRINTI " PROBABLY got out of adjustment and overcharged the lasers, but it seems okay now. Just to be safe, I installed a new " + PRINTD VOLTAGE-REGULATOR + PRINTI ". +" + JUMP ?CND6 +?ELS8: ZERO? BLY-HEARD-ANTRIM \?THN38 + LOC BLY + EQUAL? HERE,SUB,BLY-OFFICE,STACK \?ELS37 +?THN38: PRINTI "Suddenly " + JUMP ?CND35 +?ELS37: CALL MOVE-HERE-NOT-SUB,BLY + PRINTD BLY + PRINTI " is approaching. +""" + CALL PRINT-NAME,FIRST-NAME + PRINTI ", did you send " + PRINTD ANTRIM + PRINTI " to work on the " + PRINTD SUB + PRINTI "?"" she asks. ""I was just " + EQUAL? HERE,BLY-OFFICE /?CND46 + PRINTI "in my office, " +?CND46: PRINTI "checking the " + PRINTD STATION-MONITOR + PRINTI " to see what each of the crew was doing, and I discovered Mick had gone to the " + PRINTD AIRLOCK + PRINTI ". When I saw him on the " + PRINTD STATION-MONITOR + PRINTI ", he had just come out of the " + PRINTD SUB + PRINTI "'s hatch. +Wait -- here he is now!"" +" +?CND35: PRINTI "Mick appears and says, ""I thought maybe you had a problem on the way here, " + CALL PRINT-NAME,FIRST-NAME + PRINTI ", so I wanted to check on it. Everything seems to be okay now.""" + CRLF +?CND6: CALL TIP-FLASHES + FSET? VOLTAGE-REGULATOR,MUNGBIT \?ELS57 + SET 'TEST-BUTTON-READOUT,TEST-BUTTON-NORMAL + PRINTI "It now looks as though " + PRINTD ANTRIM + PRINTI " can be eliminated as the " + PRINTD TRAITOR + PRINTI ", but you'll want to confirm this by pushing the " + PRINTD TEST-BUTTON + PRINTI " before you set out again in the " + PRINTD SUB + PRINTI ". +" + JUMP ?CND55 +?ELS57: CALL REACTION-MAY-BE,ANTRIM +?CND55: FCLEAR VOLTAGE-REGULATOR,MUNGBIT + CALL READY-FOR-SNARK? + ZERO? STACK \TRUE + IN? ESCAPE-POD-UNIT,SUB /TRUE + CRLF + PRINTD ANTRIM + PRINTI " turns away, then stops and says: +""" + CALL PRINT-NAME,FIRST-NAME + PRINTI ", there's no " + PRINTD ESCAPE-POD-UNIT + PRINTI " under your seats in the " + PRINTD SUB + PRINTI ". I hear you're planning a new type of unit for the Ultramarine Bioceptor. But the standard unit will fit, and we have one in the " + PRINTD DOME-STORAGE + PRINTI ". +Would you like one installed, just in case? " + PRINTD GREENUP + PRINTI " and " + PRINTD LOWELL + PRINTI " could do it in a few minutes. Shall I tell 'em to?""" + CALL YES? + ZERO? STACK /?CND70 + CALL META-LOC,LOWELL + MOVE ANTRIM,STACK + CALL INSTALL-ESCAPE-POD-UNIT,ANTRIM + RTRUE +?CND70: PRINTR """I sure hope you don't need it.""" + + + .FUNCT INSTALL-ESCAPE-POD-UNIT,PER,X=0,?TMP1 + PRINTI """Okay" + LOC LOWELL >?TMP1 + LOC GREENUP + EQUAL? HERE,?TMP1,STACK \?CND3 + PRINTI ", we'll install it" +?CND3: PRINTI ".""" + CRLF + LOC SYRINGE + EQUAL? STACK,LOWELL,GREENUP,ESCAPE-POD-UNIT \?ELS14 + SET 'X,1 + LOC ESCAPE-POD-UNIT + EQUAL? STACK,LOWELL,GREENUP,DOME-STORAGE \?ELS14 + CALL SCORE-OBJ,ESCAPE-POD-UNIT + MOVE GREENUP,SUB + MOVE LOWELL,SUB + FSET GREENUP,BUSYBIT + FSET LOWELL,BUSYBIT + MOVE ESCAPE-POD-UNIT,LOWELL + MOVE SYRINGE,GREENUP + FSET SYRINGE,MUNGBIT + CALL QUEUE,I-LOWELL-REPORTS,12 + PUT STACK,0,1 + RTRUE +?ELS14: PRINTI "But " + CALL HE-SHE-IT,PER + MOVE PER,HERE + PRINTI " returns a moment later and says, ""We can't find the " + ZERO? X /?ELS25 + PRINTD ESCAPE-POD-UNIT + JUMP ?CND23 +?ELS25: PRINTD SYRINGE +?CND23: PRINTR ".""" + + + .FUNCT I-LOWELL-REPORTS + CALL NOT-NOW?,0 + ZERO? STACK /?CND1 + CALL QUEUE,I-LOWELL-REPORTS,3 + RFALSE +?CND1: MOVE ESCAPE-POD-UNIT,SUB + FCLEAR ESCAPE-POD-UNIT,TAKEBIT + FSET ESCAPE-POD-UNIT,OPENBIT + MOVE SYRINGE,ESCAPE-POD-UNIT + SET 'TEST-BUTTON-READOUT,TEST-BUTTON-POD + MOVE GREENUP,HERE + MOVE LOWELL,HERE + FCLEAR GREENUP,BUSYBIT + FCLEAR LOWELL,BUSYBIT + PRINTI " +Suddenly " + PRINTD GREENUP + PRINTI " and " + PRINTD LOWELL + PRINTI " report back from the " + EQUAL? HERE,AIRLOCK \?ELS8 + PRINTD SUB + JUMP ?CND6 +?ELS8: PRINTD AIRLOCK +?CND6: PRINTI ". +""That " + PRINTD ESCAPE-POD-UNIT + PRINTI " is in place, " + CALL PRINT-NAME,FIRST-NAME + PRINTR ","" says Amy. ""Bill installed the part under your pilot's seat, and I installed the rest.""" + + + .FUNCT I-ANALYSIS + FCLEAR HORVAK,BUSYBIT + FSET SYRINGE,TAKEBIT + CALL MOVE-HERE-NOT-SUB,HORVAK + ZERO? STACK /?ELS5 + CRLF + FSET? SYRINGE,MUNGBIT /?ELS10 + PRINTI "Suddenly " + PRINTD HORVAK + PRINTI " appears. ""I couldn't find anything unusual about the " + PRINTD SYRINGE + PRINTR ".""" +?ELS10: SET 'GREENUP-GUILT,1 + PRINTD HORVAK + PRINTI "'s face is grim and pale as he reports the result of his analysis. +" + CALL PERFORM,V?ASK-ABOUT,HORVAK,SYRINGE + IN? TIP,HERE \FALSE + PRINTI " +Tip turns to you with a gasp. ""Holy smoke, " + CALL PRINT-NAME,FIRST-NAME + PRINTR "! That's exactly what would have happened once you warmed up the pilot's seat enough to trigger the sensor relay!""" +?ELS5: CALL QUEUE,I-ANALYSIS,2 + RFALSE + + + .FUNCT I-SYNTHESIS + FCLEAR HORVAK,BUSYBIT + MOVE DART,HORVAK + FCLEAR DART,TRYTAKEBIT + FSET DART,TAKEBIT + FCLEAR DART,NDESCBIT + FCLEAR DART,MUNGBIT + CALL THIS-IS-IT,DART + CALL SAID-TO,HORVAK + PRINTI "Doc Horvak " + CALL MOVE-HERE-NOT-SUB,HORVAK,STR?205,STR?206 + PRINTI " holding an aquatic dart gun. " + IN? HORVAK,HERE /?CND5 + PRINTI "He shouts from outside, " +?CND5: PRINTI """Okay, " + CALL PRINT-NAME,FIRST-NAME + PRINTI ", I've made a special 'trank' to use against an AH-type organism! It's loaded in the dart gun. What shall I do with it?""" + CRLF + CALL SCORE-OBJ,DART + RTRUE + + + .FUNCT MOVE-HERE-NOT-SUB,PER,HERE-STR=0,NOT-HERE-STR=0 + IN? PER,HERE \?CND1 + ZERO? HERE-STR /TRUE + PRINT HERE-STR + RTRUE +?CND1: LOC PER + CALL THROUGH-ROOF?,STACK + ZERO? STACK /?CND10 + FSET AIRLOCK-ROOF,OPENBIT +?CND10: EQUAL? PER,SHARON \?CND15 + FCLEAR SHARON,NDESCBIT + FCLEAR FILE-DRAWER,NDESCBIT + FCLEAR PAPERS,NDESCBIT +?CND15: ZERO? NOT-HERE-STR /?CND18 + PRINT NOT-HERE-STR +?CND18: EQUAL? HERE,CRAWL-SPACE,SUB \?ELS28 + ZERO? SUB-IN-TANK /?ELS31 + MOVE PER,NORTH-TANK-AREA + RFALSE +?ELS31: MOVE PER,AIRLOCK + RFALSE +?ELS28: MOVE PER,HERE + RTRUE + + + .FUNCT I-GREENUP-ESCAPE + CALL QUEUE,I-GREENUP-ESCAPE,-1 + PUT STACK,0,1 + INC 'GREENUP-ESCAPE + EQUAL? 3,GREENUP-ESCAPE \?ELS3 + MOVE GREENUP,AIRLOCK + CRLF + PRINTI "Greenup has reached the top of the wall and is climbing down the ladder into the " + PRINTD AIRLOCK + PRINTI ". In a moment he'll reach the floor and head for the " + PRINTD SUB + PRINTI "." + CRLF + RFALSE +?ELS3: EQUAL? 4,GREENUP-ESCAPE \?ELS7 + CRLF + PRINTI "Greenup is scrambling aboard the " + PRINTD SUB + PRINTI ". Tip groans. ""There's no way to stop him now, " + CALL PRINT-NAME,FIRST-NAME + PRINTI "! All he has to do is open the " + PRINTD AIRLOCK-HATCH + PRINTI " and shove off!""" + CRLF + CALL TELL-HINT,52,AIRLOCK-ELECTRICITY,0 + RTRUE +?ELS7: EQUAL? 9,GREENUP-ESCAPE \FALSE + FCLEAR AIRLOCK-ROOF,OPENBIT + FSET AIRLOCK-HATCH,OPENBIT + SET 'AIRLOCK-FULL,1 + CALL QUEUE,I-SNARK-ATTACKS,1 + PRINTI " +Better not raise any false hopes. As the " + PRINTD SUB + PRINTI " glides out, a pall of gloom settles over the " + PRINTD AQUADOME + PRINTI ". All hands sense that there's little hope, that Greenup has scuttled their last chance of fighting off another attack by the " + PRINTD GLOBAL-SNARK + PRINTI ". +A " + PRINTD VIDEOPHONE + PRINTI " call to " + PRINTD IU-GLOBAL + PRINTI " confirms that no other subs are available for a rescue expedition, even if there were time. And a general S.O.S. to any craft in the vicinity isn't answered." + CALL FINISH + RFALSE + + + .FUNCT GREENUP-CUFF + SET 'GREENUP-ESCAPE,0 + SET 'GREENUP-TRAPPED,0 + CALL QUEUE,I-GREENUP-ESCAPE,0 + MOVE GREENUP,GALLEY + FSET GREENUP,MUNGBIT + SET 'GREENUP-CUFFED,1 + PRINTI "Knowing he's trapped, " + PRINTD GREENUP + PRINTI " gives up without a fight. " + PRINTD BLY + PRINTI " orders him handcuffed to a pipe in the " + PRINTD GALLEY + PRINTI "." + CRLF + CALL SCORE-OBJ,GLOBAL-GREENUP + RTRUE + + + .FUNCT I-POISON-JAB + EQUAL? HERE,SUB \FALSE + IN? ESCAPE-POD-UNIT,SUB \FALSE + FSET? SYRINGE,MUNGBIT \FALSE + IN? SYRINGE,ESCAPE-POD-UNIT \FALSE + CRLF + PRINTI "A sudden jab in your right buttock makes you realize that the " + PRINTD SYRINGE + PRINTI " in the " + PRINTD ESCAPE-POD-UNIT + PRINTI " has been activated, even though no alarm sounded. +You realize that the " + PRINTD SYRINGE + PRINTI " did NOT contain a stimulant. Instead of feeling more alert, you're already feeling doomed. +The truth is that you have been fatally poisoned, and the promising career of a brilliant young inventor will be cut short. +An investigation into your death would reveal that the " + PRINTD ESCAPE-POD-UNIT + PRINTI " under your seat had been tampered with. +A body-heat sensor had been substituted for the electronic monitor, and a wire was connected from the sensor to the " + PRINTD SYRINGE + PRINTI ". The stimulant in the " + PRINTD SYRINGE + PRINTI " had been replaced with arsenic stolen from the " + PRINTD CHEMICAL-SUPPLY-SHELVES + PRINTI " of the " + PRINTD DOME-LAB + PRINTI ". +As soon as you heated up your pilot's seat, the sensor triggered the " + PRINTD SYRINGE + PRINTI ", and it injected you with the poison. +Most regrettable!" + CALL FINISH + RSTACK + + + .FUNCT I-TIP-REPORTS,B,D + FSET? BLY,MUNGBIT \?CND1 + CALL QUEUE,I-TIP-REPORTS,3 + RFALSE +?CND1: EQUAL? HERE,CRAWL-SPACE \?ELS8 + MOVE TIP,SUB + JUMP ?CND6 +?ELS8: MOVE TIP,HERE +?CND6: FCLEAR TIP,BUSYBIT + SET 'TIP-FOLLOWS-YOU?,1 + SET 'FINE-SONAR,1 + MOVE FINE-GRID,SUB + FCLEAR FINE-GRID,TAKEBIT + CALL TIP-SAYS + PRINTI "All set, " + CALL PRINT-NAME,FIRST-NAME + PRINTI "! The " + PRINTD FINE-GRID + PRINTI " is installed on both the " + PRINTD SONARSCOPE + PRINTI " and the " + PRINTD THROTTLE + GET ON-SUB,0 + EQUAL? BAZOOKA,STACK /?PRD13 + PUSH 0 + JUMP ?PRD14 +?PRD13: PUSH 1 +?PRD14: SET 'B,STACK + GET ON-SUB,1 + EQUAL? DART,STACK /?PRD15 + PUSH 0 + JUMP ?PRD16 +?PRD15: PUSH 1 +?PRD16: SET 'D,STACK + ZERO? B \?THN20 + ZERO? D /?CND17 +?THN20: PRINTI " -- and so " + ZERO? B /?ELS26 + ZERO? D /?ELS26 + PRINTI "are" + JUMP ?CND24 +?ELS26: PRINTI "is" +?CND24: ZERO? D /?CND35 + PRINTI " the " + PRINTD DART +?CND35: ZERO? B /?CND41 + ZERO? D /?CND41 + PRINTI " and" +?CND41: ZERO? B /?CND17 + PRINTI " the " + PRINTD BAZOOKA +?CND17: PRINTI "! Let's shove off and find the " + PRINTD GLOBAL-SNARK + PRINTR "!""" + + + .FUNCT I-SNARK-ATTACKS + ZERO? SNARK-ATTACK-COUNT \?CND1 + ZERO? SUB-IN-DOME \?ELS6 + EQUAL? JOYSTICK-DIR,P?SE /?THN10 + LESS? SUB-LON,0 \?ELS18 + SUB 0,SUB-LON + JUMP ?CND14 +?ELS18: PUSH SUB-LON +?CND14: LESS? SONAR-RANGE,STACK /?CND7 + LESS? SUB-LAT,0 \?ELS25 + SUB 0,SUB-LAT + JUMP ?CND21 +?ELS25: PUSH SUB-LAT +?CND21: LESS? SONAR-RANGE,STACK /?CND7 +?THN10: CALL QUEUE,I-SNARK-ATTACKS,3 + RFALSE +?CND7: PRINTI "A call comes on the " + EQUAL? HERE,SUB,CRAWL-SPACE \?ELS32 + PRINTD SONARPHONE + JUMP ?CND30 +?ELS32: PRINTD VIDEOPHONE +?CND30: PRINTI " from the " + PRINTD AQUADOME + PRINTI ": the " + PRINTD GLOBAL-SNARK + PRINTI " is attacking and destroying it! You're too late! + +You'll probably do better if you restart and use fewer turns next time." + CALL FINISH + JUMP ?CND1 +?ELS6: CALL QUEUE,I-SNARK-ATTACKS,-1 + PUT STACK,0,1 +?CND1: INC 'SNARK-ATTACK-COUNT + EQUAL? 1,SNARK-ATTACK-COUNT \?ELS47 + MOVE SIEGEL,COMM-BLDG + MOVE TIP,HERE + PRINTI " +Suddenly an alarm rings through the " + PRINTD AQUADOME + PRINTI "! " + PRINTD SIEGEL + PRINTI " yells over the squawk box: +""Now hear this! Two blips have appeared on the " + PRINTD SONAR-EQUIPMENT + PRINTI "! No definite form, but they're large, and they're coming closer." + PRINTI """ +" + CALL TIP-SAYS + PRINTI "One of them must be the " + PRINTD GLOBAL-SNARK + PRINTI "!"" " + EQUAL? HERE,SUB,CRAWL-SPACE,AIRLOCK \?ELS57 + FSET? AIRLOCK-HATCH,OPENBIT \?CND55 + FCLEAR AIRLOCK-HATCH,OPENBIT + PRINTI "The " + PRINTD AIRLOCK-HATCH + PRINTI " closes in defense." + JUMP ?CND55 +?ELS57: CALL GLOBAL-IN?,WINDOW,HERE + ZERO? STACK /?ELS67 + PRINTI """Look out the " + JUMP ?CND65 +?ELS67: PRINTI """Let's find a " +?CND65: PRINTD WINDOW + PRINTI ", " + CALL PRINT-NAME,FIRST-NAME + PRINTI "!""" +?CND55: CRLF + RETURN 2 +?ELS47: EQUAL? 2,SNARK-ATTACK-COUNT \?ELS79 + PRINTI " +Even as you try this, the undersea nightmare takes shape! +""Holy spaghetti! LOOK at that thing!"" cries Tip. +A hideous creature, with bulblike eyes near its snout, rears out of the murk, its tentacles flailing the " + PRINTD GLOBAL-WATER + PRINTI "! In this moment of terror, the " + PRINTD GLOBAL-SNARK + PRINTI " seems as big as a house, and it's just outside the " + PRINTD AQUADOME + PRINTI "!" + CRLF + RETURN 2 +?ELS79: EQUAL? 3,SNARK-ATTACK-COUNT \FALSE + PRINTI " +No more time for that! The " + PRINTD SNARK + PRINTI " has flopped down on the " + PRINTD AQUADOME + PRINTI "! There's a sound like thunder as the plastic hemisphere cracks under the impact! The crew's screams of fear are drowned by the roar of the sea! +The Atlantic Ocean is pouring into the " + PRINTD AQUADOME + PRINTI "! And your last thought, before a zillion tons of " + PRINTD GLOBAL-WATER + PRINTI " crushes you to jelly, is ""Oh gosh! I wonder if I shut off the Bunsen burner in the lab?""" + CALL FINISH + RSTACK + + .ENDI diff --git a/events.zil b/events.zil new file mode 100644 index 0000000..1033cf6 --- /dev/null +++ b/events.zil @@ -0,0 +1,815 @@ +"EVENTS for SEASTALKER +Copyright (C) 1984 Infocom, Inc. All rights reserved." + + )>> + +)) + ;"" + ) + ( + + ) + (> + + ) + (T + )>> + +)> + % " in your +" D ,GAME " package. Read hidden clue #" N " and put +\"" D .OBJ "\" in the blank space.)" CR>> + + + >> + > + )>) + (,SUB-IN-TANK + > + )>> + + + > + )>> + + + + +> + + ) + ( > + ) + ( > + ) + ( + ) + (> + + + ) + ( + )> + >> + )> + )>> + +>> + ) + ( T) + (> + > + > + + <==? .THERE>> + )>)>>> + + > + + )> + > + + + + + + + + + %)> + )>> + +> + )> + > + + + >> + + + > ) + (T )> + > + + + > + + + + )> + > + +> +> + +) "AUX" (L )) + + + + + + + + + + + ;"" + + + + ;)> + + + % + + )> + + )>)>)>> + +)) + + ) (T )> + )> + > + + +> + + + ) + ( + ,GREENUP-ESCAPE + > + )>> + + + )> + )> + + > + + )> + + + + ,HERE>> + + )> + ) + (T )> + % + + > )> + + > + +) "AUX" L) + ) + ( + ) + ( + > + + )> + + > + + >> + )> + % + > + ) + (T > )>)> + % + + % + + > + > + > + % + + + + )> + + + )>)>)>)>)> + ) + (T + > + )>> + + + + + > + ) + ( ,SUB ,CRAWL-SPACE>> + )>> + + + + ) + ( + + )> + > + ) + (<==? .P ,TIP> + + > + + ) + (T + )>> + +)) + + ) + (T + )>> + +)) + > + ) + ( + ) + ( > + + ) + (.ALMOST + + 1>> + + 7> 2>> + + + + )> + ) + (T )>)> + + + )> + + + % + + + + % + + + + % + + % + > + + %)>)>)>)>)> + > + +> + +> + +> + +> + )> + + > )> + + > + % + )> + + ) + (T + + + %)> + )> + % + + ) + (T + + % + + + + + % + > + ) + (T )>)>)> + > + + + + + ,ANTRIM-CHECKED-SUB> + + ) + ( + > + )> + + % + > > )> + % + > + )> + + > + %) + (T )> + + )> + % + + > + >)>)> + >> + +> +)) + + ) + (,ANTRIM-CHECKED-SUB ) + (.STR T) + (> + + )> + + >) + (T + >)> + + )> + + ) + (T + + > )> + )> + % + + + + ) + ( + ) + (T + ;"" + )>> + +> +)> + + %> + +)> + "> + + )> + + + + + ) + (T )> + + % + )>) + (T %)>) + (T + >> + ) + (T + + % + > + )> + %)> + )> + + + + %) + (T )> + + + )> + )> + % + + > + + )> + > + +)) + + > + )> + + + ,LOWELL ,GREENUP ,ESCAPE-POD-UNIT> + + + ,LOWELL ,GREENUP ,DOME-STORAGE>> + + + + + + + + + >) + (T + + + + + ) (T )> + )>> + +> + + )> + + + + + + + + + + % + ) + (T )> + %> + +> + + + + + > + ) + (T + + % + + + %)>)>) + (T + + )>> + + + + + + + ;"indicates dart fixed" + + + + + % + > )> + % + + > + +) (NOT-HERE-STR <>)) + + )> + )> + >" + >> + )> + + + + )> + )> + + ) + (T )> + ) + (T )>> + +> + > + + + %) + ( + % + > + ) + ( + + + + + % + )> + > + + + > + + + + + % + + > + + + + + > + % + )>> + + + ;""> + + )> + ) + (T )> + + + + + + + + >> + >> + + + ) + (T )> + )> + )> + )>)> + %> + + + + + + + >> + >>>> + + )> + % ;"[more?]" + + ) + (T )> + % + ) + (T >)>)> + + + + + % + " + + )> + + + + %)>) + (T + + ) + (T )> + )> + + ) + (<==? 2 ,SNARK-ATTACK-COUNT> + % + ) + (<==? 3 ,SNARK-ATTACK-COUNT> + % + )>> diff --git a/global.zap b/global.zap new file mode 100644 index 0000000..4134d42 --- /dev/null +++ b/global.zap @@ -0,0 +1,1173 @@ + + + .FUNCT DO-INSTEAD-OF,OBJ1,OBJ2 + EQUAL? PRSI,OBJ2 \?ELS5 + CALL PERFORM,PRSA,PRSO,OBJ1 + RSTACK +?ELS5: EQUAL? PRSO,OBJ2 \?ELS7 + CALL PERFORM,PRSA,OBJ1,PRSI + RSTACK +?ELS7: CALL V-FOO + ZERO? STACK /FALSE + RTRUE + + + .FUNCT TURN-F + EQUAL? PRSA,V?USE \FALSE + CALL PERFORM,V?WAIT-FOR,PRSO + RTRUE + + + .FUNCT IT-F + EQUAL? PRSI,IT \?THN10 + EQUAL? PRSA,V?TELL-ABOUT /?THN10 + EQUAL? PRSA,V?SEARCH-FOR,V?ASK-FOR,V?ASK-ABOUT /?THN14 +?THN10: EQUAL? PRSO,IT \FALSE + EQUAL? PRSA,V?WHAT /?THN14 + EQUAL? PRSA,V?FIND,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT \FALSE +?THN14: PRINTR """I'm not sure what you're talking about.""" + + + .FUNCT FLOOR-F + EQUAL? PRSA,V?PUT \?ELS5 + EQUAL? PRSI,FLOOR \?ELS5 + CALL PERFORM,V?DROP,PRSO + RTRUE +?ELS5: EQUAL? PRSA,V?WALK-TO,V?THROUGH \?ELS9 + ZERO? SUB-IN-TANK /FALSE + CALL PERFORM,PRSA,TEST-TANK + RTRUE +?ELS9: EQUAL? PRSA,V?LOOK-ON,V?SEARCH,V?EXAMINE \FALSE + PRINTR "You don't find anything new there." + + + .FUNCT GLOBAL-SNARK-F + EQUAL? PRSA,V?FIND,V?EXAMINE \?ELS5 + ZERO? SNARK-ATTACK-COUNT \TRUE +?ELS5: EQUAL? PRSA,V?FIND \FALSE + ZERO? MONSTER-GONE \FALSE + PRINTI "It's attacking the " + PRINTD AQUADOME + PRINTR "!" + + + .FUNCT MIKE-3-F,OBJ + PRINTI "The " + PRINTD OBJ + PRINTI " is mounted on " + CALL PRINTA,CLAW + PRINTR "." + + + .FUNCT CANT-SEND + PRINTR "You can't send it. Only you can pilot it there." + + + .FUNCT LOCAL-SUB-F + EQUAL? PRSA,V?PUT \?ELS5 + CALL MORE-SPECIFIC + RSTACK +?ELS5: EQUAL? PRSA,V?SEARCH-FOR,V?SEARCH \?ELS7 + CALL DO-INSTEAD-OF,SUB,LOCAL-SUB + RTRUE +?ELS7: EQUAL? PRSA,V?EXAMINE \?ELS9 + GET ON-SUB,0 + ZERO? STACK \?CND10 + GET ON-SUB,1 + ZERO? STACK \?CND10 + GETP LOCAL-SUB,P?TEXT + PRINT STACK + CRLF + RTRUE +?CND10: GET ON-SUB,0 + ZERO? STACK /?CND17 + GET ON-SUB,0 + CALL MIKE-3-F,STACK +?CND17: GET ON-SUB,1 + ZERO? STACK /TRUE + GET ON-SUB,1 + CALL MIKE-3-F,STACK + RTRUE +?ELS9: EQUAL? PRSA,V?FIND \?ELS24 + CALL INT,I-SEND-SUB + PUT STACK,0,0 + PRINTR "It's right here!" +?ELS24: EQUAL? PRSA,V?LOOK-BEHIND /?THN29 + EQUAL? PRSA,V?LOOK-OUTSIDE \?ELS28 + EQUAL? HERE,SUB \?ELS28 +?THN29: CALL PERFORM,V?LOOK-OUTSIDE,SUB-WINDOW + RTRUE +?ELS28: EQUAL? PRSA,V?LOOK-INSIDE \?ELS34 + EQUAL? HERE,SUB,CRAWL-SPACE \?ELS39 + CALL PERFORM,V?LOOK + RTRUE +?ELS39: PRINTR "You can't see much from here." +?ELS34: EQUAL? PRSA,V?SEND-TO,V?SEND-OUT,V?SEND \?ELS45 + EQUAL? PRSO,LOCAL-SUB \?ELS45 + CALL CANT-SEND + RSTACK +?ELS45: EQUAL? PRSA,V?BOARD,V?THROUGH \?ELS49 + EQUAL? HERE,SUB,CRAWL-SPACE \?ELS54 + CALL ALREADY,WINNER,STR?123 + RSTACK +?ELS54: EQUAL? HERE,AIRLOCK-WALL \?ELS56 + CALL GOTO,AIRLOCK + ZERO? STACK /FALSE + CALL GOTO,SUB + ZERO? STACK /TRUE + EQUAL? WINNER,PLAYER /TRUE + CALL OKAY + RTRUE +?ELS56: EQUAL? HERE,WEST-TANK-AREA,SOUTH-TANK-AREA \?ELS68 + GETP WEST-TANK-AREA,P?EAST + PRINT STACK + CRLF + RTRUE +?ELS68: CALL DO-WALK,P?IN + RTRUE +?ELS49: EQUAL? PRSA,V?RAISE,V?DROP,V?DISEMBARK \?ELS74 + EQUAL? HERE,SUB,CRAWL-SPACE /?ELS79 + PRINTR "You're not in it!" +?ELS79: EQUAL? PRSA,V?DROP \?ELS83 + CALL DO-WALK,P?DOWN + RTRUE +?ELS83: EQUAL? PRSA,V?RAISE \?ELS85 + CALL DO-WALK,P?UP + RTRUE +?ELS85: CALL DO-WALK,P?OUT + RTRUE +?ELS74: EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS89 + EQUAL? HERE,CRAWL-SPACE,AIRLOCK-WALL /?ELS89 + CALL PERFORM,PRSA,SUB-DOOR + RTRUE +?ELS89: EQUAL? PRSA,V?ANALYZE \?ELS93 + EQUAL? PRSI,DAMAGE,GLOBAL-SABOTAGE,0 \?ELS93 + PRINTI "You can do this by pushing the " + PRINTD TEST-BUTTON + EQUAL? HERE,SUB,CRAWL-SPACE /?CND98 + PRINTI " on the " + PRINTD CONTROLS + PRINTI " inside" +?CND98: PRINTR "." +?ELS93: EQUAL? PRSA,V?LAMP-ON \?ELS106 + EQUAL? HERE,SUB /?ELS111 + CALL THIS-IS-IT,SUB + PRINTI "You have to be in the " + PRINTD SUB + PRINTR " to start it." +?ELS111: FSET? REACTOR,ONBIT /?ELS115 + CALL THIS-IS-IT,REACTOR + PRINTR "The reactor is off!" +?ELS115: ZERO? SUB-IN-TANK /?ELS123 + ZERO? TEST-TANK-FULL \?ELS123 + CALL THIS-IS-IT,TEST-TANK + ZERO? STACK \?THN120 +?ELS123: ZERO? SUB-IN-DOME /?ELS119 + ZERO? AIRLOCK-FULL \?ELS119 + CALL THIS-IS-IT,AIRLOCK + ZERO? STACK /?ELS119 +?THN120: PRINTR "The tank is empty!" +?ELS119: ZERO? SUB-IN-TANK /?ELS133 + FSET? TANK-GATE,OPENBIT /?ELS133 + CALL THIS-IS-IT,TANK-GATE + ZERO? STACK \?THN130 +?ELS133: ZERO? SUB-IN-DOME /?ELS129 + FSET? AIRLOCK-HATCH,OPENBIT /?ELS129 + CALL THIS-IS-IT,AIRLOCK-HATCH + ZERO? STACK /?ELS129 +?THN130: PRINTR "The gate is closed!" +?ELS129: FSET? ENGINE,ONBIT /?ELS139 + CALL THIS-IS-IT,ENGINE + PRINTR "The engine is off!" +?ELS139: PRINTI "You can do this by setting the throttle to the speed you want (slow, medium, or fast) and by moving the " + PRINTD JOYSTICK + PRINTI " in the " + PRINTD INTDIR + PRINTR " you wish to go." +?ELS106: EQUAL? PRSA,V?STOP \FALSE + EQUAL? HERE,SUB /?ELS152 + CALL THIS-IS-IT,SUB + PRINTI "You have to be in the " + PRINTD SUB + PRINTR " to stop it." +?ELS152: FSET? ENGINE,ONBIT /?ELS156 + PRINTR "The engine is off!" +?ELS156: SET 'TARGET-DEPTH,SUB-DEPTH + PRINT I-ASSUME + PRINTI " close the " + PRINTD THROTTLE + PRINTI ".)" + CRLF + CALL PERFORM,V?CLOSE,THROTTLE + RTRUE + + + .FUNCT GLOBAL-SUB-2-F + CALL DO-INSTEAD-OF,GLOBAL-SUB,GLOBAL-SUB-2 + RTRUE + + + .FUNCT GLOBAL-SUB-F + ZERO? SUB-IN-TANK /?ELS5 + ZERO? BLY-TOLD-PROBLEM \?THN8 + EQUAL? PRSO,GLOBAL-BLY /?ELS5 +?THN8: EQUAL? PRSA,V?FIND /?THN10 + EQUAL? PRSA,V?ASK-ABOUT \?ELS5 + FSET? PRSO,PERSON \?ELS5 +?THN10: CALL INT,I-SEND-SUB + PUT STACK,0,0 + PRINTI "The only sub at" + CALL RESEARCH-LAB + PRINTI " is your new " + PRINTD GLOBAL-SUB + PRINTI ". It's located in the test tank just south of " + PRINTD YOUR-LABORATORY + PRINTR "." +?ELS5: EQUAL? PRSA,V?WALK-TO,V?THROUGH,V?BOARD \?ELS19 + CALL CHEERS? + CALL GOTO,SUB + ZERO? STACK /TRUE + EQUAL? WINNER,PLAYER /TRUE + CALL OKAY + RTRUE +?ELS19: EQUAL? PRSA,V?PUT \?ELS26 + FSET? PRSO,WEAPONBIT /FALSE + CALL MORE-SPECIFIC + RSTACK +?ELS26: EQUAL? PRSA,V?SEND-TO,V?SEND-OUT,V?SEND \FALSE + EQUAL? PRSO,GLOBAL-SUB \FALSE + CALL CANT-SEND + RSTACK + + + .FUNCT CONTROLS-F + EQUAL? HERE,CENTER-OF-LAB \?ELS5 + EQUAL? PRSA,V?LAMP-OFF,V?LAMP-ON,V?EXAMINE /?ELS5 + CALL DO-INSTEAD-OF,VIDEOPHONE,CONTROLS + RTRUE +?ELS5: EQUAL? HERE,WEST-TANK-AREA \FALSE + EQUAL? PRSA,V?EXAMINE \FALSE + PRINTI "These are valves, gauges and control gear needed to make full use of the tank. Two important controls are the " + PRINTD OPEN-GATE-BUTTON + PRINTI " and the " + PRINTD FILL-TANK-BUTTON + PRINTI ". This gear can be operated by remote control from all " + CALL PRINT-NAME,LAST-NAME + PRINTR " subs." + + + .FUNCT PHONE-ON,PERSON,PWHERE,ON + SET 'REMOTE-PERSON,PERSON + SET 'QCONTEXT,PERSON + CALL THIS-IS-IT,PERSON + SET 'REMOTE-PERSON-REMLOC,PWHERE + SET 'REMOTE-PERSON-ON,ON + SET 'REMOTE-PERSON-LOC,HERE + SET 'QCONTEXT-ROOM,HERE + MOVE REMOTE-PERSON,REMOTE-PERSON-LOC + RTRUE + + + .FUNCT PHONE-OFF + ZERO? REMOTE-PERSON /FALSE + MOVE REMOTE-PERSON,GLOBAL-OBJECTS + SET 'REMOTE-PERSON,0 + SET 'REMOTE-PERSON-LOC,0 + SET 'REMOTE-PERSON-ON,0 + RTRUE + + + .FUNCT INTERCOM-F,P,L + EQUAL? PRSA,V?SAY-INTO,V?LAMP-ON \?ELS5 + PRINTR "Try the command: CALL (someone) ON THE INTERCOM." +?ELS5: EQUAL? PRSA,V?PHONE \FALSE + FSET? PRSO,PERSON \?ELS12 + GETP PRSO,P?CHARACTER + GET CHARACTER-TABLE,STACK >P + LOC P >L + JUMP ?CND10 +?ELS12: CALL HAR-HAR + RTRUE +?CND10: EQUAL? L,EAST-WALL \?ELS21 + EQUAL? HERE,OFFICE /?THN18 +?ELS21: EQUAL? HERE,EAST-WALL \?ELS17 + EQUAL? L,OFFICE \?ELS17 +?THN18: EQUAL? P,SHARON \?CND24 + IN? SHARON,OFFICE \?CND24 + FCLEAR SHARON,NDESCBIT + FCLEAR FILE-DRAWER,NDESCBIT + FCLEAR PAPERS,NDESCBIT +?CND24: MOVE P,HERE + PRINTI "Here " + JUMP ?CND15 +?ELS17: PRINTI "There's no " + PRINTD INTERCOM + PRINTI " line to where " +?CND15: CALL HE-SHE-IT,P + PRINTR " is." + + + .FUNCT A-O-K + PRINTR "All systems A-O-K." + + + .FUNCT TEST-BUTTON-F + EQUAL? PRSA,V?LAMP-ON /?THN6 + EQUAL? PRSA,V?LAMP-OFF,V?TURN,V?PUSH \FALSE +?THN6: EQUAL? HERE,CENTER-OF-LAB \?ELS12 + FSET? VIDEOPHONE,MUNGBIT \?ELS15 + CALL TELL-HINT,83,POWER-SUPPLY,0 + RTRUE +?ELS15: EQUAL? P-XADJN,W?TEST \?ELS17 + CALL A-O-K + RTRUE +?ELS17: IN? MICROPHONE,PLAYER \?ELS19 + EQUAL? PRSA,V?LAMP-ON,V?LAMP-OFF \?ELS22 + CALL PERFORM,PRSA,MICROPHONE + RTRUE +?ELS22: FSET? MICROPHONE,ONBIT \?ELS24 + CALL PERFORM,V?LAMP-OFF,MICROPHONE + RTRUE +?ELS24: CALL PERFORM,V?LAMP-ON,MICROPHONE + RTRUE +?ELS19: EQUAL? PRSA,V?LAMP-OFF \?ELS28 + CALL PERFORM,V?LAMP-OFF,VIDEOPHONE + RTRUE +?ELS28: CALL PERFORM,V?LAMP-ON,VIDEOPHONE + RTRUE +?ELS12: EQUAL? HERE,SUB,CRAWL-SPACE \?ELS32 + ZERO? TEST-BUTTON-READOUT /FALSE + PRINTI "Readout display says: +" + EQUAL? TEST-BUTTON-READOUT,TEST-BUTTON-NORMAL \?ELS43 + CALL A-O-K + RTRUE +?ELS43: EQUAL? TEST-BUTTON-READOUT,GATE-CRASHED-MSG \?ELS45 + PRINTI "No damage. Hull still watertight." + JUMP ?CND41 +?ELS45: EQUAL? TEST-BUTTON-READOUT,REGULATOR-MSG \?ELS49 + SET 'REGULATOR-MSG-SEEN,1 + PRINTI "Lasers in operational computers are over-charging. +To correct, adjust " + PRINTD VOLTAGE-REGULATOR + PRINTI ". +WARNING: " + PRINTD VOLTAGE-REGULATOR + PRINTI " is reachable only from " + PRINTD CRAWL-SPACE + PRINTI ", behind the " + PRINTD ENGINE-ACCESS-HATCH + PRINTI ". This is a hazardous operation at sea!" + JUMP ?CND41 +?ELS49: EQUAL? TEST-BUTTON-READOUT,TEST-BUTTON-POD \?ELS53 + PRINTD ESCAPE-POD-UNIT + PRINTI " is not properly connected." + JUMP ?CND41 +?ELS53: EQUAL? TEST-BUTTON-READOUT,CLAW-MUNGED-MSG \?CND41 + PRINTI "The " + PRINTD CLAW + PRINTI " is damaged." +?CND41: CRLF + RTRUE +?ELS32: EQUAL? P-XADJN,W?TEST \?ELS61 + CALL A-O-K + RSTACK +?ELS61: EQUAL? HERE,EAST-WALL \?ELS63 + EQUAL? PRSA,V?LAMP-OFF \?ELS66 + CALL PERFORM,V?LAMP-OFF,MICROWAVE-SECURITY-SCANNER + RTRUE +?ELS66: CALL PERFORM,V?LAMP-ON,MICROWAVE-SECURITY-SCANNER + RTRUE +?ELS63: EQUAL? HERE,NORTH-WALL \FALSE + EQUAL? PRSA,V?LAMP-OFF \?ELS73 + CALL PERFORM,V?LAMP-OFF,COMPUTESTOR + RTRUE +?ELS73: CALL PERFORM,V?LAMP-ON,COMPUTESTOR + RTRUE + + + .FUNCT GLOBAL-SONAR-F + EQUAL? HERE,SUB,CRAWL-SPACE \?ELS5 + CALL DO-INSTEAD-OF,SONARSCOPE,GLOBAL-SONAR + RTRUE +?ELS5: ZERO? SUB-IN-DOME /?ELS7 + CALL DO-INSTEAD-OF,SONAR-EQUIPMENT,GLOBAL-SONAR + RTRUE +?ELS7: CALL REMOTE-VERB? + ZERO? STACK \FALSE + CALL NOT-HERE,GLOBAL-SONAR + RSTACK + + + .FUNCT ALARM-F + EQUAL? PRSA,V?STOP /?THN6 + EQUAL? PRSA,V?REPLY,V?LISTEN,V?LAMP-OFF \FALSE +?THN6: ZERO? ALARM-RINGING /?ELS12 + CALL WHY-NOT-VP + RSTACK +?ELS12: PRINTR "It's not ringing!" + + + .FUNCT WHY-NOT-VP + PRINTI "Why not turn on the " + PRINTD VIDEOPHONE + PRINTR "?" + + + .FUNCT VIDEOPHONE-2-F + PRINT I-ASSUME + PRINTI " the " + PRINTD VIDEOPHONE + PRINTI ".)" + CRLF + CALL DO-INSTEAD-OF,VIDEOPHONE,VIDEOPHONE-2 + RTRUE + + + .FUNCT VIDEOPHONE-F,ARG,V + EQUAL? PRSA,V?READ,V?EXAMINE \?ELS5 + EQUAL? REMOTE-PERSON-ON,VIDEOPHONE \?ELS10 + PRINTI "You can see " + PRINTD REMOTE-PERSON + PRINTI " on" + CALL THE-PRSO-PRINT + PRINTR "." +?ELS10: ZERO? WOMAN-ON-SCREEN /?ELS14 + PRINTI "You can see a fuzzy picture of a woman on" + CALL THE-PRSO-PRINT + PRINTR ". Maybe you should turn the knob." +?ELS14: FSET? VIDEOPHONE,ONBIT \?ELS19 + PRINTI "The " + PRINTD VIDEOPHONE + PRINTR " is on, but no one's on the screen." +?ELS19: PRINTR "The screen is dark." +?ELS5: EQUAL? PRSA,V?LISTEN \?ELS27 + EQUAL? REMOTE-PERSON-ON,VIDEOPHONE \?ELS32 + CALL PERFORM,PRSA,REMOTE-PERSON + RTRUE +?ELS32: ZERO? WOMAN-ON-SCREEN /?ELS34 + PRINTI "You can hear fuzzy sound from" + CALL THE-PRSO-PRINT + PRINTR ". Maybe you should turn the knob." +?ELS34: ZERO? ALARM-RINGING /FALSE + PRINTI "An " + PRINTD ALARM + PRINTI " on the " + PRINTD VIDEOPHONE + PRINTR " is ringing." +?ELS27: EQUAL? PRSA,V?ANALYZE \?ELS44 + EQUAL? PRSI,GLOBAL-SABOTAGE \?ELS44 + ZERO? SUB-IN-TANK /?ELS44 + PRINTI "If you wish to determine at once whether any saboteur or other intruder may have penetrated" + CALL RESEARCH-LAB + PRINTI ", activate the " + PRINTD MICROWAVE-SECURITY-SCANNER + PRINTR "." +?ELS44: EQUAL? PRSA,V?WALK-TO \?ELS52 + ZERO? SUB-IN-TANK \?THN55 + ZERO? SUB-IN-DOME /?ELS52 +?THN55: EQUAL? HERE,CENTER-OF-LAB,COMM-BLDG /?ELS52 + ZERO? SUB-IN-TANK /?ELS59 + CALL PERFORM,V?WALK-TO,CENTER-OF-LAB + RTRUE +?ELS59: CALL PERFORM,V?WALK-TO,COMM-BLDG + RTRUE +?ELS52: CALL REMOTE-VERB? + ZERO? STACK \FALSE + EQUAL? HERE,CENTER-OF-LAB,COMM-BLDG /?ELS66 + PRINTI "You must be in the " + ZERO? SUB-IN-TANK /?ELS71 + PRINTD CENTER-OF-LAB + JUMP ?CND69 +?ELS71: PRINTD COMM-BLDG +?CND69: PRINTR " to do that." +?ELS66: EQUAL? PRSA,V?TURN,V?FIX,V?ADJUST \?ELS82 + FSET? VIDEOPHONE,MUNGBIT \?ELS85 + PRINTI "You can't fix the " + PRINTD VIDEOPHONE + PRINTI " until you know what is wrong. The simplest way to find out is to consult your " + CALL PRINT-NAME,LAST-NAME + PRINTI " " + PRINTD COMPUTESTOR + PRINTI ", which is programmed to troubleshoot many of your inventions. Or, alternately, you may have the " + PRINTD VIDEOPHONE + PRINTI " repaired by a " + PRINTD GLOBAL-TECHNICIAN + PRINTR "." +?ELS85: FSET? VIDEOPHONE,ONBIT /?ELS89 + CALL WHY-NOT-VP + RTRUE +?ELS89: ZERO? WOMAN-ON-SCREEN \?CND83 + PRINTR "Nothing changes." +?CND83: SET 'WOMAN-ON-SCREEN,0 + CALL PHONE-ON,GLOBAL-BLY,AQUADOME,VIDEOPHONE + CALL THIS-IS-IT,PROBLEM + PRINTI "Ah, that's better! You recognize the woman as " + PRINTD BLY + PRINTI ", who's in charge of the " + PRINT URS + PRINTI " of " + PRINTD IU-GLOBAL + PRINTI ", called the " + PRINTD AQUADOME + PRINTI ", just off the Atlantic coast. """ + CALL PRINT-NAME,FIRST-NAME + PRINTI "! " + CALL PRINT-NAME,FIRST-NAME + PRINTI "!"" she's saying. ""This is the " + PRINTD AQUADOME + PRINTI " calling" + CALL RESEARCH-LAB + PRINTI "! We have an urgent problem!""" + CRLF + CALL SCORE-OBJ,VIDEOPHONE-2 + RTRUE +?ELS82: EQUAL? PRSA,V?LAMP-OFF \?ELS99 + FSET? VIDEOPHONE,ONBIT \FALSE + SET 'WOMAN-ON-SCREEN,0 + FCLEAR VIDEOPHONE,ONBIT + EQUAL? REMOTE-PERSON-ON,VIDEOPHONE \?ELS107 + FSET? MICROPHONE,ONBIT \?ELS107 + CALL PERFORM,V?GOODBYE,REMOTE-PERSON + RTRUE +?ELS107: CALL PHONE-OFF + PRINTR "The screen goes dark." +?ELS99: EQUAL? PRSA,V?REPLY,V?LAMP-ON \?ELS115 + ZERO? SUB-IN-TANK /?ELS115 + FSET? VIDEOPHONE,ONBIT \?ELS120 + CALL ALREADY,VIDEOPHONE,STR?47 + JUMP ?CND118 +?ELS120: FSET? CIRCUIT-BREAKER,OPENBIT /?THN123 + FSET? VIDEOPHONE,MUNGBIT \?CND118 +?THN123: PRINTR "You can't. It's conked out." +?CND118: CALL INT,I-LAMP-ON-SCOPE + PUT STACK,0,0 + FSET VIDEOPHONE,ONBIT + ZERO? ALARM-RINGING /?ELS131 + SET 'ALARM-RINGING,0 + CALL QUEUE,I-ALARM-RINGING,0 + SET 'WOMAN-ON-SCREEN,1 + CALL THIS-IS-IT,GLOBAL-BLY + PRINTI "As the " + PRINTD ALARM + PRINTI " stops ringing, a picture of a woman holding a " + PRINTD MICROPHONE + PRINTI " appears, and you can hear her voice from the speaker. But both sound and picture are fuzzy." + CRLF + CALL SCORE-OBJ,VIDEOPHONE + RTRUE +?ELS131: PRINTR "A test pattern appears." +?ELS115: EQUAL? PRSA,V?PHONE \FALSE + ZERO? WOMAN-ON-SCREEN \?THN144 + EQUAL? REMOTE-PERSON-ON,VIDEOPHONE \?CND141 +?THN144: PRINTI "You should finish talking with " + ZERO? WOMAN-ON-SCREEN /?ELS150 + PRINTI "the woman" + JUMP ?CND148 +?ELS150: PRINTD REMOTE-PERSON +?CND148: PRINTR " first." +?CND141: EQUAL? PRSO,YOUR-LABORATORY \?ELS164 + ZERO? SUB-IN-DOME /?ELS164 + PRINTR "There's no answer." +?ELS164: EQUAL? PRSO,GLOBAL-BLY,AQUADOME \FALSE + ZERO? SUB-IN-TANK /FALSE + ZERO? BLY-TOLD-PROBLEM /?ELS177 + PRINTI "There's no answer. The crew must be busy with the " + PRINTD SNARK + PRINTR "." +?ELS177: ZERO? ALARM-RINGING /FALSE + CALL PERFORM,V?LAMP-ON,VIDEOPHONE + RTRUE + + + .FUNCT GLOBAL-SABOTAGE-F + EQUAL? PRSA,V?ANALYZE \FALSE + EQUAL? PRSO,VIDEOPHONE \FALSE + CALL INT,I-TIP-SAYS + PUT STACK,0,0 + RFALSE + + + .FUNCT WATER-F + CALL REMOTE-VERB? + ZERO? STACK \FALSE + ZERO? SUB-IN-TANK /?ELS7 + CALL IN-TANK-AREA?,HERE + ZERO? STACK /FALSE + ZERO? TEST-TANK-FULL /FALSE + CALL DO-INSTEAD-OF,TEST-TANK,GLOBAL-WATER + RTRUE +?ELS7: EQUAL? PRSA,V?EXAMINE,V?ANALYZE \?ELS17 + CALL GLOBAL-IN?,WINDOW,HERE + ZERO? STACK /?ELS22 + CALL PERFORM,V?LOOK-OUTSIDE,WINDOW + RTRUE +?ELS22: EQUAL? HERE,SUB \FALSE + CALL PERFORM,V?LOOK-OUTSIDE,SUB-WINDOW + RTRUE +?ELS17: EQUAL? PRSA,V?THROUGH,V?SWIM \FALSE + PRINTI "This is no time for a swim, " + CALL PRINT-NAME,FIRST-NAME + PRINTR "!" + + + .FUNCT SEA-F + EQUAL? PRSA,V?ANALYZE,V?EXAMINE \?ELS5 + ZERO? SUB-IN-DOME \?THN11 + ZERO? SUB-IN-OPEN-SEA \?THN11 + EQUAL? NOW-TERRAIN,SEA-TERRAIN \FALSE +?THN11: CALL PLENTY-WATER + RSTACK +?ELS5: EQUAL? PRSA,V?WALK-TO,V?THROUGH,V?FIND \FALSE + ZERO? SUB-IN-DOME \?THN20 + ZERO? SUB-IN-OPEN-SEA \?THN20 + EQUAL? NOW-TERRAIN,SEA-TERRAIN \?ELS19 +?THN20: PRINTR "You're in it!" +?ELS19: EQUAL? HERE,SUB,CRAWL-SPACE \?ELS25 + PRINTR "The nautical chart in your SEASTALKER package should help." +?ELS25: PRINTI "First you must get in the " + PRINTD SUB + PRINTR "." + + + .FUNCT YOU-F + EQUAL? WINNER,PLAYER /?ELS5 + CALL DO-INSTEAD-OF,WINNER,YOU + RTRUE +?ELS5: EQUAL? PRSA,V?ASK-ABOUT \FALSE + EQUAL? PRSI,YOU \FALSE + CALL PERFORM,V?ASK-ABOUT,PRSO,PRSO + RTRUE + + + .FUNCT HINT-F + EQUAL? PRSA,V?FIND \?ELS5 + PRINT HELP-TEXT + CRLF + RTRUE +?ELS5: EQUAL? PRSA,V?TAKE,V?ASK-CONTEXT-FOR,V?ASK-FOR \FALSE + EQUAL? TIP,PRSO,PRSI,WINNER \?ELS14 + PRINT HELP-TEXT + CRLF + RTRUE +?ELS14: CALL MORE-SPECIFIC + RSTACK + + + .FUNCT DIRNS-F + EQUAL? PRSA,V?ASK-FOR \FALSE + EQUAL? PRSO,GLOBAL-BLY \FALSE + SET 'WINNER,GLOBAL-BLY + CALL PERFORM,V?FIND,AQUADOME + RTRUE + + + .FUNCT GLOBAL-HERE-F,FLG=0,F,HR,TIM,VAL + EQUAL? PRSA,V?KNOCK \?ELS5 + PRINTR "Knocking on the walls reveals nothing unusual." +?ELS5: EQUAL? PRSA,V?TIE-TO,V?PUT \?ELS9 + CALL MORE-SPECIFIC + RSTACK +?ELS9: EQUAL? PRSA,V?EXAMINE,V?SEARCH \?ELS11 + GETP HERE,P?CORRIDOR + ZERO? STACK /?ELS14 + SET 'TIM,3 + JUMP ?CND12 +?ELS14: GETP HERE,P?SIZE + ADD 2,STACK >TIM +?CND12: EQUAL? P-ADVERB,W?CAREFULLY \?CND17 + MUL 2,TIM >TIM +?CND17: PRINTI "(It's better to examine or search one thing at a time. It would take a long time to search a whole room or area thoroughly. A " + EQUAL? P-ADVERB,W?CAREFULLY \?ELS24 + PRINTI "careful" + JUMP ?CND22 +?ELS24: PRINTI "brief" +?CND22: PRINTI " search would take " + PRINTN TIM + PRINTI " turns, and it might not reveal much. Would you like to do it anyway?)" + CALL YES? + ZERO? STACK /?ELS37 + CALL INT-WAIT,TIM >VAL + EQUAL? M-FATAL,VAL /TRUE + ZERO? VAL /?ELS44 + PRINTI "Your " + EQUAL? P-ADVERB,W?CAREFULLY \?ELS52 + PUSH STR?124 + JUMP ?CND48 +?ELS52: PUSH STR?125 +?CND48: PRINT STACK + PRINTR " search reveals nothing exciting." +?ELS44: PRINTR "You didn't finish looking over the place." +?ELS37: PRINTR "Okay." +?ELS11: EQUAL? PRSA,V?ANALYZE,V?WHAT \FALSE + FIRST? HERE >F /?KLU83 +?KLU83: +?PRG65: ZERO? F \?ELS69 + JUMP ?REP66 +?ELS69: FSET? F,CONTBIT \?ELS71 + CALL INHABITED?,F + ZERO? STACK /?ELS71 + SET 'FLG,1 + SET 'HR,HERE + SET 'HERE,F + CALL GLOBAL-HERE-F + SET 'HERE,HR + JUMP ?CND67 +?ELS71: FSET? F,PERSON \?CND67 + EQUAL? F,PLAYER /?CND67 + SET 'FLG,1 + CALL DESCRIBE-OBJECT,F,1,0 +?CND67: NEXT? F >F /?KLU84 +?KLU84: JUMP ?PRG65 +?REP66: ZERO? FLG \TRUE + PRINTR "There's nobody else here." + + + .FUNCT AIR-F + EQUAL? PRSA,V?EXAMINE \?ELS5 + PRINTR "You can see through the air around you." +?ELS5: EQUAL? PRSA,V?WALK-TO \?ELS9 + PRINTR "It's all around you!" +?ELS9: EQUAL? PRSA,V?SMELL \FALSE + CALL FRESH-AIR?,HERE + ZERO? STACK \TRUE + PRINTR "The air is rather musty." + + + .FUNCT GENERIC-TANK-F,OBJ + ZERO? SUB-IN-TANK /?ELS5 + RETURN TEST-TANK +?ELS5: ZERO? SUB-IN-DOME \?THN9 + CALL SUB-OUTSIDE-AIRLOCK? + ZERO? STACK /FALSE +?THN9: RETURN DOCKING-TANK + + + .FUNCT TOO-FAR-AWAY,OBJ + CALL TOO-BAD-BUT,OBJ,STR?16 + RSTACK + + + .FUNCT TEST-TANK-F + EQUAL? PRSA,V?WALK-TO \?ELS5 + CALL IN-TANK-AREA?,HERE + ZERO? STACK /?ELS10 + CALL ALREADY,PLAYER,STR?123 + RSTACK +?ELS10: ZERO? SUB-IN-TANK /FALSE + CALL PERFORM,PRSA,NORTH-TANK-AREA + RTRUE +?ELS5: CALL REMOTE-VERB? + ZERO? STACK \FALSE + EQUAL? NOW-TERRAIN,BAY-TERRAIN \?ELS17 + CALL TOO-FAR-AWAY,TEST-TANK + RSTACK +?ELS17: ZERO? SUB-IN-TANK \?ELS19 + PRINTI "You're nowhere near" + CALL RESEARCH-LAB + PRINTR "!" +?ELS19: EQUAL? HERE,SUB \?THN28 + ZERO? SUB-IN-TANK \?ELS25 +?THN28: EQUAL? HERE,NORTH-TANK-AREA,WEST-TANK-AREA,SOUTH-TANK-AREA /?ELS25 + CALL NOT-HERE,TEST-TANK + RSTACK +?ELS25: EQUAL? PRSA,V?BOARD \?ELS31 + PRINTR "That won't do any good." +?ELS31: EQUAL? PRSA,V?LEAVE \?ELS35 + PRINTI "You can either walk north, or get in the " + PRINTD SUB + PRINTR " and go east." +?ELS35: EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE,V?ANALYZE \?ELS39 + CALL FILL-TANK-BUTTON-F + RSTACK +?ELS39: EQUAL? PRSA,V?FILL,V?EMPTY \?ELS41 + EQUAL? HERE,WEST-TANK-AREA,SUB /?ELS41 + PRINTR "You'll have to go west to do that." +?ELS41: EQUAL? PRSA,V?EMPTY \?ELS47 + FSET? TANK-GATE,OPENBIT \?ELS52 + CALL YOU-CANT,STR?70,TANK-GATE,STR?23 + RSTACK +?ELS52: FSET? ENGINE,ONBIT \?ELS54 + CALL YOU-CANT,STR?70,ENGINE,STR?47 + RSTACK +?ELS54: ZERO? TEST-TANK-FULL /?ELS56 + SET 'TEST-TANK-FULL,0 + PRINTI "The " + PRINTD GLOBAL-WATER + PRINTR " quickly drains from the tank." +?ELS56: CALL ALREADY,TEST-TANK,STR?70 + RSTACK +?ELS47: EQUAL? PRSA,V?FILL \?ELS63 + ZERO? TEST-TANK-FULL /?ELS68 + CALL ALREADY,TEST-TANK,STR?71 + RSTACK +?ELS68: SET 'TEST-TANK-FULL,1 + PRINTI "The " + PRINTD GLOBAL-WATER + PRINTR " quickly fills the tank, up to the level of the walkway." +?ELS63: EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS75 + CALL PERFORM,PRSA,TANK-GATE + RTRUE +?ELS75: EQUAL? PRSA,V?THROUGH,V?SWIM \FALSE + PRINTI "This is no time for a swim, " + CALL PRINT-NAME,FIRST-NAME + PRINTR "!" + + + .FUNCT FILL-TANK-BUTTON-F,OBJ,FLAG + ZERO? SUB-IN-TANK /?ELS3 + SET 'FLAG,TEST-TANK-FULL + SET 'OBJ,TEST-TANK + JUMP ?CND1 +?ELS3: ZERO? SUB-IN-DOME \?THN7 + CALL SUB-OUTSIDE-AIRLOCK? + ZERO? STACK /FALSE +?THN7: SET 'FLAG,AIRLOCK-FULL + SET 'OBJ,AIRLOCK +?CND1: EQUAL? PRSA,V?EMPTY /?THN16 + EQUAL? PRSA,V?FILL,V?CLOSE,V?OPEN \?ELS15 +?THN16: CALL PERFORM,PRSA,OBJ + RTRUE +?ELS15: EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE,V?ANALYZE \?ELS19 + PRINTI "The " + PRINTD OBJ + PRINTI " is " + CALL TANK-STATUS + PRINT STACK + PRINTR "." +?ELS19: EQUAL? PRSA,V?USE,V?PUSH,V?MOVE \FALSE + ZERO? FLAG /?ELS28 + PRINT I-ASSUME + PRINTI " empty" + CALL PRINTT,OBJ + PRINTI ".)" + CRLF + CALL PERFORM,V?EMPTY,OBJ + RTRUE +?ELS28: PRINT I-ASSUME + PRINTI " fill" + CALL PRINTT,OBJ + PRINTI ".)" + CRLF + CALL PERFORM,V?FILL,OBJ + RTRUE + + + .FUNCT TANK-GATE-F + EQUAL? PRSA,V?FIND \?ELS5 + PRINTR "It's on the east wall of the test tank." +?ELS5: CALL REMOTE-VERB? + ZERO? STACK \FALSE + EQUAL? HERE,SUB /?ELS11 + CALL IN-TANK-AREA?,HERE + ZERO? STACK \?ELS11 + CALL NOT-HERE,TANK-GATE + RSTACK +?ELS11: EQUAL? PRSA,V?EXAMINE,V?ANALYZE \?ELS15 + PRINTI "This gate " + FSET? TANK-GATE,OPENBIT \?ELS22 + PUSH STR?126 + JUMP ?CND18 +?ELS22: PUSH STR?127 +?CND18: PRINT STACK + PRINTI " raised to permit submarines to go in or out of the tank. The gate can be raised or lowered by wall controls or by remote control from all " + CALL PRINT-NAME,LAST-NAME + PRINTR " subs." +?ELS15: EQUAL? PRSA,V?DROP /?THN27 + EQUAL? PRSA,V?RAISE,V?CLOSE,V?OPEN \FALSE +?THN27: EQUAL? HERE,WEST-TANK-AREA,SUB /?CND29 + PRINTR "You'll have to go west to do that." +?CND29: CALL OPEN-CLOSE-GATE,TANK-GATE,TEST-TANK-FULL,TEST-TANK + RSTACK + + + .FUNCT OPEN-GATE-BUTTON-F,OBJ + ZERO? SUB-IN-TANK /?ELS3 + SET 'OBJ,TANK-GATE + JUMP ?CND1 +?ELS3: ZERO? SUB-IN-DOME \?THN7 + CALL SUB-OUTSIDE-AIRLOCK? + ZERO? STACK /FALSE +?THN7: SET 'OBJ,AIRLOCK-HATCH +?CND1: EQUAL? PRSA,V?DROP /?THN16 + EQUAL? PRSA,V?RAISE,V?CLOSE,V?OPEN \?ELS15 +?THN16: CALL PERFORM,PRSA,OBJ + RTRUE +?ELS15: EQUAL? PRSA,V?EXAMINE,V?ANALYZE \?ELS19 + PRINTI "The " + PRINTD OBJ + PRINTI " is " + CALL GATE-STATUS + PRINT STACK + PRINTR "." +?ELS19: EQUAL? PRSA,V?USE,V?PUSH,V?MOVE \FALSE + FSET? OBJ,OPENBIT \?ELS28 + PRINT I-ASSUME + PRINTI " close" + CALL PRINTT,OBJ + PRINTI ".)" + CRLF + CALL PERFORM,V?CLOSE,OBJ + RTRUE +?ELS28: PRINT I-ASSUME + PRINTI " open" + CALL PRINTT,OBJ + PRINTI ".)" + CRLF + CALL PERFORM,V?OPEN,OBJ + RTRUE + + + .FUNCT GATE-STATUS + ZERO? SUB-IN-TANK /?ELS5 + FSET? TANK-GATE,OPENBIT \?ELS11 + RETURN STR?23 +?ELS11: RETURN STR?17 +?ELS5: ZERO? SUB-IN-DOME \?THN16 + CALL SUB-OUTSIDE-AIRLOCK? + ZERO? STACK /?ELS15 +?THN16: FSET? AIRLOCK-HATCH,OPENBIT \?ELS22 + RETURN STR?23 +?ELS22: RETURN STR?17 +?ELS15: RETURN STR?128 + + + .FUNCT TANK-STATUS + ZERO? SUB-IN-TANK /?ELS5 + ZERO? TEST-TANK-FULL /?ELS11 + RETURN STR?71 +?ELS11: RETURN STR?70 +?ELS5: ZERO? SUB-IN-DOME \?THN17 + CALL SUB-OUTSIDE-AIRLOCK? + ZERO? STACK /?ELS16 +?THN17: ZERO? AIRLOCK-FULL /?ELS23 + RETURN STR?71 +?ELS23: RETURN STR?70 +?ELS16: RETURN STR?128 + + + .FUNCT AIRLOCK-HATCH-F + EQUAL? PRSA,V?FIND \?ELS5 + PRINTI "It's on the south wall of the " + PRINTD AQUADOME + PRINTI " " + PRINTD AIRLOCK + PRINTR "." +?ELS5: CALL REMOTE-VERB? + ZERO? STACK \FALSE + ZERO? SUB-IN-DOME /?THN14 + EQUAL? HERE,SUB,AIRLOCK,BLY-OFFICE /?ELS11 +?THN14: CALL SUB-OUTSIDE-AIRLOCK? + ZERO? STACK \?ELS11 + CALL TOO-FAR-AWAY,AIRLOCK-HATCH + RSTACK +?ELS11: ZERO? SNARK-ATTACK-COUNT /?ELS17 + PRINTR "It's too late now! The machinery is jammed!" +?ELS17: EQUAL? PRSA,V?DROP /?THN22 + EQUAL? PRSA,V?RAISE,V?CLOSE,V?OPEN \FALSE +?THN22: CALL OPEN-CLOSE-GATE,AIRLOCK-HATCH,AIRLOCK-FULL,AIRLOCK + RSTACK + + + .FUNCT OPEN-CLOSE-GATE,GATE,FULL,TANK + EQUAL? PRSA,V?RAISE,V?OPEN \?ELS3 + FSET? GATE,OPENBIT \?ELS6 + CALL ALREADY,GATE,STR?23 + RTRUE +?ELS6: ZERO? FULL \?ELS8 + PRINTI "You'd better fill the " + PRINTD TANK + PRINTR " first, unless you want to go surfing!" +?ELS8: EQUAL? GATE,TANK-GATE \?CND13 + EQUAL? HERE,SUB \?CND13 + SET 'OPENED-GATE-FROM-SUB,1 +?CND13: FSET GATE,OPENBIT + JUMP ?CND1 +?ELS3: FSET? GATE,OPENBIT \?ELS22 + FCLEAR GATE,OPENBIT + JUMP ?CND1 +?ELS22: CALL ALREADY,GATE,STR?17 + RTRUE +?CND1: FSET? GATE,OPENBIT \?ELS27 + PRINTI "Opened" + JUMP ?CND25 +?ELS27: PRINTI "Closed" +?CND25: EQUAL? HERE,SUB \?CND34 + PRINTI " (by remote control)" +?CND34: PRINTR "." + + + .FUNCT AIRLOCK-POP? + ZERO? GREENUP-ESCAPE /?ELS5 + CALL FIND-FLAG,AIRLOCK,PERSON,GREENUP + RSTACK +?ELS5: CALL FIND-FLAG,AIRLOCK,PERSON + RSTACK + + + .FUNCT GENERIC-GATE-F,OBJ + ZERO? SUB-IN-TANK /?ELS5 + RETURN TANK-GATE +?ELS5: ZERO? SUB-IN-DOME \?THN9 + CALL SUB-OUTSIDE-AIRLOCK? + ZERO? STACK /FALSE +?THN9: RETURN AIRLOCK-HATCH + + + .FUNCT SUB-OUTSIDE-AIRLOCK? + EQUAL? SUB-DEPTH,AIRLOCK-DEPTH \FALSE + ZERO? SUB-LON \FALSE + ZERO? FINE-SONAR /?ELS9 + EQUAL? -2,SUB-LAT /TRUE +?ELS9: EQUAL? -1,SUB-LAT /TRUE + RFALSE + + + .FUNCT AIRLOCK-ROOF-F + EQUAL? PRSA,V?FIND \?ELS5 + PRINTI "It covers the " + PRINTD AQUADOME + PRINTI " " + PRINTD AIRLOCK + PRINTR "." +?ELS5: CALL REMOTE-VERB? + ZERO? STACK \FALSE + ZERO? SUB-IN-DOME /?THN12 + EQUAL? HERE,SUB,AIRLOCK,BLY-OFFICE /?ELS11 + EQUAL? HERE,AIRLOCK-WALL /?ELS11 +?THN12: CALL TOO-FAR-AWAY,AIRLOCK-ROOF + RSTACK +?ELS11: EQUAL? PRSA,V?OPEN \?ELS17 + FSET? AIRLOCK-ROOF,OPENBIT \?ELS20 + CALL ALREADY,AIRLOCK-ROOF,STR?23 + RTRUE +?ELS20: FSET? AIRLOCK-HATCH,OPENBIT \?CND18 + CALL THIS-IS-IT,AIRLOCK-HATCH + PRINTI "A safety mechanism prevents it. The " + PRINTD AIRLOCK-HATCH + PRINTR " is open!" +?CND18: FSET AIRLOCK-ROOF,OPENBIT + PRINTI "Opened" + EQUAL? HERE,SUB \?CND27 + PRINTI " (by remote control)" +?CND27: PRINTR "." +?ELS17: EQUAL? PRSA,V?CLOSE \FALSE + FSET? AIRLOCK-ROOF,OPENBIT /?CND36 + CALL ALREADY,AIRLOCK-ROOF,STR?17 + RTRUE +?CND36: FCLEAR AIRLOCK-ROOF,OPENBIT + PRINTI "Closed" + EQUAL? HERE,SUB \?CND41 + PRINTI " (by remote control)" +?CND41: PRINTI "." + CRLF + ZERO? GREENUP-ESCAPE /TRUE + GRTR? 3,GREENUP-ESCAPE \TRUE + PRINTI "Greenup can't get into the " + PRINTD SUB + PRINTI " and escape any more. " + CALL GREENUP-CUFF + RTRUE + + + .FUNCT EVIDENCE-F + ZERO? ZOE-MENTIONED-EVIDENCE /FALSE + EQUAL? PRSA,V?TAKE \FALSE + CALL PERFORM,PRSA,BLACK-BOX + RTRUE + + + .FUNCT LAB-ASSISTANT-F + EQUAL? PRSA,V?WALK-TO,V?FIND \FALSE + CALL DO-INSTEAD-OF,LAB-ASSISTANT,LOWELL + RSTACK + + + .FUNCT DOC-LABORATORY-F + ZERO? SUB-IN-DOME \?THN6 + EQUAL? PRSA,V?FIND \?ELS5 +?THN6: CALL DO-INSTEAD-OF,HERE,DOC-LABORATORY + RTRUE +?ELS5: EQUAL? PRSA,V?WALK-TO \FALSE + CALL PERFORM,PRSA,DOME-LAB + RTRUE + + + .FUNCT YOUR-LABORATORY-F + CALL IN-LAB?,HERE + ZERO? STACK \?THN6 + EQUAL? PRSA,V?FIND \?ELS5 +?THN6: CALL DO-INSTEAD-OF,HERE,YOUR-LABORATORY + RTRUE +?ELS5: EQUAL? PRSA,V?WALK-TO \FALSE + CALL PERFORM,PRSA,CENTER-OF-LAB + RTRUE + + + .FUNCT GENERIC-LABORATORY-F,OBJ + ZERO? SUB-IN-TANK /?ELS5 + RETURN YOUR-LABORATORY +?ELS5: ZERO? SUB-IN-DOME /FALSE + RETURN DOME-LAB + + + .FUNCT TRAITOR-F,X + EQUAL? PRSA,V?ASK-ABOUT \?ELS9 + FSET? PRSO,PERSON /?THN6 +?ELS9: EQUAL? PRSA,V?WHAT,V?FIND \FALSE +?THN6: ZERO? QCONTEXT /?ORP13 + PUSH QCONTEXT + JUMP ?THN10 +?ORP13: EQUAL? PRSA,V?ASK-ABOUT /?ORT12 + PUSH 0 + JUMP ?THN10 +?ORT12: PUSH 1 +?THN10: POP 'X + ZERO? X /?CND14 + PRINTI """" +?CND14: PRINTI "I guess you'll have to figure that out, " + CALL PRINT-NAME,FIRST-NAME + PRINTI "." + ZERO? X /?CND22 + PRINTI """" +?CND22: CRLF + RTRUE + + + .FUNCT CHAIR-F + EQUAL? PRSA,V?LOOK-UNDER,V?SIT \FALSE + PRINTR "That's just a waste of time." + + + .FUNCT UNDERWATER-F + EQUAL? PRSA,V?WALK \FALSE + PRINTI "You must be in the " + PRINTD SUB + PRINTR " to do that." + + + .FUNCT GAME-F + EQUAL? PRSA,V?READ,V?PLAY,V?EXAMINE \FALSE + SET 'P-WON,0 + PRINTR "(You're doing it!)" + + + .FUNCT SOMETHING-F + SET 'P-WON,0 + PRINTI "(Type a real word instead of " + PRINTD SOMETHING + PRINTR ".)" + + + .FUNCT LEFT-RIGHT-F + EQUAL? PRSA,V?LOOK-OUTSIDE,V?LOOK-INSIDE,V?EXAMINE \?ELS5 + EQUAL? HERE,SUB \?ELS8 + CALL PERFORM,PRSA,SUB-WINDOW + RTRUE +?ELS8: CALL PERFORM,PRSA,WINDOW + RTRUE +?ELS5: EQUAL? PRSA,V?WALK,V?TURN \FALSE + CALL V-WALK-AROUND + RSTACK + + .ENDI diff --git a/global.zil b/global.zil new file mode 100644 index 0000000..bb6c0dd --- /dev/null +++ b/global.zil @@ -0,0 +1,1387 @@ +"GLOBALS for SEASTALKER +Copyright (C) 1984 Infocom, Inc. All rights reserved." + + + + + + ) + ( ) + ()>> + + + + + + )>> + + + + + ; + > + + >> + %)>> + + + + ) + ( > + + ) + ( + + )>) + ( + %)>> + + + + + + + + + + + + >> + ;"I-SNARK-ATTACKS provides output." + ) + ( > + % + )>> + + + + + + + +> + +> + + ) + ( + + ) + ( + > >> + % +;"(You'll find that information in your SEASTALKER package.)" CR> + )> + + >)> + + >)> + ) + ( + > + %) + ( + >> + + ) + ( + + + ) + (T )>) + ( > + ) + ( + + ) + ( + + >> + )> + )>) + ( + + ;"You have to go north to board the SCIMITAR." CR>) + (T + + )>) + ( + > + ) + ( + + ) + ( + + ) + (T + + )>) + ( + >> + + ) + ( >> + % + > + )> + ) + ( + > + + %) + ;( + + ) + (> + + ) + ( + > + + >> + ) + (> + > + > + >> + ) + (> + + ) + (T + %)>) + ( + > + + %) + ;( + ) + (> + %) + (T ; + + + + ) + ;(T + )>)>> + + + + + + + > + +>> + + >>> + > + % + + ) + ( + + >> + )> + ) + ( + > + )>) + ( > + )>> + + + + + >> + + ) + ( + + %)>)>> + + + + + + + + + > + + + > + > + >)>> + + + + + %) + ( + + >> + >) + (T + + )> + <==? ,HERE ,OFFICE>> + <==? .L ,OFFICE>>> + > + + + )> + + ) + (T + )> + + )>> + + + + + + + + + + +> + + + + + >) + (<==? ,P-XADJN ,W?TEST> + ) + ( + + ) + ( + ) + (T + )>) + ( + ) + (T )> + ) + ( + + + + ) + (<==? ,TEST-BUTTON-READOUT ,GATE-CRASHED-MSG> + ) + (<==? ,TEST-BUTTON-READOUT ,REGULATOR-MSG> + + ; + ) ;" refer to manual for details +[Note: Manual should explain that entering the engine +compartment crawl space involves two hazards: +1-- Tight space presents risk of knocking delicate bearings out of alignment. +2-- Hot, sharp or moving parts present danger of personal injury.]" + (<==? ,TEST-BUTTON-READOUT ,TEST-BUTTON-POD> + ) + (<==? ,TEST-BUTTON-READOUT ,CLAW-MUNGED-MSG> + )> + )>) + (<==? ,P-XADJN ,W?TEST> + ) + ( + + ) + (T)> + ) + ( + + ) + (T)> + )>)>> + + + +; + + + + + + + + ) + (,SUB-IN-DOME + + ) + ;( ) + ( ) + (T )>> + + + + +> + + + + + ) + ;( + ) + (T )>)>> + +> + + + + + + + + > + + + + ) + (,WOMAN-ON-SCREEN + ) + ( + ) + ;(,ALARM-RINGING + ) + (T )>) + ( + + + ) + (,WOMAN-ON-SCREEN + ) + (,ALARM-RINGING + )>) + ( ,SUB-IN-TANK> + % + + ) + ( + + >> + ) + (T + )> + ) + ( ) + (> + % + ) + (T )> + ) + ( + + % + ) + (> + + ) + ( + + )> + > + + ;> + + % + + + + ) + ( + ;> + > + )> + > + + + > + + ) + (T + + %)>) + ( ,SUB-IN-TANK> + + ) + ( + > + + )> + > + + > + + + + % + + ) + (T %)>) + ( + > + % + ) + (T )> + + )> + ,SUB-IN-DOME> + ) + ( ,SUB-IN-TANK> + + ) + (,ALARM-RINGING + + )>)>)>> + + + + + + + + + + + + > + ; + > + )>> + +; + +; + + + + + + ) + (,SUB-IN-TANK + ,TEST-TANK-FULL> + + )>) + ( + + + ) + ( + + )>) + ( + %)>> + + + + + > + )>) + ( + > + %) + ( + %) + (T %)>)>> + + + + + + + +> + + ) + ( > + + )>> + + + + + ) + ( + + ) + (T )>)>> + + + + > + + + )>> + + + +) F HR TIM VAL) + + %) + ( + ) + ( + + ) + (>> + ) + (T >>)> + >)> + % + ) + (T )> + % + + >> + ) + (.VAL + % + "careful") + (T "brief")> + " search reveals nothing exciting." CR>) + (T + %)>) + (T )>) + ( + > + ) + ( > + + + + + ) + ( >> + + )> + >> + )> + )>> + + + + + %) + ( + ) + ( + + %) + ( ) + (T %)>)>> + + + ,GLOBAL-HERE) + (,SUB-IN-TANK + ,TEST-TANK) + (> + ,DOCKING-TANK)>> + + + + + +> + + + ;> + + + ) + (,SUB-IN-TANK + + )>) + ( ) + ( + ) + ( + % + + ) + (> > + >> + ;> + ) + ( + %) + ( + %) + ( + ) + ( + >> + % + ) + ( + + ) + ( + ) + (,TEST-TANK-FULL + > + ) + (T )>) + ( + ) + (T + + %)>) + ( ) + ( + %)>> + + + + + ) + (> + + ) + (T )> + + + ) + ( + "." CR>) + ( + + + ) + (T + + + )>)>> + + + +> + + %) + ( ) + (> + >> + ;> + ) + ( + % "is") (T "can be")> +" raised to +permit submarines to go in or out of the tank. The gate can +be raised or lowered by wall controls or by remote control from +all " LN " subs." CR>) + ( + > + % + )> + )>> + + + +) + (> + ) + (T )> + + + ) + ( + "." CR>) + ( + + + + ) + (T + + + )>)>> + + "open") (T "closed")>) + (> + "open") (T "closed")>) + (T "???")>> + +) + (> + ) + (T "???")>> + + + + + %) + ( ) + ( + >> + >> + ) + (> + %) + ( + )>> + + + + + ) + ( + % + ) + (T + > + )> + )>) + (T + + ) + (T + + )>)> + ) + (T )> + + )> + > + +) + (T )>> + +> + ,AIRLOCK-HATCH)>> + +> + ) + (> + ) + (,FINE-SONAR + + )>) + (<==? -1 ,SUB-LAT> + )>> + + + + + %) + ( ) + ( + > + >>> + ) + ( + + + ) + ( + ;> + + % + )> + + + + )> + ) + ( + > + + )> + + + + )> + + ;> + > + % + )> + )>> + + + + + +> + + )>> + + + + + + + + + + + + + + + + + )>> + +"? Delete this object and put following in local-globals?" + + + > + + ) + ( + + )>> + + + + ;,SUB-IN-TANK > + + ) + ( + + )>> + + ,YOUR-LABORATORY) + (,SUB-IN-DOME ; ,DOME-LAB)>> + + + + + + > + > + + ;>>> + )> + % + )> + )>> + + + + + %)>> + + + + + %)>> + + + + + > + %)>> + + + +> + %> + +"WARNING: object numbers for LEFT & RIGHT must not equal direction numbers!" + + + + + + + + ) + (T )> + ) + ( + )>> diff --git a/j1.zap b/j1.zap new file mode 100644 index 0000000..cbeedad --- /dev/null +++ b/j1.zap @@ -0,0 +1,49 @@ + + .INSERT "J1DAT" ; DATA IS IN THIS FILE + + + .INSERT "MACROS" + + + .INSERT "SYNTAX" + + + .INSERT "MAIN" + + + .INSERT "SUB" + + + .INSERT "BATTLE" + + + .INSERT "THINGS" + + + .INSERT "DOME" + + + .INSERT "PEOPLE" + + + .INSERT "PLACES" + + + .INSERT "GLOBAL" + + + .INSERT "CLOCK" + + + .INSERT "PARSER" + + + .INSERT "VERBS" + + + .INSERT "EVENTS" + + + .INSERT "J1STR" + + .END diff --git a/j1.zil b/j1.zil new file mode 100644 index 0000000..92b83c8 --- /dev/null +++ b/j1.zil @@ -0,0 +1,55 @@ +"COMPILE/LOAD FILE for SEASTALKER +Copyright (C) 1984 Infocom, Inc. All rights reserved." + + + + ) + (T )> + + + + + + + + + + + >> + +) "AUX" (TIM