abyss/command.zil

776 lines
13 KiB
Plaintext

;"***************************************************************************"
; "game : Abyss"
; "file : COMMAND.ZIL"
; "auth : $Author: DEB $"
; "date : $Date: 20 Mar 1989 8:43:42 $"
; "rev : $Revision: 1.9 $"
; "vers : 1.0"
;"---------------------------------------------------------------------------"
; "Miscellaneous"
; "Copyright (C) 1988 Infocom, Inc. All rights reserved."
;"***************************************************************************"
;"---------------------------------------------------------------------------"
; "RM-COMMAND-MODULE"
;"---------------------------------------------------------------------------"
<ROOM RM-COMMAND-MODULE
(LOC ROOMS)
(DESC "command module")
(FLAGS FL-INDOORS FL-LIGHTED)
(SYNONYM MODULE)
(ADJECTIVE COMMAND)
(AFT TO RM-CORRIDOR)
(GLOBAL LG-WALL RM-CORRIDOR)
(ACTION RT-RM-COMMAND-MODULE)
>
<ROUTINE RT-RM-COMMAND-MODULE ("OPTIONAL" (CONTEXT <>))
<COND
(<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
<TELL TAB "You ">
<COND
(<MC-CONTEXT? ,M-LOOK>
<TELL "are in">
)
(T
<TELL "enter">
)
>
<TELL
the ,RM-COMMAND-MODULE ", a long narrow cabin like the inside of a Winnebago
packed with instrumentation. At the far end, a chair sits in front of a bank
of monitors. The only exit is in the aft wall." CR
>
<RFALSE>
)
(<MC-CONTEXT? ,M-BEG>
<COND
(<AND <VERB? SIT>
<MC-PRSO? ,ROOMS>
>
<RT-COMMAND-MENU>
)
>
)
(.CONTEXT
<RFALSE>
)
>
>
;"---------------------------------------------------------------------------"
; "TH-MONITORS"
;"---------------------------------------------------------------------------"
<OBJECT TH-MONITORS
(LOC RM-COMMAND-MODULE)
(DESC "monitors")
(FLAGS FL-NO-DESC)
(SYNONYM MONITOR MONITORS)
(ACTION RT-TH-MONITORS)
>
<ROUTINE RT-TH-MONITORS ("OPT" (CONTEXT <>))
<COND
(.CONTEXT
<RFALSE>
)
(<VERB? EXAMINE>
<TELL
TAB "The monitors glow with data gathered from all over Deepcore." CR
>
)
(<VERB? SIT>
<RT-COMMAND-MENU>
)
>
>
;"---------------------------------------------------------------------------"
; "TH-COMMAND-CHAIR"
;"---------------------------------------------------------------------------"
<OBJECT TH-COMMAND-CHAIR
(LOC RM-COMMAND-MODULE)
(DESC "chair")
(FLAGS FL-NO-DESC)
(SYNONYM CHAIR)
(ADJECTIVE COMMAND)
(ACTION RT-TH-COMMAND-CHAIR)
>
<ROUTINE RT-TH-COMMAND-CHAIR ("OPT" (CONTEXT <>))
<COND
(.CONTEXT
<RFALSE>
)
(<VERB? EXAMINE>
<TELL
TAB "The chair is right in front of the main control panel." CR
>
)
(<VERB? SIT ENTER>
<RT-COMMAND-MENU>
)
>
>
<ROUTINE RT-COMMAND-MENU ("AUX" C L (ON? <>) X1 Y1 X2 Y2)
<SET X1 1>
<SET Y1 <L-PIXELS 4>>
<SET X2 <C-PIXELS 16>>
<SET Y2 <L-PIXELS 12>>
<MOUSE-LIMIT -1>
<CLEAR -1>
; "Text window"
<WINPOS 0 <+ 1 <- <LOWCORE VWRD> <* 6 ,GL-FONT-Y>>> 1>
<WINSIZE 0 <* 6 ,GL-FONT-Y> <LOWCORE HWRD>>
; "Status line -- Already defined."
; <WINPOS 1 1 1>
; <WINSIZE 1 ,GL-FONT-Y <LOWCORE HWRD>>
; "Menu window"
<WINPOS 2 <+ ,GL-FONT-Y 1> 1>
<WINSIZE 2 <- <LOWCORE VWRD> <* 7 ,GL-FONT-Y>> <LOWCORE HWRD>>
<WINPOS 7 1 1>
<WINSIZE 7 <LOWCORE VWRD> <LOWCORE HWRD>>
<SETG GL-SL-HERE <>>
<REPEAT ()
<CLEAR 2>
<UPDATE-STATUS-LINE>
<SCREEN 2>
<CURSET 1 1>
<TELL "Main menu">
<CCURSET 4 1>
<TELL "Emergency">
<CCURSET 4 15>
<TELL "E">
<CCURSET 5 1>
<TELL "ROV">
<CCURSET 5 15>
<TELL "R">
<CCURSET 6 1>
<TELL "Air">
<CCURSET 6 15>
<TELL "A">
<CCURSET 7 1>
<TELL "Power">
<CCURSET 7 15>
<TELL "P">
<CCURSET 8 1>
<TELL "Lights">
<CCURSET 8 15>
<TELL "L">
<CCURSET 9 1>
<TELL "Life Support">
<CCURSET 9 15>
<TELL "S">
<CCURSET 10 1>
<TELL "Pump">
<CCURSET 10 15>
<TELL "M">
<CCURSET 11 1>
<TELL "Exit">
<CCURSET 11 15>
<TELL "X">
<REPEAT ()
<SCREEN 0>
<SETG GL-INPUT-TIMEOUT <>>
<SET C <INPUT 1 3 ,RT-STOP-READ>>
<COND
(<NOT ,GL-INPUT-TIMEOUT>
<COND
(<EQUAL? .C ,K-CLICK1 ,K-CLICK2>
<COND
(<MOUSE-INPUT? 2 .X1 .Y1 .X2 .Y2>
<SET L <PIXELS-L ,GL-MOUSE-Y>>
<COND
(<EQUAL? .L 1>
<SET C !\e>
)
(<EQUAL? .L 2>
<SET C !\r>
)
(<EQUAL? .L 3>
<SET C !\a>
)
(<EQUAL? .L 4>
<SET C !\p>
)
(<EQUAL? .L 5>
<SET C !\l>
)
(<EQUAL? .L 6>
<SET C !\s>
)
(<EQUAL? .L 7>
<SET C !\m>
)
(T
<SET C !\x>
)
>
<RETURN>
)
(T
<SOUND ,S-BEEP>
)
>
)
(T
<COND
(<AND <G=? .C !\A>
<L=? .C !\Z>
>
<SET C <+ .C 32>> ; "Change to lower case"
)
>
<COND
(<EQUAL? .C !\e !\r !\a !\p !\l !\s !\m !\x>
<RETURN>
)
(T
<SOUND ,S-BEEP>
)
>
)
>
)
(T
<SCREEN 2>
<CCURSET 4 1>
<COND
(<SET ON? <NOT .ON?>>
<HLIGHT ,K-H-INV>
)
>
<TELL "Emergency">
<HLIGHT ,K-H-NRM>
)
>
>
<COND
(<EQUAL? .C !\e>
<RT-EMERGENCY-MENU>
)
(<EQUAL? .C !\r>
<RT-ROV-MENU>
)
(<EQUAL? .C !\a>
<RT-AIR-MENU>
)
(<EQUAL? .C !\p>
<RT-POWER-MENU>
)
(<EQUAL? .C !\l>
<RT-LIGHT-MENU>
)
(<EQUAL? .C !\s>
<RT-SUPPORT-MENU>
)
(<EQUAL? .C !\m>
<RT-PUMP-MENU>
)
(<EQUAL? .C !\x>
<RETURN>
)
>
>
<CLEAR -1>
<INIT-STATUS-LINE>
<SCREEN 0>
<TELL TAB "You get up from the command chair." CR>
>
<ROUTINE RT-EMERGENCY-MENU ("AUX" X1 Y1 X2 Y2)
<SET X1 1>
<SET Y1 <L-PIXELS 4>>
<SET X2 <C-PIXELS 25>>
<SET Y2 <L-PIXELS 6>>
<CLEAR 2>
<UPDATE-STATUS-LINE>
<SCREEN 2>
<CURSET 1 1>
<TELL "Emergency menu">
<CCURSET 4 1>
<HLIGHT ,K-H-INV>
<COND
(,GL-KLAXON-ON
<TELL "ON ">
)
(T
<TELL "OFF">
)
>
<HLIGHT ,K-H-NRM>
<CCURSET 4 4>
<TELL "Emergency klaxons">
<CCURSET 4 24>
<TELL "K">
<HLIGHT ,K-H-NRM>
<CCURSET 5 4>
<TELL "Exit">
<CCURSET 5 24>
<TELL "X">
<REPEAT ()
<SCREEN 0>
<SET C <INPUT 1>>
<COND
(<EQUAL? .C ,K-CLICK1 ,K-CLICK2>
<COND
(<MOUSE-INPUT? 2 .X1 .Y1 .X2 .Y2>
<SET L <PIXELS-L ,GL-MOUSE-Y>>
<COND
(<EQUAL? .L 1>
<SET C !\k>
)
(T
<SET C !\x>
)
>
)
>
)
(<AND <G=? .C !\A>
<L=? .C !\Z>
>
<SET C <+ .C 32>> ; "Change to lower case"
)
>
<COND
(<EQUAL? .C !\k>
<SCREEN 2>
<CCURSET 4 1>
<HLIGHT ,K-H-INV>
<COND
(<SETG GL-KLAXON-ON <NOT ,GL-KLAXON-ON>>
<RT-QUEUE ,RT-I-KLAXON <+ ,GL-MOVES 1>>
<TELL "ON ">
)
(T
<RT-DEQUEUE ,RT-I-KLAXON>
<TELL "OFF">
)
>
<HLIGHT ,K-H-NRM>
)
(<EQUAL? .C !\x>
<RETURN>
)
(T
<SOUND ,S-BEEP>
)
>
>
<RTRUE>
>
<ROUTINE RT-ROV-MENU ()
<CLEAR 2>
<UPDATE-STATUS-LINE>
<SCREEN 2>
<CURSET 1 1>
<TELL "R.O.V. menu">
<SCREEN 0>
<INPUT 1>
<RTRUE>
>
<ROUTINE RT-AIR-MENU ()
<CLEAR 2>
<UPDATE-STATUS-LINE>
<SCREEN 2>
<CURSET 1 1>
<TELL "Breathing Mix menu">
<CCURSET 4 1>
<TELL "Oxygen: ">
<RT-PRINT-FLOAT ,GL-OXYGEN-QTY ,K-OXYGEN-FACTOR>
<TELL "% - ">
<RT-GAS-LEVEL-MSG ,GL-OXYGEN-QTY ,K-OXY-LOW-1 ,K-OXY-HIGH-1 ,K-OXY-NOM>
<TELL "|Carbon dioxide: ">
<RT-PRINT-FLOAT ,GL-CO2-QTY ,K-CO2-FACTOR>
<TELL "% - ">
<RT-GAS-LEVEL-MSG ,GL-CO2-QTY -1 ,K-CO2-HIGH-1 ,K-CO2-NOM>
<TELL "|Nitrogen: ">
<RT-PRINT-FLOAT ,GL-NITROGEN-QTY ,K-NITROGEN-FACTOR>
<TELL "% - ">
<RT-GAS-LEVEL-MSG ,GL-NITROGEN-QTY ,K-NIT-LOW-1 ,K-NIT-HIGH-1 ,K-NIT-NOM>
<TELL "|Helium: ">
<RT-PRINT-FLOAT ,GL-HELIUM-QTY ,K-HELIUM-FACTOR>
<TELL "%|">
<SCREEN 0>
<INPUT 1>
<RTRUE>
>
<ROUTINE RT-GAS-LEVEL-MSG (QTY LOW HIGH NOM)
<COND
(<L=? .QTY .LOW>
<TELL "low">
)
(<G=? .QTY .HIGH>
<TELL "high">
)
(<EQUAL? .QTY .NOM>
<TELL "nominal">
)
(<L? .QTY .NOM>
<TELL "less than nominal">
)
(T
<TELL "more than nominal">
)
>
>
<ROUTINE RT-POWER-MENU ()
<CLEAR 2>
<UPDATE-STATUS-LINE>
<SCREEN 2>
<CURSET 1 1>
<TELL "Power menu">
<SCREEN 0>
<INPUT 1>
<RTRUE>
>
<ROUTINE RT-LIGHT-MENU ()
<CLEAR 2>
<UPDATE-STATUS-LINE>
<SCREEN 2>
<CURSET 1 1>
<TELL "Lighting menu">
<SCREEN 0>
<INPUT 1>
<RTRUE>
>
<ROUTINE RT-SUPPORT-MENU ("AUX" X1 Y1 X2 Y2)
<SET X1 1>
<SET Y1 <L-PIXELS 4>>
<SET X2 <C-PIXELS 28>>
<SET Y2 <L-PIXELS 9>>
<CLEAR 2>
<UPDATE-STATUS-LINE>
<SCREEN 2>
<CURSET 1 1>
<TELL "Life support menu">
<CCURSET 4 1>
<HLIGHT ,K-H-INV>
<COND
(,GL-SCRUBBERS-ON
<TELL "ON ">
)
(T
<TELL "OFF">
)
>
<HLIGHT ,K-H-NRM>
<CCURSET 4 4>
<TELL "CO2 scrubbers">
<CCURSET 4 27>
<TELL "S">
<CCURSET 5 1>
<HLIGHT ,K-H-INV>
<COND
(,GL-HEATERS-ON
<TELL "ON ">
)
(T
<TELL "OFF">
)
>
<HLIGHT ,K-H-NRM>
<CCURSET 5 4>
<TELL "Heaters">
<CCURSET 5 27>
<TELL "H">
<CCURSET 6 1>
<HLIGHT ,K-H-INV>
<TELL "ON ">
<HLIGHT ,K-H-NRM>
<CCURSET 6 4>
<TELL "Helium de-scramblers">
<CCURSET 6 27>
<TELL "D">
<CCURSET 7 1>
<HLIGHT ,K-H-INV>
<TELL "ON ">
<HLIGHT ,K-H-NRM>
<CCURSET 7 4>
<TELL "De-humidifiers">
<CCURSET 7 27>
<TELL "M">
<HLIGHT ,K-H-NRM>
<CCURSET 8 4>
<TELL "Exit">
<CCURSET 8 27>
<TELL "X">
<CCURSET 4 50>
<TELL "Interior temp:">
<CCURSET 5 50>
<RT-PRINT-FLOAT ,GL-DEEPCORE-TEMP ,K-TEMP-FACTOR>
<TELL " deg. F">
<REPEAT ()
<SCREEN 0>
<SET C <INPUT 1>>
<COND
(<EQUAL? .C ,K-CLICK1 ,K-CLICK2>
<COND
(<MOUSE-INPUT? 2 .X1 .Y1 .X2 .Y2>
<SET L <PIXELS-L ,GL-MOUSE-Y>>
<COND
(<EQUAL? .L 1>
<SET C !\s>
)
(<EQUAL? .L 2>
<SET C !\h>
)
(<EQUAL? .L 3>
<SET C !\d>
)
(<EQUAL? .L 4>
<SET C !\m>
)
(T
<SET C !\x>
)
>
)
>
)
(<AND <G=? .C !\A>
<L=? .C !\Z>
>
<SET C <+ .C 32>> ; "Change to lower case"
)
>
<COND
(<EQUAL? .C !\s>
<SETG GL-SCRUBBERS-ON <NOT ,GL-SCRUBBERS-ON>>
<SCREEN 2>
<CCURSET 4 1>
<HLIGHT ,K-H-INV>
<COND
(,GL-SCRUBBERS-ON
<TELL "ON ">
)
(T
<TELL "OFF">
)
>
<HLIGHT ,K-H-NRM>
)
(<EQUAL? .C !\h>
<SETG GL-HEATERS-ON <NOT ,GL-HEATERS-ON>>
<SCREEN 2>
<CCURSET 5 1>
<HLIGHT ,K-H-INV>
<COND
(,GL-HEATERS-ON
<TELL "ON ">
)
(T
<TELL "OFF">
)
>
<HLIGHT ,K-H-NRM>
)
(<EQUAL? .C !\d>)
(<EQUAL? .C !\m>)
(<EQUAL? .C !\x>
<RETURN>
)
(T
<SOUND ,S-BEEP>
)
>
>
<RTRUE>
>
;<GLOBAL GL-PT-BILGE-ON <> <> BYTE>
;<GLOBAL GL-SB-BILGE-ON <> <> BYTE>
<GLOBAL GL-WATER-PUMP-ON <> <> BYTE>
<ROUTINE RT-PUMP-MENU ("AUX" X1 Y1 X2 Y2)
<SET X1 1>
<SET Y1 <L-PIXELS 4>>
<SET X2 <C-PIXELS 24>>
<SET Y2 <L-PIXELS 6>>
<CLEAR 2>
<UPDATE-STATUS-LINE>
<SCREEN 2>
<CURSET 1 1>
<TELL "Pump and compressor menu">
<CCURSET 4 1>
<HLIGHT ,K-H-INV>
<COND
(,GL-WATER-PUMP-ON
<TELL "ON ">
)
(T
<TELL "OFF">
)
>
<HLIGHT ,K-H-NRM>
<CCURSET 4 4>
<TELL "Fresh water pumps">
<CCURSET 4 23>
<TELL "P">
; <CCURSET 4 1>
; <HLIGHT ,K-H-INV>
; <COND
(,GL-PT-BILGE-ON
<TELL "ON ">
)
(T
<TELL "OFF">
)
>
; <HLIGHT ,K-H-NRM>
; <CCURSET 4 4>
; <TELL "Port bilge pumps">
; <CCURSET 4 27>
; <TELL "P">
; <CCURSET 5 1>
; <HLIGHT ,K-H-INV>
; <COND
(,GL-SB-BILGE-ON
<TELL "ON ">
)
(T
<TELL "OFF">
)
>
; <HLIGHT ,K-H-NRM>
; <CCURSET 5 4>
; <TELL "Starboard bilge pumps">
; <CCURSET 5 27>
; <TELL "S">
<HLIGHT ,K-H-NRM>
<CCURSET 5 4>
<TELL "Exit">
<CCURSET 5 23>
<TELL "X">
<REPEAT ()
<SCREEN 0>
<SET C <INPUT 1>>
<COND
(<EQUAL? .C ,K-CLICK1 ,K-CLICK2>
<COND
(<MOUSE-INPUT? 2 .X1 .Y1 .X2 .Y2>
<SET L <PIXELS-L ,GL-MOUSE-Y>>
<COND
(<EQUAL? .L 1>
<SET C !\p>
)
; (<EQUAL? .L 2>
<SET C !\s>
)
(T
<SET C !\x>
)
>
)
>
)
(<AND <G=? .C !\A>
<L=? .C !\Z>
>
<SET C <+ .C 32>> ; "Change to lower case"
)
>
<COND
(<EQUAL? .C !\p>
<SCREEN 2>
<CCURSET 4 1>
<HLIGHT ,K-H-INV>
<COND
(<SETG GL-WATER-PUMP-ON <NOT ,GL-WATER-PUMP-ON>>
<TELL "ON ">
)
(T
<TELL "OFF">
)
>
<HLIGHT ,K-H-NRM>
)
; (<EQUAL? .C !\s>
<SCREEN 2>
<CCURSET 5 1>
<HLIGHT ,K-H-INV>
<COND
(<SETG GL-SB-BILGE-ON <NOT ,GL-SB-BILGE-ON>>
<TELL "ON ">
)
(T
<TELL "OFF">
)
>
<HLIGHT ,K-H-NRM>
)
(<EQUAL? .C !\x>
<RETURN>
)
(T
<SOUND ,S-BEEP>
)
>
>
<RTRUE>
>
;"---------------------------------------------------------------------------"
; "TH-DESCRAMBLER-CONTROL-BOX"
;"---------------------------------------------------------------------------"
<OBJECT TH-DESCRAMBLER-CONTROL-BOX
(LOC TH-BIN)
(DESC "descrambler control box")
(MENU "control box")
(SYNONYM DESCRAMBLER BOX)
(ADJECTIVE CONTROL DESCRAMBLER)
(ACTION RT-TH-DESCRAMBLER-CONTROL-BOX)
>
<ROUTINE RT-TH-DESCRAMBLER-CONTROL-BOX ("OPT" (CONTEXT <>))
<RFALSE>
>
;"***************************************************************************"
; "end of file"
;"***************************************************************************"