seastalker/sub.zap

2963 lines
72 KiB
Plaintext

.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