.FUNCT SUB-EXIT-F,X FSET? SUB-DOOR,OPENBIT /?ELS5 CALL THIS-IS-IT,SUB-DOOR PRINTI "The " PRINTD SUB-DOOR PRINTI " is closed." CRLF RFALSE ?ELS5: ZERO? SUB-IN-TANK /?ELS9 GET ON-SUB,0 >X ZERO? X /?CND11 MOVE X,NORTH-TANK-AREA ?CND11: GET ON-SUB,1 >X ZERO? X /?CND14 MOVE X,NORTH-TANK-AREA ?CND14: RETURN NORTH-TANK-AREA ?ELS9: ZERO? SUB-IN-DOME /?ELS18 ZERO? AIRLOCK-FULL /?ELS24 PRINTI "You can't go out while the " PRINTD AIRLOCK PRINTI " is full of water!" CRLF RFALSE ?ELS24: ZERO? DOME-AIR-BAD? \?CND30 FSET? AIR-SUPPLY-SYSTEM,MUNGBIT \?CND30 CALL QUEUE,I-DOME-AIR,DOME-AIR-ONSET PUT STACK,0,1 IN? OXYGEN-GEAR,PLAYER /?CND30 CALL TELL-HINT,53,OXYGEN-GEAR,FALSE-VALUE CRLF ?CND30: GET ON-SUB,0 >X ZERO? X /?CND38 MOVE X,AIRLOCK ?CND38: GET ON-SUB,1 >X ZERO? X /?CND41 MOVE X,AIRLOCK ?CND41: IN? MAGAZINE,TIP \?CND44 MOVE MAGAZINE,SUB ?CND44: CALL QUEUE,I-POISON-JAB,0 RETURN AIRLOCK ?ELS18: PRINTI "You can't go out of the " PRINTD SUB PRINTI " here!" CRLF RFALSE .FUNCT DOCKING-VERB? EQUAL? NOW-TERRAIN,BAY-TERRAIN,SEA-TERRAIN \FALSE EQUAL? PRSA,V?DOCK /TRUE EQUAL? PRSA,V?WALK \?ELS9 EQUAL? PRSO,P?IN /TRUE ?ELS9: EQUAL? PRSA,V?WALK-TO,V?THROUGH \FALSE EQUAL? NOW-TERRAIN,BAY-TERRAIN \?ELS18 EQUAL? PRSO,YOUR-LABORATORY,TANK-GATE,TEST-TANK \FALSE RTRUE ?ELS18: EQUAL? PRSO,AIRLOCK-HATCH /TRUE EQUAL? PRSO,AQUADOME,AIRLOCK,DOCKING-TANK /TRUE RFALSE .FUNCT SOMEONE-WORKING? CALL POPULATION,CRAWL-SPACE,PLAYER ZERO? STACK \TRUE CALL POPULATION,SUB,TIP,PLAYER ZERO? STACK \TRUE RFALSE .FUNCT CANT-GO-TO-THRU-CLOSED-HATCH?,X SET 'X,PRSO FSET? PRSO,PERSON \?CND1 GETP PRSO,P?CHARACTER GET CHARACTER-TABLE,STACK >X ?CND1: CALL GLOBAL-IN?,PRSO,SUB ZERO? STACK \FALSE CALL GLOBAL-IN?,PRSO,CRAWL-SPACE ZERO? STACK \FALSE EQUAL? X,DOCKING-TANK,TEST-TANK /?THN6 CALL META-LOC,X EQUAL? STACK,SUB,CRAWL-SPACE,GLOBAL-OBJECTS /FALSE ?THN6: CALL SUB-EXIT-F ZERO? STACK \FALSE RTRUE .FUNCT SUB-F,RARG=0,RM,X,?TMP1 EQUAL? RARG,M-BEG \?ELS5 ZERO? SUB-IN-TANK \?THN13 ZERO? SUB-IN-DOME /?ELS10 ?THN13: EQUAL? PRSA,V?LAUNCH /?THN15 EQUAL? PRSA,V?LEAVE \?ELS10 EQUAL? PRSO,TEST-TANK,AIRLOCK \?ELS10 ?THN15: CALL PERFORM,V?LAMP-ON,LOCAL-SUB RTRUE ?ELS10: EQUAL? PRSA,V?STAND \?ELS20 PRINTR "There's no room in here!" ?ELS20: EQUAL? PRSA,V?$CALL \?ELS24 EQUAL? PRSO,FAST,MEDIUM,SLOW \FALSE CALL PERFORM,V?SET,THROTTLE,PRSO RTRUE ?ELS24: EQUAL? PRSA,V?LEAVE,V?DISEMBARK \?ELS31 ZERO? PRSO /?THN34 EQUAL? PRSO,LOCAL-SUB \?ELS31 ?THN34: CALL SUB-EXIT-F >RM ZERO? RM /TRUE CALL GOTO,RM ZERO? STACK /TRUE EQUAL? WINNER,PLAYER /TRUE CALL OKAY RTRUE ?ELS31: CALL DOCKING-VERB? ZERO? STACK /?ELS45 EQUAL? NOW-TERRAIN,BAY-TERRAIN \?ELS50 PRINTI "You can't go back to the " PRINTD TEST-TANK PRINTR " now!" ?ELS50: CALL SUB-OUTSIDE-AIRLOCK? ZERO? STACK \?ELS54 CALL TOO-BAD-BUT,AIRLOCK,STR?16 RSTACK ?ELS54: FSET? AIRLOCK-HATCH,OPENBIT /?ELS56 CALL TOO-BAD-BUT,AIRLOCK-HATCH,STR?17 RSTACK ?ELS56: SET 'THROTTLE-SETTING,1 SET 'JOYSTICK-DIR,P?NORTH SET 'SUB-DLON,0 SET 'SUB-DLAT,1 RTRUE ?ELS45: ZERO? SUB-IN-DOME \?ELS60 EQUAL? PRSA,V?WALK-TO,V?FIND \?ELS60 EQUAL? PRSO,DOCKING-TANK,AQUADOME,LOCAL-SUB \?ELS60 EQUAL? NOW-TERRAIN,BAY-TERRAIN,SEA-TERRAIN \FALSE CALL PERFORM,V?FIND,PLAYER RTRUE ?ELS60: EQUAL? PRSA,V?LEVEL,V?CLIMB-UP,V?CLIMB-DOWN \?ELS69 ZERO? SUB-IN-TANK \?THN75 ZERO? SUB-IN-DOME /?ELS74 ?THN75: PRINTI "You can't do that while the " PRINTD SUB PRINTR " is here." ?ELS74: EQUAL? PRSA,V?LEVEL \?ELS80 SET 'TARGET-DEPTH,SUB-DEPTH RTRUE ?ELS80: FSET? PRSO,UNITBIT \FALSE EQUAL? PRSA,V?CLIMB-DOWN \?ELS85 MUL 5,SUB-DEPTH ADD STACK,P-NUMBER >P-NUMBER JUMP ?CND83 ?ELS85: EQUAL? PRSA,V?CLIMB-UP \?CND83 MUL 5,SUB-DEPTH SUB STACK,P-NUMBER >P-NUMBER GRTR? 0,P-NUMBER \?CND83 PRINTR "You're not deep enough!" ?CND83: CALL PERFORM,V?DIVE,PRSO RTRUE ?ELS69: EQUAL? PRSA,V?WALK \?ELS94 EQUAL? PRSO,UNDERWATER \?CND95 SET 'PRSO,P?DOWN ?CND95: LESS? PRSO,LOW-DIRECTION \?CND98 CALL V-WALK-AROUND RTRUE ?CND98: EQUAL? PRSO,P?OUT,P?IN /FALSE EQUAL? PRSO,P?UP,P?DOWN \?CND104 SET 'P-NUMBER,5 EQUAL? PRSO,P?UP \?ELS109 CALL PERFORM,V?CLIMB-UP,METER RTRUE ?ELS109: CALL PERFORM,V?CLIMB-DOWN,METER RTRUE ?CND104: EQUAL? PRSO,FAST,MEDIUM,SLOW \?CND112 CALL PERFORM,V?SET,THROTTLE,PRSO RTRUE ?CND112: EQUAL? PRSO,P?EAST,P?SE,P?NE \?ELS117 SET 'SUB-DLON,1 JUMP ?CND115 ?ELS117: EQUAL? PRSO,P?WEST,P?SW,P?NW \?ELS119 SET 'SUB-DLON,-1 JUMP ?CND115 ?ELS119: SET 'SUB-DLON,0 ?CND115: EQUAL? PRSO,P?NORTH,P?NW,P?NE \?ELS124 SET 'SUB-DLAT,1 JUMP ?CND122 ?ELS124: EQUAL? PRSO,P?SOUTH,P?SW,P?SE \?ELS126 SET 'SUB-DLAT,-1 JUMP ?CND122 ?ELS126: SET 'SUB-DLAT,0 ?CND122: FSET? AUTO-PILOT,ONBIT \?ELS131 PRINTI "Let the " PRINTD AUTO-PILOT PRINTI " handle that." CRLF JUMP ?CND129 ?ELS131: ZERO? SUB-IN-TANK /?ELS135 CALL TRY-TO-EMERGE,P?EAST,TANK-GATE,TEST-TANK-FULL JUMP ?CND129 ?ELS135: ZERO? SUB-IN-DOME /?ELS138 CALL TRY-TO-EMERGE,P?SOUTH,AIRLOCK-HATCH,AIRLOCK-FULL JUMP ?CND129 ?ELS138: CALL READY-FOR-SNARK? ZERO? STACK /?ELS141 ZERO? TOLD-SNARK-WENT /?ELS141 FSET? SNARK,INVISIBLE \?ELS141 EQUAL? SUB-DEPTH,AIRLOCK-DEPTH \?ELS141 EQUAL? PRSO,P?SE \?ELS141 EQUAL? JOYSTICK-DIR,PRSO /?ELS141 PRINTI "Pulses racing and hearts thumping, you and Tip at last set out to capture the monstrous Snark!" CRLF JUMP ?CND129 ?ELS141: CALL SUB-NOW-HEADING ?CND129: SET 'JOYSTICK-DIR,PRSO RTRUE ?ELS94: EQUAL? PRSA,V?WALK-UNDER \?ELS149 EQUAL? PRSO,SEA,BAY,GLOBAL-WATER \?ELS149 ZERO? SUB-DEPTH \?ELS156 CALL DO-WALK,P?DOWN RTRUE ?ELS156: PRINTI "You're already " PRINTD UNDERWATER PRINTR "." ?ELS149: CALL EXIT-VERB? ZERO? STACK /?ELS162 CALL CANT-GO-TO-THRU-CLOSED-HATCH? ZERO? STACK \TRUE ?ELS162: EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE \?ELS169 EQUAL? PRSO,DOCKING-TANK,TEST-TANK \?ELS169 PRINT I-ASSUME PRINTI " look through the " PRINTD SUB-WINDOW PRINTI ".)" CRLF CALL PERFORM,V?LOOK-INSIDE,SUB-WINDOW RTRUE ?ELS169: EQUAL? PRSA,V?EXAMINE \?ELS175 EQUAL? PRSO,GLOBAL-SNARK,SNARK /?THN178 EQUAL? PRSO,GLOBAL-SHARON,GLOBAL-THORPE,THORPE-SUB \?ELS175 ?THN178: FSET? SNARK,INVISIBLE /?ELS184 PRINTI "The " PRINTD GLOBAL-WATER PRINTR " is too cloudy to see anything." ?ELS184: CALL TOO-BAD-BUT,PRSO,STR?16 RSTACK ?ELS175: EQUAL? PRSA,V?DROP \?ELS190 GET ON-SUB,0 >?TMP1 GET ON-SUB,1 EQUAL? PRSO,?TMP1,STACK \?ELS190 GET ON-SUB,0 EQUAL? PRSO,STACK \?ELS195 PUT ON-SUB,0,FALSE-VALUE JUMP ?CND193 ?ELS195: GET ON-SUB,1 EQUAL? PRSO,STACK \?CND193 PUT ON-SUB,1,FALSE-VALUE ?CND193: ZERO? SUB-IN-TANK /?ELS200 MOVE PRSO,NORTH-TANK-AREA JUMP ?CND198 ?ELS200: ZERO? SUB-IN-DOME /?ELS203 MOVE PRSO,AIRLOCK JUMP ?CND198 ?ELS203: REMOVE PRSO ?CND198: FCLEAR PRSO,NDESCBIT FSET PRSO,TAKEBIT FCLEAR PRSO,TRYTAKEBIT PRINTR "Dropped." ?ELS190: EQUAL? PRSA,V?TAKE-WITH \FALSE EQUAL? PRSI,CLAW \FALSE LOC PRSO EQUAL? STACK,AIRLOCK,NORTH-TANK-AREA /?ELS217 CALL TOO-BAD-BUT,PRSO,STR?18 RSTACK ?ELS217: FSET? PRSO,TAKEBIT /?ELS219 CALL YOU-CANT,STR?19 RSTACK ?ELS219: CALL MOUNT-WEAPON,PRSO ZERO? STACK /TRUE PRINTR "Taken." ?ELS5: EQUAL? RARG,M-ENTER \?ELS227 CALL POPULATION,SUB,TIP,PLAYER ZERO? STACK /?CND228 CALL TOO-CROWDED ZERO? SUB-IN-DOME /?ELS233 CALL GOTO,AIRLOCK RTRUE ?ELS233: ZERO? SUB-IN-TANK /TRUE CALL GOTO,NORTH-TANK-AREA RTRUE ?CND228: CALL QUEUE,I-POISON-JAB,9 PUT STACK,0,1 GET ON-SUB,0 >X ZERO? X /?CND238 MOVE X,SUB ?CND238: GET ON-SUB,1 >X ZERO? X /?CND241 MOVE X,SUB ?CND241: IN? ESCAPE-POD-UNIT,SUB \?CND244 FSET? SYRINGE,MUNGBIT \?CND244 FSET? SYRINGE,TOUCHBIT /?CND244 CALL QUEUE,I-CHECK-POD,1 PUT STACK,0,1 ?CND244: ZERO? SUB-IN-DOME /?CND249 CALL READY-FOR-SNARK? ZERO? STACK /?CND249 CALL SOMEONE-WORKING? ZERO? STACK \?CND249 FCLEAR SUB-DOOR,OPENBIT MOVE TIP,HERE PRINTI "As you and Tip take your places in your seats, " FSET? AIRLOCK-ROOF,OPENBIT \?ELS258 CALL AIRLOCK-POP? ZERO? STACK \?ELS258 FCLEAR AIRLOCK-ROOF,OPENBIT PRINTI "and close the hatch, the " PRINTD AIRLOCK-ROOF PRINTI " is also sliding shut." CRLF JUMP ?CND249 ?ELS258: PRINTI "Tip closes the hatch." CRLF ?CND249: CALL SCORE-OBJ,SUB RTRUE ?ELS227: EQUAL? RARG,M-LOOK \FALSE PRINTI "You're in the pilot's seat of the " PRINTD SUB PRINTI ", its operating " PRINTD CONTROLS-SUB PRINTI " before you." FSET? ENGINE-ACCESS-HATCH,OPENBIT \?CND271 PRINTI " The " PRINTD ENGINE-ACCESS-HATCH PRINTI " is open." ?CND271: PRINTI " A wraparound " PRINTD SUB-WINDOW PRINTI ", both fore and aft, provides a view ahead and astern." ZERO? SUB-DEPTH \?CND278 ZERO? SUB-IN-TANK \?CND278 PRINTI " Sunlight pours in through the " PRINTD SUB-WINDOW PRINTI "." ?CND278: PRINTI " You can also observe your surroundings with a " PRINTD SONARSCOPE PRINTI " and a " PRINTD HYDROPHONE PRINTI " listening device. There's a " PRINTD SONARPHONE PRINTR " for communication. You'll discover other features when you need them." .FUNCT TOO-CROWDED PRINTR "It's too crowded in here! You'll have to wait outside." .FUNCT TRY-TO-EMERGE,DIR,GATE,FULL? ZERO? FULL? \?ELS5 PRINTI "You can't turn the sub around while the " EQUAL? DIR,P?EAST \?ELS10 PRINTD TEST-TANK JUMP ?CND8 ?ELS10: PRINTD AIRLOCK ?CND8: PRINTR " is empty." ?ELS5: EQUAL? PRSO,DIR \?ELS20 ZERO? THROTTLE-SETTING /?ELS25 FSET? ENGINE,ONBIT /?ELS30 PRINTI "Nothing happens when you push the " PRINTD JOYSTICK PRINTI ". The engine is off." ZERO? GATE-CRASHED /?CND33 PRINTI " It was stopped by Automatic Shutoff when you crashed into the sea gate." ?CND33: CRLF RTRUE ?ELS30: CALL HATCH-GATE-NOT-READY?,GATE ZERO? STACK \TRUE EQUAL? DIR,P?SOUTH \?ELS42 CALL SUB-LEAVES,FALSE-VALUE,P?SOUTH RSTACK ?ELS42: CALL SUB-LEAVES,TRUE-VALUE,P?EAST RSTACK ?ELS25: CALL SUB-NOW-HEADING RSTACK ?ELS20: PRINTI "Okay, the " PRINTD JOYSTICK PRINTI " is now pointing to " CALL DIR-PRINT,PRSO PRINTI ". But the only way the sub can leave the tank is to " CALL DIR-PRINT,DIR PRINTR "." .FUNCT HATCH-GATE-NOT-READY?,GATE FSET? SUB-DOOR,OPENBIT \?ELS5 CALL THIS-IS-IT,SUB-DOOR PRINTR "You shouldn't leave the tank with the hatch open!" ?ELS5: FSET? GATE,OPENBIT /FALSE CALL GATE-CRASH,STR?20,JOYSTICK,GATE RTRUE .FUNCT READY-FOR-SNARK? GET ON-SUB,0 EQUAL? BAZOOKA,STACK /?THN3 GET ON-SUB,1 EQUAL? DART,STACK \FALSE ?THN3: RETURN FINE-SONAR .FUNCT SUB-LEAVES,FROM-LAB?,DIR ZERO? FROM-LAB? /?ELS3 SET 'GATE-CRASHED,FALSE-VALUE SET 'SUB-IN-TANK,FALSE-VALUE REMOVE SHARON CALL ROB,SHARON,GLOBAL-SHARON SET 'ALARM-RINGING,FALSE-VALUE GETPT VIDEOPHONE-2,P?SYNONYM PUT STACK,0,W?ZZZZLG CALL QUEUE,I-UPDATE-SUB-POSITION,-1 PUT STACK,0,1 SET 'MONSTER-GONE,TRUE-VALUE SET 'NOW-TERRAIN,BAY-TERRAIN JUMP ?CND1 ?ELS3: SET 'SUB-IN-DOME,FALSE-VALUE SET 'NOW-TERRAIN,SEA-TERRAIN SET 'SUB-LON,0 SET 'SUB-LAT,-1 SET 'SUB-DEPTH,AIRLOCK-DEPTH SET 'TARGET-DEPTH,AIRLOCK-DEPTH ?CND1: ZERO? AUTOMATIC-SONAR /?CND7 CALL SPLIT-SCREEN? ZERO? STACK /?CND7 SET 'SCREEN-NOW-SPLIT,TRUE-VALUE CALL START-SONAR? ?CND7: PRINTI "The " PRINTD SUB PRINTI " glides smoothly out of the tank " ZERO? FROM-LAB? /?ELS16 PRINTI "onto the surface of " PRINTD BAY JUMP ?CND14 ?ELS16: PRINTI "into the ocean" ?CND14: PRINTI ". You're heading " CALL DIR-PRINT,DIR,FALSE-VALUE PRINTI " at " PRINTN THROTTLE-SETTING PRINTI " " PRINTD GRID-UNIT EQUAL? 1,THROTTLE-SETTING /?CND28 PRINTI "s" ?CND28: PRINTI " per turn." CRLF ZERO? FROM-LAB? /?ELS37 CALL SCORE-OBJ,BAY JUMP ?CND35 ?ELS37: FSET? TIP,BUSYBIT \?CND41 CALL I-TIP-REPORTS ?CND41: CALL READY-FOR-SNARK? ZERO? STACK /?ELS46 CALL SCORE-OBJ,AIRLOCK SET 'LEFT-DOME,MOVES CALL QUEUE,I-THORPE-APPEARS,-1 PUT STACK,0,1 JUMP ?CND35 ?ELS46: CALL TIP-SAYS PRINTI "I've got a bad feeling about this. I don't think we should go out there without a " ZERO? FINE-SONAR /?ELS53 PRINTI "weapon of some kind.""" CRLF JUMP ?CND44 ?ELS53: PRINTD FINE-GRID PRINTI ".""" CRLF ?CND44: ?CND35: CALL SAVE-HINT RTRUE .FUNCT HEADING-FOR-SEAWALL?,Y-X EQUAL? NOW-TERRAIN,BAY-TERRAIN \FALSE CALL OBSTACLE-AHEAD?,SUB-DEPTH,SUB-LON,SUB-LAT ZERO? STACK \FALSE EQUAL? PRSO,P?NORTH \?ELS9 GRTR? SUB-LON,29 \FALSE LESS? SUB-LON,35 /TRUE ?ELS9: EQUAL? PRSO,P?EAST \?ELS18 GRTR? SUB-LAT,35 \FALSE LESS? SUB-LAT,41 /TRUE ?ELS18: EQUAL? PRSO,P?NE \FALSE SUB SUB-LAT,SUB-LON >Y-X GRTR? Y-X,0 \FALSE LESS? Y-X,12 /TRUE RFALSE .FUNCT SUB-NOW-HEADING PRINTI "Okay, the " PRINTD SUB PRINTI " is " EQUAL? JOYSTICK-DIR,PRSO \?ELS5 ZERO? SUB-IN-BATTLE \?CND6 INC 'SUB-STILL-HEADING ?CND6: PRINTI "still " JUMP ?CND3 ?ELS5: PRINTI "now " ?CND3: ZERO? THROTTLE-SETTING \?ELS17 PRINTI "facing" JUMP ?CND15 ?ELS17: PRINTI "moving" ?CND15: PRINTI " toward " CALL DIR-PRINT,PRSO CALL HEADING-FOR-SEAWALL? ZERO? STACK /?CND26 PRINTI ", straight toward the opening in the " PRINTD SEA-WALL ?CND26: ZERO? THROTTLE-SETTING \?CND31 CALL THIS-IS-IT,THROTTLE PRINTI ". But it won't go that way unless you open the " PRINTD THROTTLE ?CND31: PRINTI "." CRLF EQUAL? SUB-STILL-HEADING,9 \FALSE SET 'SUB-STILL-HEADING,0 PRINTI "(You didn't change the " PRINTD SUB PRINTI "'s heading. Remember, you don't have to type a " PRINTD INTDIR PRINTR " every turn if you want to WAIT or do something else.)" .FUNCT SUB-DOOR-F EQUAL? PRSA,V?CLOSE \?ELS5 ZERO? SUB-IN-DOME /?ELS10 FSET? AIR-SUPPLY-SYSTEM,MUNGBIT \?ELS10 PRINTR "It's too soon for that!" ?ELS10: CALL SOMEONE-WORKING? ZERO? STACK /?ELS16 PRINTR "There are too many people inside." ?ELS16: EQUAL? HERE,SUB /?ELS20 PRINTI "You should board the " PRINTD SUB PRINTR " first." ?ELS20: LOC TIP EQUAL? STACK,SUB,CRAWL-SPACE /FALSE FSET? TIP,BUSYBIT \?ELS27 CALL I-TIP-REPORTS RFALSE ?ELS27: MOVE TIP,SUB PRINTI "Tip rushes in just before you close it. ""Wait for me, " CALL PRINT-NAME,FIRST-NAME PRINTI "!""" CRLF RFALSE ?ELS5: EQUAL? PRSA,V?OPEN \FALSE GRTR? SUB-DEPTH,0 \?ELS38 ZERO? SUB-IN-DOME /?THN41 ZERO? AIRLOCK-FULL /?ELS38 ?THN41: CALL YOU-CANT,STR?21,SUB,STR?22 RSTACK ?ELS38: ZERO? SUB-IN-OPEN-SEA /?ELS44 PRINTR "This is no time for a swim!" ?ELS44: EQUAL? HERE,SUB,NORTH-TANK-AREA,AIRLOCK /?ELS49 PRINTI "You can't reach" CALL THE-PRSO-PRINT PRINTR " from here." ?ELS49: ZERO? GREENUP-ESCAPE \?THN54 ZERO? GREENUP-TRAPPED /FALSE ?THN54: FSET SUB-DOOR,OPENBIT PRINTI "Before the crew can carry out your order, the hatch opens. Greenup rises into view from the pilot's seat and gives himself up. " CALL GREENUP-CUFF RTRUE .FUNCT SUB-WINDOW-F,POP,?TMP1 EQUAL? PRSA,V?BRUSH \?ELS5 CALL ALREADY,SUB-WINDOW,STR?23 RSTACK ?ELS5: EQUAL? PRSA,V?LOOK-OUTSIDE,V?LOOK-INSIDE \?ELS7 ZERO? SUB-IN-TANK /?ELS13 PRINTR "You can see the test tank outside." ?ELS13: EQUAL? NOW-TERRAIN,BAY-TERRAIN \?ELS18 ZERO? SUB-DEPTH \?ELS21 PRINTI "Frobton is a busy seaport full of constantly moving pleasure boats, fishing craft and commercial shipping. The biggest ships move in the shipping lanes, but you can dive to 15 meters and go under them. Observe all ""Rules of the Road"", unless you want to submerge. When you're " PRINTD UNDERWATER PRINTR ", you should avoid shallow areas called shoals." ?ELS21: CALL PLENTY-WATER RTRUE ?ELS18: ZERO? SUB-IN-OPEN-SEA /?ELS27 LESS? DISTANCE-FROM-BAY,AQUADOME-VISIBLE /?ELS31 PRINTI "You can see the " PRINTD AQUADOME PRINTR "." ?ELS31: FSET? WHALE,INVISIBLE /?ELS35 PRINTR "The whale is still following you." ?ELS35: FSET? SEARCH-BEAM,ONBIT \?ELS39 PRINTI "Your sub's " PRINTD SEARCH-BEAM PRINTI " lights up the " PRINTD GLOBAL-WATER PRINTR " outside." ?ELS39: CALL PLENTY-WATER RTRUE ?ELS27: EQUAL? NOW-TERRAIN,SEA-TERRAIN \?ELS45 EQUAL? SUB-DEPTH,AIRLOCK-DEPTH \?ELS45 MUL SUB-LON,SUB-LON >?TMP1 MUL SUB-LAT,SUB-LAT ADD ?TMP1,STACK GRTR? 4,STACK \?ELS45 PRINTI "You can see the " PRINTD AQUADOME PRINTR "." ?ELS45: ZERO? SUB-IN-DOME /?ELS51 CALL ROOM-PEEK,AIRLOCK RTRUE ?ELS51: FSET? SNARK,INVISIBLE /?ELS54 ZERO? SUB-IN-BATTLE /?ELS57 CALL TOO-CLOUDY RTRUE ?ELS57: PRINTI "You can see the " PRINTD SNARK PRINTI " and the " PRINTD THORPE-SUB PRINTI " in the " PRINTD SEARCH-BEAM PRINTR " beam." ?ELS54: CALL PLENTY-WATER RTRUE ?ELS7: EQUAL? PRSA,V?MUNG \?ELS66 PRINTR "Vandalism is for vandals, not famous inventors!" ?ELS66: EQUAL? PRSA,V?UNLOCK /?THN71 EQUAL? PRSA,V?LOCK,V?CLOSE,V?OPEN \?ELS70 ?THN71: PRINTR "You can't." ?ELS70: EQUAL? PRSA,V?STOP \FALSE CALL PERFORM,V?LEVEL RTRUE .FUNCT TOO-CLOUDY PRINTI "The " PRINTD GLOBAL-WATER PRINTR " is too cloudy to see much." .FUNCT PLENTY-WATER PRINTI "You can see plenty of " PRINTD GLOBAL-WATER PRINTR "." .FUNCT ENGINE-ACCESS-HATCH-F EQUAL? PRSA,V?TAKE \?ELS5 ZERO? PRSI \FALSE CALL PERFORM,V?OPEN,PRSO RTRUE ?ELS5: EQUAL? PRSA,V?TAKE-WITH \?ELS12 EQUAL? PRSI,UNIVERSAL-TOOL \FALSE CALL PERFORM,V?OPEN-WITH,PRSO,PRSI RTRUE ?ELS12: EQUAL? PRSA,V?OPEN-WITH,V?OPEN \?ELS19 EQUAL? PRSO,ENGINE-ACCESS-HATCH \?ELS19 IN? WINNER,SUB \?ELS19 IN? UNIVERSAL-TOOL,WINNER /?ELS19 PRINTR "Suggest you read the stenciled sign." ?ELS19: EQUAL? PRSA,V?ANALYZE,V?EXAMINE,V?READ \FALSE IN? WINNER,SUB \FALSE PRINTI """THIS REQUIRES SPECIAL ULTRA WRENCH FROM SUB TOOL KIT.""" CRLF IN? UNIVERSAL-TOOL,TIP \TRUE CALL THIS-IS-IT,UNIVERSAL-TOOL CALL TELL-HINT,61,TIP,FALSE-VALUE RTRUE .FUNCT CRAWL-SPACE-F,RARG=0 EQUAL? RARG,M-BEG \?ELS5 CALL EXIT-VERB? ZERO? STACK /?CND6 MOVE ENGINE,SUB RFALSE ?CND6: CALL GAME-VERB? ZERO? STACK \FALSE EQUAL? P-ADVERB,W?CAREFULLY /FALSE RANDOM 100 GRTR? 20,STACK \?ELS19 FSET? ENGINE,ONBIT \?ELS19 ZERO? SUB-IN-TANK \?ELS19 ZERO? SUB-IN-DOME \?ELS19 PRINTI " Suddenly the " PRINTD SUB PRINTI " begins to shake violently! Your foot has knocked an engine bearing out of alignment! It will be necessary to surface at once and await rescue! Your mission must be aborted." CALL FINISH RSTACK ?ELS19: RANDOM 100 GRTR? 20,STACK \FALSE FSET? GASH,INVISIBLE \FALSE FSET ARM,MUNGBIT FCLEAR GASH,INVISIBLE PRINTI "There's a sharp pain in your right arm! A flood of wet warmth and a spreading red stain mean you've seriously gashed your arm on a sharp metal corner!" CRLF RFALSE ?ELS5: EQUAL? RARG,M-ENTER \?ELS31 CALL POPULATION,CRAWL-SPACE,PLAYER ZERO? STACK /?ELS36 CALL TOO-CROWDED CALL GOTO,SUB RSTACK ?ELS36: MOVE ENGINE,CRAWL-SPACE RFALSE ?ELS31: ZERO? RARG \FALSE EQUAL? PRSA,V?FIND \?ELS43 EQUAL? HERE,CRAWL-SPACE \?ELS48 PRINTR "You're in it!" ?ELS48: PRINTI "It's located beyond an " PRINTD ENGINE-ACCESS-HATCH PRINTR " in the bulkhead just below and to the right of control panel." ?ELS43: EQUAL? PRSA,V?LOOK-INSIDE,V?OPEN \?ELS56 EQUAL? PRSO,CRAWL-SPACE \FALSE CALL PERFORM,PRSA,ENGINE-ACCESS-HATCH,PRSI RTRUE ?ELS56: EQUAL? PRSA,V?WALK-TO,V?THROUGH \FALSE FSET? ENGINE-ACCESS-HATCH,OPENBIT \?ELS68 CALL GOTO,CRAWL-SPACE ZERO? STACK /TRUE PRINTI "BE CAREFUL: Too much wriggling may pose SERIOUS DANGERS!" FSET? ENGINE,ONBIT \?CND74 PRINTI " And wouldn't it be safer to stop the engine first?" ?CND74: CRLF RTRUE ?ELS68: CALL TOO-BAD-BUT,ENGINE-ACCESS-HATCH,STR?17 CALL THIS-IS-IT,ENGINE-ACCESS-HATCH RETURN 2 .FUNCT VOLTAGE-REGULATOR-F EQUAL? PRSA,V?WALK-TO \?ELS5 EQUAL? HERE,CRAWL-SPACE /FALSE CALL PERFORM,PRSA,CRAWL-SPACE RTRUE ?ELS5: EQUAL? PRSA,V?FIND \?ELS12 EQUAL? HERE,CRAWL-SPACE \FALSE FCLEAR VOLTAGE-REGULATOR,NDESCBIT PRINTR "You find it in the middle of some complicated machinery." ?ELS12: EQUAL? PRSA,V?EXAMINE,V?ANALYZE \?ELS21 FSET? VOLTAGE-REGULATOR,MUNGBIT \FALSE PRINTR "It's hard to tell anything by looking at it." ?ELS21: EQUAL? PRSA,V?FIX,V?ADJUST \FALSE FSET? ARM,MUNGBIT \?ELS35 PRINTR "You can't do that since you gashed your arm!" ?ELS35: FSET? VOLTAGE-REGULATOR,MUNGBIT /?ELS39 CALL ALREADY,VOLTAGE-REGULATOR,STR?27 RSTACK ?ELS39: SET 'TEST-BUTTON-READOUT,TEST-BUTTON-NORMAL PRINTI "Fixed." CRLF CALL COOL-BACK FCLEAR VOLTAGE-REGULATOR,MUNGBIT RTRUE .FUNCT COOL-BACK,X LESS? 20,CIRCUIT-TEMP \FALSE FSET? VOLTAGE-REGULATOR,MUNGBIT \FALSE SUB CIRCUIT-TEMP,15 >X PRINTI "It will take about " PRINTN X PRINTI " turn" EQUAL? X,1 /?CND10 PRINTI "s" ?CND10: PRINTI " for the " PRINTD CONTROL-CIRCUITS PRINTR " to cool to a normal operating temperature." .FUNCT GET5,TBL5,NUM,NUM1,?TMP1 SUB NUM,1 >NUM1 MOD NUM1,5 GET TBL5-MASK,STACK >?TMP1 DIV NUM1,5 ADD 1,STACK GET TBL5,STACK BAND ?TMP1,STACK >?TMP1 MOD NUM1,5 GET TBL5-SHIFT,STACK DIV ?TMP1,STACK RSTACK .FUNCT ADD-WARNING,MSG,RTRUE?=0,TBL,LEN,N,M ZERO? RTRUE? /?CND1 SET 'WARNINGS-RTRUE,TRUE-VALUE ?CND1: SET 'TBL,WARNINGS-THIS-TURN GET TBL,0 EQUAL? STACK,WARNINGS-USED /TRUE GET TBL,0 >LEN SET 'N,0 ?PRG8: IGRTR? 'N,LEN /TRUE GET TBL,N >M EQUAL? MSG,M /TRUE EQUAL? MSG,5 \?ELS17 EQUAL? M,3,9 /TRUE ?ELS17: EQUAL? MSG,6 \?ELS21 EQUAL? M,4,11 /TRUE ?ELS21: EQUAL? MSG,8 \?ELS25 EQUAL? M,7 /TRUE ?ELS25: GET TBL,N ZERO? STACK \?PRG8 PUT TBL,N,MSG SET 'WARNINGS-USED,N RTRUE .FUNCT GIVE-WARNINGS,TBL,LEN,N,MSG,SONAR?=0 SET 'TBL,WARNINGS-THIS-TURN SET 'LEN,WARNINGS-USED SET 'N,0 ?PRG1: IGRTR? 'N,LEN \?ELS5 JUMP ?REP2 ?ELS5: GET TBL,N >MSG ZERO? MSG \?CND3 JUMP ?REP2 ?CND3: SET 'WARNINGS-USED,0 PUT TBL,N,0 ZERO? SUB-IN-OPEN-SEA /?CND8 JUMP ?PRG1 ?CND8: EQUAL? MSG,1 \?ELS14 PRINTI " A speedboat came out of nowhere and almost hit you! It's dangerous on the surface of the bay." JUMP ?CND12 ?ELS14: EQUAL? MSG,2 \?ELS18 SET 'SONAR?,TRUE-VALUE PRINTI " If you don't change course or stop, you'll crash!" JUMP ?CND12 ?ELS18: EQUAL? MSG,3,4 \?ELS22 CALL THIS-IS-IT,DEPTHFINDER-LIGHT PRINTI "Suddenly a loud " PRINTD ALARM-SUB PRINTI " begins to ring! The " PRINTD DEPTHFINDER-LIGHT PRINTI " has begun to glow " EQUAL? MSG,3 \?ELS29 PUSH STR?28 JUMP ?CND25 ?ELS29: PUSH STR?29 ?CND25: PRINT STACK PRINTI "." JUMP ?CND12 ?ELS22: EQUAL? MSG,5,6 \?ELS33 CALL THIS-IS-IT,ALARM-SUB PRINTI "The " PRINTD DEPTHFINDER-LIGHT PRINTI " is still glowing " EQUAL? MSG,5 \?ELS40 PUSH STR?28 JUMP ?CND36 ?ELS40: PUSH STR?29 ?CND36: PRINT STACK PRINTI ", and the " PRINTD ALARM-SUB PRINTI " is still ringing." JUMP ?CND12 ?ELS33: EQUAL? MSG,7,8 \?ELS44 SET 'SONAR?,TRUE-VALUE PRINTI "The " PRINTD SONARSCOPE EQUAL? MSG,8 \?CND47 CALL THIS-IS-IT,SONARSCOPE PRINTI " still" ?CND47: PRINTI " shows an obstacle ahead!" EQUAL? MSG,7 \?CND12 CALL THIS-IS-IT,SUB PRINTI " Unless you change course, you will crash the " PRINTD SUB PRINTI "!" JUMP ?CND12 ?ELS44: EQUAL? MSG,9,10,11 \?ELS60 CALL THIS-IS-IT,ALARM-SUB PRINTI "The " PRINTD DEPTHFINDER-LIGHT PRINTI " " EQUAL? MSG,9 \?ELS67 PUSH STR?30 JUMP ?CND63 ?ELS67: EQUAL? MSG,10 \?ELS69 PUSH STR?31 JUMP ?CND63 ?ELS69: PUSH STR?32 ?CND63: PRINT STACK PRINTI ", and the " PRINTD ALARM-SUB PRINTI " " EQUAL? MSG,9 \?ELS76 PUSH STR?33 JUMP ?CND72 ?ELS76: EQUAL? MSG,10 \?ELS78 PUSH STR?34 JUMP ?CND72 ?ELS78: PUSH STR?35 ?CND72: PRINT STACK JUMP ?CND12 ?ELS60: EQUAL? MSG,12,13 \?ELS82 SET 'SONAR?,TRUE-VALUE CALL THIS-IS-IT,FREIGHTER PRINTI "The " PRINTD SONARSCOPE-LIGHT PRINTI " is flashing yellow! A" EQUAL? MSG,13 \?CND85 PRINTI "nother" ?CND85: PRINTI " ship is approaching!" JUMP ?CND12 ?ELS82: EQUAL? MSG,14 \?CND12 SET 'SONAR?,TRUE-VALUE PRINTI " The yellow " PRINTD SONARSCOPE-LIGHT PRINTI " just turned red! A loud " PRINTD ALARM-SUB PRINTI " is sending chills up and down your spine! The keel of the approaching ship is visible in your " PRINTD SUB-WINDOW FSET? HYDROPHONE,ONBIT \?CND96 PRINTI ", and the noise of its screws booms over the " PRINTD HYDROPHONE ?CND96: PRINTI "!" ?CND12: CRLF JUMP ?PRG1 ?REP2: ZERO? SONAR? /?CND103 ZERO? AUTOMATIC-SONAR \?CND103 ZERO? LOOKED-AT-SONAR \?CND103 CALL THIS-IS-IT,SONARSCOPE CALL TIP-SAYS PRINTI "Hey, " CALL PRINT-NAME,FIRST-NAME PRINTI ", maybe you should look at the " PRINTD SONARSCOPE PRINTI ".""" CRLF ?CND103: ZERO? WARNINGS-RTRUE /FALSE SET 'WARNINGS-RTRUE,FALSE-VALUE RTRUE .FUNCT SAVE-HINT PRINTR "(This might be a good time to use the command: SAVE.)" .FUNCT FALL-FROM-CLAW,NUM,X GET ON-SUB,NUM >X ZERO? X /FALSE PRINTI "You can see" CALL PRINTT,X PRINTI " fall out of the " PRINTD CLAW PRINTI " and sink." CRLF REMOVE X RTRUE .FUNCT I-UPDATE-SUB-POSITION,LON,LAT,DEP,TH,VAL=0,?ORTMP ZERO? SUB-IN-TANK \FALSE LESS? 0,CIRCUIT-TEMP \?CND5 DEC 'CIRCUIT-TEMP ?CND5: FSET? VOLTAGE-REGULATOR,MUNGBIT \?CND8 ADD CIRCUIT-TEMP,THROTTLE-SETTING >CIRCUIT-TEMP ?CND8: LESS? 20,CIRCUIT-TEMP \?ELS13 ZERO? CIRCUIT-TIP \?ELS13 SET 'CIRCUIT-TIP,TRUE-VALUE MOVE OVERHEATING,GLOBAL-OBJECTS CRLF PRINTI "Suddenly " CALL TIP-SAYS CALL PRINT-NAME,FIRST-NAME PRINTI "! Look at the way that " PRINTD CONTROL-CIRCUITS PRINTI " " PRINTD CONTROL-CIRCUITS-GAUGE PRINTI " is rising!""" CRLF SET 'VAL,TRUE-VALUE JUMP ?CND11 ?ELS13: LESS? 20,CIRCUIT-TEMP /?ELS21 ZERO? CIRCUIT-TIP /?ELS21 SET 'CIRCUIT-TIP,FALSE-VALUE JUMP ?CND11 ?ELS21: LESS? 25,CIRCUIT-TEMP /?ELS25 ZERO? CIRCUIT-RED /?ELS25 SET 'CIRCUIT-RED,FALSE-VALUE EQUAL? HERE,SUB \?CND11 CRLF PRINTI "The " PRINTD CONTROL-CIRCUITS-GAUGE PRINTI " drops below the red danger zone." CRLF JUMP ?CND11 ?ELS25: LESS? 25,CIRCUIT-TEMP \?ELS34 ZERO? CIRCUIT-RED \?ELS34 SET 'CIRCUIT-RED,TRUE-VALUE CRLF PRINTI "The " PRINTD CONTROL-CIRCUITS-GAUGE PRINTI " has entered the red danger zone! The circuit tester is activated. Push " PRINTD TEST-BUTTON PRINTI " for readout." CRLF SET 'TEST-BUTTON-READOUT,REGULATOR-MSG SET 'VAL,TRUE-VALUE JUMP ?CND11 ?ELS34: LESS? 30,CIRCUIT-TEMP \?CND11 CRLF PRINTI "The " PRINTD CONTROL-CIRCUITS-GAUGE PRINTI " has gone off the scale! The engine grinds to a halt. Your mission is finished." CALL FINISH ?CND11: ZERO? SUB-IN-DOME /?ELS45 RETURN VAL ?ELS45: FSET? AUTO-PILOT,ONBIT \?CND43 SET 'TH,THROTTLE-SETTING ?PRG49: DLESS? 'TH,0 \?CND51 RETURN VAL ?CND51: INC 'DISTANCE-FROM-BAY DIV DISTANCE-FROM-BAY,2 >DEP SET 'TARGET-DEPTH,DEP SET 'SUB-DEPTH,DEP EQUAL? DISTANCE-FROM-BAY,20 \?ELS59 CALL FALL-FROM-CLAW,0 CALL FALL-FROM-CLAW,1 JUMP ?PRG49 ?ELS59: EQUAL? DISTANCE-FROM-BAY,30 \?ELS61 CRLF PRINTI "The ocean has been getting darker as you dive toward the " PRINTD AQUADOME PRINTI ", turning from blue-green to dark green to a dull gray-green. It's becoming duskier and murkier with every minute." CRLF JUMP ?PRG49 ?ELS61: EQUAL? DISTANCE-FROM-BAY,39 \?ELS65 FSET? SEARCH-BEAM,ONBIT /?CND66 FSET SEARCH-BEAM,ONBIT CRLF PRINTI "A yellow cone of light now illumines the water ahead. The " PRINTD SUB PRINTI "'s " PRINTD SEARCH-BEAM PRINTI " was " PRINTD AUTOMATIC PRINTI "ally switched on by an electronic eye, now that you're too deep for the sun to light the water." CRLF ?CND66: CRLF PRINTI "Colorful sea life swims through the " PRINTD SEARCH-BEAM PRINTI " beam: a playful dolphin, a school of herring... Oh, oh! Here comes a hammerhead shark. And now a huge manta ray is gracefully gliding and flapping toward you." CRLF JUMP ?PRG49 ?ELS65: EQUAL? DISTANCE-FROM-BAY,45 \?ELS74 MOVE WHALE,SUB FSET? HYDROPHONE,ONBIT \?CND75 SET 'WHALE-HEARD,TRUE-VALUE PRINTI " A crooning noise comes over the " PRINTD HYDROPHONE PRINTI " loudspeaker, punctuated by sighs and moans and a few weird whistles." CRLF ?CND75: EQUAL? HERE,SUB \?PRG49 IN? TIP,HERE \?PRG49 PRINTI " ""There's a blip on the " PRINTD SONARSCOPE PRINTI " at three o'clock!"" yells Tip. ""Aim the " PRINTD SEARCH-BEAM PRINTI " to starboard, " CALL PRINT-NAME,FIRST-NAME PRINTR "!""" ?ELS74: EQUAL? DISTANCE-FROM-BAY,50 \?ELS88 FSET? VOLTAGE-REGULATOR,MUNGBIT \?ELS88 ZERO? CIRCUIT-TIP \?PRG49 SET 'CIRCUIT-TEMP,28 JUMP ?PRG49 ?ELS88: EQUAL? DISTANCE-FROM-BAY,AQUADOME-VISIBLE \?ELS95 REMOVE WHALE FSET WHALE,INVISIBLE SET 'BLY-CALLING,TRUE-VALUE CALL THIS-IS-IT,SONARPHONE FCLEAR SEARCH-BEAM,ONBIT PRINTI "The amazing " PRINTD AQUADOME PRINTI " looms ahead" FSET? SEARCH-BEAM,ONBIT \?ELS100 FCLEAR SEARCH-BEAM,ONBIT PRINTI ". Your " PRINTD SEARCH-BEAM PRINTI " switches off since the " PRINTD AQUADOME PRINTI "'s own" JUMP ?CND98 ?ELS100: PRINTI ". Its" ?CND98: PRINTI " bright lights suffuse the " PRINTD GLOBAL-WATER PRINTI " around it with a glowing radiance. The " PRINTD SONARPHONE PRINTR " is ringing." ?ELS95: LESS? DISTANCE-FROM-BAY,AQUADOME-DISTANCE /?PRG49 SET 'SUB-IN-OPEN-SEA,FALSE-VALUE FCLEAR AUTO-PILOT,ONBIT MOVE HORVAK-KEY,HORVAK SET 'NOW-TERRAIN,SEA-TERRAIN SET 'SUB-LON,0 SET 'SUB-LAT,-1 SET 'SUB-DEPTH,AIRLOCK-DEPTH SET 'TARGET-DEPTH,AIRLOCK-DEPTH SET 'DIVING?,0 SET 'THROTTLE-SETTING,0 SET 'JOYSTICK-DIR,P?NORTH SET 'SUB-DLON,0 SET 'SUB-DLAT,1 SET 'DEPTH-WARNING,FALSE-VALUE FCLEAR DEPTHFINDER,ONBIT FSET AIRLOCK-HATCH,OPENBIT CRLF PRINTI "The " PRINTD SUB PRINTI " slows to a gentle stop, with engine idling and the " PRINTD JOYSTICK PRINTI " pointing north. The " PRINTD AUTO-PILOT PRINTI " has brought you to the " PRINTD AIRLOCK PRINTI " on the south side of the " PRINTD AQUADOME PRINTI ". It also turned off the " PRINTD DEPTHFINDER PRINTI " for you. At " PRINTD BLY PRINTI "'s order, the " PRINTD AIRLOCK-HATCH PRINTI " slides open, but you could have done it by remote control, just as you " ZERO? OPENED-GATE-FROM-SUB /?ELS115 PRINTI "did " JUMP ?CND113 ?ELS115: PRINTI "could have " ?CND113: PRINTI "the " PRINTD TANK-GATE PRINTI ". The " PRINTD AIRLOCK PRINTI " is filling up with tons of " PRINTD GLOBAL-WATER PRINTI ". The " PRINTD AIRLOCK PRINTI " lies north. You can enter it by opening the " PRINTD THROTTLE PRINTI ". The bottom of the " PRINTD AIRLOCK PRINTI " has an adjustable plastic cradle, which adjusts to the keel of any submarine." CRLF RETURN 2 ?CND43: SET 'LON,SUB-LON SET 'LAT,SUB-LAT SET 'DEP,SUB-DEPTH SET 'TH,THROTTLE-SETTING ?PRG127: CALL CHANGE-DEPTH,DEP >DEP ZERO? TH /?CND129 ADD LON,SUB-DLON >LON ADD LAT,SUB-DLAT >LAT ?CND129: CALL COLLISION?,DEP,LON,LAT ZERO? STACK /?ELS134 JUMP ?REP128 ?ELS134: EQUAL? NOW-TERRAIN,SEA-TERRAIN \?ELS136 JUMP ?CND132 ?ELS136: ZERO? DEP \?ELS138 RANDOM 100 GRTR? 20,STACK \?ELS138 EQUAL? NOW-TERRAIN,BAY-TERRAIN \?ELS138 ZERO? SPEEDBOAT-WARNING-GIVEN? /?ELS143 EQUAL? MOVES,SPEEDBOAT-WARNING-GIVEN? /?ELS143 CALL GIVE-WARNINGS CRLF PRINTI "A speedboat came out of nowhere, hit your rudder, and ended your mission. Too bad you were " ZERO? EVER-SUBMERGED? \?CND148 PRINTI "still " ?CND148: PRINTI "on the surface." CALL FINISH JUMP ?CND132 ?ELS143: SET 'SPEEDBOAT-WARNING-GIVEN?,MOVES CALL ADD-WARNING,1,TRUE-VALUE JUMP ?CND132 ?ELS138: CALL TIME-FOR-FREIGHTER?,DEP,LON,LAT ZERO? STACK /?ELS158 EQUAL? JOYSTICK-DIR,P?NORTH \?ELS161 SET 'FREIGHTER-LON,LON SET 'FREIGHTER-DLON,0 ADD LAT,SONAR-RANGE >FREIGHTER-LAT SET 'FREIGHTER-DLAT,-1 JUMP ?CND159 ?ELS161: EQUAL? JOYSTICK-DIR,P?EAST \?ELS163 ADD LON,SONAR-RANGE >FREIGHTER-LON SET 'FREIGHTER-DLON,-1 SET 'FREIGHTER-LAT,LAT SET 'FREIGHTER-DLAT,0 JUMP ?CND159 ?ELS163: ADD LON,SONAR-RANGE >FREIGHTER-LON SET 'FREIGHTER-DLON,-1 ADD LAT,SONAR-RANGE >FREIGHTER-LAT SET 'FREIGHTER-DLAT,-1 ?CND159: GET NOW-TERRAIN,FREIGHTER-LAT CALL GET5,STACK,FREIGHTER-LON LESS? 1,STACK \?CND132 CALL FREIGHTER-WARNING JUMP ?CND132 ?ELS158: EQUAL? NOW-TERRAIN,BAY-TERRAIN \?CND132 EQUAL? LON,7 \?ELS176 EQUAL? LAT,15 /?THN173 ?ELS176: EQUAL? LON,13 \?ELS178 EQUAL? LAT,17 /?THN173 ?ELS178: EQUAL? LON,16 \?CND132 EQUAL? LAT,31 \?CND132 ?THN173: PRINTI "A submerged wreck on the floor of the bay to starboard will be cleared safely." CRLF ?CND132: CALL CHECK-FOR-OBSTACLE,DEP,LON,LAT DLESS? 'TH,1 \?PRG127 ?REP128: SET 'SUB-LON,LON SET 'SUB-LAT,LAT SET 'SUB-DEPTH,DEP CALL GIVE-WARNINGS POP '?ORTMP ZERO? ?ORTMP /?ORP189 RETURN ?ORTMP ?ORP189: RETURN VAL .FUNCT TIME-FOR-FREIGHTER?,DEP,LON,LAT EQUAL? NOW-TERRAIN,BAY-TERRAIN \FALSE FSET? FREIGHTER,INVISIBLE \FALSE LESS? DEP,3 \FALSE GET NOW-TERRAIN,LAT CALL GET5,STACK,LON EQUAL? 5,STACK \FALSE CALL OBSTACLE-AHEAD?,SUB-DEPTH,SUB-LON,SUB-LAT ZERO? STACK \FALSE EQUAL? JOYSTICK-DIR,P?NE,P?EAST /TRUE EQUAL? JOYSTICK-DIR,P?NORTH \FALSE EQUAL? SUB-LON,SPIRE-LON \TRUE RFALSE .FUNCT CHECK-FOR-OBSTACLE,DEP,LON,LAT,X CALL OBSTACLE-AHEAD?,DEP,LON,LAT >X ZERO? X /?ELS5 ZERO? OLD-OBSTACLE? /?ELS10 GRTR? X,THROTTLE-SETTING /?ELS16 SET 'SONAR-WARNING,SONAR-RED CALL ADD-WARNING,2,TRUE-VALUE RSTACK ?ELS16: EQUAL? PRSA,V?WAIT-UNTIL,V?WAIT-FOR /FALSE CALL ADD-WARNING,8 RSTACK ?ELS10: SET 'OLD-OBSTACLE?,TRUE-VALUE GRTR? X,THROTTLE-SETTING /?ELS23 SET 'SONAR-WARNING,SONAR-RED JUMP ?CND21 ?ELS23: SET 'SONAR-WARNING,SONAR-YELLOW ?CND21: CALL ADD-WARNING,7,TRUE-VALUE RSTACK ?ELS5: SET 'OLD-OBSTACLE?,FALSE-VALUE ZERO? SONAR-WARNING /FALSE SET 'SONAR-WARNING,FALSE-VALUE ZERO? SHIP-WARNING \FALSE PRINTI "The " PRINTD SONARSCOPE-LIGHT PRINTR " goes out." .FUNCT OBSTACLE-AHEAD?,DEP,LON,LAT,XLON,XLAT,RANGE,X EQUAL? NOW-TERRAIN,BAY-TERRAIN,SEA-TERRAIN \FALSE ADD LON,SUB-DLON >XLON ADD LAT,SUB-DLAT >XLAT SET 'RANGE,1 ?PRG4: EQUAL? NOW-TERRAIN,BAY-TERRAIN \?CND6 CALL TOO-DEEP?,DEP,XLON,XLAT >X ZERO? X /?CND6 EQUAL? X,OPEN-SEA-CODE /?CND6 RETURN RANGE ?CND6: EQUAL? NOW-TERRAIN,SEA-TERRAIN \?CND11 CALL DOME-ON-SONAR?,DEP,XLON,XLAT ZERO? STACK /?CND11 CALL HEADING-INTO-DOME?,SUB-DEPTH,SUB-LON,SUB-LAT ZERO? STACK \?CND11 RETURN RANGE ?CND11: IGRTR? 'RANGE,SONAR-RANGE /FALSE ADD XLON,SUB-DLON >XLON ADD XLAT,SUB-DLAT >XLAT JUMP ?PRG4 .FUNCT HEADING-INTO-DOME?,DEP,LON,LAT EQUAL? DEP,AIRLOCK-DEPTH \FALSE ZERO? LON \FALSE LESS? LAT,1 \FALSE ZERO? SUB-DLON \FALSE LESS? 0,SUB-DLAT \FALSE FSET? AIRLOCK-HATCH,OPENBIT /TRUE RFALSE .FUNCT CHANGE-DEPTH,DEP LESS? DEP,TARGET-DEPTH \?ELS3 CALL DIVE-DESC,DEP,TRUE-VALUE INC 'DEP RETURN DEP ?ELS3: GRTR? DEP,TARGET-DEPTH \?ELS5 CALL DIVE-DESC,DEP,FALSE-VALUE DEC 'DEP RETURN DEP ?ELS5: ZERO? DIVING? /?CND1 SET 'DIVING?,0 PRINTI "The " PRINTD SUB PRINTI " quickly levels out at the " ZERO? DEP \?ELS12 PRINTI "surface." JUMP ?CND10 ?ELS12: PRINTI "desired depth of " MUL 5,DEP PRINTN STACK PRINTI " meters." ?CND10: ZERO? THROTTLE-SETTING \?ELS21 PRINTI " It's now standing still in the water." JUMP ?CND19 ?ELS21: PRINTI " It's still moving toward " CALL DIR-PRINT,JOYSTICK-DIR PRINTI " at a speed of " PRINTN THROTTLE-SETTING PRINTI " " PRINTD GRID-UNIT EQUAL? 1,THROTTLE-SETTING /?CND30 PRINTI "s" ?CND30: PRINTI " per turn." ?CND19: CRLF RETURN DEP ?CND1: RETURN DEP .FUNCT DIVE-DESC,DEP,DOWN? ZERO? DEP \FALSE PRINTI "The " PRINTD GLOBAL-WATER PRINTI " darkens to a deeper green as you descend from the sunlit surface." FSET? HYDROPHONE,ONBIT \?CND8 PRINTI " Engine and propeller noises come over the " PRINTD HYDROPHONE PRINTI " loudspeaker." ?CND8: CRLF RTRUE .FUNCT SEA-WALL-F EQUAL? PRSA,V?EXAMINE \FALSE CALL TOO-FAR-AWAY,SEA-WALL RSTACK .FUNCT FREIGHTER-F EQUAL? PRSA,V?ANALYZE,V?EXAMINE \FALSE CALL FREIGHTER-SIZE RSTACK .FUNCT FREIGHTER-SIZE PRINTI "Sonar shows the object reaching from the surface of the bay downward to a depth of 10 meters. This must be the keel of a freighter entering the harbor. It's moving toward the waterfront at the rate of 1 " PRINTD GRID-UNIT PRINTR " per turn." .FUNCT FREIGHTER-WARNING FCLEAR FREIGHTER,INVISIBLE CALL QUEUE,I-UPDATE-FREIGHTER,-1 PUT STACK,0,1 INC 'FREIGHTER-COUNT SET 'SHIP-WARNING,SONAR-YELLOW EQUAL? 1,FREIGHTER-COUNT \?ELS5 CALL ADD-WARNING,12,TRUE-VALUE RSTACK ?ELS5: CALL ADD-WARNING,13,TRUE-VALUE RSTACK .FUNCT I-UPDATE-FREIGHTER,DLAT,DLON ADD FREIGHTER-LON,FREIGHTER-DLON >FREIGHTER-LON ADD FREIGHTER-LAT,FREIGHTER-DLAT >FREIGHTER-LAT EQUAL? NOW-TERRAIN,BAY-TERRAIN \?THN6 SUB FREIGHTER-LAT,SUB-LAT >DLAT LESS? DLAT,0 \?ELS12 SUB FREIGHTER-LAT,SUB-LAT >DLAT SUB 0,DLAT JUMP ?CND8 ?ELS12: SUB FREIGHTER-LAT,SUB-LAT >DLAT PUSH DLAT ?CND8: LESS? SONAR-RANGE,STACK /?THN6 SUB FREIGHTER-LON,SUB-LON >DLON LESS? DLON,0 \?ELS19 SUB FREIGHTER-LON,SUB-LON >DLON SUB 0,DLON JUMP ?CND15 ?ELS19: SUB FREIGHTER-LON,SUB-LON >DLON PUSH DLON ?CND15: LESS? SONAR-RANGE,STACK /?THN6 GET NOW-TERRAIN,FREIGHTER-LAT CALL GET5,STACK,FREIGHTER-LON GRTR? 2,STACK \?ELS5 ?THN6: CALL QUEUE,I-UPDATE-FREIGHTER,0 FSET FREIGHTER,INVISIBLE RFALSE ?ELS5: ZERO? DLAT \?ELS23 ZERO? DLON \?ELS23 LESS? SUB-DEPTH,3 \?ELS23 CALL FREIGHTER-COLLIDED CALL FINISH RSTACK ?ELS23: LESS? SUB-DEPTH,3 \?ELS27 EQUAL? JOYSTICK-DIR,P?NORTH \?ELS33 ZERO? DLON \?ELS33 GRTR? DLAT,0 /?THN30 ?ELS33: EQUAL? JOYSTICK-DIR,P?EAST \?ELS35 ZERO? DLAT \?ELS35 GRTR? DLON,0 /?THN30 ?ELS35: EQUAL? JOYSTICK-DIR,P?NE \?ELS27 EQUAL? DLON,DLAT \?ELS27 GRTR? DLAT,0 \?ELS27 ?THN30: EQUAL? JOYSTICK-DIR,P?NORTH \?ELS50 LESS? DLAT,THROTTLE-SETTING /?ELS50 EQUAL? DLAT,THROTTLE-SETTING /?ELS50 ZERO? THROTTLE-SETTING \?ELS50 LESS? DLAT,2 /?THN59 ?ELS50: EQUAL? JOYSTICK-DIR,P?EAST \?ELS56 LESS? DLON,THROTTLE-SETTING /?ELS56 EQUAL? DLON,THROTTLE-SETTING /?ELS56 ZERO? THROTTLE-SETTING \?ELS56 LESS? DLON,2 /?THN59 ?ELS56: EQUAL? JOYSTICK-DIR,P?NE \?ELS42 LESS? DLAT,THROTTLE-SETTING /?THN59 EQUAL? DLAT,THROTTLE-SETTING /?THN59 ZERO? THROTTLE-SETTING \?ELS42 LESS? DLAT,2 \?ELS42 ?THN59: EQUAL? SHIP-WARNING,SONAR-RED \?ELS67 CALL TELL-SONAR-WARNING,SHIP-WARNING RSTACK ?ELS67: SET 'SHIP-WARNING,SONAR-RED CALL ADD-WARNING,14,TRUE-VALUE RSTACK ?ELS42: ZERO? SHIP-WARNING /FALSE CALL TELL-SONAR-WARNING,SHIP-WARNING RSTACK ?ELS27: ZERO? SHIP-WARNING /FALSE ZERO? SONAR-WARNING \FALSE PRINTI "The " PRINTD SONARSCOPE-LIGHT PRINTI " goes out and your heartbeat gradually slows to normal" EQUAL? SHIP-WARNING,SONAR-RED \?CND79 PRINTI ", now that the noise from the " PRINTD ALARM-SUB PRINTI " and the ship have gone" ?CND79: SET 'SHIP-WARNING,FALSE-VALUE PRINTR "." .FUNCT DOME-ON-SONAR?,DEP,LON,LAT,HYPOT,X,?TMP1 LESS? 1,LON /FALSE LESS? 1,LAT /FALSE GRTR? -1,LON /FALSE GRTR? -1,LAT /FALSE SUB SEA-DEPTH,DEP >X LESS? 2,X /FALSE ZERO? FINE-SONAR /?ELS15 MUL LON,LON >?TMP1 MUL LAT,LAT ADD ?TMP1,STACK >HYPOT ADD X,HYPOT GRTR? 3,STACK \FALSE RTRUE ?ELS15: ZERO? LON \FALSE ZERO? LAT \FALSE RTRUE .FUNCT FREIGHTER-COLLIDED PRINTI " You and Tip are hurled from your seats as the " PRINTD SUB PRINTI " and the ship collide! The sub is up-ended and swept aside by the momentum of the ship. Thanks to the strength of your revolutionary hull design, the " PRINTD SUB PRINTI " is still okay, but its machinery is hopelessly damaged. Because you didn't change heading or dive under the ship, you and Tip are now adrift and must wait to be rescued by" CALL RESEARCH-LAB PRINTI ". Your mission to save the " PRINTD AQUADOME PRINTI " and its crew from attack by the " PRINTD GLOBAL-SNARK PRINTI " will have to be abandoned." RTRUE .FUNCT SONAR-TO-MANUAL ZERO? AUTOMATIC-SONAR /FALSE CALL SPLIT-SCREEN? ZERO? STACK /FALSE SET 'AUTOMATIC-SONAR,FALSE-VALUE SET 'SCREEN-NOW-SPLIT,FALSE-VALUE SPLIT 0 CALL INT,I-SHOW-SONAR PUT STACK,0,0 PRINTI "The " PRINTD SONARSCOPE PRINTI " " PRINTD AUTOMATIC PRINTR "ally sets itself to manual." .FUNCT COLLISION?,DEP,LON,LAT,X ZERO? SUB-IN-OPEN-SEA \FALSE FSET? SNARK,INVISIBLE /?ELS6 CALL THORPE-POS?,LON,LAT ZERO? STACK /?ELS9 PRINTI " CRR-R-RAAASSSHHH-H-H! With a deafening clang, the " PRINTD THORPE-SUB PRINTI " and your sub collide! The " PRINTD SUB PRINTI " shudders, and you and Tip are hurled to the deck! You claw your way to the controls, but there's no power, no matter how you gun the throttle! The engine's been damaged by the collision! " FSET? THORPE,MUNGBIT /?CND12 PRINTI "Through the " PRINTD SUB-WINDOW PRINTI " you see the " PRINTD THORPE-SUB PRINTI ", and it looks helpless too. Its hull is intact, but . . . UH-OH! Its rocket weapon is swinging slowly in your direction! " ?CND12: PRINTI "As you and Tip eye each other despairingly, one thing's for sure: THE ADVENTURE'S OVER!" JUMP ?CND7 ?ELS9: CALL SNARK-POS?,LON,LAT ZERO? STACK /FALSE PRINTI "There's a sudden jolt! Your " PRINTD SUB PRINTI " stops moving for a moment, as if you hit some huge mass. Tip looks " FSET? SONARSCOPE,ONBIT \?ELS25 PRINTI "at the " PRINTD SONARSCOPE JUMP ?CND23 ?ELS25: PRINTI "out the " PRINTD SUB-WINDOW ?CND23: PRINTI " and gulps, ""We've rammed the " PRINTD SNARK FSET? CLAW,MUNGBIT \?ELS36 PRINTI " again!""" CRLF RFALSE ?ELS36: FSET CLAW,MUNGBIT SET 'TEST-BUTTON-READOUT,CLAW-MUNGED-MSG PRINTI "! I hope the " PRINTD CLAW PRINTI "s aren't damaged!""" CRLF RFALSE ?CND7: CALL FINISH JUMP ?CND1 ?ELS6: FSET? FREIGHTER,INVISIBLE /?CND1 EQUAL? FREIGHTER-LAT,LAT \?CND1 EQUAL? FREIGHTER-LON,LON \?CND1 LESS? DEP,3 \?CND1 CALL FREIGHTER-COLLIDED CALL FINISH ?CND1: CALL TOO-DEEP?,DEP,LON,LAT >X ZERO? X /?ELS53 EQUAL? X,HIT-BOTTOM-CODE,HIT-SHORE-CODE \?ELS56 ZERO? SCREEN-NOW-SPLIT /?CND57 SCREEN 1 CALL SHOW-SONARSCOPE SCREEN 0 ?CND57: PRINTI " Suddenly you're thrown out of your seat by a thunderous crash, and the " PRINTD SUB PRINTI " comes to a shuddering halt! " CALL TIP-SAYS PRINTI "Skipper! You've plowed into the " EQUAL? LON,SPIRE-LON \?ELS67 EQUAL? LAT,SPIRE-LAT \?ELS67 PRINTI "rock spire" JUMP ?CND65 ?ELS67: EQUAL? X,HIT-SHORE-CODE \?ELS73 PRINTI "shore" JUMP ?CND65 ?ELS73: PRINTI "floor of the " EQUAL? NOW-TERRAIN,BAY-TERRAIN \?ELS82 PRINTI "bay" JUMP ?CND65 ?ELS82: PRINTI "ocean" ?CND65: PRINTI "! Jumpin' jets, let's hope your new " PRINTD SUB PRINTI " isn't wrecked!"" Unfortunately, the " PRINTD SUB PRINTI " is now disabled. You must call" CALL RESEARCH-LAB PRINTI " for help, and the situation forces you to abandon hope of saving the " PRINTD AQUADOME PRINTI " from attacks by the " PRINTD SNARK PRINTI "." JUMP ?CND54 ?ELS56: EQUAL? X,OPEN-SEA-CODE \?ELS94 SET 'NOW-TERRAIN,FALSE-VALUE SET 'SUB-IN-OPEN-SEA,TRUE-VALUE FCLEAR CATALYST-CAPSULE,TAKEBIT FSET CATALYST-CAPSULE,TRYTAKEBIT MOVE BLACK-BOX,BLY-DESK SET 'DEPTH-WARNING,FALSE-VALUE SET 'SONAR-WARNING,FALSE-VALUE SET 'SHIP-WARNING,FALSE-VALUE FSET FREIGHTER,INVISIBLE CALL THIS-IS-IT,AUTO-PILOT PRINTI "You have just passed through the opening in the " PRINTD SEA-WALL PRINTI " across the mouth of " PRINTD BAY PRINTI ", and you're now in the " PRINTD SEA PRINTI "." CRLF CALL QUEUE,I-AUTO-PILOT,1 PUT STACK,0,1 CALL SONAR-TO-MANUAL CALL SCORE-OBJ,SEA-WALL CALL SAVE-HINT RETURN 2 ?ELS94: EQUAL? X,HIT-DOME-CODE \?ELS100 PRINTI "Oh, oh! The " PRINTD SUB PRINTI " has crashed into the " PRINTD AQUADOME PRINTI "! ""We've cracked the dome, " CALL PRINT-NAME,FIRST-NAME PRINTI "!"" gulps Tip as he surveys the damage. You're speechless. The " PRINTD AQUADOME PRINTI " is flooding fast, and soon it will break apart under zillions of tons of " PRINTD GLOBAL-WATER PRINTI "! You try to shut out the scattered screams for help coming over the sonarphone. There's nothing left but to report that the " PRINTD AQUADOME PRINTI " was accidentally destroyed, and your mission has failed." JUMP ?CND54 ?ELS100: EQUAL? X,IN-DOME-CODE \?CND54 SET 'NOW-TERRAIN,FALSE-VALUE SET 'SUB-IN-DOME,TRUE-VALUE SET 'BLY-CALLING,FALSE-VALUE CALL PHONE-OFF CALL SONAR-TO-MANUAL SET 'THROTTLE-SETTING,0 SET 'SHIP-WARNING,FALSE-VALUE SET 'SONAR-WARNING,FALSE-VALUE SET 'DEPTH-WARNING,FALSE-VALUE PRINTI " The " PRINTD SUB PRINTI " is now resting in the cradle in the rectangular " PRINTD AIRLOCK PRINTI ". The " PRINTD AIRLOCK-HATCH PRINTI " closes, and so does the " PRINTD THROTTLE PRINTI ". Through the " PRINTD SUB-WINDOW PRINTI " you can see the water level going down inside the " PRINTD AIRLOCK PRINTI ". The docking crew is pumping out the " PRINTD GLOBAL-WATER PRINTI ". This will take 1 turn." CRLF FCLEAR AIRLOCK-HATCH,OPENBIT CALL QUEUE,I-THORPE-APPEARS,0 CALL QUEUE,I-AIRLOCK-EMPTY,1 PUT STACK,0,1 CALL SCORE-OBJ,AQUADOME RTRUE ?CND54: CALL FINISH RSTACK ?ELS53: FSET? DEPTHFINDER,ONBIT \FALSE CALL CHECK-DEPTH,DEP,LON,LAT ZERO? STACK \FALSE ZERO? DEPTH-WARNING /FALSE SET 'DEPTH-WARNING,FALSE-VALUE CALL ADD-WARNING,10 RFALSE .FUNCT TOO-DEEP?,DEP,LON,LAT,X EQUAL? NOW-TERRAIN,SEA-TERRAIN \?ELS5 CALL HEADING-INTO-DOME?,DEP,LON,LAT ZERO? STACK /?ELS10 ZERO? FINE-SONAR /?ELS16 GRTR? LAT,-2 /?THN13 ?ELS16: ZERO? LAT \?ELS10 ?THN13: RETURN IN-DOME-CODE ?ELS10: CALL DOME-ON-SONAR?,DEP,LON,LAT ZERO? STACK /?ELS18 RETURN HIT-DOME-CODE ?ELS18: EQUAL? DEP,SEA-DEPTH \FALSE RETURN HIT-BOTTOM-CODE ?ELS5: GET NOW-TERRAIN,LAT CALL GET5,STACK,LON >X EQUAL? X,6 \?ELS27 RETURN OPEN-SEA-CODE ?ELS27: LESS? DEP,X /FALSE ZERO? X \?ELS31 RETURN HIT-SHORE-CODE ?ELS31: RETURN HIT-BOTTOM-CODE .FUNCT GATE-CRASH,STR,OBJ,GATE EQUAL? GATE,AIRLOCK-HATCH \?ELS5 PRINTI "You can't leave the " PRINTD AIRLOCK PRINTI " with the " PRINTD AIRLOCK-HATCH PRINTR " closed!" ?ELS5: SET 'GATE-CRASHED,TRUE-VALUE FCLEAR ENGINE,ONBIT SET 'TEST-BUTTON-READOUT,GATE-CRASHED-MSG PRINTI "As you " PRINT STR CALL PRINTT,OBJ PRINTI ", you hear a loud boom! The " PRINTD SUB PRINTI " shivers. You have crashed into the Repelatron Safety Bumper on the " PRINTD TANK-GATE PRINTI ". The turbine stops " PRINTD AUTOMATIC PRINTR "ally. Too bad the gate was closed!" .FUNCT CAPSULE-LEVER-F EQUAL? PRSA,V?EXAMINE \?ELS5 CALL PERFORM,PRSA,REACTOR RTRUE ?ELS5: EQUAL? PRSA,V?USE,V?PUSH,V?MOVE \FALSE FSET? REACTOR,ONBIT \?ELS12 PRINT I-ASSUME PRINTI " turn off the " PRINTD REACTOR PRINTI ".)" CRLF CALL PERFORM,V?LAMP-OFF,REACTOR RTRUE ?ELS12: PRINT I-ASSUME PRINTI " turn on the " PRINTD REACTOR PRINTI ".)" CRLF CALL PERFORM,V?LAMP-ON,REACTOR RTRUE .FUNCT DEPTHFINDER-F,N CALL REMOTE-VERB? ZERO? STACK \FALSE ZERO? SUB-IN-TANK /?ELS7 CALL WHY-NEED,DEPTHFINDER,TEST-TANK ZERO? STACK \TRUE ?ELS7: ZERO? SUB-IN-DOME /?ELS11 CALL WHY-NEED,DEPTHFINDER,AIRLOCK ZERO? STACK \TRUE ?ELS11: EQUAL? PRSA,V?LAMP-OFF \?ELS15 SET 'DEPTH-WARNING,FALSE-VALUE RFALSE ?ELS15: EQUAL? PRSA,V?LAMP-ON \?ELS17 CALL CHECK-DEPTH,SUB-DEPTH,SUB-LON,SUB-LAT RFALSE ?ELS17: EQUAL? PRSA,V?READ /?THN20 EQUAL? PRSA,V?WHAT,V?EXAMINE,V?ANALYZE \FALSE ?THN20: FSET? DEPTHFINDER,ONBIT /?CND22 PRINTR "It's not on!" ?CND22: PRINTI "You're now " ZERO? SUB-DEPTH \?ELS31 PRINTI "on the surface" JUMP ?CND29 ?ELS31: PRINTI "at a depth of " MUL 5,SUB-DEPTH PRINTN STACK PRINTI " meters" ?CND29: ZERO? NOW-TERRAIN \?CND38 PRINTR "." ?CND38: EQUAL? NOW-TERRAIN,BAY-TERRAIN \?ELS47 GET NOW-TERRAIN,SUB-LAT CALL GET5,STACK,SUB-LON JUMP ?CND43 ?ELS47: PUSH SEA-DEPTH ?CND43: SUB STACK,SUB-DEPTH >N PRINTI ", " MUL 5,N PRINTN STACK PRINTI " meters above the " EQUAL? NOW-TERRAIN,BAY-TERRAIN \?ELS54 PRINTR "floor of the bay." ?ELS54: PRINTR "bottom of the sea." .FUNCT CHECK-DEPTH,DEP,LON,LAT ZERO? DEP /?ELS5 ADD 1,DEP CALL TOO-DEEP?,STACK,LON,LAT ZERO? STACK /?ELS5 EQUAL? DEPTH-WARNING,DEPTH-ORANGE \?ELS10 CALL ADD-WARNING,11,TRUE-VALUE JUMP ?CND8 ?ELS10: EQUAL? DEPTH-WARNING,DEPTH-RED \?ELS12 EQUAL? PRSA,V?WAIT-UNTIL,V?WAIT-FOR \?ELS15 JUMP ?CND8 ?ELS15: CALL ADD-WARNING,DEPTH-RED JUMP ?CND8 ?ELS12: CALL ADD-WARNING,4,TRUE-VALUE ?CND8: SET 'DEPTH-WARNING,DEPTH-RED RTRUE ?ELS5: ZERO? DEP /FALSE ADD 2,DEP CALL TOO-DEEP?,STACK,LON,LAT ZERO? STACK /FALSE EQUAL? DEPTH-WARNING,DEPTH-ORANGE \?ELS26 EQUAL? PRSA,V?WAIT-UNTIL,V?WAIT-FOR \?ELS29 JUMP ?CND24 ?ELS29: CALL ADD-WARNING,DEPTH-ORANGE JUMP ?CND24 ?ELS26: EQUAL? DEPTH-WARNING,DEPTH-RED \?ELS33 CALL ADD-WARNING,9 JUMP ?CND24 ?ELS33: CALL ADD-WARNING,3,TRUE-VALUE ?CND24: SET 'DEPTH-WARNING,DEPTH-ORANGE RTRUE .FUNCT DEPTHFINDER-LIGHT-F EQUAL? PRSA,V?REPLY /?THN6 EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE ?THN6: ZERO? DEPTH-WARNING \?CND8 PRINTI "The " PRINTD DEPTHFINDER-LIGHT PRINTI " is off." CRLF ?CND8: PRINTI "During a dive, the " PRINTD DEPTHFINDER-LIGHT PRINTI " turns orange and a " PRINTD ALARM-SUB PRINTI " sounds if the " PRINTD SUB PRINTI " comes within 10 meters of the bottom. The light turns red and the " PRINTD ALARM-SUB PRINTI " becomes louder if the " PRINTD SUB PRINTR " comes within 5 meters of the bottom." .FUNCT TELL-SONAR-WARNING,W=0 PRINTI "The " PRINTD SONARSCOPE-LIGHT PRINTI " continues to glow " ZERO? W \?CND3 SET 'W,SONAR-WARNING ?CND3: EQUAL? W,1 \?ELS10 PRINTR "yellow." ?ELS10: PRINTI "red, and the " PRINTD ALARM-SUB PRINTR " also continues to sound." .FUNCT AUTOMATIC-F EQUAL? PRSA,V?LAMP-OFF,V?LAMP-ON \FALSE CALL PERFORM,PRSA,AUTO-PILOT RTRUE .FUNCT MANUAL-F EQUAL? PRSA,V?LAMP-ON \?ELS5 CALL PERFORM,V?LAMP-OFF,AUTO-PILOT RTRUE ?ELS5: EQUAL? PRSA,V?LAMP-OFF \?ELS7 CALL PERFORM,V?LAMP-ON,AUTO-PILOT RTRUE ?ELS7: EQUAL? PRSA,V?TURN,V?OPEN,V?TAKE /?THN10 EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE ?THN10: PRINTR "It's not that kind of manual." .FUNCT NOT-AVAILABLE PRINTI "Sorry, " CALL PRINT-NAME,FIRST-NAME PRINTR ", but that feature isn't available." .FUNCT SONARSCOPE-F,DEP,N CALL REMOTE-VERB? ZERO? STACK \FALSE EQUAL? PRSA,V?LAMP-ON \?ELS7 CALL SPLIT-SCREEN? ZERO? STACK /FALSE FSET SONARSCOPE,ONBIT CALL PERFORM,V?SET,SONARSCOPE,AUTOMATIC RTRUE ?ELS7: FSET? SONARSCOPE,ONBIT /?ELS17 CALL THIS-IS-IT,SONARSCOPE PRINTR "It's not turned on!" ?ELS17: EQUAL? PRSA,V?LAMP-OFF \?ELS21 ZERO? AUTOMATIC-SONAR /FALSE CALL PERFORM,V?SET,SONARSCOPE,MANUAL SET 'AUTOMATIC-SONAR,FALSE-VALUE RTRUE ?ELS21: ZERO? SUB-IN-TANK /?ELS29 CALL WHY-NEED,SONARSCOPE,TEST-TANK ZERO? STACK \TRUE ?ELS29: ZERO? SUB-IN-OPEN-SEA /?ELS33 CALL WHY-NEED,SONARSCOPE,SEA ZERO? STACK \TRUE ?ELS33: ZERO? SUB-IN-DOME /?ELS37 CALL WHY-NEED,SONARSCOPE,AIRLOCK ZERO? STACK \TRUE ?ELS37: EQUAL? PRSA,V?LOOK-ON,V?LOOK-INSIDE /?THN42 EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \?ELS41 ?THN42: SET 'P-WON,FALSE-VALUE INC 'LOOKED-AT-SONAR CALL SPLIT-SCREEN? ZERO? STACK /?CND44 MOD LOOKED-AT-SONAR,4 ZERO? STACK \?CND44 CALL TIP-SAYS PRINTI "You wouldn't have to keep looking at the " PRINTD SONARSCOPE PRINTI " if you set it to " PRINTD AUTOMATIC PRINTI ".""" CRLF ?CND44: SET 'DEP,SUB-DEPTH ZERO? SONAR-WARNING /?CND51 CALL TELL-SONAR-WARNING ?CND51: ZERO? SHIP-WARNING /?CND55 CALL TELL-SONAR-WARNING,SHIP-WARNING ?CND55: LESS? DEP,3 \?CND59 FSET? FREIGHTER,INVISIBLE /?CND59 CALL FREIGHTER-SIZE CRLF ?CND59: CALL FIXED-FONT-ON PRINTI "(+=you, .=open water, *=obstacle)" CRLF MUL 2,SONAR-RANGE >N ?PRG66: PRINTI "--" DLESS? 'N,0 \?PRG66 CRLF ZERO? SCREEN-NOW-SPLIT /?ELS75 CALL FIXED-FONT-OFF CALL ALREADY,PLAYER,STR?36 RTRUE ?ELS75: CALL SHOW-SONARSCOPE RTRUE ?ELS41: EQUAL? PRSA,V?MOVE-DIR,V?PUT,V?SET \FALSE EQUAL? PRSO,SONARSCOPE \FALSE EQUAL? PRSI,AUTOMATIC \?ELS87 ZERO? AUTOMATIC-SONAR /?ELS92 CALL ALREADY,SONARSCOPE,STR?37 RSTACK ?ELS92: CALL SPLIT-SCREEN? ZERO? STACK /?ELS95 SET 'AUTOMATIC-SONAR,TRUE-VALUE SET 'SCREEN-NOW-SPLIT,TRUE-VALUE CALL START-SONAR? CALL OKAY,SONARSCOPE,STR?37 RSTACK ?ELS95: CALL NOT-AVAILABLE RSTACK ?ELS87: EQUAL? PRSI,MANUAL \FALSE ZERO? AUTOMATIC-SONAR \?ELS104 CALL ALREADY,SONARSCOPE,STR?38 RSTACK ?ELS104: CALL SPLIT-SCREEN? ZERO? STACK /?ELS106 SET 'AUTOMATIC-SONAR,FALSE-VALUE SET 'SCREEN-NOW-SPLIT,FALSE-VALUE SPLIT 0 CALL INT,I-SHOW-SONAR PUT STACK,0,0 CALL OKAY,SONARSCOPE,STR?38 RSTACK ?ELS106: CALL NOT-AVAILABLE RSTACK .FUNCT SHOW-SONARSCOPE,DEP,N,RANGE,LAT,MINLAT,LON,MAXLON,X,Y,LATP2,LATP1,LATM1 SET 'DEP,SUB-DEPTH CALL FIXED-FONT-ON FSET? SNARK,INVISIBLE /?ELS3 PRINTI "@@=SEACAT Oooo=MONSTER" ZERO? SUB-IN-BATTLE /?ELS8 PRINTI " #=DANGER" JUMP ?CND1 ?ELS8: PRINTI " " JUMP ?CND1 ?ELS3: EQUAL? SHIP-WARNING,SONAR-RED /?THN21 EQUAL? SONAR-WARNING,SONAR-RED \?ELS20 ?THN21: PRINTI "SONAR:*RED*" JUMP ?CND18 ?ELS20: EQUAL? SHIP-WARNING,SONAR-YELLOW /?THN27 EQUAL? SONAR-WARNING,SONAR-YELLOW \?ELS26 ?THN27: PRINTI "SONAR:YELLO" JUMP ?CND18 ?ELS26: PRINTI " " ?CND18: PRINTI " " EQUAL? DEPTH-WARNING,DEPTH-ORANGE \?ELS39 PRINTI "DEPTH:ORANGE" JUMP ?CND37 ?ELS39: EQUAL? DEPTH-WARNING,DEPTH-RED \?ELS43 PRINTI "DEPTH:*RED* " JUMP ?CND37 ?ELS43: PRINTI " " ?CND37: PRINTI " " LESS? DEP,3 \?ELS54 FSET? FREIGHTER,INVISIBLE /?ELS54 PRINTI "@=SHIP" JUMP ?CND1 ?ELS54: PRINTI " " ?CND1: CRLF SET 'RANGE,SONAR-RANGE ADD SUB-LAT,RANGE >LAT SUB SUB-LAT,RANGE >MINLAT ADD SUB-LON,RANGE >MAXLON SET 'X,39 GET NOW-TERRAIN,0 >Y ADD SUB-LAT,2 >LATP2 ADD SUB-LAT,1 >LATP1 SUB SUB-LAT,1 >LATM1 ?PRG63: SUB SUB-LON,RANGE >LON ?PRG65: EQUAL? LAT,SUB-LAT \?ELS69 EQUAL? LON,SUB-LON \?ELS69 PRINTI " +" JUMP ?CND67 ?ELS69: FSET? SNARK,INVISIBLE /?ELS75 CALL THORPE-POS?,LON,LAT ZERO? STACK /?ELS78 PRINTI " @" JUMP ?CND67 ?ELS78: CALL SNARK-HEAD-POS?,LON,LAT ZERO? STACK /?ELS82 PRINTI " O" JUMP ?CND67 ?ELS82: CALL SNARK-TAIL-POS?,LON,LAT ZERO? STACK /?ELS86 PRINTI " o" JUMP ?CND67 ?ELS86: ZERO? SUB-IN-BATTLE /?ELS90 CALL THORPE-SHOOT?,LON,LAT ZERO? STACK /?ELS90 PRINTI " #" JUMP ?CND67 ?ELS90: PRINTI " ." JUMP ?CND67 ?ELS75: EQUAL? NOW-TERRAIN,SEA-TERRAIN \?ELS100 CALL DOME-ON-SONAR?,DEP,LON,LAT ZERO? STACK /?ELS103 PRINTI " *" JUMP ?CND67 ?ELS103: PRINTI " ." JUMP ?CND67 ?ELS100: FSET? FREIGHTER,INVISIBLE /?ELS111 LESS? DEP,3 \?ELS111 EQUAL? LAT,FREIGHTER-LAT \?ELS111 EQUAL? LON,FREIGHTER-LON \?ELS111 PRINTI " @" JUMP ?CND67 ?ELS111: GRTR? LAT,Y \?ELS121 GET NOW-TERRAIN,Y CALL GET5,STACK,LON EQUAL? 6,STACK /?THN118 ?ELS121: GRTR? LON,X \?ELS117 GET NOW-TERRAIN,LAT CALL GET5,STACK,X EQUAL? 6,STACK \?ELS117 ?THN118: PRINTI " ." JUMP ?CND67 ?ELS117: LESS? LAT,1 /?THN128 LESS? LON,1 /?THN128 GRTR? LAT,Y /?THN128 GRTR? LON,X \?ELS127 ?THN128: PRINTI " *" JUMP ?CND67 ?ELS127: GET NOW-TERRAIN,LAT CALL GET5,STACK,LON LESS? DEP,STACK \?ELS133 PRINTI " ." JUMP ?CND67 ?ELS133: PRINTI " *" ?CND67: IGRTR? 'LON,MAXLON \?PRG65 EQUAL? LAT,LATP2 \?ELS145 PRINTI " HDG:" EQUAL? SUB-DLAT,1 \?ELS150 PRINTI "N" JUMP ?CND148 ?ELS150: EQUAL? SUB-DLAT,-1 \?CND148 PRINTI "S" ?CND148: EQUAL? SUB-DLON,1 \?ELS159 PRINTI "E" JUMP ?CND157 ?ELS159: EQUAL? SUB-DLON,-1 \?CND157 PRINTI "W" ?CND157: PRINTI " " JUMP ?CND143 ?ELS145: EQUAL? LAT,LATP1 \?ELS169 EQUAL? JOYSTICK-DIR,P?NW \?ELS172 PRINTI " \ " JUMP ?CND143 ?ELS172: EQUAL? JOYSTICK-DIR,P?NORTH \?ELS176 PRINTI " ! " JUMP ?CND143 ?ELS176: EQUAL? JOYSTICK-DIR,P?NE \?ELS180 PRINTI " /" JUMP ?CND143 ?ELS180: PRINTI " " JUMP ?CND143 ?ELS169: EQUAL? LAT,SUB-LAT \?ELS188 PRINTI " " EQUAL? JOYSTICK-DIR,P?WEST \?ELS193 PRINTI "--" JUMP ?CND191 ?ELS193: PRINTI " " ?CND191: PRINTI "+" EQUAL? JOYSTICK-DIR,P?EAST \?ELS204 PRINTI "--" JUMP ?CND143 ?ELS204: PRINTI " " JUMP ?CND143 ?ELS188: EQUAL? LAT,LATM1 \?CND143 EQUAL? JOYSTICK-DIR,P?SW \?ELS215 PRINTI " / " JUMP ?CND143 ?ELS215: EQUAL? JOYSTICK-DIR,P?SOUTH \?ELS219 PRINTI " ! " JUMP ?CND143 ?ELS219: EQUAL? JOYSTICK-DIR,P?SE \?ELS223 PRINTI " \" JUMP ?CND143 ?ELS223: PRINTI " " ?CND143: CRLF DLESS? 'LAT,MINLAT \?PRG63 MUL 2,RANGE >N ?PRG233: PRINTI "--" DLESS? 'N,0 \?PRG233 CRLF CALL FIXED-FONT-OFF RTRUE .FUNCT START-SONAR? ZERO? SCREEN-NOW-SPLIT /FALSE MUL 2,SONAR-RANGE ADD 3,STACK SPLIT STACK SET 'SONAR-DIR,0 CALL I-SHOW-SONAR CALL QUEUE,I-SHOW-SONAR,-1 PUT STACK,0,1 RTRUE .FUNCT SONARSCOPE-LIGHT-F EQUAL? PRSA,V?REPLY /?THN6 EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE ?THN6: ZERO? SONAR-WARNING \?CND8 ZERO? SHIP-WARNING \?CND8 PRINTI "The " PRINTD SONARSCOPE-LIGHT PRINTI " is off." CRLF ?CND8: PRINTI "A yellow " PRINTD SONARSCOPE-LIGHT PRINTI " shows that the bearing of a blip is NOT CHANGING, even if you and/or the object causing the blip are moving. This means you're on a COLLISION COURSE! The light will turn red and a loud " PRINTD ALARM-SUB PRINTI " will sound if you and the approaching object are within ONE TURN of a collision!" RTRUE .FUNCT ALARM-SUB-F EQUAL? PRSA,V?STOP /?THN6 EQUAL? PRSA,V?REPLY,V?LISTEN,V?LAMP-OFF \FALSE ?THN6: PRINTR "Why not avoid the obstacle?" .FUNCT BLY-WELCOME PRINTI "Welcome to the " PRINTD AQUADOME PRINTI ", " CALL PRINT-NAME,FIRST-NAME PRINTI "! You're a sight for sore eyes! We've been anxiously awaiting your arrival!" RTRUE .FUNCT SONARPHONE-F EQUAL? PRSA,V?LAMP-OFF \?ELS5 FSET? PRSO,ONBIT /?CND6 PRINTR "It's not on!" ?CND6: FCLEAR PRSO,ONBIT ZERO? REMOTE-PERSON /?ELS15 CALL PERFORM,V?GOODBYE RTRUE ?ELS15: CALL OKAY,SONARPHONE,STR?39 RSTACK ?ELS5: EQUAL? PRSA,V?LISTEN \?ELS20 ZERO? BLY-CALLING /?ELS20 PRINTR "It's ringing." ?ELS20: EQUAL? PRSA,V?TAKE /?THN27 EQUAL? PRSA,V?SAY-INTO,V?REPLY,V?LAMP-ON \FALSE ?THN27: ZERO? BLY-CALLING \?ELS33 PRINTR "The sonarphone isn't ringing!" ?ELS33: SET 'BLY-CALLING,FALSE-VALUE CALL PHONE-ON,GLOBAL-BLY,AQUADOME,SONARPHONE FSET SONARPHONE,ONBIT MOVE PRIVATE-MATTER,GLOBAL-OBJECTS INC 'BLY-PRIVATELY-COUNT SET 'BLY-WELCOMED,TRUE-VALUE PRINTI """This is Zoe Bly speaking. " CALL BLY-WELCOME CALL DISCUSS-PRIVATE RSTACK .FUNCT DISCUSS-PRIVATE CALL THIS-IS-IT,PRIVATE-MATTER PRINTI " I'd like to discuss a " PRINTD PRIVATE-MATTER PRINTR " with you, as soon as possible!""" .FUNCT HYDROPHONE-F EQUAL? PRSA,V?LISTEN \FALSE FSET? HYDROPHONE,ONBIT \FALSE PRINTI "You can hear " EQUAL? NOW-TERRAIN,BAY-TERRAIN \?ELS14 PRINTR "various engine noises." ?ELS14: FSET? WHALE,INVISIBLE /?ELS18 PRINTR "the whale." ?ELS18: PRINTR "nothing interesting." .FUNCT REACTOR-F,ARG=0 ZERO? ARG \?THN6 EQUAL? PRSA,V?ANALYZE,V?EXAMINE \?ELS5 ?THN6: EQUAL? P-ADVERB,W?CAREFULLY \?ELS12 ZERO? ARG \?ELS12 GETP LOCAL-SUB,P?TEXT PRINT STACK CRLF RTRUE ?ELS12: ZERO? ARG /?ELS18 FSET? REACTOR,ONBIT \?ELS18 FSET? REACTOR,OPENBIT \TRUE ?ELS18: PRINTI "The power reactor is o" FSET? REACTOR,ONBIT \?ELS29 PUSH STR?40 JUMP ?CND25 ?ELS29: PUSH STR?41 ?CND25: PRINT STACK PRINTI " and " FSET? REACTOR,OPENBIT \?ELS36 PUSH STR?21 JUMP ?CND32 ?ELS36: PUSH STR?17 ?CND32: PRINT STACK PRINTR "." ?ELS5: EQUAL? PRSA,V?LAMP-ON \?ELS40 FSET? REACTOR,ONBIT \?ELS45 CALL ALREADY,REACTOR,STR?42 RSTACK ?ELS45: IN? CATALYST-CAPSULE,REACTOR /?ELS47 FCLEAR CATALYST-CAPSULE,NDESCBIT CALL TELL-HINT,33,CATALYST-CAPSULE,FALSE-VALUE RSTACK ?ELS47: FSET? REACTOR,OPENBIT \?ELS49 CALL YOU-CANT,STR?43,FALSE-VALUE,STR?21 RSTACK ?ELS49: FSET REACTOR,ONBIT PRINTI "Electrical systems now activated." CRLF CALL SCORE-OBJ,REACTOR RTRUE ?ELS40: EQUAL? PRSA,V?LAMP-OFF \?ELS55 FSET? REACTOR,ONBIT /?ELS60 CALL ALREADY,REACTOR,STR?39 RSTACK ?ELS60: FSET? ENGINE,ONBIT \?ELS62 PRINTR "You can't turn it off while the engine is on." ?ELS62: FCLEAR REACTOR,ONBIT PRINTR "Electrical systems now de-activated." ?ELS55: EQUAL? PRSA,V?OPEN \FALSE FSET? REACTOR,ONBIT \FALSE CALL YOU-CANT,STR?21,FALSE-VALUE,STR?44 RSTACK .FUNCT REACTOR-SWITCH-F EQUAL? PRSA,V?EXAMINE,V?LAMP-OFF,V?LAMP-ON \?ELS5 CALL PERFORM,PRSA,REACTOR RTRUE ?ELS5: EQUAL? PRSA,V?TURN,V?PUSH,V?MOVE \FALSE PRINT I-ASSUME PRINTI " turn on the " PRINTD REACTOR PRINTI ".)" CRLF CALL PERFORM,V?LAMP-ON,REACTOR RTRUE .FUNCT ENGINE-F EQUAL? PRSA,V?STOP,V?LAMP-OFF \?ELS5 ZERO? THROTTLE-SETTING /FALSE CALL YOU-CANT,STR?45,THROTTLE,STR?21 RSTACK ?ELS5: EQUAL? PRSA,V?LAMP-ON \FALSE ZERO? SUB-IN-TANK /?ELS21 ZERO? TEST-TANK-FULL /?THN18 ?ELS21: ZERO? SUB-IN-DOME /?ELS17 ZERO? AIRLOCK-FULL \?ELS17 ?THN18: PRINTI "The " PRINTD SUB PRINTI " can't go when it's out of the water. You should fill the " ZERO? SUB-IN-TANK /?ELS28 CALL THIS-IS-IT,TEST-TANK PRINTD TEST-TANK JUMP ?CND26 ?ELS28: CALL THIS-IS-IT,AIRLOCK PRINTD AIRLOCK ?CND26: PRINTR " first." ?ELS17: FSET? REACTOR,ONBIT /?ELS39 CALL YOU-CANT,STR?43,REACTOR,STR?39 RSTACK ?ELS39: FSET? ENGINE,ONBIT \?ELS41 CALL ALREADY,ENGINE,STR?42 RSTACK ?ELS41: SET 'GATE-CRASHED,FALSE-VALUE FSET ENGINE,ONBIT FSET ENGINE,TOUCHBIT CALL READY-FOR-SNARK? ZERO? STACK /?ELS46 PRINTI "Your revolutionary craft thrums with power, matching your own excited heartbeat!" CRLF JUMP ?CND44 ?ELS46: PRINTI "You can immediately hear the powerful thrum of the hydrojet turbine." CRLF ?CND44: CALL SCORE-OBJ,ENGINE RTRUE .FUNCT ENGINE-BUTTON-F EQUAL? PRSA,V?EXAMINE,V?LAMP-OFF,V?LAMP-ON \?ELS5 CALL PERFORM,PRSA,ENGINE RTRUE ?ELS5: EQUAL? PRSA,V?TURN,V?PUSH,V?MOVE \FALSE PRINT I-ASSUME PRINTI " turn on the " PRINTD ENGINE PRINTI ".)" CRLF CALL PERFORM,V?LAMP-ON,ENGINE RTRUE .FUNCT JOYSTICK-F EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \?ELS5 PRINTI "The " PRINTD JOYSTICK PRINTI " is like the kind used with personal computers, only bigger. It's now " ZERO? JOYSTICK-DIR \?ELS12 PRINTR "sitting at dead center." ?ELS12: PRINTI "pointing to " CALL DIR-PRINT,JOYSTICK-DIR PRINTR "." ?ELS5: EQUAL? PRSA,V?TURN,V?PUSH,V?MOVE \?ELS22 CALL V-WALK-AROUND RTRUE ?ELS22: EQUAL? PRSA,V?MOVE-DIR \FALSE EQUAL? P-DIRECTION,P?IN \?CND25 CALL V-WALK-AROUND RTRUE ?CND25: EQUAL? P-DIRECTION,P?OUT \?CND28 ZERO? SUB-IN-TANK /?ELS33 SET 'P-DIRECTION,P?EAST JUMP ?CND28 ?ELS33: ZERO? SUB-IN-DOME /?ELS36 SET 'P-DIRECTION,P?SOUTH JUMP ?CND28 ?ELS36: CALL V-WALK-AROUND RTRUE ?CND28: CALL DO-WALK,P-DIRECTION RTRUE .FUNCT THROTTLE-F,TH EQUAL? PRSA,V?LAMP-ON,V?PUSH,V?OPEN \?ELS5 ADD 1,THROTTLE-SETTING >P-NUMBER GRTR? P-NUMBER,THROTTLE-MAX \?ELS10 PRINTR "You're going as fast as you can!" ?ELS10: CALL PERFORM,V?SET,THROTTLE RTRUE ?ELS5: EQUAL? PRSA,V?LAMP-OFF,V?CLOSE \?ELS16 ZERO? THROTTLE-SETTING \?CND17 CALL ALREADY,THROTTLE,STR?17 RTRUE ?CND17: SET 'THROTTLE-SETTING,0 ZERO? SUB-IN-TANK \?THN23 ZERO? SUB-IN-DOME /?ELS22 ?THN23: PRINTI "The throttle is now closed. You must open it to make the " PRINTD SUB PRINTR " go anywhere." ?ELS22: PRINTI "The " PRINTD SUB PRINTI " slows to a halt." CRLF CALL COOL-BACK RTRUE ?ELS16: EQUAL? PRSA,V?TURN,V?MOVE \?ELS32 PRINTR "Set it to the speed you want: fast, medium, slow, or off." ?ELS32: EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \?ELS36 PRINTI "The throttle is set to " GET THROTTLE-DESCS,THROTTLE-SETTING PRINT STACK PRINTR "." ?ELS36: EQUAL? PRSA,V?MOVE-DIR,V?PUT,V?SET \FALSE EQUAL? PRSO,THROTTLE \FALSE EQUAL? PRSI,FAST /?THN46 EQUAL? PRSI,MEDIUM,SLOW,OFF \?ELS45 ?THN46: EQUAL? PRSI,OFF \?ELS50 SET 'TH,0 JUMP ?CND43 ?ELS50: EQUAL? PRSI,SLOW \?ELS52 SET 'TH,1 JUMP ?CND43 ?ELS52: EQUAL? PRSI,MEDIUM \?ELS54 SET 'TH,2 JUMP ?CND43 ?ELS54: EQUAL? PRSI,FAST \?CND43 SET 'TH,3 JUMP ?CND43 ?ELS45: EQUAL? PRSI,FALSE-VALUE,GRID-UNIT \?ELS58 GRTR? P-NUMBER,-1 \?ELS58 GRTR? P-NUMBER,THROTTLE-MAX /?ELS58 SET 'TH,P-NUMBER JUMP ?CND43 ?ELS58: PRINTR "Set it off, slow, medium, or fast." ?CND43: ZERO? TH \?CND65 PRINT I-ASSUME PRINTI " close the " PRINTD THROTTLE PRINTI ".)" CRLF CALL PERFORM,V?CLOSE,THROTTLE RTRUE ?CND65: FSET? ENGINE,ONBIT /?ELS72 PRINTI "Nothing happens when you open the throttle. " ZERO? GATE-CRASHED /?ELS77 PRINTI "The turbine was stopped by Automatic Shutoff when you crashed into the sea gate." JUMP ?CND75 ?ELS77: PRINTI "The engine is off." ?CND75: CALL THIS-IS-IT,ENGINE CRLF RTRUE ?ELS72: ZERO? SUB-IN-TANK /?ELS86 CALL HATCH-GATE-NOT-READY?,TANK-GATE ZERO? STACK \TRUE EQUAL? JOYSTICK-DIR,P?EAST \?ELS93 FSET? TANK-GATE,OPENBIT /?ELS96 CALL GATE-CRASH,STR?21,THROTTLE,TANK-GATE RTRUE ?ELS96: SET 'THROTTLE-SETTING,TH CALL SUB-LEAVES,TRUE-VALUE,P?EAST RTRUE ?ELS93: SET 'THROTTLE-SETTING,TH CALL OKAY-THROTTLE,P?EAST RTRUE ?ELS86: ZERO? SUB-IN-DOME /?ELS102 CALL HATCH-GATE-NOT-READY?,AIRLOCK-HATCH ZERO? STACK \TRUE SET 'THROTTLE-SETTING,TH EQUAL? JOYSTICK-DIR,P?SOUTH \?ELS109 CALL SUB-LEAVES,FALSE-VALUE,P?SOUTH RTRUE ?ELS109: CALL OKAY-THROTTLE,P?SOUTH RTRUE ?ELS102: EQUAL? THROTTLE-SETTING,TH \?ELS116 PRINTI "Okay, you're still " JUMP ?CND114 ?ELS116: LESS? THROTTLE-SETTING,TH \?ELS123 PRINTI "You feel the seat press " ZERO? THROTTLE-SETTING /?CND126 PRINTI "harder " ?CND126: PRINTI "against you, and the " PRINTD ENGINE PRINTI " gets loud" JUMP ?CND121 ?ELS123: PRINTI "The " PRINTD ENGINE PRINTI " gets quiet" ?CND121: PRINTI "er. You're now " ?CND114: PRINTI "travelling at a speed of " PRINTN TH PRINTI " " PRINTD GRID-UNIT EQUAL? 1,TH /?CND141 PRINTI "s" ?CND141: SET 'THROTTLE-SETTING,TH PRINTR " per turn." .FUNCT OKAY-THROTTLE,DIR PRINTI "Okay, now that the throttle is set, try pushing the " PRINTD JOYSTICK PRINTI " to " CALL DIR-PRINT,DIR PRINTR "." .FUNCT I-SHOW-SONAR FSET? SNARK,INVISIBLE \?ELS5 FSET? FREIGHTER,INVISIBLE \?ELS5 EQUAL? SONAR-LON,SUB-LON \?ELS5 EQUAL? SONAR-LAT,SUB-LAT \?ELS5 EQUAL? SONAR-DEP,SUB-DEPTH \?ELS5 EQUAL? SONAR-DIR,JOYSTICK-DIR \?ELS5 ZERO? DEBUG /FALSE PRINTI "[no sonar update]" CRLF RFALSE ?ELS5: SCREEN 1 CALL SHOW-SONARSCOPE SCREEN 0 SET 'SONAR-LON,SUB-LON SET 'SONAR-LAT,SUB-LAT SET 'SONAR-DEP,SUB-DEPTH SET 'SONAR-DIR,JOYSTICK-DIR RFALSE .FUNCT DEPTH-F CALL DO-INSTEAD-OF,DEPTH-CONTROL,DEPTH RTRUE .FUNCT DEPTH-CONTROL-F,DEP,NEW-DIVING? CALL REMOTE-VERB? ZERO? STACK \FALSE ZERO? SUB-IN-TANK /?ELS7 CALL YOU-CANT,STR?49,SUB,STR?50 RTRUE ?ELS7: ZERO? SUB-IN-DOME /?ELS10 CALL WHY-NEED,DEPTH-CONTROL,AIRLOCK ZERO? STACK \TRUE ?ELS10: EQUAL? PRSA,V?WHAT /?THN15 EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \?ELS14 ?THN15: PRINTI "It's set for a desired depth of " MUL 5,TARGET-DEPTH PRINTN STACK PRINTR " meters." ?ELS14: EQUAL? PRSA,V?SET \FALSE SET 'DEP,P-NUMBER FSET? AUTO-PILOT,ONBIT \?ELS23 PRINTI "Let the " PRINTD AUTO-PILOT PRINTR " handle that." ?ELS23: FSET? DEPTHFINDER,ONBIT /?ELS27 CALL THIS-IS-IT,DEPTHFINDER PRINTI "You'd better turn on the " PRINTD DEPTHFINDER PRINTR " first." ?ELS27: GRTR? DEP,-1 /?ELS31 PRINTR "You must set it to at least zero!" ?ELS31: ZERO? SUB-IN-BATTLE /?ELS35 GRTR? SUB-DEPTH,DEP \?ELS35 PRINTR "If you go above the Snark, Thorpe will shoot you!" ?ELS35: GRTR? DEP,0 \?ELS41 FSET? SUB-DOOR,OPENBIT \?ELS41 CALL YOU-CANT,STR?49,SUB-DOOR,STR?21 RTRUE ?ELS41: EQUAL? PRSI,METER \?CND21 ADD 2,DEP DIV STACK,5 >DEP MUL 5,DEP EQUAL? P-NUMBER,STACK /?CND21 PRINTI "(That rounds off to " MUL 5,DEP PRINTN STACK PRINTI " meters.)" CRLF ?CND21: SET 'TARGET-DEPTH,DEP ZERO? DEP /?CND51 SET 'EVER-SUBMERGED?,TRUE-VALUE ?CND51: EQUAL? SUB-DEPTH,DEP \?ELS58 ZERO? DIVING? \?ELS61 CALL ALREADY,PLAYER,STR?51 JUMP ?CND59 ?ELS61: PRINTI "Your " EQUAL? 1,DIVING? \?ELS70 PUSH STR?52 JUMP ?CND66 ?ELS70: PUSH STR?53 ?CND66: PRINT STACK PRINTI "scent ceases." ?CND59: CRLF SET 'DIVING?,0 RTRUE ?ELS58: LESS? SUB-DEPTH,TARGET-DEPTH \?ELS77 SET 'NEW-DIVING?,1 JUMP ?CND75 ?ELS77: SET 'NEW-DIVING?,-1 ?CND75: EQUAL? DIVING?,NEW-DIVING? /?ELS82 PRINTI "The " PRINTD SUB PRINTI " noses " EQUAL? NEW-DIVING?,1 \?ELS87 PRINTI "down" JUMP ?CND85 ?ELS87: PRINTI "up" ?CND85: PRINTI "ward" ZERO? SUB-DEPTH \?CND96 PRINTI ", and " PRINTD GLOBAL-WATER PRINTI " begins to wash over your forward " PRINTD SUB-WINDOW ?CND96: PRINTI ". You're now " JUMP ?CND80 ?ELS82: PRINTI "Okay, you're still " ?CND80: SET 'DIVING?,NEW-DIVING? EQUAL? 1,DIVING? \?ELS109 PRINTI "div" JUMP ?CND107 ?ELS109: PRINTI "ris" ?CND107: PRINTI "ing at a speed of 5 meters per " ZERO? THROTTLE-SETTING \?ELS122 PRINTR "turn." ?ELS122: PRINTD GRID-UNIT PRINTR "." .FUNCT METER-F EQUAL? PRSA,V?BOARD \FALSE CALL PERFORM,V?CLIMB-UP,PRSO RTRUE .FUNCT AUTO-PILOT-F EQUAL? PRSA,V?LAMP-OFF \?ELS5 FSET? AUTO-PILOT,ONBIT /?ELS10 CALL ALREADY,AUTO-PILOT,STR?39 RSTACK ?ELS10: PRINTI "If you do, you'll never reach the " PRINTD AQUADOME PRINTR "!" ?ELS5: EQUAL? PRSA,V?PUSH,V?LAMP-ON /?THN17 EQUAL? PRSA,V?SET \FALSE EQUAL? PRSI,AQUADOME \FALSE ?THN17: FSET? AUTO-PILOT,ONBIT \?ELS25 CALL ALREADY,AUTO-PILOT,STR?42 RSTACK ?ELS25: ZERO? SUB-IN-OPEN-SEA \?ELS27 PRINTR "You must be your own pilot for now." ?ELS27: FSET? SUB-DOOR,OPENBIT \?ELS31 CALL YOU-CANT,STR?49,SUB-DOOR,STR?21 RTRUE ?ELS31: FSET AUTO-PILOT,ONBIT SET 'JOYSTICK-DIR,P?EAST SET 'TIP-SAYS-1,23 SET 'TIP-SAYS-2,MAGAZINE CALL QUEUE,I-TIP-SAYS,6 PUT STACK,0,1 PRINTI "Okay, your trip to the " PRINTD AQUADOME PRINTI " will take " ZERO? THROTTLE-SETTING \?ELS38 PRINTI "forever" JUMP ?CND36 ?ELS38: DIV AQUADOME-DISTANCE,THROTTLE-SETTING PRINTN STACK PRINTI " turns" ?CND36: PRINTI " at your current speed. But you can set the throttle to a different speed, if you want." CRLF CALL SCORE-OBJ,AUTO-PILOT RTRUE .FUNCT I-AUTO-PILOT FSET? AUTO-PILOT,ONBIT /FALSE CALL QUEUE,I-AUTO-PILOT,2 EQUAL? PRSA,V?LAMP-ON \?CND6 EQUAL? PRSO,AUTO-PILOT /FALSE ?CND6: CALL TIME-FOR-PILOT RSTACK .FUNCT TIME-FOR-PILOT CALL TIP-SAYS PRINTI "I think it's time to turn on the " PRINTD AUTO-PILOT PRINTR ".""" .FUNCT CONTROL-CIRCUITS-F EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE ZERO? SUB-IN-OPEN-SEA /FALSE PRINTI "Sorry. There's no way to do this while the " PRINTD SUB PRINTR " is submerged and underway. You need ship-repair or test-tank facilities." .FUNCT CONTROL-CIRCUITS-GAUGE-F EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE PRINTI "The " PRINTD CONTROL-CIRCUITS-GAUGE PRINTI " needle is " LESS? 20,CIRCUIT-TEMP \?ELS15 LESS? 25,CIRCUIT-TEMP \?ELS18 PRINTI "pointing to" JUMP ?CND16 ?ELS18: PRINTI "near" ?CND16: PRINTI " the red danger zone." JUMP ?CND13 ?ELS15: PRINTI "in the green safety zone." ?CND13: FSET? ENGINE,TOUCHBIT /?ELS33 JUMP ?CND31 ?ELS33: FSET? VOLTAGE-REGULATOR,MUNGBIT /?ELS35 JUMP ?CND31 ?ELS35: LESS? 1,THROTTLE-SETTING \?ELS37 PRINTI " And rising." JUMP ?CND31 ?ELS37: ZERO? THROTTLE-SETTING \?ELS41 PRINTI " And falling." JUMP ?CND31 ?ELS41: PRINTI " And steady." ?CND31: CRLF RTRUE .FUNCT SEARCH-BEAM-F EQUAL? PRSA,V?TURN \?ELS5 PRINTR "You didn't tell what direction to aim it." ?ELS5: EQUAL? PRSA,V?AIM \FALSE FSET? SEARCH-BEAM,ONBIT /?ELS14 PRINTR "It's not on!" ?ELS14: ZERO? SUB-IN-BATTLE /?ELS18 CALL TOO-CLOUDY RSTACK ?ELS18: EQUAL? PRSI,RIGHT \?ELS21 IN? WHALE,SUB \?ELS21 FSET? WHALE,INVISIBLE \?ELS28 FCLEAR WHALE,INVISIBLE PRINTI "An enormous whale can be seen, lolling comfortably in the deep." ZERO? WHALE-HEARD /?CND31 PRINTI " Obviously this is what has been making those noises over the hydrophone." ?CND31: CRLF PRINTI "The whale swims closer as you pass, curious about this strange fish -- the " PRINTD SUB PRINTR ". But, thankfully, it shows no danger of accidental collision." ?ELS28: PRINTR "The whale is still following you." ?ELS21: PRINTI "Nothing new appears in the " PRINTD SEARCH-BEAM PRINTR " beam." .FUNCT GENERIC-LIGHT-F,OBJ ZERO? DEPTH-WARNING /?ELS5 RETURN DEPTHFINDER-LIGHT ?ELS5: ZERO? SONAR-WARNING \?THN9 ZERO? SHIP-WARNING /?ELS8 ?THN9: RETURN SONARSCOPE-LIGHT ?ELS8: EQUAL? PRSA,V?SAIM,V?AIM /?THN13 EQUAL? PRSA,V?TURN,V?LAMP-OFF,V?LAMP-ON \FALSE ?THN13: RETURN SEARCH-BEAM .FUNCT WHALE-F EQUAL? PRSA,V?WALK-TO,V?THROUGH,V?FIND \FALSE PRINTR "You shouldn't get any closer!" .FUNCT BAY-F EQUAL? PRSA,V?WALK-TO,V?THROUGH,V?FIND \?ELS5 ZERO? SUB-IN-TANK /?ELS10 PRINTI "First you must launch the " PRINTD SUB PRINTR "." ?ELS10: EQUAL? NOW-TERRAIN,BAY-TERRAIN \?ELS15 PRINTR "You're in it!" ?ELS15: PRINTR "This is no time to go back!" ?ELS5: EQUAL? PRSA,V?EXAMINE \FALSE EQUAL? NOW-TERRAIN,BAY-TERRAIN \?ELS28 CALL PERFORM,V?LOOK-OUTSIDE,SUB-WINDOW RTRUE ?ELS28: CALL NOT-HERE,BAY RSTACK .FUNCT CLAW-F EQUAL? PRSA,V?EXAMINE,V?ANALYZE \?ELS5 CALL LOCAL-SUB-F RSTACK ?ELS5: EQUAL? PRSA,V?FIND \?ELS7 PRINTI "It's part of the " PRINTD SUB PRINTR "." ?ELS7: EQUAL? PRSA,V?MOVE-DIR,V?MOVE,V?AIM \FALSE GET ON-SUB,0 EQUAL? BAZOOKA,STACK \?ELS16 GET ON-SUB,1 EQUAL? DART,STACK \?ELS21 PRINTR "You should do that to one weapon or the other." ?ELS21: CALL PERFORM,PRSA,BAZOOKA,PRSI RTRUE ?ELS16: GET ON-SUB,1 EQUAL? DART,STACK \?ELS27 CALL PERFORM,PRSA,DART,PRSI RTRUE ?ELS27: PRINTR "The claw moves just where you want it. Well done!" .FUNCT WHY-NEED,OBJ,WHERE EQUAL? PRSA,V?SET \?ELS5 EQUAL? PRSI,MANUAL /FALSE ?ELS5: EQUAL? PRSA,V?MUNG,V?LAMP-OFF /FALSE PRINTI "Why would you need the " PRINTD OBJ PRINTI "? The " PRINTD SUB PRINTI " is in the " PRINTD WHERE PRINTR "." .FUNCT PILOT-SEAT-F,VAL=0 EQUAL? PRSA,V?SIT,V?EXAMINE,V?ANALYZE \?ELS5 PRINTR "You're sitting in it." ?ELS5: EQUAL? PRSA,V?LOOK-UNDER \FALSE FSET? OXYGEN-GEAR,TOUCHBIT /?CND10 SET 'VAL,TRUE-VALUE PRINTI "You can see " PRINTD OXYGEN-GEAR PRINTI "." CRLF ?CND10: IN? ESCAPE-POD-UNIT,HERE \?CND15 SET 'VAL,TRUE-VALUE PRINTI "You can see the " PRINTD ESCAPE-POD-UNIT PRINTI "." CRLF ?CND15: RETURN VAL .FUNCT INSTRUMENTS-F EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE PRINTI "Main instruments: " PRINTD DEPTHFINDER PRINTI ", " PRINTD HYDROPHONE PRINTI ", " PRINTD SONARSCOPE PRINTI ", and " PRINTD CONTROL-CIRCUITS-GAUGE PRINTR "." .FUNCT CONTROLS-SUB-F EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE PRINTI "MAIN OPERATING CONTROLS: " CALL FIXED-FONT-ON PRINTD REACTOR PRINTI " : " FSET? REACTOR,OPENBIT \?ELS16 PUSH STR?21 JUMP ?CND12 ?ELS16: PUSH STR?17 ?CND12: PRINT STACK CRLF PRINTD REACTOR-SWITCH PRINTI ": " FSET? REACTOR,ONBIT \?ELS23 PUSH STR?42 JUMP ?CND19 ?ELS23: PUSH STR?39 ?CND19: 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 PRINTD ENGINE-BUTTON PRINTI " : " FSET? ENGINE,ONBIT \?ELS30 PUSH STR?42 JUMP ?CND26 ?ELS30: PUSH STR?39 ?CND26: PRINT STACK CRLF PRINTD THROTTLE PRINTI " : " GET THROTTLE-DESCS,THROTTLE-SETTING PRINT STACK CRLF PRINTD JOYSTICK PRINTI " : " CALL DIR-PRINT,JOYSTICK-DIR,FALSE-VALUE CRLF PRINTD DEPTH-CONTROL PRINTI " : " MUL 5,TARGET-DEPTH PRINTN STACK PRINTI " meters " PRINTD AUTO-PILOT PRINTI " : " FSET? AUTO-PILOT,ONBIT \?ELS39 PUSH STR?42 JUMP ?CND35 ?ELS39: PUSH STR?39 ?CND35: PRINT STACK CRLF CALL FIXED-FONT-OFF RTRUE .FUNCT FIXED-FONT-ON GET 0,8 BOR STACK,2 PUT 0,8,STACK RTRUE .FUNCT FIXED-FONT-OFF GET 0,8 BAND STACK,-3 PUT 0,8,STACK RTRUE .ENDI