Revision 15 (Original Source)

This commit is contained in:
historicalsource 2019-04-13 22:34:27 -04:00
commit 18809a2b43
39 changed files with 20959 additions and 0 deletions

1
README.md Normal file
View file

@ -0,0 +1 @@
# seastalker

26
atari.errors Normal file
View file

@ -0,0 +1,26 @@
Assembling J1.XZAP.8
Inserting J1FREQ.XZAP.7 ( 620 bytes)
Inserting J1DAT.ZAP.2 (22305 bytes)
Inserting MACROS.ZAP.2 ( 104 bytes)
Inserting MAIN.ZAP.2 ( 2259 bytes)
Inserting CLOCK.ZAP.2 ( 186 bytes)
Inserting SUB.ZAP.4 (16333 bytes)
Inserting BATTLE.ZAP.2 ( 5651 bytes)
Inserting DOME.ZAP.3 ( 9902 bytes)
Inserting PLACES.ZAP.2 ( 4753 bytes)
Inserting PEOPLE.ZAP.3 (15561 bytes)
Inserting THINGS.ZAP.2 ( 2058 bytes)
Inserting GLOBAL.ZAP.2 ( 5836 bytes)
Inserting PARSER.ZAP.2 ( 5735 bytes)
Inserting SYNTAX.ZAP.3 ( 778 bytes)
Inserting VERBS.ZAP.3 (15666 bytes)
Inserting EVENTS.ZAP.2 ( 7364 bytes)
Inserting J1STR.ZAP.1 ( 2553 bytes)
25538 bytes of preload.
117728 bytes (115K).
32736 bytes too large for one-disk game on ATARI.
255 objects.
239 globals.

19
atari.xzap Normal file
View file

@ -0,0 +1,19 @@
.INSERT "J1FREQ"
.INSERT "J1DAT"
.INSERT "MACROS"
.INSERT "MAIN"
.INSERT "CLOCK"
ENDLOD::
.INSERT "SUB"
.INSERT "BATTLE"
.INSERT "DOME"
.INSERT "PLACES"
.INSERT "PEOPLE"
.INSERT "THINGS"
.INSERT "GLOBAL"
.INSERT "PARSER"
.INSERT "SYNTAX"
.INSERT "VERBS"
.INSERT "EVENTS"
.INSERT "J1STR"
.END

BIN
atari.zip Normal file

Binary file not shown.

639
battle.zil Normal file
View file

@ -0,0 +1,639 @@
"BATTLE for SEASTALKER
Copyright (C) 1984 Infocom, Inc. All rights reserved."
<GLOBAL SUB-IN-BATTLE <>>
<GLOBAL THORPE-LON 0> "position"
<GLOBAL THORPE-LAT 0>
<GLOBAL THORPE-DLON -1> "motion"
<GLOBAL THORPE-DLAT +1>
<GLOBAL THORPE-HLON -1> "heading"
<GLOBAL THORPE-HLAT +1>
<GLOBAL SNARK-LON +1> "position"
<GLOBAL SNARK-LAT -1>
<GLOBAL SNARK-HLON -1> "heading"
<GLOBAL SNARK-HLAT +1>
<GLOBAL SNARK-TRANKED <>>
<ROUTINE THORPE-SHOOT? (X Y)
<COND (,SNARK-TRANKED
<FORWARD-OF-THORPE? .X .Y>)
(T
<AND <STARBOARD-OF-THORPE? .X .Y>
<FORWARD-OF-THORPE? .X .Y>>)>>
<ROUTINE STARBOARD-OF-THORPE? (X Y)
<COND (<NOT <G? 0 <- <* ,THORPE-HLAT <- .X ,THORPE-LON>>
<* ,THORPE-HLON <- .Y ,THORPE-LAT>>>>>
<RTRUE>)
(T <RFALSE>)>>
<ROUTINE FORWARD-OF-THORPE? (X Y)
<COND (<NOT <G? 0 <- <* ,THORPE-HLON <- .X ,THORPE-LON>>
<* ,THORPE-HLAT <- ,THORPE-LAT .Y>>>>>
<RTRUE>)
(T <RFALSE>)>>
<ROUTINE THORPE-POS? (LON LAT)
<COND (<NOT <==? ,SUB-DEPTH ,AIRLOCK-DEPTH>>
<RFALSE>)
(<AND <==? .LAT <- ,THORPE-LAT ,THORPE-HLAT>>
<==? .LON <- ,THORPE-LON ,THORPE-HLON>>>
<RTRUE>)
(<AND <==? .LAT ,THORPE-LAT>
<==? .LON ,THORPE-LON>>
<RTRUE>)>>
<ROUTINE SNARK-POS? (LON LAT)
<OR <SNARK-HEAD-POS? .LON .LAT>
<SNARK-TAIL-POS? .LON .LAT>>>
<ROUTINE SNARK-HEAD-POS? (LON LAT)
<COND (<NOT <==? ,SUB-DEPTH ,AIRLOCK-DEPTH>>
<RFALSE>)
(<AND <==? .LAT ,SNARK-LAT> <==? .LON ,SNARK-LON>>
<RTRUE>)>>
<ROUTINE SNARK-TAIL-POS? (LON LAT "AUX" X Y HLON HLAT)
<COND (<NOT <==? ,SUB-DEPTH ,AIRLOCK-DEPTH>>
<RFALSE>)
(,SNARK-TRANKED
<SET HLON ,SNARK-HLON>
<SET HLAT ,SNARK-HLAT>)
(T
<SET HLON ,THORPE-HLON>
<SET HLAT ,THORPE-HLAT>)>
<SET X <- ,SNARK-LON .HLON>>
<SET Y <- ,SNARK-LAT .HLAT>>
<COND (<AND <==? .LAT .Y> <==? .LON .X>>
<RTRUE>)>
<SET X <- .X .HLON>>
<SET Y <- .Y .HLAT>>
<COND (<AND <==? .LAT .Y> <==? .LON .X>>
<RTRUE>)>
<COND (<AND <==? .LAT <- .Y .HLAT>>
<==? .LON <- .X .HLON>>>
<RTRUE>)>>
<OBJECT SNARK
(IN SUB)
(FLAGS NDESCBIT INVISIBLE)
(DESC "Snark")
(ADJECTIVE SEA THIS HUGE)
(SYNONYM SNARK MONSTER SLUG CREATURE ;BOOJUM)
(VALUE 5)
(ACTION THORPE-SUB-F)>
<OBJECT THORPE-SUB
(IN SUB)
(FLAGS NDESCBIT INVISIBLE ;NARTICLEBIT)
(DESC "Sea Cat" ;"Thorpe's tractor")
(ADJECTIVE DOCTOR DOC\'S JEROME THORPE MARINE AQUATIC SEA POWER)
(SYNONYM TRACTOR ;SUB CAT SEACAT POD)
(VALUE 5)
(TEXT "(You'll find that information in your SEASTALKER package.)")
(ACTION THORPE-SUB-F)>
<ROUTINE THORPE-SUB-F ()
<COND (<VERB? FIND> <TELL "It's not far away!" CR>)
(<VERB? MOVE PUSH> <TELL "It's too big!" CR>)
(<VERB? SHOOT KILL ATTACK>
%<XTELL
"You have to shoot" THE-PRSO " with a weapon." CR>)
(<VERB? WALK-TO> <TELL "You're the pilot!" CR>)>>
<GLOBAL THORPE-TURNING? <>>
<ROUTINE I-UPDATE-THORPE ("AUX" DLAT DLON Z)
<COND (,SUB-IN-BATTLE
<SET Z <* ,THORPE-HLON ,THORPE-HLAT>>
<COND (<NOT <THORPE-SHOOT? ,SUB-LON ,SUB-LAT>>
<COND (<AND <0? ,THORPE-DLON> <0? ,THORPE-DLAT>>
<SETG THORPE-TURNING? <NOT ,THORPE-TURNING?>>
<COND (,THORPE-TURNING? T)
(<STARBOARD-OF-THORPE? ,SUB-LON ,SUB-LAT>
<COND (<0? ,THORPE-HLON>
<SETG THORPE-HLON ,THORPE-HLAT>)
(<==? -1 .Z>
<SETG THORPE-HLON 0>)
(<==? +1 .Z>
<SETG THORPE-HLAT 0>)
(T <SETG THORPE-HLAT <- ,THORPE-HLON>>)>)
(T
<COND (<0? ,THORPE-HLON>
<SETG THORPE-HLON <- ,THORPE-HLAT>>)
(<==? -1 .Z>
<SETG THORPE-HLAT 0>)
(<==? +1 .Z>
<SETG THORPE-HLON 0>)
(T <SETG THORPE-HLAT ,THORPE-HLON>)>)>)
(T <SETG THORPE-DLON 0> <SETG THORPE-DLAT 0>)>
;<COND (,DEBUG
<TELL "[T-HLon=" N ,THORPE-HLON
", T-HLat=" N ,THORPE-HLAT "]" CR>)>)
(T
%<XTELL
"Thorpe zeroed in on you and fired his rocket! It streaks through the
water toward the " D ,SUB "! In an instant your sub will be just twisted
metal, trapping you and Tip forever in Davy Jones's locker!">
<FINISH>)>)>
<SETG THORPE-LON <+ ,THORPE-LON ,THORPE-DLON>>
<SETG THORPE-LAT <+ ,THORPE-LAT ,THORPE-DLAT>>
;<COND (,DEBUG
<TELL "[T-Lon=" N ,THORPE-LON ", T-Lat=" N ,THORPE-LAT "]"CR>)>
<SET Z <* ,THORPE-HLON ,THORPE-HLAT>>
<COND (<0? .Z>
<COND (<0? ,THORPE-HLAT>
<SETG SNARK-LAT <+ ,THORPE-LAT ,THORPE-HLON>>
<SETG SNARK-LON <+ ,THORPE-LON ,THORPE-HLON>>)
(T
<SETG SNARK-LAT <+ ,THORPE-LAT ,THORPE-HLAT>>
<SETG SNARK-LON <- ,THORPE-LON ,THORPE-HLAT>>)>)
(<==? -1 .Z>
<SETG SNARK-LON <+ ,THORPE-LON ,THORPE-HLON>>
<SETG SNARK-LAT ,THORPE-LAT>)
(<==? +1 .Z>
<SETG SNARK-LAT <+ ,THORPE-LAT ,THORPE-HLAT>>
<SETG SNARK-LON ,THORPE-LON>)>
<RFALSE>>
<GLOBAL LON-AIMED-AT <TABLE 0 0>>
<GLOBAL LAT-AIMED-AT <TABLE 0 0>>
<GLOBAL OBJ-AIMED-AT <TABLE 0 0>>
<GLOBAL ALREADY-SHOT <TABLE <> <>>>
<GLOBAL ON-SUB <TABLE <> <>>>
<OBJECT DART
(IN DOME-LAB ;GLOBAL-OBJECTS)
(DESC "dart gun")
(ADJECTIVE AQUATIC DART TRANQUILIZER TRANK)
(SYNONYM DART GUN WEAPON)
(FLAGS WEAPONBIT MUNGBIT ;TAKEBIT TRYTAKEBIT NDESCBIT)
(LDESC "There's a dart gun here.") ;"need prop to change later"
(TEXT "(You'll find that information in your SEASTALKER package.)")
(VALUE 5)
(ACTION DART-F)>
<ROUTINE DART-F () <WEAPON-F ,DART>>
<ROUTINE MOUNTING-VERB? (OBJ)
<COND (<NOT ,SUB-IN-DOME> <RFALSE>)
(<AND <EQUAL? ,PRSO .OBJ>
<OR <VERB? USE>
<AND <VERB? PUT-UNDER>
<DOBJ? ESCAPE-POD-UNIT>
<IOBJ? CHAIR PILOT-SEAT>>
<AND <VERB? PUT TIE-TO>
<IOBJ? GLOBAL-SUB LOCAL-SUB CLAW ;GLOBAL-HERE>>>>
<RTRUE>)
;(<AND <EQUAL? ,PRSI .OBJ>
<AND <VERB? TELL-ABOUT ASK-ABOUT>
<FSET? ,PRSO ,PERSON>>>
<RTRUE>)>>
<ROUTINE NO-GOOD-MUNGED ()
%<XTELL
"Doc Horvak has to fix it first." CR>>
<ROUTINE WEAPON-F (OBJ "AUX" (WHICH 0) O (NOT-ON-SUB <>) (SOMEONE <>))
<COND (<BAD-AIR?> ;<FSET? ,BLY ,MUNGBIT>
<RTRUE>)
(<VERB? FIND SEARCH-FOR TAKE> T)
(<MOUNTING-VERB? .OBJ> T)
(<REMOTE-VERB?> <RFALSE>)>
<COND (<EQUAL? .OBJ ,DART>
<SET WHICH 1>)>
<COND (<NOT <==? .OBJ <GET ,ON-SUB .WHICH>>>
<SET NOT-ON-SUB T>)>
<COND (<AND <NOT ,SUB-IN-DOME> .NOT-ON-SUB>
%<XTELL "You can't use" THE .OBJ " now!" CR>
<RTRUE>)>
<COND (.NOT-ON-SUB
<COND (<VERB? FIND SEARCH-FOR>
<COND (<AND <EQUAL? ,HERE <LOC .OBJ>>
<NOT <FSET? .OBJ ,TOUCHBIT>>>
<FCLEAR .OBJ ,NDESCBIT>
<HE-SHE-IT ,WINNER T "find">
<TELL " it among lots of equipment and supplies." CR>)>)
(<VERB? TAKE>
<COND (<1? .WHICH>
<FCLEAR ,DART ,NDESCBIT>
<COND (<FSET? ,DART ,MUNGBIT>
<NO-GOOD-MUNGED>)>)>)
(<MOUNTING-VERB? .OBJ>
<COND (<NOT <==? ,WINNER ,PLAYER>> <SET SOMEONE ,WINNER>)
(<SET SOMEONE <FIND-FLAG ,HERE ,PERSON ,PLAYER>> T)>
<COND (<NOT .SOMEONE>
<COND (<NOT <==? ,HERE <META-LOC .OBJ>>>
<NOT-HERE .OBJ>
<RTRUE>)
(<NOT <==? ,HERE ,AIRLOCK>>
<NOT-HERE ,CLAW>
<RTRUE>)>)>
<COND (<0? .WHICH>
<COND (<AND .SOMEONE <NOT <==? ,HERE ,AIRLOCK>>>
%<XTELL
"\"Good idea! That should stop the " D ,SNARK "! It could disable an
enemy sub, too! Shall I ">
<COND (<VERB? PUT> <TELL "do it">)
(T
<TELL "have it mounted">
<COND (<NOT <IOBJ? CLAW>>
<TELL
" on an " D ,CLAW " of the " D ,SUB>)>)>
<TELL "?\"">
<COND (<YES?>
<MOUNT-WEAPON ,BAZOOKA>
<FINE-SEQUENCE>)>
<RTRUE>)
(T
<MOUNT-WEAPON ,BAZOOKA>
<OKAY ,BAZOOKA "mounted">
<FINE-SEQUENCE>
<RTRUE>)>)
(<FSET? ,DART ,MUNGBIT>
<NO-GOOD-MUNGED>)
(T
<MOUNT-WEAPON ,DART>
<COND (<AND .SOMEONE <NOT <==? ,HERE ,AIRLOCK>>>
%<XTELL
D .SOMEONE " promptly mounts the " D ,DART " on an " D ,CLAW "." CR>)
(T
<OKAY ,DART "mounted">)>
<COND (<==? ,BAZOOKA <GET ,ON-SUB 0>>
<FINE-SEQUENCE>)>
<RTRUE>)>)>)
(T
<COND (<VERB? FIND EXAMINE>
%<XTELL
"It's mounted on one of the " D ,SUB "'s " D ,CLAW "s." CR>)
(<OR <VERB? TAKE> <MOUNTING-VERB? .OBJ>>
%<XTELL "You'd better leave it mounted on the " D ,CLAW "."CR>)
(<REMOTE-VERB?> <RFALSE>)
;(,SUB-IN-DOME ;<NOT <EQUAL? ,HERE ,SUB>>
%<XTELL
"You shouldn't do that inside the " D ,AQUADOME "!" CR>)
(<VERB? MOVE MOVE-DIR>
%<XTELL "You should type where you want to aim it." CR>)
(<VERB? AIM>
<COND (<FSET? ,CLAW ,MUNGBIT>
<TELL
"Nothing happens. Either the " D ,CLAW " or the " D .OBJ " was damaged
when you rammed the " D ,SNARK "!" CR>
<RTRUE>)
(<IOBJ? THORPE-SUB GLOBAL-THORPE>
<COND (<NOT <STARBOARD-OF-THORPE? ,SUB-LON ,SUB-LAT>>
<YOU-CANT "aim" ,GLOBAL-SNARK "in the way">
<RTRUE>)
(T
<COND (,SUB-IN-BATTLE <SCORE-OBJ ,THORPE-SUB>)>
<PUT ,OBJ-AIMED-AT .WHICH ,THORPE-SUB>
<PUT ,LON-AIMED-AT .WHICH ,THORPE-LON>
<PUT ,LAT-AIMED-AT .WHICH ,THORPE-LAT>)>)
(<IOBJ? SNARK GLOBAL-SNARK>
<PUT ,OBJ-AIMED-AT .WHICH ,SNARK>
<PUT ,LON-AIMED-AT .WHICH ,SNARK-LON>
<PUT ,LAT-AIMED-AT .WHICH ,SNARK-LAT>)
(T <RFALSE>)>
;<COND (<AND ,DEBUG <GET ,OBJ-AIMED-AT .WHICH>>
<TELL "[at: " D <GET ,OBJ-AIMED-AT .WHICH> "] ">)>
%<XTELL "Aimed." CR>)
(<VERB? SHOOT KILL ATTACK>
<SET O <GET ,OBJ-AIMED-AT .WHICH>>
<COND (<GET ,ALREADY-SHOT .WHICH>
%<XTELL "You already shot" THE-PRSI "!" CR>
<RTRUE>)
(<NOT .O>
%<XTELL "You have to aim it first!" CR>
<RTRUE>)>
;<COND (<0? .I> <SET I ,PRSO>)>
<COND (<OR <AND <==? ,THORPE-SUB .O>
<NOT <DOBJ? THORPE-SUB GLOBAL-THORPE>>>
<AND <==? ,SNARK .O>
<NOT <DOBJ? SNARK GLOBAL-SNARK>>>>
%<XTELL "You didn't aim it at" THE-PRSO "." CR>
<RTRUE>)>
<COND (<DOBJ? THORPE-SUB GLOBAL-THORPE>
<COND (<AND <==? <GET ,LON-AIMED-AT .WHICH> ,THORPE-LON>
<==? <GET ,LAT-AIMED-AT .WHICH>,THORPE-LAT>>
<PUT ,ALREADY-SHOT .WHICH T>
<COND (<0? .WHICH> <MUNG-TARGET>)
(T
%<XTELL
"Fudge! Your tranquilizer dart hit the " D ,THORPE-SUB ", and its metal hull can't
be put to sleep! Tough luck, "FN"." CR>)>)
(T
<TOO-BAD-BUT ,PRSO>
<TELL " moved since you aimed." CR>)>)
(<DOBJ? SNARK GLOBAL-SNARK>
<COND (<AND <==? <GET ,LON-AIMED-AT .WHICH> ,SNARK-LON>
<==? <GET ,LAT-AIMED-AT .WHICH> ,SNARK-LAT>>
<PUT ,ALREADY-SHOT .WHICH T>
<SETG SNARK-TRANKED T>
<SETG SNARK-HLON ,THORPE-HLON>
<SETG SNARK-HLAT ,THORPE-HLAT>
<COND (<0? .WHICH>
%<XTELL
"KA-VOOOM! The " D ,SNARK " shudders and stops moving! You scored a
clean hit with your " D ,BAZOOKA "!|
">
<TIP-SAYS>
<TELL
"Rats! There goes our safety shield!\" And he's right.
Even though you've saved the " D ,AQUADOME " from further danger of
monster attack, the " D ,SUB " is now exposed to the " D ,THORPE-SUB
"'s rocket weapon!" CR>)
(T %<XTELL
"Right on! The dart hits the " D ,SNARK " and sticks out of its side.
The tranquilizer spreads through the " D ,SNARK ", sending it to Slumberland.|
But this may have been a bad move. With the " D ,SNARK " fast asleep, its
huge body can't hide you from the " D ,THORPE-SUB "'s rocket attack!"
CR>)>)
(T
<TOO-BAD-BUT ,PRSO>
<TELL " moved since you aimed." CR>)>)
;(T <RFALSE>)>)>)>>
<ROUTINE MUNG-TARGET ()
<SCORE-UPD 5>
<FSET ,PRSO ,MUNGBIT>
%<XTELL
"Great! You and Tip can see" THE-PRSI " slam into the " D ,THORPE-SUB"'s power
pod!|
\"Hooray! That crippled the " D ,THORPE-SUB " for keeps!\" Tip cheers.|
You hear a voice come over the " D ,SONARPHONE ": ">
<REPEAT ()
<TELL "\"" FN ", this is Sharon! Do you read me?\"">
<COND (<YES?> <RETURN>)>>
%<XTELL
"\"Something hit us, and Thorpe's out cold! He cracked his skull on the
bulkhead! I was waking up when I saw it all happen. I'll tie him up so
he can't cause any trouble.|
The " D ,THORPE-SUB "'s regular engine is kaput, but he installed a
backup engine for emergencies. And the sonar control's still working. If
you like, I'll guide the monster to its cavern.\"|
">
<COND (<NOT <0? <GETP ,GREENUP ,P?VALUE>>>
<TIP-SAYS>
<TELL
"It's too bad we didn't find the " D ,TRAITOR " at the " D ,AQUADOME ".\"|
">)>
<TELL "|
CONGRATULATIONS, ">
<PRINT-NAME ,FIRST-NAME T>
%<XTELL
"! YOU'VE COMPLETED YOUR MISSION!!">
<FINISH>>
<ROUTINE MOUNT (WHICH WEAPON "AUX" OBJ)
<COND (<SET OBJ <GET ,ON-SUB .WHICH>> <MOVE .OBJ ,AIRLOCK>)>
<PUT ,ON-SUB .WHICH .WEAPON>
;<COND (<EQUAL? ,HERE ,SUB ,CRAWL-SPACE> <MOVE .WEAPON ,SUB>)
(T <MOVE .WEAPON ,AIRLOCK>)>>
<ROUTINE MOUNT-WEAPON (OBJ)
<COND (<==? .OBJ ,BAZOOKA>
<SCORE-OBJ ,BLY>
<PUTP ,BAZOOKA ,P?LDESC "The bazooka is mounted on a claw.">
<COND (<NOT <0? <GETP ,BAZOOKA ,P?VALUE>>>
<TELL "\"Of course I'll have to get it first.\"" CR>
<SCORE-OBJ ,BAZOOKA>)>
<MOUNT 0 ,BAZOOKA>)
(<==? .OBJ ,DART>
<PUTP ,DART ,P?LDESC "The dart is mounted on a claw.">
<SCORE-OBJ ,HORVAK>
<MOUNT 1 ,DART>)
(<GET ,ON-SUB 0>
<COND (<GET ,ON-SUB 1>
<TELL "The claws are holding all they can." CR>
<RFALSE>)
(T <PUT ,ON-SUB 1 .OBJ>)>)
(T <PUT ,ON-SUB 0 .OBJ>)>
<COND (<EQUAL? ,HERE ,SUB ,CRAWL-SPACE> <MOVE .OBJ ,SUB>)
(,SUB-IN-DOME <MOVE .OBJ ,AIRLOCK>)
(T <MOVE .OBJ ,NORTH-TANK-AREA>)>
<FSET .OBJ ,NDESCBIT>
<FCLEAR .OBJ ,TAKEBIT>
<FSET .OBJ ,TRYTAKEBIT>>
<ROUTINE FINE-SEQUENCE ()
<COND (<NOT ,TIP-FOLLOWS-YOU?>
<RFALSE>)
(<READY-FOR-SNARK?>
<RFALSE>)>
<MOVE-HERE-NOT-SUB ,BLY>
%<XTELL "\"Are you ready to take off now, "FN"?\" Zoe Bly "
<COND (<IN? ,BLY ,HERE> "ask") (T "shout")>
"s anxiously.">
<COND (<NOT <YES?>> <RFALSE>)>
%<XTELL "\"Wait!\" Tip cuts in. ">
<SETG WINNER ,PLAYER>
<PERFORM ,V?ASK-ABOUT ,TIP ,FINE-GRID>>
<OBJECT BAZOOKA
(IN DOME-STORAGE)
(DESC "bazooka")
(ADJECTIVE 49-ER 49ER PROSPECTING)
(SYNONYM BAZOOKA GUN WEAPON)
(FLAGS NDESCBIT WEAPONBIT TAKEBIT)
(LDESC "There's a bazooka here.") ;"need prop to change later"
(TEXT "(You'll find that information in your SEASTALKER package.)")
(VALUE 5)
(ACTION BAZOOKA-F)>
<ROUTINE BAZOOKA-F () <WEAPON-F ,BAZOOKA>>
<ROUTINE I-THORPE-APPEARS ()
<COND (<OR <G? +17 ,SUB-LON>
<L? -17 ,SUB-LAT>
<NOT <==? ,SUB-DEPTH ,AIRLOCK-DEPTH>>>
<COND (<L? 40 <- ,MOVES ,LEFT-DOME>>
<SETG LEFT-DOME ,MOVES>
%<XTELL "Suddenly ">
<TIP-SAYS>
<TELL
;"Say, " FN ", what " D ,INTDIR " do you think the " D
,SNARK " went, anyway?\"" CR>)>)
(T
<QUEUE I-SNARK-ATTACKS 0>
<QUEUE I-THORPE-APPEARS 0>
<ENABLE <QUEUE I-THORPE-AWAKES 9 ;-1>>
<FSET ,SEARCH-BEAM ,ONBIT>
%<XTELL
"\"Holy halibut!\" cries Tip. \"There's a big cloud of silt ahead in the "
D ,SEARCH-BEAM ". It's out of sonar range. This
could be the " D ,SNARK "! Want to hold course till we find out?\"">
<YES?>
%<XTELL
"However you steer, the cloud holds steady.
You may be on a collision course with the behemoth
that almost wrecked the " D ,AQUADOME "!|
">
%<XTELL
"Your " D ,SEARCH-BEAM " reveals TWO
objects dead ahead!|
One is the " D ,SNARK ". To the left of the tentacled
creature -- YOUR left -- you can make out a vehicle
crawling along the ocean floor.|
">
<TIP-SAYS>
<TELL
"That's one of your Sea Cats!\"|
A voice crackles over the " D ,SONARPHONE ": \"This is " D ,GLOBAL-THORPE
", " FN "! Do you read me?\"">
<YES?>
%<XTELL
"Your answer brings a rasping laugh. \"Of course
you read me, or you wouldn't be answering!
Your " D ,LAB-ASSISTANT
", " D ,SHARON ", is
seated behind me. She'll enjoy what's about to happen as much as I will.
Would you like to hear what's in store for you?\"">
<COND (<NOT <YES?>>
<TELL "\"You'll soon find out -- like it or not! ">)
(T <TELL "\"">)>
%<XTELL
"I'll blast your sub with a rocket! Then I'll guide my
synthetic monster to the " D ,AQUADOME " to destroy it! Can you guess
what sealed your doom, " FN "?\"">
<COND (<NOT <YES?>> <TELL "\"">)
(T <TELL "\"I'll tell you anyhow. ">)>
%<XTELL
;"Your undersea research station must be eliminated, so I'll have"
"I want to own the " D ,ORE-NODULES " near the " D ,AQUADOME
"! Sharon and I consider it a wedding present from you and your dad ...\"|
Thorpe breaks off with a sudden gulp, followed by some noise and
then a soft female voice:|
">
<REPEAT ()
<TELL "\"This is " D ,SHARON ", " FN "! Do you read me?\"">
<COND (<YES?>
<RETURN>)>>
<PHONE-ON ,GLOBAL-SHARON ,THORPE-SUB ,SONARPHONE ;,SUB>
<ENABLE <QUEUE I-UPDATE-THORPE -1>>
<FCLEAR ,SNARK ,INVISIBLE>
<FCLEAR ,THORPE-SUB ,INVISIBLE>
<SETG THORPE-LON <+ 2 <+ ,SUB-LON ,SONAR-RANGE>>>
<SETG THORPE-LAT <- ,SUB-LAT ,SONAR-RANGE>>
<SETG SNARK-LON <+ ,THORPE-LON ,THORPE-HLON>>
<SETG SNARK-LAT ,THORPE-LAT>
<FSET ,THORPE ,MUNGBIT>
%<XTELL
"\"Thank goodness! I conked Thorpe with a wrench! He fell onto the
microphone, and he's too heavy for me to move!\"" CR>
<SCORE-OBJ ,SNARK>
<RFATAL>)>>
<ROUTINE SHARON-EXPLAINS ()
<COND (<NOT <VERB? SAY>>
<TELL
"\"Wait a second, "FN", till I catch my breath!\" Sharon cuts in. ">)>
<SHARON-ABOUT-THORPE>
<TELL "\"Can I interrupt, "FN"?\" asks Tip.">
<COND (<NOT <YES?>>
<TIP-SAYS>
%<XTELL
"Sorry, but I have to. This is important.\"|
">)>
%<XTELL
"\"Sharon, how does Thorpe control the monster?\"|
\"By sonar pulse signals,\" she replies. " ,SHARON-ABOUT-MONSTER "|
\"Is the transducer sending out signals now?\" Tip asks her.|
\"Yes, it operates all the time. Can you make out our position on your "
D ,SONARSCOPE "?\"|
\"Thanks to the " D ,FINE-GRID "!\" says Tip.">
<COND (<NOT <0? ,THROTTLE-SETTING>>
<SETG THROTTLE-SETTING 0>
<TELL
" \"Maybe we'd better stop the " D ,SUB " before we collide with you!\"|
Tip uses his dual-control throttle to stop your sub.
Then he adds apologetically:
\"This isn't mutiny, "FN"! I just figured we should stop now.\"">)>
<CRLF>
%<XTELL ,SHARON-ABOUT-CAT "|
\"Was it out of control when it attacked the " D ,AQUADOME "?\" asks Tip.|
\"Oh no!\" Sharon replies. ">
<REPEAT ()
%<XTELL
"\"Thorpe has a helper at the " D ,AQUADOME " who put a
" D ,BLACK-BOX " on the " D ,SONAR-EQUIPMENT ", which made it emit signals to
ATTRACT the monster and make it attack. Do you follow me so far, " FN "?\"">
<COND (<YES?> <RETURN>)>>
%<XTELL
"\"Good. Before that first attack, Thorpe got the monster close enough
for the " D ,BLACK-BOX " to take over. Then he surfaced near " D ,BAY
" to get me.
By the time we went back to the ocean floor, something had gone wrong: the " D
,AQUADOME " was okay, and the monster had wandered off to its cavern.
That reminds me, "FN". ">
<REPEAT ()
%<XTELL
"Do you want to take the monster to its cavern peacefully? (With no
more sonar pulse input, it'll stay there till you're ready to study it
scientifically.)\"">
<COND (<YES?> <RETURN>)>
%<XTELL
"(Better listen, "FN". Sharon's trying to show you how to deal with
this threat to the " D ,AQUADOME ".)|
\"">>
%<XTELL
"\"First tell me, "FN": do you have any tranquilizer or weapon
to use against it?\"">
<COND (<YES?>
%<XTELL "\"Do you want to capture it for scientific study?\"">
<COND (<YES?>
%<XTELL
"\"Then try the following:|
Position your sub on the other side of the monster -- on the monster's
LEFT side -- just 5 meters from it. If anything goes wrong and it gets out
of control, you can tranquilize it immediately.\"" CR>)
(T <TELL "\"That's odd! I thought you would.\"" CR>)>)>
<RTRUE>>
<ROUTINE SHARON-ABOUT-THORPE ()
%<XTELL
"\"I'm not in on Thorpe's plot, "FN". I'm playing along, trying to wreck
his plans. I know it was risky for me to leave that " D
,CATALYST-CAPSULE " out of the " D ,SUB>
<COND (,SHARON-BROKE-CIRCUIT
<TELL ", and to open that " D ,CIRCUIT-BREAKER>)>
<TELL
", but it was part of my plan, and you got to the " D ,AQUADOME " anyway.\""
CR>>
<GLOBAL SHARON-ABOUT-MONSTER
"\"It's sensitive to the signals on its RIGHT side.
Thorpe has installed a sonar transducer on the LEFT or
PORT side of this sub. He has to stay on the same side of
the monster all the time.\"">
<GLOBAL SHARON-ABOUT-CAT
"Sharon says, \"Notice how we keep 5 meters to the monster's right and 5
meters behind its nose.
The Sea Cat is programmed that way, so the signals reach
the monster with enough strength to keep it in control.\"">
<ROUTINE I-THORPE-AWAKES ()
<FCLEAR ,THORPE ,MUNGBIT>
<SETG SUB-IN-BATTLE T>
<PHONE-OFF>
<PHONE-ON ,GLOBAL-THORPE ,THORPE-SUB ,SONARPHONE>
%<XTELL CR
"Suddenly the sonarphone gets louder.|
">
<TIP-SAYS>
<TELL
"That could mean Thorpe is awake and has moved away from the microphone!\"|
You hear a sharp cry of pain from Sharon, then Thorpe yelling: \"That'll
take care of you, my little double-crosser!\"|
Thorpe speaks into the microphone: \"Now then, "FN" "LN", I'm stopping my "
D ,THORPE-SUB " so I can blow you into
Kingdom Come as soon as you're in my sights!\"|
">
<COND (<NOT <STARBOARD-OF-THORPE? ,SUB-LON ,SUB-LAT>>
<TIP-SAYS>
%<XTELL
"He'll have to go around the " D ,SNARK " to fire at us, "FN"!
And we'll have to go around its tail to shoot at HIM!\"|
">)>
<TELL-HINT 42 ;25 ,THORPE-SUB <>>
<RFATAL>>

57
clock.zap Normal file
View file

@ -0,0 +1,57 @@
.FUNCT QUEUE,RTN,TICK,CINT
CALL INT,RTN >CINT
PUT CINT,C-TICK,TICK
RETURN CINT
.FUNCT INT,RTN,DEMON=0,E,C,INT
ADD C-TABLE,C-TABLELEN >E
ADD C-TABLE,C-INTS >C
?PRG1: EQUAL? C,E \?ELS5
SUB C-INTS,C-INTLEN >C-INTS
ZERO? DEMON /?ELS7
SUB C-DEMONS,C-INTLEN >C-DEMONS
?ELS7: ADD C-TABLE,C-INTS >INT
PUT INT,C-RTN,RTN
RETURN INT
?ELS5: GET C,C-RTN
EQUAL? STACK,RTN \?CND3
RETURN C
?CND3: ADD C,C-INTLEN >C
JUMP ?PRG1
.FUNCT CLOCKER,C,E,TICK,FLG=0,VAL
ZERO? CLOCK-WAIT /?CND1
SET 'CLOCK-WAIT,0
RFALSE
?CND1: ZERO? P-WON /?ELS9
PUSH C-INTS
JUMP ?CND5
?ELS9: PUSH C-DEMONS
?CND5: ADD C-TABLE,STACK >C
ADD C-TABLE,C-TABLELEN >E
?PRG13: EQUAL? C,E \?ELS17
INC 'MOVES
RETURN FLG
?ELS17: GET C,C-ENABLED?
ZERO? STACK /?CND15
GET C,C-TICK >TICK
ZERO? TICK \?ELS22
JUMP ?CND15
?ELS22: SUB TICK,1
PUT C,C-TICK,STACK
GRTR? TICK,1 /?CND20
GET C,C-RTN
CALL STACK >VAL
ZERO? VAL /?CND20
ZERO? FLG /?THN33
EQUAL? VAL,M-FATAL \?CND15
?THN33: SET 'FLG,VAL
?CND20:
?CND15: ADD C,C-INTLEN >C
JUMP ?PRG13
.ENDI

101
clock.zil Normal file
View file

@ -0,0 +1,101 @@
"CLOCK for SEASTALKER
Copyright (C) 1984 Infocom, Inc. All rights reserved."
"Interrupt table needs room for 33 3-word slots:
I-AIRLOCK-EMPTY
I-ALARM-RINGING
I-ANALYSIS
I-ANTRIM-REPORTS
I-ANTRIM-TO-SUB
I-AUTO-PILOT
I-BLY-PRIVATELY
I-BLY-SAYS
I-CHECK-POD
I-DOME-AIR
I-GREENUP-ESCAPE
I-LAMP-ON-SCOPE
I-LOWELL-REPORTS
I-POISON-JAB
I-PROMPT-1
I-PROMPT-2
I-SEND-SUB
I-SHARON
I-SHARON-GONE
I-SHARON-TO-HALLWAY
I-SHOW-SONAR
I-SIEGEL-REPORTS
I-SNARK-ATTACKS
I-SYNTHESIS
I-THORPE-APPEARS
I-THORPE-AWAKES
I-TIP-PRIVATELY
I-TIP-REPORTS
I-TIP-SAYS
I-TIP-SONAR-PLAN
I-UPDATE-FREIGHTER
I-UPDATE-SUB-POSITION
I-UPDATE-THORPE"
<CONSTANT C-TABLELEN 111>
<GLOBAL C-TABLE <ITABLE NONE 111>>
<GLOBAL C-DEMONS 111>
<GLOBAL C-INTS 111>
<CONSTANT C-INTLEN 6>
<CONSTANT C-ENABLED? 0>
<CONSTANT C-TICK 1>
<CONSTANT C-RTN 2>
;<ROUTINE DEMON (RTN TICK "AUX" CINT)
#DECL ((RTN) ATOM (TICK) FIX (CINT) <PRIMTYPE VECTOR>)
<PUT <SET CINT <INT .RTN T>> ,C-TICK .TICK>
.CINT>
<ROUTINE QUEUE (RTN TICK "AUX" CINT)
#DECL ((RTN) ATOM (TICK) FIX (CINT) <PRIMTYPE VECTOR>)
<PUT <SET CINT <INT .RTN>> ,C-TICK .TICK>
.CINT>
<ROUTINE INT (RTN "OPTIONAL" (DEMON <>) E C INT)
#DECL ((RTN) ATOM (DEMON) <OR ATOM FALSE> (E C INT) <PRIMTYPE
VECTOR>)
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<SET C <REST ,C-TABLE ,C-INTS>>
<REPEAT ()
<COND (<==? .C .E>
<SETG C-INTS <- ,C-INTS ,C-INTLEN>>
<AND .DEMON <SETG C-DEMONS <- ,C-DEMONS ,C-INTLEN>>>
<SET INT <REST ,C-TABLE ,C-INTS>>
<PUT .INT ,C-RTN .RTN>
<RETURN .INT>)
(<EQUAL? <GET .C ,C-RTN> .RTN> <RETURN .C>)>
<SET C <REST .C ,C-INTLEN>>>>
<GLOBAL CLOCK-WAIT <>>
;<GLOBAL PRESENT-TIME 0>
<ROUTINE CLOCKER ("AUX" C E TICK (FLG <>) VAL)
#DECL ((C E) <PRIMTYPE VECTOR> (TICK) FIX ;(FLG) ;<OR FALSE ATOM>)
<COND (,CLOCK-WAIT <SETG CLOCK-WAIT <>> <RFALSE>)>
<SET C <REST ,C-TABLE <COND (,P-WON ,C-INTS) (T ,C-DEMONS)>>>
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<REPEAT ()
<COND (<==? .C .E>
<SETG MOVES <+ ,MOVES 1>>
<RETURN .FLG>)
(<NOT <0? <GET .C ,C-ENABLED?>>>
<SET TICK <GET .C ,C-TICK>>
<COND (<0? .TICK>)
(T
<PUT .C ,C-TICK <- .TICK 1>>
<COND (<AND <NOT <G? .TICK 1>>
<SET VAL <APPLY <GET .C ,C-RTN>>>>
<COND (<OR <NOT .FLG>
<==? .VAL ,M-FATAL>>
<SET FLG .VAL>)>)>)>)>
<SET C <REST .C ,C-INTLEN>>>>

26
coco.errors Normal file
View file

@ -0,0 +1,26 @@
Assembling J1.XZAP.8
Inserting J1FREQ.XZAP.7 ( 620 bytes)
Inserting J1DAT.ZAP.1 (22305 bytes)
Inserting MACROS.ZAP.1 ( 104 bytes)
Inserting MAIN.ZAP.1 ( 2259 bytes)
Inserting CLOCK.ZAP.1 ( 186 bytes)
Inserting SUB.ZAP.3 (16341 bytes)
Inserting BATTLE.ZAP.1 ( 5651 bytes)
Inserting DOME.ZAP.1 ( 9902 bytes)
Inserting PLACES.ZAP.1 ( 4753 bytes)
Inserting PEOPLE.ZAP.1 (15561 bytes)
Inserting THINGS.ZAP.1 ( 2058 bytes)
Inserting GLOBAL.ZAP.1 ( 5836 bytes)
Inserting PARSER.ZAP.1 ( 5735 bytes)
Inserting SYNTAX.ZAP.1 ( 778 bytes)
Inserting VERBS.ZAP.1 (15666 bytes)
Inserting EVENTS.ZAP.1 ( 7364 bytes)
Inserting J1STR.ZAP.1 ( 2553 bytes)
25538 bytes of preload.
117736 bytes (115K).
32744 bytes too large for one-disk game on ATARI.
255 objects.
239 globals.

BIN
coco.zip Normal file

Binary file not shown.

1398
dome.zap Normal file

File diff suppressed because it is too large Load diff

1794
dome.zil Normal file

File diff suppressed because it is too large Load diff

1134
events.zap Normal file

File diff suppressed because it is too large Load diff

815
events.zil Normal file
View file

@ -0,0 +1,815 @@
"EVENTS for SEASTALKER
Copyright (C) 1984 Infocom, Inc. All rights reserved."
<ROUTINE I-ALARM-RINGING ()
<COND (<IN-LAB? ,HERE> <TELL "The " D ,ALARM " continues to ring." CR>)>>
<ROUTINE GRAB-ATTENTION (X "OPTIONAL" (OBJ <>))
<COND (<BAD-AIR?> ;"<FSET? ,BLY ,MUNGBIT>"
<RFALSE>)
(<FSET? .X ,BUSYBIT>
<TOO-BAD-BUT .X "busy">
<RFALSE>)
(<NOT <0? ,SNARK-ATTACK-COUNT>>
<DONT-KNOW .X .OBJ>
<RFALSE>)
(T
<RTRUE>)>>
<ROUTINE TELL-HINT (CARDNUM OBJ "OPTIONAL" (CR? T))
<COND (.CR? <CRLF>)>
%<XTELL
"(If you want a clue, find Infocard #" N </ .CARDNUM 10> " in your
" D ,GAME " package. Read hidden clue #" N <MOD .CARDNUM 10> " and put
\"" D .OBJ "\" in the blank space.)" CR>>
<ROUTINE I-LAMP-ON-SCOPE ()
<COND (<GLOBAL-IN? ,VIDEOPHONE ,HERE>
<COND (<AND ,ALARM-RINGING
<NOT <FSET? ,VIDEOPHONE ,ONBIT>>>
<ENABLE <QUEUE I-LAMP-ON-SCOPE 7>>
<TELL-HINT 82 ;1 ,VIDEOPHONE>)>)
(,SUB-IN-TANK
<ENABLE <QUEUE I-LAMP-ON-SCOPE 1>>
<RFALSE>)>>
<ROUTINE I-SEND-SUB ()
<COND (<AND <FSET? ,VIDEOPHONE ,ONBIT>
<NOT ,WOMAN-ON-SCREEN>>
<TELL-HINT 81 ;2 ,LOCAL-SUB>)>>
<CONSTANT G-REACHED 1>
<GLOBAL TIP-FOLLOWS-YOU? T>
<GLOBAL OLD-HERE <>>
<ROUTINE TIP-FOLLOWS-YOU (RM)
<COND (<NOT ,TIP-FOLLOWS-YOU?> <RFALSE>)
(<AND <IN-LAB? .RM> <IN-LAB? ,OLD-HERE>>
<RFALSE>)
(<AND <IN-TANK-AREA? .RM> <IN-TANK-AREA? ,OLD-HERE>>
<RFALSE>)
(<EQUAL? .RM ,CRAWL-SPACE>
<RFALSE>)
(<NOT <==? ,OLD-HERE .RM>>
<SETG OLD-HERE .RM>
<COND (<IN? ,MICROPHONE ,TIP>
<MOVE ,MICROPHONE ,CENTER-OF-LAB>)
(<IN? ,MICROPHONE-DOME ,TIP>
<MOVE ,MICROPHONE-DOME ,COMM-BLDG>)>
<COND (<NOT <EQUAL? .RM ,SUB <LOC ,TIP>>>
<FCLEAR ,TIP ,TOUCHBIT>)>
<MOVE ,TIP .RM>)>>
<ROUTINE DIR-FROM (HERE THERE "AUX" (P 0) L T O)
#DECL ((HERE THERE O) OBJECT (P L) FIX)
<REPEAT ()
<COND (<0? <SET P <NEXTP .HERE .P>>>
<RFALSE>)
(<EQUAL? .P ,P?IN ,P?OUT> T)
(<NOT <L? .P ,LOW-DIRECTION>>
<SET T <GETPT .HERE .P>>
<SET L <PTSIZE .T>>
<COND (<AND <EQUAL? .L ,DEXIT ,UEXIT ,CEXIT>
<==? <GETB .T ,REXIT> .THERE>>
<RETURN .P>)>)>>>
<ROUTINE I-SHARON-GONE ("AUX" L)
<COND (<OR ;<NOT ,BLY-TOLD-PROBLEM> <NOT ,MONSTER-GONE>>
<QUEUE I-SHARON-GONE 4>
<RFALSE>)>
<SET L <META-LOC ,SHARON>>
<REMOVE ,SHARON>
<ROB ,SHARON ,GLOBAL-SHARON>
<FCLEAR ,FILE-DRAWER ,NDESCBIT>
<FCLEAR ,PAPERS ,NDESCBIT>
<COND (<SHARON-PASSES-YOU? .L>
<SUDDENLY-SHARON .L>
<TELL "really must go now, "FN". I'll see you later.\"" CR>
<COND (<EQUAL? ,HERE ,OFFICE>
%<XTELL
"She leaves through the " D ,OFFICE-DOOR "." CR>)>
<RTRUE>)>>
<ROUTINE ROB (WHAT THIEF "AUX" N X)
<SET X <FIRST? .WHAT>>
<REPEAT ()
<COND (<NOT .X> <RETURN>)>
<SET N <NEXT? .X>>
<MOVE .X .THIEF>
<FCLEAR .X ,TAKEBIT>
<SET X .N>>>
<ROUTINE SUDDENLY-SHARON (L)
<TELL "|
Suddenly Sharon ">
<COND (<NOT <EQUAL? .L ,HERE>> <TELL "passes by and says">)
(T <TELL "leaves, saying">)>
<TELL ", \"I ">>
<ROUTINE I-SHARON-TO-HALLWAY ("AUX" L)
<QUEUE I-SHARON-TO-HALLWAY 0>
<SET L <META-LOC ,SHARON>>
<MOVE ,SHARON ,HALLWAY>
<COND (<SHARON-PASSES-YOU? .L>
<SUDDENLY-SHARON .L>
<TELL "must go back to my office now, "FN".\"" CR>)>
<I-SHARON ,G-REACHED>>
<GLOBAL MONSTER-GONE <>>
<GLOBAL SHARON-BROKE-CIRCUIT <>>
<ROUTINE I-SHARON ("OPTIONAL" (GARG <>) "AUX" (L <LOC ,SHARON>))
<COND (<==? .GARG ,G-REACHED>
<COND (<==? .L ,HALLWAY>
<MOVE ,SHARON ,OFFICE>
<FSET ,SHARON ,NDESCBIT>
<FSET ,FILE-DRAWER ,NDESCBIT>
<FSET ,PAPERS ,NDESCBIT>
<COND (<FSET? ,VIDEOPHONE ,ONBIT>
<FCLEAR ,VIDEOPHONE ,ONBIT>
<FSET ,VIDEOPHONE ,MUNGBIT>
<PHONE-OFF>
;"<FCLEAR ,CIRCUIT-BREAKER ,NDESCBIT>"
<SETG SHARON-BROKE-CIRCUIT T>
<FSET ,CIRCUIT-BREAKER ,MUNGBIT>
<FSET ,CIRCUIT-BREAKER ,OPENBIT>
;<COND (,DEBUG<TELL"[circuit breaker just opened]" CR>)>
<SETG MONSTER-GONE T>
<COND (<IN-LAB? ,HERE>
%<XTELL CR
"Something's wrong! The picture vanished from your
" D ,VIDEOPHONE " screen, and the sound conked out!|
">
<TIP-SAYS>
<TELL
"That's strange! Maybe you should use the " D
,COMPUTESTOR ".\"" CR>)>
<SCORE-UPD -3>
<RTRUE>)>)>)>>
<ROUTINE TIP-SAYS ("OPTIONAL" (QUIET <>))
<TELL "Tip s">
<COND (<IN? ,TIP ,HERE> <TELL "ays">) (T <TELL "houts">)>
<COND (.QUIET <TELL " quietly">)>
<TELL ", \"">>
<GLOBAL BLY-PRIVATELY-COUNT 0>
<GLOBAL BLY-PRIVATELY-DELAY <>>
<ROUTINE NOT-NOW? ("OPTIONAL" (BLY? T))
<COND (<AND .BLY? ,BLY-PRIVATELY-DELAY>
<RTRUE>)
(<OR <FSET? ,BLY ,MUNGBIT>
,GREENUP-ESCAPE
<EQUAL? ,HERE ,CRAWL-SPACE ,SUB>>
<RTRUE>)>>
<ROUTINE I-BLY-PRIVATELY ()
<COND (<READY-FOR-SNARK?>
<RFALSE>)>
<COND (,ZOE-MENTIONED-EVIDENCE
<RFALSE>)>
<COND (<NOT-NOW?>
<SETG BLY-PRIVATELY-DELAY <>>
<QUEUE I-BLY-PRIVATELY 7 ;3>
<RFALSE>)>
<SETG BLY-PRIVATELY-DELAY T>
<MOVE ,PRIVATE-MATTER ,GLOBAL-OBJECTS>
<TELL CR "Suddenly " D ,BLY " ">
<COND (<NOT <EQUAL? <META-LOC ,BLY> ,HERE>>
<MOVE ,BLY ,HERE>
<TELL "comes over and ">)>
<COND (<0? ,BLY-PRIVATELY-COUNT> <TELL "say">)
(T <TELL "repeat">)>
%<XTELL
"s, \"" FN ", can we discuss a " D ,PRIVATE-MATTER " now?\"">
<INC BLY-PRIVATELY-COUNT>
<COND (<NOT <YES?>> <QUEUE I-BLY-PRIVATELY 7 ;3> <RFALSE>)>
<ASK-BLY-ABOUT-PRIVATE-MATTER>
<RTRUE>>
<ROUTINE I-BLY-SAYS ("OPTIONAL" (ASKED? <>) "AUX" L)
<COND (.ASKED?
<QUEUE I-BLY-SAYS 0>)
(<READY-FOR-SNARK?>
<RFALSE>)
(<NOT-NOW?>
<SETG BLY-PRIVATELY-DELAY <>>
<QUEUE I-BLY-SAYS 7 ;3>
<RFALSE>)>
<SETG BLY-PRIVATELY-DELAY T>
<SET L <META-LOC ,BLY>>
<COND (<OR .ASKED?
<AND <EQUAL? .L ,BLY-OFFICE>
<EQUAL? .L ,HERE>>>
<COND (<NOT .ASKED?> <CRLF>)>
%<XTELL
"\"" FN ",\" says Zoe, \"we could be in danger!
The Snark may attack again any time! Would you answer some questions?\"">
<COND (<NOT <YES?>>
<COND (.ASKED? <RTRUE>)
(T <ENABLE <QUEUE I-BLY-SAYS 3>> <RFALSE>)>)>
%<XTELL
"\"Can you use the " D ,SUB " to hunt the " D ,GLOBAL-SNARK
", instead of waiting for it to attack?\"">
<COND (<YES?>
%<XTELL
"\"Do you wish to arm the " D ,SUB " for attacking?\"">
<COND (<YES?>
<TELL-HINT 73 ;22 ,CLAW <>>
<TELL-HINT 72 ;23 ,DART ;<>>
<COND (<NOT <==? ,HERE ,DOME-LAB>>
%<XTELL
"|
\"If you want to think it over, we should go to the " D ,DOME-LAB ". Shall we
go now?\"">
<COND (<YES?>
<TELL "\"Okay, let's go.\"|
|
">
<COND (<IN? ,BLACK-BOX ,BLY>
<MOVE ,BLACK-BOX ,HERE>)>
<SETG WINNER ,PLAYER>
<COND (<GOTO ,DOME-LAB>
<MOVE ,BLY ,DOME-LAB>)>)>)>)>)>
<RFATAL>)
(T
<ENABLE <QUEUE I-BLY-SAYS 3>>
<RFALSE>)>>
<GLOBAL TIP-SAYS-1 0>
<GLOBAL TIP-SAYS-2 0>
<ROUTINE I-TIP-SAYS ()
<COND (<AND <==? ,TIP-SAYS-2 ,MAGAZINE> <FSET? ,MAGAZINE ,TOUCHBIT>>
<RFALSE>)
(<AND ,TIP-SAYS-1 <EQUAL? <META-LOC ,MAGAZINE> ,SUB ,CRAWL-SPACE>>
<TELL-HINT ,TIP-SAYS-1 ,TIP-SAYS-2>)>>
<ROUTINE I-TIP-SONAR-PLAN ("AUX" P)
<COND (<FSET? ,TIP ,BUSYBIT>
<QUEUE I-TIP-SONAR-PLAN 3>
<RFALSE>)
(<READY-FOR-SNARK?>
<QUEUE I-TIP-SONAR-PLAN 0>
<RFALSE>)>
<SET P <FIND-FLAG ,HERE ,PERSON ,PLAYER>>
<COND (<NOT .P> <TIP-COMES>)
(<==? .P ,TIP>
<REMOVE ,PLAYER>
<SET P <FIND-FLAG ,HERE ,PERSON ,TIP>>
<MOVE ,PLAYER ,HERE>
<TIP-COMES .P>)
(T
<TIP-COMES T>)>>
<ROUTINE MIKE-1-F (OBJ "OPTIONAL" (FOO <>))
<COND (<NOT .FOO>
<TELL "\"Is " D .OBJ " a suspect?\"">)
(T
<TELL
"\"Do you think " D .OBJ " could be the " D ,TRAITOR "?\"" >)>>
<ROUTINE TIP-COMES ("OPTIONAL" (ALMOST <>))
<COND (<OR ,SIEGEL-TESTED <FSET? ,SIEGEL ,BUSYBIT>>
<RFALSE>)
(<OR ,GREENUP-ESCAPE ,GREENUP-TRAPPED ,GREENUP-CUFFED>
<RFALSE>)
(<OR <EQUAL? ,HERE ,SUB ,CRAWL-SPACE> <FSET? ,TIP ,BUSYBIT>>
<QUEUE I-TIP-SONAR-PLAN 3>
<RFALSE>)
(.ALMOST
<MOVE ,TIP ,HERE>
<SET ALMOST <GET <INT I-TIP-SONAR-PLAN> 1>>
<COND (<OR <G? .ALMOST -1>
<EQUAL? <MOD <- 0 .ALMOST> 7> 2>>
<TIP-SAYS T>
<TELL FN ", I'd like to talk with you alone.\"" CR>
<COND (<G? .ALMOST -1>
<QUEUE I-TIP-SONAR-PLAN -1>)>
<RTRUE>)
(T <RFALSE>)>)>
<QUEUE I-TIP-SONAR-PLAN 0>
<CRLF>
<COND (<NOT ,BLACK-BOX-EXAMINED> <TELL-HINT 11 ;13 ,BLACK-BOX>)>
<MOVE ,TIP ,HERE>
<TIP-SAYS T>
%<XTELL
FN ", did " D ,BLY " mention any troublemakers among the " D ,CREW "?\"">
<COND (<YES?>
<TELL
"\"Do you suspect " D ,ANTRIM " or " D ,HORVAK " or " D ,SIEGEL "?\"">
<COND (<YES?>
%<XTELL "\"Marv maintains the "D ,SONAR-EQUIPMENT",\" ">
<TIP-SAYS>
<TELL
"and we'll
need it to warn us if the " D ,SNARK " comes back. Didn't Zoe say something is
wrong with it?\"">
<COND (<YES?>
%<XTELL
"\"" FN ", do you think someone tampered with it?\"">
<COND (<YES?>
%<XTELL
"\"Does Marv suspect you've discovered signs of tampering?\"">
<COND (<NOT <YES?>>
<THIS-IS-IT ,TIP-IDEA>
%<XTELL
"\"Then I have an idea how to trap Marv and find out if he's the " D ,TRAITOR
"!\"" CR>)>)>)>)>)>
<RTRUE>>
<GLOBAL SIEGEL-TESTED <>>
<ROUTINE REACTION-MAY-BE (PER)
<TELL D .PER
"'s reaction may be all you need to prove he's NOT the " D ,TRAITOR ".
But you'll have to decide for yourself." CR>>
<ROUTINE SIEGEL-BOX ()
<TELL "It will modulate the sonar's ultrasonic pulses!\"" CR>>
<ROUTINE I-SIEGEL-REPORTS ()
<COND (,DOME-AIR-BAD?
<ENABLE <QUEUE I-SIEGEL-REPORTS 3>>
<RFALSE>)>
<FCLEAR ,SIEGEL ,BUSYBIT>
<COND (<NOT <IN? ,SIEGEL ,COMM-BLDG>> <RFALSE>)>
<MOVE-HERE-NOT-SUB ,SIEGEL>
<COND (<NOT <IN? ,BLACK-BOX ,SONAR-EQUIPMENT>>
%<XTELL
"Suddenly " D ,SIEGEL " reports: \"The " D ,SONAR-EQUIPMENT " looks okay
to me, "FN".\"" CR>
<RTRUE>)>
<COND (<EQUAL? ,HERE ,COMM-BLDG>
<TELL "Suddenly " D ,SIEGEL " turns to you">)
(T
<COND (<IN? ,TIP ,HERE>
<TIP-SAYS>
%<XTELL FN ", here comes Marv, and he looks excited!\"|
">)>
<TELL "Marv comes running up to you">)>
%<XTELL " with the " D ,BLACK-BOX " and says: \"Look">
<MOVE ,BLACK-BOX ,SIEGEL>
<COND (,SIEGEL-TESTED
<TELL
"! I found the same " D ,BLACK-BOX" on the " D ,SONAR-EQUIPMENT " again!\""
CR>)
(T
<SETG SIEGEL-TESTED T>
%<XTELL
" what I found attached to the " D ,SONAR-EQUIPMENT ", " FN "! ">
<SIEGEL-BOX>
<COND (<IN? ,TIP ,HERE>
<TIP-FLASHES>
<REACTION-MAY-BE ,SIEGEL>
%<XTELL
"|
Tip snaps his fingers and says: \"" FN "! Didn't that article in the "
D ,MAGAZINE "
say " D ,THORPE "'s synthetic sea creatures reacted to ultrasonic pulses in
a special way?\"">
<ENABLE <QUEUE I-TIP-PRIVATELY 1>>
<COND (<YES?> <TELL "\"That's what I thought.\"" CR>)
(T <TELL
"\"I think you should check that.\"" CR>)>)>)>
<RTRUE>>
<GLOBAL RECONSIDER? "\"I think you should reconsider.">
<ROUTINE I-TIP-PRIVATELY ()
<COND (<OR <READY-FOR-SNARK?>
,ANTRIM-CHECKED-SUB>
<QUEUE I-TIP-PRIVATELY 0>
<RFALSE>)
(<FSET? ,TIP ,BUSYBIT>
<ENABLE <QUEUE I-TIP-PRIVATELY 3>>
<RFALSE>)>
<MOVE ,TIP ,HERE>
%<XTELL
CR "Tip draws you aside. \"Could I speak to you privately, " FN "?\"">
<COND (<NOT <YES?>> <ENABLE <QUEUE I-TIP-PRIVATELY 3>> <RFALSE>)>
%<XTELL
"\"The Snark could be a synthetic monster created by " D ,THORPE "!\" he
says when you're alone. \"I read about them in that magazine. If I'm
right, whoever attached the " D ,BLACK-BOX " to the " D ,SONAR-EQUIPMENT
" could be working for Thorpe! That way the " D ,GLOBAL-SNARK
" would be lured into attacking the " D ,AQUADOME
"! Do you agree, " FN "?\"">
<COND (<NOT <YES?>>
<TELL ,RECONSIDER? "\"" CR>)>
<MIKE-1-F ,ANTRIM T>
<COND (<NOT <YES?>>
%<XTELL ,RECONSIDER? " In fact ">)
(T <TELL "\"Then ">)>
<TELL "why not test him">
<COND (,SIEGEL-TESTED
<TELL ", since you tested " D ,SIEGEL>)>
%<XTELL
"?\" Tip
asks. \"Mick is a laser expert in charge of maintenance on subs at the " D
,AQUADOME ".\"" CR>
<COND (<IN? ,PRIVATE-MATTER ,GLOBAL-OBJECTS>
<TELL-HINT 12 ;19 ,OVERHEATING <>>
<COND (,REGULATOR-MSG-SEEN
<TELL-HINT 43 ;20 ,ANTRIM <>>)>)>
<TELL-HINT 22 ;21 ,ANTRIM <>>>
<GLOBAL BLY-HEARD-ANTRIM <>>
<ROUTINE I-ANTRIM-TO-SUB ("OPTIONAL" (STR <>))
<COND (<READY-FOR-SNARK?>
<RFALSE>)
(,ANTRIM-CHECKED-SUB <RFALSE>)
(.STR T)
(<NOT-NOW? <>>
<QUEUE I-ANTRIM-TO-SUB 3>
<RFALSE>)>
<COND (<FSET? ,VOLTAGE-REGULATOR ,MUNGBIT>
<ENABLE <QUEUE I-ANTRIM-REPORTS 9>>)
(T
<ENABLE <QUEUE I-ANTRIM-REPORTS 19>>)>
<SETG ANTRIM-CHECKED-SUB T>
<COND (<IN? ,BLY ,HERE> <SETG BLY-HEARD-ANTRIM T>)>
<FSET ,ANTRIM ,BUSYBIT>
<COND (.STR <TELL .STR>)
(T
<TELL "|
Suddenly " D ,ANTRIM>
<COND (<NOT <IN? ,ANTRIM ,HERE>> <TELL " appears and">)>
<TELL
" says, \"I'm going to check out your new " D ,SUB ", ">)>
%<XTELL FN "!\" Mick turns and ">
<MOVE ,ANTRIM ,CRAWL-SPACE>
<FSET ,ENGINE-ACCESS-HATCH ,OPENBIT>
<COND (<EQUAL? ,HERE ,SUB ,CRAWL-SPACE>
<TELL "goes to work." CR>)
(<EQUAL? ,HERE ,AIRLOCK>
<TELL "climbs aboard the " D ,SUB "." CR>)
(T
;"<MOVE ,ANTRIM ,AIRLOCK>"
<TELL "hurries toward the " D ,AIRLOCK "." CR>)>>
<GLOBAL TIP-FLASHED <>>
<ROUTINE TIP-FLASHES ()
<COND (,TIP-FLASHED <TELL "Once again ">)>
<SETG TIP-FLASHED T>
%<XTELL "Tip flashes you a meaningful glance. ">>
<ROUTINE I-ANTRIM-REPORTS ()
;<COND (,DEBUG <TELL "[time for Mick to report?]" CR>)>
<COND (<OR ,DOME-AIR-BAD?
;"<EQUAL? ,HERE ,SUB ,CRAWL-SPACE ,AIRLOCK>">
<QUEUE I-ANTRIM-REPORTS 3>
<RFALSE>)>
<FCLEAR ,ANTRIM ,BUSYBIT>
<MOVE-HERE-NOT-SUB ,ANTRIM>
<CRLF>
<COND (,ASKED-ANTRIM
%<XTELL D ,ANTRIM " reports back ">
<COND (<EQUAL? ,HERE ,SUB ,AIRLOCK> <TELL "to you">)
(T <TELL "from the " D ,AIRLOCK>)>
<COND (<FSET? ,VOLTAGE-REGULATOR ,MUNGBIT>
%<XTELL ".|
\"I think I found your " D ,OVERHEATING " problem. The " D
,VOLTAGE-REGULATOR " was making the lasers overcharge.|
I've adjusted it, but I could replace it. Want me to?\"">
<COND (<YES?> <FCLEAR ,VOLTAGE-REGULATOR ,MUNGBIT>)>)
(T %<XTELL ", looking somewhat puzzled.|
\"" FN ", I ran the " D ,ENGINE " on full, but it didn't overheat.|
The " D ,VOLTAGE-REGULATOR " PROBABLY got out of adjustment and
overcharged the lasers, but it seems okay now. Just to be safe, I
installed a new " D ,VOLTAGE-REGULATOR ".|
">)>)
(T
<COND (<OR ,BLY-HEARD-ANTRIM
<EQUAL? ,HERE ,SUB ,BLY-OFFICE <LOC ,BLY>>>
<TELL "Suddenly ">)
(T
<MOVE-HERE-NOT-SUB ,BLY>
%<XTELL
D ,BLY " is approaching.|
\"" FN ", did you send " D ,ANTRIM " to work on the " D ,SUB "?\" she
asks. \"I was just ">
<COND (<NOT <EQUAL? ,HERE ,BLY-OFFICE>>
<TELL "in my office, ">)>
%<XTELL
"checking the " D ,STATION-MONITOR " to see what each of
the crew was doing, and I discovered Mick had gone to the " D ,AIRLOCK ".
When I saw him on the " D ,STATION-MONITOR ",
he had just come out of the " D ,SUB "'s hatch.|
Wait -- here he is now!\"|
">)>
<TELL
"Mick appears and says, \"I thought maybe you had a problem on the way
here, " FN ", so I wanted to check on it. Everything seems to be okay
now.\"" CR>)>
<TIP-FLASHES>
<COND (<FSET? ,VOLTAGE-REGULATOR ,MUNGBIT>
<SETG TEST-BUTTON-READOUT ,TEST-BUTTON-NORMAL>
%<XTELL
"It now looks as though " D ,ANTRIM " can be eliminated as the " D ,TRAITOR ",
but you'll want to confirm this by pushing the " D ,TEST-BUTTON
" before you set out again in the " D ,SUB ".|
">)
(T <REACTION-MAY-BE ,ANTRIM>)>
<FCLEAR ,VOLTAGE-REGULATOR ,MUNGBIT>
<COND (<READY-FOR-SNARK?>
<RTRUE>)>
<COND (<IN? ,ESCAPE-POD-UNIT ,SUB> <RTRUE>)>
%<XTELL CR D ,ANTRIM
" turns away, then stops and says:|
\"" FN ", there's no " D ,ESCAPE-POD-UNIT "
under your seats in the " D ,SUB ". I hear you're planning a new type
of unit for the Ultramarine Bioceptor. But the standard unit will fit,
and we have one in the " D ,DOME-STORAGE ".|
Would you like one installed, just in case? " D ,GREENUP " and " D ,LOWELL
" could do it in a few minutes. Shall I tell 'em to?\"">
<COND (<YES?>
<MOVE ,ANTRIM <META-LOC ,LOWELL>>
<INSTALL-ESCAPE-POD-UNIT ,ANTRIM>
<RTRUE>)>
<TELL "\"I sure hope you don't need it.\"" CR>>
<ROUTINE INSTALL-ESCAPE-POD-UNIT (PER "AUX" (X <>))
<TELL "\"Okay">
<COND (<EQUAL? ,HERE <LOC ,LOWELL> <LOC ,GREENUP>>
<TELL ", we'll install it">)>
<TELL ".\"" CR>
<COND (<AND <EQUAL? <LOC ,SYRINGE>
,LOWELL ,GREENUP ,ESCAPE-POD-UNIT>
<SET X T>
<EQUAL? <LOC ,ESCAPE-POD-UNIT>
,LOWELL ,GREENUP ,DOME-STORAGE>>
<SCORE-OBJ ,ESCAPE-POD-UNIT>
<MOVE ,GREENUP ,SUB ;",AIRLOCK">
<MOVE ,LOWELL ,SUB ;",AIRLOCK">
<FSET ,GREENUP ,BUSYBIT>
<FSET ,LOWELL ,BUSYBIT>
<MOVE ,ESCAPE-POD-UNIT ,LOWELL>
<MOVE ,SYRINGE ,GREENUP>
<FSET ,SYRINGE ,MUNGBIT>
<ENABLE <QUEUE I-LOWELL-REPORTS 12>>)
(T
<TELL "But ">
<HE-SHE-IT .PER>
<MOVE .PER ,HERE>
<TELL
" returns a moment later and says, \"We can't find the ">
<COND (.X <TELL D ,ESCAPE-POD-UNIT>) (T <TELL D ,SYRINGE>)>
<TELL ".\"" CR>)>>
<ROUTINE I-LOWELL-REPORTS ()
<COND (<NOT-NOW? <>>
<QUEUE I-LOWELL-REPORTS 3>
<RFALSE>)>
<MOVE ,ESCAPE-POD-UNIT ,SUB>
<FCLEAR ,ESCAPE-POD-UNIT ,TAKEBIT>
<FSET ,ESCAPE-POD-UNIT ,OPENBIT>
<MOVE ,SYRINGE ,ESCAPE-POD-UNIT>
<SETG TEST-BUTTON-READOUT ,TEST-BUTTON-POD>
<MOVE ,GREENUP ,HERE>
<MOVE ,LOWELL ,HERE>
<FCLEAR ,GREENUP ,BUSYBIT>
<FCLEAR ,LOWELL ,BUSYBIT>
%<XTELL "|
Suddenly " D ,GREENUP " and " D ,LOWELL " report back from the ">
<COND (<EQUAL? ,HERE ,AIRLOCK> <TELL D ,SUB>)
(T <TELL D ,AIRLOCK>)>
%<XTELL
".|
\"That " D ,ESCAPE-POD-UNIT " is in place, " FN ",\" says Amy. \"Bill
installed the part under your pilot's seat, and I installed the rest.\"" CR>>
<GLOBAL GREENUP-GUILT <>>
<ROUTINE I-ANALYSIS ()
<FCLEAR ,HORVAK ,BUSYBIT>
<FSET ,SYRINGE ,TAKEBIT>
<COND (<MOVE-HERE-NOT-SUB ,HORVAK>
<CRLF>
<COND (<NOT <FSET? ,SYRINGE ,MUNGBIT>>
<TELL
"Suddenly " D ,HORVAK " appears. \"I couldn't find anything unusual
about the " D ,SYRINGE ".\"" CR>)
(T
<SETG GREENUP-GUILT T>
%<XTELL
D ,HORVAK "'s face is grim and pale as he reports the result of his
analysis.|
">
<PERFORM ,V?ASK-ABOUT ,HORVAK ,SYRINGE>
<COND (<IN? ,TIP ,HERE>
%<XTELL "|
Tip turns to you with a gasp. \"Holy smoke, " FN "! That's exactly what
would have happened once you warmed up the pilot's seat enough to
trigger the sensor relay!\"" CR>)>)>)
(T
<QUEUE I-ANALYSIS 2>
<RFALSE>)>>
<ROUTINE I-SYNTHESIS ()
<FCLEAR ,HORVAK ,BUSYBIT>
<MOVE ,DART ,HORVAK>
<FCLEAR ,DART ,TRYTAKEBIT>
<FSET ,DART ,TAKEBIT>
<FCLEAR ,DART ,NDESCBIT>
<FCLEAR ,DART ,MUNGBIT> ;"indicates dart fixed"
<THIS-IS-IT ,DART>
<SAID-TO ,HORVAK>
<TELL "Doc Horvak ">
<MOVE-HERE-NOT-SUB ,HORVAK "is now" "now comes rushing back,">
%<XTELL " holding an aquatic dart gun. ">
<COND (<NOT <IN? ,HORVAK ,HERE>> <TELL "He shouts from outside, ">)>
%<XTELL "\"Okay, "
FN ", I've made a special 'trank' to use against an AH-type organism!
It's loaded in the dart gun. What shall I do with it?\"" CR>
<SCORE-OBJ ,DART>
<RTRUE>>
<ROUTINE MOVE-HERE-NOT-SUB (PER "OPTIONAL" (HERE-STR <>) (NOT-HERE-STR <>))
<COND (<IN? .PER ,HERE>
<COND (.HERE-STR <TELL .HERE-STR>)>
<RTRUE>)>
<COND (<AND ;"<NOT <FSET? ,AIRLOCK-ROOF ,OPENBIT>>"
<THROUGH-ROOF? <LOC .PER>>>
<FSET ,AIRLOCK-ROOF ,OPENBIT>)>
<COND (<EQUAL? .PER ,SHARON>
<FCLEAR ,SHARON ,NDESCBIT>
<FCLEAR ,FILE-DRAWER ,NDESCBIT>
<FCLEAR ,PAPERS ,NDESCBIT>)>
<COND (.NOT-HERE-STR <TELL .NOT-HERE-STR>)>
<COND (<EQUAL? ,HERE ,CRAWL-SPACE ,SUB>
<COND (,SUB-IN-TANK <MOVE .PER ,NORTH-TANK-AREA>)
(T <MOVE .PER ,AIRLOCK>)>
<RFALSE>)
(T <MOVE .PER ,HERE>)>>
<ROUTINE I-GREENUP-ESCAPE ()
<ENABLE <QUEUE I-GREENUP-ESCAPE -1>>
<SETG GREENUP-ESCAPE <+ 1 ,GREENUP-ESCAPE>>
<COND (<EQUAL? 3 ,GREENUP-ESCAPE>
<MOVE ,GREENUP ,AIRLOCK>
%<XTELL CR
"Greenup has reached the top of the wall and is climbing down the ladder
into the " D ,AIRLOCK ". In a moment he'll reach the floor
and head for the " D ,SUB "." CR>)
(<EQUAL? 4 ,GREENUP-ESCAPE>
%<XTELL CR
"Greenup is scrambling aboard the " D ,SUB ". Tip groans.
\"There's no way to stop him now, " FN "! All he has to do is
open the " D ,AIRLOCK-HATCH " and shove off!\"" CR>
<TELL-HINT 52 ;14 ,AIRLOCK-ELECTRICITY <>>
<RTRUE>)
(<EQUAL? 9 ,GREENUP-ESCAPE>
<FCLEAR ,AIRLOCK-ROOF ,OPENBIT>
<FSET ,AIRLOCK-HATCH ,OPENBIT>
<SETG AIRLOCK-FULL T>
<QUEUE I-SNARK-ATTACKS 1>
%<XTELL
"|
Better not raise any false hopes. As the " D ,SUB " glides out,
a pall of gloom settles over the " D ,AQUADOME ". All
hands sense that there's little hope, that Greenup has
scuttled their last chance of fighting off another attack by the " D ,GLOBAL-SNARK ".|
A " D ,VIDEOPHONE " call to " D ,IU-GLOBAL " confirms that no other subs are
available for a rescue expedition, even if there were time. And a
general S.O.S. to any craft in the vicinity isn't answered.">
<FINISH>)>
<RFALSE>>
<ROUTINE GREENUP-CUFF ()
<SETG GREENUP-ESCAPE 0>
<SETG GREENUP-TRAPPED <>>
<QUEUE I-GREENUP-ESCAPE 0>
<MOVE ,GREENUP ,GALLEY>
<FSET ,GREENUP ,MUNGBIT>
<SETG GREENUP-CUFFED T>
%<XTELL
"Knowing he's trapped, " D ,GREENUP " gives up without a fight. " D ,BLY
" orders him handcuffed to a pipe in the " D ,GALLEY "." CR>
<SCORE-OBJ ,GLOBAL-GREENUP>
<RTRUE>>
<ROUTINE I-POISON-JAB ()
<COND (<AND <EQUAL? ,HERE ,SUB>
<IN? ,ESCAPE-POD-UNIT ,SUB>
<FSET? ,SYRINGE ,MUNGBIT>
<IN? ,SYRINGE ,ESCAPE-POD-UNIT>>
%<XTELL CR
"A sudden jab in your right buttock makes you realize that the "
D ,SYRINGE " in the " D ,ESCAPE-POD-UNIT " has been activated, even though
no alarm sounded.|
You realize that the " D ,SYRINGE " did NOT contain a stimulant.
Instead of feeling more alert, you're already feeling doomed.|
The truth is that you have been fatally poisoned, and the promising
career of a brilliant young inventor will be cut short.|
An investigation into your death would reveal that the " D ,ESCAPE-POD-UNIT
" under your seat had been tampered with.|
A body-heat sensor had been substituted for the electronic
monitor, and a wire was connected from the sensor to the "
D ,SYRINGE ". The stimulant in the "
D ,SYRINGE " had been replaced with arsenic stolen from the "
D ,CHEMICAL-SUPPLY-SHELVES " of the " D ,DOME-LAB ".|
As soon as you heated up your pilot's seat, the sensor
triggered the " D ,SYRINGE ", and it injected you with the poison.|
Most regrettable!">
<FINISH>)>>
<ROUTINE I-TIP-REPORTS ("AUX" B D)
<COND (<OR <FSET? ,BLY ,MUNGBIT>
;"<EQUAL? ,HERE ,CRAWL-SPACE ,SUB>">
<QUEUE I-TIP-REPORTS 3>
<RFALSE>)>
<COND (<EQUAL? ,HERE ,CRAWL-SPACE> <MOVE ,TIP ,SUB>)
(T <MOVE ,TIP ,HERE>)>
<FCLEAR ,TIP ,BUSYBIT>
<SETG TIP-FOLLOWS-YOU? T>
<SETG FINE-SONAR T>
<MOVE ,FINE-GRID ,SUB>
<FCLEAR ,FINE-GRID ,TAKEBIT>
<TIP-SAYS>
<TELL
"All set, "FN"! The " D ,FINE-GRID
" is installed on both the " D ,SONARSCOPE " and the " D ,THROTTLE>
<SET B <==? ,BAZOOKA <GET ,ON-SUB 0>>>
<SET D <==? ,DART <GET ,ON-SUB 1>>>
<COND (<OR .B .D>
<TELL " -- and so ">
<COND (<AND .B .D> <TELL "are">)
(T <TELL "is">)>
<COND (.D <TELL " the " D ,DART>)>
<COND (<AND .B .D> <TELL " and">)>
<COND (.B <TELL " the " D ,BAZOOKA>)>)>
%<XTELL "! Let's shove off and find the " D ,GLOBAL-SNARK "!\"" CR>>
<GLOBAL SNARK-ATTACK-COUNT 0>
<ROUTINE I-SNARK-ATTACKS ()
<COND (<0? ,SNARK-ATTACK-COUNT>
<COND (<NOT ,SUB-IN-DOME>
<COND (<OR <==? ,JOYSTICK-DIR ,P?SE>
<AND <NOT <L? ,SONAR-RANGE <ABS ,SUB-LON>>>
<NOT <L? ,SONAR-RANGE <ABS ,SUB-LAT>>>>>
<QUEUE I-SNARK-ATTACKS 3>
<RFALSE>)>
%<XTELL "A call comes on the "> ;"[more?]"
<COND (<EQUAL? ,HERE ,SUB ,CRAWL-SPACE>
<TELL D ,SONARPHONE>)
(T <TELL D ,VIDEOPHONE>)>
%<XTELL
" from the " D ,AQUADOME": the " D ,GLOBAL-SNARK
" is attacking and destroying it! You're too late!|
|
You'll probably do better if you restart and use fewer turns next time.">
<FINISH>)
(T <ENABLE <QUEUE I-SNARK-ATTACKS -1>>)>)>
<INC SNARK-ATTACK-COUNT>
<COND (<==? 1 ,SNARK-ATTACK-COUNT>
<MOVE ,SIEGEL ,COMM-BLDG>
<MOVE ,TIP ,HERE>
%<XTELL
"|
Suddenly an alarm rings through the " D ,AQUADOME "! " D ,SIEGEL " yells
over the squawk box:|
\"Now hear this! Two blips have appeared on the " D ,SONAR-EQUIPMENT
"! No definite form, but they're large, and they're coming closer."
"\"|
">
<COND (T ;"<IN? ,TIP ,HERE>"
<TIP-SAYS>
<TELL "One of them must be the " D ,GLOBAL-SNARK "!\" ">)>
<COND (<EQUAL? ,HERE ,SUB ,CRAWL-SPACE ,AIRLOCK>
<COND (<FSET? ,AIRLOCK-HATCH ,OPENBIT>
<FCLEAR ,AIRLOCK-HATCH ,OPENBIT>
%<XTELL
"The " D ,AIRLOCK-HATCH " closes in defense.">)>)
(T
<COND (<GLOBAL-IN? ,WINDOW ,HERE>
<TELL "\"Look out the ">)
(T <TELL "\"Let's find a ">)>
<TELL D ,WINDOW ", "FN"!\"">)>
<CRLF>
<RFATAL>)
(<==? 2 ,SNARK-ATTACK-COUNT>
%<XTELL
"|
Even as you try this, the undersea nightmare takes shape!|
\"Holy spaghetti! LOOK at that thing!\" cries Tip.|
A hideous creature, with bulblike eyes near its snout, rears out of the
murk, its tentacles flailing the " D ,GLOBAL-WATER "! In this moment of
terror, the " D ,GLOBAL-SNARK " seems as big as a house,
and it's just outside the " D ,AQUADOME "!" CR>
<RFATAL>)
(<==? 3 ,SNARK-ATTACK-COUNT>
%<XTELL
"|
No more time for that! The " D ,SNARK " has flopped down on the " D
,AQUADOME "!
There's a sound like thunder as the plastic hemisphere cracks
under the impact! The crew's screams of fear are drowned by the roar of
the sea!|
The Atlantic Ocean is pouring into the " D ,AQUADOME "! And
your last thought, before a zillion tons of " D ,GLOBAL-WATER " crushes you
to jelly, is
\"Oh gosh! I wonder if I shut off the Bunsen burner in the lab?\"">
<FINISH>)>>

1173
global.zap Normal file

File diff suppressed because it is too large Load diff

1387
global.zil Normal file

File diff suppressed because it is too large Load diff

49
j1.zap Normal file
View file

@ -0,0 +1,49 @@
.INSERT "J1DAT" ; DATA IS IN THIS FILE
.INSERT "MACROS"
.INSERT "SYNTAX"
.INSERT "MAIN"
.INSERT "SUB"
.INSERT "BATTLE"
.INSERT "THINGS"
.INSERT "DOME"
.INSERT "PEOPLE"
.INSERT "PLACES"
.INSERT "GLOBAL"
.INSERT "CLOCK"
.INSERT "PARSER"
.INSERT "VERBS"
.INSERT "EVENTS"
.INSERT "J1STR"
.END

55
j1.zil Normal file
View file

@ -0,0 +1,55 @@
"COMPILE/LOAD FILE for SEASTALKER
Copyright (C) 1984 Infocom, Inc. All rights reserved."
<COND (<GASSIGNED? PREDGEN>
<PRINC "Compiling">
<ID 0>)
(T <PRINC "Loading">)>
<PRINC " SEASTALKER: junior-level interactive fiction from Infocom!">
<BLOAT 90000 0 0 3500 0 0 0 0 0 512>
<SET REDEFINE T>
<GLOBAL BIGFIX 10000>
<OR <GASSIGNED? ZILCH>
<SETG WBREAKS <STRING !\" !,WBREAKS>>>
<DEFINE IFILE (STR "OPTIONAL" (FLOAD? <>) "AUX" (TIM <TIME>))
<INSERT-FILE .STR .FLOAD?>>
;<DIRECTIONS NORTH SOUTH EAST WEST NE NW SE SW UP DOWN IN OUT>
<DIRECTIONS ;"Do not change the order of the first eight
without consulting MARC! -- ENCHANTER"
NORTH NE EAST SE SOUTH SW WEST NW UP DOWN IN OUT>
<IFILE "MACROS" T>
<IFILE "SYNTAX" T>
<IFILE "MAIN" T>
<COND (<GASSIGNED? PREDGEN>
<IFILE "SUB" T>
<IFILE "BATTLE" T>
<IFILE "THINGS" T>
<IFILE "DOME" T>)>
<IFILE "PEOPLE" T>
<IFILE "PLACES" T>
<IFILE "GLOBAL" T>
<PROPDEF SIZE 5>
<PROPDEF CAPACITY 0>
<IFILE "CLOCK" T>
<ENDLOAD>
<IFILE "PARSER" T>
<IFILE "VERBS" T>
<COND (<GASSIGNED? PREDGEN> <IFILE "EVENTS" T>)>
<GC-MON T>
<GC 0 T 5>
<COND (<NOT <GASSIGNED? PREDGEN>>
<CLOSE!- ,XTELLCHAN>)>

BIN
j1.zip Normal file

Binary file not shown.

216
j1str.zap Normal file
View file

@ -0,0 +1,216 @@
; STRINGS ARE DEFINED HERE
.GSTR STR?1,"You ought to be ashamed of yourself!"
.GSTR STR?2,"Hey, save that talk for the locker room!"
.GSTR STR?3,"Step outside and say that!"
.GSTR STR?4,"And so's your old man!"
.GSTR STR?5,"Please type your first name."
.GSTR STR?6,"Now type your last name."
.GSTR STR?7,"Not Here"
.GSTR STR?8,"Actor"
.GSTR STR?9,"Room (M-BEG)"
.GSTR STR?10,"Preaction"
.GSTR STR?11,"PRSI"
.GSTR STR?12,"Container"
.GSTR STR?13,"PRSO"
.GSTR STR?14,"Room (M-END)"
.GSTR STR?15,"This is your revolutionary new Ultramarine Bioceptor, named the SCIMITAR."
.GSTR STR?16,"too far away"
.GSTR STR?17,"closed"
.GSTR STR?18,"not close enough to the claw"
.GSTR STR?19,"take"
.GSTR STR?20,"push"
.GSTR STR?21,"east"
.GSTR STR?22,"south"
.GSTR STR?23,"open"
.GSTR STR?24,"under water"
.GSTR STR?25,"clean enough"
.GSTR STR?26,"The space is dimly illuminated by small work lights, but you can see machinery everywhere."
.GSTR STR?27,"The only way out is ""OUT""."
.GSTR STR?28,"(You'll find that information in your SEASTALKER package.)"
.GSTR STR?29,"fixed"
.GSTR STR?30,"orange"
.GSTR STR?31,"red"
.GSTR STR?32,"changes to orange"
.GSTR STR?33,"fades to dark again"
.GSTR STR?34,"turns red"
.GSTR STR?35,"continues to sound."
.GSTR STR?36,"ceases."
.GSTR STR?37,"rises to a shriller whine."
.GSTR STR?38,"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 sea square per turn."
.GSTR STR?39,"The yellow light on the sonarscope continues to glow."
.GSTR STR?40,"The red light on the sonarscope continues to glow, and the buzzer also continues to sound."
.GSTR STR?41,"looking at it"
.GSTR STR?42,"set to automatic"
.GSTR STR?43,"set to manual"
.GSTR STR?44,"off"
.GSTR STR?45,"n"
.GSTR STR?46,"ff"
.GSTR STR?47,"on"
.GSTR STR?48,"start"
.GSTR STR?49,"turned on"
.GSTR STR?50,"stop"
.GSTR STR?51,"slow"
.GSTR STR?52,"medium"
.GSTR STR?53,"fast"
.GSTR STR?54,"submerge"
.GSTR STR?55,"here"
.GSTR STR?56,"at that depth"
.GSTR STR?57,"There's a dart gun here."
.GSTR STR?58,"find"
.GSTR STR?59,"mounted"
.GSTR STR?60,"aim"
.GSTR STR?61,"in the way"
.GSTR STR?62,"The bazooka is mounted on a claw."
.GSTR STR?63,"The dart is mounted on a claw."
.GSTR STR?64,"ask"
.GSTR STR?65,"shout"
.GSTR STR?66,"There's a bazooka here."
.GSTR STR?67,"""It's sensitive to the signals on its RIGHT side. Thorpe has installed a sonar transducer on the LEFT or PORT side of this sub. He has to stay on the same side of the monster all the time."""
.GSTR STR?68,"Sharon says, ""Notice how we keep 5 meters to the monster's right and 5 meters behind its nose. The Sea Cat is programmed that way, so the signals reach the monster with enough strength to keep it in control."""
.GSTR STR?69,"Undersea Research Station"
.GSTR STR?70,"empty"
.GSTR STR?71,"full"
.GSTR STR?72,"full of people"
.GSTR STR?73,"You can go down to the north or south."
.GSTR STR?74,"say"
.GSTR STR?75,"On each side"
.GSTR STR?76,"In each corner"
.GSTR STR?77,"refuse"
.GSTR STR?78,"other "
.GSTR STR?79,"the "
.GSTR STR?80,"It's stamped: ""AIR SUPPLY SYSTEM / Fram Bolt Wrench."""
.GSTR STR?81,"It has screw threads."
.GSTR STR?82,"It's sitting neatly in place."
.GSTR STR?83,"ea"
.GSTR STR?84,"we"
.GSTR STR?85,"nor"
.GSTR STR?86,"sou"
.GSTR STR?87,"looking out"
.GSTR STR?88,"playing with"
.GSTR STR?89,"""I can't help you there."""
.GSTR STR?90,"""That has nothing to do with me."""
.GSTR STR?91,"is "
.GSTR STR?92,"at "
.GSTR STR?93,"working on the SCIMITAR"
.GSTR STR?94,"""Wilco, "
.GSTR STR?95,"working on the sonar equipment"
.GSTR STR?96,"""If you think that will help, do it!"""
.GSTR STR?97,"""I think you can do that better yourself."""
.GSTR STR?98,"the bottom"
.GSTR STR?99,"an obstacle"
.GSTR STR?100,"looking at you anxiously"
.GSTR STR?101,"collapsing on the floor"
.GSTR STR?102,"recovering from collapse"
.GSTR STR?103,"using Oxygen Gear"
.GSTR STR?104,"north"
.GSTR STR?105,"west"
.GSTR STR?106,"northwest"
.GSTR STR?107,"northeast"
.GSTR STR?108,"southwest"
.GSTR STR?109,"southeast"
.GSTR STR?110,"downstairs"
.GSTR STR?111,"upstairs"
.GSTR STR?112,"in"
.GSTR STR?113,"out"
.GSTR STR?114,"A circuit breaker is open on the Electrical Panel."
.GSTR STR?115,"There's so much junk in here that there's barely enough room for you."
.GSTR STR?116,"The file drawer is filled with a lot of business papers."
.GSTR STR?117,"Screenplay by Jim Lawrence
"
.GSTR STR?118,"A microphone is sitting on your workbench."
.GSTR STR?119,"You have to go north to board the SCIMITAR."
.GSTR STR?120,". The hatch is "
.GSTR STR?121,".
"
.GSTR STR?122,"This vast enterprise was originally founded by your father, a world-famous inventor. You have added even greater luster to the family name with your own unique inventions."
.GSTR STR?123,"in it"
.GSTR STR?124,"careful"
.GSTR STR?125,"brief"
.GSTR STR?126,"is"
.GSTR STR?127,"can be"
.GSTR STR?128,"???"
.GSTR STR?129,"(I don't know the word """
.GSTR STR?130,""".)"
.GSTR STR?131,"ere"
.GSTR STR?132,"at"
.GSTR STR?133,"begin"
.GSTR STR?134,"end"
.GSTR STR?135,"superbrief"
.GSTR STR?136,"verbose"
.GSTR STR?137,"(Sorry, but it didn't work. Maybe your instruction manual or Reference Card can tell you why.)"
.GSTR STR?138,"go"
.GSTR STR?139," doesn't help any."
.GSTR STR?140," is a waste of time."
.GSTR STR?141," "
.GSTR STR?142," "
.GSTR STR?143," "
.GSTR STR?144," "
.GSTR STR?145," "
.GSTR STR?146,"(I assume you mean:"
.GSTR STR?147," doesn't appear interested"
.GSTR STR?148," doesn't care"
.GSTR STR?149," lets out a loud yawn"
.GSTR STR?150," seems to be growing impatient"
.GSTR STR?151,"That's ridiculous!"
.GSTR STR?152,"That's wacky!"
.GSTR STR?153,"What a fruitcake!"
.GSTR STR?154,"What a screwball!"
.GSTR STR?155,"You're off your rocker!"
.GSTR STR?156,"You're crazy in the head!"
.GSTR STR?157,"You can't be serious!"
.GSTR STR?158,"seem"
.GSTR STR?159,"escape"
.GSTR STR?160,"attack"
.GSTR STR?161,"not wired for phoning"
.GSTR STR?162,"climb onto"
.GSTR STR?163,"on the deck"
.GSTR STR?164,"on the floor"
.GSTR STR?165,"Hello"
.GSTR STR?166,"Good-bye"
.GSTR STR?167,"(You'll find plenty of help in your SEASTALKER package.
If you're really stuck, you can order an InvisiClues (TM) hint booklet either with the form in your package or by writing to:
Infocom, Dept. A2, P.O. Box 620, Garden City, NY 11530.)"
.GSTR STR?168,"Kicking"
.GSTR STR?169,"kill"
.GSTR STR?170,"kisse"
.GSTR STR?171,"standing up"
.GSTR STR?172,"look inside"
.GSTR STR?173,"look outside"
.GSTR STR?174,"locked"
.GSTR STR?175,"Pushing"
.GSTR STR?176,"pick up"
.GSTR STR?177,"Fiddling with"
.GSTR STR?178,"talk into"
.GSTR STR?179,"screw in"
.GSTR STR?180,"her"
.GSTR STR?181,"his"
.GSTR STR?182,"shoot"
.GSTR STR?183,"slap"
.GSTR STR?184,"smell"
.GSTR STR?185,"holding it"
.GSTR STR?186,"reach"
.GSTR STR?187,"talk to"
.GSTR STR?188," ducks"
.GSTR STR?189," doesn't duck"
.GSTR STR?190,"turn off"
.GSTR STR?191,"turn on"
.GSTR STR?192,"unlocked"
.GSTR STR?193,"wait until"
.GSTR STR?194,"not asleep"
.GSTR STR?195,"room."
.GSTR STR?196,"go under"
.GSTR STR?197,"beginning"
.GSTR STR?198,"fair"
.GSTR STR?199,"good"
.GSTR STR?200,"very good"
.GSTR STR?201,"master"
.GSTR STR?202,"famous"
.GSTR STR?203,"busy"
.GSTR STR?204,"""I think you should reconsider."
.GSTR STR?205,"is now"
.GSTR STR?206,"now comes rushing back,"
.ENDI

46
macros.zap Normal file
View file

@ -0,0 +1,46 @@
.FUNCT PRINTT,O
EQUAL? O,TURN \?ELS5
PRINTI " "
PRINTN P-NUMBER
PRINTI " turns"
RTRUE
?ELS5: CALL THE?,O
PRINTI " "
PRINTD O
RTRUE
.FUNCT PRINTA,O
FSET? O,PERSON /?CND1
FSET? O,NARTICLEBIT \?ELS3
JUMP ?CND1
?ELS3: FSET? O,VOWELBIT \?ELS7
PRINTI "an "
JUMP ?CND1
?ELS7: PRINTI "a "
?CND1: PRINTD O
RTRUE
.FUNCT ZPROB,BASE
RANDOM 100
GRTR? BASE,STACK /TRUE
RFALSE
.FUNCT PICK-ONE,FROB
GET FROB,0
RANDOM STACK
GET FROB,STACK
RSTACK
.FUNCT SPLIT-SCREEN?
GETB 0,1
BAND STACK,32
ZERO? STACK /FALSE
RTRUE
.ENDI

BIN
macros.zil Normal file

Binary file not shown.

517
main.zap Normal file
View file

@ -0,0 +1,517 @@
.FUNCT GO
START::
?FCN: SET 'LIT,1
PUTB P-LEXV,0,59
PUTB YES-LEXV,0,4
SET 'SCORE,0
PUTB FIRST-NAME,0,3
PUTB FIRST-NAME,1,45
PUTB FIRST-NAME,2,45
PUTB FIRST-NAME,3,45
PUTB LAST-NAME,0,3
PUTB LAST-NAME,1,45
PUTB LAST-NAME,2,45
PUTB LAST-NAME,3,45
SET 'WINNER,PLAYER
SET 'HERE,CENTER-OF-LAB
CALL THIS-IS-IT,VIDEOPHONE
MOVE TIP,HERE
CALL THIS-IS-IT,TIP
CALL THIS-IS-IT,SHARON
FSET? HERE,TOUCHBIT /?CND1
CALL QUEUE-MAIN-EVENTS
CALL INTRO
?CND1: MOVE PLAYER,HERE
ZERO? RESTORED-DURING-NAME-INPUT \?CND4
CALL V-LOOK
?CND4: CALL MAIN-LOOP
JUMP ?FCN
.FUNCT INTRO,N
PRINTI "Copyright (c) 1984 Infocom, Inc. All rights reserved.
Welcome to junior-level interactive fiction from Infocom!
In this story, you're the hero or heroine, so we'll use your name!"
CRLF
?PRG3: CRLF
CALL READ-NAME,FIRST-NAME,STR?5 >N
EQUAL? N,M-FATAL /FALSE
PRINTI "Hello "
CALL PRINT-NAME,FIRST-NAME
PRINTI "! "
CALL READ-NAME,LAST-NAME,STR?6 >N
EQUAL? N,M-FATAL /FALSE
PRINTI "Is "
CALL PRINT-NAME,FIRST-NAME
PRINTI " "
CALL PRINT-NAME,LAST-NAME
PRINTI " right?"
CALL YES?
ZERO? STACK /?PRG3
PRINTI "Then let the story begin!"
SET 'N,24
?PRG22: DLESS? 'N,0 \?ELS26
JUMP ?REP23
?ELS26: CRLF
JUMP ?PRG22
?REP23: CALL V-VERSION
CRLF
PRINTI """"
CALL PRINT-NAME,FIRST-NAME
PRINTI ", snap out of it!"" cries "
PRINTD GLOBAL-TIP
PRINTI ", bursting into "
PRINTD YOUR-LABORATORY
PRINTI ". ""The alert signal is on!""
You look up from your plans for the "
PRINTD SUB
PRINTI ", a top-secret submarine that's still being tested. It's designed for capturing marine life on the ocean floor. You notice the "
PRINTD ALARM
PRINTI " on the "
PRINTD VIDEOPHONE
PRINTI " ringing. Someone's trying to reach you over the private "
PRINTD VIDEOPHONE
PRINTI " network of "
PRINTD IU-GLOBAL
PRINTR "!
"
.FUNCT QUEUE-MAIN-EVENTS
SET 'ALARM-RINGING,1
CALL QUEUE,I-ALARM-RINGING,-1
PUT STACK,0,1
CALL QUEUE,I-SHOW-SONAR,0
CALL QUEUE,I-UPDATE-FREIGHTER,0
CALL QUEUE,I-UPDATE-SUB-POSITION,0
SET 'OLD-HERE,HERE
SET 'TIP-FOLLOWS-YOU?,1
RANDOM 250
ADD 250,STACK
CALL QUEUE,I-SNARK-ATTACKS,STACK
PUT STACK,0,1
CALL QUEUE,I-LAMP-ON-SCOPE,5
PUT STACK,0,1
CALL QUEUE,I-PROMPT-1,1
PUT STACK,0,1
CALL QUEUE,I-PROMPT-2,10
PUT STACK,0,1
CALL QUEUE,I-SHARON-GONE,25
PUT STACK,0,1
RTRUE
.FUNCT MAIN-LOOP,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,?TMP1
?PRG1: SET 'CNT,0
SET 'OBJ,0
SET 'PTBL,1
EQUAL? QCONTEXT-ROOM,HERE /?CND3
SET 'QCONTEXT,0
?CND3: CALL PARSER >P-WON
ZERO? P-WON /?ELS8
GET P-PRSI,P-MATCHLEN >ICNT
GET P-PRSO,P-MATCHLEN >OCNT
ZERO? OCNT \?ELS13
PUSH OCNT
JUMP ?CND9
?ELS13: GRTR? OCNT,1 \?ELS15
SET 'TBL,P-PRSO
ZERO? ICNT \?ELS18
SET 'OBJ,0
JUMP ?CND16
?ELS18: GET P-PRSI,1 >OBJ
?CND16: PUSH OCNT
JUMP ?CND9
?ELS15: GRTR? ICNT,1 \?ELS22
SET 'PTBL,0
SET 'TBL,P-PRSI
GET P-PRSO,1 >OBJ
PUSH ICNT
JUMP ?CND9
?ELS22: PUSH 1
?CND9: SET 'NUM,STACK
ZERO? OBJ \?CND25
EQUAL? ICNT,1 \?CND25
GET P-PRSI,1 >OBJ
?CND25: EQUAL? PRSA,V?WALK \?ELS32
CALL PERFORM,PRSA,PRSO >V
JUMP ?CND30
?ELS32: ZERO? NUM \?ELS34
GETB P-SYNTAX,P-SBITS
BAND STACK,P-SONUMS
ZERO? STACK \?ELS37
CALL PERFORM,PRSA >V
SET 'PRSO,0
JUMP ?CND30
?ELS37: PRINTI "(There isn't anything to "
GET P-ITBL,P-VERBN >TMP
ZERO? P-OFLAG /?ELS44
GET TMP,0
PRINTB STACK
JUMP ?CND42
?ELS44: GETB TMP,2 >?TMP1
GETB TMP,3
CALL WORD-PRINT,?TMP1,STACK
?CND42: PRINTI "!)"
CRLF
SET 'V,0
JUMP ?CND30
?ELS34: ZERO? PTBL /?ELS51
GRTR? NUM,1 \?ELS51
EQUAL? PRSA,V?COMPARE \?ELS51
CALL PERFORM,PRSA,OBJECT-PAIR >V
JUMP ?CND30
?ELS51: SET 'TMP,0
?PRG56: IGRTR? 'CNT,NUM \?ELS60
GRTR? TMP,0 \?REP57
PRINTI "The other thing"
EQUAL? TMP,1 /?CND66
PRINTI "s"
?CND66: PRINTI " that you mentioned "
EQUAL? TMP,1 /?ELS75
PRINTI "are"
JUMP ?CND73
?ELS75: PRINTI "is"
?CND73: PRINTI "n't here."
CRLF
JUMP ?REP57
?ELS60: ZERO? PTBL /?ELS88
GET P-PRSO,CNT >OBJ1
JUMP ?CND86
?ELS88: GET P-PRSI,CNT >OBJ1
?CND86: GRTR? NUM,1 \?CND92
EQUAL? OBJ1,NOT-HERE-OBJECT \?ELS97
INC 'TMP
JUMP ?PRG56
?ELS97: EQUAL? OBJ1,PLAYER \?ELS99
JUMP ?PRG56
?ELS99: EQUAL? OBJ1,IT \?ELS104
PRINTD P-IT-OBJECT
JUMP ?CND102
?ELS104: PRINTD OBJ1
?CND102: PRINTI ": "
?CND92: ZERO? PTBL /?ELS113
PUSH OBJ1
JUMP ?CND109
?ELS113: PUSH OBJ
?CND109: CALL QCONTEXT-CHECK,STACK >V
ZERO? PTBL /?ELS121
PUSH OBJ1
JUMP ?CND117
?ELS121: PUSH OBJ
?CND117: SET '?TMP1,STACK
ZERO? PTBL /?ELS129
PUSH OBJ
JUMP ?CND125
?ELS129: PUSH OBJ1
?CND125: CALL PERFORM,PRSA,?TMP1,STACK >V
EQUAL? V,M-FATAL \?PRG56
JUMP ?CND30
?REP57:
?CND30: EQUAL? V,M-FATAL \?CND6
SET 'P-CONT,0
JUMP ?CND6
?ELS8: SET 'P-CONT,0
?CND6: ZERO? P-WON /?PRG1
CALL GAME-VERB?
ZERO? STACK \?PRG1
CALL CLOCKER >V
JUMP ?PRG1
.FUNCT QCONTEXT-CHECK,PRSO,OTHER,WHO=0,N=0
EQUAL? PRSA,V?WHAT,V?HELP /?THN6
EQUAL? PRSA,V?TELL-ABOUT,V?SHOW \FALSE
EQUAL? PRSO,PLAYER \FALSE
?THN6: FIRST? HERE >OTHER /?KLU33
?KLU33:
?PRG10: ZERO? OTHER \?ELS14
JUMP ?REP11
?ELS14: FSET? OTHER,PERSON \?CND12
FSET? OTHER,INVISIBLE /?CND12
EQUAL? OTHER,PLAYER /?CND12
INC 'N
SET 'WHO,OTHER
?CND12: NEXT? OTHER >OTHER /?KLU34
?KLU34: JUMP ?PRG10
?REP11: EQUAL? 1,N \?CND19
ZERO? QCONTEXT \?CND19
CALL SAID-TO,WHO
?CND19: CALL QCONTEXT-GOOD?
ZERO? STACK /FALSE
EQUAL? WINNER,PLAYER \FALSE
SET 'WINNER,QCONTEXT
PRINTI "(said to "
PRINTD QCONTEXT
PRINTR ")"
.FUNCT QCONTEXT-GOOD?
ZERO? QCONTEXT /FALSE
FSET? QCONTEXT,INVISIBLE /FALSE
EQUAL? HERE,QCONTEXT-ROOM \FALSE
CALL META-LOC,QCONTEXT
EQUAL? HERE,STACK /TRUE
RFALSE
.FUNCT SAID-TO,WHO
SET 'QCONTEXT,WHO
SET 'QCONTEXT-ROOM,HERE
RTRUE
.FUNCT OBJECT-PAIR-F,P1,P2,?TMP1
GET P-PRSO,P-MATCHLEN
LESS? 2,STACK \?ELS5
EQUAL? PRSA,V?COMPARE \TRUE
PRINTR "That's too many things to compare all at once!"
?ELS5: EQUAL? PRSA,V?COMPARE \FALSE
GET P-PRSO,1 >?TMP1
GET P-PRSO,2
CALL PERFORM,PRSA,?TMP1,STACK
RTRUE
.FUNCT THIS-IS-IT,OBJ
ZERO? OBJ /TRUE
EQUAL? PRSA,V?WALK \?CND4
EQUAL? OBJ,PRSO /TRUE
?CND4: FSET? OBJ,PERSON /?ELS11
EQUAL? OBJ,GLOBAL-HERE,INTDIR /TRUE
SET 'P-IT-OBJECT,OBJ
RTRUE
?ELS11: FSET? OBJ,FEMALE \?ELS16
SET 'P-HER-OBJECT,OBJ
RTRUE
?ELS16: SET 'P-HIM-OBJECT,OBJ
RTRUE
.FUNCT FAKE-ORPHAN,TMP,?TMP1
CALL ORPHAN,P-SYNTAX,0
PRINTI "(Be specific: what thing do you want to "
GET P-OTBL,P-VERBN >TMP
ZERO? TMP \?ELS5
PRINTI "tell"
JUMP ?CND3
?ELS5: GETB P-VTBL,2
ZERO? STACK \?ELS9
GET TMP,0
PRINTB STACK
JUMP ?CND3
?ELS9: GETB TMP,2 >?TMP1
GETB TMP,3
CALL WORD-PRINT,?TMP1,STACK
PUTB P-VTBL,2,0
?CND3: SET 'P-OFLAG,1
SET 'P-WON,0
PRINTR "?)"
.FUNCT TELL-D-LOC,OBJ
PRINTD OBJ
IN? OBJ,GLOBAL-OBJECTS \?ELS7
PRINTI "(gl)"
RTRUE
?ELS7: IN? OBJ,LOCAL-GLOBALS \?ELS11
PRINTI "(lg)"
RTRUE
?ELS11: IN? OBJ,ROOMS \FALSE
PRINTI "(rm)"
RTRUE
.FUNCT FIX-HIM-HER,HEM-OBJECT,V
CALL NOT-ACCESSIBLE?,HEM-OBJECT
ZERO? STACK /?CND1
GETP HEM-OBJECT,P?CHARACTER
GET GLOBAL-CHARACTER-TABLE,STACK
RSTACK
?CND1: GETP HEM-OBJECT,P?CHARACTER
GET CHARACTER-TABLE,STACK >V
LOC V
EQUAL? HERE,STACK \FALSE
RETURN V
.FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI,?TMP1
ZERO? DEBUG /?CND1
PRINTI "[Perform: "
PRINTN A
ZERO? O /?CND9
PRINTI "/"
EQUAL? A,V?WALK \?ELS17
PRINTN O
JUMP ?CND9
?ELS17: CALL TELL-D-LOC,O
?CND9: ZERO? I /?CND22
PRINTI "/"
CALL TELL-D-LOC,I
?CND22: PRINTI "]"
CRLF
?CND1: SET 'OA,PRSA
SET 'OO,PRSO
SET 'OI,PRSI
SET 'PRSA,A
EQUAL? A,V?WALK /?CND30
EQUAL? IT,I,O \?CND33
CALL NOT-ACCESSIBLE?,P-IT-OBJECT
ZERO? STACK /?CND33
ZERO? I \?ELS40
CALL FAKE-ORPHAN
RETURN 2
?ELS40: PRINTI "(Sorry, but"
CALL PRINTT,P-IT-OBJECT
PRINTI " isn't here!)"
CRLF
RETURN 2
?CND33: EQUAL? HER,I,O \?CND47
CALL FIX-HIM-HER,P-HER-OBJECT >V
ZERO? V /?CND47
EQUAL? HER,O \?CND53
SET 'O,V
?CND53: EQUAL? HER,I \?CND50
SET 'I,V
?CND50:
?CND47: EQUAL? HIM,I,O \?CND59
CALL FIX-HIM-HER,P-HIM-OBJECT >V
ZERO? V /?CND59
EQUAL? HIM,O \?CND65
SET 'O,V
?CND65: EQUAL? HIM,I \?CND62
SET 'I,V
?CND62:
?CND59: EQUAL? O,IT \?ELS73
SET 'O,P-IT-OBJECT
JUMP ?CND71
?ELS73: EQUAL? O,HER \?ELS75
SET 'O,P-HER-OBJECT
JUMP ?CND71
?ELS75: EQUAL? O,HIM \?CND71
SET 'O,P-HIM-OBJECT
?CND71: EQUAL? I,IT \?ELS80
SET 'I,P-IT-OBJECT
JUMP ?CND30
?ELS80: EQUAL? I,HER \?ELS82
SET 'I,P-HER-OBJECT
JUMP ?CND30
?ELS82: EQUAL? I,HIM \?CND30
SET 'I,P-HIM-OBJECT
?CND30: SET 'PRSI,I
SET 'PRSO,O
EQUAL? A,V?WALK /?ELS87
EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?ELS87
CALL D-APPLY,STR?7,NOT-HERE-OBJECT-F >V
ZERO? V /?ELS87
SET 'P-WON,0
JUMP ?CND85
?ELS87: CALL THIS-IS-IT,PRSI
ZERO? STACK /?ELS91
CALL THIS-IS-IT,PRSO
ZERO? STACK /?ELS91
SET 'O,PRSO
SET 'I,PRSI
CALL NULL-F
ZERO? STACK /?ELS91
CALL NULL-F
JUMP ?CND85
?ELS91: GETP WINNER,P?ACTION
CALL DD-APPLY,STR?8,WINNER,STACK >V
ZERO? V /?ELS95
JUMP ?CND85
?ELS95: LOC WINNER
GETP STACK,P?ACTION
CALL D-APPLY,STR?9,STACK,M-BEG >V
ZERO? V /?ELS97
JUMP ?CND85
?ELS97: GET PREACTIONS,A
CALL D-APPLY,STR?10,STACK >V
ZERO? V /?ELS99
JUMP ?CND85
?ELS99: ZERO? I /?ELS101
SET 'NOW-PRSI,1
GETP I,P?ACTION
CALL D-APPLY,STR?11,STACK >V
ZERO? V /?ELS101
JUMP ?CND85
?ELS101: SET 'NOW-PRSI,0
ZERO? O /?ELS105
EQUAL? A,V?WALK /?ELS105
LOC O
ZERO? STACK /?ELS105
LOC O
GETP STACK,P?CONTFCN
ZERO? STACK /?ELS105
LOC O >?TMP1
LOC O
GETP STACK,P?CONTFCN
CALL DD-APPLY,STR?12,?TMP1,STACK >V
ZERO? V /?ELS105
JUMP ?CND85
?ELS105: ZERO? O /?ELS109
EQUAL? A,V?WALK /?ELS109
GETP O,P?ACTION
CALL D-APPLY,STR?13,STACK >V
ZERO? V /?ELS109
JUMP ?CND85
?ELS109: GET ACTIONS,A
CALL D-APPLY,0,STACK >V
ZERO? V /?CND85
?CND85: EQUAL? V,M-FATAL /?CND114
LOC WINNER
EQUAL? STACK,PRSO \?CND117
SET 'PRSO,0
?CND117: LOC WINNER
GETP STACK,P?ACTION
CALL D-APPLY,STR?14,STACK,M-END >V
?CND114: SET 'PRSA,OA
SET 'PRSO,OO
SET 'PRSI,OI
RETURN V
.FUNCT DD-APPLY,STR,OBJ,FCN
ZERO? DEBUG /?CND1
PRINTI "["
PRINTD OBJ
PRINTI "=]"
?CND1: CALL D-APPLY,STR,FCN
RSTACK
.FUNCT D-APPLY,STR,FCN,FOO=0,RES
ZERO? FCN /FALSE
ZERO? DEBUG /?CND8
ZERO? STR \?ELS14
PRINTI "[Action:]"
CRLF
JUMP ?CND8
?ELS14: PRINTI "["
PRINT STR
PRINTI ": "
?CND8: ZERO? FOO /?ELS25
CALL FCN,FOO
JUMP ?CND21
?ELS25: CALL FCN
?CND21: SET 'RES,STACK
ZERO? DEBUG /?CND29
ZERO? STR /?CND29
EQUAL? RES,M-FATAL \?ELS36
PRINTI "Fatal]"
CRLF
RETURN RES
?ELS36: ZERO? RES \?ELS40
PRINTI "Not handled]"
CRLF
RETURN RES
?ELS40: PRINTI "Handled]"
CRLF
?CND29: RETURN RES
.ENDI

398
main.zil Normal file
View file

@ -0,0 +1,398 @@
"MAIN for SEASTALKER
Copyright (C) 1984 Infocom, Inc. All rights reserved."
<GLOBAL P-WON <>>
<CONSTANT M-FATAL 2>
<CONSTANT M-HANDLED 1>
<CONSTANT M-NOT-HANDLED <>>
<CONSTANT M-BEG 1>
<CONSTANT M-END 6>
<CONSTANT M-ENTER 2>
<CONSTANT M-LOOK 3>
<CONSTANT M-FLASH 4>
<CONSTANT M-OBJDESC 5>
<ROUTINE GO ()
%<COND (<NOT <GASSIGNED? PREDGEN>>
'(<SETG XTELLCHAN <OPEN "READB" ,XTELLFILE>>
<SETG LIT T>))
('<SETG LIT T>)>
<PUTB ,P-LEXV 0 59>
<PUTB ,YES-LEXV 0 4>
<SETG SCORE 0>
<PUTB ,FIRST-NAME 0 3>
<PUTB ,FIRST-NAME 1 %<ASCII !\->>
<PUTB ,FIRST-NAME 2 %<ASCII !\->>
<PUTB ,FIRST-NAME 3 %<ASCII !\->>
<PUTB ,LAST-NAME 0 3>
<PUTB ,LAST-NAME 1 %<ASCII !\->>
<PUTB ,LAST-NAME 2 %<ASCII !\->>
<PUTB ,LAST-NAME 3 %<ASCII !\->>
;"<PUTB ,GAME-NAME 1 %<ASCII !\S>>
<PUTB ,GAME-NAME 2 %<ASCII !\E>>
<PUTB ,GAME-NAME 3 %<ASCII !\A>>
<PUTB ,GAME-NAME 4 %<ASCII !\S>>
<PUTB ,GAME-NAME 5 %<ASCII !\T>>
<PUTB ,GAME-NAME 6 %<ASCII !\A>>
<PUTB ,GAME-NAME 7 %<ASCII !\L>>
<PUTB ,GAME-NAME 8 %<ASCII !\K>>
<PUTB ,GAME-NAME 9 %<ASCII !\E>>
<PUTB ,GAME-NAME 10 %<ASCII !\R>>"
<SETG WINNER ,PLAYER>
<SETG HERE ,CENTER-OF-LAB>
<THIS-IS-IT ,VIDEOPHONE>
<MOVE ,TIP ,HERE>
<THIS-IS-IT ,TIP>
<THIS-IS-IT ,SHARON>
%<COND (<GASSIGNED? PREDGEN>
'<COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
<QUEUE-MAIN-EVENTS>
<INTRO>)>)
(T '<NULL-F>)>
<MOVE ,PLAYER ,HERE>
<COND (<NOT ,RESTORED-DURING-NAME-INPUT> <V-LOOK>)>
<MAIN-LOOP>
<AGAIN>>
<ROUTINE INTRO ("AUX" N)
%<XTELL
"Copyright (c) 1984 Infocom, Inc. All rights reserved.|
|
Welcome to junior-level interactive fiction from Infocom!|
|
In this story, you're the hero or heroine, so
we'll use your name!" CR>
<REPEAT ()
<TELL CR>
<SET N <READ-NAME ,FIRST-NAME "Please type your first name.">>
<COND (<==? .N ,M-FATAL> <RFALSE>)>
%<XTELL "Hello " FN "! ">
<SET N <READ-NAME ,LAST-NAME "Now type your last name.">>
<COND (<==? .N ,M-FATAL> <RFALSE>)>
%<XTELL "Is " FN " " LN " right?">
<COND (<YES?> <RETURN>)>>
%<XTELL "Then let the story begin!">
<SET N 24>
<REPEAT () <COND (<DLESS? N 0> <RETURN>) (T <CRLF>)>>
<V-VERSION>
<CRLF>
%<XTELL
"\"" FN ", snap out of it!\" cries " D ,GLOBAL-TIP ", bursting into
" D ,YOUR-LABORATORY ". \"The alert signal is on!\"|
You look up from your plans for the " D ,SUB ", a top-secret submarine
that's still being tested. It's designed for capturing marine life on
the ocean floor. You notice the " D ,ALARM " on the " D ,VIDEOPHONE "
ringing. Someone's trying to reach you over the private " D ,VIDEOPHONE
" network of " D ,IU-GLOBAL "!|
" CR>>
<ROUTINE QUEUE-MAIN-EVENTS ()
<SETG ALARM-RINGING T>
<ENABLE <QUEUE I-ALARM-RINGING -1>>
<QUEUE I-SHOW-SONAR 0>
<QUEUE I-UPDATE-FREIGHTER 0>
<QUEUE I-UPDATE-SUB-POSITION 0>
<SETG OLD-HERE ,HERE>
<SETG TIP-FOLLOWS-YOU? T>
<ENABLE <QUEUE I-SNARK-ATTACKS <+ 250 <RANDOM 250>>>>
<ENABLE <QUEUE I-LAMP-ON-SCOPE 5>>
<ENABLE <QUEUE I-PROMPT-1 1>>
<ENABLE <QUEUE I-PROMPT-2 10>>
<ENABLE <QUEUE I-SHARON-GONE 25>>>
<ROUTINE MAIN-LOOP ("AUX" ICNT OCNT NUM CNT OBJ TBL V PTBL OBJ1 TMP)
#DECL ((CNT OCNT ICNT NUM) FIX (V) <OR 'T FIX FALSE> (OBJ)<OR FALSE OBJECT>
(OBJ1) OBJECT (TBL) TABLE (PTBL) <OR FALSE ATOM>)
<REPEAT ()
<SET CNT 0>
<SET OBJ <>>
<SET PTBL T>
<COND (<NOT <==? ,QCONTEXT-ROOM ,HERE>>
<SETG QCONTEXT <>>)>
<COND (<SETG P-WON <PARSER>>
<SET ICNT <GET ,P-PRSI ,P-MATCHLEN>>
<SET NUM
<COND (<0? <SET OCNT <GET ,P-PRSO ,P-MATCHLEN>>> .OCNT)
(<G? .OCNT 1>
<SET TBL ,P-PRSO>
<COND (<0? .ICNT> <SET OBJ <>>)
(T <SET OBJ <GET ,P-PRSI 1>>)>
.OCNT)
(<G? .ICNT 1>
<SET PTBL <>>
<SET TBL ,P-PRSI>
<SET OBJ <GET ,P-PRSO 1>>
.ICNT)
(T 1)>>
<COND (<AND <NOT .OBJ> <1? .ICNT>> <SET OBJ <GET ,P-PRSI 1>>)>
<COND (<==? ,PRSA ,V?WALK>
<SET V <PERFORM ,PRSA ,PRSO>>)
(<0? .NUM>
<COND (<0? <BAND <GETB ,P-SYNTAX ,P-SBITS> ,P-SONUMS>>
<SET V <PERFORM ,PRSA>>
<SETG PRSO <>>)
(T
<TELL "(There isn't anything to ">
<SET TMP <GET ,P-ITBL ,P-VERBN>>
<COND (,P-OFLAG
<PRINTB <GET .TMP 0>>)
(T
<WORD-PRINT <GETB .TMP 2> <GETB .TMP 3>>)>
<TELL "!)" CR>
<SET V <>>)>)
(<AND .PTBL <G? .NUM 1> <VERB? COMPARE>>
<SET V <PERFORM ,PRSA ,OBJECT-PAIR>>)
(T
<SET TMP 0>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .NUM>
<COND (<G? .TMP 0>
<TELL "The other thing">
<COND (<NOT <EQUAL? .TMP 1>>
<TELL "s">)>
<TELL " that you mentioned ">
<COND (<NOT <EQUAL? .TMP 1>>
<TELL "are">)
(T <TELL "is">)>
<TELL "n't here." CR>)>
<RETURN>)
(T
<COND (.PTBL <SET OBJ1 <GET ,P-PRSO .CNT>>)
(T <SET OBJ1 <GET ,P-PRSI .CNT>>)>
<COND (<G? .NUM 1>
<COND (<==? .OBJ1 ,NOT-HERE-OBJECT>
<SET TMP <+ .TMP 1>>
<AGAIN>)
(<==? .OBJ1 ,PLAYER> <AGAIN>)
;(<FSET? .OBJ1 ,DUPLICATE> <AGAIN>)
(T
<COND (<EQUAL? .OBJ1 ,IT>
<PRINTD ,P-IT-OBJECT>)
(T <PRINTD .OBJ1>)>
<TELL ": ">)>)>
<SET V <QCONTEXT-CHECK <COND (.PTBL .OBJ1)
(T .OBJ)>>>
<SET V
<PERFORM ,PRSA ;"? SETG PRSx to these?"
<COND (.PTBL .OBJ1) (T .OBJ)>
<COND (.PTBL .OBJ)(T .OBJ1)>>>
<COND (<==? .V ,M-FATAL> <RETURN>)>)>>)>
<COND (<==? .V ,M-FATAL> <SETG P-CONT <>>)>)
(T
<SETG P-CONT <>>)>
<COND (,P-WON
<COND (<NOT <GAME-VERB?>> <SET V <CLOCKER>>)>)>>>
<ROUTINE QCONTEXT-CHECK (PRSO "AUX" OTHER (WHO <>) (N 0))
<COND (<OR <VERB? ;FIND HELP WHAT>
<AND <VERB? SHOW TELL-ABOUT>
<==? .PRSO ,PLAYER>>> ;"? more?"
<SET OTHER <FIRST? ,HERE>>
<REPEAT ()
<COND (<NOT .OTHER> <RETURN>)
(<AND <FSET? .OTHER ,PERSON>
<NOT <FSET? .OTHER ,INVISIBLE>>
<NOT <==? .OTHER ,PLAYER>>>
<SET N <+ 1 .N>>
<SET WHO .OTHER>)>
<SET OTHER <NEXT? .OTHER>>>
<COND (<AND <==? 1 .N> <NOT ,QCONTEXT>>
<SAID-TO .WHO>)>
<COND (<AND <QCONTEXT-GOOD?>
<==? ,WINNER ,PLAYER>> ;"? more?"
<SETG WINNER ,QCONTEXT>
<TELL "(said to " D ,QCONTEXT ")" CR>)>)>>
<ROUTINE QCONTEXT-GOOD? ()
<COND (<AND ,QCONTEXT
<NOT <FSET? ,QCONTEXT ,INVISIBLE>>
<==? ,HERE ,QCONTEXT-ROOM>
<==? ,HERE <META-LOC ,QCONTEXT>>>
<RTRUE>)>>
<ROUTINE SAID-TO (WHO)
<SETG QCONTEXT .WHO>
<SETG QCONTEXT-ROOM ,HERE>>
"<GLOBAL L-PRSA <>>
<GLOBAL L-PRSO <>>
<GLOBAL L-PRSI <>>"
<OBJECT OBJECT-PAIR
(DESC "such things")
(ACTION OBJECT-PAIR-F)>
<ROUTINE OBJECT-PAIR-F ("AUX" P1 P2)
<COND (<L? 2 <GET ,P-PRSO ,P-MATCHLEN>>
<COND (<VERB? COMPARE>
%<XTELL
"That's too many things to compare all at once!" CR>)>
<RTRUE>)
(<VERB? COMPARE>
<PERFORM ,PRSA <1 ,P-PRSO> <2 ,P-PRSO>>
<RTRUE>)>>
<ROUTINE THIS-IS-IT (OBJ)
<COND (<NOT .OBJ>
<RTRUE>)>
<COND (<AND <VERB? WALK> <==? .OBJ ,PRSO>>
<RTRUE>)>
<COND (<NOT <FSET? .OBJ ,PERSON>>
<COND (<NOT <EQUAL? .OBJ ,GLOBAL-HERE ,INTDIR>>
<SETG P-IT-OBJECT .OBJ>)>)
(<FSET? .OBJ ,FEMALE>
<SETG P-HER-OBJECT .OBJ>)
(T
<SETG P-HIM-OBJECT .OBJ>)>
<RTRUE>>
<ROUTINE FAKE-ORPHAN ("AUX" TMP)
<ORPHAN ,P-SYNTAX <>>
<TELL "(Be specific: what thing do you want to ">
<SET TMP <GET ,P-OTBL ,P-VERBN>>
<COND (<==? .TMP 0> <TELL "tell">)
(<0? <GETB ,P-VTBL 2>>
<PRINTB <GET .TMP 0>>)
(T
<WORD-PRINT <GETB .TMP 2> <GETB .TMP 3>>
<PUTB ,P-VTBL 2 0>)>
<SETG P-OFLAG T>
<SETG P-WON <>>
<TELL "?)" CR>>
<GLOBAL NOW-PRSI <>>
<ROUTINE TELL-D-LOC (OBJ)
<TELL D .OBJ>
<COND (<IN? .OBJ ,GLOBAL-OBJECTS> <TELL "(gl)">)
(<IN? .OBJ ,LOCAL-GLOBALS> <TELL "(lg)">)
(<IN? .OBJ ,ROOMS> <TELL "(rm)">)>>
<ROUTINE FIX-HIM-HER (HEM-OBJECT "AUX" V)
<COND (<NOT-ACCESSIBLE? .HEM-OBJECT>
;<COND (,DEBUG <TELL "[" D .HEM-OBJECT ":NA]" CR>)>
<RETURN <GET ,GLOBAL-CHARACTER-TABLE
<GETP .HEM-OBJECT ,P?CHARACTER>>>)>
<SET V <GET ,CHARACTER-TABLE <GETP .HEM-OBJECT ,P?CHARACTER>>>
<COND (<EQUAL? ,HERE <LOC .V>>
;<COND (,DEBUG <TELL "[" D .HEM-OBJECT ":LO]" CR>)>
<RETURN .V>)>>
<ROUTINE PERFORM (A "OPTIONAL" (O <>) (I <>) "AUX" V OA OO OI)
#DECL ((A) FIX (O) <OR FALSE OBJECT FIX> (I) <OR FALSE OBJECT> (V)ANY)
<COND (,DEBUG
<TELL "[Perform: ">
%<COND (<GASSIGNED? PREDGEN> '<TELL N .A>)
(T '<PRINC <NTH ,ACTIONS <+ <* .A 2> 1>>>)>
<COND (.O
<TELL "/">
<COND (<==? .A ,V?WALK> <TELL N .O>)
(T <TELL-D-LOC .O>)>)>
<COND (.I
<TELL "/">
<TELL-D-LOC .I>)>
<TELL "]" CR>)>
<SET OA ,PRSA>
<SET OO ,PRSO>
<SET OI ,PRSI>
<SETG PRSA .A>
<COND (<NOT <EQUAL? .A ,V?WALK>>
<COND (<AND <EQUAL? ,IT .I .O>
<NOT-ACCESSIBLE? ,P-IT-OBJECT>>
<COND (<NOT .I> <FAKE-ORPHAN>)
(T <TELL
"(Sorry, but" THE ,P-IT-OBJECT " isn't here!)" CR>)>
<RFATAL>)>
<COND (<EQUAL? ,HER .I .O>
<COND (<SET V <FIX-HIM-HER ,P-HER-OBJECT>>
<COND (<==? ,HER .O> <SET O .V>)>
<COND (<==? ,HER .I> <SET I .V>)>)>)>
<COND (<EQUAL? ,HIM .I .O>
<COND (<SET V <FIX-HIM-HER ,P-HIM-OBJECT>>
<COND (<==? ,HIM .O> <SET O .V>)>
<COND (<==? ,HIM .I> <SET I .V>)>)>)>
<COND (<==? .O ,IT> <SET O ,P-IT-OBJECT>)
(<==? .O ,HER> <SET O ,P-HER-OBJECT>)
(<==? .O ,HIM> <SET O ,P-HIM-OBJECT>)>
<COND (<==? .I ,IT> <SET I ,P-IT-OBJECT>)
(<==? .I ,HER> <SET I ,P-HER-OBJECT>)
(<==? .I ,HIM> <SET I ,P-HIM-OBJECT>)>)>
<SETG PRSI .I>
<SETG PRSO .O>
<COND (<AND <NOT <EQUAL? .A ,V?WALK>>
<EQUAL? ,NOT-HERE-OBJECT ,PRSO ,PRSI>
<SET V <D-APPLY "Not Here" ,NOT-HERE-OBJECT-F>>>
<SETG P-WON <>>
.V)
(<AND <THIS-IS-IT ,PRSI>
<THIS-IS-IT ,PRSO>
<SET O ,PRSO>
<SET I ,PRSI>
<NULL-F>>
<NULL-F>) ;"[in case last clause changed PRSx]"
(<SET V <DD-APPLY "Actor" ,WINNER <GETP ,WINNER ,P?ACTION>>> .V)
(<SET V <D-APPLY "Room (M-BEG)"
<GETP <LOC ,WINNER> ,P?ACTION>
,M-BEG>> .V)
(<SET V <D-APPLY "Preaction"
<GET ,PREACTIONS .A>>> .V)
(<AND .I
<SETG NOW-PRSI T>
<SET V <D-APPLY "PRSI" <GETP .I ,P?ACTION>>>>
.V)
(<AND <NOT <SETG NOW-PRSI <>>>
.O
<NOT <==? .A ,V?WALK>>
<LOC .O>
<GETP <LOC .O> ,P?CONTFCN>
<SET V <DD-APPLY "Container" <LOC .O>
<GETP <LOC .O> ,P?CONTFCN>>>>
.V)
(<AND .O
<NOT <==? .A ,V?WALK>>
<SET V <D-APPLY "PRSO"
<GETP .O ,P?ACTION>>>>
.V)
(<SET V <D-APPLY <>
<GET ,ACTIONS .A>>> .V)>
<COND (<NOT <==? .V ,M-FATAL>>
<COND (<==? <LOC ,WINNER> ,PRSO> ;"was not in compiled PERFORM"
<SETG PRSO <>>)>
<SET V <D-APPLY "Room (M-END)"
<GETP <LOC ,WINNER> ,P?ACTION> ,M-END>>)>
<SETG PRSA .OA>
<SETG PRSO .OO>
<SETG PRSI .OI>
.V>
<ROUTINE DD-APPLY (STR OBJ FCN)
<COND (,DEBUG <TELL "[" D .OBJ "=]">)>
<D-APPLY .STR .FCN>>
<ROUTINE D-APPLY (STR FCN "OPTIONAL" (FOO <>) "AUX" RES)
<COND (<NOT .FCN> <>)
(T
<COND (,DEBUG
<COND (<NOT .STR>
<TELL "[Action:]" CR>)
(T <TELL "[" .STR ": ">)>)>
<SET RES
<COND (.FOO <APPLY .FCN .FOO>)
(T <APPLY .FCN>)>>
<COND (<AND ,DEBUG .STR>
<COND (<==? .RES ,M-FATAL>
<TELL "Fatal]" CR>)
(<NOT .RES>
<TELL "Not handled]" CR>)
(T <TELL "Handled]" CR>)>)>
.RES)>>

1427
parser.zap Normal file

File diff suppressed because it is too large Load diff

1335
parser.zil Normal file

File diff suppressed because it is too large Load diff

2385
people.zap Normal file

File diff suppressed because it is too large Load diff

2125
people.zil Normal file

File diff suppressed because it is too large Load diff

884
places.zap Normal file
View file

@ -0,0 +1,884 @@
.FUNCT DIR-PRINT,DIR,THE?=1,CNT=0
?PRG1: GET DIR-STRINGS,CNT
EQUAL? STACK,DIR \?CND3
ZERO? THE? /?CND6
PRINTI "the "
?CND6: ADD CNT,1
GET DIR-STRINGS,STACK
PRINT STACK
RTRUE
?CND3: INC 'CNT
JUMP ?PRG1
.FUNCT NULL-F,A1,A2
RFALSE
.FUNCT DDESC,STR1,DOOR,STR2
PRINT STR1
FSET? DOOR,OPENBIT \?ELS5
PRINTI "open"
JUMP ?CND3
?ELS5: PRINTI "closed"
?CND3: PRINT STR2
CRLF
RTRUE
.FUNCT DOOR-ROOM,RM,DR,P=0,T
?PRG1: NEXTP RM,P >P
ZERO? P /FALSE
LESS? P,LOW-DIRECTION /FALSE
GETPT RM,P >T
PTSIZE T
EQUAL? DEXIT,STACK \?PRG1
GETB T,DEXITOBJ
EQUAL? DR,STACK \?PRG1
GETB T,REXIT
RETURN STACK
.FUNCT FIND-FLAG,RM,FLAG,EXCLUDED=0,O
FIRST? RM >O /?KLU12
?KLU12:
?PRG1: ZERO? O /FALSE
FSET? O,FLAG \?ELS7
EQUAL? O,EXCLUDED /?ELS7
RETURN O
?ELS7: NEXT? O >O /?KLU13
?KLU13: JUMP ?PRG1
.FUNCT META-LOC,OBJ,L
LOC OBJ >L
?PRG1: ZERO? L /FALSE
EQUAL? L,LOCAL-GLOBALS,GLOBAL-OBJECTS \?ELS7
RETURN L
?ELS7: IN? OBJ,ROOMS \?ELS9
RETURN OBJ
?ELS9: SET 'OBJ,L
LOC OBJ >L
JUMP ?PRG1
.FUNCT IN-LAB-AREA?,RM
ZERO? SUB-IN-TANK /?ELS5
EQUAL? RM,SUB,CRAWL-SPACE /TRUE
?ELS5: EQUAL? RM,HALLWAY,LAB-STORAGE,OFFICE /TRUE
CALL IN-LAB?,RM
ZERO? STACK \TRUE
CALL IN-TANK-AREA?,RM
ZERO? STACK \TRUE
RFALSE
.FUNCT IN-LAB?,RM
EQUAL? RM,NORTH-WALL,EAST-WALL,SOUTH-WALL /TRUE
EQUAL? RM,WEST-WALL,CENTER-OF-LAB /TRUE
RFALSE
.FUNCT IN-TANK-AREA?,RM
EQUAL? RM,SOUTH-TANK-AREA,WEST-TANK-AREA,NORTH-TANK-AREA /TRUE
RFALSE
.FUNCT SHARON-PASSES-YOU?,L,?ORTMP
EQUAL? HERE,OFFICE /TRUE
EQUAL? HERE,HALLWAY /?THN8
EQUAL? HERE,LAB-STORAGE \?ELS7
FSET? STORAGE-DOOR,OPENBIT \?ELS7
?THN8: EQUAL? L,OFFICE /FALSE
RTRUE
?ELS7: EQUAL? HERE,LAB-STORAGE \?ELS15
EQUAL? L,LAB-STORAGE /TRUE
RFALSE
?ELS15: CALL IN-LAB?,HERE
ZERO? STACK /?ELS19
EQUAL? L,OFFICE,HALLWAY,LAB-STORAGE /FALSE
RTRUE
?ELS19: CALL IN-TANK-AREA?,HERE
ZERO? STACK /?ELS23
CALL IN-TANK-AREA?,L
POP '?ORTMP
ZERO? ?ORTMP /?ORP27
RETURN ?ORTMP
?ORP27: EQUAL? L,SUB,CRAWL-SPACE /TRUE
RFALSE
?ELS23: EQUAL? HERE,SUB \?ELS29
EQUAL? L,SUB,CRAWL-SPACE /TRUE
RFALSE
?ELS29: EQUAL? L,CRAWL-SPACE /TRUE
RFALSE
.FUNCT RESEARCH-LAB
PRINTI " the "
CALL PRINT-NAME,LAST-NAME
PRINTI " Research Lab"
RTRUE
.FUNCT NORTH-WALL-F,RARG=0
EQUAL? RARG,M-LOOK \FALSE
PRINTI "You're in the "
PRINTD NORTH-WALL
PRINTI " of "
PRINTD YOUR-LABORATORY
PRINTI ". A "
PRINTD COMPUTESTOR
PRINTR " stands here to help test your inventions."
.FUNCT COMPUTESTOR-F
EQUAL? PRSA,V?LOOK-UNDER,V?LOOK-ON,V?LOOK-INSIDE /FALSE
EQUAL? PRSA,V?LOOK-BEHIND,V?WALK-TO,V?TAKE /FALSE
EQUAL? PRSA,V?EXAMINE \?ELS9
PRINTI "The "
PRINTD COMPUTESTOR
PRINTI " is o"
FSET? COMPUTESTOR,ONBIT \?ELS16
PUSH STR?45
JUMP ?CND12
?ELS16: PUSH STR?46
?CND12: PRINT STACK
PRINTR "."
?ELS9: EQUAL? PRSA,V?LAMP-ON \?ELS20
FSET? COMPUTESTOR,ONBIT /FALSE
FSET COMPUTESTOR,ONBIT
PRINTI "The "
PRINTD COMPUTESTOR
PRINTR " is ready for questions."
?ELS20: CALL REMOTE-VERB?
ZERO? STACK /?ELS29
EQUAL? PRSA,V?ASK-ABOUT \FALSE
EQUAL? PRSO,COMPUTESTOR \FALSE
?ELS29: FSET? COMPUTESTOR,ONBIT /?ELS35
PRINTI "The "
PRINTD COMPUTESTOR
PRINTR " is off!"
?ELS35: EQUAL? PRSA,V?USE,V?ASK \?ELS39
FSET? VIDEOPHONE,MUNGBIT \?ELS44
CALL PERFORM,V?ASK-ABOUT,COMPUTESTOR,VIDEOPHONE
RTRUE
?ELS44: IN? CATALYST-CAPSULE,REACTOR /FALSE
CALL PERFORM,V?ASK-ABOUT,COMPUTESTOR,GLOBAL-SUB
RTRUE
?ELS39: EQUAL? PRSA,V?ASK-ABOUT \FALSE
EQUAL? PRSO,COMPUTESTOR \FALSE
EQUAL? PRSI,CIRCUIT-BREAKER \?ELS57
FSET? CIRCUIT-BREAKER,OPENBIT \?ELS57
PRINTI """A "
PRINTD CIRCUIT-BREAKER
PRINTR " is open."""
?ELS57: EQUAL? PRSI,VIDEOPHONE \?ELS63
FSET? VIDEOPHONE,MUNGBIT \?ELS63
SET 'TIP-SAYS-1,32
SET 'TIP-SAYS-2,VIDEOPHONE
CALL QUEUE,I-TIP-SAYS,3
PUT STACK,0,1
PRINTI """Symptoms: no picture, no sound.
Possible causes:
1) Failure of the "
PRINTD VIDEOPHONE-TRANSMITTER
PRINTI " at source.
2) A short in the "
PRINTD VIDEOPHONE-CABLE
PRINTI " linking "
PRINTD VIDEOPHONE-TRANSMITTER
PRINTI " to"
CALL RESEARCH-LAB
PRINTI ", if signal is coming from "
PRINTD AQUADOME
PRINTI ".
3) Sunspot interference or "
PRINTD VIDEOPHONE-SATELLITE
PRINTI " malfunction if "
PRINTD VIDEOPHONE-TRANSMITTER
PRINTI " is at earth's surface.
4) Failure of the video receiver.
5) Overload in the "
PRINTD ELECTRICAL-CONTROL-PANEL
PRINTI " ("
PRINTD CIRCUIT-BREAKER
PRINTI " popped).
6) Sabotage ("
PRINTD CIRCUIT-BREAKER
PRINTR " open)."""
?ELS63: EQUAL? PRSI,VIDEOPHONE-TRANSMITTER \?ELS71
FSET? VIDEOPHONE,MUNGBIT \?ELS71
PRINTI "Impossible. It's located "
PRINTD UNDERWATER
PRINTI " at the "
PRINTD AQUADOME
PRINTI ", beyond your control. Right now you have no communication with the "
PRINTD AQUADOME
PRINTR "."
?ELS71: EQUAL? PRSI,VIDEOPHONE-CABLE \?ELS77
PRINTR "This can be done only by submarine."
?ELS77: EQUAL? PRSI,VIDEOPHONE-SATELLITE \?ELS81
PRINTI "You're goofing off, "
CALL PRINT-NAME,FIRST-NAME
PRINTI ". Video signals from the "
PRINTD AQUADOME
PRINTI " to"
CALL RESEARCH-LAB
PRINTI " are NOT relayed by a space "
PRINTD VIDEOPHONE-SATELLITE
PRINTR "."
?ELS81: EQUAL? PRSI,VIDEOPHONE-RECEIVER \?ELS87
PRINTI "You can do this by pushing the "
PRINTD TEST-BUTTON
PRINTI " on the "
PRINTD VIDEOPHONE
PRINTR "."
?ELS87: EQUAL? PRSI,REACTOR,GLOBAL-SUB \?ELS91
IN? CATALYST-CAPSULE,REACTOR /?ELS91
PRINTI """Symptom: "
PRINTD ENGINE
PRINTI " won't start.
Possible causes:
1) The "
PRINTD CATALYST-CAPSULE
PRINTI " is not inserted in the "
PRINTD REACTOR
PRINTI ".
2) The "
PRINTD REACTOR
PRINTI " is not turned on.
3) The "
PRINTD TEST-TANK
PRINTR " is not filled."""
?ELS91: PRINTI """This device is designed only to troubleshoot operating problems.""
(Maybe you can find information about"
CALL THE-PRSI-PRINT
PRINTR " in your SEASTALKER package.)"
.FUNCT VIDEOPHONE-TEST-F
EQUAL? PRSA,V?ANALYZE \FALSE
CALL PERFORM,V?ASK-ABOUT,COMPUTESTOR,PRSO
RTRUE
.FUNCT EAST-WALL-F,RARG=0
EQUAL? RARG,M-LOOK \?ELS5
PRINTI "You're in the "
PRINTD EAST-WALL
PRINTI " of "
PRINTD YOUR-LABORATORY
PRINTI ". A doorway leads out through a "
PRINTD HALLWAY
PRINTI " to the office of your "
PRINTD LAB-ASSISTANT
PRINTI ", "
PRINTD GLOBAL-SHARON
PRINTI ". A "
PRINTD MICROWAVE-SECURITY-SCANNER
PRINTI " stands against the wall. An "
PRINTD INTERCOM
PRINTI " sits on the "
PRINTD DESK
PRINTR "."
?ELS5: EQUAL? RARG,M-ENTER \FALSE
ZERO? BREAKER-JUST-FIXED /FALSE
FSET? CIRCUIT-BREAKER,OPENBIT /FALSE
SET 'BREAKER-JUST-FIXED,0
PRINTI "As you re-enter the lab, "
CALL TIP-SAYS
PRINTI "Look, "
CALL PRINT-NAME,FIRST-NAME
PRINTI "! The "
PRINTD VIDEOPHONE
PRINTR "'s working again! There's a normal test pattern on the screen!"""
.FUNCT MICROWAVE-SECURITY-SCANNER-F
EQUAL? PRSA,V?LAMP-ON \FALSE
PRINTR "No beep occurs. Scanner displays: ""NO INTRUDER PRESENT ON GROUNDS."""
.FUNCT DESK-F
EQUAL? PRSA,V?OPEN \?ELS5
PRINTR "It has no drawers."
?ELS5: EQUAL? PRSA,V?LOOK-ON,V?LOOK-INSIDE,V?EXAMINE \FALSE
EQUAL? PRSO,DESK \FALSE
PRINTI "An intercom is on the desk"
FIRST? DESK \?CND14
PRINTI ", as well as "
CALL PRINT-CONTENTS,DESK
?CND14: PRINTR "."
.FUNCT GENERIC-DESK-F,OBJ
CALL IN-LAB?,HERE
ZERO? STACK /?ELS5
RETURN DESK
?ELS5: EQUAL? HERE,OFFICE \?ELS7
RETURN KEMP-DESK
?ELS7: ZERO? SUB-IN-DOME /FALSE
RETURN BLY-DESK
.FUNCT HALLWAY-F,RARG=0
EQUAL? RARG,M-LOOK \?ELS5
PRINTI "You're in a "
PRINTD HALLWAY
PRINTI ", with "
PRINTD YOUR-LABORATORY
PRINTI " to the west, a "
PRINTD LAB-STORAGE
PRINTI " to the south, and "
PRINTD OFFICE
PRINTI " to the east. An "
PRINTD ELECTRICAL-CONTROL-PANEL
PRINTR " fills most of the north wall."
?ELS5: EQUAL? RARG,M-ENTER \FALSE
FSET? CIRCUIT-BREAKER,MUNGBIT \FALSE
CALL TELL-HINT,31,ELECTRICAL-CONTROL-PANEL,0
RSTACK
.FUNCT ELECTRICAL-CONTROL-PANEL-F
EQUAL? PRSA,V?EXAMINE,V?ANALYZE \?ELS5
FSET? CIRCUIT-BREAKER,OPENBIT \?ELS5
CALL THIS-IS-IT,CIRCUIT-BREAKER
PRINTI "A "
PRINTD CIRCUIT-BREAKER
PRINTI " on the "
PRINTD ELECTRICAL-CONTROL-PANEL
PRINTI " is open. This "
PRINTD CIRCUIT-BREAKER
PRINTI " controls the "
PRINTD POWER-SUPPLY
PRINTI " to the "
PRINTD VIDEOPHONE
PRINTI " and other equipment in the private "
PRINTD VIDEOPHONE
PRINTI " network."
CRLF
IN? TIP,HERE \TRUE
CALL TIP-SAYS
PRINTR "How did that happen? You didn't overload the circuit."""
?ELS5: EQUAL? PRSA,V?OPEN \FALSE
PRINTI "You don't need to open the "
PRINTD ELECTRICAL-CONTROL-PANEL
PRINTR "."
.FUNCT CIRCUIT-BREAKER-F,V
EQUAL? PRSA,V?EXAMINE,V?ANALYZE \?ELS5
FSET? PRSO,OPENBIT \?ELS5
CALL TELL-HINT,31,ELECTRICAL-CONTROL-PANEL,0
RSTACK
?ELS5: EQUAL? PRSA,V?TURN,V?MOVE /?THN10
EQUAL? PRSA,V?FIX,V?PUSH,V?CLOSE \?ELS9
?THN10: FSET? PRSO,OPENBIT \?ELS16
FSET PRSO,NDESCBIT
CALL OKAY,CIRCUIT-BREAKER,STR?17
FSET? PRSO,MUNGBIT \TRUE
SET 'BREAKER-JUST-FIXED,1
FCLEAR PRSO,MUNGBIT
FCLEAR VIDEOPHONE,MUNGBIT
FSET VIDEOPHONE,ONBIT
CALL SCORE-OBJ,CIRCUIT-BREAKER
RTRUE
?ELS16: CALL ALREADY,CIRCUIT-BREAKER,STR?17
RSTACK
?ELS9: EQUAL? PRSA,V?OPEN \FALSE
FSET? PRSO,OPENBIT \?ELS28
CALL ALREADY,CIRCUIT-BREAKER,STR?23
RSTACK
?ELS28: PRINTR "You shouldn't do that."
.FUNCT GENERIC-STORAGE-ROOM-F,OBJ
ZERO? SUB-IN-DOME /?ELS5
RETURN DOME-STORAGE
?ELS5: ZERO? SUB-IN-TANK /FALSE
RETURN LAB-STORAGE
.FUNCT GENERIC-OFFICE-F,OBJ
ZERO? SUB-IN-DOME /?ELS5
RETURN BLY-OFFICE
?ELS5: ZERO? SUB-IN-TANK /FALSE
RETURN OFFICE
.FUNCT OFFICE-F,ARG=0
EQUAL? ARG,M-LOOK \?ELS5
PRINTI "You're in the office of your "
PRINTD LAB-ASSISTANT
PRINTI ", "
PRINTD GLOBAL-SHARON
PRINTI ". There is a desk and chair here, and the "
PRINTD OFFICE-DOOR
PRINTI " leading out to the parking lot. To the west, a "
PRINTD HALLWAY
PRINTI " leads back to "
PRINTD YOUR-LABORATORY
PRINTR "."
?ELS5: IN? SHARON,OFFICE \?ELS9
EQUAL? ARG,M-BEG \?ELS9
CALL EXIT-VERB?
ZERO? STACK /?ELS9
FSET SHARON,NDESCBIT
FSET FILE-DRAWER,NDESCBIT
FSET PAPERS,NDESCBIT
RFALSE
?ELS9: EQUAL? ARG,M-ENTER \FALSE
FCLEAR SHARON,NDESCBIT
FCLEAR FILE-DRAWER,NDESCBIT
FCLEAR PAPERS,NDESCBIT
IN? SHARON,OFFICE \FALSE
CALL THIS-IS-IT,SHARON
CALL THIS-IS-IT,FILE-DRAWER
PRINTI "As you enter, Sharon is hastily going through the contents of an open "
PRINTD FILE-DRAWER
PRINTR ". She turns with a startled expression as you appear in the doorway. Her face is flushed and her manner seems slightly emotional."
.FUNCT OFFICE-DOOR-F
EQUAL? PRSA,V?OPEN \FALSE
PRINTR "There's nothing outside to help your mission!"
.FUNCT PAPERS-F,X
EQUAL? PRSA,V?LOOK-UP \?ELS5
EQUAL? PRSI,PAPERS,FILE-DRAWER \?ELS5
FSET? PRSO,PERSON \?ELS10
GETP LOCAL-SUB,P?TEXT
PRINT STACK
CRLF
JUMP ?CND8
?ELS10: PRINTI "There's no information in the drawer about that."
?CND8: CRLF
RTRUE
?ELS5: EQUAL? PRSA,V?CLOSE \?ELS18
IN? SHARON,OFFICE \?ELS18
PRINTI "Sharon stops you from closing it. ""Hey, "
CALL PRINT-NAME,FIRST-NAME
PRINTR "! I can't do my job here if you interfere!"""
?ELS18: EQUAL? PRSA,V?SEARCH-FOR,V?SEARCH,V?TAKE /?THN25
EQUAL? PRSA,V?READ,V?LOOK-INSIDE,V?EXAMINE \FALSE
?THN25: FSET? FILE-DRAWER,OPENBIT /?CND27
CALL TOO-BAD-BUT,FILE-DRAWER,STR?17
RTRUE
?CND27: FSET PAPERS,TOUCHBIT
PRINTI "You look "
EQUAL? P-ADVERB,W?CAREFULLY \?ELS34
PRINTI "more thoroughly through the drawer and still"
JUMP ?CND32
?ELS34: PRINTI "quickly through the drawer but"
?CND32: PRINTR " find nothing suspicious, so you decide to leave the papers alone."
.FUNCT SOUTH-WALL-F,RARG=0
EQUAL? RARG,M-LOOK \FALSE
PRINTI "You're in the "
PRINTD SOUTH-WALL
PRINTI " of "
PRINTD YOUR-LABORATORY
PRINTI ", next to shelves full of chemical and electronic supplies. A door leads south to the "
PRINTD TEST-TANK
PRINTR "."
.FUNCT CHEMICAL-SUPPLY-SHELVES-F
EQUAL? PRSA,V?PUT /?THN6
EQUAL? PRSA,V?LOOK-ON,V?LOOK-INSIDE,V?EXAMINE \FALSE
?THN6: FCLEAR CHEMICALS,NDESCBIT
RFALSE
.FUNCT ELECTRONIC-SUPPLY-SHELVES-F
EQUAL? PRSA,V?PUT /?THN6
EQUAL? PRSA,V?LOOK-ON,V?LOOK-INSIDE,V?EXAMINE \FALSE
?THN6: FCLEAR ELECTRONICS,NDESCBIT
RFALSE
.FUNCT WEST-WALL-F,RARG=0
EQUAL? RARG,M-LOOK \FALSE
PRINTI "You're in the "
PRINTD WEST-WALL
PRINTI " of "
PRINTD YOUR-LABORATORY
PRINTR ", next to a shelf full of mechanical supplies."
.FUNCT MECHANICAL-SUPPLY-SHELVES-F
EQUAL? PRSA,V?PUT /?THN6
EQUAL? PRSA,V?LOOK-ON,V?LOOK-INSIDE,V?EXAMINE \FALSE
?THN6: FCLEAR MECHANICALS,NDESCBIT
RFALSE
.FUNCT GENERIC-CENTER-F,OBJ
ZERO? SUB-IN-TANK /?ELS5
RETURN CENTER-OF-LAB
?ELS5: ZERO? SUB-IN-DOME /FALSE
RETURN CENTER-OF-DOME
.FUNCT CENTER-OF-LAB-F,RARG=0
EQUAL? RARG,M-BEG \?ELS5
LOC MICROPHONE
EQUAL? STACK,WINNER \?ELS5
CALL EXIT-VERB?
ZERO? STACK /?ELS5
CALL THIS-IS-IT,MICROPHONE
CALL HE-SHE-IT,WINNER,1
PRINTI " can't walk away while "
CALL HE-SHE-IT,WINNER
IN? MICROPHONE,PLAYER \?ELS12
PRINTI "'re"
JUMP ?CND10
?ELS12: PRINTI "'s"
?CND10: PRINTI " holding the "
PRINTD MICROPHONE
PRINTR "!"
?ELS5: EQUAL? RARG,M-LOOK \FALSE
PRINTI "You're at your workbench in the center of "
PRINTD YOUR-LABORATORY
PRINTI ", a small part of"
CALL RESEARCH-LAB
PRINTI " in the town of Frobton. The "
PRINTD VIDEOPHONE
PRINTI " screen looms overhead"
ZERO? ALARM-RINGING /?CND27
PRINTI ", with its "
PRINTD ALARM
PRINTI " ringing"
?CND27: PRINTR "."
.FUNCT WORKBENCH-F
EQUAL? PRSA,V?PUT,V?LOOK-ON,V?LOOK-INSIDE /?THN6
EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE
?THN6: FCLEAR SUB-PLANS,NDESCBIT
RFALSE
.FUNCT SUB-PLANS-F,X,STR
EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE
RANDOM 100
GRTR? 50,STACK /?PRD6
PUSH 0
JUMP ?PRD7
?PRD6: PUSH 1
?PRD7: SET 'X,STACK
SET 'STR,STR?117
PRINTI "Written in one corner is the legend:
"
ZERO? X /?CND10
PRINT STR
?CND10: PRINTI " Directed by Stu Galley
"
ZERO? X \?CND18
PRINT STR
?CND18: CRLF
CALL V-VERSION
RSTACK
.FUNCT GENERIC-MICROPHONE-F,OBJ
ZERO? SUB-IN-TANK /?ELS5
RETURN MICROPHONE
?ELS5: ZERO? SUB-IN-DOME /FALSE
RETURN MICROPHONE-DOME
.FUNCT MICROPHONE-F,DOME?=0
EQUAL? PRSA,V?EXAMINE \?ELS5
PRINTI "The "
PRINTD MICROPHONE
PRINTI " is connected to the "
PRINTD VIDEOPHONE
PRINTI " by a coiled cord. At the moment, it is turned o"
ZERO? DOME? /?ELS16
FSET? MICROPHONE-DOME,ONBIT /?THN13
?ELS16: ZERO? DOME? \?ELS12
FSET? MICROPHONE,ONBIT \?ELS12
?THN13: PRINTR "n."
?ELS12: PRINTR "ff."
?ELS5: EQUAL? PRSA,V?LAMP-OFF /?THN29
CALL DIVESTMENT?,MICROPHONE
ZERO? STACK \?THN29
CALL DIVESTMENT?,MICROPHONE-DOME
ZERO? STACK /?ELS26
?THN29: EQUAL? PRSO,MICROPHONE-DOME,MICROPHONE \?ELS26
EQUAL? VIDEOPHONE,REMOTE-PERSON-ON \?ELS26
PRINTI "You'd better say ""Good-bye"""
PRINTR " first."
?ELS26: EQUAL? PRSA,V?SAY-INTO,V?REPLY \?ELS34
FSET? VIDEOPHONE,ONBIT /?ELS34
PRINTI "That won't do any good while the "
PRINTD VIDEOPHONE
PRINTR " is off."
?ELS34: EQUAL? PRSA,V?SAY-INTO \?ELS40
EQUAL? REMOTE-PERSON-ON,VIDEOPHONE \?ELS45
PRINTD REMOTE-PERSON
PRINTR " nods at you."
?ELS45: ZERO? WOMAN-ON-SCREEN /?ELS49
PRINTR "That won't do any good while the sound is fuzzy."
?ELS49: PRINTR "It's not clear whom you're talking to."
?ELS40: EQUAL? PRSA,V?LAMP-ON \FALSE
IN? MICROPHONE,PLAYER /?THN61
IN? MICROPHONE-DOME,PLAYER \FALSE
?THN61: ZERO? DOME? /?ELS69
FSET? MICROPHONE-DOME,ONBIT /?THN66
?ELS69: ZERO? DOME? \?CND63
FSET? MICROPHONE,ONBIT \?CND63
?THN66: CALL ALREADY,MICROPHONE,STR?47
RTRUE
?CND63: ZERO? DOME? /?ELS76
CALL OKAY,MICROPHONE-DOME,STR?47
RSTACK
?ELS76: CALL OKAY,MICROPHONE,STR?47
RSTACK
.FUNCT TECHNICIAN-F
EQUAL? PRSA,V?$CALL /?THN6
EQUAL? PRSA,V?TAKE,V?PHONE,V?FIND \FALSE
?THN6: PRINTI "How can you do that? By telepathy or carrier pigeon? Seriously, "
PRINTI "your "
PRINTD LAB-ASSISTANT
PRINTR ", Sharon Kemp, is in her office, which is through a doorway to the east. Or, you could summon her by the intercom on your desk."
.FUNCT GANGPLANK-F
EQUAL? PRSA,V?CLIMB-ON,V?CLIMB-DOWN,V?BOARD \FALSE
CALL DO-WALK,P?SOUTH
RTRUE
.FUNCT GENERIC-TANK-CONTROL-GEAR-F,OBJ
RETURN TANK-CONTROL-GEAR-1
.FUNCT GENERIC-TANK-AREA-F,OBJ
RETURN NORTH-TANK-AREA
.FUNCT TANK-AREA-F,RARG=0
EQUAL? RARG,M-LOOK \FALSE
USL
FSET NORTH-TANK-AREA,TOUCHBIT
FSET WEST-TANK-AREA,TOUCHBIT
FSET SOUTH-TANK-AREA,TOUCHBIT
EQUAL? HERE,NORTH-TANK-AREA \?ELS8
PRINTI "You're at a temporary runway or gangplank that leads from the walkway to the entry hatch of the "
PRINTD GLOBAL-SUB
CALL DDESC,STR?120,SUB-DOOR,STR?121
JUMP ?CND6
?ELS8: EQUAL? HERE,WEST-TANK-AREA \?CND6
PRINTI "You're at a "
PRINTD WORK-COUNTER
PRINTI ", next to the "
PRINTD TANK-CONTROL-GEAR-1
PRINTI " used to operate the "
PRINTD TEST-TANK
PRINTI ".
"
?CND6: PRINTI "The test tank (which is now "
ZERO? TEST-TANK-FULL /?ELS19
PRINTI "filled with "
JUMP ?CND17
?ELS19: PRINTI "empty of "
?CND17: PRINTD GLOBAL-WATER
PRINTI ") is located in a large work room, just south of "
PRINTD YOUR-LABORATORY
PRINTI ", with concrete-block walls on three sides and a high metal roof. Most of its floor is dug out and lined with steel, to form the huge tank used for developing and testing "
PRINTD UNDERWATER
PRINTR " gear and the pilot models of your submarine craft.
There's a walkway around the tank on three sides -- north, west and south. On the east side, a steel gate forms the wall of the room."
.FUNCT FRESH-AIR?,RM,P,L,T,O
ZERO? DOME-AIR-BAD? /?CND1
ZERO? SUB-IN-DOME /?CND1
PRINTR "It's impossible to tell that way whether the air is good."
?CND1: SET 'P,0
?PRG8: NEXTP HERE,P >P
ZERO? P /FALSE
LESS? P,LOW-DIRECTION /?PRG8
GETPT HERE,P >T
PTSIZE T >L
EQUAL? L,DEXIT \?PRG8
GETB T,DEXITOBJ >O
FSET? O,OPENBIT \?PRG8
PRINTI "There's a pleasant breeze coming through the "
PRINTD O
PRINTR "."
.FUNCT CORRIDOR-LOOK,ITM=0,C,Z,COR,VAL,FOUND=0
GETP HERE,P?CORRIDOR >C
ZERO? C /FALSE
?PRG6: SUB C,8192 >Z
LESS? Z,0 /?ELS10
SET 'COR,COR-20000
JUMP ?CND8
?ELS10: SUB C,4096 >Z
LESS? Z,0 /?ELS12
SET 'COR,COR-10000
JUMP ?CND8
?ELS12: SUB C,2048 >Z
LESS? Z,0 /?ELS14
SET 'COR,COR-4000
JUMP ?CND8
?ELS14: SUB C,1024 >Z
LESS? Z,0 /?ELS16
SET 'COR,COR-2000
JUMP ?CND8
?ELS16: SUB C,512 >Z
LESS? Z,0 /?ELS18
SET 'COR,COR-1000
JUMP ?CND8
?ELS18: SUB C,256 >Z
LESS? Z,0 /?ELS20
SET 'COR,COR-400
JUMP ?CND8
?ELS20: SUB C,128 >Z
LESS? Z,0 /?ELS22
SET 'COR,COR-200
JUMP ?CND8
?ELS22: SUB C,64 >Z
LESS? Z,0 /?ELS24
SET 'COR,COR-64
JUMP ?CND8
?ELS24: SUB C,32 >Z
LESS? Z,0 /?ELS26
SET 'COR,COR-32
JUMP ?CND8
?ELS26: SUB C,16 >Z
LESS? Z,0 /?ELS28
SET 'COR,COR-16
JUMP ?CND8
?ELS28: SUB C,8 >Z
LESS? Z,0 /?ELS30
SET 'COR,COR-8
JUMP ?CND8
?ELS30: SUB C,4 >Z
LESS? Z,0 /?ELS32
SET 'COR,COR-4
JUMP ?CND8
?ELS32: SUB C,2 >Z
LESS? Z,0 /?ELS34
SET 'COR,COR-2
JUMP ?CND8
?ELS34: SUB C,1 >Z
LESS? Z,0 /?REP7
SET 'COR,COR-1
?CND8: CALL CORRIDOR-CHECK,COR,ITM >VAL
ZERO? FOUND \?CND39
SET 'FOUND,VAL
?CND39: SET 'C,Z
JUMP ?PRG6
?REP7: RETURN FOUND
.FUNCT CORRIDOR-CHECK,COR,ITM,CNT=2,PAST=0,FOUND=0,RM,OBJ
?PRG1: GET COR,CNT >RM
ZERO? RM /FALSE
EQUAL? RM,HERE \?ELS7
SET 'PAST,1
JUMP ?CND3
?ELS7: FIRST? RM >OBJ \?CND3
?PRG10: ZERO? ITM /?ELS14
EQUAL? OBJ,ITM \?CND12
GET COR,PAST >FOUND
JUMP ?REP11
?ELS14: FSET? OBJ,PERSON \?CND12
FSET? OBJ,INVISIBLE /?CND12
FSET? OBJ,NDESCBIT /?CND12
CALL IS-CREW?,OBJ
ZERO? STACK /?ELS25
CALL CREW-5-TOGETHER?
ZERO? STACK /?ELS25
FSET? BLY,MUNGBIT /?ELS25
EQUAL? OBJ,LOWELL \?CND23
PRINTI "The five "
PRINTD CREW
PRINTI " members are off to "
GET COR,PAST
CALL DIR-PRINT,STACK
PRINTI "."
CRLF
JUMP ?CND23
?ELS25: FSET? OBJ,TOUCHBIT /?ELS36
PRINTI "Someone is off to "
GET COR,PAST
CALL DIR-PRINT,STACK
PRINTI "."
CRLF
JUMP ?CND12
?ELS36: PRINTD OBJ
PRINTI " is off to "
GET COR,PAST
CALL DIR-PRINT,STACK
PRINTI "."
CRLF
?CND23:
?CND12: NEXT? OBJ >OBJ /?KLU54
?KLU54: ZERO? OBJ \?PRG10
?REP11: ZERO? FOUND /?CND3
RETURN FOUND
?CND3: INC 'CNT
JUMP ?PRG1
.FUNCT COR-DIR,HERE,THERE,COR,RM,PAST=0,CNT=2,?TMP1
GETP THERE,P?CORRIDOR >?TMP1
GETP HERE,P?CORRIDOR
BAND ?TMP1,STACK
CALL GET-COR,STACK >COR
?PRG1: GET COR,CNT >RM
EQUAL? RM,HERE \?ELS5
SET 'PAST,1
JUMP ?REP2
?ELS5: EQUAL? RM,THERE \?CND3
JUMP ?REP2
?CND3: INC 'CNT
JUMP ?PRG1
?REP2: GET COR,PAST
RSTACK
.FUNCT GET-COR,NUM
EQUAL? NUM,1 \?ELS5
RETURN COR-1
?ELS5: EQUAL? NUM,2 \?ELS7
RETURN COR-2
?ELS7: EQUAL? NUM,4 \?ELS9
RETURN COR-4
?ELS9: EQUAL? NUM,8 \?ELS11
RETURN COR-8
?ELS11: EQUAL? NUM,16 \?ELS13
RETURN COR-16
?ELS13: EQUAL? NUM,32 \?ELS15
RETURN COR-32
?ELS15: EQUAL? NUM,64 \?ELS17
RETURN COR-64
?ELS17: EQUAL? NUM,128 \?ELS19
RETURN COR-200
?ELS19: EQUAL? NUM,256 \?ELS21
RETURN COR-400
?ELS21: EQUAL? NUM,512 \?ELS23
RETURN COR-1000
?ELS23: EQUAL? NUM,1024 \?ELS25
RETURN COR-2000
?ELS25: EQUAL? NUM,2048 \?ELS27
RETURN COR-4000
?ELS27: EQUAL? NUM,4096 \?ELS29
RETURN COR-10000
?ELS29: RETURN COR-20000
.ENDI

1126
places.zil Normal file

File diff suppressed because it is too large Load diff

48
reg.errors Normal file
View file

@ -0,0 +1,48 @@
Assembling REG.XZAP.1
Release: 16
64 Inserting J1FREQ.XZAP.7 (620 bytes)
684 Inserting J1DAT.ZAP.1 (22305 bytes)
22989 Inserting MACROS.ZAP.1 (104 bytes)
23093 Inserting MAIN.ZAP.1 (2259 bytes)
25352 Inserting CLOCK.ZAP.1 (186 bytes)
25538 Inserting SUB.ZAP.3 (16341 bytes)
41879 Inserting BATTLE.ZAP.2 (5651 bytes)
47530 Inserting DOME.ZAP.1 (9902 bytes)
57432 Inserting PLACES.ZAP.1 (4753 bytes)
62185 Inserting PEOPLE.ZAP.1 (15561 bytes)
77746 Inserting THINGS.ZAP.1 (2058 bytes)
79804 Inserting GLOBAL.ZAP.1 (5836 bytes)
85640 Inserting PARSER.ZAP.1 (5735 bytes)
91375 Inserting SYNTAX.ZAP.1 (778 bytes)
92153 Inserting VERBS.ZAP.4 (15692 bytes)
107845 Inserting EVENTS.ZAP.1 (7364 bytes)
115209 Inserting J1STR.ZAP.1 (2553 bytes)
Symbols unused:
SERIAL
DIR-FROM
V-SEND-FOR
V-KICK
LIT?
NO-TOUCH
FOLLOWED?
NOT-IMPORTANT
ZPROB
BIGFIX
GWIM-DISABLE
255 objects.
239 globals.
911 word vocabulary.
117762 bytes (116K).
22989 bytes of preload.
Total 4098 bytes too large for TI-99/4-A.
Preload 461 bytes too large for TI-99/4-A.
Preload 5581 bytes too large for BBC Acorn.
Preload 461 bytes too large for TRS-80 CoCo 2.
Pure 565 bytes too large for Atari.

1
reg.serial Normal file
View file

@ -0,0 +1 @@
1

18
reg.xzap Normal file
View file

@ -0,0 +1,18 @@
.INSERT "J1FREQ"
.INSERT "J1DAT.ZAP.1"
.INSERT "MACROS"
.INSERT "MAIN"
.INSERT "CLOCK"
.INSERT "SUB"
.INSERT "BATTLE"
.INSERT "DOME"
.INSERT "PLACES"
.INSERT "PEOPLE"
.INSERT "THINGS"
.INSERT "GLOBAL"
.INSERT "PARSER"
.INSERT "SYNTAX"
.INSERT "VERBS"
.INSERT "EVENTS"
.INSERT "J1STR"
.END

BIN
reg.zip Normal file

Binary file not shown.

78
syntax.zap Normal file
View file

@ -0,0 +1,78 @@
.FUNCT BUZZER-WORD?,WORD
CALL QUESTION-WORD?,WORD
ZERO? STACK \TRUE
CALL NUMBER-WORD?,WORD
ZERO? STACK \TRUE
CALL NAUGHTY-WORD?,WORD
ZERO? STACK \TRUE
EQUAL? WORD,W?ALL,W?AGAIN,W?G \FALSE
PRINTI "(Sorry, but in this story you can't use the word """
PRINTB WORD
PRINTR """.)"
.FUNCT QUESTION-WORD?,WORD
EQUAL? WORD,W?WHERE \?ELS5
PRINTI "(To locate something, use the command: FIND "
PRINTD SOMETHING
PRINTR ".)"
?ELS5: EQUAL? WORD,W?WHAT,W?WHAT'S /?THN10
EQUAL? WORD,W?WHO,W?WHO'S \?ELS9
?THN10: PRINTI "(To ask about something, use the command: TELL ME ABOUT "
PRINTD SOMETHING
PRINTR ".)"
?ELS9: EQUAL? WORD,W?THAT'S,W?IT'S /?THN16
EQUAL? WORD,W?WHY,W?HOW,W?WHEN /?THN16
EQUAL? WORD,W?IS,W?DID,W?ARE /?THN16
EQUAL? WORD,W?DO,W?HAVE,W?ANY /?THN16
EQUAL? WORD,W?AM,W?I'M,W?WE'RE /?THN16
EQUAL? WORD,W?WILL,W?WAS,W?WERE /?THN16
EQUAL? WORD,W?I'LL,W?CAN,W?WHICH /?THN16
EQUAL? WORD,W?I'VE,W?WON'T,W?HAS /?THN16
EQUAL? WORD,W?YOU'RE,W?HE'S,W?SHE'S /?THN16
EQUAL? WORD,W?SHOULD,W?WOULD,W?WHEN'S /?THN16
EQUAL? WORD,W?THEY'RE,W?COULD,W?SHALL \FALSE
?THN16: PRINTI "(Please use commands"
INC 'QUESTION-WORD-COUNT
GRTR? QUESTION-WORD-COUNT,9 \?ELS22
SET 'QUESTION-WORD-COUNT,0
PRINTR "! Your commands tell the computer what you want to do in the story. You can give commands to other people in the story, too. Here are examples of commands:
TURN ON THE LAMP
LOOK UNDER THE RUG
SHARON, GIVE THE BOOK TO TIP
BILL, HELP ME
Now you can try again.)"
?ELS22: PRINTR ", not statements or questions.)"
.FUNCT NUMBER-WORD?,WRD
EQUAL? WRD,W?ZERO /?THN6
EQUAL? WRD,W?TWO,W?THREE,W?FOUR /?THN6
EQUAL? WRD,W?FIVE,W?SIX,W?SEVEN /?THN6
EQUAL? WRD,W?EIGHT,W?NINE,W?TEN /?THN6
EQUAL? WRD,W?ELEVEN,W?TWELVE,W?THIRTE /?THN6
EQUAL? WRD,W?FOURTE,W?FIFTEE,W?SIXTEE /?THN6
EQUAL? WRD,W?SEVENT,W?EIGHTE,W?NINETE /?THN6
EQUAL? WRD,W?TWENTY,W?THIRTY,W?FORTY /?THN6
EQUAL? WRD,W?FIFTY,W?SIXTY,W?EIGHTY /?THN6
EQUAL? WRD,W?NINETY,W?HUNDRE,W?THOUSA /?THN6
EQUAL? WRD,W?MILLIO,W?BILLIO,W?ONE \FALSE
?THN6: PRINTR "(Use numerals for numbers, for example ""10."")"
.FUNCT NAUGHTY-WORD?,WORD
EQUAL? WORD,W?CURSE,W?CURSES,W?CUSS /?THN6
EQUAL? WORD,W?DAMN,W?SHIT,W?FUCK /?THN6
EQUAL? WORD,W?FUDGE,W?PISS,W?PEE /?THN6
EQUAL? WORD,W?SUCK /?THN6
EQUAL? WORD,W?POO,W?SNOT,W?BASTARD \FALSE
?THN6: PRINTC 40
CALL PICK-ONE,OFFENDED
PRINT STACK
PRINTC 41
CRLF
RTRUE
.ENDI

853
syntax.zil Normal file
View file

@ -0,0 +1,853 @@
"SYNTAX for SEASTALKER
Copyright (C) 1984 Infocom, Inc. All rights reserved."
"SUBTITLE VOCABULARY"
<BUZZ A AN THE AND OF THEN ONE ;BUT ;EXCEPT \. \, \" \! \? ;Y BACK
;CARRYING ;HOLDING FIRST NOW SOON WELL THERE ;YOUR ;YOU PLEASE MAYBE
CAREFULLY CLOSELY ;THOROUGHLY QUIETLY SLOWLY QUICKLY BRIEFLY PRIVATELY
ALL AGAIN G
AM ANY ARE CAN COULD DID DO
HAS HAVE HE\'S HOW
IS IT\'S I\'LL I\'M I\'VE LET\'S SHALL SHE\'S SHOULD
THAT\'S THEY\'RE WAS WERE WE\'RE
WHAT WHAT\'S WHEN WHEN\'S WHERE WHICH WHO WHO\'S WHY
WILL WON\'T WOULD YOU\'RE
ZERO TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE TEN ELEVEN TWELVE THIRTE
FOURTE FIFTEE SIXTEE SEVENT EIGHTE NINETE TWENTY THIRTY FORTY
FIFTY SIXTY EIGHTY NINETY HUNDRE THOUSA MILLIO BILLIO
CURSE CURSES CUSS DAMN SHIT SUCK FUCK FUDGE PISS PEE POO SNOT BASTARD>
<ROUTINE BUZZER-WORD? (WORD)
<COND (<QUESTION-WORD? .WORD> <RTRUE>)
( <NUMBER-WORD? .WORD> <RTRUE>)
( <NAUGHTY-WORD? .WORD> <RTRUE>)
(<EQUAL? .WORD ,W?ALL ,W?AGAIN ,W?G>
<TELL "(Sorry, but in this story you can't use the word \"">
<PRINTB .WORD>
<TELL "\".)" CR>)>>
<GLOBAL QUESTION-WORD-COUNT 0>
<ROUTINE QUESTION-WORD? (WORD)
<COND (<EQUAL? .WORD ,W?WHERE ;",W?THERE ,W?SEEN">
<TELL
"(To locate something, use the command: FIND " D ,SOMETHING ".)" CR>)
(<OR <EQUAL? .WORD ,W?WHAT ,W?WHAT\'S>
<EQUAL? .WORD ,W?WHO ,W?WHO\'S>>
<TELL
"(To ask about something, use the command: TELL ME ABOUT " D ,SOMETHING ".)"
CR>)
(<OR <EQUAL? .WORD ,W?THAT\'S ,W?IT\'S>
<EQUAL? .WORD ,W?WHY ,W?HOW ,W?WHEN>
<EQUAL? .WORD ,W?IS ,W?DID ,W?ARE>
<EQUAL? .WORD ,W?DO ,W?HAVE ,W?ANY>
<EQUAL? .WORD ,W?AM ,W?I\'M ,W?WE\'RE>
<EQUAL? .WORD ,W?WILL ,W?WAS ,W?WERE>
<EQUAL? .WORD ,W?I\'LL ,W?CAN ,W?WHICH>
<EQUAL? .WORD ,W?I\'VE ,W?WON\'T ,W?HAS>
<EQUAL? .WORD ,W?YOU\'RE ,W?HE\'S ,W?SHE\'S>
<EQUAL? .WORD ,W?SHOULD ,W?WOULD ,W?WHEN\'S>
<EQUAL? .WORD ,W?THEY\'RE ,W?COULD ,W?SHALL>>
<TELL "(Please use commands">
<INC QUESTION-WORD-COUNT>
<COND (<G? ,QUESTION-WORD-COUNT 9>
<SETG QUESTION-WORD-COUNT 0>
%<XTELL
"! Your commands tell the computer what you want to do in the story. You
can give commands to other people in the story, too. Here are examples
of commands:|
TURN ON THE LAMP|
LOOK UNDER THE RUG|
SHARON, GIVE THE BOOK TO TIP|
BILL, HELP ME|
Now you can try again.)" CR>)
(T %<XTELL ", not statements or questions.)" CR>)>
<RTRUE>)>>
<ROUTINE NUMBER-WORD? (WRD)
<COND (<OR <EQUAL? .WRD ,W?ZERO>
<EQUAL? .WRD ,W?TWO ,W?THREE ,W?FOUR>
<EQUAL? .WRD ,W?FIVE ,W?SIX ,W?SEVEN>
<EQUAL? .WRD ,W?EIGHT ,W?NINE ,W?TEN>
<EQUAL? .WRD ,W?ELEVEN ,W?TWELVE ,W?THIRTE>
<EQUAL? .WRD ,W?FOURTE ,W?FIFTEE ,W?SIXTEE>
<EQUAL? .WRD ,W?SEVENT ,W?EIGHTE ,W?NINETE>
<EQUAL? .WRD ,W?TWENTY ,W?THIRTY ,W?FORTY>
<EQUAL? .WRD ,W?FIFTY ,W?SIXTY ,W?EIGHTY>
<EQUAL? .WRD ,W?NINETY ,W?HUNDRE ,W?THOUSA>
<EQUAL? .WRD ,W?MILLIO ,W?BILLIO ,W?ONE>>
<TELL "(Use numerals for numbers, for example \"10.\")" CR>
<RTRUE>)>>
<ROUTINE NAUGHTY-WORD? (WORD)
<COND (<OR <EQUAL? .WORD ,W?CURSE ,W?CURSES ,W?CUSS>
<EQUAL? .WORD ,W?DAMN ,W?SHIT ,W?FUCK>
<EQUAL? .WORD ,W?FUDGE ,W?PISS ,W?PEE>
<EQUAL? .WORD ,W?SUCK>
<EQUAL? .WORD ,W?POO ,W?SNOT ,W?BASTARD>>
<PRINTC %<ASCII !\(>>
<TELL <PICK-ONE ,OFFENDED>>
<PRINTC %<ASCII !\)>>
<CRLF>)>>
<GLOBAL OFFENDED
<LTABLE "You ought to be ashamed of yourself!"
"Hey, save that talk for the locker room!"
"Step outside and say that!"
"And so's your old man!">>
<SYNONYM WITH USING BY>
<SYNONYM THROUGH THRU>
<SYNONYM IN INSIDE INTO>
<SYNONYM ON ONTO>
"<SYNONYM OUT OUTSIDE>"
<SYNONYM UNDER UNDERNEATH BENEATH>
<SYNONYM NORTH N>
<SYNONYM SOUTH S>
<SYNONYM EAST E>
<SYNONYM WEST W>
<SYNONYM DOWN D>
<SYNONYM UP U>
<SYNONYM NW NORTHW>
<SYNONYM NE NORTHE>
<SYNONYM SW SOUTHW>
<SYNONYM SE SOUTHE>
<SYNTAX $VERIFY = V-$VERIFY>
<SYNTAX $DBG = V-DEBUG>
"<SYNTAX \#CODE = V-$CODE>" "produces secret code from names"
<SYNTAX $BAY = V-$BAY> "sub in bay"
"<SYNTAX $OCEAN = V-$OCEAN>" "sub in ocean"
"<SYNTAX $DOME = V-$DOME>" "sub in dome"
"<SYNTAX $SNARK = V-$SNARK>" "sub in battle"
<SYNONYM ADJUST TUNE FOCUS>
<SYNTAX ADJUST OBJECT = V-ADJUST>
<SYNTAX ADJUST OBJECT WITH OBJECT = V-ADJUST>
<SYNTAX ADJUST IN OBJECT = V-ADJUST>
<SYNONYM AIM POINT>
<SYNTAX AIM OBJECT AT OBJECT = V-AIM PRE-AIM>
<SYNTAX AIM OBJECT TO OBJECT = V-AIM PRE-AIM>
<SYNTAX AIM OBJECT OBJECT = V-AIM PRE-AIM>
<SYNTAX AIM AT OBJECT WITH OBJECT = V-SAIM PRE-SAIM>
<SYNONYM TEST ANALYSE ANALYZE CHECK ;DUST TROUBLESHOOT>
<SYNTAX TEST OBJECT = V-ANALYZE>
<SYNTAX TEST OBJECT (FIND RMUNGBIT) FOR OBJECT = V-ANALYZE>
<SYNTAX TEST OUT OBJECT = V-ANALYZE>
<SYNTAX TEST UNDER OBJECT = V-LOOK-UNDER>
<SYNTAX TEST OBJECT IN OBJECT = V-LOOK-UP>
<SYNTAX TEST OBJECT ON OBJECT = V-SANALYZE PRE-SANALYZE>
<SYNONYM ANSWER REPLY RESPOND>
<SYNTAX ANSWER = V-ANSWER>
<SYNTAX ANSWER OBJECT = V-REPLY>
<SYNTAX APPLY OBJECT (HELD MANY HAVE) TO OBJECT = V-PUT PRE-PUT>
<SYNTAX ARM OBJECT = V-ARM>
<SYNONYM ARREST CAPTURE>
<SYNTAX ARREST OBJECT (FIND PERSON) ;(MANY) = V-ARREST PRE-ARREST>
<SYNTAX ARREST OBJECT (FIND PERSON) ;(MANY) FOR OBJECT = V-ARREST PRE-ARREST>
<SYNONYM ASK QUESTION INQUIRE CONSULT>
<SYNTAX ASK OBJECT (FIND PERSON) = V-ASK PRE-ASK>
<SYNTAX ASK ABOUT OBJECT (HELD CARRIED HAVE)
= V-ASK-CONTEXT-ABOUT PRE-ASK-CONTEXT-ABOUT>
<SYNTAX ASK FOR OBJECT (HELD CARRIED HAVE)
= V-ASK-CONTEXT-FOR PRE-ASK-CONTEXT-FOR>
<SYNTAX ASK OBJECT (FIND PERSON)
ABOUT OBJECT (HELD CARRIED HAVE) = V-ASK-ABOUT PRE-ASK-ABOUT>
<SYNTAX ASK OBJECT (FIND PERSON)
FOR OBJECT (HELD CARRIED HAVE) = V-ASK-FOR PRE-ASK-FOR>
<SYNONYM ATTACK FIGHT RAPE MOLEST ASSAULT REPEL>
<SYNTAX ATTACK OBJECT (FIND PERSON) = V-ATTACK>
<SYNTAX ATTACK OFF OBJECT (FIND PERSON) = V-ATTACK>
<SYNTAX ATTACK OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-ATTACK>
<SYNTAX BRIEF = V-BRIEF>
<SYNONYM BRING FETCH>
<SYNTAX BRING OBJECT = V-BRING PRE-BRING>
<SYNTAX BRING OBJECT OBJECT = V-SBRING PRE-SBRING>
<SYNTAX BRING OBJECT TO OBJECT = V-BRING PRE-BRING>
<SYNONYM BRUSH CLEAN WIPE>
<SYNTAX BRUSH OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-BRUSH>
"<SYNTAX BRUSH OFF OBJECT (HELD CARRIED) = V-BRUSH>"
<SYNTAX BRUSH OBJECT (HELD CARRIED ON-GROUND IN-ROOM) WITH OBJECT
= V-BRUSH>
"<SYNONYM BURN INCINERATE IGNITE>
<SYNTAX BURN OBJECT (FIND BURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT (FIND FLAMEBIT) (HELD CARRIED ON-GROUND IN-ROOM HAVE)
= V-BURN PRE-BURN>
<SYNTAX BURN DOWN OBJECT (FIND BURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT (FIND FLAMEBIT) (HELD CARRIED ON-GROUND IN-ROOM HAVE)
= V-BURN PRE-BURN>"
<SYNONYM CALL ;HEY PHONE SUMMON SIGNAL CONTACT>
"<SYNTAX CALL = V-CALL-LOSE>"
<SYNTAX $CALL OBJECT = V-$CALL>
<SYNTAX CALL OBJECT = V-PHONE PRE-PHONE>
<SYNTAX CALL OBJECT BY OBJECT = V-PHONE PRE-PHONE>
"<SYNTAX CALL OBJECT FOR OBJECT = V-CALL-FOR>"
<SYNTAX CALL OBJECT ON OBJECT = V-PHONE PRE-PHONE>
<SYNTAX CALL FOR OBJECT = V-PHONE PRE-PHONE>
<SYNTAX CALL TO OBJECT = V-$CALL>
<SYNTAX CALL UP OBJECT = V-PHONE PRE-PHONE>
<SYNONYM CLIMB BOARD>
<SYNTAX CLIMB OBJECT (ON-GROUND IN-ROOM) = V-BOARD> "(FIND CLIMBBIT)"
<SYNTAX CLIMB DOWN OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>"(FIND CLIMBBIT)"
<SYNTAX CLIMB IN OBJECT (FIND VEHBIT)(ON-GROUND IN-ROOM) = V-BOARD>
<SYNTAX CLIMB ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
<SYNTAX CLIMB OUT OBJECT (FIND RMUNGBIT) (ON-GROUND IN-ROOM) = V-DISEMBARK>
<SYNTAX CLIMB THROUGH OBJECT (FIND DOORBIT) = V-THROUGH PRE-THROUGH>
<SYNTAX CLIMB UP OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-UP> "(FIND CLIMBBIT)"
<SYNONYM CLOSE REPLACE RESET>
<SYNTAX CLOSE OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-CLOSE>
<SYNTAX CLOSE OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT
= V-CLOSE>
<SYNTAX COME OBJECT = V-COME>
<SYNTAX COME TO OBJECT = V-COME>
<SYNTAX COME WITH OBJECT = V-FOLLOW>
<SYNTAX COME WITH OBJECT TO OBJECT = V-COME-WITH PRE-COME-WITH>
<SYNONYM MATCH COMPARE>
<SYNTAX MATCH OBJECT (MANY) = V-COMPARE PRE-COMPARE>
<SYNTAX MATCH OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
TO OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-COMPARE>
<SYNTAX MATCH OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-COMPARE>
<SYNTAX CONFRONT OBJECT (FIND PERSON) WITH OBJECT = V-CONFRONT>
"<SYNONYM COUNT>
<SYNTAX COUNT OBJECT = V-COUNT>
<SYNONYM CROSS FORD>
<SYNTAX CROSS OBJECT = V-CROSS>"
<SYNONYM CUT INTERRUPT ;"SLICE PIERCE">
<SYNTAX CUT OBJECT ;"WITH OBJECT (FIND WEAPONBIT) (CARRIED HELD)" = V-CUT>
<SYNONYM DAMAGE DESTROY BREAK SMASH CRUSH TEAR>
<SYNTAX DAMAGE OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
= V-MUNG>
<SYNTAX DAMAGE OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
WITH OBJECT (HELD CARRIED TAKE)
= V-MUNG>
<SYNTAX DAMAGE DOWN OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
WITH OBJECT (HELD CARRIED TAKE)
= V-MUNG>
<SYNTAX DIAGNOSE = V-DIAGNOSE>
<SYNTAX DIAGNOSE OBJECT = V-DIAGNOSE>
"<SYNTAX DIAL OBJECT = V-PHONE>
<SYNTAX DIAL OBJECT ON OBJECT = V-PHONE>
<SYNTAX DIAL UP OBJECT = V-PHONE>"
<SYNTAX DISCUSS OBJECT = V-DISCUSS PRE-DISCUSS>
<SYNTAX DISCUSS OBJECT WITH OBJECT = V-DISCUSS PRE-DISCUSS>
<SYNONYM DIVE SUBMERGE DESCEND>
<SYNTAX DIVE = V-DIVE>
<SYNTAX DIVE OBJECT = V-CLIMB-DOWN>
<SYNTAX DIVE BY OBJECT = V-CLIMB-DOWN>
<SYNTAX DIVE TO OBJECT = V-DIVE>
<SYNTAX DIVE UNDER OBJECT (FIND RMUNGBIT) = V-DIVE>
<SYNTAX DOCK OBJECT (FIND RMUNGBIT) = V-DOCK>
<SYNTAX DOCK AT OBJECT = V-DOCK>
<SYNTAX DOCK WITH OBJECT = V-DOCK>
<SYNONYM DRINK IMBIBE SWALLOW>
<SYNTAX DRINK OBJECT ;(FIND DRINKBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-DRINK>
<SYNONYM DROP LOWER>
<SYNTAX DROP OBJECT (HELD MANY HAVE) = V-DROP>
<SYNTAX DROP OBJECT (HELD MANY HAVE) DOWN ;ON OBJECT = V-PUT PRE-PUT>
<SYNTAX DROP OBJECT (HELD MANY HAVE) IN OBJECT = V-PUT PRE-PUT>
<SYNTAX DROP OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT PRE-PUT>
<SYNONYM EAT CONSUME>
<SYNTAX EAT OBJECT ;(FIND FOODBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE MANY)
= V-EAT>
<SYNONYM EMPTY DRAIN BLOW>
<SYNTAX EMPTY OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-EMPTY>
<SYNTAX ENTER = V-ENTER>
<SYNTAX ENTER OBJECT = V-THROUGH PRE-THROUGH>
<SYNONYM EXAMINE DESCRIBE INSPECT SCRUTINIZE STUDY OBSERVE EXPLORE>
<SYNTAX EXAMINE OBJECT (HELD CARRIED IN-ROOM ON-GROUND ;MANY)
= V-EXAMINE PRE-EXAMINE>
<SYNTAX EXAMINE UNDER OBJECT = V-LOOK-UNDER>
<SYNONYM EXTINGUISH DOUSE>
<SYNTAX EXTINGUISH
OBJECT (FIND LIGHTBIT) (MANY HELD CARRIED ON-GROUND IN-ROOM TAKE HAVE)
= V-LAMP-OFF>
<SYNONYM FILL FLOOD>
<SYNTAX FILL OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-FILL PRE-FILL>
<SYNTAX FILL OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT
= V-FILL PRE-FILL>
<SYNONYM FIND DETECT LOCATE>
<SYNTAX FIND OBJECT (;"HELD CARRIED" HAVE MANY) = V-FIND PRE-FIND>
<SYNTAX FIND OBJECT (;"HELD CARRIED" HAVE MANY) WITH OBJECT = V-FIND-WITH>
<SYNTAX FIND OUT OBJECT = V-ASK-CONTEXT-ABOUT PRE-ASK-CONTEXT-ABOUT>
<SYNTAX FIT OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT PRE-PUT>
<SYNTAX FIT OBJECT (HELD MANY HAVE) TO OBJECT = V-PUT PRE-PUT>
<SYNONYM FIX REPAIR>
<SYNTAX FIX OBJECT = V-FIX>
<SYNTAX FIX OBJECT WITH OBJECT (FIND TOOLBIT) = V-FIX>
<SYNONYM FOLLOW PURSUE CHASE TRACE>
<SYNTAX FOLLOW OBJECT = V-FOLLOW>
<SYNTAX FOLLOW OBJECT (FIND PERSON) OBJECT = V-FOLLOW> "Follow me north."
<SYNTAX FOLLOW OBJECT (FIND PERSON) TO OBJECT = V-FOLLOW> "F. me to office."
<SYNONYM HAND GIVE DONATE OFFER ;"ASSIGN" FEED>
<SYNTAX HAND OBJECT (MANY HELD HAVE ;"CARRIED ON-GROUND IN-ROOM")
TO OBJECT (FIND PERSON) (ON-GROUND)
= V-GIVE PRE-GIVE>
<SYNTAX HAND OBJECT (FIND PERSON) (ON-GROUND)
OBJECT (MANY HELD HAVE)
= V-SGIVE PRE-SGIVE>
<SYNONYM GOODBYE GOOD-BYE BYE>
<SYNTAX GOODBYE = V-GOODBYE PRE-GOODBYE>
<SYNTAX GOODBYE OBJECT = V-GOODBYE PRE-GOODBYE>
<SYNTAX HANG UP OBJECT (FIND RMUNGBIT) = V-HANGUP PRE-HANGUP>
<SYNTAX HANG OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT PRE-PUT>
<SYNONYM HELLO HI GREET GREETINGS>
<SYNTAX HELLO = V-HELLO PRE-HELLO>
<SYNTAX HELLO OBJECT = V-HELLO PRE-HELLO>
<SYNTAX HELP = V-HELP>
<SYNTAX HELP OBJECT (FIND PERSON) = V-HELP>
<SYNONYM HIDE CROUCH>
"<SYNTAX HIDE = V-HIDE>
<SYNTAX HIDE BEHIND OBJECT = V-HIDE-BEHIND>"
<SYNTAX HIDE IN OBJECT = V-THROUGH PRE-THROUGH>
<SYNTAX HIDE ON OBJECT = V-THROUGH PRE-THROUGH>
<SYNTAX HIDE OBJECT (CARRIED HELD HAVE) IN OBJECT = V-PUT PRE-PUT>
<SYNTAX HIDE OBJECT (CARRIED HELD HAVE) UNDER OBJECT = V-PUT-UNDER>
"<SYNONYM I INVENT>"
<SYNTAX I = V-INVENTORY>
<SYNTAX INVENT = V-INVENTORY>
"<SYNONYM JUMP LEAP>
<SYNTAX JUMP = V-LEAP>
<SYNTAX JUMP ACROSS OBJECT = V-LEAP>
<SYNTAX JUMP IN OBJECT = V-LEAP>
<SYNTAX JUMP OVER OBJECT = V-LEAP>"
"<SYNONYM KICK BITE TAUNT>
<SYNTAX KICK OBJECT = V-KICK>"
<SYNONYM KILL STRANGLE>
<SYNTAX KILL OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-KILL>
<SYNTAX KILL OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-KILL>
<SYNTAX KISS OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-KISS>
<SYNONYM KNOCK RAP>
<SYNTAX KNOCK ON OBJECT = V-KNOCK>
<SYNTAX KNOCK AT OBJECT = V-KNOCK>
<SYNTAX KNOCK DOWN OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-ATTACK>
"<SYNTAX KNOW ABOUT OBJECT (HELD CARRIED HAVE) = V-WHAT>
<SYNTAX KNOW WHERE OBJECT (HELD CARRIED HAVE) = V-FIND PRE-FIND>"
<SYNTAX LAUNCH OBJECT (FIND RMUNGBIT) = V-LAUNCH>
"<SYNONYM LEAN STAND PROP>
<SYNTAX LEAN OBJECT AGAINST OBJECT = V-LEAN>
<SYNTAX LEAN OBJECT ON OBJECT = V-LEAN>
<SYNTAX LEAN OBJECT UP OBJECT = V-LEAN>"
<SYNTAX STAND = V-STAND>
<SYNTAX STAND UP OBJECT (FIND RMUNGBIT) = V-STAND>
<SYNTAX LEVEL OFF OBJECT (FIND RMUNGBIT) = V-LEVEL>
<SYNTAX LEVEL OUT OBJECT (FIND RMUNGBIT) = V-LEVEL>
<SYNONYM LEAVE ;"EMERGE" ABANDON EVACUATE DEBARK DISEMBARK EXIT>
<SYNTAX LEAVE = V-LEAVE>
<SYNTAX LEAVE OBJECT = V-LEAVE>
<SYNTAX LEAVE FROM OBJECT = V-LEAVE>
"<SYNONYM LIGHT>"
"<SYNTAX LIGHT OBJECT (FIND LIGHTBIT)
(HELD CARRIED ON-GROUND IN-ROOM ;TAKE ;HAVE)
= V-LAMP-ON>"
"<SYNTAX LIGHT OBJECT (FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT (FIND FLAMEBIT) (HELD CARRIED TAKE HAVE)
= V-BURN PRE-BURN>"
<SYNTAX LISTEN TO OBJECT = V-LISTEN>
<SYNTAX LISTEN AT OBJECT = V-LISTEN>
<SYNTAX LOCK OBJECT (ON-GROUND IN-ROOM) = V-LOCK ;PRE-UNLOCK>
<SYNONYM LOOK L STARE GAZE PEEK SEE>
<SYNTAX LOOK = V-LOOK>
<SYNTAX LOOK AROUND OBJECT (FIND RMUNGBIT) = V-LOOK>
<SYNTAX LOOK AT OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY)
= V-EXAMINE PRE-EXAMINE>
<SYNTAX LOOK AT OBJECT (HELD CARRIED MANY) THROUGH OBJECT = V-READ PRE-READ>
<SYNTAX LOOK BEHIND OBJECT = V-LOOK-BEHIND>
<SYNTAX LOOK DOWN OBJECT (FIND RMUNGBIT) = V-LOOK-DOWN>
<SYNTAX LOOK FOR OBJECT (HELD CARRIED HAVE) = V-FIND>
<SYNTAX LOOK IN OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
= V-LOOK-INSIDE PRE-LOOK-INSIDE>
"<SYNTAX LOOK NEAR OBJECT = V-SEARCH-AROUND>"
<SYNTAX LOOK ON OBJECT (ON-GROUND IN-ROOM) = V-LOOK-ON>
<SYNTAX LOOK OUT OBJECT = V-LOOK-OUTSIDE>
<SYNTAX LOOK OVER OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
= V-EXAMINE PRE-EXAMINE>
<SYNTAX LOOK UNDER OBJECT = V-LOOK-UNDER>
<SYNTAX LOOK UP OBJECT (FIND RMUNGBIT) = V-LOOK-UP>
<SYNTAX LOOK UP OBJECT IN OBJECT = V-LOOK-UP>
<SYNTAX LOOK THROUGH OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
= V-LOOK-INSIDE PRE-LOOK-INSIDE>
<SYNONYM MAKE BUILD PREPARE>
<SYNTAX MAKE OBJECT FROM OBJECT (ON-GROUND IN-ROOM) = V-MAKE>
<SYNTAX MAKE OBJECT ;WITH OBJECT (ON-GROUND IN-ROOM) = V-MAKE>
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM) OBJECT = V-MOVE-DIR PRE-MOVE-DIR>
<SYNTAX MOVE OBJECT TO OBJECT (FIND RMUNGBIT) = V-SET PRE-SET>
<SYNONYM NO NAY NEGATIVE NOPE>
<SYNTAX NO = V-NO>
<SYNTAX NOD AT OBJECT = V-HELLO PRE-HELLO>
<SYNTAX NOD TO OBJECT = V-HELLO PRE-HELLO>
<SYNTAX OPEN OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-OPEN>
<SYNTAX OPEN UP OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-OPEN>
"<SYNTAX OPEN OBJECT OBJECT (FIND RMUNGBIT) = V-SET PRE-SET>"
<SYNTAX OPEN OBJECT TO OBJECT (FIND RMUNGBIT) = V-SET PRE-SET>
<SYNTAX OPEN OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
= V-OPEN-WITH PRE-OPEN-WITH>
<SYNTAX PICK OBJECT = V-PICK>
<SYNTAX PICK OBJECT WITH OBJECT = V-PICK>
<SYNTAX PICK UP OBJECT (FIND TAKEBIT) (ON-GROUND MANY)
= V-TAKE PRE-TAKE>
<SYNTAX PLAY OBJECT = V-PLAY>
<SYNTAX PLAY WITH OBJECT = V-PLAY>
"<SYNONYM POKE JAB BLIND>
<SYNTAX POKE OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-MUNG ;PRE-MUNG>"
"<SYNONYM POUR SPILL>
<SYNTAX POUR OBJECT (HELD CARRIED) = V-DROP>
<SYNTAX POUR OBJECT (HELD CARRIED) FROM OBJECT = V-DROP>
<SYNTAX POUR OBJECT (HELD CARRIED) IN OBJECT = V-DROP>
<SYNTAX POUR OBJECT (HELD CARRIED) ON OBJECT = V-POUR-ON PRE-POUR-ON>"
<SYNONYM PULL TUG>
<SYNTAX PULL OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNTAX PULL OBJECT (ON-GROUND IN-ROOM) OBJECT = V-MOVE-DIR PRE-MOVE-DIR>
<SYNTAX PULL ON OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNTAX PUMP OUT OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-EMPTY>
<SYNONYM PUSH PRESS>
<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND MANY) OBJECT
= V-MOVE-DIR PRE-MOVE-DIR>
<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND MANY) ON OBJECT = V-PUSH>
<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND MANY) TO OBJECT
= V-MOVE-DIR PRE-MOVE-DIR>
<SYNTAX PUSH OBJECT UNDER OBJECT = V-PUT-UNDER>
<SYNTAX PUSH ON OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
<SYNONYM PLACE PUT STUFF INSERT INSTALL MOUNT LOAD>
<SYNTAX PLACE OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT PRE-PUT>
<SYNTAX PLACE OBJECT (HELD MANY HAVE) IN OBJECT(FIND CONTBIT) = V-PUT PRE-PUT>
<SYNTAX PLACE OBJECT (HELD MANY HAVE) DOWN ;ON OBJECT = V-PUT PRE-PUT>
"<SYNTAX PLACE OBJECT (HELD MANY HAVE) TO OBJECT = V-PUT PRE-PUT>"
<SYNTAX PLACE OBJECT (CARRIED HELD HAVE) UNDER OBJECT = V-PUT-UNDER>
"<SYNTAX PLACE OBJECT (CARRIED HELD HAVE) AGAINST OBJECT = V-LEAN>"
<SYNTAX PLACE DOWN OBJECT (HELD MANY HAVE) = V-DROP>
<SYNTAX PLACE ON OBJECT (ON-GROUND IN-ROOM) = V-TAKE PRE-TAKE>
<SYNONYM QUIT Q>
<SYNTAX QUIT = V-QUIT>
<SYNONYM RAISE LIFT>
<SYNTAX RAISE OBJECT = V-RAISE>
<SYNTAX RAISE UP OBJECT = V-RAISE>
"<SYNTAX RAISE OBJECT OFF OBJECT = V-TAKE>"
<SYNONYM READ SKIM PERUSE>
<SYNTAX READ OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
= V-READ PRE-READ>
<SYNTAX READ OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
OBJECT = V-READ PRE-READ>
<SYNTAX READ OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
THROUGH OBJECT
= V-READ PRE-READ>
<SYNTAX READ ABOUT OBJECT
IN OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
= V-LOOK-UP>
"<SYNTAX REQUEST OBJECT (HELD CARRIED HAVE)
= V-ASK-CONTEXT-FOR PRE-ASK-CONTEXT-FOR>"
<SYNTAX RESTART = V-RESTART>
<SYNONYM RESTORE ;CONTINUE RESUME>
<SYNTAX RESTORE = V-RESTORE>
<SYNONYM RING PEAL>
<SYNTAX RING OBJECT = V-RING>
<SYNTAX RING OBJECT WITH OBJECT = V-RING>
<SYNONYM RISE ASCEND>
<SYNTAX RISE = V-RISE>
<SYNTAX RISE OBJECT = V-CLIMB-UP>
<SYNTAX RISE BY OBJECT = V-CLIMB-UP>
<SYNTAX RISE TO OBJECT = V-RISE>
<SYNONYM RUB TOUCH FEEL SHADE PAT PET>
<SYNTAX RUB OBJECT = V-RUB>
<SYNTAX RUB OBJECT (TAKE HAVE) ON OBJECT = V-RUB-OVER PRE-RUB-OVER>
<SYNTAX RUB OBJECT (TAKE HAVE) OVER OBJECT = V-RUB-OVER PRE-RUB-OVER>
<SYNTAX RUB OBJECT WITH OBJECT (TAKE HAVE) = V-RUB>
<SYNONYM SAVE SUSPEND PAUSE>
<SYNTAX SAVE = V-SAVE>
<SYNTAX SAVE OBJECT (FIND PERSON) = V-HELP>
<SYNONYM SAY TALK SPEAK STATE EXPLAIN>
<SYNTAX SAY = V-SAY>
<SYNTAX SAY OBJECT = V-TALK-ABOUT PRE-TALK-ABOUT>
<SYNTAX SAY ABOUT OBJECT = V-TALK-ABOUT PRE-TALK-ABOUT>
<SYNTAX SAY IN OBJECT = V-SAY-INTO PRE-SAY-INTO>
<SYNTAX SAY TO OBJECT (FIND PERSON) (IN-ROOM) = V-TELL>
<SYNTAX SAY TO OBJECT (FIND PERSON) (IN-ROOM) ABOUT OBJECT
= V-TELL-ABOUT PRE-TELL-ABOUT>
<SYNTAX SAY WITH OBJECT (FIND PERSON) (IN-ROOM) = V-TELL>
<SYNTAX SCORE = V-SCORE>
<SYNTAX SCREW IN OBJECT (HELD MANY HAVE) = V-SCREW-IN>
<SYNTAX SCREW OBJECT (HELD MANY HAVE) IN OBJECT = V-SCREW>
<SYNTAX SCRIPT = V-SCRIPT>
<SYNONYM SEARCH DIG>
<SYNTAX SEARCH OBJECT = V-SEARCH PRE-SEARCH>
"<SYNTAX SEARCH OBJECT AROUND OBJECT = V-SEARCH-GROUND-AROUND>"
<SYNTAX SEARCH OBJECT FOR OBJECT (HELD CARRIED HAVE)
= V-SEARCH-FOR PRE-SEARCH-FOR>
"<SYNTAX SEARCH OBJECT NEAR OBJECT = V-SEARCH-GROUND-AROUND>
<SYNTAX SEARCH OBJECT UNDER OBJECT = V-SEARCH-GROUND-UNDER>"
"<SYNTAX SEARCH AROUND OBJECT = V-SEARCH-AROUND>"
<SYNTAX SEARCH FOR OBJECT (HELD CARRIED HAVE) = V-FIND>
<SYNTAX SEARCH IN OBJECT = V-SEARCH PRE-SEARCH>
"<SYNTAX SEARCH NEAR OBJECT = V-SEARCH-AROUND>"
<SYNTAX SEARCH UP OBJECT = V-SEARCH PRE-SEARCH>
<SYNTAX SEND OBJECT = V-SEND>
"<SYNTAX SEND FOR OBJECT = V-SEND-FOR>"
<SYNTAX SEND OUT OBJECT = V-SEND-OUT>
<SYNTAX SEND OBJECT OBJECT = V-SSEND PRE-SSEND>
<SYNTAX SEND OBJECT TO OBJECT = V-SEND-TO PRE-SEND-TO>
<SYNTAX SET OBJECT TO OBJECT ;(FIND RMUNGBIT) = V-SET PRE-SET>
<SYNTAX SET OBJECT AT OBJECT ;(FIND RMUNGBIT) = V-SET PRE-SET>
<SYNTAX SET OBJECT FOR OBJECT ;(FIND RMUNGBIT) = V-SET PRE-SET>
<SYNTAX SET OBJECT IN OBJECT ;(FIND RMUNGBIT) = V-SET PRE-SET>
<SYNTAX SET OBJECT (HELD MANY HAVE) ON OBJECT (FIND RMUNGBIT) = V-PUT PRE-PUT>
<SYNTAX SET OBJECT OBJECT ;(FIND RMUNGBIT) = V-SET PRE-SET>
<SYNONYM FIRE SHOOT BLAST>
<SYNTAX FIRE OBJECT ;(FIND PERSON) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) ;(HELD CARRIED HAVE)
= V-SHOOT PRE-SHOOT>
<SYNTAX FIRE OBJECT (FIND PERSON) = V-SHOOT PRE-SHOOT>
<SYNTAX FIRE OBJECT (FIND WEAPONBIT) ;(HELD CARRIED HAVE)
AT OBJECT ;(FIND PERSON) (ON-GROUND IN-ROOM)
= V-SSHOOT PRE-SSHOOT>
<SYNTAX SHOW OBJECT (FIND PERSON) OBJECT = V-SHOW>
<SYNTAX SHOW OBJECT TO OBJECT (FIND PERSON) = V-SSHOW PRE-SSHOW>
<SYNTAX SIT ON OBJECT (FIND FURNITURE) (ON-GROUND IN-ROOM) = V-SIT>
<SYNTAX SIT DOWN OBJECT (FIND FURNITURE) (ON-GROUND IN-ROOM) = V-SIT>
<SYNTAX SIT IN OBJECT (FIND FURNITURE) (ON-GROUND IN-ROOM) = V-SIT>
<SYNONYM SLAP HURT INJURE HIT PUNCH KICK BITE>
<SYNTAX SLAP OBJECT (FIND PERSON) = V-SLAP>
<SYNTAX SLAP OBJECT (FIND PERSON) AROUND = V-SLAP>
<SYNTAX SLAP OBJECT (FIND PERSON) WITH OBJECT = V-SLAP>
"<SYNONYM SLEEP NAP>
<SYNTAX SLEEP OBJECT (FIND RMUNGBIT) = V-SLEEP-FOR>
<SYNTAX SLEEP FOR OBJECT = V-SLEEP-FOR>
<SYNTAX SLEEP TILL OBJECT = V-SLEEP-UNTIL>
<SYNTAX SLEEP UNTIL OBJECT = V-SLEEP-UNTIL>
<SYNTAX SLIDE OBJECT UNDER OBJECT = V-PUT-UNDER>"
<SYNONYM SMELL SNIFF>
<SYNTAX SMELL OBJECT = V-SMELL>
<SYNONYM SMILE GRIN WINK>
<SYNTAX SMILE AT OBJECT = V-SMILE>
<SYNTAX SMOKE OBJECT = V-SMOKE> "(FIND BURNBIT)"
"<SYNTAX SPACE = V-SPACE>"
<SYNONYM START ACTIVATE ENGAGE>
<SYNTAX START OBJECT = V-LAMP-ON>
<SYNTAX START OVER OBJECT (FIND RMUNGBIT) = V-RESTART>
<SYNTAX STOP OBJECT (FIND RMUNGBIT) = V-STOP>
"<SYNTAX SLOW = V-SLOW>
<SYNTAX MEDIUM = V-MEDIUM>
<SYNTAX FAST = V-FAST>"
<SYNTAX STRIKE OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-SLAP>
"<SYNTAX STRIKE OBJECT (ON-GROUND IN-ROOM HELD CARRIED) = V-LAMP-ON>"
<SYNTAX STRIKE OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED ON-GROUND IN-ROOM HAVE)
= V-ATTACK>
<SYNONYM SUPER SUPERBRIEF>
<SYNTAX SUPER = V-SUPER-BRIEF>
<SYNTAX SURFACE = V-SURFACE>
<SYNTAX SURFACE OBJECT = V-SURFACE>
<SYNONYM SWIM BATHE WADE>
<SYNTAX SWIM = V-SWIM>
<SYNTAX SWIM IN OBJECT = V-SWIM>
"<SYNONYM SWING THRUST>
<SYNTAX SWING OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-SWING>
<SYNTAX SWING OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
AT OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
= V-SWING>"
<SYNONYM TAKE GET ;HOLD CARRY REMOVE LEAD STEAL SEIZE GRAB>
<SYNTAX TAKE OBJECT (FIND TAKEBIT) (ON-GROUND IN-ROOM MANY)
= V-TAKE PRE-TAKE>
<SYNTAX TAKE OBJECT (FIND TAKEBIT) (IN-ROOM CARRIED MANY)
FROM OBJECT
= V-TAKE PRE-TAKE>
"<SYNTAX TAKE OBJECT (FIND TAKEBIT) (CARRIED IN-ROOM MANY)
OFF OBJECT
= V-TAKE PRE-TAKE>"
<SYNTAX TAKE OBJECT (FIND TAKEBIT) (CARRIED IN-ROOM MANY)
OUT ;OF OBJECT (FIND CONTBIT)
= V-TAKE PRE-TAKE>
<SYNTAX TAKE OBJECT (FIND TAKEBIT) (MANY TAKE) TO OBJECT = V-TAKE-TO>
<SYNTAX TAKE OBJECT (FIND TAKEBIT) WITH OBJECT = V-TAKE-WITH>
<SYNTAX TAKE IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD>
<SYNTAX TAKE OFF OBJECT = V-DROP>
<SYNTAX TAKE ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
<SYNTAX TAKE OUT OBJECT (FIND RMUNGBIT) (ON-GROUND IN-ROOM) = V-DISEMBARK>
<SYNTAX TAKE RID ;OF OBJECT = V-DROP>
<SYNTAX TAKE UP OBJECT (FIND RMUNGBIT) = V-STAND>
<SYNTAX TELL OBJECT (FIND PERSON) (IN-ROOM) = V-TELL>
<SYNTAX TELL OBJECT (FIND PERSON) (IN-ROOM)
OBJECT ;(HELD CARRIED HAVE) = V-TELL-ABOUT PRE-TELL-ABOUT>
<SYNTAX TELL ABOUT OBJECT ;(HELD CARRIED HAVE)
= V-TALK-ABOUT PRE-TALK-ABOUT>
<SYNTAX TELL OBJECT (FIND PERSON) (IN-ROOM)
ABOUT OBJECT ;(HELD CARRIED HAVE) = V-TELL-ABOUT PRE-TELL-ABOUT>
<SYNONYM THANKS THANK>
<SYNTAX THANKS = V-THANKS>
<SYNTAX THANKS OBJECT = V-THANKS>
<SYNONYM THROW HURL CHUCK TOSS>
<SYNTAX THROW AWAY OBJECT (HELD CARRIED HAVE) = V-DROP>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE)
AT OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
= V-THROW-AT>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE)
IN OBJECT = V-PUT PRE-PUT>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE)
ON OBJECT = V-PUT PRE-PUT>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE)
OVER OBJECT = V-PUT PRE-PUT>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE)
THROUGH OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
= V-THROW-THROUGH>
<SYNONYM TIE FASTEN SECURE ATTACH>
"<SYNTAX TIE OBJECT TO OBJECT = V-TIE PRE-TIE>"
<SYNTAX TIE OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
TO OBJECT (FIND FURNITURE) (ON-GROUND IN-ROOM)
= V-TIE-TO PRE-TIE-TO>
<SYNTAX TIE UP OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
TO OBJECT (FIND FURNITURE) (ON-GROUND IN-ROOM)
= V-TIE-TO PRE-TIE-TO>
<SYNTAX TIE OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
= V-TIE-WITH PRE-TIE-WITH>
<SYNTAX TIE UP OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
= V-TIE-WITH PRE-TIE-WITH>
"<SYNONYM TIME T>
<SYNTAX TIME = V-TIME>"
<SYNONYM SWITCH FLIP SHUT SWING ;"AIM POINT">
<SYNTAX SWITCH OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-TURN>
<SYNTAX TURN OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-TURN>
<SYNTAX SWITCH OBJECT ON OBJECT = V-SET PRE-SET>
<SYNTAX TURN OBJECT ON OBJECT = V-SET PRE-SET>
<SYNTAX SWITCH OBJECT TO OBJECT = V-SET PRE-SET>
<SYNTAX TURN OBJECT TO OBJECT = V-SET PRE-SET>
"<SYNTAX SWITCH IN OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-TURN>"
<SYNTAX SWITCH OFF OBJECT(FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM MANY)
= V-LAMP-OFF>
<SYNTAX TURN OFF OBJECT(FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM MANY)
= V-LAMP-OFF>
<SYNTAX SWITCH OFF OBJECT(FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM MANY)
WITH OBJECT
= V-LAMP-OFF>
<SYNTAX TURN OFF OBJECT(FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM MANY)
WITH OBJECT
= V-LAMP-OFF>
<SYNTAX SWITCH ON OBJECT (FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM MANY)
= V-LAMP-ON>
<SYNTAX TURN ON OBJECT (FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM MANY)
= V-LAMP-ON>
<SYNTAX SWITCH ON OBJECT (FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM MANY)
WITH OBJECT
= V-LAMP-ON>
<SYNTAX TURN ON OBJECT (FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM MANY)
WITH OBJECT
= V-LAMP-ON> "? IS MANY O.K.?"
<SYNTAX TURN TO OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
= V-TURN>
<SYNTAX UNLOCK OBJECT (ON-GROUND IN-ROOM) = V-UNLOCK>
<SYNTAX UNLOCK OBJECT (ON-GROUND IN-ROOM) WITH OBJECT = V-UNLOCK>
<SYNTAX UNSCRIPT = V-UNSCRIPT>
"<SYNTAX UNSPACE = V-UNSPACE>"
<SYNONYM UNTIE FREE UNFASTEN UNATTACH UNHOOK UNCUFF>
<SYNTAX UNTIE OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
= V-UNTIE>
<SYNTAX UNTIE OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
FROM OBJECT
= V-UNTIE>
<SYNTAX USE OBJECT = V-USE>
<SYNTAX USE OBJECT AGAINST OBJECT = V-USE-AGAINST>
<SYNTAX VERBOSE = V-VERBOSE>
<SYNONYM RELEASE REVISION VERSION EDITION>
<SYNTAX RELEASE = V-VERSION>
<SYNTAX RELEASE OBJECT (FIND PERSON) = V-UNTIE>
<SYNONYM WAIT Z STAY MEDITATE RELAX REST>
"<SYNTAX WAIT = V-WAIT>"
<SYNTAX WAIT OBJECT (FIND RMUNGBIT) = V-WAIT-FOR>
<SYNTAX WAIT FOR OBJECT (FIND RMUNGBIT) = V-WAIT-FOR>
<SYNTAX WAIT TILL OBJECT = V-WAIT-UNTIL>
<SYNTAX WAIT UNTIL OBJECT = V-WAIT-UNTIL>
<SYNONYM WAKE AWAKE SURPRISE STARTLE>
<SYNTAX WAKE OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-ALARM>
<SYNTAX WAKE UP OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-ALARM>
<SYNONYM WALK GO RUN PROCEED STEER HEAD DRIVE>
<SYNTAX WALK OBJECT = V-WALK>
<SYNTAX CRAWL OBJECT = V-WALK>
<SYNTAX WALK AROUND OBJECT = V-WALK-AROUND>
<SYNTAX CRAWL AROUND OBJECT = V-WALK-AROUND>
<SYNTAX WALK BEHIND OBJECT = V-THROUGH PRE-THROUGH>
<SYNTAX CRAWL BEHIND OBJECT = V-THROUGH PRE-THROUGH>
<SYNTAX WALK DOWN OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-DOWN> "(FIND CLIMBBIT)"
<SYNTAX WALK IN OBJECT = V-THROUGH PRE-THROUGH>
<SYNTAX CRAWL IN OBJECT = V-THROUGH PRE-THROUGH>
<SYNTAX WALK OBJECT OVER OBJECT = V-RUN-OVER>
<SYNTAX WALK OUT ;OF OBJECT = V-LEAVE>
<SYNTAX CRAWL OUT ;OF OBJECT = V-LEAVE>
<SYNTAX WALK TO OBJECT = V-WALK-TO>
<SYNTAX CRAWL TO OBJECT = V-WALK-TO>
<SYNTAX WALK UNDER OBJECT = V-WALK-UNDER>
<SYNTAX CRAWL UNDER OBJECT = V-WALK-UNDER>
<SYNTAX WALK UP OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-UP> "(FIND CLIMBBIT)"
<SYNTAX WALK THROUGH OBJECT = V-THROUGH PRE-THROUGH>
<SYNTAX CRAWL THROUGH OBJECT = V-THROUGH PRE-THROUGH>
<SYNTAX WALK WITH OBJECT = V-FOLLOW>
"<SYNTAX WATCH OBJECT = V-EXAMINE>"
<SYNONYM NAME IDENTIFY>
<SYNTAX NAME OBJECT (HELD CARRIED HAVE) = V-WHAT>
"<SYNTAX WHAT ABOUT OBJECT (HELD CARRIED HAVE) = V-WHAT>
<SYNTAX WHAT IN OBJECT (HELD CARRIED IN-ROOM ON-GROUND MANY)
= V-LOOK-INSIDE PRE-LOOK-INSIDE>
<SYNTAX WHAT NEAR OBJECT = V-WHO-WAS-NEAR>
<SYNTAX WHAT ON OBJECT (HELD CARRIED IN-ROOM ON-GROUND MANY)
= V-LOOK-INSIDE PRE-LOOK-INSIDE>
<SYNTAX WHEN = V-THANKS>
<SYNONYM WHEN DID WHY HOW>"
<SYNONYM YELL SCREAM SHOUT>
<SYNTAX YELL = V-YELL>
<SYNTAX YELL FOR OBJECT = V-YELL-FOR>
<SYNTAX YELL IN OBJECT = V-SAY-INTO PRE-SAY-INTO>
<SYNTAX YELL TO OBJECT (FIND PERSON) (IN-ROOM) = V-TELL>
<SYNONYM YES Y AYE ROGER WILCO OK OKAY 10-4 SURE YUP YEAH AFFIRM>
<SYNTAX YES = V-YES>

26
tandy.errors Normal file
View file

@ -0,0 +1,26 @@
Assembling STD.XZAP.1
Inserting J1FREQ.XZAP.7 ( 620 bytes)
Inserting J1DAT.ZAP.1 (22305 bytes)
Inserting MACROS.ZAP.1 ( 104 bytes)
Inserting MAIN.ZAP.1 ( 2259 bytes)
Inserting CLOCK.ZAP.1 ( 186 bytes)
Inserting SUB.ZAP.3 (16341 bytes)
Inserting BATTLE.ZAP.1 ( 5651 bytes)
Inserting DOME.ZAP.1 ( 9902 bytes)
Inserting PLACES.ZAP.1 ( 4753 bytes)
Inserting PEOPLE.ZAP.1 (15561 bytes)
Inserting THINGS.ZAP.1 ( 2058 bytes)
Inserting GLOBAL.ZAP.1 ( 5836 bytes)
Inserting PARSER.ZAP.1 ( 5735 bytes)
Inserting SYNTAX.ZAP.1 ( 778 bytes)
Inserting VERBS.ZAP.3 (15682 bytes)
Inserting EVENTS.ZAP.1 ( 7364 bytes)
Inserting J1STR.ZAP.1 ( 2553 bytes)
22989 bytes of preload.
117752 bytes (115K).
32760 bytes too large for one-disk game on ATARI.
255 objects.
239 globals.

BIN
tandy.zip Normal file

Binary file not shown.

340
things.zap Normal file
View file

@ -0,0 +1,340 @@
.FUNCT RANDOM-PSEUDO
PRINTR "You can't do anything useful with that."
.FUNCT NOT-HERE-OBJECT-F,TBL,PRSO?=1,OBJ
EQUAL? PRSO,NOT-HERE-OBJECT \?ELS3
EQUAL? PRSI,NOT-HERE-OBJECT \?ELS3
PRINTI "(Those things aren't here!)"
CRLF
RETURN 2
?ELS3: EQUAL? PRSO,NOT-HERE-OBJECT \?ELS11
SET 'TBL,P-PRSO
JUMP ?CND1
?ELS11: SET 'TBL,P-PRSI
SET 'PRSO?,0
?CND1: EQUAL? PRSA,V?SEARCH-FOR,V?ASK-FOR,V?ASK-ABOUT \?CND14
FSET? PRSO,PERSON \?CND14
IN? PRSO,GLOBAL-OBJECTS \?CND14
PRINTD PRSO
CALL NOT-HERE-PERSON,PRSO
?CND14: ZERO? PRSO? /?ELS23
EQUAL? PRSA,V?ASK-CONTEXT-ABOUT,V?BOARD /?THN28
EQUAL? PRSA,V?ASK-CONTEXT-FOR,V?TAKE-WITH /?THN28
EQUAL? PRSA,V?FIND,V?FOLLOW,V?USE /?THN28
EQUAL? PRSA,V?LEAVE,V?DISEMBARK,V?PHONE /?THN28
EQUAL? PRSA,V?THROUGH,V?WALK-TO,V?WHAT /?THN28
EQUAL? PRSA,V?BRING,V?TAKE,V?SSHOW \?CND21
EQUAL? WINNER,PLAYER /?CND21
?THN28: CALL FIND-NOT-HERE,TBL,PRSO? >OBJ
ZERO? OBJ /FALSE
EQUAL? OBJ,NOT-HERE-OBJECT /?CND21
RETURN 2
?ELS23: EQUAL? PRSA,V?ASK-ABOUT,V?ASK-FOR,V?TAKE-TO /?THN47
EQUAL? PRSA,V?SEARCH-FOR,V?TELL-ABOUT /?THN47
EQUAL? PRSA,V?SBRING,V?SHOW \?CND21
EQUAL? WINNER,PLAYER /?CND21
?THN47: CALL FIND-NOT-HERE,TBL,PRSO? >OBJ
ZERO? OBJ /FALSE
EQUAL? OBJ,NOT-HERE-OBJECT /?CND21
RETURN 2
?CND21: PRINTI "(You can't see any"
CALL NOT-HERE-PRINT
PRINTI " here!)"
CRLF
RETURN 2
.FUNCT FIND-NOT-HERE,TBL,PRSO?,M-F,OBJ,PERSON?=1
CALL MOBY-FIND,TBL >M-F
ZERO? DEBUG /?CND1
PRINTI "[Found "
PRINTN M-F
PRINTI " objects]"
CRLF
?CND1: EQUAL? 1,M-F \?ELS11
ZERO? DEBUG /?CND12
PRINTI "[Namely: "
PRINTD P-MOBY-FOUND
PRINTI "]"
CRLF
?CND12: ZERO? PRSO? /?ELS20
SET 'PRSO,P-MOBY-FOUND
RFALSE
?ELS20: SET 'PRSI,P-MOBY-FOUND
RFALSE
?ELS11: LESS? 1,M-F \?ELS25
GET TBL,1 >OBJ
GETP OBJ,P?GENERIC
CALL STACK,OBJ >OBJ
ZERO? OBJ /?ELS25
ZERO? DEBUG /?CND28
PRINTI "[Generic: "
PRINTD OBJ
PRINTI "]"
CRLF
?CND28: EQUAL? OBJ,NOT-HERE-OBJECT /TRUE
ZERO? PRSO? /?ELS38
SET 'PRSO,OBJ
RFALSE
?ELS38: SET 'PRSI,OBJ
RFALSE
?ELS25: ZERO? PRSO? \?ELS47
IN? PRSO,HERE \?ELS47
EQUAL? PRSA,V?TELL-ABOUT,V?ASK-FOR,V?ASK-ABOUT /?THN52
?ELS47: ZERO? PRSO? /?ELS49
CALL QCONTEXT-GOOD?
ZERO? STACK /?ELS49
EQUAL? PRSA,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT /?THN52
?ELS49: EQUAL? WINNER,PLAYER /?ELS43
EQUAL? PRSA,V?SGIVE /?THN52
EQUAL? PRSA,V?GIVE,V?WHAT,V?FIND \?ELS43
?THN52: EQUAL? PRSA,V?ASK-FOR,V?ASK-ABOUT \?ELS56
FSET? PRSO,PERSON /?CND57
SET 'PERSON?,0
PRINTI "The "
?CND57: PRINTD PRSO
JUMP ?CND54
?ELS56: CALL QCONTEXT-GOOD?
ZERO? STACK /?ELS65
FSET? QCONTEXT,PERSON /?CND66
SET 'PERSON?,0
PRINTI "The "
?CND66: PRINTD QCONTEXT
JUMP ?CND54
?ELS65: EQUAL? WINNER,PLAYER /?ELS74
PRINTD WINNER
JUMP ?CND54
?ELS74: CALL FIND-FLAG,HERE,PERSON,PLAYER >OBJ
ZERO? OBJ /?ELS78
PRINTD OBJ
JUMP ?CND54
?ELS78: CALL VISIBLE?,TIP
ZERO? STACK /?ELS82
PRINTI "Tip"
JUMP ?CND54
?ELS82: PRINTI "Someone"
?CND54: ZERO? PERSON? \?ELS91
PRINTI " isn't connected to any"
JUMP ?CND89
?ELS91: PRINTI " looks confused. ""I don't know anything about any"
?CND89: CALL NOT-HERE-PRINT
PRINTI "!"
ZERO? PERSON? /?CND100
PRINTI """"
?CND100: CRLF
RTRUE
?ELS43: ZERO? PRSO? \?ELS107
PRINTI "You wouldn't find any"
CALL NOT-HERE-PRINT
PRINTR " there."
?ELS107: RETURN NOT-HERE-OBJECT
.FUNCT NOT-HERE-PRINT,?TMP1
ZERO? P-OFLAG \?THN6
ZERO? P-MERGED /?ELS5
?THN6: ZERO? P-XADJ /?CND8
PRINTI " "
PRINTB P-XADJN
?CND8: ZERO? P-XNAM /FALSE
PRINTI " "
PRINTB P-XNAM
RTRUE
?ELS5: EQUAL? PRSO,NOT-HERE-OBJECT \?ELS23
GET P-ITBL,P-NC1 >?TMP1
GET P-ITBL,P-NC1L
CALL BUFFER-PRINT,?TMP1,STACK,0
RSTACK
?ELS23: GET P-ITBL,P-NC2 >?TMP1
GET P-ITBL,P-NC2L
CALL BUFFER-PRINT,?TMP1,STACK,0
RSTACK
.FUNCT NO-TOUCH
PRINTR "Only clods fool around with these things for no good reason."
.FUNCT THE?,NOUN
FSET? NOUN,PERSON \?ELS9
EQUAL? NOUN,PLAYER \TRUE
?ELS9: FSET? NOUN,NARTICLEBIT /TRUE
PRINTI " the"
RTRUE
.FUNCT NOTEBOOK-F
EQUAL? PRSA,V?TELL-ABOUT,V?ANALYZE /?THN6
EQUAL? PRSA,V?EXAMINE,V?READ,V?OPEN \FALSE
?THN6: PRINTI "(You'll find the "
PRINTD NOTEBOOK
PRINTI " in your "
PRINTD GAME
PRINTR " package.)"
.FUNCT MAGAZINE-F
CALL REMOTE-VERB?
ZERO? STACK \FALSE
EQUAL? PRSA,V?OPEN \?ELS7
CALL NOT-HOLDING?,MAGAZINE
ZERO? STACK \TRUE
?ELS7: EQUAL? PRSA,V?LOOK-UP \?ELS11
EQUAL? PRSO,GLOBAL-THORPE \?ELS11
CALL PERFORM,V?READ,ARTICLE
RTRUE
?ELS11: EQUAL? PRSA,V?ANALYZE,V?EXAMINE,V?READ \FALSE
CALL NOT-HOLDING?,MAGAZINE
ZERO? STACK \TRUE
PRINTI """Science World"" is a popular "
PRINTD MAGAZINE
PRINTI " about new scientific developments.
The cover shows "
PRINTD GLOBAL-THORPE
PRINTR ", marine biologist, surrounded by imaginative drawings of weird undersea life forms. The cover says:
""HOT FLASH FROM THE MARINE BIOLOGY FRONT!
... NEW SEA CREATURES SPAWNED BY TEST TUBE?
(SEE ARTICLE INSIDE)"""
.FUNCT ARTICLE-F
CALL DIVESTMENT?,ARTICLE
ZERO? STACK /?ELS5
CALL PERFORM,PRSA,MAGAZINE,PRSI
RTRUE
?ELS5: EQUAL? PRSA,V?ANALYZE /?THN8
EQUAL? PRSA,V?EXAMINE,V?LOOK-INSIDE,V?READ \FALSE
?THN8: PRINTI "It says that "
PRINTD GLOBAL-THORPE
PRINTI " may have created synthetic forms of marine life by genetic engineering. You learn that Thorpe went into hiding to duck publicity, but before that he told friends he would soon marry "
PRINTD SHARON
PRINTR ".
The form of the creatures is unknown. They may be stimulated by ultrasonic pulses and might be trained to respond to such pulses.
Some scientists are skeptical, but Thorpe has claimed that one-celled organisms had evolved in his lab from AMINO-HYDROPHASE or AH. If rumors are true, these synthetic sea creatures should be based on the AH molecule."
.FUNCT CATALYST-CAPSULE-F
EQUAL? PRSA,V?COMPARE \?ELS5
EQUAL? PRSI,CATALYST-CAPSULE \?ELS11
EQUAL? PRSO,REACTOR /?THN8
?ELS11: EQUAL? PRSO,CATALYST-CAPSULE \?ELS5
EQUAL? PRSI,REACTOR \?ELS5
?THN8: PRINTI "It looks as if the "
PRINTD CATALYST-CAPSULE
PRINTI " fits perfectly into the "
PRINTD REACTOR
PRINTR "."
?ELS5: EQUAL? PRSA,V?FIND \?ELS17
FSET? CATALYST-CAPSULE,TOUCHBIT /?ELS17
PRINTI "The capsule is usually stored on a "
PRINTD WORK-COUNTER
PRINTR " on the west wall of the tank area."
?ELS17: EQUAL? PRSA,V?PUT \?ELS23
EQUAL? PRSI,LOCAL-SUB,GLOBAL-SUB \?ELS23
PRINTR "You'll have to take it there yourself."
?ELS23: EQUAL? PRSA,V?TAKE \FALSE
FSET? CATALYST-CAPSULE,TRYTAKEBIT \FALSE
PRINTR "It's too hot to pick up."
.FUNCT GENERIC-OXYGEN-GEAR-F,OBJ
CALL REMOTE-VERB?
ZERO? STACK /?ELS5
RETURN OXYGEN-GEAR
?ELS5: EQUAL? PRSA,V?TAKE \FALSE
ZERO? PRSI /FALSE
FSET? PRSI,PERSON \FALSE
EQUAL? PRSI,ANTRIM,SIEGEL,HORVAK \?ELS14
RETURN OXYGEN-GEAR-OTHER
?ELS14: EQUAL? PRSI,LOWELL,GREENUP \?ELS16
RETURN OXYGEN-GEAR-DIVER
?ELS16: EQUAL? PRSI,BLY \FALSE
RETURN OXYGEN-GEAR-BLY
.FUNCT OXYGEN-GEAR-GLOBAL-F
ZERO? SUB-IN-DOME /?THN6
CALL FIND-FLAG,HERE,PERSON,WINNER
ZERO? STACK \?ELS5
?THN6: CALL NOT-HERE,OXYGEN-GEAR-OTHER
RSTACK
?ELS5: EQUAL? PRSA,V?EXAMINE,V?TELL-ABOUT,V?SEARCH-FOR /FALSE
EQUAL? PRSA,V?FIND,V?ASK-CONTEXT-ABOUT,V?ASK-ABOUT /FALSE
CALL YOU-CANT
RSTACK
.FUNCT OXYGEN-GEAR-F
CALL REMOTE-VERB?
ZERO? STACK \FALSE
FCLEAR OXYGEN-GEAR,NDESCBIT
EQUAL? PRSA,V?TAKE \?ELS8
EQUAL? PRSO,OXYGEN-GEAR \?ELS8
CALL ITAKE
EQUAL? STACK,1 \TRUE
PRINTI "You're now wearing"
CALL THE-PRSO-PRINT
PRINTR " around your neck."
?ELS8: EQUAL? PRSA,V?OPEN /?THN18
EQUAL? PRSA,V?USE,V?TURN,V?LAMP-ON \?ELS17
?THN18: FSET? OXYGEN-GEAR,ONBIT \?ELS22
CALL ALREADY,OXYGEN-GEAR,STR?47
RTRUE
?ELS22: CALL NOT-HOLDING?,OXYGEN-GEAR
ZERO? STACK \TRUE
ZERO? DOME-AIR-BAD? \?CND20
PRINTR "You don't need it now!"
?CND20: FSET OXYGEN-GEAR,ONBIT
PRINTI "As you open the valve and suck on the rubber straw, you feel your lungs filling with pure oxygen."
ZERO? DOME-AIR-BAD? /?CND31
CALL CORRIDOR-LOOK,BLY
ZERO? STACK /?CND31
CRLF
PRINTI "But you notice Zoe Bly collapsing, and you realize she has no "
PRINTD OXYGEN-GEAR
PRINTI "!"
?CND31: CRLF
RTRUE
?ELS17: EQUAL? PRSA,V?CLOSE \FALSE
CALL PERFORM,V?LAMP-OFF,OXYGEN-GEAR
RTRUE
.FUNCT BADGE-PLAYER-F
CALL DIVESTMENT?,BADGE-PLAYER
ZERO? STACK /?ELS5
PRINTR "That wouldn't be good for security."
?ELS5: EQUAL? PRSA,V?READ,V?EXAMINE,V?ANALYZE \FALSE
PRINTI "It's a special identification badge for"
CALL RESEARCH-LAB
PRINTR "."
.FUNCT GENERIC-TOOL-F,OBJ
EQUAL? PRSA,V?TAKE-WITH,V?OPEN-WITH \FALSE
RETURN UNIVERSAL-TOOL
.FUNCT V-$BAY
SET 'HERE,SUB
MOVE PLAYER,SUB
MOVE TIP,SUB
MOVE CATALYST-CAPSULE,REACTOR
FCLEAR REACTOR,OPENBIT
FSET REACTOR,ONBIT
FSET ENGINE,ONBIT
FCLEAR SUB-DOOR,OPENBIT
SET 'MONSTER-GONE,1
SET 'JOYSTICK-DIR,P?EAST
SET 'SUB-DLON,1
SET 'SUB-DLAT,0
SET 'NOW-TERRAIN,BAY-TERRAIN
SET 'SUB-IN-TANK,0
CALL QUEUE,I-UPDATE-SUB-POSITION,-1
PUT STACK,0,1
RTRUE
.ENDI

462
things.zil Normal file
View file

@ -0,0 +1,462 @@
"THINGS for SEASTALKER
Copyright (C) 1984 Infocom, Inc. All rights reserved."
<OBJECT PSEUDO-OBJECT
(DESC "pseudo" ;"Place holder (MUST BE 6 CHARACTERS!!!!!)")
(CONTFCN NULL-F) ;"to establish property"
(ACTION NULL-F ;"Place holder")>
<ROUTINE RANDOM-PSEUDO ()
%<XTELL "You can't do anything useful with that." CR>>
<OBJECT NOT-HERE-OBJECT
(DESC "that thing")
(FLAGS NARTICLEBIT)
(ACTION NOT-HERE-OBJECT-F)>
<ROUTINE NOT-HERE-OBJECT-F ("AUX" TBL (PRSO? T) OBJ)
;"Protocol: return ,M-FATAL if case was handled and msg TELLed,
<> if PRSO/PRSI ready to use"
<COND ;"This COND is game independent (except the TELL)"
(<AND <EQUAL? ,PRSO ,NOT-HERE-OBJECT>
<EQUAL? ,PRSI ,NOT-HERE-OBJECT>>
<TELL "(Those things aren't here!)" CR>
<RFATAL>)
(<EQUAL? ,PRSO ,NOT-HERE-OBJECT>
<SET TBL ,P-PRSO>)
(T
<SET TBL ,P-PRSI>
<SET PRSO? <>>)>
<COND (<AND <VERB? ASK-ABOUT ASK-FOR SEARCH-FOR>
<FSET? ,PRSO ,PERSON>
<IN? ,PRSO ,GLOBAL-OBJECTS>>
<TELL D ,PRSO>
<NOT-HERE-PERSON ,PRSO>)>
<COND (.PRSO?
<COND (<OR <EQUAL? ,PRSA ,V?ASK-CONTEXT-ABOUT ,V?BOARD>
<EQUAL? ,PRSA ,V?ASK-CONTEXT-FOR ,V?TAKE-WITH>
<EQUAL? ,PRSA ,V?FIND ,V?FOLLOW ,V?USE>
<EQUAL? ,PRSA ,V?LEAVE ,V?DISEMBARK ,V?PHONE>
<EQUAL? ,PRSA ,V?THROUGH ,V?WALK-TO ,V?WHAT>
<AND <EQUAL? ,PRSA ,V?BRING ,V?TAKE ,V?SSHOW>
<NOT <==? ,WINNER ,PLAYER>>>>
<COND (<SET OBJ <FIND-NOT-HERE .TBL .PRSO?>>
<COND (<NOT <==? .OBJ ,NOT-HERE-OBJECT>>
<RFATAL>)>)
(T
<RFALSE>)>)>)
(T
<COND (<OR <EQUAL? ,PRSA ,V?ASK-ABOUT ,V?ASK-FOR ,V?TAKE-TO>
<EQUAL? ,PRSA ,V?SEARCH-FOR ,V?TELL-ABOUT>
<AND <EQUAL? ,PRSA ,V?SBRING ,V?SHOW>
<NOT <==? ,WINNER ,PLAYER>>>>
<COND (<SET OBJ <FIND-NOT-HERE .TBL .PRSO?>>
<COND (<NOT <==? .OBJ ,NOT-HERE-OBJECT>>
<RFATAL>)>)
(T
<RFALSE>)>)>)>
;"Here is the default 'cant see any' printer"
<TELL "(You can't see any">
<NOT-HERE-PRINT>
<TELL " here!)" CR>
<RFATAL>>
<ROUTINE FIND-NOT-HERE (TBL PRSO? "AUX" M-F OBJ (PERSON? T))
;"Protocol: return T if case was handled and msg TELLed,
,NOT-HERE-OBJECT if 'can't see' msg TELLed,
<> if PRSO/PRSI ready to use"
;"Here is where special-case code goes. <MOBY-FIND .TBL> returns
number of matches. If 1, then P-MOBY-FOUND is it. One may treat
the 0 and >1 cases alike or different. It doesn't matter. Always
return RFALSE (not handled) if you have resolved the problem."
<SET M-F <MOBY-FIND .TBL>>
<COND (,DEBUG
<TELL "[Found " N .M-F " objects]" CR>)>
<COND (<==? 1 .M-F>
<COND (,DEBUG <TELL "[Namely: " D ,P-MOBY-FOUND "]" CR>)>
<COND (.PRSO? <SETG PRSO ,P-MOBY-FOUND>)
(T <SETG PRSI ,P-MOBY-FOUND>)>
;<THIS-IS-IT ,P-MOBY-FOUND>
<RFALSE>)
(<AND <L? 1 .M-F>
<SET OBJ <APPLY <GETP <SET OBJ <GET .TBL 1>> ,P?GENERIC>
.OBJ>>>
;"Protocol: returns .OBJ if that's the one to use,
,NOT-HERE-OBJECT if case was handled and msg TELLed,
<> if WHICH-PRINT should be called"
<COND (,DEBUG <TELL "[Generic: " D .OBJ "]" CR>)>
<COND (<==? .OBJ ,NOT-HERE-OBJECT> <RTRUE>)
(.PRSO? <SETG PRSO .OBJ>)
(T <SETG PRSI .OBJ>)>
;<THIS-IS-IT .OBJ>
<RFALSE>)
(<OR <AND <NOT .PRSO?>
<IN? ,PRSO ,HERE>
<VERB? ASK-ABOUT ASK-FOR TELL-ABOUT>>
<AND .PRSO?
<QCONTEXT-GOOD?>
<VERB? ASK-CONTEXT-ABOUT ASK-CONTEXT-FOR>>
<AND <NOT <==? ,WINNER ,PLAYER>>
<VERB? FIND WHAT GIVE SGIVE>>>
<COND (<VERB? ASK-ABOUT ASK-FOR>
<COND (<NOT <FSET? ,PRSO ,PERSON>>
<SET PERSON? <>>
<TELL "The ">)>
<TELL D ,PRSO>)
(<QCONTEXT-GOOD?>
<COND (<NOT <FSET? ,QCONTEXT ,PERSON>>
<SET PERSON? <>>
<TELL "The ">)>
<TELL D ,QCONTEXT>)
(<NOT <==? ,WINNER ,PLAYER>>
<TELL D ,WINNER>)
(<SET OBJ <FIND-FLAG ,HERE ,PERSON ,PLAYER>>
<TELL D .OBJ>)
(<VISIBLE? ,TIP>
<TELL "Tip">)
(T <TELL "Someone">)>
<COND (<NOT .PERSON? ;<FSET? ,PRSO ,PERSON>>
<TELL " isn't connected to any">)
(T %<XTELL
" looks confused. \"I don't know anything about any">)>
<NOT-HERE-PRINT>
<TELL "!">
<COND (.PERSON? <TELL "\"">)>
<CRLF>
<RTRUE>)
(<NOT .PRSO?>
%<XTELL "You wouldn't find any">
<NOT-HERE-PRINT>
<TELL " there." CR>
<RTRUE>)
(T ,NOT-HERE-OBJECT)>>
<ROUTINE NOT-HERE-PRINT ()
<COND (<OR ,P-OFLAG ,P-MERGED>
<COND (,P-XADJ <TELL " "> <PRINTB ,P-XADJN>)>
<COND (,P-XNAM <TELL " "> <PRINTB ,P-XNAM>)>)
(<EQUAL? ,PRSO ,NOT-HERE-OBJECT>
<BUFFER-PRINT <GET ,P-ITBL ,P-NC1> <GET ,P-ITBL ,P-NC1L> <>>)
(T
<BUFFER-PRINT <GET ,P-ITBL ,P-NC2> <GET ,P-ITBL ,P-NC2L> <>>)>>
<ROUTINE NO-TOUCH ()
%<XTELL
"Only clods fool around with these things for no good reason." CR>>
<ROUTINE THE? (NOUN)
<COND (<OR <AND <FSET? .NOUN ,PERSON>
<NOT <EQUAL? .NOUN ,PLAYER>>>
<FSET? .NOUN ,NARTICLEBIT>>
<RTRUE>)
(T <TELL " the">)>>
<OBJECT NOTEBOOK
(IN PLAYER)
(DESC "Logbook")
(ADJECTIVE LOG ;LAB ;LABORATORY)
(SYNONYM LOGBOOK BOOK)
(FLAGS TAKEBIT READBIT ;BURNBIT)
(ACTION NOTEBOOK-F)>
<ROUTINE NOTEBOOK-F ()
<COND (<VERB? OPEN READ EXAMINE ANALYZE TELL-ABOUT>
<TELL
"(You'll find the " D ,NOTEBOOK " in your " D ,GAME " package.)" CR>)>>
<OBJECT MAGAZINE
(IN TIP)
(DESC "magazine")
(ADJECTIVE ;TIP TIP\'S RANDALL MAGAZINE MAG)
(SYNONYM MAGAZINE MAG COVER NEWSPAPER)
(FLAGS READBIT TAKEBIT ;NDESCBIT CONTBIT SEARCHBIT)
(CAPACITY 1)
(ACTION MAGAZINE-F)>
<ROUTINE MAGAZINE-F ()
<COND (<REMOTE-VERB?>
<RFALSE>)
(<AND <VERB? OPEN> <NOT-HOLDING? ,MAGAZINE>>
;"<VERB? OPEN> added 4/11/84 by MARC"
<RTRUE>)
(<AND <VERB? LOOK-UP> <DOBJ? GLOBAL-THORPE>>
<PERFORM ,V?READ ,ARTICLE>
<RTRUE>)
(<VERB? READ ;"LOOK-INSIDE OPEN" EXAMINE ANALYZE>
;"COND added 4/11/84 by MARC"
<COND (<NOT-HOLDING? ,MAGAZINE> <RTRUE>)>
<TELL
"\"Science World\" is a popular " D ,MAGAZINE " about new
scientific developments.|
The cover shows " D ,GLOBAL-THORPE ", marine
biologist, surrounded by imaginative drawings of weird undersea life
forms. The cover says:|
\"HOT FLASH FROM THE MARINE BIOLOGY FRONT!|
... NEW SEA CREATURES SPAWNED BY TEST TUBE?|
(SEE ARTICLE INSIDE)\"" CR>)>>
<OBJECT ARTICLE
(IN MAGAZINE)
(DESC "article")
(ADJECTIVE COVER)
(SYNONYM ARTICLE STORY REPORT PAGE)
(FLAGS READBIT ;TAKEBIT ;NDESCBIT VOWELBIT)
(SIZE 1)
(ACTION ARTICLE-F)>
<ROUTINE ARTICLE-F ()
<COND (<DIVESTMENT? ,ARTICLE>
<PERFORM ,PRSA ,MAGAZINE ,PRSI>
<RTRUE>)
(<VERB? READ LOOK-INSIDE EXAMINE ANALYZE>
<TELL
"It says that " D ,GLOBAL-THORPE " may have created synthetic forms of
marine life by genetic engineering. You learn that Thorpe went into
hiding to duck publicity, but before that he told friends he would soon
marry " D ,SHARON ".|
The form of the creatures is unknown. They may be stimulated by
ultrasonic pulses and might be trained to respond to such pulses.|
Some scientists are skeptical, but Thorpe has claimed that one-celled
organisms had evolved in his lab from AMINO-HYDROPHASE or AH. If rumors
are true, these synthetic sea creatures should be based on the AH
molecule." CR>)>>
;<OBJECT LAMP
(IN LOCAL-GLOBALS)
(DESC "lamp")
(SYNONYM LAMP)
(FLAGS NDESCBIT FURNITURE ONBIT)>
;<OBJECT CABINET
(IN LOCAL-GLOBALS)
(DESC "cabinet")
(SYNONYM CABINET)
;(ACTION CUPBOARD-F)>
<OBJECT CATALYST-CAPSULE
(IN WORK-COUNTER)
(DESC "catalyst capsule")
(ADJECTIVE CATALYST)
(SYNONYM CAPSULE)
(ACTION CATALYST-CAPSULE-F)
(FLAGS TAKEBIT)
(TEXT "(You'll find that information in your SEASTALKER package.)")
;(TEXT "This capsule goes in the reactor in the SCIMITAR.")
(SIZE 11)
(VALUE 5)>
<ROUTINE CATALYST-CAPSULE-F ()
<COND (<AND <VERB? COMPARE>
<OR <AND <IOBJ? CATALYST-CAPSULE> <DOBJ? REACTOR>>
<AND <DOBJ? CATALYST-CAPSULE> <IOBJ? REACTOR>>>>
<TELL
"It looks as if the " D ,CATALYST-CAPSULE " fits perfectly into the "
D ,REACTOR "." CR>)
(<AND <VERB? FIND> <NOT <FSET? ,CATALYST-CAPSULE ,TOUCHBIT>>>
%<XTELL
"The capsule is usually stored on a " D ,WORK-COUNTER" on the west wall of the
tank area." CR>)
(<AND <VERB? PUT> <IOBJ? GLOBAL-SUB LOCAL-SUB>>
%<XTELL "You'll have to take it there yourself." CR>)
(<AND <VERB? TAKE> <FSET? ,CATALYST-CAPSULE ,TRYTAKEBIT>
;"<NOT ,SUB-IN-TANK> <NOT <EQUAL? ,NOW-TERRAIN ,BAY-TERRAIN>>">
%<XTELL "It's too hot to pick up." CR>)>>
<OBJECT OXYGEN-GEAR-OTHER
(IN GLOBAL-OBJECTS)
(DESC "other Gear")
(ADJECTIVE OTHER DOC\'S WALT\'S HORVAK MARV\'S SIEGEL MICK\'S ANTRIM)
(SYNONYM GEAR GEARS)
(FLAGS ;NARTICLEBIT VOWELBIT ;ON?BIT)
(TEXT "(You'll find that information in your SEASTALKER package.)")
(GENERIC GENERIC-OXYGEN-GEAR-F)
(ACTION OXYGEN-GEAR-GLOBAL-F)>
<OBJECT OXYGEN-GEAR-DIVER
(IN GLOBAL-OBJECTS)
(DESC "divers' Gear")
(ADJECTIVE DIVER DIVERS ;BILL BILL\'S GREENUP ;AMY AMY\'S LOWELL)
(SYNONYM GEAR GEARS)
(FLAGS ;NARTICLEBIT ;ON?BIT)
(TEXT "(You'll find that information in your SEASTALKER package.)")
(GENERIC GENERIC-OXYGEN-GEAR-F)
(ACTION OXYGEN-GEAR-GLOBAL-F)>
<OBJECT OXYGEN-GEAR-BLY
(IN GLOBAL-OBJECTS)
(DESC "Bly's Emergency Oxygen Gear")
(ADJECTIVE COMMANDER ;ZOE ZOE\'S BLY\'S EMERGE OXYGEN)
(SYNONYM GEAR)
(FLAGS NARTICLEBIT ;ON?BIT)
(TEXT "(You'll find that information in your SEASTALKER package.)")
(GENERIC GENERIC-OXYGEN-GEAR-F)
(ACTION OXYGEN-GEAR-GLOBAL-F)>
<ROUTINE GENERIC-OXYGEN-GEAR-F (OBJ)
<COND (<REMOTE-VERB?> ,OXYGEN-GEAR)
(<AND <VERB? TAKE> ,PRSI <FSET? ,PRSI ,PERSON>>
<COND (<IOBJ? HORVAK SIEGEL ANTRIM> ,OXYGEN-GEAR-OTHER)
(<IOBJ? GREENUP LOWELL> ,OXYGEN-GEAR-DIVER)
(<IOBJ? BLY> ,OXYGEN-GEAR-BLY)>)>>
<ROUTINE OXYGEN-GEAR-GLOBAL-F ()
<COND (<OR <NOT ,SUB-IN-DOME ;<IN-DOME? ,HERE>>
<NOT <FIND-FLAG ,HERE ,PERSON ,WINNER>>>
<NOT-HERE ,OXYGEN-GEAR-OTHER>)
(<VERB? ASK-ABOUT ASK-CONTEXT-ABOUT FIND SEARCH-FOR TELL-ABOUT EXAMINE>
<RFALSE>)
(T <YOU-CANT>)>>
<OBJECT OXYGEN-GEAR
(IN SUB)
(DESC "Emergency Oxygen Gear")
(ADJECTIVE EMERGE OXYGEN RUBBER MY)
(SYNONYM GEAR CANISTER VALVE STRAW)
(FLAGS NARTICLEBIT VOWELBIT TAKEBIT NDESCBIT ON?BIT)
(TEXT "(You'll find that information in your SEASTALKER package.)")
(ACTION OXYGEN-GEAR-F)>
<ROUTINE OXYGEN-GEAR-F ()
<COND (<REMOTE-VERB?> <RFALSE>)>
<FCLEAR ,OXYGEN-GEAR ,NDESCBIT>
<COND (<AND <VERB? TAKE> <DOBJ? OXYGEN-GEAR>>
<COND (<==? <ITAKE> T>
%<XTELL
"You're now wearing" THE-PRSO " around your neck." CR>)>
<RTRUE>)
(<VERB? LAMP-ON TURN USE OPEN>
<COND (<FSET? ,OXYGEN-GEAR ,ONBIT>
<ALREADY ,OXYGEN-GEAR "on">
<RTRUE>)
(<NOT-HOLDING? ,OXYGEN-GEAR>
<RTRUE>)
(<NOT ,DOME-AIR-BAD?>
%<XTELL "You don't need it now!" CR>
<RTRUE>)>
<FSET ,OXYGEN-GEAR ,ONBIT>
%<XTELL
"As you open the valve and suck on the rubber straw, you feel your lungs
filling with pure oxygen.">
<COND (<AND ,DOME-AIR-BAD? <CORRIDOR-LOOK ,BLY>>
%<XTELL CR
"But you notice Zoe Bly collapsing, and you realize she has
no " D ,OXYGEN-GEAR ;" around her neck" "!">)>
<CRLF>)
(<VERB? CLOSE>
<PERFORM ,V?LAMP-OFF ,OXYGEN-GEAR>
<RTRUE>)>>
<OBJECT BADGE-PLAYER
(IN PLAYER)
(DESC "your badge")
(ADJECTIVE THIS SPECIAL IDENTIFY MY ;YOUR)
(SYNONYM BADGE)
(FLAGS NDESCBIT ;VOWELBIT NARTICLEBIT)
(ACTION BADGE-PLAYER-F)>
<ROUTINE BADGE-PLAYER-F ()
;<FCLEAR ,BADGE-PLAYER ,NDESCBIT>
<COND (<DIVESTMENT? ,BADGE-PLAYER>
<TELL "That wouldn't be good for security." CR>)
(<VERB? ANALYZE EXAMINE READ>
<TELL "It's a special identification badge for">
<RESEARCH-LAB>
<TELL "." CR>)>>
<OBJECT BADGE-TIP
(IN TIP)
(DESC "Tip's badge")
(ADJECTIVE THIS SPECIAL IDENTIFY ;TIP TIP\'S RANDALL)
(SYNONYM BADGE)
(FLAGS NDESCBIT ;VOWELBIT NARTICLEBIT)
(ACTION BADGE-PLAYER-F)>
<OBJECT BADGE-SHARON
(IN SHARON)
(DESC "Sharon's badge")
(ADJECTIVE THIS SPECIAL IDENTIFY SHARON KEMP\'S)
(SYNONYM BADGE)
(FLAGS NDESCBIT ;VOWELBIT NARTICLEBIT)
(ACTION BADGE-PLAYER-F)>
<OBJECT UNIVERSAL-TOOL
(IN TIP)
(DESC "Universal Tool")
(ADJECTIVE UNIVERSAL TIP\'S RANDALL)
(SYNONYM TOOL)
(FLAGS ;NDESCBIT TAKEBIT TOOLBIT)
(GENERIC GENERIC-TOOL-F)>
<ROUTINE GENERIC-TOOL-F (OBJ)
<COND (<VERB? OPEN-WITH TAKE-WITH> ,UNIVERSAL-TOOL)>>
"<ROUTINE V-$CODE ('AUX' (I 0) CH)
<REPEAT ()
<COND (<OR <IGRTR? I 19>
<AND <G? .I 5>
<0? <GETB ,FIRST-NAME .I>>
<0? <GETB ,LAST-NAME .I>>>
<0? <GETB ,GAME-NAME .I>>>
<CRLF>
<RTRUE>)>
<SET CH <+ 1
<GETB ,FIRST-NAME .I>
<GETB ,LAST-NAME .I>
<GETB ,GAME-NAME .I>>>
<PRINTC <+ *101* <MOD .CH 26>>>>>"
<ROUTINE V-$BAY ()
<SETG HERE ,SUB>
<MOVE ,PLAYER ,SUB>
<MOVE ,TIP ,SUB>
<MOVE ,CATALYST-CAPSULE ,REACTOR>
<FCLEAR ,REACTOR ,OPENBIT>
<FSET ,REACTOR ,ONBIT>
<FSET ,ENGINE ,ONBIT>
<FCLEAR ,SUB-DOOR ,OPENBIT>
<SETG MONSTER-GONE T>
;<FCLEAR ,GLOBAL-SNARK ,INVISIBLE>
<SETG JOYSTICK-DIR ,P?EAST>
<SETG SUB-DLON 1>
<SETG SUB-DLAT 0>
<SETG NOW-TERRAIN ,BAY-TERRAIN>
<SETG SUB-IN-TANK <>>
<ENABLE <QUEUE I-UPDATE-SUB-POSITION -1>>
;<TELL
'\'What a totally awesome invention, ' FN '!\' says Tip sarcastically.' CR>>
"<ROUTINE V-$OCEAN ()
<V-$BAY>
<SETG NOW-TERRAIN <>>
<SETG SUB-IN-OPEN-SEA T>>
;<ROUTINE V-$DOME ()
<V-$OCEAN>
<FSET ,SUB-DOOR ,OPENBIT>
<FSET ,AIRLOCK-ROOF ,OPENBIT>
<MOVE ,PRIVATE-MATTER ,GLOBAL-OBJECTS>
<MOVE ,OXYGEN-GEAR ,PLAYER>
<FCLEAR ,OXYGEN-GEAR ,NDESCBIT>
<SETG SUB-IN-DOME T>
<SETG SUB-DEPTH ,AIRLOCK-DEPTH>
;<QUEUE I-UPDATE-SUB-POSITION 0>
<SETG SUB-IN-OPEN-SEA <>>
;<SETG NOW-TERRAIN ,SEA-TERRAIN>
;<SETG SUB-LON 6>
;<SETG SUB-LAT 5>
;<SETG SUB-DEPTH 28>
<SETG AIRLOCK-FULL <>>>
;<ROUTINE V-$SNARK ()
<V-$BAY>
<SETG NOW-TERRAIN ,SEA-TERRAIN>
<SETG JOYSTICK-DIR ,P?SE>
<SETG SUB-DEPTH ,AIRLOCK-DEPTH>
<SETG SUB-DLON 1>
<SETG SUB-DLAT -1>
<MOUNT-WEAPON ,BAZOOKA>
<MOUNT-WEAPON ,DART>
<SETG SUB-LON +19>
<SETG SUB-LAT -19>
<I-THORPE-APPEARS>>"