mirror of
https://github.com/historicalsource/seastalker
synced 2024-06-29 05:05:12 +03:00
2846 lines
90 KiB
Plaintext
2846 lines
90 KiB
Plaintext
"SUB for SEASTALKER
|
||
Copyright (C) 1984 Infocom, Inc. All rights reserved."
|
||
|
||
<ROOM SUB
|
||
(IN ROOMS)
|
||
(DESC "SCIMITAR" ;"Ultramarine Bioceptor")
|
||
(TEXT
|
||
"This is your revolutionary new Ultramarine Bioceptor, named the SCIMITAR.")
|
||
(FLAGS RLANDBIT ONBIT ;VOWELBIT ;VEHBIT)
|
||
(OUT PER SUB-EXIT-F)
|
||
;(UP PER SUB-EXIT-F)
|
||
(IN TO CRAWL-SPACE IF ENGINE-ACCESS-HATCH IS OPEN)
|
||
;(DOWN TO CRAWL-SPACE IF ENGINE-ACCESS-HATCH IS OPEN)
|
||
(GLOBAL LOCAL-SUB SUB-DOOR ENGINE-ACCESS-HATCH
|
||
REACTOR-SWITCH FILL-TANK-BUTTON OPEN-GATE-BUTTON
|
||
TEST-BUTTON ENGINE-BUTTON)
|
||
(VALUE 1)
|
||
(ACTION SUB-F)>
|
||
|
||
<ROUTINE SUB-EXIT-F ("AUX" X)
|
||
<COND (<NOT <FSET? ,SUB-DOOR ,OPENBIT>>
|
||
<THIS-IS-IT ,SUB-DOOR>
|
||
<TELL "The " D ,SUB-DOOR " is closed." CR>
|
||
<RFALSE>)
|
||
(,SUB-IN-TANK
|
||
<COND (<SET X <GET ,ON-SUB 0>> <MOVE .X ,NORTH-TANK-AREA>)>
|
||
<COND (<SET X <GET ,ON-SUB 1>> <MOVE .X ,NORTH-TANK-AREA>)>
|
||
,NORTH-TANK-AREA)
|
||
(,SUB-IN-DOME
|
||
<COND (,AIRLOCK-FULL
|
||
;<YOU-CANT "leave" ,AIRLOCK "full of water">
|
||
<TELL
|
||
"You can't go out while the " D ,AIRLOCK " is full of water!" CR>
|
||
<RFALSE>)
|
||
(T
|
||
<COND (<AND <NOT ,DOME-AIR-BAD?>
|
||
<FSET? ,AIR-SUPPLY-SYSTEM ,MUNGBIT>>
|
||
<ENABLE <QUEUE I-DOME-AIR ,DOME-AIR-ONSET>>
|
||
<COND (<NOT <IN? ,OXYGEN-GEAR ,PLAYER>>
|
||
<TELL-HINT 53 ;10 ,OXYGEN-GEAR <>>
|
||
<CRLF>)>)
|
||
;"(T <ENABLE <QUEUE I-ANTRIM-REPORTS 29>>)">
|
||
<COND (<SET X <GET ,ON-SUB 0>> <MOVE .X ,AIRLOCK>)>
|
||
<COND (<SET X <GET ,ON-SUB 1>> <MOVE .X ,AIRLOCK>)>
|
||
<COND (<IN? ,MAGAZINE ,TIP>
|
||
;<FCLEAR ,MAGAZINE ,NDESCBIT>
|
||
<MOVE ,MAGAZINE ,SUB>)>
|
||
<QUEUE I-POISON-JAB 0>
|
||
,AIRLOCK)>)
|
||
(T
|
||
;<YOU-CANT "leave" ,SUB "here">
|
||
<TELL "You can't go out of the " D ,SUB " here!" CR>
|
||
<RFALSE>)>>
|
||
|
||
<ROUTINE DOCKING-VERB? ()
|
||
<COND (<NOT <EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN ,SEA-TERRAIN>>
|
||
<RFALSE>)
|
||
(<VERB? DOCK> <RTRUE>)
|
||
(<AND <VERB? WALK> <DOBJ? P?IN>> <RTRUE>)
|
||
(<VERB? THROUGH WALK-TO>
|
||
<COND (<EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<COND (<DOBJ? TEST-TANK TANK-GATE YOUR-LABORATORY> <RTRUE>)
|
||
(T <RFALSE>)>)
|
||
(<DOBJ? DOCKING-TANK AIRLOCK AQUADOME AIRLOCK-HATCH> <RTRUE>)>)
|
||
;(T <RFALSE>)>>
|
||
|
||
<ROUTINE SOMEONE-WORKING? ()
|
||
<COND (<NOT <0? <POPULATION ,CRAWL-SPACE ,PLAYER>>> <RTRUE>)
|
||
(<NOT <0? <POPULATION ,SUB ,TIP ,PLAYER>>> <RTRUE>)
|
||
;(<AND <SET P <FIND-FLAG ,SUB ,PERSON ,WINNER>>
|
||
<NOT <EQUAL? .P ,TIP>>
|
||
;<NOT <EQUAL? ,OLD-HERE ,CRAWL-SPACE>>>
|
||
<RTRUE>)>>
|
||
|
||
<ROUTINE CANT-GO-TO-THRU-CLOSED-HATCH? ("AUX" X)
|
||
<SET X ,PRSO>
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<SET X <GET ,CHARACTER-TABLE <GETP ,PRSO ,P?CHARACTER>>>)>
|
||
<AND <NOT <GLOBAL-IN? ,PRSO ,SUB>>
|
||
<NOT <GLOBAL-IN? ,PRSO ,CRAWL-SPACE>>
|
||
<OR <EQUAL? .X ,DOCKING-TANK ,TEST-TANK>
|
||
<NOT <EQUAL? <META-LOC .X>
|
||
,SUB ,CRAWL-SPACE ,GLOBAL-OBJECTS>>>
|
||
<NOT <SUB-EXIT-F>>>>
|
||
|
||
<ROUTINE SUB-F ("OPTIONAL" (RARG <>) "AUX" RM X)
|
||
<COND (<EQUAL? .RARG ,M-BEG>
|
||
<COND (<AND <OR ,SUB-IN-TANK ,SUB-IN-DOME>
|
||
<OR <VERB? LAUNCH>
|
||
<AND <VERB? ;DROP LEAVE> <DOBJ? AIRLOCK TEST-TANK>>>>
|
||
<PERFORM ,V?LAMP-ON ,LOCAL-SUB>
|
||
<RTRUE>)
|
||
(<VERB? STAND> <TELL "There's no room in here!" CR>)
|
||
(<VERB? $CALL>
|
||
<COND (<DOBJ? SLOW MEDIUM FAST>
|
||
<PERFORM ,V?SET ,THROTTLE ,PRSO>
|
||
<RTRUE>)>)
|
||
(<AND <VERB? DISEMBARK LEAVE>
|
||
<OR <NOT ,PRSO> <DOBJ? LOCAL-SUB>>>
|
||
<COND (<SET RM <SUB-EXIT-F>>
|
||
<COND (<AND <GOTO .RM> <NOT <==? ,WINNER ,PLAYER>>>
|
||
<OKAY>)>)>
|
||
<RTRUE>)
|
||
(<DOCKING-VERB?>
|
||
<COND (<EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<TELL
|
||
"You can't go back to the " D ,TEST-TANK " now!" CR>)
|
||
(<NOT <SUB-OUTSIDE-AIRLOCK?>>
|
||
<TOO-BAD-BUT ,AIRLOCK "too far away">
|
||
;<TELL "You're too far from the " D ,AIRLOCK "." CR>)
|
||
(<NOT <FSET? ,AIRLOCK-HATCH ,OPENBIT>>
|
||
<TOO-BAD-BUT ,AIRLOCK-HATCH "closed">
|
||
;<TELL "The " D ,AIRLOCK-HATCH " is closed." CR>)
|
||
(T
|
||
<SETG THROTTLE-SETTING 1>
|
||
;<COND (,DEBUG
|
||
<TELL "[Throttle=" N ,THROTTLE-SETTING "]" CR>)>
|
||
<SETG JOYSTICK-DIR ,P?NORTH>
|
||
;<SETG SUB-IN-REVERSE? T>
|
||
<SETG SUB-DLON 0>
|
||
<SETG SUB-DLAT 1>
|
||
<RTRUE ;RFALSE>)>)
|
||
(<AND <NOT ,SUB-IN-DOME>
|
||
<VERB? FIND WALK-TO>
|
||
<DOBJ? LOCAL-SUB AQUADOME DOCKING-TANK>>
|
||
<COND (<EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN ,SEA-TERRAIN>
|
||
<PERFORM ,V?FIND ,PLAYER>
|
||
<RTRUE>)>)
|
||
(<VERB? CLIMB-DOWN CLIMB-UP LEVEL>
|
||
<COND (<OR ,SUB-IN-TANK ,SUB-IN-DOME>
|
||
<TELL
|
||
"You can't do that while the " D ,SUB " is here." CR>
|
||
<RTRUE>)
|
||
(<VERB? LEVEL>
|
||
<SETG TARGET-DEPTH ,SUB-DEPTH>
|
||
<RTRUE>) ;"I-UPDATE-SUB should give output"
|
||
(<FSET? ,PRSO ,UNITBIT>
|
||
<COND (<VERB? CLIMB-DOWN>
|
||
<SETG P-NUMBER <+ <* 5 ,SUB-DEPTH> ,P-NUMBER>>)
|
||
(<VERB? CLIMB-UP>
|
||
<SETG P-NUMBER <- <* 5 ,SUB-DEPTH> ,P-NUMBER>>
|
||
<COND (<G? 0 ,P-NUMBER>
|
||
<TELL "You're not deep enough!" CR>
|
||
<RTRUE>)>)>
|
||
<PERFORM ,V?DIVE ,PRSO>
|
||
<RTRUE>)>)
|
||
(<VERB? WALK>
|
||
<COND (<DOBJ? UNDERWATER> <SETG PRSO ,P?DOWN>)>
|
||
<COND (<L? ,PRSO ,LOW-DIRECTION>
|
||
<V-WALK-AROUND>
|
||
<RTRUE>)>
|
||
<COND (<DOBJ? P?IN P?OUT>
|
||
<RFALSE>)>
|
||
<COND (<DOBJ? P?DOWN P?UP>
|
||
<SETG P-NUMBER 5>
|
||
<COND (<DOBJ? P?UP> <PERFORM ,V?CLIMB-UP ,METER>)
|
||
(T <PERFORM ,V?CLIMB-DOWN ,METER>)>
|
||
<RTRUE>)>
|
||
<COND (<DOBJ? SLOW MEDIUM FAST>
|
||
;"never used if these are verbs"
|
||
<PERFORM ,V?SET ,THROTTLE ,PRSO>
|
||
<RTRUE>)>
|
||
<COND (<EQUAL? ,PRSO ,P?EAST ,P?SE ,P?NE>
|
||
<SETG SUB-DLON +1>)
|
||
(<EQUAL? ,PRSO ,P?WEST ,P?SW ,P?NW>
|
||
<SETG SUB-DLON -1>)
|
||
(T <SETG SUB-DLON 0>)>
|
||
<COND (<EQUAL? ,PRSO ,P?NORTH ,P?NW ,P?NE>
|
||
<SETG SUB-DLAT +1>)
|
||
(<EQUAL? ,PRSO ,P?SOUTH ,P?SW ,P?SE>
|
||
<SETG SUB-DLAT -1>)
|
||
(T <SETG SUB-DLAT 0>)>
|
||
;<COND (,SUB-IN-REVERSE?
|
||
<SETG SUB-DLON <- ,SUB-DLON>>
|
||
<SETG SUB-DLAT <- ,SUB-DLAT>>)>
|
||
<COND (<FSET? ,AUTO-PILOT ,ONBIT>
|
||
<TELL "Let the " D ,AUTO-PILOT " handle that." CR>)
|
||
(,SUB-IN-TANK
|
||
<TRY-TO-EMERGE ,P?EAST ,TANK-GATE ,TEST-TANK-FULL>)
|
||
(,SUB-IN-DOME
|
||
<TRY-TO-EMERGE ,P?SOUTH ,AIRLOCK-HATCH ,AIRLOCK-FULL>)
|
||
(<AND <READY-FOR-SNARK?>
|
||
,TOLD-SNARK-WENT
|
||
<FSET? ,SNARK ,INVISIBLE>
|
||
<==? ,SUB-DEPTH ,AIRLOCK-DEPTH>
|
||
<DOBJ? P?SE>
|
||
<NOT <==? ,JOYSTICK-DIR ,PRSO>>>
|
||
<TELL
|
||
"Pulses racing and hearts thumping, you and Tip at last set out to
|
||
capture the monstrous Snark!" CR>)
|
||
(T
|
||
<SUB-NOW-HEADING>)>
|
||
<SETG JOYSTICK-DIR ,PRSO>
|
||
<RTRUE>)
|
||
(<AND <VERB? WALK-UNDER> <DOBJ? GLOBAL-WATER BAY SEA>>
|
||
<COND (<0? ,SUB-DEPTH>
|
||
<DO-WALK ,P?DOWN>
|
||
<RTRUE>)
|
||
(T <TELL "You're already " D ,UNDERWATER "." CR>)>)
|
||
(<EXIT-VERB?>
|
||
<COND (<CANT-GO-TO-THRU-CLOSED-HATCH?>
|
||
<RTRUE>)>)
|
||
(<AND <VERB? EXAMINE LOOK-INSIDE>
|
||
<DOBJ? TEST-TANK DOCKING-TANK>>
|
||
<TELL ,I-ASSUME " look through the " D ,SUB-WINDOW ".)" CR>
|
||
<PERFORM ,V?LOOK-INSIDE ,SUB-WINDOW>
|
||
<RTRUE>)
|
||
(<AND <VERB? EXAMINE>
|
||
<DOBJ? THORPE-SUB GLOBAL-THORPE GLOBAL-SHARON
|
||
SNARK GLOBAL-SNARK>>
|
||
<COND (<NOT <FSET? ,SNARK ,INVISIBLE>> ;,SUB-IN-BATTLE
|
||
<TELL
|
||
"The " D ,GLOBAL-WATER " is too cloudy to see anything." CR>)
|
||
(T
|
||
<TOO-BAD-BUT ,PRSO "too far away">
|
||
;<HE-SHE-IT ,PRSO T>
|
||
;<TELL "'s too far away.">)>)
|
||
(<AND <VERB? DROP>
|
||
<EQUAL? ,PRSO <GET ,ON-SUB 0> <GET ,ON-SUB 1>>>
|
||
<COND (<EQUAL? ,PRSO <GET ,ON-SUB 0>> <PUT ,ON-SUB 0 <>>)
|
||
(<EQUAL? ,PRSO <GET ,ON-SUB 1>> <PUT ,ON-SUB 1 <>>)>
|
||
<COND (,SUB-IN-TANK <MOVE ,PRSO ,NORTH-TANK-AREA>)
|
||
(,SUB-IN-DOME <MOVE ,PRSO ,AIRLOCK>)
|
||
(T <REMOVE ,PRSO>)>
|
||
<FCLEAR ,PRSO ,NDESCBIT>
|
||
<FSET ,PRSO ,TAKEBIT>
|
||
<FCLEAR ,PRSO ,TRYTAKEBIT>
|
||
<TELL "Dropped." CR>)
|
||
(<AND <VERB? TAKE-WITH> <IOBJ? CLAW>>
|
||
<COND (<NOT <EQUAL? <LOC ,PRSO> ,AIRLOCK ,NORTH-TANK-AREA>>
|
||
<TOO-BAD-BUT ,PRSO "not close enough to the claw">)
|
||
(<NOT <FSET? ,PRSO ,TAKEBIT>> <YOU-CANT "take">)
|
||
(<MOUNT-WEAPON ,PRSO> <TELL "Taken." CR> <RTRUE>)
|
||
(T <RTRUE>)>)
|
||
;(T <RFALSE>)>)
|
||
(<EQUAL? .RARG ,M-ENTER>
|
||
<COND (<NOT <0? <POPULATION ,SUB ,TIP ,PLAYER>>>
|
||
<TOO-CROWDED>
|
||
<COND (,SUB-IN-DOME <GOTO ,AIRLOCK>)
|
||
(,SUB-IN-TANK <GOTO ,NORTH-TANK-AREA>)>
|
||
<RTRUE>)>
|
||
<ENABLE <QUEUE I-POISON-JAB 9>>
|
||
<COND (<SET X <GET ,ON-SUB 0>> <MOVE .X ,SUB>)>
|
||
<COND (<SET X <GET ,ON-SUB 1>> <MOVE .X ,SUB>)>
|
||
<COND (<AND <IN? ,ESCAPE-POD-UNIT ,SUB>
|
||
<FSET? ,SYRINGE ,MUNGBIT>
|
||
<NOT <FSET? ,SYRINGE ;,ESCAPE-POD-UNIT ,TOUCHBIT>>>
|
||
<ENABLE <QUEUE I-CHECK-POD 1>>)>
|
||
<COND (<AND ,SUB-IN-DOME
|
||
<READY-FOR-SNARK?>
|
||
<NOT <SOMEONE-WORKING?>>>
|
||
<FCLEAR ,SUB-DOOR ,OPENBIT>
|
||
<MOVE ,TIP ,HERE>
|
||
<TELL
|
||
"As you and Tip take your places in your seats, ">
|
||
<COND (<AND <FSET? ,AIRLOCK-ROOF ,OPENBIT>
|
||
<NOT <AIRLOCK-POP?>>>
|
||
<FCLEAR ,AIRLOCK-ROOF ,OPENBIT>
|
||
<TELL
|
||
"and close the hatch, the " D ,AIRLOCK-ROOF ;"watertight roof of the airlock"
|
||
" is also sliding shut." CR>)
|
||
(T <TELL "Tip closes the hatch." CR>)>)>
|
||
<SCORE-OBJ ,SUB>
|
||
<RTRUE>)
|
||
(<EQUAL? .RARG ,M-LOOK>
|
||
<TELL
|
||
"You're in the pilot's seat of the " D ,SUB ", its operating "
|
||
D ,CONTROLS-SUB " before you.">
|
||
<COND (<FSET? ,ENGINE-ACCESS-HATCH ,OPENBIT>
|
||
<TELL " The " D ,ENGINE-ACCESS-HATCH " is open.">)>
|
||
<TELL "|
|
||
A wraparound " D ,SUB-WINDOW ", both fore and aft, provides
|
||
a view ahead and astern.">
|
||
<COND (<AND <0? ,SUB-DEPTH> <NOT ,SUB-IN-TANK>>
|
||
<TELL " Sunlight pours in through the " D ,SUB-WINDOW ".">)>
|
||
<TELL
|
||
" You can also observe your surroundings with a " D ,SONARSCOPE " and a
|
||
" D ,HYDROPHONE " listening device. There's a " D ,SONARPHONE " for
|
||
communication. You'll discover other features when you need them." CR>)>>
|
||
"| A reactor pokes through the deck.
|
||
radio. There's also a , video screen,
|
||
<DDESC ' The hatch leading out is ' ,SUB-DOOR '.'>"
|
||
|
||
<ROUTINE TOO-CROWDED ()
|
||
<TELL
|
||
"It's too crowded in here! You'll have to wait outside."
|
||
;"Oops! Someone's working inside. You'd better wait for them to finish." CR>>
|
||
|
||
<ROUTINE TRY-TO-EMERGE (DIR GATE FULL?)
|
||
<COND (<NOT .FULL?>
|
||
<TELL "You can't turn the sub around while the ">
|
||
<COND (<==? .DIR ,P?EAST> <TELL D ,TEST-TANK>)
|
||
(T <TELL D ,AIRLOCK>)>
|
||
<TELL " is empty." CR>)
|
||
(<EQUAL? ,PRSO .DIR>
|
||
<COND (<NOT <0? ,THROTTLE-SETTING>>
|
||
<COND (<NOT <FSET? ,ENGINE ,ONBIT>>
|
||
<TELL
|
||
"Nothing happens when you push the " D ,JOYSTICK ". The engine is off.">
|
||
<COND (,GATE-CRASHED
|
||
<TELL
|
||
" It was stopped by Automatic Shutoff when you crashed into the
|
||
sea gate.">)>
|
||
<CRLF>)
|
||
(<HATCH-GATE-NOT-READY? .GATE> <RTRUE>)
|
||
(<==? .DIR ,P?SOUTH> <SUB-LEAVES <> ,P?SOUTH>)
|
||
(T <SUB-LEAVES T ,P?EAST>)>)
|
||
(T
|
||
<SUB-NOW-HEADING>)>)
|
||
(T
|
||
;<OKAY ,JOYSTICK>
|
||
<TELL "Okay, the " D ,JOYSTICK " is now pointing to ">
|
||
<DIR-PRINT ,PRSO>
|
||
<TELL ". But the only way the sub can leave the tank is to ">
|
||
<DIR-PRINT .DIR>
|
||
<TELL "." CR>)>>
|
||
|
||
<ROUTINE HATCH-GATE-NOT-READY? (GATE)
|
||
<COND (<FSET? ,SUB-DOOR ,OPENBIT>
|
||
<THIS-IS-IT ,SUB-DOOR>
|
||
<TELL
|
||
"You shouldn't leave the tank with the hatch open!" CR>)
|
||
(<NOT <FSET? .GATE ,OPENBIT>>
|
||
<GATE-CRASH "push" ,JOYSTICK .GATE>
|
||
<RTRUE>)>>
|
||
|
||
<GLOBAL LEFT-DOME 0>
|
||
|
||
<ROUTINE READY-FOR-SNARK? ()
|
||
<AND <OR <==? ,BAZOOKA <GET ,ON-SUB 0>>
|
||
<==? ,DART <GET ,ON-SUB 1>>>
|
||
,FINE-SONAR>>
|
||
|
||
<ROUTINE SUB-LEAVES (FROM-LAB? DIR)
|
||
<COND (.FROM-LAB?
|
||
<SETG GATE-CRASHED <>>
|
||
<SETG SUB-IN-TANK <>>
|
||
<REMOVE ,SHARON>
|
||
<ROB ,SHARON ,GLOBAL-SHARON>
|
||
<SETG ALARM-RINGING <>>
|
||
<PUT <GETPT ,VIDEOPHONE-2 ,P?SYNONYM> 0 ,W?ZZZZLG>
|
||
<ENABLE <QUEUE I-UPDATE-SUB-POSITION -1>>
|
||
<SETG MONSTER-GONE T>
|
||
<SETG NOW-TERRAIN ,BAY-TERRAIN>)
|
||
(T
|
||
<SETG SUB-IN-DOME <>>
|
||
<SETG NOW-TERRAIN ,SEA-TERRAIN>
|
||
<SETG SUB-LON 0 ;6>
|
||
<SETG SUB-LAT -1 ;5>
|
||
<SETG SUB-DEPTH ,AIRLOCK-DEPTH>
|
||
<SETG TARGET-DEPTH ,AIRLOCK-DEPTH>)>
|
||
<COND (<AND ,AUTOMATIC-SONAR <SPLIT-SCREEN?>>
|
||
<SETG SCREEN-NOW-SPLIT T>
|
||
<START-SONAR?>)>
|
||
<TELL
|
||
"The " D ,SUB " glides smoothly out of the tank ">
|
||
<COND (.FROM-LAB? <TELL "onto the surface of " D ,BAY>)
|
||
(T <TELL "into the ocean">)>
|
||
<TELL ". You're heading ">
|
||
<DIR-PRINT .DIR <>>
|
||
<TELL " at " N ,THROTTLE-SETTING " " D ,GRID-UNIT>
|
||
<COND (<NOT <==? 1 ,THROTTLE-SETTING>> <TELL "s">)>
|
||
<TELL " per turn." CR>
|
||
<COND (.FROM-LAB? <SCORE-OBJ ,BAY>)
|
||
(T
|
||
<COND (<FSET? ,TIP ,BUSYBIT>
|
||
<I-TIP-REPORTS>)>
|
||
<COND (<READY-FOR-SNARK?>
|
||
<SCORE-OBJ ,AIRLOCK>
|
||
<SETG LEFT-DOME ,MOVES>
|
||
<ENABLE <QUEUE I-THORPE-APPEARS -1>>)
|
||
(T
|
||
<TIP-SAYS>
|
||
<TELL
|
||
"I've got a bad feeling about this. I don't think
|
||
we should go out there without a ">
|
||
<COND (,FINE-SONAR <TELL "weapon of some kind.\"" CR>)
|
||
(T <TELL D ,FINE-GRID ".\"" CR>)>)>)>
|
||
<SAVE-HINT>
|
||
<RTRUE>>
|
||
|
||
<ROUTINE HEADING-FOR-SEAWALL? ("AUX" Y-X)
|
||
<COND (<NOT <EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN>> <RFALSE>)
|
||
(<OBSTACLE-AHEAD? ,SUB-DEPTH ,SUB-LON ,SUB-LAT> <RFALSE>)
|
||
(<DOBJ? P?NORTH>
|
||
<COND (<AND <G? ,SUB-LON 29> <L? ,SUB-LON 35>> <RTRUE>)>)
|
||
(<DOBJ? P?EAST>
|
||
<COND (<AND <G? ,SUB-LAT 35> <L? ,SUB-LAT 41>> <RTRUE>)>)
|
||
(<DOBJ? P?NE>
|
||
<SET Y-X <- ,SUB-LAT ,SUB-LON>>
|
||
<COND (<AND <G? .Y-X 0> <L? .Y-X 12>> <RTRUE>)>)>>
|
||
|
||
<GLOBAL SUB-STILL-HEADING 0>
|
||
<ROUTINE SUB-NOW-HEADING ()
|
||
;<OKAY ,SUB>
|
||
<TELL "Okay, the " D ,SUB " is ">
|
||
<COND (<==? ,JOYSTICK-DIR ,PRSO>
|
||
<COND (<NOT ,SUB-IN-BATTLE> <INC SUB-STILL-HEADING>)>
|
||
<TELL "still ">)
|
||
(T <TELL "now ">)>
|
||
<COND (<0? ,THROTTLE-SETTING> <TELL "facing" ;"heading">)
|
||
(T <TELL "moving">)>
|
||
<TELL " toward ">
|
||
<DIR-PRINT ,PRSO>
|
||
<COND (<HEADING-FOR-SEAWALL?>
|
||
<TELL ", straight toward the opening in the " D ,SEA-WALL>)>
|
||
<COND (<0? ,THROTTLE-SETTING>
|
||
<THIS-IS-IT ,THROTTLE>
|
||
<TELL
|
||
". But it won't go that way unless you open the " D ,THROTTLE>)>
|
||
<TELL "." CR>
|
||
<COND (<==? ,SUB-STILL-HEADING 9>
|
||
<SETG SUB-STILL-HEADING 0>
|
||
<TELL
|
||
"(You didn't change the " D ,SUB "'s heading. Remember, you don't have to type
|
||
a " D ,INTDIR " every turn if you want to WAIT or do something
|
||
else.)" CR>)>>
|
||
|
||
<OBJECT SUB-DOOR
|
||
(IN LOCAL-GLOBALS)
|
||
(DESC "entry hatch")
|
||
(ADJECTIVE ENTRY BIOCEPTOR SUB SUBMARINE SCIMITAR)
|
||
(SYNONYM DOOR HATCH TOP ENTRANCE)
|
||
(FLAGS DOORBIT OPENBIT)
|
||
(ACTION SUB-DOOR-F)>
|
||
|
||
<ROUTINE SUB-DOOR-F ()
|
||
<COND (<VERB? CLOSE>
|
||
<COND (<AND ,SUB-IN-DOME <FSET? ,AIR-SUPPLY-SYSTEM ,MUNGBIT>>
|
||
<TELL "It's too soon for that!" CR>)
|
||
(<SOMEONE-WORKING?>
|
||
<TELL "There are too many people inside." CR>)
|
||
(<NOT <EQUAL? ,HERE ,SUB>>
|
||
<TELL "You should board the " D ,SUB " first." CR>)
|
||
(<NOT <EQUAL? <LOC ,TIP> ,SUB ,CRAWL-SPACE>>
|
||
<COND (<FSET? ,TIP ,BUSYBIT> <I-TIP-REPORTS>)
|
||
(T
|
||
<MOVE ,TIP ,SUB>
|
||
<TELL
|
||
"Tip rushes in just before you close it. \"Wait for me, "FN"!\"" CR>)>
|
||
<RFALSE>)>)
|
||
(<VERB? OPEN>
|
||
<COND (<AND <G? ,SUB-DEPTH 0>
|
||
<OR <NOT ,SUB-IN-DOME> ,AIRLOCK-FULL>>
|
||
<YOU-CANT "open" ,SUB "under water">
|
||
;<TELL "You can't open the hatch under water!" CR>)
|
||
(,SUB-IN-OPEN-SEA
|
||
<TELL "This is no time for a swim!" CR>)
|
||
(<NOT <EQUAL? ,HERE ,SUB ,NORTH-TANK-AREA ,AIRLOCK>>
|
||
<TELL "You can't reach" THE-PRSO " from here." CR>)
|
||
(<OR ,GREENUP-ESCAPE ,GREENUP-TRAPPED>
|
||
<FSET ,SUB-DOOR ,OPENBIT>
|
||
<TELL
|
||
;"[more?]" "Before the crew can carry out your order, the hatch opens.
|
||
Greenup rises into view from the pilot's seat and gives himself up. ">
|
||
<GREENUP-CUFF>
|
||
<RTRUE>)>)>>
|
||
|
||
<OBJECT SUB-WINDOW
|
||
(IN SUB)
|
||
(DESC "viewport")
|
||
;(ADJECTIVE VIEW)
|
||
(SYNONYM ;PORT VIEWPORT DIVING ;"WINDOW - gone so FIND WINDOW works")
|
||
(FLAGS NDESCBIT WINDOWBIT LOCKED)
|
||
;(GENERIC GENERIC-WINDOW-F ;LOCKED-F)
|
||
(ACTION SUB-WINDOW-F)>
|
||
|
||
<ROUTINE SUB-WINDOW-F ("AUX" ;(RM <WINDOW-ROOM ,HERE ,PRSO>) POP)
|
||
<COND (<VERB? BRUSH>
|
||
<ALREADY ,SUB-WINDOW "clean enough">)
|
||
(<VERB? LOOK-INSIDE LOOK-OUTSIDE>
|
||
<COND (T ;<EQUAL? ,HERE ,SUB>
|
||
<COND (,SUB-IN-TANK
|
||
<TELL"You can see the test tank outside."CR>)
|
||
(<EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<COND (<0? ,SUB-DEPTH>
|
||
<TELL
|
||
"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
|
||
" D ,UNDERWATER ", you should avoid shallow areas called shoals."
|
||
;"(You'll find that information in your SEASTALKER package.)" CR>)
|
||
(T <PLENTY-WATER>)>)
|
||
(,SUB-IN-OPEN-SEA
|
||
<COND (<NOT <L? ,DISTANCE-FROM-BAY
|
||
,AQUADOME-VISIBLE>>
|
||
<TELL
|
||
"You can see the " D ,AQUADOME "." CR>)
|
||
(<NOT <FSET? ,WHALE ,INVISIBLE>>
|
||
<TELL
|
||
"The whale is still following you." CR>)
|
||
(<FSET? ,SEARCH-BEAM ,ONBIT>
|
||
<TELL
|
||
"Your sub's " D ,SEARCH-BEAM " lights up the " D ,GLOBAL-WATER " outside."CR>)
|
||
(T <PLENTY-WATER>)>)
|
||
(<AND <EQUAL? ,NOW-TERRAIN ,SEA-TERRAIN>
|
||
<EQUAL? ,SUB-DEPTH ,AIRLOCK-DEPTH>
|
||
<G? 4 <+ <* ,SUB-LON ,SUB-LON>
|
||
<* ,SUB-LAT ,SUB-LAT>>>>
|
||
<TELL "You can see the " D ,AQUADOME "." CR>)
|
||
(,SUB-IN-DOME
|
||
<ROOM-PEEK ,AIRLOCK>
|
||
<RTRUE>)
|
||
(<NOT <FSET? ,SNARK ,INVISIBLE>>
|
||
<COND (,SUB-IN-BATTLE
|
||
<TOO-CLOUDY>)
|
||
(T <TELL
|
||
"You can see the " D ,SNARK " and the " D ,THORPE-SUB " in the "
|
||
D ,SEARCH-BEAM " beam." CR>)>)
|
||
(T <PLENTY-WATER>)>)>
|
||
<RTRUE>)
|
||
(<VERB? MUNG>
|
||
<TELL
|
||
"Vandalism is for vandals, not famous inventors!" CR>)
|
||
(<VERB? OPEN CLOSE LOCK UNLOCK>
|
||
;<COND (<FSET? ,PRSO ,MUNGBIT>
|
||
<TELL "It's really broken. ">)>
|
||
<TELL "You can't." CR>)
|
||
(<VERB? STOP> ;"STOP DIVING!"
|
||
<PERFORM ,V?LEVEL>
|
||
<RTRUE>)>>
|
||
|
||
<ROUTINE TOO-CLOUDY ()
|
||
<TELL "The " D ,GLOBAL-WATER " is too cloudy to see much." CR>>
|
||
|
||
<ROUTINE PLENTY-WATER ()
|
||
<TELL "You can see plenty of " D ,GLOBAL-WATER "." CR>>
|
||
|
||
;<ROUTINE WINDOW-KNOCK (RM)
|
||
<COND (<INHABITED? .RM>
|
||
<TELL "Someone looks up at you inquisitively." CR>)>>
|
||
|
||
<OBJECT ENGINE-ACCESS-HATCH
|
||
(IN LOCAL-GLOBALS)
|
||
(DESC "access panel")
|
||
(ADJECTIVE ENGINE ACCESS STENCIL)
|
||
(SYNONYM PANEL ;DOOR ;HATCH SIGN)
|
||
(FLAGS DOORBIT VOWELBIT)
|
||
(ACTION ENGINE-ACCESS-HATCH-F)>
|
||
|
||
<ROUTINE ENGINE-ACCESS-HATCH-F ()
|
||
<COND ;(<AND <VERB? LOOK-INSIDE> <IN? ,WINNER ,SUB>> ;"let verb handle it"
|
||
<TELL <GETP ,CRAWL-SPACE ,P?LDESC> CR>)
|
||
(<VERB? TAKE>
|
||
<COND (<NOT ,PRSI>
|
||
<PERFORM ,V?OPEN ,PRSO>
|
||
<RTRUE>)>)
|
||
(<VERB? TAKE-WITH>
|
||
<COND (<EQUAL? ,PRSI ,UNIVERSAL-TOOL>
|
||
<PERFORM ,V?OPEN-WITH ,PRSO ,PRSI>
|
||
<RTRUE>)>)
|
||
(<AND <VERB? OPEN OPEN-WITH>
|
||
<DOBJ? ENGINE-ACCESS-HATCH>
|
||
<IN? ,WINNER ,SUB>
|
||
<NOT <IN? ,UNIVERSAL-TOOL ,WINNER>>>
|
||
<TELL "Suggest you read the stenciled sign." CR>)
|
||
(<AND <VERB? READ EXAMINE ANALYZE> <IN? ,WINNER ,SUB>>
|
||
<TELL "\"THIS REQUIRES SPECIAL ULTRA WRENCH FROM SUB TOOL KIT.\""CR>
|
||
<COND (<IN? ,UNIVERSAL-TOOL ,TIP>
|
||
<THIS-IS-IT ,UNIVERSAL-TOOL>
|
||
<TELL-HINT 61 ;7 ,TIP <>>)>
|
||
<RTRUE>)>>
|
||
|
||
<ROOM CRAWL-SPACE
|
||
(IN ROOMS)
|
||
(DESC "crawl space")
|
||
(LDESC
|
||
"The space is dimly illuminated by small work lights, but you can see
|
||
machinery everywhere.")
|
||
(ADJECTIVE ENGINE ;COMPARE CRAWL ACCESS)
|
||
(SYNONYM COMPARE ;CRAWL SPACE ROOM AREA)
|
||
(FLAGS RLANDBIT ONBIT)
|
||
(NORTH "The only way out is \"OUT\".") ;"? SOUTH?"
|
||
(NE "The only way out is \"OUT\".")
|
||
(EAST "The only way out is \"OUT\".")
|
||
(SE "The only way out is \"OUT\".")
|
||
(SOUTH "The only way out is \"OUT\".")
|
||
(SW "The only way out is \"OUT\".")
|
||
(WEST "The only way out is \"OUT\".")
|
||
(NW "The only way out is \"OUT\".")
|
||
(OUT TO SUB IF ENGINE-ACCESS-HATCH IS OPEN)
|
||
(UP TO SUB IF ENGINE-ACCESS-HATCH IS OPEN)
|
||
(ACTION CRAWL-SPACE-F)
|
||
(GLOBAL LOCAL-SUB ENGINE-ACCESS-HATCH ;CRAWL-SPACE-OBJ
|
||
LIGHTS TEST-BUTTON)
|
||
(PSEUDO "MACHIN" RANDOM-PSEUDO)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")>
|
||
|
||
<OBJECT LIGHTS
|
||
(IN LOCAL-GLOBALS)
|
||
(DESC "lights")
|
||
(SYNONYM LIGHT LIGHTS)>
|
||
|
||
<ROUTINE CRAWL-SPACE-F ("OPTIONAL" (RARG <>))
|
||
<COND (<==? .RARG ,M-BEG>
|
||
<COND (<EXIT-VERB?> <MOVE ,ENGINE ,SUB> <RFALSE>)>
|
||
<COND (<GAME-VERB?> <RFALSE>)>
|
||
<COND (<==? ,P-ADVERB ,W?CAREFULLY> <RFALSE>)>
|
||
<COND (<AND <PROB 20 ;10>
|
||
<FSET? ,ENGINE ,ONBIT>
|
||
<NOT ,SUB-IN-TANK>
|
||
<NOT ,SUB-IN-DOME>>
|
||
<TELL
|
||
"|
|
||
Suddenly the " D ,SUB " 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.">
|
||
<FINISH>)
|
||
(<AND <PROB 20 ;10>
|
||
<FSET? ,GASH ,INVISIBLE> ;<NOT >>
|
||
<FSET ,ARM ,MUNGBIT>
|
||
<FCLEAR ,GASH ,INVISIBLE>
|
||
<TELL
|
||
"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!" CR>
|
||
<RFALSE>)>)
|
||
(<EQUAL? .RARG ,M-ENTER>
|
||
<COND (<NOT <0? <POPULATION ,CRAWL-SPACE ,PLAYER>>>
|
||
;<FIND-FLAG ,CRAWL-SPACE ,PERSON ,WINNER>
|
||
<TOO-CROWDED>
|
||
<GOTO ,SUB>
|
||
;<RTRUE>)
|
||
(T <MOVE ,ENGINE ,CRAWL-SPACE> <RFALSE>)>)
|
||
;(<EQUAL? .RARG ,M-LOOK>
|
||
<TELL <GETP ,CRAWL-SPACE ,P?LDESC> CR>)
|
||
(.RARG <RFALSE>)
|
||
(<VERB? FIND>
|
||
<COND (<EQUAL? ,HERE ,CRAWL-SPACE> <TELL "You're in it!" CR>)
|
||
(T <TELL
|
||
"It's located beyond an " D ,ENGINE-ACCESS-HATCH " in the bulkhead just
|
||
below and to the right of control panel." CR>)>)
|
||
(<VERB? OPEN LOOK-INSIDE>
|
||
<COND (<DOBJ? CRAWL-SPACE>
|
||
<PERFORM ,PRSA ,ENGINE-ACCESS-HATCH ,PRSI>
|
||
<RTRUE>)>)
|
||
(<VERB? ;ENTER THROUGH WALK-TO>
|
||
<COND (<FSET? ,ENGINE-ACCESS-HATCH ,OPENBIT>
|
||
<COND (<GOTO ,CRAWL-SPACE>
|
||
<TELL
|
||
"BE CAREFUL: Too much wriggling may pose SERIOUS DANGERS!">
|
||
<COND (<FSET? ,ENGINE ,ONBIT>
|
||
<TELL
|
||
" And wouldn't it be safer to stop the engine first?">)>
|
||
<CRLF>)>
|
||
<RTRUE>)
|
||
(T
|
||
<TOO-BAD-BUT ,ENGINE-ACCESS-HATCH "closed">
|
||
<THIS-IS-IT ,ENGINE-ACCESS-HATCH>
|
||
<RFATAL>)>)>>
|
||
|
||
<OBJECT VOLTAGE-REGULATOR
|
||
(IN CRAWL-SPACE)
|
||
(DESC "voltage regulator")
|
||
(ADJECTIVE VOLTAGE)
|
||
(SYNONYM REGULATOR)
|
||
(FLAGS NDESCBIT MUNGBIT)
|
||
(ACTION VOLTAGE-REGULATOR-F)
|
||
;(VALUE 4)>
|
||
|
||
<ROUTINE VOLTAGE-REGULATOR-F ()
|
||
<COND (<VERB? WALK-TO>
|
||
<COND (<NOT <EQUAL? ,HERE ,CRAWL-SPACE>>
|
||
<PERFORM ,PRSA ,CRAWL-SPACE>
|
||
<RTRUE>)>)
|
||
(<VERB? FIND>
|
||
<COND (<EQUAL? ,HERE ,CRAWL-SPACE>
|
||
<FCLEAR ,VOLTAGE-REGULATOR ,NDESCBIT>
|
||
<TELL
|
||
"You find it in the middle of some complicated machinery." CR>)>)
|
||
(<VERB? ANALYZE EXAMINE>
|
||
<COND (<FSET? ,VOLTAGE-REGULATOR ,MUNGBIT>
|
||
<TELL "It's hard to tell anything by looking at it." CR>)>)
|
||
(<VERB? ADJUST FIX>
|
||
<COND (<FSET? ,ARM ,MUNGBIT>
|
||
<TELL "You can't do that since you gashed your arm!" CR>)
|
||
(<NOT <FSET? ,VOLTAGE-REGULATOR ,MUNGBIT>>
|
||
<ALREADY ,VOLTAGE-REGULATOR "fixed">)
|
||
(T
|
||
<SETG TEST-BUTTON-READOUT ,TEST-BUTTON-NORMAL>
|
||
<TELL "Fixed." CR>
|
||
<COOL-BACK>
|
||
<FCLEAR ,VOLTAGE-REGULATOR ,MUNGBIT>
|
||
;<FSET ,ENGINE-ACCESS-HATCH ,NDESCBIT>
|
||
;<SCORE-OBJ ,VOLTAGE-REGULATOR>
|
||
<RTRUE>)>)>>
|
||
|
||
<ROUTINE COOL-BACK ("AUX" X)
|
||
<COND (<AND <L? 20 ,CIRCUIT-TEMP>
|
||
<FSET? ,VOLTAGE-REGULATOR ,MUNGBIT>>
|
||
<SET X <- ,CIRCUIT-TEMP 15>>
|
||
<TELL "It will take about " N .X " turn">
|
||
<COND (<NOT <1? .X>> <TELL "s">)>
|
||
<TELL
|
||
" for the " D ,CONTROL-CIRCUITS " to cool to a normal operating temperature."
|
||
CR>)>>
|
||
|
||
"<CONSTANT LAB-LON 1>
|
||
<CONSTANT LAB-LAT 9>"
|
||
<CONSTANT SEA-WALL-LON 32>
|
||
<CONSTANT SEA-WALL-LAT 38>
|
||
<CONSTANT SPIRE-LON 29>
|
||
<CONSTANT SPIRE-LAT 26>
|
||
<GLOBAL SUB-LON 2>
|
||
<GLOBAL SUB-LAT 9>
|
||
<GLOBAL SUB-DLON 0>
|
||
<GLOBAL SUB-DLAT 0>
|
||
|
||
<GLOBAL TBL5-MASK <PTABLE *77777* *7777* *777* *77* *7*>>
|
||
<GLOBAL TBL5-SHIFT <PTABLE *10000* *1000* *100* *10* 1>>
|
||
|
||
<ROUTINE GET5 (TBL5 NUM "AUX" (NUM1 <- .NUM 1>))
|
||
</ <ANDB <GET ,TBL5-MASK <MOD .NUM1 5>>
|
||
<GET .TBL5 <+ 1 </ .NUM1 5>>>>
|
||
<GET ,TBL5-SHIFT <MOD .NUM1 5>>>>
|
||
|
||
<DEFINE LT5 ("ARGS" A)
|
||
<MAPF ,PLTABLE
|
||
<FUNCTION ("AUX" VAL)
|
||
<COND (<EMPTY? .A> <MAPSTOP>)>
|
||
<SET VAL <LSH <1 .A> 12>>
|
||
<COND (<EMPTY? <SET A <REST .A>>>
|
||
<MAPSTOP <CHTYPE .VAL FIX>>)>
|
||
<SET VAL <ORB .VAL <LSH <1 .A> 9>>>
|
||
<COND (<EMPTY? <SET A <REST .A>>>
|
||
<MAPSTOP <CHTYPE .VAL FIX>>)>
|
||
<SET VAL <ORB .VAL <LSH <1 .A> 6>>>
|
||
<COND (<EMPTY? <SET A <REST .A>>>
|
||
<MAPSTOP <CHTYPE .VAL FIX>>)>
|
||
<SET VAL <ORB .VAL <LSH <1 .A> 3>>>
|
||
<COND (<EMPTY? <SET A <REST .A>>>
|
||
<MAPSTOP <CHTYPE .VAL FIX>>)>
|
||
<SET VAL <ORB .VAL <1 .A>>>
|
||
<SET A <REST .A>>
|
||
<CHTYPE .VAL FIX>>>>
|
||
|
||
<GLOBAL BAY-TERRAIN <PLTABLE
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 1 1 1 1 2 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 1 1 1 1 2 2 2 2 2 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0>
|
||
%<LT5
|
||
0 0 0 0 0 1 1 1 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0>
|
||
%<LT5
|
||
0 0 0 0 1 1 1 2 2 2 3 3 3 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0>
|
||
%<LT5
|
||
0 0 0 1 1 1 2 2 3 3 3 4 3 3 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0>
|
||
%<LT5
|
||
0 0 1 1 1 2 2 3 3 4 4 4 4 3 3 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0>
|
||
%<LT5
|
||
0 2 2 2 2 2 3 3 4 4 4 4 4 3 3 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0>
|
||
%<LT5
|
||
0 1 2 2 2 2 3 4 4 4 4 4 4 4 3 3 3 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0>
|
||
%<LT5
|
||
0 1 2 2 2 3 3 4 4 4 4 4 4 4 4 3 3 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0>
|
||
%<LT5
|
||
0 1 1 2 2 3 1 1 1 1 4 4 4 4 4 4 3 3 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0>
|
||
%<LT5
|
||
0 1 1 2 2 1 1 1 1 1 1 1 1 4 4 4 4 3 3 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0>
|
||
%<LT5
|
||
0 1 1 2 2 3 1 1 1 1 1 1 1 1 4 4 4 4 3 3 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0>
|
||
%<LT5
|
||
0 1 2 2 2 3 4 4 4 4 1 1 1 1 1 4 4 4 4 3 3 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0>
|
||
%<LT5
|
||
0 1 2 2 3 4 4 4 4 4 4 1 1 1 1 1 4 4 4 4 3 3 2 2 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0>
|
||
%<LT5
|
||
0 2 2 2 3 4 4 4 4 4 4 4 4 4 1 1 1 4 4 4 4 4 3 2 2 2 1 1 1 1 1 1 1 1 1 1 1 0 0>
|
||
%<LT5
|
||
0 2 2 3 4 4 4 4 4 4 4 4 4 4 4 1 1 1 4 4 4 4 3 3 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0>
|
||
%<LT5
|
||
0 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 2 2 1 1 1 1 1 1 1 1 1 0 0>
|
||
%<LT5
|
||
0 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 3 3 2 2 1 1 1 1 1 1 1 1 0 0>
|
||
%<LT5
|
||
0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 3 3 2 2 2 1 1 1 1 1 1 0 0>
|
||
%<LT5
|
||
0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 3 3 3 2 2 2 1 1 1 1 0 0>
|
||
%<LT5
|
||
0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 3 3 3 3 2 2 1 1 1 0 0>
|
||
%<LT5
|
||
0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 3 3 2 2 1 1 0 0>
|
||
%<LT5
|
||
0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 3 3 2 1 1 1 0>
|
||
%<LT5
|
||
0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 0 4 4 4 4 3 2 1 1 1 0>
|
||
%<LT5
|
||
0 0 3 3 3 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 3 2 2 1 1 0>
|
||
%<LT5
|
||
0 0 2 2 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 3 2 2 1 0 0>
|
||
%<LT5
|
||
0 0 1 2 2 3 3 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 3 2 1 0 0>
|
||
%<LT5
|
||
0 0 0 1 2 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 3 2 2 1 0>
|
||
%<LT5
|
||
0 0 0 1 2 2 3 3 4 4 4 4 4 1 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 3 0 0>
|
||
%<LT5
|
||
0 0 0 1 1 2 2 3 3 4 4 4 4 1 1 1 1 4 4 4 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 0 0 6>
|
||
%<LT5
|
||
0 0 0 0 1 2 2 3 3 3 4 4 4 4 1 1 1 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 4 4 4 0 0 6 6>
|
||
%<LT5
|
||
0 0 0 0 1 1 2 2 3 3 3 4 4 4 4 1 1 1 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 4 0 0 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 1 1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 0 6 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 0 1 1 2 2 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 6 6 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 1 1 1 2 2 2 2 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6 6 6 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 1 1 1 1 2 2 2 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 6 6 6 6 6 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 2 2 3 3 4 4 4 4 5 6 6 6 6 6 6 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 2 2 3 4 4 0 0 6 6 6 6 6 6 6 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 3 0 0 6 6 6 6 6 6 6 6 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 6 6 6 6 6 6 6 6 6 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 6 6 6 6 6 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6>
|
||
%<LT5
|
||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6>>>
|
||
|
||
"<REMOVE!- LT5>"
|
||
|
||
<GLOBAL NOW-TERRAIN 0>
|
||
<GLOBAL SPEEDBOAT-WARNING-GIVEN? <>>
|
||
<GLOBAL WARNINGS-THIS-TURN <LTABLE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>>
|
||
<GLOBAL WARNINGS-USED 0>
|
||
<GLOBAL WARNINGS-RTRUE <>>
|
||
|
||
<ROUTINE ADD-WARNING (MSG "OPTIONAL" (RTRUE? <>) "AUX" TBL LEN N M)
|
||
<COND (.RTRUE? <SETG WARNINGS-RTRUE T>)>
|
||
<SET TBL ,WARNINGS-THIS-TURN>
|
||
<COND (<==? <GET .TBL 0> ,WARNINGS-USED> <RTRUE>)>
|
||
<SET LEN <GET .TBL 0>>
|
||
<SET N 0>
|
||
<REPEAT ()
|
||
<COND (<IGRTR? N .LEN> <RETURN>)>
|
||
<SET M <GET .TBL .N>>
|
||
<COND (<=? .MSG .M> <RETURN>)
|
||
(<AND <EQUAL? .MSG 5> <EQUAL? .M 3 9>> <RETURN>)
|
||
(<AND <EQUAL? .MSG 6> <EQUAL? .M 4 11>><RETURN>)
|
||
(<AND <EQUAL? .MSG 8> <EQUAL? .M 7>> <RETURN>)
|
||
(<0? <GET .TBL .N>>
|
||
<PUT .TBL .N .MSG>
|
||
<SETG WARNINGS-USED .N>
|
||
<RETURN>)>>>
|
||
|
||
"<GLOBAL TOLD-ABOUT-SHIP <>>"
|
||
|
||
<ROUTINE GIVE-WARNINGS ("AUX" TBL LEN N MSG (SONAR? <>))
|
||
<SET TBL ,WARNINGS-THIS-TURN>
|
||
<SET LEN ,WARNINGS-USED>
|
||
<SET N 0>
|
||
<REPEAT ()
|
||
<COND (<IGRTR? N .LEN> <RETURN>)
|
||
(<0? <SET MSG <GET .TBL .N>>> <RETURN>)>
|
||
<SETG WARNINGS-USED 0>
|
||
<PUT .TBL .N 0>
|
||
<COND (,SUB-IN-OPEN-SEA <AGAIN>)>
|
||
<COND (<EQUAL? .MSG 1>
|
||
<TELL
|
||
"|
|
||
A speedboat came out of nowhere and almost hit you!
|
||
It's dangerous on the surface of the bay.">)
|
||
(<EQUAL? .MSG 2>
|
||
<SET SONAR? T>
|
||
<TELL
|
||
"|
|
||
If you don't change course or stop, you'll crash!">)
|
||
(<EQUAL? .MSG 3 4>
|
||
<THIS-IS-IT ,DEPTHFINDER-LIGHT>
|
||
<TELL
|
||
"Suddenly a loud " D ,ALARM-SUB " begins to ring! The " D ,DEPTHFINDER-LIGHT
|
||
" has begun to glow "
|
||
<COND (<EQUAL? .MSG 3> "orange") (T "red")> ".">)
|
||
(<EQUAL? .MSG 5 6>
|
||
<THIS-IS-IT ,ALARM-SUB>
|
||
<TELL
|
||
"The " D ,DEPTHFINDER-LIGHT " is still glowing "
|
||
<COND (<EQUAL? .MSG 5> "orange") (T "red")>
|
||
", and the " D ,ALARM-SUB " is still ringing.">)
|
||
(<EQUAL? .MSG 7 8>
|
||
<SET SONAR? T>
|
||
<TELL "The " D ,SONARSCOPE>
|
||
<COND (<EQUAL? .MSG 8>
|
||
<THIS-IS-IT ,SONARSCOPE>
|
||
<TELL " still">)>
|
||
<TELL " shows an obstacle ahead!">
|
||
<COND (<EQUAL? .MSG 7>
|
||
<THIS-IS-IT ,SUB>
|
||
<TELL
|
||
" Unless you change course, you will crash the " D ,SUB "!">)>)
|
||
(<EQUAL? .MSG 9 10 11>
|
||
<THIS-IS-IT ,ALARM-SUB>
|
||
<TELL "The " D ,DEPTHFINDER-LIGHT " "
|
||
<COND (<EQUAL? .MSG 9> "changes to orange")
|
||
(<EQUAL? .MSG 10> "fades to dark again")
|
||
(T "turns red")>
|
||
", and the " D ,ALARM-SUB " "
|
||
<COND (<EQUAL? .MSG 9> "continues to sound.")
|
||
(<EQUAL? .MSG 10> "ceases.")
|
||
(T "rises to a shriller whine.")>>)
|
||
(<EQUAL? .MSG 12 13>
|
||
<SET SONAR? T>
|
||
;<SETG TOLD-ABOUT-SHIP T>
|
||
<THIS-IS-IT ,FREIGHTER>
|
||
<TELL"The "D ,SONARSCOPE-LIGHT" is flashing yellow! A">
|
||
<COND (<EQUAL? .MSG 13> <TELL "nother">)>
|
||
<TELL " ship is approaching!">)
|
||
(<EQUAL? .MSG 14>
|
||
<SET SONAR? T>
|
||
<TELL
|
||
"|
|
||
The yellow " D ,SONARSCOPE-LIGHT " just turned red! A loud " D ,ALARM-SUB " is
|
||
sending chills up and down your spine! The keel of the approaching ship
|
||
is visible in your " D ,SUB-WINDOW>
|
||
<COND (<FSET? ,HYDROPHONE ,ONBIT>
|
||
<TELL
|
||
", and the noise of its screws booms over the " D ,HYDROPHONE>)>
|
||
<TELL "!">)>
|
||
<CRLF>>
|
||
<COND (<AND .SONAR?
|
||
<NOT ,AUTOMATIC-SONAR>
|
||
<0? ,LOOKED-AT-SONAR>>
|
||
<THIS-IS-IT ,SONARSCOPE>
|
||
<TIP-SAYS>
|
||
<TELL
|
||
"Hey, "FN", maybe you should look at the " D ,SONARSCOPE
|
||
".\"" CR>)>
|
||
<COND (,WARNINGS-RTRUE <SETG WARNINGS-RTRUE <>> <RTRUE>)>>
|
||
|
||
<ROUTINE SAVE-HINT ()
|
||
<TELL "(This might be a good time to use the command: SAVE.)" CR>>
|
||
|
||
<GLOBAL REGULATOR-MSG-SEEN <>>
|
||
|
||
<ROUTINE FALL-FROM-CLAW (NUM "AUX" X)
|
||
<COND (<SET X <GET ,ON-SUB .NUM>>
|
||
<TELL
|
||
"You can see" THE .X " fall out of the " D ,CLAW " and sink." CR>
|
||
<REMOVE .X>)>>
|
||
|
||
<ROUTINE I-UPDATE-SUB-POSITION ("AUX" ;DLON ;DLAT LON LAT DEP TH (VAL <>))
|
||
<COND (,SUB-IN-TANK <RFALSE>)>
|
||
<COND (<L? 0 ,CIRCUIT-TEMP>
|
||
<SETG CIRCUIT-TEMP <- ,CIRCUIT-TEMP 1>>)>
|
||
<COND (<FSET? ,VOLTAGE-REGULATOR ,MUNGBIT>
|
||
<SETG CIRCUIT-TEMP <+ ,CIRCUIT-TEMP ,THROTTLE-SETTING>>)>
|
||
<COND (<AND <L? 20 ,CIRCUIT-TEMP> <NOT ,CIRCUIT-TIP>>
|
||
<SETG CIRCUIT-TIP T>
|
||
<MOVE ,OVERHEATING ,GLOBAL-OBJECTS>
|
||
<TELL CR "Suddenly ">
|
||
<TIP-SAYS>
|
||
<TELL
|
||
FN "! Look at the way that
|
||
" D ,CONTROL-CIRCUITS " " D ,CONTROL-CIRCUITS-GAUGE " is rising!\"" CR>
|
||
<SET VAL T>)
|
||
(<AND <NOT <L? 20 ,CIRCUIT-TEMP>> ,CIRCUIT-TIP>
|
||
<SETG CIRCUIT-TIP <>>)
|
||
(<AND <NOT <L? 25 ,CIRCUIT-TEMP>> ,CIRCUIT-RED>
|
||
<SETG CIRCUIT-RED <>>
|
||
<COND (<EQUAL? ,HERE ,SUB>
|
||
<TELL CR
|
||
"The " D ,CONTROL-CIRCUITS-GAUGE " drops below the red danger zone." CR>)>)
|
||
(<AND <L? 25 ,CIRCUIT-TEMP> <NOT ,CIRCUIT-RED>>
|
||
<SETG CIRCUIT-RED T>
|
||
<TELL CR
|
||
"The " D ,CONTROL-CIRCUITS-GAUGE " has entered the red danger zone!|
|
||
The circuit tester is activated. Push " D ,TEST-BUTTON " for readout." CR>
|
||
<SETG TEST-BUTTON-READOUT ,REGULATOR-MSG>
|
||
<SET VAL T>)
|
||
(<L? 30 ,CIRCUIT-TEMP>
|
||
<TELL CR
|
||
"The " D ,CONTROL-CIRCUITS-GAUGE " has gone off the scale!|
|
||
The engine grinds to a halt. Your mission is finished.">
|
||
<FINISH>)>
|
||
<COND (,SUB-IN-DOME <RETURN .VAL>)
|
||
(<FSET? ,AUTO-PILOT ,ONBIT>
|
||
<SET TH ,THROTTLE-SETTING>
|
||
<REPEAT ()
|
||
<COND (<DLESS? TH 0> <RETURN>)>
|
||
<SETG DISTANCE-FROM-BAY <+ ,DISTANCE-FROM-BAY 1>>
|
||
<SET DEP </ ,DISTANCE-FROM-BAY 2>>
|
||
<COND (T ;<L? ,SUB-DEPTH .DEP>
|
||
<SETG TARGET-DEPTH .DEP>
|
||
<SETG SUB-DEPTH .DEP>)>
|
||
<COND (<==? ,DISTANCE-FROM-BAY 20>
|
||
<FALL-FROM-CLAW 0>
|
||
<FALL-FROM-CLAW 1>)
|
||
(<==? ,DISTANCE-FROM-BAY 30>
|
||
<TELL CR
|
||
"The ocean has been getting darker as you dive toward the
|
||
" D ,AQUADOME ", turning from blue-green to dark green to a dull
|
||
gray-green. It's becoming duskier and murkier with every minute." CR>)
|
||
(<==? ,DISTANCE-FROM-BAY 39>
|
||
<COND (<NOT <FSET? ,SEARCH-BEAM ,ONBIT>>
|
||
<FSET ,SEARCH-BEAM ,ONBIT>
|
||
<TELL CR
|
||
"A yellow cone of light now illumines the water ahead. The " D ,SUB "'s "
|
||
D ,SEARCH-BEAM " was " D ,AUTOMATIC"ally switched on by an electronic eye, now
|
||
that you're too deep for the sun to light the water." CR>)>
|
||
<TELL CR
|
||
"Colorful sea life swims through the " D ,SEARCH-BEAM " 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." CR>)
|
||
(<==? ,DISTANCE-FROM-BAY 45>
|
||
<MOVE ,WHALE ,SUB>
|
||
<COND (<FSET? ,HYDROPHONE ,ONBIT>
|
||
<SETG WHALE-HEARD T>
|
||
<TELL "|
|
||
A crooning noise comes over the " D ,HYDROPHONE " loudspeaker, punctuated by
|
||
sighs and moans and a few weird whistles." CR>)>
|
||
<COND (<AND <==? ,HERE ,SUB> <IN? ,TIP ,HERE>>
|
||
<TELL "|
|
||
\"There's a blip on the " D ,SONARSCOPE " at three o'clock!\" yells
|
||
Tip. \"Aim the " D ,SEARCH-BEAM " to starboard, " FN "!\"" CR>
|
||
<RTRUE>)>)
|
||
(<AND <==? ,DISTANCE-FROM-BAY 50>
|
||
<FSET? ,VOLTAGE-REGULATOR ,MUNGBIT>>
|
||
<COND (<NOT ,CIRCUIT-TIP> ;"to ensure overheating"
|
||
<SETG CIRCUIT-TEMP 28>)>)
|
||
(<==? ,DISTANCE-FROM-BAY ,AQUADOME-VISIBLE>
|
||
<REMOVE ,WHALE>
|
||
<FSET ,WHALE ,INVISIBLE>
|
||
<SETG BLY-CALLING T>
|
||
<THIS-IS-IT ,SONARPHONE>
|
||
<FCLEAR ,SEARCH-BEAM ,ONBIT>
|
||
<TELL "The amazing " D ,AQUADOME " looms ahead">
|
||
<COND (<FSET? ,SEARCH-BEAM ,ONBIT>
|
||
<FCLEAR ,SEARCH-BEAM ,ONBIT>
|
||
<TELL
|
||
". Your " D ,SEARCH-BEAM " switches off since the " D ,AQUADOME "'s own">)
|
||
(T <TELL ". Its">)>
|
||
<TELL
|
||
" bright lights suffuse the " D ,GLOBAL-WATER
|
||
" around it with a glowing radiance.|
|
||
The " D ,SONARPHONE " is ringing." CR>
|
||
<RTRUE>)
|
||
(<NOT <L? ,DISTANCE-FROM-BAY ,AQUADOME-DISTANCE>>
|
||
<SETG SUB-IN-OPEN-SEA <>>
|
||
<FCLEAR ,AUTO-PILOT ,ONBIT>
|
||
<MOVE ,HORVAK-KEY ,HORVAK> ;"from GLOBAL-OBJECTS"
|
||
<SETG NOW-TERRAIN ,SEA-TERRAIN>
|
||
<SETG SUB-LON 0 ;6>
|
||
<SETG SUB-LAT -1 ;5>
|
||
<SETG SUB-DEPTH ,AIRLOCK-DEPTH>
|
||
<SETG TARGET-DEPTH ,AIRLOCK-DEPTH>
|
||
<SETG DIVING? 0>
|
||
<SETG THROTTLE-SETTING 0>
|
||
;<COND (,DEBUG
|
||
<TELL "[Throttle=" N ,THROTTLE-SETTING "]" CR>)>
|
||
<SETG JOYSTICK-DIR ,P?NORTH>
|
||
;<SETG SUB-IN-REVERSE? T>
|
||
<SETG SUB-DLON 0>
|
||
<SETG SUB-DLAT 1>
|
||
<SETG DEPTH-WARNING <>>
|
||
<FCLEAR ,DEPTHFINDER ,ONBIT>
|
||
<FSET ,AIRLOCK-HATCH ,OPENBIT>
|
||
<TELL CR
|
||
"The " D ,SUB " slows to a gentle stop, with engine idling and the "
|
||
D ,JOYSTICK " pointing north. The " D ,AUTO-PILOT " has brought you to the "
|
||
D ,AIRLOCK " on the south side of the " D ,AQUADOME ".
|
||
It also turned off the " D ,DEPTHFINDER " for you.|
|
||
At " D ,BLY "'s order, the " D ,AIRLOCK-HATCH " slides open, but you could
|
||
have done it by remote control, just as you ">
|
||
<COND (,OPENED-GATE-FROM-SUB <TELL "did ">)
|
||
(T <TELL "could have ">)>
|
||
<TELL
|
||
"the " D ,TANK-GATE ".|
|
||
The " D ,AIRLOCK " is filling up with tons of " D ,GLOBAL-WATER ".|
|
||
The " D ,AIRLOCK " lies north. You can enter it by opening the " D ,THROTTLE".
|
||
The bottom of the " D ,AIRLOCK " has an adjustable plastic cradle,
|
||
which adjusts to the keel of any submarine." CR>
|
||
<RFATAL>)>>
|
||
<RETURN .VAL>)>
|
||
<SET LON ,SUB-LON>
|
||
<SET LAT ,SUB-LAT>
|
||
<SET DEP ,SUB-DEPTH>
|
||
<SET TH ,THROTTLE-SETTING>
|
||
<REPEAT ()
|
||
<SET DEP <CHANGE-DEPTH .DEP>>
|
||
<COND (<NOT <0? .TH>>
|
||
<SET LON <+ .LON ,SUB-DLON>>
|
||
<SET LAT <+ .LAT ,SUB-DLAT>>)>
|
||
;<COND (,DEBUG
|
||
<TELL "[Lon=" N .LON ", Lat=" N .LAT
|
||
", Dep=" N .DEP "]" CR>)>
|
||
<COND (<COLLISION? .DEP .LON .LAT>
|
||
<RETURN>)
|
||
(<EQUAL? ,NOW-TERRAIN ,SEA-TERRAIN> T)
|
||
(<AND <0? .DEP>
|
||
<PROB 20>
|
||
<==? ,NOW-TERRAIN ,BAY-TERRAIN>>
|
||
<COND (<AND ,SPEEDBOAT-WARNING-GIVEN?
|
||
<NOT <==? ,MOVES ,SPEEDBOAT-WARNING-GIVEN?>>>
|
||
<GIVE-WARNINGS>
|
||
<TELL CR
|
||
"A speedboat came out of nowhere, hit your rudder, and ended your mission.
|
||
Too bad you were ">
|
||
<COND (<NOT ,EVER-SUBMERGED?> <TELL "still ">)>
|
||
<TELL "on the surface.">
|
||
<FINISH>)
|
||
(T
|
||
<SETG SPEEDBOAT-WARNING-GIVEN? ,MOVES>
|
||
<ADD-WARNING 1 T>)>)
|
||
(<TIME-FOR-FREIGHTER? .DEP .LON .LAT>
|
||
<COND (<==? ,JOYSTICK-DIR ,P?NORTH>
|
||
<SETG FREIGHTER-LON .LON>
|
||
<SETG FREIGHTER-DLON 0>
|
||
<SETG FREIGHTER-LAT <+ .LAT ,SONAR-RANGE>>
|
||
<SETG FREIGHTER-DLAT -1>)
|
||
(<==? ,JOYSTICK-DIR ,P?EAST>
|
||
<SETG FREIGHTER-LON <+ .LON ,SONAR-RANGE>>
|
||
<SETG FREIGHTER-DLON -1>
|
||
<SETG FREIGHTER-LAT .LAT>
|
||
<SETG FREIGHTER-DLAT 0>)
|
||
(T
|
||
<SETG FREIGHTER-LON <+ .LON ,SONAR-RANGE>>
|
||
<SETG FREIGHTER-DLON -1>
|
||
<SETG FREIGHTER-LAT <+ .LAT ,SONAR-RANGE>>
|
||
<SETG FREIGHTER-DLAT -1>)>
|
||
<COND (<L? 1 <GET5 <GET ,NOW-TERRAIN ,FREIGHTER-LAT>
|
||
,FREIGHTER-LON>>
|
||
<FREIGHTER-WARNING>)>)
|
||
(<AND <EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<OR <AND <EQUAL? .LON 7> <EQUAL? .LAT 15>>
|
||
<AND <EQUAL? .LON 13> <EQUAL? .LAT 17>>
|
||
<AND <EQUAL? .LON 16> <EQUAL? .LAT 31>>>>
|
||
<TELL
|
||
"A submerged wreck on the floor of the bay to starboard will be cleared
|
||
safely." CR>)>
|
||
<CHECK-FOR-OBSTACLE .DEP .LON .LAT>
|
||
<COND (<DLESS? TH 1> <RETURN>)>>
|
||
<SETG SUB-LON .LON>
|
||
<SETG SUB-LAT .LAT>
|
||
<SETG SUB-DEPTH .DEP>
|
||
<OR <GIVE-WARNINGS> .VAL>>
|
||
|
||
<ROUTINE TIME-FOR-FREIGHTER? (DEP LON LAT)
|
||
<COND (<NOT <==? ,NOW-TERRAIN ,BAY-TERRAIN>>
|
||
<RFALSE>)
|
||
(<NOT <FSET? ,FREIGHTER ,INVISIBLE>>
|
||
<RFALSE>)
|
||
(<NOT <L? .DEP 3>>
|
||
<RFALSE>)
|
||
(<NOT <==? 5 <GET5 <GET ,NOW-TERRAIN .LAT> .LON>>>
|
||
<RFALSE>)
|
||
(<OBSTACLE-AHEAD? ,SUB-DEPTH ,SUB-LON ,SUB-LAT>
|
||
<RFALSE>) ;"Avoid ships appearing on far side of shoal."
|
||
(<EQUAL? ,JOYSTICK-DIR ,P?NE ,P?EAST>
|
||
<RTRUE>)
|
||
(<NOT <EQUAL? ,JOYSTICK-DIR ,P?NORTH>>
|
||
<RFALSE>)
|
||
(<NOT <==? ,SUB-LON ,SPIRE-LON>>
|
||
<RTRUE>)>>
|
||
|
||
<GLOBAL OLD-OBSTACLE? <>>
|
||
|
||
<ROUTINE CHECK-FOR-OBSTACLE (DEP LON LAT "AUX" X)
|
||
<COND (<SET X <OBSTACLE-AHEAD? .DEP .LON .LAT>>
|
||
<COND (,OLD-OBSTACLE?
|
||
<COND (<NOT <G? .X ,THROTTLE-SETTING>>
|
||
<SETG SONAR-WARNING ,SONAR-RED>
|
||
<ADD-WARNING 2 T>)
|
||
(<NOT <VERB? WAIT-FOR WAIT-UNTIL>>
|
||
<ADD-WARNING 8>)>)
|
||
(T
|
||
<SETG OLD-OBSTACLE? T>
|
||
<COND (<NOT <G? .X ,THROTTLE-SETTING>>
|
||
<SETG SONAR-WARNING ,SONAR-RED>)
|
||
(T <SETG SONAR-WARNING ,SONAR-YELLOW>)>
|
||
<ADD-WARNING 7 T>)>)
|
||
(T
|
||
<SETG OLD-OBSTACLE? <>>
|
||
<COND (,SONAR-WARNING
|
||
<SETG SONAR-WARNING <>>
|
||
<COND (<NOT ,SHIP-WARNING>
|
||
<TELL
|
||
"The " D ,SONARSCOPE-LIGHT " goes out." CR>)>)>)>>
|
||
|
||
<ROUTINE OBSTACLE-AHEAD? (DEP LON LAT "AUX" XLON XLAT RANGE X)
|
||
<COND (<NOT <EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN ,SEA-TERRAIN>>
|
||
<RFALSE>)>
|
||
<SET XLON <+ .LON ,SUB-DLON>>
|
||
<SET XLAT <+ .LAT ,SUB-DLAT>>
|
||
<SET RANGE 1>
|
||
<REPEAT ()
|
||
<COND (<AND <EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<SET X <TOO-DEEP? .DEP .XLON .XLAT>>
|
||
<NOT <EQUAL? .X ,OPEN-SEA-CODE>>>
|
||
<RETURN>)>
|
||
<COND (<AND <EQUAL? ,NOW-TERRAIN ,SEA-TERRAIN>
|
||
<DOME-ON-SONAR? .DEP .XLON .XLAT>>
|
||
<COND (<NOT <HEADING-INTO-DOME?
|
||
,SUB-DEPTH ,SUB-LON ,SUB-LAT>>
|
||
<RETURN>)>)>
|
||
<COND (<IGRTR? RANGE ,SONAR-RANGE>
|
||
<RFALSE>)>
|
||
<SET XLON <+ .XLON ,SUB-DLON>>
|
||
<SET XLAT <+ .XLAT ,SUB-DLAT>>>
|
||
.RANGE>
|
||
|
||
<ROUTINE HEADING-INTO-DOME? (DEP LON LAT)
|
||
<AND <==? .DEP ,AIRLOCK-DEPTH>
|
||
<0? .LON>
|
||
<L? .LAT 1>
|
||
<0? ,SUB-DLON>
|
||
<L? 0 ,SUB-DLAT>
|
||
<FSET? ,AIRLOCK-HATCH ,OPENBIT>>>
|
||
|
||
<ROUTINE CHANGE-DEPTH (DEP)
|
||
<COND (<L? .DEP ,TARGET-DEPTH>
|
||
<DIVE-DESC .DEP T>
|
||
<SET DEP <+ .DEP 1>>
|
||
;<COND (,DEBUG <TELL "[New depth=" N .DEP "]" CR>)>)
|
||
(<G? .DEP ,TARGET-DEPTH>
|
||
<DIVE-DESC .DEP <>>
|
||
<SET DEP <- .DEP 1>>
|
||
;<COND (,DEBUG <TELL "[New depth=" N .DEP "]" CR>)>)
|
||
(<NOT <0? ,DIVING?>>
|
||
<SETG DIVING? 0>
|
||
<TELL "The " D ,SUB " quickly levels out at the ">
|
||
<COND (<0? .DEP> <TELL "surface.">)
|
||
(T <TELL "desired depth of " N <* 5 .DEP> " meters.">)>
|
||
<COND (<0? ,THROTTLE-SETTING>
|
||
<TELL " It's now standing still in the water.">)
|
||
(T
|
||
<TELL " It's still moving toward ">
|
||
<DIR-PRINT ,JOYSTICK-DIR>
|
||
<TELL " at a speed of " N ,THROTTLE-SETTING " " D ,GRID-UNIT>
|
||
<COND (<NOT <==? 1 ,THROTTLE-SETTING>> <TELL "s">)>
|
||
<TELL " per turn.">)>
|
||
<CRLF>)>
|
||
.DEP>
|
||
|
||
<ROUTINE DIVE-DESC (DEP DOWN?)
|
||
<COND (<0? .DEP>
|
||
<TELL
|
||
"The " D ,GLOBAL-WATER " darkens to a deeper green as you descend from
|
||
the sunlit surface.">
|
||
<COND (<FSET? ,HYDROPHONE ,ONBIT>
|
||
<TELL
|
||
" Engine and propeller noises come over the " D ,HYDROPHONE "
|
||
loudspeaker.">)>
|
||
<CRLF>)>>
|
||
|
||
<OBJECT SEA-WALL
|
||
(IN SUB)
|
||
(FLAGS NDESCBIT)
|
||
(DESC "sea wall")
|
||
(ADJECTIVE SEA)
|
||
(SYNONYM WALL)
|
||
(VALUE 5)
|
||
(ACTION SEA-WALL-F)>
|
||
|
||
<ROUTINE SEA-WALL-F ()
|
||
<COND (<VERB? EXAMINE>
|
||
<TOO-FAR-AWAY ,SEA-WALL>)>>
|
||
|
||
<OBJECT FREIGHTER
|
||
(IN SUB)
|
||
(FLAGS NDESCBIT INVISIBLE)
|
||
(DESC "ship" ;"freighter")
|
||
(SYNONYM FREIGHTER SHIP KEEL)
|
||
(ACTION FREIGHTER-F)>
|
||
|
||
<ROUTINE FREIGHTER-F ()
|
||
<COND (<VERB? EXAMINE ANALYZE>
|
||
<FREIGHTER-SIZE>)>>
|
||
|
||
<ROUTINE FREIGHTER-SIZE ()
|
||
<TELL
|
||
"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 " D ,GRID-UNIT
|
||
" per turn." CR>>
|
||
|
||
<GLOBAL FREIGHTER-COUNT 0>
|
||
<GLOBAL FREIGHTER-LON 0>
|
||
<GLOBAL FREIGHTER-LAT 0>
|
||
<GLOBAL FREIGHTER-DLON 0>
|
||
<GLOBAL FREIGHTER-DLAT 0>
|
||
|
||
<ROUTINE FREIGHTER-WARNING ()
|
||
<FCLEAR ,FREIGHTER ,INVISIBLE>
|
||
<ENABLE <QUEUE I-UPDATE-FREIGHTER -1>>
|
||
<SETG FREIGHTER-COUNT <+ 1 ,FREIGHTER-COUNT>>
|
||
<SETG SHIP-WARNING ,SONAR-YELLOW>
|
||
<COND (<==? 1 ,FREIGHTER-COUNT>
|
||
<ADD-WARNING 12 T>)
|
||
(T
|
||
<ADD-WARNING 13 T>)>>
|
||
|
||
<ROUTINE I-UPDATE-FREIGHTER ("AUX" DLAT DLON)
|
||
<SETG FREIGHTER-LON <+ ,FREIGHTER-LON ,FREIGHTER-DLON>>
|
||
<SETG FREIGHTER-LAT <+ ,FREIGHTER-LAT ,FREIGHTER-DLAT>>
|
||
<COND (<OR <NOT <==? ,NOW-TERRAIN ,BAY-TERRAIN>>
|
||
<L? ,SONAR-RANGE
|
||
<ABS <SET DLAT <- ,FREIGHTER-LAT ,SUB-LAT>>>>
|
||
<L? ,SONAR-RANGE
|
||
<ABS <SET DLON <- ,FREIGHTER-LON ,SUB-LON>>>>
|
||
<G? 2 <GET5 <GET ,NOW-TERRAIN ,FREIGHTER-LAT>
|
||
,FREIGHTER-LON>>>
|
||
<QUEUE I-UPDATE-FREIGHTER 0>
|
||
<FSET ,FREIGHTER ,INVISIBLE>
|
||
;<COND (,TOLD-ABOUT-SHIP
|
||
<TELL "You're out of danger from the ship." CR>)>
|
||
<RFALSE>)
|
||
(<AND <0? .DLAT> <0? .DLON> <L? ,SUB-DEPTH 3>>
|
||
<FREIGHTER-COLLIDED>
|
||
<FINISH>)
|
||
(<AND <L? ,SUB-DEPTH 3> ;"Give sonar warning?"
|
||
<OR <AND <==? ,JOYSTICK-DIR ,P?NORTH>
|
||
<0? .DLON>
|
||
<G? .DLAT 0>>
|
||
<AND <==? ,JOYSTICK-DIR ,P?EAST>
|
||
<0? .DLAT>
|
||
<G? .DLON 0>>
|
||
<AND <==? ,JOYSTICK-DIR ,P?NE>
|
||
<==? .DLON .DLAT>
|
||
<G? .DLAT 0>>>>
|
||
<COND (<OR <AND <==? ,JOYSTICK-DIR ,P?NORTH>
|
||
<OR <L? .DLAT ,THROTTLE-SETTING>
|
||
<=? .DLAT ,THROTTLE-SETTING>
|
||
<AND <0? ,THROTTLE-SETTING>
|
||
<L? .DLAT 2>>>>
|
||
<AND <==? ,JOYSTICK-DIR ,P?EAST>
|
||
<OR <L? .DLON ,THROTTLE-SETTING>
|
||
<=? .DLON ,THROTTLE-SETTING>
|
||
<AND <0? ,THROTTLE-SETTING>
|
||
<L? .DLON 2>>>>
|
||
<AND <==? ,JOYSTICK-DIR ,P?NE>
|
||
<OR <L? .DLAT ,THROTTLE-SETTING>
|
||
<=? .DLAT ,THROTTLE-SETTING>
|
||
<AND <0? ,THROTTLE-SETTING>
|
||
<L? .DLAT 2>>>>>
|
||
<COND (<EQUAL? ,SHIP-WARNING ,SONAR-RED>
|
||
<TELL-SONAR-WARNING ,SHIP-WARNING>)
|
||
(T
|
||
<SETG SHIP-WARNING ,SONAR-RED>
|
||
<ADD-WARNING 14 T>)>)
|
||
(,SHIP-WARNING
|
||
<TELL-SONAR-WARNING ,SHIP-WARNING>)>)
|
||
(<AND ,SHIP-WARNING
|
||
<NOT ,SONAR-WARNING
|
||
;<OBSTACLE-AHEAD? ,SUB-DEPTH ,SUB-LON ,SUB-LAT>>>
|
||
<TELL
|
||
"The " D ,SONARSCOPE-LIGHT " goes out and your heartbeat
|
||
gradually slows to normal">
|
||
<COND (<==? ,SHIP-WARNING ,SONAR-RED>
|
||
<TELL
|
||
", now that the noise from the " D ,ALARM-SUB " and the ship have gone">)>
|
||
<SETG SHIP-WARNING <>>
|
||
<TELL "." CR>)>>
|
||
|
||
<GLOBAL DEPTH-WARNING <>>
|
||
<CONSTANT DEPTH-ORANGE 5>
|
||
<CONSTANT DEPTH-RED 6>
|
||
|
||
<ROUTINE DOME-ON-SONAR? (DEP LON LAT "AUX" HYPOT X)
|
||
<COND (<L? +1 .LON> <RFALSE>)
|
||
(<L? +1 .LAT> <RFALSE>)
|
||
(<G? -1 .LON> <RFALSE>)
|
||
(<G? -1 .LAT> <RFALSE>)
|
||
(<L? 2 <SET X <- ,SEA-DEPTH .DEP>>> <RFALSE>)
|
||
(,FINE-SONAR
|
||
<SET HYPOT <+ <* .LON .LON> <* .LAT .LAT>>>
|
||
<COND (<G? 3 <+ .X .HYPOT>> <RTRUE>)
|
||
(T <RFALSE>)>)
|
||
(<AND <0? .LON> <0? .LAT>>
|
||
<RTRUE>)
|
||
(T <RFALSE>)>>
|
||
|
||
<ROUTINE FREIGHTER-COLLIDED ()
|
||
<TELL
|
||
"|
|
||
You and Tip are hurled from your seats as the " D ,SUB " 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 " D
|
||
,SUB " 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">
|
||
<RESEARCH-LAB>
|
||
<TELL
|
||
". Your mission to save the " D ,AQUADOME " and
|
||
its crew from attack by the " D ,GLOBAL-SNARK " will have to be
|
||
abandoned.">>
|
||
|
||
<ROUTINE SONAR-TO-MANUAL ()
|
||
<COND (<AND ,AUTOMATIC-SONAR <SPLIT-SCREEN?>>
|
||
<SETG AUTOMATIC-SONAR <>>
|
||
<SETG SCREEN-NOW-SPLIT <>>
|
||
<SPLIT 0>
|
||
<DISABLE <INT I-SHOW-SONAR>>
|
||
<TELL
|
||
"The " D ,SONARSCOPE " " D ,AUTOMATIC "ally sets itself to manual." CR>)>>
|
||
|
||
<ROUTINE COLLISION? (DEP LON LAT ;DLAT "AUX" X)
|
||
;<COND (<NOT <FSET? ,FREIGHTER ,INVISIBLE>>
|
||
<UPDATE-FREIGHTER>)>
|
||
<COND (,SUB-IN-OPEN-SEA <RFALSE>)
|
||
(<NOT <FSET? ,SNARK ,INVISIBLE>>
|
||
<COND (<THORPE-POS? .LON .LAT>
|
||
<TELL
|
||
"|
|
||
CRR-R-RAAASSSHHH-H-H!|
|
||
|
|
||
With a deafening clang, the " D ,THORPE-SUB " and your sub
|
||
collide! The " D ,SUB " 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!|
|
||
">
|
||
<COND (<NOT <FSET? ,THORPE ,MUNGBIT>>
|
||
<TELL
|
||
"Through the " D ,SUB-WINDOW " you see the " D ,THORPE-SUB ", and it
|
||
looks helpless too. Its hull is intact, but . . . UH-OH! Its rocket
|
||
weapon is swinging slowly in your direction!|
|
||
">)>
|
||
<TELL
|
||
"As you and Tip eye each other despairingly, one thing's for sure: THE
|
||
ADVENTURE'S OVER!">)
|
||
(<SNARK-POS? .LON .LAT>
|
||
<TELL
|
||
"There's a sudden jolt! Your " D ,SUB " stops moving for a moment,
|
||
as if you hit some huge mass. Tip looks ">
|
||
<COND (<FSET? ,SONARSCOPE ,ONBIT>
|
||
<TELL "at the " D ,SONARSCOPE>)
|
||
(T <TELL "out the " D ,SUB-WINDOW>)>
|
||
<TELL " and gulps, \"We've rammed the " D ,SNARK>
|
||
<COND (<FSET? ,CLAW ,MUNGBIT> <TELL " again!\"" CR>)
|
||
(T
|
||
<FSET ,CLAW ,MUNGBIT>
|
||
<SETG TEST-BUTTON-READOUT ,CLAW-MUNGED-MSG>
|
||
<TELL
|
||
"! I hope the " D ,CLAW "s aren't damaged!\"" CR>)>
|
||
<RFALSE>)
|
||
(T <RFALSE>)>
|
||
<FINISH>)
|
||
(<AND <NOT <FSET? ,FREIGHTER ,INVISIBLE>>
|
||
<EQUAL? ,FREIGHTER-LAT .LAT>
|
||
<EQUAL? ,FREIGHTER-LON .LON>
|
||
<L? .DEP 3>>
|
||
<FREIGHTER-COLLIDED>
|
||
<FINISH>)>
|
||
;<SETG SUB-DLAT .DLAT>
|
||
<COND (<SET X <TOO-DEEP? .DEP .LON .LAT>>
|
||
<COND (<EQUAL? .X ,HIT-BOTTOM-CODE ,HIT-SHORE-CODE>
|
||
<COND (,SCREEN-NOW-SPLIT
|
||
<SCREEN 1>
|
||
<SHOW-SONARSCOPE>
|
||
<SCREEN 0>)>
|
||
<TELL
|
||
"|
|
||
Suddenly you're thrown out of your seat by a thunderous crash,
|
||
and the " D ,SUB " comes to a shuddering halt!|
|
||
">
|
||
<TIP-SAYS>
|
||
<TELL "Skipper! You've plowed into the ">
|
||
<COND (<AND <==? .LON ,SPIRE-LON> <==? .LAT ,SPIRE-LAT>>
|
||
<TELL "rock spire">)
|
||
(<==? .X ,HIT-SHORE-CODE>
|
||
<TELL "shore">)
|
||
(T
|
||
<TELL "floor of the ">
|
||
<COND (<EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<TELL "bay">)
|
||
(T <TELL "ocean">)>)>
|
||
<TELL
|
||
"! Jumpin' jets, let's hope your new " D ,SUB " isn't wrecked!\"|
|
||
Unfortunately, the " D ,SUB " is now disabled. You must call">
|
||
<RESEARCH-LAB>
|
||
<TELL
|
||
" for help, and the situation forces you to abandon hope of
|
||
saving the " D ,AQUADOME " from attacks by the " D ,SNARK ".">)
|
||
(<==? .X ,OPEN-SEA-CODE>
|
||
<SETG NOW-TERRAIN <>>
|
||
<SETG SUB-IN-OPEN-SEA T>
|
||
<FCLEAR ,CATALYST-CAPSULE ,TAKEBIT>
|
||
<FSET ,CATALYST-CAPSULE ,TRYTAKEBIT>
|
||
<MOVE ,BLACK-BOX ,BLY-DESK>
|
||
<SETG DEPTH-WARNING <>>
|
||
<SETG SONAR-WARNING <>>
|
||
<SETG SHIP-WARNING <>>
|
||
<FSET ,FREIGHTER ,INVISIBLE>
|
||
<THIS-IS-IT ,AUTO-PILOT>
|
||
<TELL
|
||
"You have just passed through the opening in the " D ,SEA-WALL " across the
|
||
mouth of " D ,BAY ", and you're now in the " D ,SEA "." CR>
|
||
<ENABLE <QUEUE I-AUTO-PILOT 1>>
|
||
<SONAR-TO-MANUAL>
|
||
<SCORE-OBJ ,SEA-WALL>
|
||
<SAVE-HINT>
|
||
<RFATAL>)
|
||
(<==? .X ,HIT-DOME-CODE>
|
||
<TELL
|
||
"Oh, oh! The " D ,SUB " has crashed into the " D ,AQUADOME "!|
|
||
\"We've cracked the dome, "FN"!\" gulps Tip as he surveys the damage.|
|
||
You're speechless. The " D ,AQUADOME " is flooding fast, and soon it
|
||
will break apart under zillions of tons of " D ,GLOBAL-WATER "!|
|
||
You try to shut out the scattered screams for help coming over the
|
||
sonarphone.|
|
||
|
|
||
There's nothing left but to report that the " D ,AQUADOME " was accidentally
|
||
destroyed, and your mission has failed.">)
|
||
(<==? .X ,IN-DOME-CODE>
|
||
<SETG NOW-TERRAIN <>>
|
||
<SETG SUB-IN-DOME T>
|
||
<SETG BLY-CALLING <>>
|
||
<PHONE-OFF>
|
||
<SONAR-TO-MANUAL>
|
||
;<QUEUE I-UPDATE-SUB-POSITION 0>
|
||
<SETG THROTTLE-SETTING 0>
|
||
<SETG SHIP-WARNING <>>
|
||
<SETG SONAR-WARNING <>>
|
||
<SETG DEPTH-WARNING <>>
|
||
;<COND (,DEBUG
|
||
<TELL "[Throttle=" N ,THROTTLE-SETTING "]" CR>)>
|
||
;<SETG JOYSTICK-DIR ,P?SOUTH>
|
||
;<SETG SUB-IN-REVERSE? <>>
|
||
<TELL "|
|
||
The " D ,SUB " is now resting in the cradle in the rectangular " D ,AIRLOCK ".
|
||
The " D ,AIRLOCK-HATCH " closes, and so does the " D ,THROTTLE ".|
|
||
Through the " D ,SUB-WINDOW " you can see the water level going down
|
||
inside the " D ,AIRLOCK ". The docking crew is pumping out
|
||
the " D ,GLOBAL-WATER ". This will take 1 turn." CR>
|
||
<FCLEAR ,AIRLOCK-HATCH ,OPENBIT>
|
||
<QUEUE I-THORPE-APPEARS 0>
|
||
<ENABLE <QUEUE I-AIRLOCK-EMPTY 1>>
|
||
<SCORE-OBJ ,AQUADOME>
|
||
<RTRUE>)>
|
||
<FINISH>)
|
||
(<NOT <FSET? ,DEPTHFINDER ,ONBIT>>
|
||
<RFALSE>)
|
||
(<CHECK-DEPTH .DEP .LON .LAT> <RFALSE>)
|
||
(,DEPTH-WARNING
|
||
<SETG DEPTH-WARNING <>>
|
||
<ADD-WARNING 10>
|
||
<RFALSE>)>>
|
||
|
||
<CONSTANT HIT-DOME-CODE 5>
|
||
<CONSTANT OPEN-SEA-CODE 4>
|
||
<CONSTANT IN-DOME-CODE 3>
|
||
<CONSTANT HIT-SHORE-CODE 2>
|
||
<CONSTANT HIT-BOTTOM-CODE 1>
|
||
|
||
<ROUTINE TOO-DEEP? (DEP LON LAT "AUX" X)
|
||
<COND (<EQUAL? ,NOW-TERRAIN ,SEA-TERRAIN>
|
||
<COND (<AND <HEADING-INTO-DOME? .DEP .LON .LAT>
|
||
<OR <AND ,FINE-SONAR <G? .LAT -2>>
|
||
<0? .LAT>>>
|
||
,IN-DOME-CODE)
|
||
(<DOME-ON-SONAR? .DEP .LON .LAT> ,HIT-DOME-CODE)
|
||
(<==? .DEP ,SEA-DEPTH> ,HIT-BOTTOM-CODE)>)
|
||
(T
|
||
<SET X <GET5 <GET ,NOW-TERRAIN .LAT> .LON>>
|
||
<COND (<==? .X 6> ,OPEN-SEA-CODE)
|
||
(<L? .DEP .X> <RFALSE>)
|
||
(<0? .X> ,HIT-SHORE-CODE)
|
||
(T ,HIT-BOTTOM-CODE)>)>>
|
||
|
||
<GLOBAL SUB-IN-TANK T>
|
||
<GLOBAL GATE-CRASHED <>>
|
||
<GLOBAL SUB-IN-OPEN-SEA <>>
|
||
<GLOBAL SUB-IN-DOME <>>
|
||
"<GLOBAL SUB-IN-DOME-FACING-SOUTH 0>"
|
||
|
||
<ROUTINE GATE-CRASH (STR OBJ GATE)
|
||
<COND (<EQUAL? .GATE ,AIRLOCK-HATCH>
|
||
;<THIS-IS-IT ,AIRLOCK-HATCH>
|
||
;<YOU-CANT "leave" ,AIRLOCK-HATCH "closed">
|
||
<TELL
|
||
"You can't leave the " D ,AIRLOCK " with the " D ,AIRLOCK-HATCH" closed!"CR>)
|
||
(T
|
||
<SETG GATE-CRASHED T>
|
||
<FCLEAR ,ENGINE ,ONBIT>
|
||
<SETG TEST-BUTTON-READOUT ,GATE-CRASHED-MSG>
|
||
<TELL
|
||
"As you " .STR THE .OBJ ", you hear a loud boom! The " D ,SUB
|
||
" shivers. You have crashed into the Repelatron
|
||
Safety Bumper on the " D ,TANK-GATE ". The turbine stops " D ,AUTOMATIC "ally.
|
||
Too bad the gate was closed!" CR>)>>
|
||
|
||
<OBJECT CAPSULE-LEVER
|
||
(IN SUB)
|
||
(DESC "reactor lever") ;"capsule-insertion lever"
|
||
(ADJECTIVE CAPSULE INSERT REACTOR)
|
||
(SYNONYM LEVER HANDLE)
|
||
(FLAGS NDESCBIT)
|
||
;(VALUE 5)
|
||
(ACTION CAPSULE-LEVER-F)>
|
||
|
||
<ROUTINE CAPSULE-LEVER-F ()
|
||
<COND (<VERB? ;"OPEN CLOSE" EXAMINE>
|
||
<PERFORM ,PRSA ,REACTOR>
|
||
<RTRUE>)
|
||
(<VERB? MOVE PUSH USE>
|
||
<COND (<FSET? ,REACTOR ,ONBIT>
|
||
<TELL ,I-ASSUME " turn off the " D ,REACTOR ".)" CR>
|
||
<PERFORM ,V?LAMP-OFF ,REACTOR>
|
||
<RTRUE>)
|
||
(T
|
||
<TELL ,I-ASSUME " turn on the " D ,REACTOR ".)" CR>
|
||
<PERFORM ,V?LAMP-ON ,REACTOR>
|
||
<RTRUE>)>)>>
|
||
|
||
<OBJECT DEPTHFINDER
|
||
(IN SUB)
|
||
(DESC "depth finder")
|
||
(ADJECTIVE DEPTH)
|
||
(SYNONYM FINDER METER GAUGE DEPTHFINDER)
|
||
(FLAGS NDESCBIT ONBIT ON?BIT)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")
|
||
(ACTION DEPTHFINDER-F)>
|
||
|
||
<CONSTANT SEA-DEPTH 30>
|
||
<CONSTANT AIRLOCK-DEPTH 29>
|
||
|
||
<ROUTINE DEPTHFINDER-F ("AUX" N)
|
||
<COND (<REMOTE-VERB?> <RFALSE>)
|
||
(<AND ,SUB-IN-TANK <WHY-NEED ,DEPTHFINDER ,TEST-TANK>>
|
||
<RTRUE>)
|
||
(<AND ,SUB-IN-DOME <WHY-NEED ,DEPTHFINDER ,AIRLOCK>>
|
||
<RTRUE>)
|
||
(<VERB? LAMP-OFF>
|
||
<SETG DEPTH-WARNING <>>
|
||
<RFALSE>)
|
||
(<VERB? LAMP-ON>
|
||
<CHECK-DEPTH ,SUB-DEPTH ,SUB-LON ,SUB-LAT>
|
||
<RFALSE>)
|
||
(<VERB? ANALYZE EXAMINE WHAT READ>
|
||
<COND (<NOT <FSET? ,DEPTHFINDER ,ONBIT>>
|
||
<TELL "It's not on!" CR>
|
||
<RTRUE>)>
|
||
<TELL "You're now ">
|
||
<COND (<0? ,SUB-DEPTH> <TELL "on the surface">)
|
||
(T <TELL "at a depth of " N <* 5 ,SUB-DEPTH> " meters">)>
|
||
<COND (<NOT ,NOW-TERRAIN> <TELL "." CR> <RTRUE>)>
|
||
<SET N <- <COND (<EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<GET5 <GET ,NOW-TERRAIN ,SUB-LAT> ,SUB-LON>)
|
||
(T ,SEA-DEPTH)>
|
||
,SUB-DEPTH>>
|
||
<TELL ", " N <* 5 .N> " meters above the ">
|
||
<COND (<==? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<TELL "floor of the bay." CR>)
|
||
(T <TELL "bottom of the sea." CR>)>
|
||
;<COND (,DEPTH-WARNING <TELL ,DEPTH-WARNING CR>)>
|
||
<RTRUE>)>>
|
||
|
||
<ROUTINE CHECK-DEPTH (DEP LON LAT)
|
||
<COND (<AND <NOT <0? .DEP>>
|
||
<TOO-DEEP? <+ 1 .DEP> .LON .LAT>>
|
||
<COND (<==? ,DEPTH-WARNING ,DEPTH-ORANGE>
|
||
<ADD-WARNING 11 T>)
|
||
(<==? ,DEPTH-WARNING ,DEPTH-RED>
|
||
<COND (<VERB? WAIT-FOR WAIT-UNTIL> T)
|
||
(T <ADD-WARNING ,DEPTH-RED>)>)
|
||
(T <ADD-WARNING 4 T>)>
|
||
<SETG DEPTH-WARNING ,DEPTH-RED>
|
||
<RTRUE>)
|
||
(<AND <NOT <0? .DEP>>
|
||
<TOO-DEEP? <+ 2 .DEP> .LON .LAT>>
|
||
<COND (<==? ,DEPTH-WARNING ,DEPTH-ORANGE>
|
||
<COND (<VERB? WAIT-FOR WAIT-UNTIL> T)
|
||
(T <ADD-WARNING ,DEPTH-ORANGE>)>)
|
||
(<==? ,DEPTH-WARNING ,DEPTH-RED>
|
||
<ADD-WARNING 9>)
|
||
(T <ADD-WARNING 3 T>)>
|
||
<SETG DEPTH-WARNING ,DEPTH-ORANGE>
|
||
<RTRUE>)>>
|
||
|
||
<OBJECT DEPTHFINDER-LIGHT
|
||
(IN SUB)
|
||
(DESC "depth finder warning light")
|
||
(ADJECTIVE DEPTHFINDER DEPTH FINDER WARNING ORANGE RED)
|
||
(SYNONYM WARNING LIGHT ;LIGHTS)
|
||
(FLAGS NDESCBIT)
|
||
(GENERIC GENERIC-LIGHT-F)
|
||
(ACTION DEPTHFINDER-LIGHT-F)>
|
||
|
||
<ROUTINE DEPTHFINDER-LIGHT-F ()
|
||
<COND (<VERB? ANALYZE EXAMINE READ REPLY>
|
||
<COND (<NOT ,DEPTH-WARNING>
|
||
<TELL "The " D ,DEPTHFINDER-LIGHT " is off." CR>)>
|
||
<TELL
|
||
"During a dive, the " D ,DEPTHFINDER-LIGHT " turns orange and a "
|
||
D ,ALARM-SUB " sounds if the " D ,SUB " comes within 10 meters of the bottom.|
|
||
The light turns red and the " D ,ALARM-SUB " becomes louder if the
|
||
" D ,SUB " comes within 5 meters of the bottom." CR>)>>
|
||
|
||
<GLOBAL SHIP-WARNING <>>
|
||
<GLOBAL SONAR-WARNING <>>
|
||
<CONSTANT SONAR-YELLOW 1>
|
||
<CONSTANT SONAR-RED 2>
|
||
|
||
<ROUTINE TELL-SONAR-WARNING ("OPTIONAL" (W <>))
|
||
<TELL "The " D ,SONARSCOPE-LIGHT " continues to glow ">
|
||
<COND (<NOT .W> <SET W ,SONAR-WARNING>)>
|
||
<COND (<1? .W> <TELL "yellow." CR>)
|
||
(T <TELL
|
||
"red, and the " D ,ALARM-SUB " also continues to sound." CR>)>>
|
||
|
||
<GLOBAL LOOKED-AT-SONAR 0>
|
||
<GLOBAL AUTOMATIC-SONAR <>>
|
||
<GLOBAL SCREEN-NOW-SPLIT <>>
|
||
<GLOBAL FINE-SONAR <>>
|
||
|
||
<OBJECT AUTOMATIC
|
||
(IN SUB ;GLOBAL-OBJECTS)
|
||
(SYNONYM AUTO AUTOMATIC)
|
||
(DESC "automatic")
|
||
(FLAGS NDESCBIT VOWELBIT)
|
||
(ACTION AUTOMATIC-F)>
|
||
|
||
<ROUTINE AUTOMATIC-F ()
|
||
<COND (<VERB? LAMP-ON LAMP-OFF>
|
||
<PERFORM ,PRSA ,AUTO-PILOT>
|
||
<RTRUE>)>>
|
||
|
||
<OBJECT MANUAL
|
||
(IN SUB ;GLOBAL-OBJECTS)
|
||
(SYNONYM MANUAL)
|
||
(DESC "manual")
|
||
(FLAGS NDESCBIT)
|
||
(ACTION MANUAL-F)>
|
||
|
||
<ROUTINE MANUAL-F ()
|
||
<COND (<VERB? LAMP-ON>
|
||
<PERFORM ,V?LAMP-OFF ,AUTO-PILOT>
|
||
<RTRUE>)
|
||
(<VERB? LAMP-OFF>
|
||
<PERFORM ,V?LAMP-ON ,AUTO-PILOT>
|
||
<RTRUE>)
|
||
(<VERB? ANALYZE EXAMINE READ TAKE OPEN TURN>
|
||
<TELL "It's not that kind of manual." CR>)>>
|
||
|
||
<OBJECT SONARSCOPE
|
||
(IN SUB)
|
||
(DESC "sonarscope")
|
||
(ADJECTIVE SONAR)
|
||
(SYNONYM SONARSCOPE ;SONAR SCOPE SCREEN BLIP ;BLIPS ;MAP)
|
||
(FLAGS NDESCBIT ONBIT ON?BIT READBIT)
|
||
(ACTION SONARSCOPE-F)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")>
|
||
|
||
<CONSTANT SONAR-RANGE 5>
|
||
|
||
<ROUTINE NOT-AVAILABLE ()
|
||
<TELL
|
||
"Sorry, " FN ", but that feature isn't available." CR>>
|
||
|
||
<ROUTINE SONARSCOPE-F ("AUX" DEP N)
|
||
<COND (<REMOTE-VERB?> <RFALSE>)
|
||
(<VERB? LAMP-ON>
|
||
<COND (<SPLIT-SCREEN?>
|
||
<COND (T ;<NOT <FSET? ,SONARSCOPE ,ONBIT>>
|
||
<FSET ,SONARSCOPE ,ONBIT>)>
|
||
;<TELL
|
||
,I-ASSUME " set the " D ,SONARSCOPE " to " D ,AUTOMATIC ".)" CR>
|
||
<PERFORM ,V?SET ,SONARSCOPE ,AUTOMATIC>
|
||
<RTRUE>)>)
|
||
(<NOT <FSET? ,SONARSCOPE ,ONBIT>>
|
||
<THIS-IS-IT ,SONARSCOPE>
|
||
<TELL "It's not turned on!" CR>
|
||
<RTRUE>)
|
||
(<VERB? LAMP-OFF>
|
||
<COND (,AUTOMATIC-SONAR
|
||
;<TELL
|
||
,I-ASSUME " set the " D ,SONARSCOPE " to " D ,MANUAL ".)" CR>
|
||
;"Following expr un-semicoloned by MARC 4/16/84"
|
||
<PERFORM ,V?SET ,SONARSCOPE ,MANUAL>
|
||
;<COND (<FSET? ,SONARSCOPE ,ONBIT>
|
||
<FCLEAR ,SONARSCOPE ,ONBIT>)>
|
||
<SETG AUTOMATIC-SONAR <>>
|
||
;"Rfalse changed to RTRUE by MARC 4/16/84"
|
||
<RTRUE> ;<RFALSE>)>)
|
||
(<AND ,SUB-IN-TANK <WHY-NEED ,SONARSCOPE ,TEST-TANK>>
|
||
<RTRUE>)
|
||
(<AND ,SUB-IN-OPEN-SEA <WHY-NEED ,SONARSCOPE ,SEA>>
|
||
<RTRUE>)
|
||
(<AND ,SUB-IN-DOME <WHY-NEED ,SONARSCOPE ,AIRLOCK>>
|
||
<RTRUE>)
|
||
(<VERB? ANALYZE EXAMINE READ LOOK-INSIDE LOOK-ON>
|
||
;<COND (,DEBUG
|
||
<TELL "[Sub depth=" N ,SUB-DEPTH ", bottom=" N
|
||
<COND (<EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<GET5 <GET ,NOW-TERRAIN ,SUB-LAT> ,SUB-LON>)
|
||
(T ,SEA-DEPTH)>
|
||
", long=" N ,SUB-LON ", lat=" N ,SUB-LAT ".]" CR>)>
|
||
;<COND (<OR ,SUB-IN-TANK ,SUB-IN-OPEN-SEA ,SUB-IN-DOME>
|
||
<TELL <GETP ,SONARSCOPE ,P?TEXT> CR>
|
||
<RTRUE>)>
|
||
<SETG P-WON <>>
|
||
<INC LOOKED-AT-SONAR>
|
||
<COND (<AND <SPLIT-SCREEN?> <0? <MOD ,LOOKED-AT-SONAR 4>>>
|
||
<TIP-SAYS>
|
||
<TELL
|
||
"You wouldn't have to keep looking at the " D ,SONARSCOPE " if
|
||
you set it to " D ,AUTOMATIC ".\"" CR>)>
|
||
<SET DEP ,SUB-DEPTH>
|
||
<COND (,SONAR-WARNING <TELL-SONAR-WARNING>)>
|
||
<COND (,SHIP-WARNING <TELL-SONAR-WARNING ,SHIP-WARNING>)>
|
||
<COND (<AND <L? .DEP 3> <NOT <FSET? ,FREIGHTER ,INVISIBLE>>>
|
||
<FREIGHTER-SIZE>
|
||
<CRLF>)>
|
||
<FIXED-FONT-ON>
|
||
<TELL "(+=you, .=open water, *=obstacle)" CR>
|
||
<SET N <* 2 ,SONAR-RANGE>>
|
||
<REPEAT ()
|
||
<TELL "--">
|
||
<COND (<DLESS? N 0> <CRLF> <RETURN>)>>
|
||
<COND (,SCREEN-NOW-SPLIT
|
||
<FIXED-FONT-OFF>
|
||
<ALREADY ,PLAYER "looking at it">)
|
||
(T <SHOW-SONARSCOPE>)>
|
||
<RTRUE>)
|
||
;(<AND <VERB? PUT> <DOBJ? SONARSCOPE>>
|
||
<PERFORM ,V?SET ,PRSO ,PRSI>
|
||
<RTRUE>)
|
||
(<AND <VERB? SET PUT MOVE-DIR> <DOBJ? SONARSCOPE>>
|
||
<COND (<IOBJ? AUTOMATIC>
|
||
<COND (,AUTOMATIC-SONAR
|
||
<ALREADY ,SONARSCOPE "set to automatic">)
|
||
(<SPLIT-SCREEN?>
|
||
<SETG AUTOMATIC-SONAR T>
|
||
<SETG SCREEN-NOW-SPLIT T>
|
||
<START-SONAR?>
|
||
<OKAY ,SONARSCOPE "set to automatic">)
|
||
(T <NOT-AVAILABLE>)>)
|
||
(<IOBJ? MANUAL>
|
||
<COND (<NOT ,AUTOMATIC-SONAR>
|
||
<ALREADY ,SONARSCOPE "set to manual">)
|
||
(<SPLIT-SCREEN?>
|
||
<SETG AUTOMATIC-SONAR <>>
|
||
<SETG SCREEN-NOW-SPLIT <>>
|
||
<SPLIT 0>
|
||
<DISABLE <INT I-SHOW-SONAR>>
|
||
<OKAY ,SONARSCOPE "set to manual">)
|
||
(T <NOT-AVAILABLE>)>)
|
||
;(T <RFALSE>)>)>>
|
||
|
||
<ROUTINE SHOW-SONARSCOPE
|
||
("AUX" DEP N RANGE LAT MINLAT LON MAXLON X Y LATP2 LATP1 LATM1)
|
||
<SET DEP ,SUB-DEPTH>
|
||
<FIXED-FONT-ON>
|
||
<COND (<NOT <FSET? ,SNARK ,INVISIBLE>>
|
||
<TELL "@@=SEACAT Oooo=MONSTER">
|
||
<COND (,SUB-IN-BATTLE
|
||
<TELL " #=DANGER">)
|
||
(T <TELL " ">)>) ;"31 chars on line"
|
||
(T
|
||
<COND (<OR <EQUAL? ,SHIP-WARNING ,SONAR-RED>
|
||
<EQUAL? ,SONAR-WARNING ,SONAR-RED>>
|
||
<TELL "SONAR:*RED*">)
|
||
(<OR <EQUAL? ,SHIP-WARNING ,SONAR-YELLOW>
|
||
<EQUAL? ,SONAR-WARNING ,SONAR-YELLOW>>
|
||
<TELL "SONAR:YELLO">)
|
||
(T
|
||
<TELL " ">)>
|
||
<TELL " ">
|
||
<COND (<==? ,DEPTH-WARNING ,DEPTH-ORANGE>
|
||
<TELL "DEPTH:ORANGE">)
|
||
(<EQUAL? ,DEPTH-WARNING ,DEPTH-RED>
|
||
<TELL "DEPTH:*RED* ">)
|
||
(T
|
||
<TELL " ">)>
|
||
<TELL " ">
|
||
<COND (<AND <L? .DEP 3> <NOT <FSET? ,FREIGHTER ,INVISIBLE>>>
|
||
<TELL "@=SHIP">)
|
||
(T <TELL " ">)>)>
|
||
<CRLF>
|
||
<SET RANGE ,SONAR-RANGE>
|
||
<SET LAT <+ ,SUB-LAT .RANGE>>
|
||
<SET MINLAT <- ,SUB-LAT .RANGE>>
|
||
<SET MAXLON <+ ,SUB-LON .RANGE>>
|
||
<SET X 39 ;<* 5 <GET <GET ,NOW-TERRAIN 1> 0>>>
|
||
<SET Y <GET ,NOW-TERRAIN 0>> ;"coord's of NE corner"
|
||
<SET LATP2 <+ ,SUB-LAT 2>>
|
||
<SET LATP1 <+ ,SUB-LAT 1>>
|
||
<SET LATM1 <- ,SUB-LAT 1>>
|
||
<REPEAT ()
|
||
<SET LON <- ,SUB-LON .RANGE>>
|
||
<REPEAT ()
|
||
<COND (<AND <==? .LAT ,SUB-LAT> <==? .LON ,SUB-LON>>
|
||
<TELL " +">)
|
||
(<NOT <FSET? ,SNARK ,INVISIBLE>>
|
||
<COND (<THORPE-POS? .LON .LAT>
|
||
<TELL " @">)
|
||
(<SNARK-HEAD-POS? .LON .LAT>
|
||
<TELL " O">)
|
||
(<SNARK-TAIL-POS? .LON .LAT>
|
||
<TELL " o">)
|
||
(<AND ,SUB-IN-BATTLE
|
||
<THORPE-SHOOT? .LON .LAT>>
|
||
<TELL " #">)
|
||
(T <TELL " .">)>)
|
||
(<EQUAL? ,NOW-TERRAIN ,SEA-TERRAIN>
|
||
<COND (<DOME-ON-SONAR? .DEP .LON .LAT> <TELL " *">)
|
||
(T <TELL " .">)>)
|
||
(<AND <NOT <FSET? ,FREIGHTER ,INVISIBLE>>
|
||
<L? .DEP 3>
|
||
<==? .LAT ,FREIGHTER-LAT>
|
||
<==? .LON ,FREIGHTER-LON>>
|
||
<TELL " @">)
|
||
(<OR <AND <G? .LAT .Y>
|
||
<==? 6 <GET5 <GET ,NOW-TERRAIN .Y> .LON>>>
|
||
<AND <G? .LON .X>
|
||
<==? 6 <GET5 <GET ,NOW-TERRAIN .LAT> .X>>>>
|
||
<TELL " .">)
|
||
(<OR <L? .LAT 1>
|
||
<L? .LON 1>
|
||
<G? .LAT .Y>
|
||
<G? .LON .X>>
|
||
<TELL " *">)
|
||
(<L? .DEP <GET5 <GET ,NOW-TERRAIN .LAT> .LON>>
|
||
<TELL " .">)
|
||
(T
|
||
<TELL " *">)>
|
||
<COND (<IGRTR? LON .MAXLON>
|
||
<COND (<==? .LAT .LATP2>
|
||
<TELL " HDG:">
|
||
<COND (<==? ,SUB-DLAT +1> <TELL "N">)
|
||
(<==? ,SUB-DLAT -1> <TELL "S">)>
|
||
<COND (<==? ,SUB-DLON +1> <TELL "E">)
|
||
(<==? ,SUB-DLON -1> <TELL "W">)>
|
||
<TELL " ">)
|
||
(<==? .LAT .LATP1>
|
||
<COND (<==? ,JOYSTICK-DIR ,P?NW>
|
||
<TELL " \\ ">)
|
||
(<==? ,JOYSTICK-DIR ,P?NORTH>
|
||
<TELL " ! ">)
|
||
(<==? ,JOYSTICK-DIR ,P?NE>
|
||
<TELL " /">)
|
||
(T
|
||
<TELL " ">)>)
|
||
(<==? .LAT ,SUB-LAT>
|
||
<TELL " ">
|
||
<COND (<==? ,JOYSTICK-DIR ,P?WEST> <TELL "--">)
|
||
(T <TELL " ">)>
|
||
<TELL "+">
|
||
<COND (<==? ,JOYSTICK-DIR ,P?EAST> <TELL "--">)
|
||
(T <TELL " ">)>)
|
||
(<==? .LAT .LATM1>
|
||
<COND (<==? ,JOYSTICK-DIR ,P?SW>
|
||
<TELL " / ">)
|
||
(<==? ,JOYSTICK-DIR ,P?SOUTH>
|
||
<TELL " ! ">)
|
||
(<==? ,JOYSTICK-DIR ,P?SE>
|
||
<TELL " \\">)
|
||
(T
|
||
<TELL " ">)>)>
|
||
<CRLF>
|
||
<RETURN>)>>
|
||
<COND (<DLESS? LAT .MINLAT> <RETURN>)>>
|
||
<SET N <* 2 .RANGE>>
|
||
<REPEAT ()
|
||
<TELL "--">
|
||
<COND (<DLESS? N 0> <CRLF> <RETURN>)>>
|
||
<FIXED-FONT-OFF>
|
||
<RTRUE>>
|
||
|
||
<ROUTINE START-SONAR? ()
|
||
<COND (,SCREEN-NOW-SPLIT
|
||
<SPLIT <+ 3 <* 2 ,SONAR-RANGE>>>
|
||
<SETG SONAR-DIR 0> ;"to ensure update"
|
||
;"Un-SEMI'd next expr - MARC 4/17/84"
|
||
<I-SHOW-SONAR> ;"only for IBM-PC bug?"
|
||
<ENABLE <QUEUE I-SHOW-SONAR -1>>)>>
|
||
|
||
<OBJECT SONARSCOPE-LIGHT
|
||
(IN SUB)
|
||
(DESC "sonarscope warning light")
|
||
(ADJECTIVE SONARSCOPE WARNING YELLOW RED)
|
||
(SYNONYM WARNING LIGHT ;LIGHTS)
|
||
(FLAGS NDESCBIT)
|
||
(GENERIC GENERIC-LIGHT-F)
|
||
(ACTION SONARSCOPE-LIGHT-F)>
|
||
|
||
<ROUTINE SONARSCOPE-LIGHT-F ()
|
||
<COND (<VERB? ANALYZE EXAMINE READ REPLY>
|
||
<COND (<AND <NOT ,SONAR-WARNING> <NOT ,SHIP-WARNING>>
|
||
<TELL "The " D ,SONARSCOPE-LIGHT " is off."CR>)>
|
||
<TELL
|
||
"A yellow " D ,SONARSCOPE-LIGHT " 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 " D ,ALARM-SUB " will sound if you
|
||
and the approaching object are within ONE TURN of a collision!">)>>
|
||
|
||
<OBJECT ALARM-SUB
|
||
(IN SUB)
|
||
(DESC "warning buzzer")
|
||
(ADJECTIVE DEPTHFINDER DEPTH FINDER SONARSCOPE ALARM WARNING)
|
||
(SYNONYM ALARM BUZZER)
|
||
(FLAGS NDESCBIT)
|
||
(ACTION ALARM-SUB-F)>
|
||
|
||
<ROUTINE ALARM-SUB-F ()
|
||
<COND (<VERB? LAMP-OFF LISTEN REPLY STOP>
|
||
<TELL "Why not avoid the obstacle?" CR>)>>
|
||
|
||
<OBJECT SONARPHONE
|
||
(IN SUB)
|
||
(DESC "sonarphone")
|
||
(ADJECTIVE SONAR)
|
||
(SYNONYM SONARPHONE PHONE)
|
||
(FLAGS NDESCBIT)
|
||
(ACTION SONARPHONE-F)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")>
|
||
|
||
<GLOBAL BLY-CALLING <>>
|
||
<GLOBAL BLY-WELCOMED <>>
|
||
|
||
<ROUTINE BLY-WELCOME ()
|
||
<TELL
|
||
"Welcome to the " D ,AQUADOME ", " FN "! You're a sight for sore eyes!
|
||
We've been anxiously awaiting your arrival!">
|
||
;<COND (<IN? ,OVERHEATING ,GLOBAL-OBJECTS>
|
||
<CRLF>
|
||
<TIP-SAYS T>
|
||
<TELL
|
||
"By the way, " D ,BLY ", we had an " D ,OVERHEATING " problem on
|
||
the way here.\"">)>>
|
||
|
||
<ROUTINE SONARPHONE-F ()
|
||
<COND (<VERB? LAMP-OFF>
|
||
<COND (<NOT <FSET? ,PRSO ,ONBIT>> <TELL "It's not on!" CR> <RTRUE>)>
|
||
<FCLEAR ,PRSO ,ONBIT>
|
||
<COND (,REMOTE-PERSON <PERFORM ,V?GOODBYE> <RTRUE>)
|
||
(T <OKAY ,SONARPHONE "off">)>)
|
||
(<AND <VERB? LISTEN> ,BLY-CALLING> <TELL "It's ringing." CR>)
|
||
(<VERB? LAMP-ON REPLY SAY-INTO TAKE>
|
||
<COND (<NOT ,BLY-CALLING>
|
||
<TELL "The sonarphone isn't ringing!" CR>)
|
||
(T
|
||
<SETG BLY-CALLING <>>
|
||
<PHONE-ON ,GLOBAL-BLY ,AQUADOME ,SONARPHONE>
|
||
<FSET ,SONARPHONE ,ONBIT>
|
||
;<FCLEAR ,GLOBAL-SNARK ,INVISIBLE>
|
||
<MOVE ,PRIVATE-MATTER ,GLOBAL-OBJECTS>
|
||
<INC BLY-PRIVATELY-COUNT>
|
||
<SETG BLY-WELCOMED T>
|
||
<TELL "\"This is Zoe Bly speaking. ">
|
||
<BLY-WELCOME>
|
||
<DISCUSS-PRIVATE>)>)>>
|
||
|
||
<ROUTINE DISCUSS-PRIVATE ()
|
||
<THIS-IS-IT ,PRIVATE-MATTER>
|
||
<TELL
|
||
" I'd like to discuss a " D ,PRIVATE-MATTER " with you, as soon as
|
||
possible!\"" CR>>
|
||
|
||
<OBJECT HYDROPHONE
|
||
(IN SUB)
|
||
(DESC "hydrophone")
|
||
(ADJECTIVE HYDROPHONE LISTEN)
|
||
(SYNONYM HYDROPHONE DEVICE ;GAUGE)
|
||
(FLAGS NDESCBIT ONBIT ON?BIT)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")
|
||
(ACTION HYDROPHONE-F)>
|
||
|
||
<ROUTINE HYDROPHONE-F ()
|
||
<COND (<AND <VERB? LISTEN> <FSET? ,HYDROPHONE ,ONBIT>>
|
||
<TELL "You can hear ">
|
||
<COND (<==? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<TELL "various engine noises." CR>)
|
||
(<NOT <FSET? ,WHALE ,INVISIBLE>>
|
||
<TELL "the whale." CR>)
|
||
(T <TELL "nothing interesting." CR>)>)>>
|
||
|
||
<OBJECT REACTOR
|
||
(IN SUB)
|
||
(DESC "reactor")
|
||
(ADJECTIVE POWER SUB SUBMARINE ENGINE)
|
||
(SYNONYM REACTOR GENERATOR HOLE)
|
||
(FLAGS CONTBIT SEARCHBIT OPENBIT ;NDESCBIT)
|
||
(CAPACITY 11 ;44)
|
||
(VALUE 5)
|
||
(DESCFCN REACTOR-F)
|
||
(ACTION REACTOR-F)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")>
|
||
|
||
<ROUTINE REACTOR-F ("OPTIONAL" (ARG <>))
|
||
<COND (<OR .ARG <VERB? EXAMINE ANALYZE>>
|
||
<COND (<AND <==? ,P-ADVERB ,W?CAREFULLY> <NOT .ARG>>
|
||
<TELL <GETP ,LOCAL-SUB ,P?TEXT> CR>)
|
||
(<AND .ARG
|
||
<FSET? ,REACTOR ,ONBIT>
|
||
<NOT <FSET? ,REACTOR ,OPENBIT>>>
|
||
<RTRUE>)
|
||
(T <TELL "The power reactor is o"
|
||
<COND (<FSET? ,REACTOR ,ONBIT> "n") (T "ff")>
|
||
" and "
|
||
<COND (<FSET? ,REACTOR ,OPENBIT> "open") (T "closed")>
|
||
"." CR>)>)
|
||
(<VERB? LAMP-ON>
|
||
<COND (<FSET? ,REACTOR ,ONBIT>
|
||
<ALREADY ,REACTOR "on">)
|
||
(<NOT <IN? ,CATALYST-CAPSULE ,REACTOR>>
|
||
<FCLEAR ,CATALYST-CAPSULE ,NDESCBIT>
|
||
<TELL-HINT 33 ;8 ,CATALYST-CAPSULE <>>)
|
||
(<FSET? ,REACTOR ,OPENBIT>
|
||
<YOU-CANT "start" <> "open">
|
||
;<TELL "You can't turn it on while it's open." CR>)
|
||
(T
|
||
<FSET ,REACTOR ,ONBIT>
|
||
<TELL "Electrical systems now activated." CR>
|
||
<SCORE-OBJ ,REACTOR>
|
||
<RTRUE>)>)
|
||
(<VERB? LAMP-OFF>
|
||
<COND (<NOT <FSET? ,REACTOR ,ONBIT>>
|
||
<ALREADY ,REACTOR "off">)
|
||
(<FSET? ,ENGINE ,ONBIT> ;"[YOU-CANT?]"
|
||
<TELL "You can't turn it off while the engine is on." CR>)
|
||
(T
|
||
<FCLEAR ,REACTOR ,ONBIT>
|
||
<TELL "Electrical systems now de-activated." CR>)>)
|
||
(<AND <VERB? OPEN> <FSET? ,REACTOR ,ONBIT>>
|
||
<YOU-CANT "open" <> "turned on">
|
||
;<TELL "You can't open it while it's turned on." CR>)>>
|
||
|
||
<OBJECT REACTOR-SWITCH
|
||
(IN LOCAL-GLOBALS ;SUB)
|
||
(DESC "reactor starter")
|
||
(ADJECTIVE REACTOR)
|
||
(SYNONYM STARTER BUTTON)
|
||
(FLAGS NDESCBIT)
|
||
(ACTION REACTOR-SWITCH-F)>
|
||
|
||
<ROUTINE REACTOR-SWITCH-F ()
|
||
<COND (<VERB? LAMP-ON LAMP-OFF EXAMINE>
|
||
<PERFORM ,PRSA ,REACTOR>
|
||
<RTRUE>)
|
||
(<VERB? MOVE PUSH TURN>
|
||
<TELL ,I-ASSUME " turn on the " D ,REACTOR ".)" CR>
|
||
<PERFORM ,V?LAMP-ON ,REACTOR>
|
||
<RTRUE>)>>
|
||
|
||
<OBJECT ENGINE
|
||
(IN SUB)
|
||
(DESC "hydrojet")
|
||
(ADJECTIVE PROPULSION HYDROJET)
|
||
(SYNONYM HYDROJET ENGINE SYSTEM TURBINE)
|
||
(FLAGS NDESCBIT ON?BIT)
|
||
(VALUE 5)
|
||
;(GENERIC GENERIC-ENGINE-F)
|
||
(ACTION ENGINE-F)>
|
||
|
||
;"<OBJECT ENGINE-CS
|
||
(IN CRAWL-SPACE)
|
||
(DESC 'hydrojet')
|
||
(ADJECTIVE PROPULSION HYDROJET)
|
||
(SYNONYM HYDROJET ENGINE SYSTEM TURBINE)
|
||
(FLAGS NDESCBIT ON?BIT)
|
||
(GENERIC GENERIC-ENGINE-F)
|
||
(ACTION ENGINE-F)>
|
||
|
||
;<ROUTINE GENERIC-ENGINE-F (OBJ) ,ENGINE>"
|
||
|
||
<ROUTINE ENGINE-F ()
|
||
<COND (<VERB? LAMP-OFF STOP>
|
||
<COND (<NOT <0? ,THROTTLE-SETTING>>
|
||
<YOU-CANT "stop" ,THROTTLE "open">
|
||
;<TELL
|
||
"You can't turn off the engine while the throttle's open." CR>)
|
||
;(T
|
||
<OKAY ,ENGINE "off">)>)
|
||
(<VERB? LAMP-ON>
|
||
<COND (<OR <AND ,SUB-IN-TANK <NOT ,TEST-TANK-FULL>>
|
||
<AND ,SUB-IN-DOME <NOT ,AIRLOCK-FULL>>>
|
||
<TELL
|
||
"The " D ,SUB " can't go when it's out of the water.
|
||
You should fill the ">
|
||
<COND (,SUB-IN-TANK
|
||
<THIS-IS-IT ,TEST-TANK>
|
||
<TELL D ,TEST-TANK>)
|
||
(T
|
||
<THIS-IS-IT ,AIRLOCK>
|
||
<TELL D ,AIRLOCK>)>
|
||
<TELL " first." CR>)
|
||
(<NOT <FSET? ,REACTOR ,ONBIT>>
|
||
<YOU-CANT "start" ,REACTOR "off">
|
||
;<TELL
|
||
"You can't turn it on while the reactor's off."
|
||
;"You should start the reactor to generate the electrical power for your
|
||
propulsion system." CR>)
|
||
(<FSET? ,ENGINE ,ONBIT>
|
||
<ALREADY ,ENGINE "on">)
|
||
(T
|
||
<SETG GATE-CRASHED <>>
|
||
<FSET ,ENGINE ,ONBIT>
|
||
<FSET ,ENGINE ,TOUCHBIT>
|
||
<COND (<READY-FOR-SNARK?>
|
||
<TELL
|
||
"Your revolutionary craft thrums with power, matching your own excited
|
||
heartbeat!" CR>)
|
||
(T <TELL
|
||
"You can immediately hear the powerful thrum of the hydrojet
|
||
turbine." CR>)>
|
||
<SCORE-OBJ ,ENGINE>
|
||
<RTRUE>)>)>>
|
||
|
||
<OBJECT ENGINE-BUTTON
|
||
(IN LOCAL-GLOBALS ;SUB)
|
||
(DESC "engine starter")
|
||
(ADJECTIVE ENGINE STARTER)
|
||
(SYNONYM STARTER BUTTON)
|
||
(FLAGS NDESCBIT VOWELBIT)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")
|
||
(ACTION ENGINE-BUTTON-F)>
|
||
|
||
<ROUTINE ENGINE-BUTTON-F ()
|
||
<COND (<VERB? LAMP-ON LAMP-OFF EXAMINE>
|
||
<PERFORM ,PRSA ,ENGINE>
|
||
<RTRUE>)
|
||
(<VERB? MOVE PUSH TURN>
|
||
<TELL ,I-ASSUME " turn on the " D ,ENGINE ".)" CR>
|
||
<PERFORM ,V?LAMP-ON ,ENGINE>
|
||
<RTRUE>)>>
|
||
|
||
<GLOBAL JOYSTICK-DIR 25>
|
||
<OBJECT JOYSTICK
|
||
(IN SUB)
|
||
(DESC "joystick")
|
||
(ADJECTIVE JOY)
|
||
(SYNONYM STICK JOYSTICK)
|
||
(FLAGS NDESCBIT)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")
|
||
(ACTION JOYSTICK-F)>
|
||
|
||
<ROUTINE JOYSTICK-F ()
|
||
<COND (<VERB? ANALYZE EXAMINE READ>
|
||
<TELL
|
||
"The " D ,JOYSTICK " is like the kind used with personal computers, only
|
||
bigger. It's now ">
|
||
<COND (<0? ,JOYSTICK-DIR> <TELL "sitting at dead center." CR>)
|
||
(T
|
||
<TELL "pointing to ">
|
||
<DIR-PRINT ,JOYSTICK-DIR>
|
||
<TELL "." CR>)>)
|
||
(<VERB? MOVE PUSH TURN>
|
||
<V-WALK-AROUND>
|
||
<RTRUE>)
|
||
(<VERB? MOVE-DIR>
|
||
<COND (<EQUAL? ,P-DIRECTION ,P?IN>
|
||
<V-WALK-AROUND>
|
||
<RTRUE>)>
|
||
<COND (<EQUAL? ,P-DIRECTION ,P?OUT>
|
||
<COND (,SUB-IN-TANK <SETG P-DIRECTION ,P?EAST>)
|
||
(,SUB-IN-DOME <SETG P-DIRECTION ,P?SOUTH>)
|
||
(T
|
||
<V-WALK-AROUND>
|
||
<RTRUE>)>)>
|
||
<DO-WALK ,P-DIRECTION>
|
||
<RTRUE>)>>
|
||
|
||
<CONSTANT THROTTLE-MAX 3>
|
||
<GLOBAL THROTTLE-SETTING 0>
|
||
<GLOBAL THROTTLE-DESCS <PTABLE "closed" ;"off" "slow" "medium" "fast">>
|
||
|
||
<OBJECT THROTTLE
|
||
(IN SUB)
|
||
(DESC "throttle")
|
||
(SYNONYM THROTTLE SPEED)
|
||
(FLAGS NDESCBIT)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")
|
||
(ACTION THROTTLE-F)>
|
||
|
||
<OBJECT FAST
|
||
(IN SUB)
|
||
(DESC "fast")
|
||
;(ADJECTIVE FAST FULL HIGH THIRD TOP)
|
||
(SYNONYM FAST FASTER HIGH MAXIMUM ;FULL ;SPEED)
|
||
(FLAGS NDESCBIT)>
|
||
|
||
<OBJECT MEDIUM
|
||
(IN SUB)
|
||
(DESC "medium")
|
||
;(ADJECTIVE MEDIUM HALF CRUISING CRUISE SECOND)
|
||
(SYNONYM MEDIUM HALF CRUISE ;SPEED)
|
||
(FLAGS NDESCBIT)>
|
||
|
||
<OBJECT SLOW
|
||
(IN SUB)
|
||
(DESC "slow")
|
||
;(ADJECTIVE SLOW FIRST)
|
||
(SYNONYM SLOW SLOWER MINIMUM LOW ;SPEED)
|
||
(FLAGS NDESCBIT)>
|
||
|
||
<OBJECT OFF
|
||
(IN SUB)
|
||
(DESC "off")
|
||
(ADJECTIVE STANDING)
|
||
(SYNONYM OFF STILL STOP)
|
||
(FLAGS NDESCBIT VOWELBIT)>
|
||
|
||
<ROUTINE THROTTLE-F ("AUX" TH)
|
||
<COND (<VERB? OPEN PUSH LAMP-ON>
|
||
<SETG P-NUMBER <+ 1 ,THROTTLE-SETTING>>
|
||
<COND (<G? ,P-NUMBER ,THROTTLE-MAX>
|
||
<TELL "You're going as fast as you can!" CR>)
|
||
(T
|
||
<PERFORM ,V?SET ,THROTTLE ;,INTNUM>
|
||
<RTRUE>)>)
|
||
(<VERB? CLOSE LAMP-OFF>
|
||
<COND (<0? ,THROTTLE-SETTING>
|
||
<ALREADY ,THROTTLE "closed">
|
||
<RTRUE>)>
|
||
<SETG THROTTLE-SETTING 0>
|
||
;<COND (,DEBUG <TELL "[Throttle=" N ,THROTTLE-SETTING "]" CR>)>
|
||
<COND (<OR ,SUB-IN-TANK ,SUB-IN-DOME>
|
||
<TELL
|
||
"The throttle is now closed. You must open it to make the " D ,SUB " go
|
||
anywhere." CR>)
|
||
(T
|
||
<TELL "The " D ,SUB " slows to a halt." CR>
|
||
<COOL-BACK>)>
|
||
<RTRUE>)
|
||
(<VERB? MOVE TURN>
|
||
<TELL
|
||
"Set it to the speed you want: fast, medium, slow, or off." CR>)
|
||
(<VERB? ANALYZE EXAMINE READ>
|
||
<TELL "The throttle is set to "
|
||
<GET ,THROTTLE-DESCS ,THROTTLE-SETTING>
|
||
"." CR>)
|
||
(<AND <VERB? SET PUT MOVE-DIR> <DOBJ? THROTTLE>>
|
||
<COND (<IOBJ? OFF SLOW MEDIUM FAST>
|
||
<COND (<IOBJ? OFF> <SET TH 0>)
|
||
(<IOBJ? SLOW> <SET TH 1>)
|
||
(<IOBJ? MEDIUM> <SET TH 2>)
|
||
(<IOBJ? FAST> <SET TH 3>)>)
|
||
(<AND <EQUAL? ,PRSI <> ,GRID-UNIT>
|
||
<G? ,P-NUMBER -1>
|
||
<NOT <G? ,P-NUMBER ,THROTTLE-MAX>>>
|
||
<SET TH ,P-NUMBER>)
|
||
(T
|
||
<TELL "Set it off, slow, medium, or fast." CR>
|
||
<RTRUE>)>
|
||
<COND (<0? .TH>
|
||
<TELL ,I-ASSUME " close the " D ,THROTTLE ".)" CR>
|
||
<PERFORM ,V?CLOSE ,THROTTLE>
|
||
<RTRUE>)>
|
||
;<COND (,DEBUG <TELL "[Throttle=" N .TH "]" CR>)>
|
||
<COND (<NOT <FSET? ,ENGINE ,ONBIT>>
|
||
<TELL "Nothing happens when you open the throttle. ">
|
||
<COND (,GATE-CRASHED
|
||
<TELL
|
||
"The turbine was stopped by Automatic Shutoff when you crashed into the
|
||
sea gate.">)
|
||
(T <TELL "The engine is off.">)>
|
||
<THIS-IS-IT ,ENGINE>
|
||
<CRLF>)
|
||
(,SUB-IN-TANK
|
||
<COND (<HATCH-GATE-NOT-READY? ,TANK-GATE>
|
||
<RTRUE>)>
|
||
<COND (<EQUAL? ,JOYSTICK-DIR ,P?EAST>
|
||
<COND (<NOT <FSET? ,TANK-GATE ,OPENBIT>>
|
||
<GATE-CRASH "open" ,THROTTLE ,TANK-GATE>)
|
||
(T
|
||
<SETG THROTTLE-SETTING .TH>
|
||
<SUB-LEAVES T ,P?EAST>)>)
|
||
(T
|
||
<SETG THROTTLE-SETTING .TH>
|
||
<OKAY-THROTTLE ,P?EAST>)>)
|
||
(,SUB-IN-DOME
|
||
<COND (<HATCH-GATE-NOT-READY? ,AIRLOCK-HATCH>
|
||
<RTRUE>)>
|
||
<SETG THROTTLE-SETTING .TH>
|
||
<COND (<EQUAL? ,JOYSTICK-DIR ,P?SOUTH>
|
||
<SUB-LEAVES <> ,P?SOUTH>)
|
||
(T <OKAY-THROTTLE ,P?SOUTH>)>)
|
||
(T
|
||
<COND (<==? ,THROTTLE-SETTING .TH>
|
||
<TELL "Okay, you're still ">)
|
||
(T
|
||
<COND (<L? ,THROTTLE-SETTING .TH>
|
||
<TELL "You feel the seat press ">
|
||
<COND (<NOT <0? ,THROTTLE-SETTING>>
|
||
<TELL "harder ">)>
|
||
<TELL
|
||
"against you, and the " D ,ENGINE " gets loud">)
|
||
(T <TELL "The " D ,ENGINE " gets quiet">)>
|
||
<TELL "er. You're now ">)>
|
||
<TELL "travelling at a speed of " N .TH " " D ,GRID-UNIT>
|
||
<COND (<NOT <==? 1 .TH>> <TELL "s">)>
|
||
<SETG THROTTLE-SETTING .TH>
|
||
<TELL " per turn." CR>)>
|
||
<RTRUE>)>>
|
||
|
||
<ROUTINE OKAY-THROTTLE (DIR)
|
||
<TELL
|
||
"Okay, now that the throttle is set, try pushing the " D ,JOYSTICK " to ">
|
||
<DIR-PRINT .DIR>
|
||
<TELL "." CR>>
|
||
|
||
<GLOBAL SONAR-LON 0>
|
||
<GLOBAL SONAR-LAT 0>
|
||
<GLOBAL SONAR-DEP 0>
|
||
<GLOBAL SONAR-DIR 0>
|
||
|
||
<ROUTINE I-SHOW-SONAR ()
|
||
<COND (<AND <FSET? ,SNARK ,INVISIBLE>
|
||
<FSET? ,FREIGHTER ,INVISIBLE>
|
||
<==? ,SONAR-LON ,SUB-LON>
|
||
<==? ,SONAR-LAT ,SUB-LAT>
|
||
<==? ,SONAR-DEP ,SUB-DEPTH>
|
||
<==? ,SONAR-DIR ,JOYSTICK-DIR>>
|
||
<COND (,DEBUG <TELL "[no sonar update]" CR>)>
|
||
<RFALSE>)
|
||
(T
|
||
<SCREEN 1>
|
||
<SHOW-SONARSCOPE>
|
||
<SCREEN 0>
|
||
<SETG SONAR-LON ,SUB-LON>
|
||
<SETG SONAR-LAT ,SUB-LAT>
|
||
<SETG SONAR-DEP ,SUB-DEPTH>
|
||
<SETG SONAR-DIR ,JOYSTICK-DIR>
|
||
<RFALSE>)>>
|
||
|
||
<GLOBAL SUB-DEPTH 0>
|
||
<GLOBAL TARGET-DEPTH 0>
|
||
<GLOBAL EVER-SUBMERGED? <>>
|
||
|
||
<OBJECT DEPTH
|
||
(IN SUB)
|
||
(DESC "present depth")
|
||
(ADJECTIVE PRESENT CURRENT SUB\'S SUBMARINE)
|
||
(SYNONYM DEPTH)
|
||
(ACTION DEPTH-F)
|
||
(FLAGS NDESCBIT)>
|
||
|
||
<ROUTINE DEPTH-F ()
|
||
<DO-INSTEAD-OF ,DEPTH-CONTROL ,DEPTH>
|
||
<RTRUE>>
|
||
|
||
<OBJECT DEPTH-CONTROL
|
||
(IN SUB)
|
||
(DESC "depth control" ;" lever")
|
||
(ADJECTIVE DEPTH ;CONTROL)
|
||
(SYNONYM CONTROL LEVER HANDLE)
|
||
(FLAGS NDESCBIT)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")
|
||
(ACTION DEPTH-CONTROL-F)>
|
||
|
||
<GLOBAL DIVING? 0>
|
||
<ROUTINE DEPTH-CONTROL-F ("AUX" DEP NEW-DIVING?)
|
||
<COND (<REMOTE-VERB?> <RFALSE>)
|
||
(,SUB-IN-TANK
|
||
<YOU-CANT "submerge" ,SUB "here">
|
||
;<TELL "You can't submerge until you leave the " D ,TEST-TANK "." CR>
|
||
<RTRUE>)
|
||
(<AND ,SUB-IN-DOME <WHY-NEED ,DEPTH-CONTROL ,AIRLOCK>>
|
||
<RTRUE>)
|
||
(<VERB? ANALYZE EXAMINE READ WHAT>
|
||
<TELL
|
||
"It's set for a desired depth of " N <* 5 ,TARGET-DEPTH> " meters." CR>)
|
||
(<VERB? SET>
|
||
<SET DEP ,P-NUMBER>
|
||
;<COND (,DEBUG <TELL "[Number=" N .DEP "]" CR>)>
|
||
<COND (<FSET? ,AUTO-PILOT ,ONBIT>
|
||
<TELL "Let the " D ,AUTO-PILOT " handle that." CR>
|
||
<RTRUE>)
|
||
(<NOT <FSET? ,DEPTHFINDER ,ONBIT>>
|
||
<THIS-IS-IT ,DEPTHFINDER>
|
||
<TELL "You'd better turn on the " D ,DEPTHFINDER" first."CR>
|
||
<RTRUE>)
|
||
(<NOT <G? .DEP -1>>
|
||
<TELL "You must set it to at least zero!" CR>
|
||
<RTRUE>)
|
||
(<AND ,SUB-IN-BATTLE ;<NOT <FSET? ,THORPE-SUB ,INVISIBLE>>
|
||
<G? ,SUB-DEPTH .DEP>>
|
||
<TELL
|
||
"If you go above the Snark, Thorpe will shoot you!" CR>
|
||
<RTRUE>)
|
||
(<AND <G? .DEP 0> <FSET? ,SUB-DOOR ,OPENBIT>>
|
||
;<THIS-IS-IT ,SUB-DOOR>
|
||
<YOU-CANT "submerge" ,SUB-DOOR "open">
|
||
;<TELL "You can't dive with the entry hatch open!" CR>
|
||
<RTRUE>)
|
||
(<IOBJ? METER>
|
||
<SET DEP </ <+ 2 .DEP> 5>>
|
||
<COND (<NOT <==? ,P-NUMBER <* 5 .DEP>>>
|
||
<TELL
|
||
"(That rounds off to " N <* 5 .DEP> " meters.)" CR>)>)>
|
||
<SETG TARGET-DEPTH .DEP>
|
||
<COND (<NOT <0? .DEP>> <SETG EVER-SUBMERGED? T>)>
|
||
<COND (<==? ,SUB-DEPTH .DEP>
|
||
<COND (<0? ,DIVING?>
|
||
<ALREADY ,PLAYER "at that depth">)
|
||
(T
|
||
<TELL "Your "
|
||
<COND (<==? +1 ,DIVING?> "de") (T "a")>
|
||
"scent ceases.">)>
|
||
<CRLF>
|
||
;<COND (,DEPTH-WARNING
|
||
<TELL ,DEPTH-WARNING CR>)>
|
||
<SETG DIVING? 0>
|
||
<RTRUE>)
|
||
(T
|
||
<COND (<L? ,SUB-DEPTH ,TARGET-DEPTH>
|
||
<SET NEW-DIVING? +1>)
|
||
(T
|
||
<SET NEW-DIVING? -1>)>
|
||
<COND (<NOT <==? ,DIVING? .NEW-DIVING?>>
|
||
<TELL "The " D ,SUB " noses ">
|
||
<COND (<==? .NEW-DIVING? +1>
|
||
<TELL "down">)
|
||
(T <TELL "up">)>
|
||
<TELL "ward">
|
||
<COND (<0? ,SUB-DEPTH>
|
||
<TELL
|
||
", and " D ,GLOBAL-WATER " begins to wash over your forward " D ,SUB-WINDOW>)>
|
||
<TELL ". You're now ">)
|
||
(T <TELL "Okay, you're still ">)>
|
||
<SETG DIVING? .NEW-DIVING?>
|
||
<COND (<==? 1 ,DIVING?> <TELL "div">)
|
||
(T <TELL "ris">)>
|
||
<TELL "ing at a speed of 5 meters per ">
|
||
<COND (<0? ,THROTTLE-SETTING> <TELL "turn." CR>)
|
||
(T <TELL D ,GRID-UNIT "." CR>)>)>)>>
|
||
|
||
<OBJECT GRID-UNIT
|
||
(IN SUB ;GLOBAL-OBJECTS)
|
||
(ADJECTIVE SEA GRID NUMBER)
|
||
(SYNONYM SQUARE)
|
||
(DESC "sea square")
|
||
(FLAGS UNITBIT NDESCBIT ;NARTICLEBIT)>
|
||
|
||
<OBJECT METER
|
||
(IN SUB ;GLOBAL-OBJECTS)
|
||
(ADJECTIVE NUMBER)
|
||
(SYNONYM METER METERS METRES M)
|
||
(DESC "meter")
|
||
(FLAGS UNITBIT NDESCBIT ;NARTICLEBIT)
|
||
(ACTION METER-F)>
|
||
|
||
<ROUTINE METER-F ()
|
||
<COND (<VERB? BOARD> ;"CLIMB"
|
||
<PERFORM ,V?CLIMB-UP ,PRSO>
|
||
<RTRUE>)>>
|
||
|
||
<OBJECT AUTO-PILOT
|
||
(IN SUB)
|
||
(DESC "autopilot")
|
||
(ADJECTIVE AUTO AUTOMATIC)
|
||
(SYNONYM PILOT AUTOPILOT)
|
||
(FLAGS NDESCBIT VOWELBIT)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")
|
||
(VALUE 5 ;1)
|
||
(ACTION AUTO-PILOT-F)>
|
||
|
||
<ROUTINE AUTO-PILOT-F ()
|
||
<COND (<VERB? LAMP-OFF>
|
||
<COND (<NOT <FSET? ,AUTO-PILOT ,ONBIT>>
|
||
<ALREADY ,AUTO-PILOT "off">)
|
||
(T
|
||
<TELL
|
||
"If you do, you'll never reach the " D ,AQUADOME "!" CR>)>)
|
||
(<OR <VERB? LAMP-ON PUSH>
|
||
<AND <VERB? SET> <IOBJ? AQUADOME>>>
|
||
<COND (<FSET? ,AUTO-PILOT ,ONBIT>
|
||
<ALREADY ,AUTO-PILOT "on">)
|
||
(<NOT ,SUB-IN-OPEN-SEA>
|
||
<TELL "You must be your own pilot for now." CR>)
|
||
(<FSET? ,SUB-DOOR ,OPENBIT>
|
||
<YOU-CANT "submerge" ,SUB-DOOR "open">
|
||
;<THIS-IS-IT ,SUB-DOOR>
|
||
;<TELL "You can't dive with the entry hatch open!" CR>
|
||
<RTRUE>)
|
||
(T
|
||
<FSET ,AUTO-PILOT ,ONBIT>
|
||
<SETG JOYSTICK-DIR ,P?EAST>
|
||
<SETG TIP-SAYS-1 23 ;5>
|
||
<SETG TIP-SAYS-2 ,MAGAZINE>
|
||
<ENABLE <QUEUE I-TIP-SAYS 6>>
|
||
<TELL "Okay, your trip to the " D ,AQUADOME " will take ">
|
||
<COND (<0? ,THROTTLE-SETTING> <TELL "forever">)
|
||
(T <TELL N </ ,AQUADOME-DISTANCE ,THROTTLE-SETTING>
|
||
" turns">)>
|
||
<TELL
|
||
" at your current speed. But you can set the throttle to a different
|
||
speed, if you want." CR>
|
||
<SCORE-OBJ ,AUTO-PILOT>
|
||
<RTRUE>)>)>>
|
||
|
||
<ROUTINE I-AUTO-PILOT ()
|
||
<COND (<NOT <FSET? ,AUTO-PILOT ,ONBIT>>
|
||
<QUEUE I-AUTO-PILOT 2>
|
||
<COND (<AND <VERB? LAMP-ON> <DOBJ? AUTO-PILOT>> <RFALSE>)>
|
||
<TIME-FOR-PILOT>)>>
|
||
|
||
<ROUTINE TIME-FOR-PILOT ()
|
||
<TIP-SAYS>
|
||
<TELL
|
||
"I think it's time to turn on the " D ,AUTO-PILOT ".\"" CR>>
|
||
|
||
<CONSTANT AQUADOME-VISIBLE 55>
|
||
<CONSTANT AQUADOME-DISTANCE 60>
|
||
<GLOBAL DISTANCE-FROM-BAY 0>
|
||
|
||
<OBJECT CONTROL-CIRCUITS
|
||
(IN SUB)
|
||
(DESC "control circuit")
|
||
(ADJECTIVE CONTROL)
|
||
(SYNONYM CIRCUIT)
|
||
(FLAGS NDESCBIT)
|
||
(ACTION CONTROL-CIRCUITS-F)>
|
||
|
||
<ROUTINE CONTROL-CIRCUITS-F ()
|
||
<COND (<VERB? ANALYZE EXAMINE READ>
|
||
<COND (,SUB-IN-OPEN-SEA
|
||
<TELL
|
||
"Sorry. There's no way to do this while the " D ,SUB " is submerged and
|
||
underway. You need ship-repair or test-tank facilities." CR>)>)>>
|
||
|
||
<OBJECT CONTROL-CIRCUITS-GAUGE
|
||
(IN SUB)
|
||
(DESC ;"control circuits " "temperature gauge" ;" needle")
|
||
(ADJECTIVE CONTROL CIRCUIT TEMPERATURE GAUGE)
|
||
(SYNONYM ;CIRCUIT TEMPERATURE GAUGE ;GAUGES NEEDLE)
|
||
(FLAGS NDESCBIT)
|
||
(ACTION CONTROL-CIRCUITS-GAUGE-F)>
|
||
|
||
<ROUTINE CONTROL-CIRCUITS-GAUGE-F ()
|
||
<COND (<VERB? ANALYZE EXAMINE READ>
|
||
<COND (T ;,SUB-IN-OPEN-SEA
|
||
<TELL "The " D ,CONTROL-CIRCUITS-GAUGE " needle is ">
|
||
<COND (<L? 20 ,CIRCUIT-TEMP>
|
||
<COND (<L? 25 ,CIRCUIT-TEMP>
|
||
<TELL "pointing to">)
|
||
(T <TELL "near">)>
|
||
<TELL " the red danger zone.">)
|
||
(T <TELL "in the green safety zone.">)>
|
||
<COND (<NOT <FSET? ,ENGINE ,TOUCHBIT>> T)
|
||
(<NOT <FSET? ,VOLTAGE-REGULATOR ,MUNGBIT>> T)
|
||
(<L? 1 ,THROTTLE-SETTING> <TELL " And rising.">)
|
||
(<0? ,THROTTLE-SETTING> <TELL " And falling.">)
|
||
(T <TELL " And steady.">)>
|
||
<CRLF>)>)>>
|
||
|
||
<GLOBAL CIRCUIT-TEMP 0>
|
||
<GLOBAL CIRCUIT-TIP <>>
|
||
<GLOBAL CIRCUIT-RED <>>
|
||
|
||
<OBJECT SEARCH-BEAM
|
||
(IN SUB)
|
||
(DESC "brass search light")
|
||
(ADJECTIVE BRASS SEARCH LIGHT)
|
||
(SYNONYM BEAM LIGHT ;SEARCH)
|
||
(FLAGS NDESCBIT ON?BIT)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")
|
||
(GENERIC GENERIC-LIGHT-F)
|
||
(ACTION SEARCH-BEAM-F)>
|
||
|
||
<ROUTINE SEARCH-BEAM-F ()
|
||
<COND (<VERB? TURN>
|
||
<TELL "You didn't tell what direction to aim it." CR>)
|
||
(<VERB? AIM>
|
||
<COND (<NOT <FSET? ,SEARCH-BEAM ,ONBIT>>
|
||
<TELL "It's not on!" CR>)
|
||
(,SUB-IN-BATTLE
|
||
<TOO-CLOUDY>)
|
||
(<AND <IOBJ? RIGHT> <IN? ,WHALE ,SUB>>
|
||
<COND (<FSET? ,WHALE ,INVISIBLE>
|
||
<FCLEAR ,WHALE ,INVISIBLE>
|
||
<TELL
|
||
"An enormous whale can be seen, lolling comfortably in the deep.">
|
||
<COND (,WHALE-HEARD
|
||
<TELL
|
||
" Obviously this is what has been making those noises over the hydrophone.">)>
|
||
<TELL CR
|
||
"The whale swims closer as you pass, curious about this strange fish -- the "
|
||
D ,SUB ". But, thankfully, it shows no danger of accidental collision." CR>)
|
||
(T <TELL "The whale is still following you." CR>)>)
|
||
(T <TELL
|
||
"Nothing new appears in the " D ,SEARCH-BEAM " beam." CR>)>)>>
|
||
|
||
<ROUTINE GENERIC-LIGHT-F (OBJ)
|
||
<COND (,DEPTH-WARNING ,DEPTHFINDER-LIGHT)
|
||
(<OR ,SONAR-WARNING ,SHIP-WARNING> ,SONARSCOPE-LIGHT)
|
||
(<VERB? LAMP-ON LAMP-OFF TURN AIM SAIM> ,SEARCH-BEAM)>>
|
||
|
||
<OBJECT WHALE
|
||
(DESC "whale")
|
||
(SYNONYM WHALE)
|
||
(FLAGS INVISIBLE NDESCBIT)
|
||
(ACTION WHALE-F)>
|
||
|
||
<ROUTINE WHALE-F ()
|
||
<COND (<VERB? FIND THROUGH WALK-TO>
|
||
<TELL "You shouldn't get any closer!" CR>)>>
|
||
|
||
<GLOBAL WHALE-HEARD <>>
|
||
|
||
<GLOBAL SEA-TERRAIN 1>
|
||
|
||
<OBJECT OVERHEATING
|
||
(DESC "overheating")
|
||
;(IN GLOBAL-OBJECTS)
|
||
(SYNONYM OVERHEATING)>
|
||
|
||
<OBJECT BAY
|
||
(IN SUB)
|
||
(DESC "Frobton Bay")
|
||
(ADJECTIVE FROBTON)
|
||
(SYNONYM BAY SURFACE)
|
||
(FLAGS NDESCBIT NARTICLEBIT)
|
||
(VALUE 5)
|
||
(ACTION BAY-F)>
|
||
|
||
<ROUTINE BAY-F ()
|
||
<COND (<VERB? FIND THROUGH WALK-TO>
|
||
<COND (,SUB-IN-TANK
|
||
<TELL "First you must launch the " D ,SUB "." CR>)
|
||
(<==? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<TELL "You're in it!" CR>)
|
||
(T <TELL "This is no time to go back!" CR>)>)
|
||
(<VERB? EXAMINE>
|
||
<COND (<EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN>
|
||
<PERFORM ,V?LOOK-OUTSIDE ,SUB-WINDOW>
|
||
<RTRUE>)
|
||
(T
|
||
<NOT-HERE ,BAY>
|
||
;<SETG P-WON <>>
|
||
;<TELL "(You can't see any bay here!)" CR>)>)>>
|
||
|
||
<OBJECT CLAW
|
||
(IN GLOBAL-OBJECTS)
|
||
(DESC "extensor claw")
|
||
(ADJECTIVE EXTENSOR EXTENDER SCIMITAR)
|
||
(SYNONYM CLAW CLAWS ARM ARMS)
|
||
(FLAGS VOWELBIT ;SURFACEBIT)
|
||
(TEXT "(You'll find that information in your SEASTALKER package.)")
|
||
(ACTION CLAW-F)>
|
||
|
||
<ROUTINE CLAW-F ()
|
||
<COND (<VERB? ANALYZE EXAMINE> <LOCAL-SUB-F>)
|
||
(<VERB? FIND>
|
||
<TELL "It's part of the " D ,SUB "." CR>)
|
||
(<VERB? AIM MOVE MOVE-DIR>
|
||
<COND (<==? ,BAZOOKA <GET ,ON-SUB 0>>
|
||
<COND (<==? ,DART <GET ,ON-SUB 1>>
|
||
<TELL
|
||
"You should do that to one weapon or the other." CR>)
|
||
(T
|
||
<PERFORM ,PRSA ,BAZOOKA ,PRSI>
|
||
<RTRUE>)>)
|
||
(<==? ,DART <GET ,ON-SUB 1>>
|
||
<PERFORM ,PRSA ,DART ,PRSI>
|
||
<RTRUE>)
|
||
(T <TELL
|
||
"The claw moves just where you want it. Well done!" CR>)>)>>
|
||
|
||
<ROUTINE WHY-NEED (OBJ WHERE)
|
||
<COND (<AND <VERB? SET> <IOBJ? MANUAL>> <RFALSE>)
|
||
(<VERB? LAMP-OFF MUNG> <RFALSE>)
|
||
(T
|
||
<TELL "Why would you need the " D .OBJ
|
||
"? The " D ,SUB " is in the " D .WHERE "." CR>)>>
|
||
|
||
<OBJECT PILOT-SEAT
|
||
(IN SUB)
|
||
(DESC "seat")
|
||
(SYNONYM SEAT CHAIR)
|
||
(FLAGS NDESCBIT)
|
||
(ACTION PILOT-SEAT-F)>
|
||
|
||
<ROUTINE PILOT-SEAT-F ("AUX" (VAL <>))
|
||
<COND (<VERB? ANALYZE EXAMINE SIT>
|
||
<TELL "You're sitting in it." CR>)
|
||
(<VERB? LOOK-UNDER>
|
||
<COND (<NOT <FSET? ,OXYGEN-GEAR ,TOUCHBIT>>
|
||
<SET VAL T>
|
||
<TELL "You can see " D ,OXYGEN-GEAR "." CR>)>
|
||
<COND (<IN? ,ESCAPE-POD-UNIT ,HERE>
|
||
<SET VAL T>
|
||
<TELL "You can see the " D ,ESCAPE-POD-UNIT "." CR>)>
|
||
.VAL)>>
|
||
|
||
<OBJECT INSTRUMENTS
|
||
(IN SUB ;LOCAL-GLOBALS)
|
||
(DESC "instrument cluster")
|
||
(ADJECTIVE INSTRUMENT)
|
||
(SYNONYM INSTRUMENT CLUSTER GAUGES)
|
||
(FLAGS NDESCBIT VOWELBIT)
|
||
(ACTION INSTRUMENTS-F)>
|
||
|
||
<ROUTINE INSTRUMENTS-F ()
|
||
<COND ;(<EQUAL? ,HERE ,CENTER-OF-LAB> <VIDEOPHONE-F>)
|
||
(<AND ;<EQUAL? ,HERE ,SUB> <VERB? ANALYZE EXAMINE READ>>
|
||
<TELL
|
||
"Main instruments:|
|
||
" D ,DEPTHFINDER ", " D ,HYDROPHONE ", " D ,SONARSCOPE ;", D ,VIDEO-SCREEN"
|
||
", and " D ,CONTROL-CIRCUITS-GAUGE "." CR>)>>
|
||
|
||
<OBJECT CONTROLS-SUB
|
||
(IN SUB ;LOCAL-GLOBALS)
|
||
(DESC "control panel")
|
||
(ADJECTIVE OPERATOR CONTROL)
|
||
(SYNONYM CONTROL PANEL KNOB KNOBS)
|
||
(FLAGS NDESCBIT)
|
||
(ACTION CONTROLS-SUB-F)>
|
||
|
||
<ROUTINE CONTROLS-SUB-F ()
|
||
<COND (<AND ;<EQUAL? ,HERE ,SUB> <VERB? ANALYZE EXAMINE READ>>
|
||
<TELL
|
||
"MAIN OPERATING CONTROLS:|
|
||
">
|
||
<FIXED-FONT-ON>
|
||
<TELL D ,REACTOR ;CAPSULE-LEVER " : "
|
||
<COND (<FSET? ,REACTOR ,OPENBIT> "open") (T "closed")> CR
|
||
D ,REACTOR-SWITCH ": "
|
||
<COND (<FSET? ,REACTOR ,ONBIT> "on") (T "off")> CR
|
||
D ,FILL-TANK-BUTTON " : " <TANK-STATUS> CR
|
||
D ,OPEN-GATE-BUTTON " : " <GATE-STATUS> CR
|
||
D ,ENGINE-BUTTON " : "
|
||
<COND (<FSET? ,ENGINE ,ONBIT> "on") (T "off")> CR
|
||
D ,THROTTLE " : "
|
||
<GET ,THROTTLE-DESCS ,THROTTLE-SETTING> CR
|
||
D ,JOYSTICK " : ">
|
||
<DIR-PRINT ,JOYSTICK-DIR <>>
|
||
<TELL CR
|
||
D ,DEPTH-CONTROL " : "
|
||
N <* 5 ,TARGET-DEPTH> " meters|
|
||
" D ,AUTO-PILOT " : "
|
||
<COND (<FSET? ,AUTO-PILOT ,ONBIT> "on") (T "off")> CR>
|
||
<FIXED-FONT-OFF>
|
||
<RTRUE>)>>
|
||
|
||
<ROUTINE FIXED-FONT-ON () <PUT 0 8 <BOR <GET 0 8> 2>>>
|
||
|
||
<ROUTINE FIXED-FONT-OFF() <PUT 0 8 <BAND <GET 0 8> -3>>>
|