2963 lines
72 KiB
Plaintext
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
|