Revision 23 (Original Source)

This commit is contained in:
historicalsource 2019-04-13 20:20:29 -04:00
commit 47fbe00ae6
34 changed files with 48738 additions and 0 deletions

1
README.md Normal file
View File

@ -0,0 +1 @@
# cutthroats

916
boat.zap Normal file
View File

@ -0,0 +1,916 @@
.FUNCT FERRY-F
EQUAL? PRSA,V?CLIMB-ON,V?THROUGH,V?BOARD \?ELS5
IN? FERRY,FERRY-LANDING \?ELS10
EQUAL? HERE,FERRY-LANDING \?ELS15
CALL TELL-CANT-BOARD
RSTACK
?ELS15: CALL TELL-YOURE-NOT,STR?303
RSTACK
?ELS10: PRINTR "It's not at the landing. Be patient."
?ELS5: EQUAL? PRSA,V?WALK-TO \?ELS23
EQUAL? HERE,FERRY-LANDING /?ELS23
CALL TELL-SHD-DIR
RSTACK
?ELS23: EQUAL? PRSA,V?LISTEN \FALSE
PRINTR "You hear its engines."
.FUNCT TELL-CANT-BOARD
CALL TELL-DONT-HAVE,STR?304
RSTACK
.FUNCT GLOBAL-FERRY-F
EQUAL? PRSA,V?FIND,V?TELL,V?ASK-ABOUT /FALSE
CALL GLOBAL-NOT-HERE-PRINT,GLOBAL-FERRY
RSTACK
.FUNCT MM-FORE-DECK-F,RARG
EQUAL? RARG,M-LOOK \FALSE
CALL TELL-FORE-END,SALVAGER
RSTACK
.FUNCT TELL-FORE-END,OBJ
PRINTI "You are at the fore end of the "
CALL DPRINT,OBJ
PRINTR ". You can see the ocean over the rail that runs around the deck. A ladder leads below deck, and the wheelhouse is aft of you. A chair is bolted to the deck."
.FUNCT DECK-CHAIR-F,RARG=0
EQUAL? RARG,M-OBJDESC \?ELS5
IN? PETE,DECK-CHAIR \TRUE
CALL TELL-IN-CHAIR,PETE
RTRUE
?ELS5: ZERO? RARG \FALSE
EQUAL? PRSA,V?EXAMINE \?ELS15
PRINTI "This weatherbeaten chair is used by a lookout while standing watch. It faces forward and is bolted to the deck. "
IN? PETE,DECK-CHAIR \?CND18
CALL TELL-IN-CHAIR,PETE
?CND18: CRLF
RTRUE
?ELS15: EQUAL? PRSA,V?ASK-ABOUT \?ELS22
PRINTR """It's the lookout's chair."""
?ELS22: EQUAL? PRSA,V?PUT-ON,V?PUT \?ELS26
EQUAL? PRSI,DECK-CHAIR \?ELS26
CALL IDROP
ZERO? STACK /TRUE
IN? PLAYER,DECK-CHAIR \?CND32
LOC DECK-CHAIR
MOVE PRSO,STACK
?CND32: PRINTR "It slides off the chair and onto the deck."
?ELS26: EQUAL? PRSA,V?BOARD \FALSE
IN? PETE,DECK-CHAIR \FALSE
CALL TELL-ALREADY,STR?305
RSTACK
.FUNCT TELL-IN-CHAIR,OCC
CALL START-SENTENCE,OCC
PRINTR " is sitting in the chair."
.FUNCT MM-PORT-DECK-F,RARG,DOCK?
EQUAL? RARG,M-ENTER \?ELS5
MOVE BUNK,MM-CREW-QTRS
MOVE UNDER-BUNK,MM-CREW-QTRS
MOVE STOVE,MM-GALLEY
MOVE DECK-CHAIR,MM-FORE-DECK
MOVE REDS-BUNK,MM-CAPT-CABIN
MOVE LOUNGE-CHAIR,MM-LOUNGE
IN? PETE,MM-GALLEY \?CND6
MOVE FOOD,STOVE
FSET FOOD,NDESCBIT
?CND6: ZERO? WATER-DELIVERED /FALSE
EQUAL? SHIP-CHOSEN,SALVAGER \FALSE
MOVE DRINKING-WATER,MM-GALLEY
FSET DRINKING-WATER,NDESCBIT
RFALSE
?ELS5: EQUAL? RARG,M-LOOK \FALSE
CALL TELL-FOO-SIDE,SALVAGER,STR?184,STR?183
RTRUE
.FUNCT TELL-FOO-SIDE,OBJ,SIDE,HOUSE,DOCK?
PRINTI "You are on the "
PRINT SIDE
PRINTI " side of the "
CALL DPRINT,OBJ
PRINTI ", a sturdy vessel designed for "
EQUAL? OBJ,TRAWLER \?ELS5
PRINTI "trawling"
JUMP ?CND3
?ELS5: PRINTI "deep-sea salvaging"
?CND3: PRINTI ". To "
PRINT HOUSE
PRINTI " is a small wheelhouse, while "
EQUAL? OBJ,TRAWLER \?ELS16
SET 'DOCK?,TRAWLER-DOCKED
JUMP ?CND14
?ELS16: SET 'DOCK?,SALVAGER-DOCKED
?CND14: ZERO? DOCK? /?ELS23
PRINTI "to "
PRINT SIDE
PRINTR " is the gangway leading to the dock. The gentle rocking of the boat in port reminds you of time spent on the open sea."
?ELS23: PRINTI "the ocean, with its blue-green waves crashing, lies off the "
PRINT SIDE
PRINTR " rail."
.FUNCT TELL-AFT-DECK
PRINTI "The smell of diesel fuel is strong but reassuring here on the aft deck. A ladder leads below deck, while forward you can see the entrance to the command center of the boat, the wheelhouse."
RTRUE
.FUNCT MM-AFT-DECK-F,RARG
EQUAL? RARG,M-LOOK \?ELS5
CALL TELL-AFT-DECK
PRINTR " A huge air compressor is bolted to the deck by the aft rail."
?ELS5: EQUAL? RARG,M-BEG \?ELS9
EQUAL? PRSA,V?WALK \FALSE
IN? AIR-HOSE,DEEP-SUIT \FALSE
IN? DEEP-SUIT,PLAYER \FALSE
PRINTI "You don't want to drag the "
CALL DPRINT,AIR-HOSE
PRINTR " around the boat."
?ELS9: EQUAL? RARG,M-FLASH \FALSE
IN? WEASEL,MM-AFT-DECK \FALSE
ZERO? AT-SEA /FALSE
ZERO? WEASEL-APPREHENDED \FALSE
CALL QUEUED?,I-PENDULUM
ZERO? STACK \FALSE
CALL QUEUE,I-PENDULUM,-1
PUT STACK,0,1
CALL TELL-WEASEL-TOSSES
RSTACK
.FUNCT TELL-WEASEL-TOSSES
FCLEAR LINE-HACK,INVISIBLE
LOC WEASEL
MOVE LINE-HACK,STACK
PRINTI "The Weasel tosses a line over the side and says, "
PRINT LINE-STR
CRLF
RTRUE
.FUNCT LINE-HACK-F,HOLDER=0
LOC LINE-HACK
IN? WEASEL,STACK \?ELS3
SET 'HOLDER,WEASEL
JUMP ?CND1
?ELS3: LOC LINE-HACK
IN? JOHNNY,STACK \?CND1
SET 'HOLDER,JOHNNY
?CND1: EQUAL? PRSA,V?EXAMINE \?ELS10
ZERO? HOLDER /?ELS15
CALL START-SENTENCE,HOLDER
PRINTI " is holding one end of a weighted "
CALL DPRINT,LINE-HACK
PRINTR "."
?ELS15: PRINTI "One end of "
CALL APRINT,LINE-HACK
PRINTR " is here. Leave it alone."
?ELS10: EQUAL? PRSA,V?ASK-ABOUT,V?FIND /FALSE
ZERO? HOLDER /?ELS31
CALL START-SENTENCE,HOLDER
PRINTR " pulls it away. ""Don't mess with that!"""
?ELS31: PRINTR "Leave it alone."
.FUNCT MM-COMPRESSOR-F,TICK
EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS5
CALL TELL-NO-NO
RSTACK
?ELS5: EQUAL? PRSA,V?PUT \?ELS7
EQUAL? PRSI,MM-COMPRESSOR \?ELS7
PRINTR "There's no place to put it."
?ELS7: EQUAL? PRSA,V?EXAMINE \?ELS13
PRINTI "The large, gasoline-powered air compressor is "
FSET? MM-COMPRESSOR,ONBIT \?ELS18
PRINTI "on"
JUMP ?CND16
?ELS18: PRINTI "off"
?CND16: PRINTI ". You can quickly see it "
CALL INT,I-MM-COMPRESSOR
GET STACK,C-TICK >TICK
ZERO? TICK \?ELS29
PRINTI "is out of fuel"
JUMP ?CND27
?ELS29: EQUAL? TICK,80 \?ELS36
PRINTI "has"
JUMP ?CND34
?ELS36: PRINTI "started with"
?CND34: PRINTI " fuel for an hour and a half's operation"
?CND27: PRINTI ". A retractable "
CALL DPRINT,AIR-HOSE
PRINTR " is built in."
?ELS13: EQUAL? PRSA,V?LAMP-ON \?ELS48
FSET? MM-COMPRESSOR,ONBIT \?ELS53
CALL TELL-ALREADY,STR?56
RSTACK
?ELS53: CALL INT,I-MM-COMPRESSOR
PUT STACK,0,1
FSET MM-COMPRESSOR,ONBIT
PRINTR "Okay. The compressor is on."
?ELS48: EQUAL? PRSA,V?LAMP-OFF \?ELS59
FSET? MM-COMPRESSOR,ONBIT \?ELS64
CALL INT,I-MM-COMPRESSOR
PUT STACK,0,0
FCLEAR MM-COMPRESSOR,ONBIT
CALL TELL-NOW,MM-COMPRESSOR,STR?264
RSTACK
?ELS64: CALL TELL-ALREADY,STR?264
RSTACK
?ELS59: EQUAL? PRSA,V?LISTEN \FALSE
FSET? MM-COMPRESSOR,ONBIT \FALSE
PRINTR "The compressor is making a steady loud noise."
.FUNCT AIR-HOSE-F
EQUAL? PRSA,V?EXAMINE \?ELS5
IN? AIR-HOSE,DEEP-SUIT \?ELS10
GETP HERE,P?LINE
EQUAL? STACK,UNDERWATER-LINE-C \?ELS15
PRINTI "This "
CALL DPRINT,AIR-HOSE
PRINTI " goes from the aft deck of the "
CALL DPRINT,SALVAGER
PRINTR " and ends at your diving suit. Without it, you would find breathing impossible."
?ELS15: PRINTI "It connects the "
CALL DPRINT,DEEP-SUIT
PRINTI " and the "
CALL DPRINT,MM-COMPRESSOR
PRINTI " "
EQUAL? HERE,MM-AFT-DECK \?ELS24
PRINTI "here"
JUMP ?CND22
?ELS24: PRINTI "on the aft deck"
?CND22: PRINTR "."
?ELS10: PRINTI "It is designed to be connected to a "
CALL DPRINT,DEEP-SUIT
PRINTR " to provide air and is about 600 feet long."
?ELS5: EQUAL? PRSA,V?TIE,V?PUT \?ELS38
EQUAL? PRSI,DEEP-SUIT /?THN41
EQUAL? PRSO,DEEP-SUIT \?ELS38
?THN41: IN? AIR-HOSE,DEEP-SUIT \?ELS47
CALL TELL-ALREADY,STR?308
RSTACK
?ELS47: MOVE AIR-HOSE,DEEP-SUIT
CALL TELL-NOW,AIR-HOSE,CONNECT-STR
RSTACK
?ELS38: EQUAL? PRSA,V?TAKE \?ELS51
IN? AIR-HOSE,DEEP-SUIT \?ELS56
CALL TELL-ALREADY,CONNECT-STR
RSTACK
?ELS56: PRINTI "Why drag it around? Just connect it to the "
CALL DPRINT,DEEP-SUIT
PRINTR "."
?ELS51: EQUAL? PRSA,V?TIE \?ELS62
CALL TELL-YOU-CANT,STR?309
RSTACK
?ELS62: EQUAL? PRSA,V?UNTIE \?ELS64
GETP HERE,P?LINE
EQUAL? STACK,UNDERWATER-LINE-C \?ELS69
CALL JIGS-UP,STR?310
RSTACK
?ELS69: MOVE AIR-HOSE,MM-COMPRESSOR
PRINTR "The hose retracts back to the compressor."
?ELS64: EQUAL? PRSA,V?MOVE \?ELS75
PRINTR "That was fun."
?ELS75: EQUAL? PRSA,V?CLIMB-FOO \FALSE
CALL TELL-YOU-CANT,STR?311
RSTACK
.FUNCT TELL-WHEELHOUSE,OBJ
PRINTI " Through the glass windows you see the "
ZERO? AT-SEA /?ELS7
PRINTR "ocean churning all around you."
?ELS7: CALL DPRINT,OBJ
PRINTR " docked at the wharf, and the island stretching aft. Forward, you see the choppy waters of the bay."
.FUNCT MM-WHEELHOUSE-F,RARG
EQUAL? RARG,M-LOOK \?ELS5
PRINTI "You are in the wheelhouse with a passageway leading out onto the deck abaft. You can see the "
CALL DPRINT,MM-COMPRESSOR
PRINTI " sitting there, taking up most of the aft deck."
CALL TELL-WHEELHOUSE,TRAWLER
RTRUE
?ELS5: EQUAL? RARG,M-BEG \FALSE
EQUAL? OCEAN,PRSO,PRSI \FALSE
EQUAL? PRSA,V?EXAMINE \?ELS19
PRINTR "You see the ocean through the window."
?ELS19: EQUAL? PRSA,V?ASK-ABOUT,V?FIND /FALSE
CALL TELL-YOU-CANT,STR?313
RSTACK
.FUNCT COMPRESSOR-PSEUDO,PARG=0
EQUAL? PARG,M-NAME \?ELS5
PUTP PSEUDO-OBJECT,P?SDESC,STR?314
RTRUE
?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS7
CALL TELL-YOU-CANT,STR?315
RSTACK
?ELS7: CALL TELL-CANT-REACH,STR?316
RSTACK
.FUNCT MM-LOCKER-F,RARG
EQUAL? RARG,M-LOOK \FALSE
PRINTI "You are in a relatively empty locker."
PRINT SPARE-PARTS-STR
CRLF
RTRUE
.FUNCT METAL-DETECTOR-F,TMP
EQUAL? PRSA,V?EXAMINE \?ELS5
PRINTI "The "
CALL DPRINT,METAL-DETECTOR
PRINTI "'s label is well-worn. It has a "
CALL DPRINT,DETECTOR-SWITCH
PRINTI " which is currently "
ZERO? DETECTOR-ON /?ELS10
PRINTI "on"
JUMP ?CND8
?ELS10: PRINTI "off"
?CND8: PRINTI ", and a compartment on the side which is "
FSET? DETECTOR-COMPARTMENT,OPENBIT \?ELS22
PRINTI "open"
FIRST? DETECTOR-COMPARTMENT >TMP \?CND20
PRINTI " and contains "
CALL APRINT,TMP
JUMP ?CND20
?ELS22: PRINTI "closed"
?CND20: PRINTR "."
?ELS5: EQUAL? PRSA,V?LAMP-ON \?ELS37
SET 'DETECTOR-ON,TRUE-VALUE
CALL TELL-SWITCH,STR?56
RTRUE
?ELS37: EQUAL? PRSA,V?LAMP-OFF \?ELS39
SET 'DETECTOR-ON,FALSE-VALUE
CALL TELL-SWITCH,STR?264
RTRUE
?ELS39: EQUAL? PRSA,V?LISTEN \?ELS41
CALL DETECTOR-NOISE,TRUE-VALUE
RTRUE
?ELS41: EQUAL? PRSA,V?PUT \?ELS43
EQUAL? PRSI,METAL-DETECTOR \?ELS43
CALL PERFORM,V?PUT,PRSO,DETECTOR-COMPARTMENT
RTRUE
?ELS43: EQUAL? PRSA,V?EMPTY,V?CLOSE,V?OPEN \?ELS47
CALL PERFORM,PRSA,DETECTOR-COMPARTMENT
SET 'P-IT-OBJECT,METAL-DETECTOR
RTRUE
?ELS47: EQUAL? PRSA,V?LOOK-INSIDE \?ELS49
CALL PERFORM,V?EXAMINE,DETECTOR-COMPARTMENT
SET 'P-IT-OBJECT,METAL-DETECTOR
RTRUE
?ELS49: EQUAL? PRSA,V?SHAKE \FALSE
FSET? DETECTOR-COMPARTMENT,OPENBIT \?ELS54
FIRST? DETECTOR-COMPARTMENT \?ELS54
MOVE DRY-CELL,HERE
SET 'DETECTOR-POWERED,FALSE-VALUE
PRINTI "The "
CALL DPRINT,DRY-CELL
PRINTR " falls out of the machine."
?ELS54: PRINTR "Nothing happens."
.FUNCT DETECTOR-LABEL-F
EQUAL? PRSA,V?TAKE \FALSE
PRINTR "You tug at it, but it can't be pulled off."
.FUNCT DETECTOR-SWITCH-F
EQUAL? PRSA,V?EXAMINE \?ELS5
ZERO? DETECTOR-ON /?ELS8
CALL TELL-SWITCH,STR?56
RTRUE
?ELS8: CALL TELL-SWITCH,STR?264
RTRUE
?ELS5: EQUAL? PRSA,V?LAMP-ON \?ELS13
CALL PERFORM,V?LAMP-ON,METAL-DETECTOR
SET 'P-IT-OBJECT,DETECTOR-SWITCH
RTRUE
?ELS13: EQUAL? PRSA,V?LAMP-OFF \?ELS15
CALL PERFORM,V?LAMP-OFF,METAL-DETECTOR
SET 'P-IT-OBJECT,DETECTOR-SWITCH
RTRUE
?ELS15: EQUAL? PRSA,V?THROW,V?MOVE,V?TURN \FALSE
ZERO? DETECTOR-ON /?ELS20
CALL PERFORM,V?LAMP-OFF,METAL-DETECTOR
JUMP ?CND18
?ELS20: CALL PERFORM,V?LAMP-ON,METAL-DETECTOR
?CND18: SET 'P-IT-OBJECT,DETECTOR-SWITCH
RTRUE
.FUNCT DETECTOR-COMPARTMENT-F,RARG=0
EQUAL? RARG,M-CONT \?ELS5
EQUAL? PRSA,V?TAKE \FALSE
EQUAL? PRSO,DRY-CELL \FALSE
CALL ITAKE
ZERO? STACK /TRUE
PRINTI "Taken."
CRLF
ZERO? DETECTOR-POWERED /TRUE
SET 'DETECTOR-POWERED,FALSE-VALUE
RTRUE
?ELS5: EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE \?ELS23
FSET? DETECTOR-COMPARTMENT,OPENBIT \?ELS26
PRINTI "The compartment is on the side of the machine. Inside "
FIRST? DETECTOR-COMPARTMENT \?ELS31
PRINTI "is a connected"
JUMP ?CND29
?ELS31: PRINTI "are connections for a"
?CND29: PRINTI " nine-volt "
CALL DPRINT,DRY-CELL
PRINTR "."
?ELS26: CALL TELL-CLOSED,STR?319
RTRUE
?ELS23: EQUAL? PRSA,V?PUT \?ELS43
EQUAL? PRSO,DETECTOR-COMPARTMENT /FALSE
FSET? DETECTOR-COMPARTMENT,OPENBIT /?ELS50
CALL TELL-CLOSED,STR?320
RSTACK
?ELS50: EQUAL? PRSO,DRY-CELL \?ELS52
MOVE DRY-CELL,DETECTOR-COMPARTMENT
FSET? DRY-CELL,RMUNGBIT /?CND53
SET 'DETECTOR-POWERED,TRUE-VALUE
?CND53: PRINTI "The "
CALL DPRINT,DRY-CELL
PRINTR " fits snugly inside."
?ELS52: PRINTR "Unfortunately, it doesn't fit."
?ELS43: EQUAL? PRSA,V?OPEN \?ELS63
IN? DRY-CELL,DETECTOR-COMPARTMENT \?ELS63
GETP HERE,P?LINE
EQUAL? STACK,UNDERWATER-LINE-C \?ELS63
CALL AIRTIGHT-ROOM?
ZERO? STACK \?ELS63
FSET DRY-CELL,RMUNGBIT
SET 'DETECTOR-POWERED,FALSE-VALUE
RFALSE
?ELS63: EQUAL? PRSA,V?EMPTY \FALSE
FSET? DETECTOR-COMPARTMENT,OPENBIT \FALSE
SET 'DETECTOR-POWERED,FALSE-VALUE
RFALSE
.FUNCT DEEP-SUIT-F
EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS5
CALL TELL-NO-NO
RSTACK
?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS7
PRINTI "This "
CALL DPRINT,DEEP-SUIT
PRINTR " is bulky on land, but underwater it will protect you to 500 feet. It has a hood with ""viewport"" and a connection for a compressor hose."
?ELS7: EQUAL? PRSA,V?PUT \?ELS11
EQUAL? PRSI,DEEP-SUIT \?ELS11
EQUAL? PRSO,AIR-HOSE /?ELS11
CALL TELL-NO-NO
RSTACK
?ELS11: EQUAL? PRSA,V?WEAR \?ELS15
FSET? WET-SUIT,WORNBIT \?ELS15
CALL TELL-NO-FIT,STR?321
RSTACK
?ELS15: EQUAL? PRSA,V?DISEMBARK,V?THROW,V?DROP \FALSE
GETP HERE,P?LINE
EQUAL? STACK,UNDERWATER-LINE-C \FALSE
CALL JIGS-UP,STR?322
RSTACK
.FUNCT MM-CREW-QTRS-F,RARG,W
EQUAL? RARG,M-LOOK \?ELS5
CALL TELL-CREW-QTRS
RTRUE
?ELS5: EQUAL? RARG,M-ENTER \FALSE
CALL MOVE-SHARED-OBJECTS,MM-CREW-QTRS
RFALSE
.FUNCT BUNK-F,RARG=0,F
ZERO? RARG \FALSE
EQUAL? PRSA,V?SLEEP,V?BOARD \?ELS10
FIRST? BUNK >F \?ELS16
EQUAL? F,PLAYER \?THN13
?ELS16: CALL WEARING-SOMETHING?
ZERO? STACK /?ELS10
?THN13: CALL TELL-NOT-COMFORTABLE
RSTACK
?ELS10: EQUAL? PRSA,V?HIDE-UNDER,V?PUT-UNDER \?ELS18
EQUAL? PRSO,GLOBAL-SELF,ME \?ELS23
PRINTR "You won't fit."
?ELS23: GETP PRSO,P?SIZE
LESS? STACK,5 \?ELS27
FIRST? UNDER-BUNK \?ELS32
CALL TELL-NO-FIT
RSTACK
?ELS32: MOVE PRSO,UNDER-BUNK
FSET PRSO,NDESCBIT
CALL TELL-NOW,PRSO,STR?323
RSTACK
?ELS27: CALL TELL-NO-FIT
RSTACK
?ELS18: EQUAL? PRSA,V?LOOK-UNDER \FALSE
FIRST? UNDER-BUNK >F \?ELS43
SET 'P-IT-OBJECT,F
PRINTI "There is "
CALL APRINT,F
PRINTR " under the mattress."
?ELS43: PRINTR "Nobody's hidden his life savings there."
.FUNCT WEARING-SOMETHING?,F
FIRST? PLAYER >F /?KLU12
?KLU12:
?PRG1: ZERO? F /FALSE
FSET? F,WORNBIT \?ELS7
EQUAL? F,WATCH \TRUE
?ELS7: NEXT? F >F /?KLU13
?KLU13: JUMP ?PRG1
.FUNCT UNDER-BUNK-F,RARG=0
EQUAL? RARG,M-OBJDESC /TRUE
EQUAL? RARG,M-CONT \FALSE
EQUAL? PRSA,V?TAKE \FALSE
FCLEAR PRSO,NDESCBIT
RFALSE
.FUNCT BUNKS-PSEUDO,PARG=0
EQUAL? PARG,M-NAME \?ELS5
PUTP PSEUDO-OBJECT,P?SDESC,STR?324
RTRUE
?ELS5: PRINTR "The only bunk you should worry about is your own."
.FUNCT MM-GALLEY-F,RARG
CALL GENERIC-GALLEY-F,RARG,MM-GALLEY
RSTACK
.FUNCT GENERIC-GALLEY-F,RARG,PLACE,?TMP1
EQUAL? RARG,M-ENTER \?ELS5
PUTP GLOBAL-SURFACE,P?SDESC,STR?36
CALL MOVE-SHARED-OBJECTS,PLACE
RFALSE
?ELS5: EQUAL? RARG,M-LOOK \?ELS7
PRINTI "You are in the "
EQUAL? PLACE,MM-GALLEY \?ELS12
CALL DPRINT,SALVAGER
JUMP ?CND10
?ELS12: CALL DPRINT,TRAWLER
?CND10: PRINTI "'s galley. A stove and a small table are the fixtures here."
IN? FOOD,STOVE \?CND21
CALL TELL-STEW-ON
?CND21: ZERO? WATER-DELIVERED /?CND24
GETP SHIP-CHOSEN,P?LINE >?TMP1
GETP PLACE,P?LINE
EQUAL? ?TMP1,STACK \?CND24
PRINTI " Water is available."
?CND24: PRINTR " A ladder leads up through the deck to the wheelhouse for feeding the captain in rough weather."
?ELS7: EQUAL? RARG,M-BEG \FALSE
CALL DOUBLE-DUTY-CHECK
ZERO? STACK \TRUE
RFALSE
.FUNCT DOUBLE-DUTY-CHECK
EQUAL? PRSA,V?ASK-FOR \FALSE
EQUAL? PRSO,PETE \FALSE
EQUAL? PRSI,FOOD \?ELS12
ZERO? SOUPS-ON /?ELS17
PRINTI """Take some "
CALL DPRINT,GLOBAL-SELF
PRINTR "."""
?ELS17: PRINTR """Wait 'til it's ready."""
?ELS12: EQUAL? PRSI,DRINKING-WATER \FALSE
PRINTI """Take it "
CALL DPRINT,GLOBAL-SELF
PRINTR "."""
.FUNCT TELL-STEW-ON,LEAD?=1
ZERO? LEAD? /?CND1
PRINTI " "
?CND1: PRINTI "A pot of stew is simmering on the stove."
RTRUE
.FUNCT STOVE-F
EQUAL? PRSA,V?EXAMINE \?ELS5
PRINTI "The small stove rests on gimbals that keep it relatively level."
IN? FOOD,STOVE \?CND8
CALL TELL-STEW-ON
?CND8: CRLF
RTRUE
?ELS5: EQUAL? PRSA,V?LOOK-INSIDE \?ELS12
IN? FOOD,STOVE \?ELS12
CALL TELL-STEW-ON,FALSE-VALUE
CRLF
RTRUE
?ELS12: EQUAL? PRSA,V?LAMP-OFF,V?LAMP-ON \FALSE
PRINTR "That's Pete's job."
.FUNCT MM-LOUNGE-F,RARG
EQUAL? RARG,M-ENTER \FALSE
PUTP GLOBAL-SURFACE,P?SDESC,STR?36
CALL MOVE-SHARED-OBJECTS,MM-LOUNGE
RFALSE
.FUNCT LOUNGE-CHAIR-F,RARG=0,F
EQUAL? PRSO,CHAIR \FALSE
EQUAL? PRSA,V?BOARD \FALSE
FIRST? CHAIR >F \FALSE
CALL TELL-NOT-COMFORTABLE
RSTACK
.FUNCT REDS-BUNK-F
EQUAL? PRSA,V?SIT,V?SLEEP,V?BOARD /?THN6
EQUAL? PRSA,V?HIDE-UNDER,V?PUT-UNDER,V?SIT-ON /?THN6
EQUAL? PRSA,V?PUT \?ELS5
EQUAL? PRSI,REDS-BUNK \?ELS5
?THN6: PRINTR "You know better than to disturb the captain's bunk!"
?ELS5: EQUAL? PRSA,V?LOOK-INSIDE \FALSE
PRINTR "It's shipshape."
.FUNCT MM-ENGINE-ROOM-F,RARG
EQUAL? RARG,M-LOOK \FALSE
PRINTI "You are in a tiny cabin with barely enough room to breathe. By your feet lie the huge diesel engines of the "
CALL DPRINT,SALVAGER
PRINTR "."
.FUNCT ENGINE-PSEUDO,PARG=0
EQUAL? PARG,M-NAME \?ELS5
PUTP PSEUDO-OBJECT,P?SDESC,STR?328
RTRUE
?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS7
PRINTR "The engines are extremely complex and delicate pieces of machinery."
?ELS7: EQUAL? PRSA,V?PLUG,V?LAMP-OFF,V?LAMP-ON \?ELS11
PRINTI "Leave the engines to "
CALL DPRINT,WEASEL
PRINTR " and he'll leave the diving to you."
?ELS11: EQUAL? PRSA,V?ASK-ABOUT \?ELS15
EQUAL? PRSO,WEASEL \?ELS15
PRINTR """These are in pretty good shape."""
?ELS15: EQUAL? PRSA,V?LISTEN \FALSE
ZERO? AT-SEA /FALSE
CALL TELL-YOU-CANT,STR?329
RSTACK
.FUNCT NW-FORE-DECK-F,RARG
EQUAL? RARG,M-LOOK \FALSE
CALL TELL-FORE-END,TRAWLER
RSTACK
.FUNCT NW-STARBOARD-DECK-F,RARG
EQUAL? RARG,M-ENTER \?ELS5
MOVE BUNK,NW-CREW-QTRS
MOVE UNDER-BUNK,NW-CREW-QTRS
MOVE STOVE,NW-GALLEY
MOVE DECK-CHAIR,NW-FORE-DECK
MOVE REDS-BUNK,NW-CAPT-CABIN
MOVE LOUNGE-CHAIR,NW-LOUNGE
IN? PETE,NW-GALLEY \?CND6
MOVE FOOD,STOVE
FSET FOOD,NDESCBIT
?CND6: ZERO? WATER-DELIVERED /FALSE
EQUAL? TRAWLER,SHIP-CHOSEN \FALSE
MOVE DRINKING-WATER,NW-GALLEY
FSET DRINKING-WATER,NDESCBIT
RFALSE
?ELS5: EQUAL? RARG,M-LOOK \FALSE
CALL TELL-FOO-SIDE,TRAWLER,STR?183,STR?184
RTRUE
.FUNCT NW-AFT-DECK-F,RARG
EQUAL? RARG,M-LOOK \?ELS5
CALL TELL-AFT-DECK
CRLF
RTRUE
?ELS5: EQUAL? RARG,M-FLASH \FALSE
IN? WEASEL,NW-AFT-DECK \FALSE
ZERO? AT-SEA /FALSE
ZERO? WEASEL-APPREHENDED \FALSE
CALL QUEUED?,I-PENDULUM
ZERO? STACK \FALSE
CALL QUEUE,I-PENDULUM,-1
PUT STACK,0,1
CALL TELL-WEASEL-TOSSES
RSTACK
.FUNCT NW-WHEELHOUSE-F,RARG
EQUAL? RARG,M-LOOK \?ELS5
PRINTI "You are in the wheelhouse of the "
CALL DPRINT,TRAWLER
PRINTI ". The passageway leading out onto the deck lies abaft."
CALL TELL-WHEELHOUSE,SALVAGER
RTRUE
?ELS5: EQUAL? RARG,M-BEG \FALSE
EQUAL? OCEAN,PRSO,PRSI \FALSE
EQUAL? PRSA,V?EXAMINE \?ELS19
PRINTR "You see the ocean through the window."
?ELS19: CALL TELL-YOU-CANT,STR?313
RSTACK
.FUNCT NW-LOCKER-F,RARG
EQUAL? RARG,M-LOOK \FALSE
PRINTI "You are in a fairly empty storage locker. It must have been cleaned out after its last trawling expedition."
PRINT SPARE-PARTS-STR
CRLF
RTRUE
.FUNCT TELL-SWITCH,STR
PRINTI "The switch is now in the """
PRINT STR
PRINTR """ position."
.FUNCT DRILL-F,RARG=0
EQUAL? RARG,M-CONT \?ELS5
EQUAL? PRSA,V?TAKE \FALSE
EQUAL? PRSO,BATTERY \FALSE
CALL ITAKE
ZERO? STACK /TRUE
PRINTI "Taken."
ZERO? DRILL-POWERED /?CND18
SET 'DRILL-POWERED,FALSE-VALUE
ZERO? DRILL-ON /?CND18
CALL INT,I-DRILL
PUT STACK,0,0
PRINTI " The drill bit winds to a halt."
?CND18: CRLF
RTRUE
?ELS5: EQUAL? PRSA,V?LAMP-ON \?ELS29
EQUAL? PRSO,DRILL \?ELS29
ZERO? DRILL-ON /?ELS36
CALL TELL-ALREADY,STR?56
RSTACK
?ELS36: ZERO? DRILL-POWERED /?ELS39
SET 'DRILL-ON,TRUE-VALUE
CALL INT,I-DRILL
PUT STACK,0,1
PRINTR "The drill bit begins to spin."
?ELS39: SET 'DRILL-ON,TRUE-VALUE
CALL TELL-SWITCH,STR?56
RSTACK
?ELS29: EQUAL? PRSA,V?LAMP-OFF \?ELS46
EQUAL? PRSO,DRILL \?ELS46
ZERO? DRILL-ON \?ELS53
CALL TELL-ALREADY,STR?264
RSTACK
?ELS53: ZERO? DRILL-POWERED /?ELS55
SET 'DRILL-ON,FALSE-VALUE
CALL INT,I-DRILL
PUT STACK,0,0
PRINTR "The drill bit stops spinning."
?ELS55: SET 'DRILL-ON,FALSE-VALUE
CALL TELL-SWITCH,STR?264
RSTACK
?ELS46: EQUAL? PRSA,V?EXAMINE \?ELS62
PRINTI "This waterproof wonder features a permanent bit"
CALL QUEUED?,I-DRILL
ZERO? STACK /?CND65
PRINTI " which is turning"
?CND65: PRINTI ", a panel which is "
FSET? DRILL,OPENBIT \?ELS74
PRINTI "open"
ZERO? DRILL-POWERED /?ELS79
PRINTI " with a C battery inside"
JUMP ?CND72
?ELS79: PRINTI ", revealing space for a C battery"
JUMP ?CND72
?ELS74: PRINTI "closed"
?CND72: PRINTI ", and a switch which is in the """
ZERO? DRILL-ON /?ELS95
PRINTI "on"
JUMP ?CND93
?ELS95: PRINTI "off"
?CND93: PRINTR """ position."
?ELS62: EQUAL? PRSA,V?LOOK-INSIDE \?ELS106
CALL PERFORM,V?EXAMINE,DRILL
RTRUE
?ELS106: EQUAL? PRSA,V?OPEN \?ELS108
IN? BATTERY,DRILL \?ELS108
GETP HERE,P?LINE
EQUAL? STACK,UNDERWATER-LINE-C \?ELS108
CALL AIRTIGHT-ROOM?
ZERO? STACK \?ELS108
FSET BATTERY,RMUNGBIT
SET 'DRILL-POWERED,FALSE-VALUE
RFALSE
?ELS108: EQUAL? PRSI,DRILL \FALSE
EQUAL? PRSA,V?PUT \?ELS117
FSET? DRILL,OPENBIT /?ELS122
SET 'P-IT-OBJECT,DRILL
CALL TELL-CLOSED,STR?320
RSTACK
?ELS122: EQUAL? PRSO,BATTERY \?ELS124
MOVE BATTERY,DRILL
FSET? BATTERY,RMUNGBIT \?CND125
CALL TELL-NOW,BATTERY,STR?332
RTRUE
?CND125: SET 'DRILL-POWERED,TRUE-VALUE
ZERO? DRILL-ON /?ELS132
CALL INT,I-DRILL
PUT STACK,0,1
PRINTR "The drill bit starts spinning."
?ELS132: CALL TELL-NOW,BATTERY,STR?332
RSTACK
?ELS124: CALL TELL-NO-FIT
RSTACK
?ELS117: EQUAL? PRSA,V?TELL,V?ASK-ABOUT,V?TAKE /FALSE
EQUAL? PRSA,V?PUT-ON,V?PUT-AGAINST /FALSE
ZERO? DRILL-ON /?THN148
ZERO? DRILL-POWERED \FALSE
?THN148: EQUAL? PRSO,GLOBAL-TIME /FALSE
SET 'P-IT-OBJECT,DRILL
PRINTI "The "
CALL DPRINT,DRILL
PRINTR " isn't running!"
.FUNCT GENERIC-HOLE-F
EQUAL? PRSA,V?EXAMINE \?ELS5
PRINTR "As holes go, it's very nice."
?ELS5: EQUAL? PRSA,V?LOOK-INSIDE \?ELS9
PRINTR "You see nothing new."
?ELS9: EQUAL? PRSA,V?REACH-IN \FALSE
PRINTR "It's not that big."
.FUNCT ADD-HOLE,OBJ,I
FSET? HOLE-1,INVISIBLE \?ELS3
FCLEAR HOLE-1,INVISIBLE
MOVE HOLE-1,OBJ
JUMP ?CND1
?ELS3: FSET? HOLE-2,INVISIBLE \?ELS5
FCLEAR HOLE-2,INVISIBLE
PUTP HOLE-1,P?SDESC,STR?335
MOVE HOLE-2,OBJ
JUMP ?CND1
?ELS5: PRINTI "The drill should be dead now."
CRLF
?CND1: CALL INT,I-DRILL >I
GET I,C-TICK
SUB STACK,1
PUT I,C-TICK,STACK
GET I,C-TICK
ZERO? STACK \TRUE
CALL I-DRILL
RTRUE
.FUNCT TELL-CREW-QTRS
PRINTR "You are below deck in the crew's quarters. Narrow, uncomfortable bunks line the bulkheads, and you note the similarity between this area and a sardine can. Sleeping here is necessary but uninviting. A ladder leads up and out to the fore deck."
.FUNCT NW-CREW-QTRS-F,RARG,W
EQUAL? RARG,M-LOOK \?ELS5
CALL TELL-CREW-QTRS
RSTACK
?ELS5: EQUAL? RARG,M-ENTER \FALSE
CALL MOVE-SHARED-OBJECTS,NW-CREW-QTRS
RFALSE
.FUNCT NW-GALLEY-F,RARG
CALL GENERIC-GALLEY-F,RARG,NW-GALLEY
RSTACK
.FUNCT NW-LOUNGE-F,RARG
EQUAL? RARG,M-ENTER \FALSE
PUTP GLOBAL-SURFACE,P?SDESC,STR?36
CALL MOVE-SHARED-OBJECTS,NW-LOUNGE
RFALSE
.FUNCT NW-ENGINE-ROOM-F,RARG
EQUAL? RARG,M-LOOK \FALSE
PRINTI "You are in a tiny, smelly space where it is difficult to breathe. By your feet lie the diesel engines of the "
CALL DPRINT,TRAWLER
PRINTR "."
.ENDI

1422
boat.zil Normal file

File diff suppressed because it is too large Load Diff

98
clock.zap Normal file
View File

@ -0,0 +1,98 @@
.FUNCT QUEUE,RTN,TICK,CINT
CALL INT,RTN >CINT
PUT CINT,C-TICK,TICK
RETURN CINT
.FUNCT INT,RTN,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
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 ENABLED?,RTN,C,E
ADD C-TABLE,C-TABLELEN >E
ADD C-TABLE,C-INTS >C
?PRG1: EQUAL? C,E /FALSE
GET C,C-RTN
EQUAL? STACK,RTN \?CND3
GET C,C-ENABLED?
ZERO? STACK \TRUE
RFALSE
?CND3: ADD C,C-INTLEN >C
JUMP ?PRG1
.FUNCT QUEUED?,RTN,C,E
ADD C-TABLE,C-TABLELEN >E
ADD C-TABLE,C-INTS >C
?PRG1: EQUAL? C,E /FALSE
GET C,C-RTN
EQUAL? STACK,RTN \?CND3
GET C,C-ENABLED?
ZERO? STACK /FALSE
GET C,C-TICK
ZERO? STACK \TRUE
RFALSE
?CND3: ADD C,C-INTLEN >C
JUMP ?PRG1
.FUNCT CLOCKER,C,E,TICK,FLG=0,VAL
ZERO? CLOCK-WAIT /?CND1
SET 'CLOCK-WAIT,FALSE-VALUE
RFALSE
?CND1: INC 'PRESENT-TIME
GRTR? PRESENT-TIME,1439 \?CND5
SUB PRESENT-TIME,1440 >PRESENT-TIME
?CND5: ZERO? WATCH-WOUND /?CND8
IGRTR? 'WATCH-MOVES,59 \?CND8
SUB WATCH-MOVES,60 >WATCH-MOVES
IGRTR? 'WATCH-SCORE,11 \?CND12
SET 'WATCH-SCORE,0
?CND12:
?CND8: CALL WATCH-UPDATE
ADD C-TABLE,C-INTS >C
ADD C-TABLE,C-TABLELEN >E
?PRG18: EQUAL? C,E \?ELS22
RETURN FLG
?ELS22: GET C,C-ENABLED?
ZERO? STACK /?CND20
GET C,C-TICK >TICK
ZERO? TICK \?ELS27
JUMP ?CND20
?ELS27: SUB TICK,1
PUT C,C-TICK,STACK
GRTR? TICK,1 /?CND25
GET C,C-RTN
CALL STACK >VAL
ZERO? VAL /?CND25
ZERO? FLG /?THN38
EQUAL? VAL,M-FATAL \?CND20
?THN38: SET 'FLG,VAL
?CND25:
?CND20: ADD C,C-INTLEN >C
JUMP ?PRG18
.FUNCT WATCH-UPDATE
IN? WATCH,PLAYER \?ELS5
SET 'MOVES,WATCH-MOVES
SET 'SCORE,WATCH-SCORE
RETURN SCORE
?ELS5: SET 'MOVES,99
SET 'SCORE,111
RETURN SCORE
.ENDI

108
clock.zil Normal file
View File

@ -0,0 +1,108 @@
"CLOCK for TOA #2
Copyright (C) 1984 Infocom, Inc. All rights reserved."
<CONSTANT C-TABLELEN 246>
<GLOBAL C-TABLE <ITABLE NONE %<COND (<GASSIGNED? PREDGEN> 123) (T 246)>>>
;<GLOBAL C-DEMONS 300>
<GLOBAL C-INTS 246>
<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 "AUX" E C INT)
#DECL ((RTN) ATOM (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>>>>
<ROUTINE ENABLED? (RTN "AUX" C E)
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<SET C <REST ,C-TABLE ,C-INTS>>
<REPEAT ()
<COND (<==? .C .E> <RFALSE>)
(<EQUAL? <GET .C ,C-RTN> .RTN>
<COND (<0? <GET .C ,C-ENABLED?>> <RFALSE>)
(T <RTRUE>)>)>
<SET C <REST .C ,C-INTLEN>>>>
<ROUTINE QUEUED? (RTN "AUX" C E)
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<SET C <REST ,C-TABLE ,C-INTS>>
<REPEAT ()
<COND (<==? .C .E> <RFALSE>)
(<EQUAL? <GET .C ,C-RTN> .RTN>
<COND (<OR <0? <GET .C ,C-ENABLED?>>
<0? <GET .C ,C-TICK>>>
<RFALSE>)
(T <RTRUE>)>)>
<SET C <REST .C ,C-INTLEN>>>>
<GLOBAL CLOCK-WAIT <>>
<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>)>
<SETG PRESENT-TIME <+ ,PRESENT-TIME 1>>
<COND (<G? ,PRESENT-TIME 1439>
<SETG PRESENT-TIME <- ,PRESENT-TIME 1440>>)>
;<COND (<G? ,PRESENT-TIME 1019>
<SETG BUSINESS-HOURS? <>>)
(<G? ,PRESENT-TIME 539>
<SETG BUSINESS-HOURS? T>)>
<COND (,WATCH-WOUND
<COND (<G? <SETG WATCH-MOVES <+ ,WATCH-MOVES 1>> 59>
<SETG WATCH-MOVES <- ,WATCH-MOVES 60>>
<COND (<G? <SETG WATCH-SCORE <+ ,WATCH-SCORE 1>> 11>
<SETG WATCH-SCORE 0>)>)>)>
<WATCH-UPDATE>
<SET C <REST ,C-TABLE ,C-INTS ;<COND (,P-WON ,C-INTS) (T ,C-DEMONS)>>>
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<REPEAT ()
<COND (<==? .C .E> <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 (,DEBUG
<TELL "[Interrupt returning T.]" CR>)>
<COND (<OR <NOT .FLG>
<==? .VAL ,M-FATAL>>
<SET FLG .VAL>)>)>)>)>
<SET C <REST .C ,C-INTLEN>>>>
<ROUTINE WATCH-UPDATE ()
<COND (<IN? ,WATCH ,PLAYER>
<SETG MOVES ,WATCH-MOVES>
<SETG SCORE ,WATCH-SCORE>)
(T
<SETG MOVES 99>
<SETG SCORE 111>)>>

1392
events.zap Normal file

File diff suppressed because it is too large Load Diff

1629
events.zil Normal file

File diff suppressed because it is too large Load Diff

1313
globals.zap Normal file

File diff suppressed because it is too large Load Diff

1651
globals.zil Normal file

File diff suppressed because it is too large Load Diff

528
goal.zap Normal file
View File

@ -0,0 +1,528 @@
.FUNCT DIR-PRINT,DIR,CNT=0,TBL,DRY=0
ZERO? DIR \?ELS3
PRINTI "out of view"
RTRUE
?ELS3: GETP HERE,P?LINE
GRTR? STACK,BACK-ALLEY-LINE-C \?ELS7
SET 'TBL,NAUTICAL-DIR-STRINGS
JUMP ?CND1
?ELS7: SET 'TBL,DIR-STRINGS
SET 'DRY,TRUE-VALUE
?CND1:
?PRG10: GET TBL,CNT
EQUAL? STACK,DIR \?CND12
ZERO? DRY /?CND15
EQUAL? DIR,P?UP,P?DOWN /?CND15
PRINTI "the "
?CND15: ADD CNT,1
GET TBL,STACK
PRINT STACK
RTRUE
?CND12: INC 'CNT
JUMP ?PRG10
.FUNCT FOLLOW-GOAL,PERSON,HERE,LINE,LN,RM,GT,GOAL,FLG,GOAL-FLAG=0,IGOAL=0,LOC,CNT=1,DIR
LOC PERSON >HERE
GETP PERSON,P?CHARACTER
GET GOAL-TABLES,STACK >GT
GET GT,GOAL-F
EQUAL? HERE,STACK \?ELS3
PUT GT,GOAL-S,FALSE-VALUE
RETURN FALSE-VALUE
?ELS3: GET GT,GOAL-ENABLE
ZERO? STACK /FALSE
?CND1: GETP HERE,P?STATION >LOC
EQUAL? LOC,HERE /?CND6
CALL MOVE-PERSON,PERSON,LOC
RSTACK
?CND6: GET GT,GOAL-I >IGOAL
GET TRANSFER-TABLE,IGOAL >GOAL
ZERO? GOAL \?CND9
SET 'IGOAL,FALSE-VALUE
GET GT,GOAL-S >GOAL
?CND9: ZERO? GOAL /FALSE
EQUAL? HERE,GOAL \?CND12
ZERO? IGOAL /?ELS19
ADD IGOAL,1
GET TRANSFER-TABLE,STACK
CALL MOVE-PERSON,PERSON,STACK >FLG
GET GT,GOAL-F
CALL ESTABLISH-GOAL,PERSON,STACK
RETURN FLG
?ELS19: GET GT,GOAL-F
EQUAL? HERE,STACK /?ELS22
PUT GT,GOAL-S,FALSE-VALUE
GET GT,GOAL-F
CALL MOVE-PERSON,PERSON,STACK >FLG
RETURN FLG
?ELS22: PUT GT,GOAL-S,FALSE-VALUE
RETURN FALSE-VALUE
?CND12: GETP GOAL,P?LINE
CALL GET-LINE,STACK >LINE
?PRG25: GET LINE,CNT >RM
EQUAL? RM,HERE \?ELS29
ZERO? GOAL-FLAG /?ELS32
SUB CNT,3
GET LINE,STACK >LOC
JUMP ?CND30
?ELS32: ADD CNT,3
GET LINE,STACK >LOC
?CND30: CALL MOVE-PERSON,PERSON,LOC
RETURN STACK
?ELS29: EQUAL? RM,GOAL \?CND27
SET 'GOAL-FLAG,TRUE-VALUE
?CND27: ADD CNT,3 >CNT
JUMP ?PRG25
.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-LINE,LN
ZERO? LN \?ELS5
RETURN ROAD-WHARF-LINE
?ELS5: EQUAL? LN,1 \?ELS7
RETURN EAST-ROAD-LINE
?ELS7: EQUAL? LN,2 \?ELS9
RETURN BEDROOM-LINE
?ELS9: EQUAL? LN,3 \?ELS11
RETURN BACK-ALLEY-LINE
?ELS11: EQUAL? LN,4 \?ELS13
RETURN TRAWLER-LINE
?ELS13: EQUAL? LN,5 \FALSE
RETURN SALVAGER-LINE
.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-128
?ELS19: EQUAL? NUM,256 \?ELS21
RETURN COR-256
?ELS21: RETURN COR-512
.FUNCT CORRIDOR-LOOK,ITM=0,C,Z,COR,VAL,FOUND=0
GETP HERE,P?CORRIDOR >C
ZERO? C /FALSE
?PRG6: SUB C,512 >Z
LESS? Z,0 /?ELS10
SET 'COR,COR-512
JUMP ?CND8
?ELS10: SUB C,256 >Z
LESS? Z,0 /?ELS12
SET 'COR,COR-256
JUMP ?CND8
?ELS12: SUB C,128 >Z
LESS? Z,0 /?ELS14
SET 'COR,COR-128
JUMP ?CND8
?ELS14: SUB C,64 >Z
LESS? Z,0 /?ELS16
SET 'COR,COR-64
JUMP ?CND8
?ELS16: SUB C,32 >Z
LESS? Z,0 /?ELS18
SET 'COR,COR-32
JUMP ?CND8
?ELS18: SUB C,16 >Z
LESS? Z,0 /?ELS20
SET 'COR,COR-16
JUMP ?CND8
?ELS20: SUB C,8 >Z
LESS? Z,0 /?ELS22
SET 'COR,COR-8
JUMP ?CND8
?ELS22: SUB C,4 >Z
LESS? Z,0 /?ELS24
SET 'COR,COR-4
JUMP ?CND8
?ELS24: SUB C,2 >Z
LESS? Z,0 /?ELS26
SET 'COR,COR-2
JUMP ?CND8
?ELS26: SUB C,1 >Z
LESS? Z,0 /?REP7
SET 'COR,COR-1
?CND8: CALL CORRIDOR-CHECK,COR,ITM >VAL
ZERO? FOUND \?CND31
SET 'FOUND,VAL
?CND31: 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: GETP OBJ,P?CHARACTER
ZERO? STACK /?CND12
CALL IN-MOTION?,OBJ
ZERO? STACK \?CND12
EQUAL? OBJ,MCGINTY \?THN23
CALL QUEUED?,I-MCGINTY-FOLLOWS
ZERO? STACK /?THN23
EQUAL? PRSA,V?FOLLOW,V?WALK /?CND12
?THN23: CALL START-SENTENCE,OBJ
PRINTI " is "
PRINTI "off to "
GET COR,PAST
CALL DIR-PRINT,STACK
PRINTI "."
CRLF
?CND12: NEXT? OBJ >OBJ /?KLU38
?KLU38: ZERO? OBJ \?PRG10
?REP11: ZERO? FOUND /?CND3
RETURN FOUND
?CND3: INC 'CNT
JUMP ?PRG1
.FUNCT IN-MOTION?,PERSON,GT,?TMP1
GETP PERSON,P?CHARACTER
GET GOAL-TABLES,STACK >GT
GET GT,GOAL-ENABLE
ZERO? STACK \?THN8
GET GT,ATTENTION
EQUAL? STACK,1 \FALSE
?THN8: GET GT,GOAL-S
ZERO? STACK /FALSE
LOC PERSON >?TMP1
GET GT,GOAL-F
EQUAL? ?TMP1,STACK /FALSE
RTRUE
.FUNCT START-MOVEMENT
CALL QUEUE,I-MCGINTY,1
PUT STACK,0,1
CALL QUEUE,I-JOHNNY,1
PUT STACK,0,1
CALL QUEUE,I-PETE,1
PUT STACK,0,1
CALL QUEUE,I-WEASEL,1
PUT STACK,0,1
CALL QUEUE,I-DELIVERY-BOY,1
PUT STACK,0,1
CALL QUEUE,I-FOLLOW,-1
PUT STACK,0,1
CALL QUEUE,I-ATTENTION,-1
PUT STACK,0,1
CALL QUEUE,I-DISGUSTING-WEASEL-KLUDGE,35
PUT STACK,0,1
RTRUE
.FUNCT IMOVEMENT,PERSON,INT,TB,VAR,DIS,TIM,ID,RM,GT,?TMP1
GETP PERSON,P?CHARACTER >ID
GET MOVEMENT-GOALS,ID >TB
GET GOAL-TABLES,ID >GT
GET TB,MG-ROOM >RM
EQUAL? 0,RM /?CND1
GET GT,GOAL-QUEUED
ZERO? STACK /?ELS6
PUT GT,GOAL-QUEUED,RM
JUMP ?CND1
?ELS6: CALL ESTABLISH-GOAL,PERSON,RM
?CND1: GET TB,MG-TIME >TIM
EQUAL? 0,TIM /FALSE
GET TB,MG-VARIATION >VAR
MUL VAR,2
RANDOM STACK >DIS
SUB DIS,VAR
ADD TIM,STACK
CALL QUEUE,INT,STACK
ADD TB,MG-LENGTH
PUT MOVEMENT-GOALS,ID,STACK
GET TB,MG-NEXT
EQUAL? 0,STACK /FALSE
GET TB,MG-NEXT >?TMP1
SUB VAR,DIS
ADD ?TMP1,STACK
PUT TB,MG-NEXT,STACK
RFALSE
.FUNCT I-FOLLOW,FLG=0,CNT=0,GT,VAL
?PRG1: IGRTR? 'CNT,CHARACTER-MAX \?ELS5
RETURN FLG
?ELS5: GET GOAL-TABLES,CNT >GT
GET GT,GOAL-S
ZERO? STACK /?PRG1
GET GT,GOAL-ENABLE
ZERO? STACK \?THN10
GET GT,ATTENTION
ZERO? STACK \?PRG1
?THN10: PUT GT,GOAL-ENABLE,TRUE-VALUE
GET CHARACTER-TABLE,CNT
CALL FOLLOW-GOAL,STACK >VAL
ZERO? VAL /?PRG1
EQUAL? FLG,M-FATAL /?PRG1
SET 'FLG,VAL
JUMP ?PRG1
.FUNCT I-ATTENTION,FLG=0,CNT=0,ATT,GT
?PRG1: IGRTR? 'CNT,CHARACTER-MAX \?ELS5
RETURN FLG
?ELS5: GET GOAL-TABLES,CNT >GT
GET GT,ATTENTION
SUB STACK,1 >ATT
ZERO? ATT \?CND3
PUT GT,GOAL-ENABLE,TRUE-VALUE
?CND3: PUT GT,ATTENTION,ATT
JUMP ?PRG1
.FUNCT GRAB-ATTENTION,PERSON,CHR,GT,ATT
GETP PERSON,P?CHARACTER >CHR
GET GOAL-TABLES,CHR >GT
GET GT,GOAL-S
ZERO? STACK /?CND1
GET GT,ATTENTION-SPAN >ATT
PUT GT,ATTENTION,ATT
ZERO? ATT \?ELS6
PUT GT,GOAL-ENABLE,TRUE-VALUE
RFALSE
?ELS6: GET GT,GOAL-ENABLE
ZERO? STACK /?CND1
PUT GT,GOAL-ENABLE,FALSE-VALUE
?CND1: SET 'QCONTEXT,PERSON
SET 'QCONTEXT-ROOM,HERE
RTRUE
.FUNCT ESTABLISH-GOAL,PERSON,GOAL,PRIORITY=0,HERE,HL,GL,GT,?TMP1
LOC PERSON >HERE
GETP PERSON,P?CHARACTER
GET GOAL-TABLES,STACK >GT
ZERO? PRIORITY /?CND1
PUT GT,GOAL-ENABLE,TRUE-VALUE
PUT GT,GOAL-QUEUED,HERE
?CND1: GETP HERE,P?LINE
MUL STACK,12 >?TMP1
GETP GOAL,P?LINE
MUL STACK,2
ADD ?TMP1,STACK
PUT GT,GOAL-I,STACK
GETP GOAL,P?STATION
PUT GT,GOAL-S,STACK
PUT GT,GOAL-F,GOAL
LOC PERSON
RSTACK
.FUNCT GOAL-REACHED,PERSON,GT
GETP PERSON,P?CHARACTER
GET GOAL-TABLES,STACK >GT
PUT GT,GOAL-S,FALSE-VALUE
GET GT,GOAL-FUNCTION
CALL STACK,G-REACHED
RSTACK
.FUNCT MOVE-PERSON,PERSON,WHERE,DIR,GT,OL,COR,PCOR,CHR,PUSHCART,FLG=0,VAL=0,DF,CD
GETP PERSON,P?CHARACTER >CHR
GET GOAL-TABLES,CHR >GT
LOC PERSON >OL
CALL DIR-FROM,OL,WHERE >DIR
SET 'PUSHCART,STR?187
EQUAL? OL,HERE \?ELS3
FSET? PERSON,INVISIBLE /?ELS3
SET 'FLG,TRUE-VALUE
CALL START-SENTENCE,PERSON
EQUAL? DIR,P?OUT \?ELS8
PRINTI " leaves the room"
EQUAL? PERSON,DELIVERY-BOY \?CND11
PRINT PUSHCART
?CND11: PRINTI "."
CRLF
JUMP ?CND1
?ELS8: EQUAL? DIR,P?IN \?ELS19
PRINTI " goes into another room"
PRINTI "."
CRLF
JUMP ?CND1
?ELS19: PRINTI " heads "
GETP HERE,P?LINE
LESS? STACK,TRAWLER-LINE-C \?CND28
EQUAL? DIR,P?UP,P?DOWN /?CND28
PRINTI "off to "
?CND28: CALL DIR-PRINT,DIR
EQUAL? PERSON,DELIVERY-BOY \?CND35
PRINT PUSHCART
?CND35: PRINTI "."
CRLF
JUMP ?CND1
?ELS3: EQUAL? WHERE,HERE \?ELS43
FSET? PERSON,INVISIBLE /?ELS43
SET 'FLG,M-FATAL
GET GT,GOAL-F
EQUAL? HERE,STACK /?CND1
CALL START-SENTENCE,PERSON
PRINTI " walks "
EQUAL? PRSA,V?WALK \?ELS53
EQUAL? WHERE,HERE \?ELS53
EQUAL? OL,LAST-PLAYER-LOC \?ELS53
PRINTI "along with"
JUMP ?CND51
?ELS53: PRINTI "past"
?CND51: PRINTI " you"
EQUAL? PERSON,DELIVERY-BOY \?CND64
PRINT PUSHCART
?CND64: PRINTI "."
CRLF
JUMP ?CND1
?ELS43: GETP HERE,P?CORRIDOR >COR
ZERO? COR /?CND1
FSET? PERSON,INVISIBLE /?CND1
GETP OL,P?CORRIDOR >PCOR
ZERO? PCOR /?ELS77
BAND COR,PCOR
ZERO? STACK /?ELS77
SET 'FLG,TRUE-VALUE
GETP WHERE,P?CORRIDOR
ZERO? STACK \?ELS82
CALL START-SENTENCE,PERSON
PRINTI ", off to "
CALL COR-DIR,HERE,OL
CALL DIR-PRINT,STACK
PRINTI ","
PRINTI " leaves your view"
PRINTI " to "
CALL DIR-FROM,OL,WHERE
CALL DIR-PRINT,STACK
EQUAL? PERSON,DELIVERY-BOY \?CND91
PRINT PUSHCART
?CND91: PRINTI "."
CRLF
JUMP ?CND75
?ELS82: GETP WHERE,P?CORRIDOR
BAND COR,STACK
ZERO? STACK \?ELS99
CALL START-SENTENCE,PERSON
PRINTI ", off to "
CALL COR-DIR,HERE,OL
CALL DIR-PRINT,STACK
PRINTI ", disappears from sight to "
CALL DIR-FROM,OL,WHERE >PCOR
CALL DIR-PRINT,PCOR
EQUAL? PERSON,DELIVERY-BOY \?CND104
PRINT PUSHCART
?CND104: PRINTI "."
CRLF
JUMP ?CND75
?ELS99: CALL START-SENTENCE,PERSON
PRINTI " is to "
CALL COR-DIR,HERE,WHERE >CD
CALL DIR-PRINT,CD
PRINTI ", heading "
CALL DIR-FROM,OL,WHERE >DF
EQUAL? CD,DF \?ELS119
PRINTI "away from you"
JUMP ?CND117
?ELS119: PRINTI "toward "
CALL DIR-PRINT,DF
?CND117: EQUAL? PERSON,DELIVERY-BOY \?CND126
PRINT PUSHCART
?CND126: PRINTI "."
CRLF
JUMP ?CND75
?ELS77: GETP WHERE,P?CORRIDOR >PCOR
ZERO? PCOR /?CND1
BAND COR,PCOR
ZERO? STACK /?CND1
SET 'FLG,TRUE-VALUE
PRINTI "To "
CALL COR-DIR,HERE,WHERE
CALL DIR-PRINT,STACK
PRINTI " "
CALL THE?,PERSON
CALL DPRINT,PERSON
PRINTI " comes into view from "
CALL DIR-FROM,WHERE,OL
CALL DIR-PRINT,STACK
EQUAL? PERSON,DELIVERY-BOY \?CND143
PRINT PUSHCART
?CND143: PRINTI "."
CRLF
?CND75:
?CND1: MOVE PERSON,WHERE
GET GT,GOAL-F
EQUAL? STACK,WHERE \?ELS152
CALL GOAL-REACHED,PERSON >VAL
ZERO? VAL \?CND150
EQUAL? HERE,WHERE \?CND150
FSET? PERSON,INVISIBLE /?CND150
SET 'FLG,M-FATAL
CALL START-SENTENCE,PERSON
PRINTI " stops here."
CRLF
JUMP ?CND150
?ELS152: GET GT,GOAL-FUNCTION
CALL STACK,G-ENROUTE
?CND150: EQUAL? VAL,M-FATAL \?ELS166
RETURN VAL
?ELS166: RETURN FLG
.FUNCT DIR-FROM,HERE,THERE,V=0,P=0,L,Z,O
?PRG1: NEXTP HERE,P >P
ZERO? P \?ELS5
RETURN V
?ELS5: EQUAL? P,P?IN,P?OUT \?ELS7
JUMP ?PRG1
?ELS7: LESS? P,LOW-DIRECTION /?PRG1
GETPT HERE,P >Z
PTSIZE Z >L
EQUAL? L,DEXIT,UEXIT,CEXIT \?ELS12
GETB Z,REXIT
EQUAL? STACK,THERE \?ELS12
EQUAL? P,P?UP,P?DOWN \?ELS17
SET 'V,P
JUMP ?PRG1
?ELS17: RETURN P
?ELS12: ZERO? V \?PRG1
EQUAL? L,FEXIT \?PRG1
SET 'V,P
JUMP ?PRG1
.ENDI

746
goal.zil Normal file
View File

@ -0,0 +1,746 @@
"GOAL for
TOA #2
Copyright 1984 Infocom, Inc. All rights reserved.
"
"This code is the local T system."
<GLOBAL DIR-STRINGS
<PTABLE P?NORTH "north" P?SOUTH "south"
P?EAST "east" P?WEST "west"
P?NW "northwest" P?NE "northeast"
P?SW "southwest" P?SE "southeast"
P?DOWN "downstairs" P?UP "upstairs"
P?IN "in" P?OUT "out">>
<GLOBAL NAUTICAL-DIR-STRINGS
<PTABLE P?NORTH "forward" P?SOUTH "aft"
P?EAST "starboard" P?WEST "port"
P?NW "northwest" P?NE "northeast"
P?SW "southwest" P?SE "southeast"
P?DOWN "below" P?UP "above"
P?IN "in" P?OUT "out">>
<ROUTINE DIR-PRINT (DIR "AUX" (CNT 0) TBL (DRY <>))
#DECL ((DIR CNT) FIX)
<COND (<NOT .DIR>
<TELL "out of view">
<RTRUE>)
(<G? <GETP ,HERE ,P?LINE> ,BACK-ALLEY-LINE-C>
<SET TBL ,NAUTICAL-DIR-STRINGS>)
(T
<SET TBL ,DIR-STRINGS>
<SET DRY T>)>
<REPEAT ()
<COND (<==? <GET .TBL .CNT> .DIR>
<COND (<AND .DRY
<NOT <EQUAL? .DIR ,P?UP ,P?DOWN>>>
<TELL "the ">)>
<PRINT <GET .TBL <+ .CNT 1>>>
<RTRUE>)>
<SET CNT <+ .CNT 1>>>>
"Rapid Transit Line Definitions and Identifiers"
<CONSTANT ROAD-WHARF-LINE-C 0>
<CONSTANT EAST-ROAD-LINE-C 1>
<CONSTANT BEDROOM-LINE-C 2>
<CONSTANT BACK-ALLEY-LINE-C 3>
<CONSTANT TRAWLER-LINE-C 4>
<CONSTANT SALVAGER-LINE-C 5>
<CONSTANT UNDERWATER-LINE-C 6>
<GLOBAL ROAD-WHARF-LINE
<PTABLE 0 WINDING-ROAD-1 P?SE
P?NW WINDING-ROAD-2 P?NE
P?SW WINDING-ROAD-3 P?NE
P?SW WHARF-ROAD-1 P?EAST
P?WEST WHARF-ROAD-2 P?EAST
P?WEST WHARF-ROAD-3 P?NORTH
P?SOUTH WHARF 0>>
<GLOBAL EAST-ROAD-LINE
<PTABLE 0 WHARF-ROAD-4 P?EAST
P?WEST WHARF-ROAD-5 P?SE
P?NW OCEAN-ROAD-1 P?SOUTH
P?NORTH OCEAN-ROAD-2 P?SOUTH
P?NORTH OCEAN-ROAD-3 P?SW
P?NE SHORE-ROAD-2 P?WEST
P?EAST SHORE-ROAD-1 P?WEST
P?EAST FERRY-LANDING 0>>
<GLOBAL BEDROOM-LINE
<PTABLE 0 RED-BOAR-INN P?UP
P?DOWN UPSTAIRS-HALLWAY P?SOUTH
P?NORTH BEDROOM 0>>
<GLOBAL BACK-ALLEY-LINE
<PTABLE 0 BACK-ALLEY-1 P?EAST
P?WEST BACK-ALLEY-2 P?EAST
P?WEST BACK-ALLEY-3 P?EAST
P?WEST BACK-ALLEY-4 P?EAST
P?WEST BACK-ALLEY-5 0>>
<GLOBAL TRAWLER-LINE
<PTABLE 0 NW-PORT-DECK P?NE
P?SW NW-FORE-DECK P?SE
P?NW NW-STARBOARD-DECK P?SW
P?NE NW-AFT-DECK P?DOWN
P?UP NW-LOUNGE P?NORTH
P?SOUTH NW-GALLEY P?NORTH
P?SOUTH NW-CREW-QTRS 0>>
<GLOBAL SALVAGER-LINE
<PTABLE 0 MM-STARBOARD-DECK P?NW
P?SE MM-FORE-DECK P?SW
P?NE MM-PORT-DECK P?SE
P?NW MM-AFT-DECK P?DOWN
P?UP MM-LOUNGE P?NORTH
P?SOUTH MM-GALLEY P?NORTH
P?SOUTH MM-CREW-QTRS 0>>
<GLOBAL TRANSFER-TABLE
<PTABLE 0 0
WHARF-ROAD-3 WHARF-ROAD-4
WHARF-ROAD-1 RED-BOAR-INN
WHARF-ROAD-3 WHARF-ROAD-4
WHARF NW-STARBOARD-DECK
WHARF MM-PORT-DECK
WHARF-ROAD-4 WHARF-ROAD-3
0 0
WHARF-ROAD-4 WHARF-ROAD-3
OCEAN-ROAD-1 BACK-ALLEY-5
WHARF-ROAD-4 WHARF-ROAD-3
WHARF-ROAD-4 WHARF-ROAD-3
RED-BOAR-INN WHARF-ROAD-1
RED-BOAR-INN WHARF-ROAD-1
0 0
RED-BOAR-INN WHARF-ROAD-1
RED-BOAR-INN WHARF-ROAD-1
RED-BOAR-INN WHARF-ROAD-1
BACK-ALLEY-5 OCEAN-ROAD-1
BACK-ALLEY-5 OCEAN-ROAD-1
BACK-ALLEY-5 OCEAN-ROAD-1
0 0
BACK-ALLEY-5 OCEAN-ROAD-1
BACK-ALLEY-5 OCEAN-ROAD-1
NW-STARBOARD-DECK WHARF
NW-STARBOARD-DECK WHARF
NW-STARBOARD-DECK WHARF
NW-STARBOARD-DECK WHARF
0 0
NW-STARBOARD-DECK WHARF
MM-PORT-DECK WHARF
MM-PORT-DECK WHARF
MM-PORT-DECK WHARF
MM-PORT-DECK WHARF
MM-PORT-DECK WHARF
0 0>>
<GLOBAL COR-1
<PTABLE P?NW P?SE
WINDING-ROAD-1 WINDING-ROAD-2 0>>
<GLOBAL COR-2
<PTABLE P?SW P?NE
WINDING-ROAD-2 WINDING-ROAD-3 WHARF-ROAD-1 0>>
<GLOBAL COR-4
<PTABLE P?WEST P?EAST
WHARF-ROAD-1 WHARF-ROAD-2 WHARF-ROAD-3 WHARF-ROAD-4
WHARF-ROAD-5 0>>
<GLOBAL COR-8
<PTABLE P?NW P?SE
WHARF-ROAD-5 OCEAN-ROAD-1 0>>
<GLOBAL COR-16
<PTABLE P?NORTH P?SOUTH
OCEAN-ROAD-1 OCEAN-ROAD-2 OCEAN-ROAD-3 0>>
<GLOBAL COR-32
<PTABLE P?NW P?SE
OCEAN-ROAD-3 POINT-LOOKOUT 0>>
<GLOBAL COR-64
<PTABLE P?SW P?NE
SHORE-ROAD-2 OCEAN-ROAD-3 0>>
<GLOBAL COR-128
<PTABLE P?WEST P?EAST
FERRY-LANDING SHORE-ROAD-1 SHORE-ROAD-2 0>>
<GLOBAL COR-256
<PTABLE P?NORTH P?SOUTH
WHARF WHARF-ROAD-3 VACANT-LOT BACK-ALLEY-3 0>>
<GLOBAL COR-512
<PTABLE P?WEST P?EAST
BACK-ALLEY-1 BACK-ALLEY-2 BACK-ALLEY-3 BACK-ALLEY-4
BACK-ALLEY-5 0>>
;"up to 16 corridors (65536)"
"CODE"
<ROUTINE FOLLOW-GOAL (PERSON "AUX" (HERE <LOC .PERSON>) LINE LN RM GT GOAL FLG
(GOAL-FLAG <>) (IGOAL <>) LOC (CNT 1) DIR)
#DECL ((PERSON HERE LOC RM) OBJECT (LN CNT) FIX
(GOAL-FLAG) <OR ATOM FALSE>)
<SET GT <GET ,GOAL-TABLES <GETP .PERSON ,P?CHARACTER>>>
<COND (<==? .HERE <GET .GT ,GOAL-F>>
<PUT .GT ,GOAL-S <>>
<RETURN <>>)
(<NOT <GET .GT ,GOAL-ENABLE>> <RFALSE>)>
<COND (<NOT <EQUAL? <SET LOC <GETP .HERE ,P?STATION>>
.HERE>>
<RETURN <MOVE-PERSON .PERSON .LOC>>)>
;%<COND (<GASSIGNED? PREDGEN>
'<>)
(T
'<COND (<NOT <EQUAL? <SET LOC ,<GETP .HERE ,P?STATION>>
.HERE>>
<RETURN <MOVE-PERSON .PERSON .LOC>>)>)>
<COND (<==? <SET GOAL <GET ,TRANSFER-TABLE
<SET IGOAL <GET .GT ,GOAL-I>>>> 0>
<SET IGOAL <>>
<SET GOAL <GET .GT ,GOAL-S>>)>
<COND (<NOT .GOAL> <RFALSE>)
(<==? .HERE .GOAL>
<COND (.IGOAL
<SET FLG <MOVE-PERSON .PERSON
<GET ,TRANSFER-TABLE
<+ .IGOAL 1>>>>
<ESTABLISH-GOAL .PERSON <GET .GT ,GOAL-F>>
<RETURN .FLG>)
(<NOT <==? .HERE <GET .GT ,GOAL-F>>>
<PUT .GT ,GOAL-S <>>
<SET FLG <MOVE-PERSON .PERSON <GET .GT ,GOAL-F>>>
<RETURN .FLG>)
(T
<PUT .GT ,GOAL-S <>>
<RETURN <>>)>)>
<SET LINE <GET-LINE <GETP .GOAL ,P?LINE>>>
<REPEAT ()
<COND (<==? <SET RM <GET .LINE .CNT>> .HERE>
<COND (.GOAL-FLAG
<SET LOC <GET .LINE <- .CNT 3>>>)
(T
<SET LOC <GET .LINE <+ .CNT 3>>>)>
<RETURN <MOVE-PERSON .PERSON .LOC>>)
(<==? .RM .GOAL>
<SET GOAL-FLAG T>)>
<SET CNT <+ .CNT 3>>>>
<ROUTINE COR-DIR (HERE THERE "AUX" COR RM (PAST 0) (CNT 2))
<SET COR <GET-COR <BAND <GETP .THERE ,P?CORRIDOR>
<GETP .HERE ,P?CORRIDOR>>>>
<REPEAT ()
<COND (<==? <SET RM <GET .COR .CNT>> .HERE>
<SET PAST 1>
<RETURN>)
(<==? .RM .THERE>
<RETURN>)>
<SET CNT <+ .CNT 1>>>
<GET .COR .PAST>>
<ROUTINE GET-LINE (LN)
<COND (<==? .LN 0> ,ROAD-WHARF-LINE)
(<==? .LN 1> ,EAST-ROAD-LINE)
(<==? .LN 2> ,BEDROOM-LINE)
(<==? .LN 3> ,BACK-ALLEY-LINE)
(<==? .LN 4> ,TRAWLER-LINE)
(<==? .LN 5> ,SALVAGER-LINE)>>
<ROUTINE GET-COR (NUM)
#DECL ((NUM) FIX)
<COND (<==? .NUM 1> ,COR-1)
(<==? .NUM 2> ,COR-2)
(<==? .NUM 4> ,COR-4)
(<==? .NUM 8> ,COR-8)
(<==? .NUM 16> ,COR-16)
(<==? .NUM 32> ,COR-32)
(<==? .NUM 64> ,COR-64)
(<==? .NUM 128> ,COR-128)
(<==? .NUM 256> ,COR-256)
(T ,COR-512)>>
"Goal tables for the 4 characters (plus delivery boy), offset by a constant,
which, for a given character, is the P?CHARACTER property of the object."
<GLOBAL GOAL-TABLES
<TABLE <TABLE <> <> <> 1 <> I-FOLLOW 5 5>
<TABLE <> <> <> 1 <> I-MCGINTY 5 5>
<TABLE <> <> <> 1 <> I-JOHNNY 5 5>
<TABLE <> <> <> 1 <> I-PETE 5 5>
<TABLE <> <> <> 1 <> I-WEASEL 5 5>
<TABLE <> <> <> 1 <> I-DELIVERY-BOY 0 0>>>
<CONSTANT CHARACTER-MAX 5>
<CONSTANT MCGINTY-C 1>
<CONSTANT JOHNNY-C 2>
<CONSTANT PETE-C 3>
<CONSTANT WEASEL-C 4>
<CONSTANT DELIVERY-BOY-C 5>
"Offsets into GOAL-TABLEs"
<CONSTANT GOAL-F 0> ;"final goal"
<CONSTANT GOAL-S 1> ;"station of final goal"
<CONSTANT GOAL-I 2> ;"intermediate goal (transfer point)"
<CONSTANT GOAL-ENABLE 3> ;"character can move; usually false only when he's
interrupted enroute"
<CONSTANT GOAL-QUEUED 4> ;"secondary goal to go to when current, higher-
priority one has been reached"
<CONSTANT GOAL-FUNCTION 5> ;"routine to apply on arrival"
<CONSTANT ATTENTION-SPAN 6> ;"how long character will wait when interrupted"
<CONSTANT ATTENTION 7> ;"used to count down from ATTENTION-SPAN to 0"
"Goal-function constants, similar to M-xxx in MAIN"
<CONSTANT G-REACHED 1>
<CONSTANT G-ENROUTE 2>
"Routines to do looking down corridors"
<ROUTINE CORRIDOR-LOOK ("OPTIONAL" (ITM <>) "AUX" C Z COR VAL (FOUND <>))
<COND (<SET C <GETP ,HERE ,P?CORRIDOR>>
<REPEAT ()
<COND ;(<NOT <L? <SET Z <- .C 1024>> 0>>
<SET COR ,COR-1024>)
(<NOT <L? <SET Z <- .C 512>> 0>>
<SET COR ,COR-512>)
(<NOT <L? <SET Z <- .C 256>> 0>>
<SET COR ,COR-256>)
(<NOT <L? <SET Z <- .C 128>> 0>>
<SET COR ,COR-128>)
(<NOT <L? <SET Z <- .C 64>> 0>>
<SET COR ,COR-64>)
(<NOT <L? <SET Z <- .C 32>> 0>>
<SET COR ,COR-32>)
(<NOT <L? <SET Z <- .C 16>> 0>>
<SET COR ,COR-16>)
(<NOT <L? <SET Z <- .C 8>> 0>>
<SET COR ,COR-8>)
(<NOT <L? <SET Z <- .C 4>> 0>>
<SET COR ,COR-4>)
(<NOT <L? <SET Z <- .C 2>> 0>>
<SET COR ,COR-2>)
(<NOT <L? <SET Z <- .C 1>> 0>>
<SET COR ,COR-1>)
(T <RETURN>)>
<SET VAL <CORRIDOR-CHECK .COR .ITM>>
<COND (<NOT .FOUND> <SET FOUND .VAL>)>
<SET C .Z>>
.FOUND)>>
<ROUTINE CORRIDOR-CHECK (COR ITM "AUX" (CNT 2) (PAST 0) (FOUND <>) RM OBJ)
<REPEAT ()
<COND (<==? <SET RM <GET .COR .CNT>> 0>
<RFALSE>)
(<==? .RM ,HERE> <SET PAST 1>)
(<SET OBJ <FIRST? .RM>>
<REPEAT ()
<COND (.ITM
<COND (<==? .OBJ .ITM>
<SET FOUND <GET .COR .PAST>>
<RETURN>)>)
(<AND <GETP .OBJ ,P?CHARACTER>
<NOT <IN-MOTION? .OBJ>>
<OR <NOT <==? .OBJ ,MCGINTY>>
<NOT <QUEUED?
I-MCGINTY-FOLLOWS>>
<NOT <VERB? WALK FOLLOW>>>>
<START-SENTENCE .OBJ>
<TELL " is ">
;<COND (<IN-MOTION? .OBJ>
<TELL "in motion ">)>
<TELL "off to ">
<DIR-PRINT <GET .COR .PAST>>
<TELL ".">
<CRLF>)>
<SET OBJ <NEXT? .OBJ>>
<COND (<NOT .OBJ> <RETURN>)>>
<COND (.FOUND <RETURN .FOUND>)>)>
<SET CNT <+ .CNT 1>>>>
<GLOBAL CHARACTER-TABLE <PTABLE PLAYER MCGINTY JOHNNY PETE WEASEL DELIVERY-BOY>>
"Goal tables for the 6 characters (including PLAYER), offset
by the preceding constants, which, for a given character,
is the P?CHARACTER property of the object."
"The ATTENTION-TABLE is now a thing of the past. ATTENTION
in the GOAL-TABLES is used instead."
"Here's how the movement goals are done: For each player is
a table which consists of triplets, a number of minutes until
the next movement (an clock interrupt number), a number of
minutes allowed variation (for a bit of randomness), and a
room toward which to start. All movement is controlled by
the GOAL-ENABLE flag in the GOAL-TABLE for a character."
"Time starts at 8AM. Characters are at that point in their
starting positions, as reflected in PEOPLE."
<GLOBAL MOVEMENT-GOALS <TABLE
;"PLAYER"
<TABLE 0 0 0>
;"MCGINTY"
<TABLE 0
58 2 SHANTY
15 1 MCGINTY-HQ
65 2 BANK
16 5 OUTFITTERS-HQ
30 3 MCGINTY-HQ
75 5 SHANTY
30 5 MCGINTY-HQ
;69 ;2 ;MM-FORE-DECK
0>
;"JOHNNY"
<TABLE 0
61 2 WINDING-ROAD-1
75 5 SHANTY
0>
;"PETE"
<TABLE 0
72 2 WINDING-ROAD-1
81 5 SHANTY
197 5 MM-GALLEY
0>
;"WEASEL"
<TABLE 0
8 5 UPSTAIRS-HALLWAY
58 2 WINDING-ROAD-1
78 5 UPSTAIRS-HALLWAY
85 1 FERRY-LANDING
0>
;"DELIVERY-BOY"
<TABLE 0
345 1 MM-LOCKER
0>>>
<GLOBAL WEASEL-RETIRES-TABLE
<TABLE 0
5 1 BACK-ALLEY-5
45 5 BANK
10 5 FERRY-LANDING
0>>
<GLOBAL JOHNNY-CONTINUES-TABLE
<TABLE 0
5 1 OUTFITTERS-HQ
60 5 POINT-LOOKOUT
25 1 SHANTY
0>>
<GLOBAL JOHNNY-COMPLETES-TABLE
<TABLE 0
200 5 MM-CAPT-CABIN
0>>
<ROUTINE IN-MOTION? (PERSON "AUX" GT)
<SET GT <GET ,GOAL-TABLES <GETP .PERSON ,P?CHARACTER>>>
<COND (<AND <OR <GET .GT ,GOAL-ENABLE>
<==? <GET .GT ,ATTENTION> 1>>
<GET .GT ,GOAL-S>
<NOT <==? <LOC .PERSON> <GET .GT ,GOAL-F>>>>
<RTRUE>)
(T <RFALSE>)>>
<ROUTINE START-MOVEMENT ()
<ENABLE <QUEUE I-MCGINTY 1>>
<ENABLE <QUEUE I-JOHNNY 1>>
<ENABLE <QUEUE I-PETE 1>>
<ENABLE <QUEUE I-WEASEL 1>>
<ENABLE <QUEUE I-DELIVERY-BOY 1>>
<ENABLE <QUEUE I-FOLLOW -1>>
<ENABLE <QUEUE I-ATTENTION -1>>
<ENABLE <QUEUE I-DISGUSTING-WEASEL-KLUDGE 35>>>
"This routine does the interrupt-driven goal establishment
for the various characters, using the MOVEMENT-GOALS table."
<CONSTANT MG-ROOM 0>
<CONSTANT MG-TIME 1>
<CONSTANT MG-VARIATION 2>
<CONSTANT MG-LENGTH <* 3 2>>
<CONSTANT MG-NEXT 4>
<ROUTINE IMOVEMENT (PERSON INT "AUX" TB VAR DIS TIM ID RM GT)
#DECL ((PERSON) OBJECT (TB) <PRIMTYPE VECTOR> (ID VAR DIS TIM) FIX)
<SET TB <GET ,MOVEMENT-GOALS <SET ID <GETP .PERSON ,P?CHARACTER>>>>
<SET GT <GET ,GOAL-TABLES .ID>>
<COND (<NOT <==? 0 <SET RM <GET .TB ,MG-ROOM>>>>
<COND (<GET .GT ,GOAL-QUEUED>
<PUT .GT ,GOAL-QUEUED .RM>)
(T
<ESTABLISH-GOAL .PERSON .RM>)>)>
<COND (<NOT <==? 0 <SET TIM <GET .TB ,MG-TIME>>>>
<SET VAR <GET .TB ,MG-VARIATION>>
<SET DIS <RANDOM <* .VAR 2>>>
<QUEUE .INT <+ .TIM <- .DIS .VAR>>>
<PUT ,MOVEMENT-GOALS .ID <REST .TB ,MG-LENGTH>>
<COND (<NOT <==? 0 <GET .TB ,MG-NEXT>>>
<PUT .TB
,MG-NEXT
<+ <GET .TB ,MG-NEXT> <- .VAR .DIS>>>)>)>
<RFALSE>>
<ROUTINE I-FOLLOW ("AUX" (FLG <>) (CNT 0) GT VAL)
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> ,CHARACTER-MAX>
<RETURN>)
(<AND <GET <SET GT <GET ,GOAL-TABLES .CNT>> ,GOAL-S>
<OR <GET .GT ,GOAL-ENABLE>
<0? <GET .GT ,ATTENTION>>>>
<PUT .GT ,GOAL-ENABLE T>
<COND (<SET VAL
<FOLLOW-GOAL <GET ,CHARACTER-TABLE .CNT>>>
<COND (<NOT <==? .FLG ,M-FATAL>>
<SET FLG .VAL>)>)>)>>
.FLG>
<ROUTINE I-ATTENTION ("AUX" (FLG <>) (CNT 0) ATT GT)
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> ,CHARACTER-MAX> <RETURN>)
(<0? <SET ATT <- <GET
<SET GT <GET ,GOAL-TABLES .CNT>>
,ATTENTION> 1>>>
<PUT .GT ,GOAL-ENABLE T>)
;(<==? <SET ATT <- <GET
<SET GT <GET ,GOAL-TABLES .CNT>>
,ATTENTION> 1>> 1>
<COND (<AND <IN? <GET ,CHARACTER-TABLE .CNT> ,HERE>
<NOT ,ASLEEP?>>
<START-SENTENCE <GET ,CHARACTER-TABLE .CNT>>
<TELL " is acting impatient." CR>
<SET FLG T>)>)
;(<==? .ATT 0>
<PUT .GT ,GOAL-ENABLE T>)>
<PUT .GT ,ATTENTION .ATT>>
.FLG>
<ROUTINE GRAB-ATTENTION (PERSON "AUX" (CHR<GETP .PERSON ,P?CHARACTER>) GT ATT)
#DECL ((PERSON) OBJECT (ATT) FIX)
<SET GT <GET ,GOAL-TABLES .CHR>>
<COND (<GET .GT ,GOAL-S>
<PUT .GT ,ATTENTION <SET ATT <GET .GT ,ATTENTION-SPAN>>>
<COND (<==? .ATT 0>
<PUT .GT ,GOAL-ENABLE T>
<RFALSE>)
(<GET .GT ,GOAL-ENABLE>
<PUT .GT ,GOAL-ENABLE <>>)>)>
<SETG QCONTEXT .PERSON>
<SETG QCONTEXT-ROOM ,HERE>
<RTRUE>>
" Movement etc."
;<ROUTINE UNPRIORITIZE (PERSON "AUX" GT)
<SET GT <GET ,GOAL-TABLES <GETP .PERSON ,P?CHARACTER>>>
<COND (<GET .GT ,GOAL-QUEUED>
<ESTABLISH-GOAL .PERSON <GET .GT ,GOAL-QUEUED>>
<PUT .GT ,GOAL-QUEUED <>>)>>
<ROUTINE ESTABLISH-GOAL (PERSON GOAL "OPTIONAL" (PRIORITY <>)
"AUX" (HERE <LOC .PERSON>) HL GL GT)
#DECL ((PERSON GOAL HERE) OBJECT (HL GL) FIX
(PRIORITY) <OR FALSE ATOM>)
;<COND (<==? .HERE .GOAL>
<RETURN .HERE>)>
<SET GT <GET ,GOAL-TABLES <GETP .PERSON ,P?CHARACTER>>>
<COND (.PRIORITY
<PUT .GT ,GOAL-ENABLE T>
<PUT .GT ,GOAL-QUEUED .HERE>)>
<PUT .GT ,GOAL-I <+ <* <GETP .HERE ,P?LINE> 12>
<* <GETP .GOAL ,P?LINE> 2>>>
<PUT .GT
,GOAL-S
<GETP .GOAL ,P?STATION>
;%<COND (<GASSIGNED? PREDGEN> '<>)
(T ',<GETP .GOAL ,P?STATION>)>>
<PUT .GT ,GOAL-F .GOAL>
<LOC .PERSON>>
<ROUTINE GOAL-REACHED (PERSON "AUX" GT)
#DECL ((PERSON) OBJECT)
<PUT <SET GT <GET ,GOAL-TABLES <GETP .PERSON ,P?CHARACTER>>>
,GOAL-S <>>
<APPLY <GET .GT ,GOAL-FUNCTION>
,G-REACHED>>
<ROUTINE MOVE-PERSON (PERSON WHERE "AUX" DIR GT OL COR PCOR CHR PUSHCART
(FLG <>) ;DR (VAL <>) DF CD)
#DECL ((PERSON WHERE) OBJECT)
<SET GT <GET ,GOAL-TABLES <SET CHR <GETP .PERSON ,P?CHARACTER>>>>
<SET OL <LOC .PERSON>>
<SET DIR <DIR-FROM .OL .WHERE>>
<SET PUSHCART ", pushing his cart">
;<COND (<==? <PTSIZE <SET DR <GETPT .OL .DIR>>> ,DEXIT>
<SET DR <GETB .DR ,DEXITOBJ>>
<COND (<NOT <FSET? .DR ,OPENBIT>>
<FSET .DR ,OPENBIT>
;<COND (<NOT <FSET? .DR ,LOCKED>> <FSET .DR ,OPENBIT>)>)
(T <SET DR <>>)>)
(T <SET DR <>>)>
<COND (<AND <==? .OL ,HERE>
<NOT <FSET? .PERSON ,INVISIBLE>>>
<SET FLG T>
<START-SENTENCE .PERSON>
<COND (<==? .DIR ,P?OUT>
<TELL " leaves the room">
<COND (<==? .PERSON ,DELIVERY-BOY> <TELL .PUSHCART>)>
<TELL "." CR>)
(<==? .DIR ,P?IN>
;<COND (.DR
<TELL " opens the " D .DR " and">)>
<TELL " goes into another room">
;<COND (<AND .DR
<FSET? .DR ,LOCKED>>
;<FCLEAR .DR ,OPENBIT>
<TELL ", locking the door again">)>
<TELL "." CR>)
(T
;<COND (.DR
<TELL " opens the " D .DR " and">)>
<TELL " heads ">
<COND (<AND <L? <GETP ,HERE ,P?LINE> ,TRAWLER-LINE-C>
<NOT <EQUAL? .DIR ,P?UP ,P?DOWN>>>
<TELL "off to ">)>
<DIR-PRINT .DIR>
;<COND (<AND .DR
<FSET? .DR ,LOCKED>>
;<FCLEAR .DR ,OPENBIT>
<TELL ", locking the door again">)>
<COND (<==? .PERSON ,DELIVERY-BOY> <TELL .PUSHCART>)>
<TELL "." CR>)>)
(<AND <==? .WHERE ,HERE>
<NOT <FSET? .PERSON ,INVISIBLE>>>
<SET FLG ,M-FATAL>
<COND (<NOT <==? ,HERE <GET .GT ,GOAL-F>>>
<START-SENTENCE .PERSON>
<TELL " walks ">
<COND (<AND <VERB? WALK>
<==? .WHERE ,HERE>
<==? .OL ,LAST-PLAYER-LOC>>
<TELL "along with">)
(T <TELL "past">)>
<TELL " you">
<COND (<==? .PERSON ,DELIVERY-BOY> <TELL .PUSHCART>)>
<TELL "." CR>)>)
(<AND <SET COR <GETP ,HERE ,P?CORRIDOR>>
<NOT <FSET? .PERSON ,INVISIBLE>>>
<COND (<AND <SET PCOR <GETP .OL ,P?CORRIDOR>>
<NOT <==? <BAND .COR .PCOR> 0>>>
<SET FLG T>
<COND (<NOT <GETP .WHERE ,P?CORRIDOR>>
<START-SENTENCE .PERSON>
<TELL ", off to ">
<DIR-PRINT <COR-DIR ,HERE .OL>>
<TELL ",">
;<COND (.DR
<TELL " opens a door and">)>
<TELL " leaves your view">
<TELL " to ">
<DIR-PRINT <DIR-FROM .OL .WHERE>>
;<COND (<AND .DR
<FSET? .DR ,LOCKED>>
;<FCLEAR .DR ,OPENBIT>
<TELL ", locking the door again">)>
<COND (<==? .PERSON ,DELIVERY-BOY>
<TELL .PUSHCART>)>
<TELL "." CR>)
(<0? <BAND .COR <GETP .WHERE ,P?CORRIDOR>>>
<START-SENTENCE .PERSON>
<TELL ", off to ">
<DIR-PRINT <COR-DIR ,HERE .OL>>
<TELL ", disappears from sight to ">
<DIR-PRINT <SET PCOR <DIR-FROM .OL .WHERE>>>
<COND (<==? .PERSON ,DELIVERY-BOY>
<TELL .PUSHCART>)>
<TELL "." CR>)
(T
<START-SENTENCE .PERSON>
<TELL " is to ">
<DIR-PRINT <SET CD <COR-DIR ,HERE .WHERE>>>
<TELL ", heading ">
<COND (<==? .CD <SET DF <DIR-FROM .OL .WHERE>>>
<TELL "away from you">)
(T
<TELL "toward ">
<DIR-PRINT .DF>)>
<COND (<==? .PERSON ,DELIVERY-BOY>
<TELL .PUSHCART>)>
<TELL "." CR>)>)
(<AND <SET PCOR <GETP .WHERE ,P?CORRIDOR>>
<NOT <==? <BAND .COR .PCOR> 0>>>
<SET FLG T>
<TELL "To ">
<DIR-PRINT <COR-DIR ,HERE .WHERE>>
<TELL " ">
<THE? .PERSON>
<TELL D .PERSON " comes into view from ">
<DIR-PRINT <DIR-FROM .WHERE .OL>>
<COND (<==? .PERSON ,DELIVERY-BOY> <TELL .PUSHCART>)>
<TELL "." CR>)>)>
;<WHERE-UPDATE .PERSON .FLG>
<MOVE .PERSON .WHERE>
<COND (<==? <GET .GT ,GOAL-F> .WHERE>
<COND (<AND <NOT <SET VAL <GOAL-REACHED .PERSON>>>
<==? ,HERE .WHERE>
<NOT <FSET? .PERSON ,INVISIBLE>>>
<SET FLG ,M-FATAL>
<START-SENTENCE .PERSON>
<TELL " stops here." CR>)>)
(T <APPLY <GET .GT ,GOAL-FUNCTION> ,G-ENROUTE>)>
;<COND (,DEBUG
<TELL "[">
<START-SENTENCE .PERSON>
<TELL " just went into ">
<THE? .WHERE>
<TELL D .WHERE ".]" CR>)>
<COND (<==? .VAL ,M-FATAL> .VAL)
(T .FLG)>>
<ROUTINE DIR-FROM (HERE THERE "AUX" (V <>) (P 0) L Z O)
#DECL ((HERE THERE O) OBJECT (P L) FIX)
<REPEAT ()
<COND (<0? <SET P <NEXTP .HERE .P>>>
<RETURN .V>)
(<EQUAL? .P ,P?IN ,P?OUT> T)
(<NOT <L? .P ,LOW-DIRECTION>>
<SET Z <GETPT .HERE .P>>
<SET L <PTSIZE .Z>>
<COND (<AND <EQUAL? .L ,DEXIT ,UEXIT ,CEXIT>
<==? <GETB .Z ,REXIT> .THERE>>
<COND (<EQUAL? .P ,P?UP ,P?DOWN>
<SET V .P>)
(T <RETURN .P>)>)
(<AND <NOT .V>
<EQUAL? .L ,FEXIT>>
<SET V .P>)>)>>>
;<ROUTINE WHERE-UPDATE (PERSON "OPTIONAL" (FLG <>) "AUX" WT NC (CNT 0))
<SET NC <GETP .PERSON ,P?CHARACTER>>
<SET WT <GET ,WHERE-TABLES .NC>>
<REPEAT ()
<COND (<G? .CNT ,CHARACTER-MAX> <RETURN>)
(<==? .CNT .NC>)
(<OR <AND <0? .CNT> .FLG>
<IN? <GET ,CHARACTER-TABLE .CNT> <LOC .PERSON>>>
<PUT .WT .CNT ,PRESENT-TIME>
<PUT <GET ,WHERE-TABLES .CNT> .NC ,PRESENT-TIME>)>
<SET CNT <+ .CNT 1>>>>
;<GLOBAL WHERE-TABLES
<TABLE <TABLE 0 0 0 0 0>
<TABLE 0 0 0 0 0>
<TABLE 0 0 0 0 0>
<TABLE 0 0 0 0 0>
<TABLE 0 0 0 0 0>>>

1670
island.zap Normal file

File diff suppressed because it is too large Load Diff

2520
island.zil Normal file

File diff suppressed because it is too large Load Diff

33
macros.zap Normal file
View File

@ -0,0 +1,33 @@
.FUNCT PICK-ONE,FROB
GET FROB,0
RANDOM STACK
GET FROB,STACK
RSTACK
.FUNCT DPRINT,OBJ
GETP OBJ,P?SDESC
ZERO? STACK /?ELS5
GETP OBJ,P?SDESC
PRINT STACK
RTRUE
?ELS5: PRINTD OBJ
RTRUE
.FUNCT APRINT,OBJ
FSET? OBJ,PERSON /?THN6
EQUAL? OBJ,PETES-PATCH \?ELS5
?THN6: CALL DPRINT,OBJ
RSTACK
?ELS5: FSET? OBJ,VOWELBIT \?ELS11
PRINTI "an "
CALL DPRINT,OBJ
RSTACK
?ELS11: PRINTI "a "
CALL DPRINT,OBJ
RSTACK
.ENDI

145
macros.zil Normal file
View File

@ -0,0 +1,145 @@
"MACROS for
TOA #2
(c) Copyright 1984 Infocom, Inc. All Rights Reserved.
"
<COND (<NOT <GASSIGNED? ZSTR-ON>>
<SETG ZSTR-ON <SETG ZSTR-OFF ,TIME>>)>
<SETG C-ENABLED? 0>
;<SETG C-ENABLED 1>
;<SETG C-DISABLED 0>
<DEFMAC TELL ("ARGS" A)
<FORM PROG ()
!<MAPF ,LIST
<FUNCTION ("AUX" E P O)
<COND (<EMPTY? .A> <MAPSTOP>)
(<SET E <NTH .A 1>>
<SET A <REST .A>>)>
<COND (<TYPE? .E ATOM>
<COND (<OR <=? <SET P <SPNAME .E>>
"CRLF">
<=? .P "CR">>
<MAPRET '<CRLF>>)
(<=? .P "PRSO">
<MAPRET '<PRSO-PRINT>>)
(<=? .P "PRSI">
<MAPRET '<PRSI-PRINT>>)
;(<=? .P "THE-PRSO">
<MAPRET '<THE-PRSO-PRINT>>)
;(<=? .P "THE-PRSI">
<MAPRET '<THE-PRSI-PRINT>>)
(<EMPTY? .A>
<ERROR INDICATOR-AT-END? .E>)
(ELSE
<SET O <NTH .A 1>>
<SET A <REST .A>>
<COND (<OR <=? <SET P <SPNAME .E>>
"DESC">
<=? .P "D">
<=? .P "OBJ">
<=? .P "O">>
<MAPRET <FORM DPRINT .O>>)
(<OR <=? .P "A">
<=? .P "AN">>
<MAPRET <FORM APRINT .O>>)
(<OR <=? .P "NUM">
<=? .P "N">>
<MAPRET <FORM PRINTN .O>>)
(<OR <=? .P "CHAR">
<=? .P "CHR">
<=? .P "C">>
<MAPRET <FORM PRINTC .O>>)
(ELSE
<MAPRET
<FORM PRINT
<FORM GETP .O .E>>>)>)>)
(<TYPE? .E STRING ZSTRING>
<MAPRET <FORM PRINTI .E>>)
(<TYPE? .E FORM LVAL GVAL>
<MAPRET <FORM PRINT .E>>)
(<TYPE? .E FIX>
<MAPRET <FORM PRINTX .E>>)
(ELSE <ERROR UNKNOWN-TYPE .E>)>>>>>
<DEFMAC VERB? ("ARGS" ATMS)
<MULTIFROB PRSA .ATMS>>
<DEFMAC PRSO? ("ARGS" ATMS)
<MULTIFROB PRSO .ATMS>>
<DEFMAC PRSI? ("ARGS" ATMS)
<MULTIFROB PRSI .ATMS>>
<DEFMAC ROOM? ("ARGS" ATMS)
<MULTIFROB HERE .ATMS>>
<ZSTR-OFF>
<DEFINE MULTIFROB (X ATMS "AUX" (OO (OR)) (O .OO) (L ()) ATM)
<REPEAT ()
<COND (<EMPTY? .ATMS>
<RETURN!- <COND (<LENGTH? .OO 1> <ERROR .X>)
(<LENGTH? .OO 2> <NTH .OO 2>)
(ELSE <CHTYPE .OO FORM>)>>)>
<REPEAT ()
<COND (<EMPTY? .ATMS> <RETURN!->)>
<SET ATM <NTH .ATMS 1>>
<SET L
(<COND (<TYPE? .ATM ATOM>
<FORM GVAL
<COND (<==? .X PRSA>
<PARSE
<STRING "V?"
<SPNAME .ATM>>>)
(ELSE .ATM)>>)
(ELSE .ATM)>
!.L)>
<SET ATMS <REST .ATMS>>
<COND (<==? <LENGTH .L> 3> <RETURN!->)>>
<SET O <REST <PUTREST .O (<FORM EQUAL? <FORM GVAL .X> !.L>)>>>
<SET L ()>>>
<ZSTR-ON>
<DEFMAC RFATAL ()
'<PROG () <PUSH 2> <RSTACK>>>
<DEFMAC PROB ('BASE?)
<FORM G? .BASE? '<RANDOM 100>>>
;<ROUTINE ZPROB
(BASE)
<COND (,LUCKY <G? .BASE <RANDOM 100>>)
(ELSE <G? .BASE <RANDOM 300>>)>>
<ROUTINE PICK-ONE (FROB)
<GET .FROB <RANDOM <GET .FROB 0>>>>
<DEFMAC ENABLE ('INT) <FORM PUT .INT ,C-ENABLED? 1>>
<DEFMAC DISABLE ('INT) <FORM PUT .INT ,C-ENABLED? 0>>
<DEFMAC OPENABLE? ('OBJ)
<FORM OR <FORM FSET? .OBJ ',DOORBIT>
<FORM FSET? .OBJ ',CONTBIT>>>
;<ROUTINE ABS (NUM)
<COND (<G? .NUM 0>
<RETURN .NUM>)
(ELSE
<RETURN <- 0 .NUM>>)>>
<ROUTINE DPRINT (OBJ)
<COND (<GETP .OBJ ,P?SDESC>
<TELL <GETP .OBJ ,P?SDESC>>)
(T <PRINTD .OBJ>)>>
<ROUTINE APRINT (OBJ)
<COND (<OR <FSET? .OBJ ,PERSON>
<==? .OBJ ,PETES-PATCH>>
<TELL D .OBJ>)
(<FSET? .OBJ ,VOWELBIT> <TELL "an " D .OBJ>)
(T <TELL "a " D .OBJ>)>>

481
main.zap Normal file
View File

@ -0,0 +1,481 @@
.FUNCT GO
START::
?FCN: CALL QUEUE,I-UNWOUND,20
PUT STACK,0,1
CALL QUEUE,I-BUSINESS-HOURS,60
PUT STACK,0,1
CALL QUEUE,I-FERRY-APPROACHING,117
PUT STACK,0,1
CALL QUEUE,I-FERRY,120
PUT STACK,0,1
CALL QUEUE,I-HUNGER,15
PUT STACK,0,1
CALL QUEUE,I-THIRST,25
PUT STACK,0,1
CALL QUEUE,I-TIRED,929
PUT STACK,0,1
CALL QUEUE,I-LIVER,10
PUT STACK,0,1
CALL QUEUE,I-DRILL,5
CALL QUEUE,I-MM-COMPRESSOR,80
CALL QUEUE,I-PLOT-NEVER-STARTS,60
PUT STACK,0,1
SET 'LIT,TRUE-VALUE
SET 'SCORE,8
SET 'WINNER,ADVENTURER
SET 'PLAYER,WINNER
SET 'SAMPLE-TREASURE,GLOBAL-OBJECTS
CALL PUT-IN-TABLE,ENVELOPE,MCGINTY-HQ,GLOBAL-SURFACE
SET 'HERE,BEDROOM
SET 'P-IT-OBJECT,FALSE-VALUE
FSET? HERE,TOUCHBIT /?CND1
CALL START-MOVEMENT
CALL TELL-START-STR
CRLF
CALL V-VERSION
CRLF
?CND1: MOVE WINNER,BED
CALL V-LOOK
CALL MAIN-LOOP
JUMP ?FCN
.FUNCT MAIN-VERB-PRINT,TMP,?TMP1
GET P-ITBL,P-VERBN >TMP
ZERO? P-OFLAG /?ELS5
GET TMP,0
PRINTB STACK
RTRUE
?ELS5: GETB TMP,2 >?TMP1
GETB TMP,3
CALL WORD-PRINT,?TMP1,STACK
RSTACK
.FUNCT MAIN-LOOP,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,PLACE
?PRG1: SET 'CNT,0
SET 'OBJ,FALSE-VALUE
SET 'PTBL,TRUE-VALUE
SET 'WAITED?,FALSE-VALUE
SET 'P-WALK-DIR,FALSE-VALUE
EQUAL? HERE,QCONTEXT-ROOM /?CND3
SET 'QCONTEXT,FALSE-VALUE
?CND3: CALL PARSER >P-WON
ZERO? P-WON /?ELS8
LOC PLAYER >LAST-PLAYER-LOC
GET P-PRSI,P-MATCHLEN >ICNT
GET P-PRSO,P-MATCHLEN >OCNT
ZERO? P-IT-OBJECT /?CND9
CALL ACCESSIBLE?,P-IT-OBJECT
ZERO? STACK /?CND9
SET 'TMP,FALSE-VALUE
?PRG14: IGRTR? 'CNT,ICNT \?ELS18
JUMP ?REP15
?ELS18: GET P-PRSI,CNT
EQUAL? STACK,IT \?PRG14
PUT P-PRSI,CNT,P-IT-OBJECT
SET 'TMP,TRUE-VALUE
?REP15: ZERO? TMP \?CND24
SET 'CNT,0
?PRG27: IGRTR? 'CNT,OCNT \?ELS31
JUMP ?CND24
?ELS31: GET P-PRSO,CNT
EQUAL? STACK,IT \?PRG27
PUT P-PRSO,CNT,P-IT-OBJECT
?CND24: SET 'CNT,0
?CND9: ZERO? OCNT \?ELS41
PUSH OCNT
JUMP ?CND37
?ELS41: GRTR? OCNT,1 \?ELS43
SET 'TBL,P-PRSO
ZERO? ICNT \?ELS46
SET 'OBJ,FALSE-VALUE
JUMP ?CND44
?ELS46: GET P-PRSI,1 >OBJ
?CND44: PUSH OCNT
JUMP ?CND37
?ELS43: GRTR? ICNT,1 \?ELS50
SET 'PTBL,FALSE-VALUE
SET 'TBL,P-PRSI
GET P-PRSO,1 >OBJ
PUSH ICNT
JUMP ?CND37
?ELS50: PUSH 1
?CND37: SET 'NUM,STACK
ZERO? OBJ \?CND53
EQUAL? ICNT,1 \?CND53
GET P-PRSI,1 >OBJ
?CND53: EQUAL? PRSA,V?WALK \?ELS60
ZERO? P-WALK-DIR /?ELS60
CALL PERFORM,PRSA,PRSO >V
JUMP ?CND58
?ELS60: ZERO? NUM \?ELS64
GETB P-SYNTAX,P-SBITS
BAND STACK,P-SONUMS
ZERO? STACK \?ELS67
CALL PERFORM,PRSA >V
SET 'PRSO,FALSE-VALUE
JUMP ?CND58
?ELS67: ZERO? LIT \?ELS69
CALL TELL-TOO-DARK
JUMP ?CND58
?ELS69: ZERO? OBJ /?ELS74
EQUAL? OBJ,NOT-HERE-OBJECT \?ELS78
CALL GLOBAL-NOT-HERE-PRINT,OBJ
JUMP ?CND58
?ELS78: LOC WINNER >PLACE
FSET? PLACE,VEHBIT \?ELS80
LOC OBJ
EQUAL? PLACE,STACK /?CND58
PRINTI "You should get "
FSET? PLACE,SURFACEBIT \?ELS88
PRINTI "off"
JUMP ?CND86
?ELS88: PRINTI "out"
?CND86: PRINTI " of "
CALL THE?,PLACE
CALL DPRINT,PLACE
PRINTI " first."
CRLF
SET 'V,FALSE-VALUE
JUMP ?CND58
?ELS80: EQUAL? PRSA,V?GIVE \?ELS100
CALL TELL-NOTHING,STR?48
CALL MAIN-VERB-PRINT
PRINTI "."
CRLF
SET 'V,FALSE-VALUE
JUMP ?CND58
?ELS100: FSET? OBJ,CONTBIT \?ELS104
FSET? OBJ,OPENBIT /?ELS104
PRINTI "Better open the "
CALL DPRINT,OBJ
PRINTI " first."
CRLF
SET 'P-IT-OBJECT,OBJ
SET 'V,FALSE-VALUE
JUMP ?CND58
?ELS104: FSET? OBJ,CONTBIT /?ELS110
CALL TELL-NOTHING,STR?49,TRUE-VALUE
SET 'V,FALSE-VALUE
JUMP ?CND58
?ELS110: PRINTI "It's not in that."
CRLF
SET 'V,FALSE-VALUE
JUMP ?CND58
?ELS74: EQUAL? PRSA,V?$CALL \?ELS116
CALL V-CALL-LOSE
SET 'V,FALSE-VALUE
JUMP ?CND58
?ELS116: ZERO? P-NONE /?ELS118
PRINTI "I can't find any here!"
CRLF
SET 'V,FALSE-VALUE
JUMP ?CND58
?ELS118: PRINTI "There isn't anything to "
CALL MAIN-VERB-PRINT
PRINTI " here!"
CRLF
SET 'V,FALSE-VALUE
JUMP ?CND58
?ELS64: SET 'P-NOT-HERE,0
SET 'P-MULT,FALSE-VALUE
GRTR? NUM,1 \?CND130
SET 'P-MULT,TRUE-VALUE
?CND130: SET 'TMP,FALSE-VALUE
?PRG133: IGRTR? 'CNT,NUM \?ELS137
GRTR? P-NOT-HERE,0 \?ELS140
PRINTI "The "
EQUAL? P-NOT-HERE,NUM /?CND143
PRINTI "other "
?CND143: PRINTI "object"
EQUAL? P-NOT-HERE,1 /?CND150
PRINTI "s"
?CND150: PRINTI " that you mentioned "
EQUAL? P-NOT-HERE,1 /?ELS159
PRINTI "are"
JUMP ?CND157
?ELS159: PRINTI "is"
?CND157: PRINTI "n't here."
CRLF
JUMP ?REP134
?ELS140: ZERO? TMP \?REP134
PRINTI "I don't know what you're referring to."
CRLF
JUMP ?REP134
?ELS137: ZERO? PTBL /?ELS176
GET P-PRSO,CNT >OBJ1
JUMP ?CND174
?ELS176: GET P-PRSI,CNT >OBJ1
?CND174: ZERO? PTBL /?ELS184
PUSH OBJ1
JUMP ?CND180
?ELS184: PUSH OBJ
?CND180: SET 'PRSO,STACK
ZERO? PTBL /?ELS192
PUSH OBJ
JUMP ?CND188
?ELS192: PUSH OBJ1
?CND188: SET 'PRSI,STACK
GRTR? NUM,1 \?CND196
EQUAL? OBJ1,NOT-HERE-OBJECT \?ELS201
INC 'P-NOT-HERE
JUMP ?PRG133
?ELS201: EQUAL? PRSA,V?TAKE \?ELS203
ZERO? PRSI /?ELS203
GET P-ITBL,P-NC1
GET STACK,0
EQUAL? STACK,W?ALL \?ELS203
IN? PRSO,PRSI /?ELS203
JUMP ?PRG133
?ELS203: EQUAL? P-GETFLAGS,P-ALL \?ELS207
EQUAL? PRSA,V?TAKE \?ELS207
LOC OBJ1
EQUAL? STACK,WINNER,HERE /?ELS213
LOC OBJ1
FSET? STACK,TRANSBIT \?PRG133
?ELS213: FSET? OBJ1,TAKEBIT /?ELS207
FSET? OBJ1,TRYTAKEBIT /?ELS207
JUMP ?PRG133
?ELS207: EQUAL? P-GETFLAGS,P-ALL \?ELS217
EQUAL? PRSA,V?DROP \?ELS217
IN? OBJ1,WINNER /?ELS217
IN? P-IT-OBJECT,WINNER /?ELS217
JUMP ?PRG133
?ELS217: EQUAL? OBJ1,IT \?ELS224
CALL DPRINT,P-IT-OBJECT
JUMP ?CND222
?ELS224: CALL DPRINT,OBJ1
?CND222: PRINTI ": "
?CND196: ZERO? PTBL /?ELS233
PUSH OBJ1
JUMP ?CND229
?ELS233: PUSH OBJ
?CND229: CALL QCONTEXT-CHECK,STACK >V
SET 'TMP,TRUE-VALUE
CALL PERFORM,PRSA,PRSO,PRSI >V
EQUAL? V,M-FATAL \?PRG133
JUMP ?CND58
?REP134:
?CND58: EQUAL? V,M-FATAL /?CND240
LOC WINNER
GETP STACK,P?ACTION
CALL STACK,M-END >V
?CND240: EQUAL? PRSA,V?FOLLOW,V?WALK,V?AGAIN /?CND243
EQUAL? PRSA,V?WAIT /?CND243
CALL GAME-COMMAND?
ZERO? STACK /?ELS245
JUMP ?CND243
?ELS245: SET 'L-PRSA,PRSA
SET 'L-PRSO,PRSO
SET 'L-PRSI,PRSI
SET 'L-WALK-DIR,P-WALK-DIR
SET 'L-WINNER,WINNER
?CND243: EQUAL? V,M-FATAL \?CND6
SET 'P-CONT,FALSE-VALUE
JUMP ?CND6
?ELS8: SET 'P-CONT,FALSE-VALUE
?CND6: ZERO? P-WON /?CND255
CALL GAME-COMMAND?
ZERO? STACK /?ELS261
JUMP ?CND255
?ELS261: EQUAL? PRSA,V?TELL \?ELS263
ZERO? PRSI \?ELS263
JUMP ?CND255
?ELS263: ZERO? CLOCK-WAIT \?THN268
ZERO? I-WAIT-DURATION \?ELS267
?THN268: CALL CLOCKER >V
CALL DETECTOR-NOISE >V
JUMP ?CND255
?ELS267: CALL V-WAIT,I-WAIT-DURATION,FALSE-VALUE >I-WAIT-FLAG
ZERO? I-WAIT-FLAG /?ELS274
CALL I-WAIT-RTN
SET 'I-WAIT-FLAG,FALSE-VALUE
JUMP ?CND272
?ELS274: SET 'I-WAIT-DURATION,0
CALL CLOCKER >V
?CND272: CALL DETECTOR-NOISE >V
?CND255: SET 'PRSA,FALSE-VALUE
SET 'PRSO,FALSE-VALUE
SET 'PRSI,FALSE-VALUE
JUMP ?PRG1
.FUNCT GAME-COMMAND?
EQUAL? PRSA,V?VERBOSE,V?SUPER-BRIEF,V?BRIEF /TRUE
EQUAL? PRSA,V?RESTART,V?RESTORE,V?SAVE /TRUE
EQUAL? PRSA,V?UNSCRIPT,V?SCRIPT,V?QUIT /TRUE
EQUAL? PRSA,V?SCORE,V?VERSION,V?$VERIFY /TRUE
EQUAL? PRSA,V?TIME /TRUE
RFALSE
.FUNCT QCONTEXT-CHECK,PRSO,OTHER,WHO=0,N=0
EQUAL? PRSA,V?LONGITUDE,V?LATITUDE,V?HELP /?THN6
EQUAL? PRSA,V?GIVE,V?TELL,V?SHOW \FALSE
EQUAL? PRSO,PLAYER \FALSE
?THN6: FIRST? HERE >OTHER /?KLU33
?KLU33:
?PRG10: ZERO? OTHER \?ELS14
JUMP ?REP11
?ELS14: FSET? OTHER,PERSON \?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: ZERO? QCONTEXT /FALSE
IN? QCONTEXT,HERE \FALSE
EQUAL? QCONTEXT-ROOM,HERE \FALSE
EQUAL? WINNER,PLAYER \FALSE
SET 'WINNER,QCONTEXT
PRINTI "(said to "
CALL DPRINT,QCONTEXT
PRINTR ")"
.FUNCT SAID-TO,WHO
SET 'WINNER,WHO
SET 'QCONTEXT,WHO
SET 'QCONTEXT-ROOM,HERE
RETURN QCONTEXT-ROOM
.FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI
SET 'OA,PRSA
SET 'OO,PRSO
SET 'OI,PRSI
EQUAL? A,V?WALK /?CND1
EQUAL? IT,I,O \?CND1
PRINTI "I don't see what you are referring to."
CRLF
RETURN 2
?CND1: SET 'PRSA,A
SET 'PRSO,O
ZERO? PRSO /?CND10
EQUAL? PRSI,IT /?CND10
EQUAL? PRSA,V?WALK /?CND10
SET 'P-IT-OBJECT,PRSO
?CND10: SET 'PRSI,I
EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?ELS17
EQUAL? PRSA,V?WALK /?ELS17
CALL NOT-HERE-OBJECT-F >V
ZERO? V /?ELS17
SET 'P-WON,FALSE-VALUE
JUMP ?CND15
?ELS17: SET 'O,PRSO
SET 'I,PRSI
GETP WINNER,P?ACTION
CALL STACK >V
ZERO? V /?ELS24
JUMP ?CND15
?ELS24: LOC WINNER
GETP STACK,P?ACTION
CALL STACK,M-BEG >V
ZERO? V /?ELS26
JUMP ?CND15
?ELS26: GET PREACTIONS,A
CALL STACK >V
ZERO? V /?ELS28
JUMP ?CND15
?ELS28: SET 'I,PRSI
ZERO? I /?ELS30
ZERO? I /?ELS30
GETP I,P?ACTION
CALL STACK >V
ZERO? V /?ELS30
JUMP ?CND15
?ELS30: ZERO? O /?ELS34
EQUAL? A,V?WALK /?ELS34
LOC O
ZERO? STACK /?ELS34
LOC O
GETP STACK,P?CONTFCN
CALL STACK,M-CONT >V
ZERO? V /?ELS34
JUMP ?CND15
?ELS34: ZERO? O /?ELS38
EQUAL? A,V?WALK /?ELS38
GETP O,P?ACTION
CALL STACK >V
ZERO? V /?ELS38
JUMP ?CND15
?ELS38: GET ACTIONS,A
CALL STACK >V
ZERO? V /?CND15
?CND15: EQUAL? V,M-FATAL /?CND43
LOC WINNER
EQUAL? STACK,PRSO \?CND46
SET 'PRSO,FALSE-VALUE
?CND46: LOC WINNER
GETP STACK,P?ACTION
CALL STACK,M-END >V
?CND43: SET 'PRSA,OA
SET 'PRSO,OO
SET 'PRSI,OI
RETURN V
.FUNCT TELL-START-STR
PRINTR "Nights on Hardscrabble Island are lonely and cold when the lighthouse barely pierces the gloom. You sit on your bed, thinking of better times and far-off places. A knock on your door stirs you, and Hevlin, a shipmate you haven't seen for years, staggers in.
""I'm in trouble,"" he says. ""I had a few too many at The Shanty. I was looking for Red, but he wasn't around, and I started talking about ... here,"" he says, handing you a slim volume that you recognize as a shipwreck book written years ago by the Historical Society.
You smile. Every diver on the island has looked for those wrecks, without even an old boot to show for it. You open the door, hoping the drunken fool will leave. ""I know what you're thinkin',"" Hevlin scowls, ""but look!"" He points to the familiar map, and you see new locations marked for two of the wrecks.
""Keep it for me,"" he says. ""Just for tonight. It'll be safe here with you. Don't let -- "" He stops and broods for a moment. ""I've got to go find Red!"" And with that, Hevlin leaves.
You put the book in your dresser and think about following Hevlin. Then you hear a scuffle outside. You look through your window and see two men struggling. One falls to the ground in a heap. The other man bends down beside him, then turns as if startled and runs away. Another man then approaches the wounded figure. He kneels beside him for a long moment, then takes off after the other man.
It isn't long before the police arrive to tell you that Hevlin's been murdered. You don't mention the book, and hours later, as you lie awake in your bed, you wonder if the book could really be what it seems."
.FUNCT ACCESSIBLE?,OBJ,L
LOC OBJ >L
FSET? OBJ,INVISIBLE /FALSE
EQUAL? OBJ,PSEUDO-OBJECT \?ELS7
GETP PSEUDO-OBJECT,P?DESCFCN
EQUAL? STACK,HERE \FALSE
RTRUE
?ELS7: ZERO? L /FALSE
EQUAL? L,GLOBAL-OBJECTS /TRUE
EQUAL? L,LOCAL-GLOBALS \?ELS20
CALL GLOBAL-IN?,OBJ,HERE
ZERO? STACK \TRUE
?ELS20: CALL META-LOC,OBJ
EQUAL? STACK,HERE \FALSE
EQUAL? L,WINNER,HERE /TRUE
FSET? L,OPENBIT /?THN31
FSET? L,PERSON \FALSE
?THN31: CALL ACCESSIBLE?,L
ZERO? STACK /FALSE
RTRUE
.FUNCT VISIBLE?,OBJ,L
LOC OBJ >L
CALL ACCESSIBLE?,OBJ
ZERO? STACK \TRUE
CALL SEE-INSIDE?,L
ZERO? STACK /FALSE
CALL VISIBLE?,L
ZERO? STACK /FALSE
RTRUE
.FUNCT META-LOC,OBJ
?PRG1: ZERO? OBJ /FALSE
EQUAL? OBJ,GLOBAL-OBJECTS,LOCAL-GLOBALS \?CND3
RETURN OBJ
?CND3: IN? OBJ,ROOMS \?ELS10
RETURN OBJ
?ELS10: LOC OBJ >OBJ
JUMP ?PRG1
.ENDI

581
main.zil Normal file
View File

@ -0,0 +1,581 @@
"MAIN for
TOA #2
Copyright (c) 1984 Infocom, Inc. All Rights Reserved.
"
<GLOBAL PLAYER <>>
<GLOBAL P-WON <>>
<CONSTANT M-FATAL 2>
<CONSTANT M-HANDLED 1>
<CONSTANT M-NOT-HANDLED <>>
<CONSTANT M-OBJECT <>>
<CONSTANT M-BEG 1>
<CONSTANT M-END 6>
<CONSTANT M-ENTER 2>
<CONSTANT M-LOOK 3>
<CONSTANT M-FLASH 4>
<CONSTANT M-OBJDESC 5>
<CONSTANT M-CONT 7>
<CONSTANT M-NAME 8>
<ROUTINE GO ()
;"put interrupts on clock chain"
<ENABLE <QUEUE I-UNWOUND 20>>
<ENABLE <QUEUE I-BUSINESS-HOURS 60>>
<ENABLE <QUEUE I-FERRY-APPROACHING 117>>
<ENABLE <QUEUE I-FERRY 120>>
<ENABLE <QUEUE I-HUNGER 15>>
<ENABLE <QUEUE I-THIRST 25>>
<ENABLE <QUEUE I-TIRED 929>>
<ENABLE <QUEUE I-LIVER 10>>
<QUEUE I-DRILL 5>
<QUEUE I-MM-COMPRESSOR 80>
<ENABLE <QUEUE I-PLOT-NEVER-STARTS 60>>
;"set up and go"
%<COND (<NOT <GASSIGNED? PREDGEN>>
'(;<SETG XTELLCHAN <OPEN "READB" ,XTELLFILE>>
<SETG LIT T>))
('<SETG LIT T>)>
<SETG SCORE 8>
<SETG WINNER ,ADVENTURER>
<SETG PLAYER ,WINNER>
<SETG SAMPLE-TREASURE ,GLOBAL-OBJECTS>
<PUT-IN-TABLE ,ENVELOPE ,MCGINTY-HQ ,GLOBAL-SURFACE>
<SETG HERE ,BEDROOM>
;<SETG P-IT-LOC ,HERE>
<SETG P-IT-OBJECT <>>
<COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
<START-MOVEMENT>
<TELL-START-STR>
<CRLF>
<V-VERSION>
<CRLF>)>
<MOVE ,WINNER ,BED>
<V-LOOK>
;<USL>
<MAIN-LOOP>
<AGAIN>>
<ROUTINE MAIN-VERB-PRINT ("AUX" TMP)
<SET TMP <GET ,P-ITBL ,P-VERBN>>
<COND (,P-OFLAG
<PRINTB <GET .TMP 0>>)
(T
<WORD-PRINT <GETB .TMP 2>
<GETB .TMP 3>>)>>
<ROUTINE MAIN-LOOP ("AUX" ICNT OCNT NUM CNT OBJ TBL V PTBL OBJ1 TMP PLACE)
#DECL ((CNT OCNT ICNT NUM) FIX (OBJ) <OR FALSE OBJECT>
(OBJ1) OBJECT (TBL) TABLE (PTBL) <OR FALSE ATOM>)
<REPEAT ()
<SET CNT 0>
<SET OBJ <>>
<SET PTBL T>
<SETG WAITED? <>>
<SETG P-WALK-DIR <>>
;<SETG GROGGIED <>>
<COND (<NOT <==? ,HERE ,QCONTEXT-ROOM>>
<SETG QCONTEXT <>>)>
<COND (<SETG P-WON <PARSER>>
<SETG LAST-PLAYER-LOC <LOC ,PLAYER>>
<SET ICNT <GET ,P-PRSI ,P-MATCHLEN>>
<SET OCNT <GET ,P-PRSO ,P-MATCHLEN>>
<COND (<AND ,P-IT-OBJECT <ACCESSIBLE? ,P-IT-OBJECT>>
<SET TMP <>>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .ICNT>
<RETURN>)
(T
<COND (<EQUAL? <GET ,P-PRSI .CNT> ,IT>
<PUT ,P-PRSI .CNT ,P-IT-OBJECT>
<SET TMP T>
<RETURN>)>)>>
<COND (<NOT .TMP>
<SET CNT 0>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .OCNT>
<RETURN>)
(T
<COND (<EQUAL? <GET ,P-PRSO .CNT> ,IT>
<PUT ,P-PRSO .CNT ,P-IT-OBJECT>
<RETURN>)>)>>)>
<SET CNT 0>)>
<SET NUM
<COND (<0? .OCNT> .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 (<AND <==? ,PRSA ,V?WALK> ,P-WALK-DIR>
<SET V <PERFORM ,PRSA ,PRSO>>)
(<0? .NUM>
<COND (<0? <BAND <GETB ,P-SYNTAX ,P-SBITS> ,P-SONUMS>>
<SET V <PERFORM ,PRSA>>
<SETG PRSO <>>)
(<NOT ,LIT>
<TELL-TOO-DARK>)
(T
;"** M" <COND (.OBJ
<COND (<==? .OBJ ,NOT-HERE-OBJECT>
<GLOBAL-NOT-HERE-PRINT .OBJ>)
(<FSET?
<SET PLACE <LOC ,WINNER>>
,VEHBIT>
<COND (<NOT <EQUAL? .PLACE
;<LOC ,WINNER>
<LOC .OBJ>>>
<TELL "You should get ">
<COND (<FSET? .PLACE ,SURFACEBIT>
<TELL "off">)
(T <TELL "out">)>
<TELL " of ">
<THE? .PLACE>
<TELL D .PLACE " first." CR>
<SET V <>>)>)
(<VERB? GIVE>
<TELL-NOTHING "to ">
<MAIN-VERB-PRINT>
<TELL "." CR>
<SET V <>>)
(<AND <FSET? .OBJ ,CONTBIT>
<NOT <FSET? .OBJ ,OPENBIT>>>
<TELL "Better open the " D .OBJ
" first." CR>
<SETG P-IT-OBJECT .OBJ>
<SET V <>>)
(<NOT <FSET? .OBJ ,CONTBIT>>
<TELL-NOTHING "in that" T>
<SET V <>>)
(T
<TELL "It's not in that." CR>
<SET V <>>)>)
(<VERB? $CALL>
<V-CALL-LOSE>
<SET V <>>)
(,P-NONE
<TELL "I can't find any here!" CR>
<SET V <>>)
(T
<TELL "There isn't anything to ">
<MAIN-VERB-PRINT>
<TELL " here!" CR>
<SET V <>>)>)>)
(T
<SETG P-NOT-HERE 0>
<SETG P-MULT <>>
<COND (<G? .NUM 1> <SETG P-MULT T>)>
<SET TMP <>>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .NUM>
<COND (<G? ,P-NOT-HERE 0>
<TELL "The ">
<COND (<NOT <EQUAL? ,P-NOT-HERE .NUM>>
<TELL "other ">)>
<TELL "object">
<COND (<NOT <EQUAL? ,P-NOT-HERE 1>>
<TELL "s">)>
<TELL " that you mentioned ">
<COND (<NOT <EQUAL? ,P-NOT-HERE 1>>
<TELL "are">)
(T <TELL "is">)>
<TELL "n't here." CR>)
(<NOT .TMP>
<TELL
"I don't know what you're referring to." CR>)>
<RETURN>)
(T
<COND (.PTBL <SET OBJ1 <GET ,P-PRSO .CNT>>)
(T <SET OBJ1 <GET ,P-PRSI .CNT>>)>
<SETG PRSO <COND (.PTBL .OBJ1) (T .OBJ)>>
<SETG PRSI <COND (.PTBL .OBJ) (T .OBJ1)>>
;<COND (<EQUAL? ,HERE ,P-IT-LOC>
<COND (<EQUAL? ,PRSO ,IT>
<SETG PRSO ,P-IT-OBJECT>
<COND (.PTBL
<SET OBJ1 ,PRSO>
<PUT ,P-PRSO
.CNT ,PRSO>)
(T
<SET OBJ ,PRSO>
<PUT ,P-PRSO 1 ,PRSO>)>)
(<EQUAL? ,PRSI ,IT>
<SETG PRSI ,P-IT-OBJECT>
<COND (.PTBL
<SET OBJ ,PRSI>
<PUT ,P-PRSI 1 ,PRSI>)
(T
<SET OBJ1 ,PRSI>
<PUT ,P-PRSI
.CNT ,PRSI>)>)>)>
<COND ;(<VERB? COMPARE> T)
(<G? .NUM 1>
<COND (<EQUAL? .OBJ1
,NOT-HERE-OBJECT>
<SETG P-NOT-HERE
<+ ,P-NOT-HERE 1>>
<AGAIN>)
(<AND <VERB? TAKE>
,PRSI
<EQUAL? <GET <GET ,P-ITBL
,P-NC1>
0>
,W?ALL>
<NOT <IN? ,PRSO ,PRSI>>>
<AGAIN>)
(<AND <EQUAL? ,P-GETFLAGS
,P-ALL>
<VERB? TAKE>
<OR <AND <NOT <EQUAL?
<LOC .OBJ1>
,WINNER
,HERE>>
<NOT <FSET?
<LOC .OBJ1>
,TRANSBIT>>>
<NOT <OR <FSET?
.OBJ1
,TAKEBIT>
<FSET?
.OBJ1
,TRYTAKEBIT>>>>>
<AGAIN>)
(<AND <EQUAL? ,P-GETFLAGS
,P-ALL>
<VERB? DROP>
<NOT <IN? .OBJ1 ,WINNER>>
<NOT <IN? ,P-IT-OBJECT
,WINNER>>>
<AGAIN>)
(T
<COND (<EQUAL? .OBJ1 ,IT>
<DPRINT ,P-IT-OBJECT>)
(T <DPRINT .OBJ1>)>
<TELL ": ">)>)>
<SET V <QCONTEXT-CHECK <COND (.PTBL .OBJ1)
(T .OBJ)>>>
<SET TMP T>
<SET V <PERFORM ,PRSA ,PRSO ,PRSI>>
<COND (<==? .V ,M-FATAL> <RETURN>)>)>>)>
<COND (<NOT <==? .V ,M-FATAL>>
;<COND (<==? <LOC ,WINNER> ,PRSO>
<SETG PRSO <>>)>
;"Removing this code should fix the problem that AGAIN
loses when in a vehicle and it is the PRSO."
<SET V <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-END>>)>
<COND (<OR <VERB? AGAIN WALK FOLLOW>
<VERB? WAIT>
<GAME-COMMAND?>>
T)
(T
<SETG L-PRSA ,PRSA>
<SETG L-PRSO ,PRSO>
<SETG L-PRSI ,PRSI>
<SETG L-WALK-DIR ,P-WALK-DIR>
<SETG L-WINNER ,WINNER>)>
<COND (<==? .V ,M-FATAL> <SETG P-CONT <>>)>)
(T
<SETG P-CONT <>>)>
<COND (,P-WON
<COND (<GAME-COMMAND?>
T)
(<AND <VERB? TELL>
<NOT ,PRSI>>
T)
(<OR ,CLOCK-WAIT <0? ,I-WAIT-DURATION>>
<SET V <CLOCKER>>
<SET V <DETECTOR-NOISE>>)
(T
<SETG I-WAIT-FLAG <V-WAIT ,I-WAIT-DURATION <>>>
<COND (,I-WAIT-FLAG
<APPLY ,I-WAIT-RTN>
<SETG I-WAIT-FLAG <>>)
(T <SETG I-WAIT-DURATION 0> <SET V <CLOCKER>>)>
<SET V <DETECTOR-NOISE>>)>)>
<SETG PRSA <>>
<SETG PRSO <>>
<SETG PRSI <>>>>
<ROUTINE GAME-COMMAND? ()
<COND (<VERB? BRIEF SUPER-BRIEF VERBOSE SAVE RESTORE RESTART
QUIT SCRIPT UNSCRIPT $VERIFY VERSION SCORE TIME>
<RTRUE>)>>
<ROUTINE QCONTEXT-CHECK (PRSO "AUX" OTHER (WHO <>) (N 0))
<COND (<OR <VERB? HELP LATITUDE LONGITUDE>
<AND <VERB? SHOW TELL GIVE> <==? .PRSO ,PLAYER>>> ;"? more?"
<SET OTHER <FIRST? ,HERE>>
<REPEAT ()
<COND (<NOT .OTHER> <RETURN>)
(<AND <FSET? .OTHER ,PERSON>
<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
<IN? ,QCONTEXT ,HERE>
<==? ,QCONTEXT-ROOM ,HERE>
<==? ,WINNER ,PLAYER>> ;"? more?"
<SETG WINNER ,QCONTEXT>
<TELL "(said to " D ,QCONTEXT ")" CR>)>)>>
<ROUTINE SAID-TO (WHO)
<SETG WINNER .WHO>
<SETG QCONTEXT .WHO>
<SETG QCONTEXT-ROOM ,HERE>>
<GLOBAL P-MULT <>>
<GLOBAL P-NOT-HERE 0>
<GLOBAL L-PRSA <>>
<GLOBAL L-PRSO <>>
<GLOBAL L-PRSI <>>
<GLOBAL L-WINNER <>>
<GLOBAL LAST-PLAYER-LOC <>>
;"PERFORM without DEBUG"
<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)
<SET OA ,PRSA>
<SET OO ,PRSO>
<SET OI ,PRSI>
<COND (<AND <NOT <==? .A ,V?WALK>>
<EQUAL? ,IT .I .O>>
;<AND <EQUAL? ,IT .I .O>
<NOT <EQUAL? ,P-IT-LOC ,HERE>>>
<TELL "I don't see what you are referring to." CR>
<RFATAL>)>
;<COND (<==? .O ,IT> <SET O ,P-IT-OBJECT>)>
;<COND (<==? .I ,IT> <SET I ,P-IT-OBJECT>)>
<SETG PRSA .A>
<SETG PRSO .O>
<COND (<AND ,PRSO <NOT <EQUAL? ,PRSI ,IT>> <NOT <VERB? WALK>>>
<SETG P-IT-OBJECT ,PRSO>
;<SETG P-IT-LOC ,HERE>)>
<SETG PRSI .I>
<COND (<AND <EQUAL? ,NOT-HERE-OBJECT ,PRSO ,PRSI>
<NOT <VERB? WALK>>
<SET V <NOT-HERE-OBJECT-F>>>
<SETG P-WON <>>
.V)
(T
<SET O ,PRSO>
<SET I ,PRSI>
<COND
(<SET V <APPLY <GETP ,WINNER ,P?ACTION>>> .V)
(<SET V <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-BEG>> .V)
(<SET V <APPLY <GET ,PREACTIONS .A>>> .V)
(<AND <SET I ,PRSI> .I <SET V <APPLY <GETP .I ,P?ACTION>>>> .V)
(<AND .O
<NOT <==? .A ,V?WALK>>
<LOC .O>
<SET V <APPLY <GETP <LOC .O> ,P?CONTFCN> ,M-CONT>>>
.V)
(<AND .O
<NOT <==? .A ,V?WALK>>
<SET V <APPLY <GETP .O ,P?ACTION>>>>
.V)
(<SET V <APPLY <GET ,ACTIONS .A>>> .V)>)>
<COND (<NOT <==? .V ,M-FATAL>>
<COND (<==? <LOC ,WINNER> ,PRSO>
<SETG PRSO <>>)>
<SET V <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-END>>)>
<SETG PRSA .OA>
<SETG PRSO .OO>
<SETG PRSI .OI>
.V>
;"PERFORM with DEBUG"
;<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: PRSA = ">
%<COND (<GASSIGNED? PREDGEN> '<TELL N .A>)
(T '<PRINC <NTH ,ACTIONS <+ <* .A 2> 1>>>)>
<COND (<AND .O <NOT <==? .A ,V?WALK>>>
<TELL "/PRSO = " D .O>)>
<COND (.I <TELL "/PRSI = " D .I>)>)>
<SET OA ,PRSA>
<SET OO ,PRSO>
<SET OI ,PRSI>
<COND (<AND <NOT <==? .A ,V?WALK>>
<EQUAL? ,IT .I .O>>
;<AND <EQUAL? ,IT .I .O>
<NOT <EQUAL? ,P-IT-LOC ,HERE>>>
<TELL "I don't see what you are referring to." CR>
<RFATAL>)>
;<COND (<==? .O ,IT> <SET O ,P-IT-OBJECT>)>
;<COND (<==? .I ,IT> <SET I ,P-IT-OBJECT>)>
<SETG PRSA .A>
<SETG PRSO .O>
<COND (<AND ,PRSO <NOT <EQUAL? ,PRSI ,IT>> <NOT <VERB? WALK>>>
<SETG P-IT-OBJECT ,PRSO>
;<SETG P-IT-LOC ,HERE>)>
<SETG PRSI .I>
<COND (<AND <EQUAL? ,NOT-HERE-OBJECT ,PRSO ,PRSI>
<NOT <VERB? WALK>>
<SET V <D-APPLY "Not Here" ,NOT-HERE-OBJECT-F>>>
<SETG P-WON <>>
.V)
(T
<SET O ,PRSO>
<SET I ,PRSI>
<COND (<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 <SET I ,PRSI> .I <SET V <D-APPLY "PRSI"
<GETP .I ,P?ACTION>>>> .V)
(<AND .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>
<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>
;"Next 2 routines for use with DEBUG"
;<ROUTINE DD-APPLY (STR OBJ FCN "OPTIONAL" (FOO <>))
<COND (,DEBUG <TELL "[" D .OBJ "=]">)>
<D-APPLY .STR .FCN .FOO>>
;<ROUTINE D-APPLY (STR FCN "OPTIONAL" (FOO <>) "AUX" RES)
<COND (<NOT .FCN> <>)
(T
<COND (,DEBUG
<COND (<NOT .STR>
<TELL "[Action:]" CR>)
(T <TELL "[" .STR ": ">)>)>
<COND (<==? .STR "Container">
<SET FOO ,M-CONT>)>
<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)>>
<ROUTINE TELL-START-STR () ;"submitted by a committee"
<TELL
"Nights on Hardscrabble Island are lonely and cold when the lighthouse
barely pierces the gloom. You sit on your bed, thinking of better times
and far-off places. A knock on your door stirs you, and Hevlin, a shipmate
you haven't seen for years, staggers in.|
|
\"I'm in trouble,\" he says. \"I had a few too many at The Shanty.
I was looking for Red, but he wasn't around, and I started talking about ...
here,\" he says, handing you a slim volume that you recognize
as a shipwreck book written years ago by the Historical Society.|
|
You smile. Every diver on the island has looked for those wrecks,
without even an old boot to show for it. You open the door, hoping the
drunken fool will leave. \"I know what you're thinkin',\" Hevlin scowls,
\"but look!\" He points to the familiar map, and you see new locations
marked for two of the wrecks.|
|
\"Keep it for me,\" he says. \"Just for tonight. It'll be safe here with
you. Don't let -- \" He stops and broods for a moment. \"I've got to go
find Red!\" And with that, Hevlin leaves.|
|
You put the book in your dresser and think about following Hevlin. Then you
hear a scuffle outside. You look through your window and see two men
struggling. One falls to the ground in a heap. The other man bends
down beside him, then turns as if startled and runs away. Another man then
approaches the wounded figure. He kneels beside him for a long moment,
then takes off after the other man.|
|
It isn't long before the police arrive to tell you that Hevlin's been
murdered. You don't mention the book, and hours later, as you lie awake
in your bed, you wonder if the book could really be what it seems." CR>>
<ROUTINE ACCESSIBLE? (OBJ "AUX" (L <LOC .OBJ>)) ;"can player TOUCH object?"
;"revised 5/2/84 by SEM and SWG"
<COND (<FSET? .OBJ ,INVISIBLE> <RFALSE>)
(<EQUAL? .OBJ ,PSEUDO-OBJECT>
<COND (<EQUAL? <GETP ,PSEUDO-OBJECT ,P?DESCFCN> ,HERE>
<RTRUE>)
(T
<RFALSE>)>)
(<NOT .L> <RFALSE>)
(<EQUAL? .L ,GLOBAL-OBJECTS> <RTRUE>)
(<AND <EQUAL? .L ,LOCAL-GLOBALS>
<GLOBAL-IN? .OBJ ,HERE>>
<RTRUE>)
(<NOT <EQUAL? <META-LOC .OBJ> ,HERE>> <RFALSE>)
(<EQUAL? .L ,WINNER ,HERE> <RTRUE>)
(<AND <OR <FSET? .L ,OPENBIT>
<FSET? .L ,PERSON>>
<ACCESSIBLE? .L>>
<RTRUE>)
(T <RFALSE>)>>
<ROUTINE VISIBLE? (OBJ "AUX" (L <LOC .OBJ>)) ;"can player SEE object"
;"revised 5/2/84 by SEM and SWG"
<COND (<ACCESSIBLE? .OBJ>
<RTRUE>)
(<AND <SEE-INSIDE? .L>
<VISIBLE? .L>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE META-LOC (OBJ)
<REPEAT ()
<COND (<NOT .OBJ> <RFALSE>)
(<EQUAL? .OBJ ,GLOBAL-OBJECTS ,LOCAL-GLOBALS>
<RETURN .OBJ>)>
<COND (<IN? .OBJ ,ROOMS>
<RETURN .OBJ>)
(ELSE
<SET OBJ <LOC .OBJ>>)>>>

1521
parser.zap Normal file

File diff suppressed because it is too large Load Diff

1494
parser.zil Normal file

File diff suppressed because it is too large Load Diff

1905
people.zap Normal file

File diff suppressed because it is too large Load Diff

2313
people.zil Normal file

File diff suppressed because it is too large Load Diff

2
syntax.zap Normal file
View File

@ -0,0 +1,2 @@
.ENDI

821
syntax.zil Normal file
View File

@ -0,0 +1,821 @@
"SYNTAX for
TOA #2
(c) Copyright 1984 Infocom, Inc. All Rights Reserved.
"
"SUBTITLE VOCABULARY"
<BUZZ A AN THE IS AND SOME OF THEN ALL ONE BUT EXCEPT \. \, \"
WHY HOW WHEN DID ARE HERE MY CLOSELY ;CAREFULLY QUIETLY
SLOWLY QUICKLY BRIEFLY PLEASE MINUTE>
;<SYNONYM WITH USING THROUGH>
<SYNONYM THROUGH THRU>
<SYNONYM ON ONTO>
<SYNONYM IN INSIDE INTO>
<SYNONYM UNDER BELOW BENEATH UNDERNEATH>
<SYNONYM NORTH N FORE FORWARD F>
<SYNONYM SOUTH S AFT ABAFT>
<SYNONYM EAST E STARBO SB>
<SYNONYM WEST W PORT P>
<SYNONYM DOWN D DOWNSTAIRS>
<SYNONYM UP U UPSTAIRS>
<SYNONYM NW NORTHWEST>
<SYNONYM NE NORTHE>
<SYNONYM SW SOUTHWEST>
<SYNONYM SE SOUTHE>
\
"ZORK game commands"
<SYNTAX BRIEF = V-BRIEF>
<SYNTAX SUPER = V-SUPER-BRIEF>
<SYNONYM SUPER SUPERBRIEF>
<SYNTAX DIAGNOSE = V-DIAGNOSE>
;<SYNTAX $DEBUG = V-$DEBUG>
;<SYNTAX $FUBLIO = V-$W1>
;<SYNTAX $WRECK = V-$W2>
;<SYNTAX $DC = V-DEPTH-CHECK>
;<SYNTAX $DIVETIME = V-$DIVETIME>
<SYNTAX INVENTORY = V-INVENTORY>
<SYNONYM INVENTORY I>
<SYNTAX QUIT = V-QUIT>
<SYNONYM QUIT Q>
<SYNTAX RESTART = V-RESTART>
<SYNTAX RESTORE = V-RESTORE>
<SYNTAX SAVE = V-SAVE>
<SYNTAX SCORE = V-SCORE>
<SYNONYM SCORE RATING PROGRESS>
<SYNTAX $VERIFY = V-$VERIFY>
<SYNTAX VERSION = V-VERSION>
<SYNTAX VERBOSE = V-VERBOSE>
\
"SUBTITLE REAL VERBS"
<SYNTAX AGAIN = V-AGAIN>
<SYNONYM AGAIN G>
<SYNTAX AIM OBJECT ;(FIND WEAPONBIT) AT OBJECT = V-AIM>
<SYNONYM AIM POINT>
;<SYNTAX ANSWER = V-ANSWER>
;<SYNTAX ANSWER OBJECT = V-REPLY>
;<SYNONYM ANSWER REPLY>
<SYNTAX APPLY OBJECT TO OBJECT = V-PUT PRE-PUT>
<SYNTAX ASK OBJECT (FIND PERSON) = V-TELL PRE-TELL>
<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>
<SYNTAX ASK OBJECT (FIND PERSON)
FOR OBJECT (HELD CARRIED ;HAVE) = V-ASK-FOR>
<SYNONYM ASK QUESTION INQUIRE>
<SYNTAX ATTACK
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
WITH
OBJECT ;(FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-ATTACK>
<SYNONYM ATTACK FIGHT HURT INJURE>
<SYNTAX BACK = V-BACK>
;<SYNTAX BLAST = V-BLAST>
<SYNTAX BOARD OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM)
= V-BOARD PRE-BOARD>
<SYNTAX BRACE OBJECT WITH OBJECT = V-BRACE PRE-BRACE>
<SYNONYM BRACE SUPPORT>
<SYNTAX BREATHE = V-BREATHE>
<SYNTAX BREATHE OBJECT = V-BREATHE>
;<SYNTAX BUG = V-BUG>
<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 BURN INCINERATE IGNITE>
<SYNTAX BUY OBJECT (IN-ROOM ON-GROUND) (MANY)= V-BUY PRE-BUY>
<SYNTAX BUY OBJECT (IN-ROOM ON-GROUND) (MANY)
FROM OBJECT (FIND VICBIT) (ON-GROUND) = V-BUY PRE-BUY>
<SYNONYM BUY PURCHASE ORDER>
<SYNTAX $CALL OBJECT = V-$CALL PRE-$CALL>
<SYNTAX CALL OBJECT = V-CALL>
<SYNTAX CALL TO OBJECT = V-CALL>
<SYNTAX CHECK OBJECT = V-EXAMINE PRE-EXAMINE>
<SYNTAX CHECK FOR OBJECT = V-FIND>
<SYNTAX CHOMP = V-CHOMP>
<SYNONYM CHOMP LOSE BARF>
<SYNTAX CLEAN OBJECT = V-CLEAN>
<SYNONYM CLEAN SCRUB POLISH>
<SYNTAX CLIMB UP OBJECT (FIND RMUNGBIT) (ON-GROUND IN-ROOM) = V-CLIMB-FOO>
<SYNTAX CLIMB DOWN OBJECT ;(FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
<SYNTAX CLIMB OBJECT ;(FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-FOO>
<SYNTAX CLIMB IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
<SYNTAX CLIMB ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
<SYNTAX CLIMB THROUGH OBJECT (ON-GROUND IN-ROOM) = V-THROUGH>
<SYNTAX CLIMB OUT OBJECT (ON-GROUND IN-ROOM) = V-THROUGH>
<SYNONYM CLIMB>
<SYNTAX SIT ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-SIT-ON>
<SYNTAX SIT DOWN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-SIT>
<SYNTAX SIT IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-SIT-ON>
<SYNTAX SIT WITH OBJECT = V-SIT-WITH>
<SYNTAX CLOSE
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-CLOSE>
<SYNONYM CLOSE SHUT>
;<SYNTAX COMPARE OBJECT TO OBJECT = V-COMPARE PRE-COMPARE>
;<SYNTAX COMPARE OBJECT WITH OBJECT = V-COMPARE PRE-COMPARE>
;<SYNTAX COMPARE OBJECT (HELD CARRIED MANY) = V-FOO-COMPARE>
<SYNTAX COUNT OBJECT = V-COUNT>
<SYNTAX CROSS OBJECT = V-CROSS>
<SYNONYM CROSS FORD>
<SYNTAX CUT OBJECT WITH OBJECT ;(FIND WEAPONBIT) (CARRIED HELD) = V-CUT>
<SYNONYM CUT SLICE PIERCE SCRAPE>
<SYNTAX CURSE = V-CURSES>
<SYNTAX CURSE OBJECT (FIND VICBIT) = V-CURSES>
<SYNONYM CURSE SWEAR CUSS DAMN FUCK SHIT HELL>
<SYNTAX DEFLATE OBJECT = V-DEFLATE>
<SYNTAX DEPOSIT OBJECT = V-DEPOSIT>
<SYNTAX DEPOSIT OBJECT (ON-GROUND HELD MANY) IN OBJECT = V-DEPOSIT>
<SYNTAX DEPOSIT OBJECT (ON-GROUND HELD MANY) ON OBJECT = V-PUT-ON PRE-PUT>
<SYNTAX DIG
OBJECT (ON-GROUND IN-ROOM)
WITH
OBJECT (FIND TOOLBIT) (HELD CARRIED HAVE)
= V-DIG PRE-DIG ;*>
<SYNTAX DIG
IN
OBJECT (ON-GROUND IN-ROOM)
WITH
OBJECT (FIND TOOLBIT) (HELD CARRIED HAVE)
= V-DIG PRE-DIG>
<SYNTAX DIG OBJECT IN OBJECT = V-HOLE-DIG>
;<SYNTAX DIG WITH OBJECT = V-DIG-WITH>
;<SYNTAX DIP OBJECT (FIND BURNBIT) (HELD CARRIED HAVE)
IN OBJECT (ON-GROUND HAVE) = V-DIP-IN>
;<SYNONYM DIP IMMERSE SUBMERGE DUNK>
<SYNTAX DISEMBARK = V-EXIT>
<SYNTAX DISEMBARK OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM)
= V-DISEMBARK>
<SYNTAX DIVE = V-DIVE>
<SYNTAX DIVE IN OBJECT = V-DIVE>
<SYNTAX DRILL OBJECT WITH OBJECT (FIND TOOLBIT) = V-DRILL PRE-DRILL>
<SYNTAX DRILL OBJECT IN OBJECT = V-DRILL-IN PRE-DRILL-IN>
<SYNTAX DRINK
OBJECT (FIND DRINKBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-DRINK PRE-DRINK>
;<SYNTAX DRINK FROM OBJECT (HELD CARRIED) = V-DRINK-FROM>
;<SYNTAX DRINK OBJECT (FIND DRINKBIT)
IN OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND) = V-DRINK-FROM>
;<SYNTAX DRINK OBJECT (FIND DRINKBIT)
FROM OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND) = V-DRINK-FROM>
<SYNONYM DRINK IMBIBE SWALLOW SIP GUZZLE>
<SYNTAX DROP OBJECT (HELD MANY HAVE) = V-DROP ;*>
<SYNTAX DROP OBJECT (HELD MANY HAVE) DOWN 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 DROP RELEASE>
<SYNTAX LEAN ON OBJECT (HELD HAVE) = V-LEAN-ON>
<SYNTAX EAT
OBJECT (FIND FOODBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-EAT PRE-EAT>
<SYNONYM EAT CONSUME BITE CHEW MUNCH NIBBLE>
<SYNTAX TASTE OBJECT (HELD CARRIED ON-GROUND IN-ROOM ;MANY) = V-TASTE>
<SYNTAX EMPTY OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-EMPTY>
<SYNTAX ENTER = V-ENTER>
<SYNTAX ENTER OBJECT = V-THROUGH>
<SYNTAX EXIT = V-EXIT>
<SYNTAX EXIT OBJECT = V-DISEMBARK>
<SYNTAX EXAMINE OBJECT (HELD CARRIED ON-GROUND IN-ROOM ;MANY) = V-EXAMINE
PRE-EXAMINE>
;<SYNTAX EXAMINE IN OBJECT (HELD CARRIED IN-ROOM ON-GROUND ;MANY)
= V-LOOK-INSIDE>
;<SYNTAX EXAMINE ON OBJECT (HELD CARRIED IN-ROOM ON-GROUND ;MANY)
= V-LOOK-INSIDE>
<SYNONYM EXAMINE DESCRIBE>
;<SYNTAX EXORCISE OBJECT = V-EXORCISE>
;<SYNTAX EXORCISE OUT OBJECT (FIND VICBIT) = V-EXORCISE>
;<SYNTAX EXORCISE AWAY OBJECT (FIND VICBIT) = V-EXORCISE>
;<SYNONYM EXORCISE BANISH CAST DRIVE BEGONE>
<SYNTAX EXTINGUISH
OBJECT
;(FIND FLAMEBIT) (MANY HELD CARRIED ON-GROUND IN-ROOM ;TAKE HAVE)
= V-LAMP-OFF>
<SYNONYM EXTINGUISH DOUSE>
<SYNTAX FILL OBJECT (HELD CARRIED ON-GROUND TAKE HAVE) WITH OBJECT = V-FILL>
;<SYNTAX FILL IN OBJECT (ON-GROUND IN-ROOM) = V-FILL-IN>
<SYNTAX FILL OBJECT (HELD CARRIED ON-GROUND TAKE HAVE) = V-FILL>
;<SYNTAX FILL OUT OBJECT = V-FILL-OUT>
<SYNTAX FIND OBJECT = V-FIND>
<SYNONYM FIND WHERE SEEK SEE>
<SYNTAX FOLLOW = V-FOLLOW>
<SYNTAX FOLLOW OBJECT = V-FOLLOW>
<SYNONYM FOLLOW PURSUE CHASE COME>
<SYNTAX GIVE
OBJECT ;(MANY ;HELD ;HAVE ;CARRIED ;ON-GROUND ;IN-ROOM)
TO
OBJECT (FIND VICBIT) (ON-GROUND)
= V-GIVE PRE-GIVE>
<SYNTAX GIVE
OBJECT (FIND VICBIT) (ON-GROUND)
OBJECT ;(MANY ;HELD ;HAVE ;CARRIED)
= V-SGIVE PRE-SGIVE>
<SYNONYM GIVE HAND DONATE OFFER FEED PAY>
<SYNTAX GOODBYE = V-GOODBYE>
<SYNTAX GOODBYE OBJECT = V-GOODBYE>
<SYNONYM GOODBYE BYE>
<SYNTAX HELLO = V-HELLO ;*>
<SYNTAX HELLO OBJECT = V-HELLO>
<SYNONYM HELLO HI>
<SYNTAX HELP = V-HELP>
<SYNTAX HELP OBJECT = V-HELP>
<SYNTAX HIDE UNDER OBJECT = V-HIDE>
<SYNTAX HIDE IN OBJECT = V-HIDE>
<SYNTAX HIDE BEHIND OBJECT = V-HIDE>
<SYNTAX HIDE OBJECT (HELD HAVE) UNDER OBJECT = V-HIDE-UNDER>
<SYNTAX HIDE OBJECT (HELD HAVE) IN OBJECT = V-HIDE>
<SYNTAX HIDE OBJECT (HELD HAVE) BEHIND OBJECT = V-HIDE>
<SYNTAX BLOW OUT OBJECT (HELD CARRIED ON-GROUND HAVE) = V-LAMP-OFF>
<SYNTAX BLOW UP
OBJECT
WITH
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
= V-INFLATE ;*>
;<SYNTAX BLOW UP OBJECT = V-BLAST>
<SYNTAX INFLAT
OBJECT
WITH
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
= V-INFLATE>
<SYNTAX JUMP = V-LEAP>
<SYNTAX JUMP OVER OBJECT = V-LEAP>
<SYNTAX JUMP ACROSS OBJECT = V-LEAP>
<SYNTAX JUMP IN OBJECT = V-LEAP>
<SYNTAX JUMP FROM OBJECT = V-DISEMBARK>
<SYNTAX JUMP OFF OBJECT = V-DISEMBARK>
;<SYNTAX JUMP OBJECT = V-JUMP-ROPE>
<SYNONYM JUMP LEAP>
<SYNTAX KICK OBJECT = V-KICK>
<SYNONYM KICK>
<SYNTAX KILL
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
WITH
OBJECT ;(FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-KILL>
<SYNONYM KILL MURDER SLAY DISPATCH STAB>
<SYNTAX KISS OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM) = V-KISS>
<SYNTAX KNOCK AT OBJECT = V-KNOCK ;*>
<SYNTAX KNOCK ON OBJECT = V-KNOCK>
<SYNTAX KNOCK OVER OBJECT = V-PUSH>
<SYNTAX KNOCK DOWN OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM) = V-ATTACK>
<SYNONYM KNOCK RAP>
<SYNTAX LATITUDE OBJECT = V-LATITUDE ;PRE-LATITUDE>
<SYNTAX LONGITUDE OBJECT = V-LONGITUDE ;PRE-LATITUDE>
<SYNTAX LAUNCH OBJECT (FIND VEHBIT) = V-LAUNCH>
<SYNTAX LEAVE = V-LEAVE>
<SYNTAX LEAVE OBJECT = V-DROP>
<SYNTAX LIGHT
OBJECT ;(FIND LIGHTBIT) ;(FIND BURNBIT)
(CARRIED ON-GROUND IN-ROOM)
= V-LAMP-ON ;*>
<SYNTAX LIGHT
OBJECT ;(FIND LIGHTBIT) ;(FIND BURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH
OBJECT ;(FIND FLAMEBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-BURN PRE-BURN>
<SYNONYM LIGHT START>
<SYNTAX LISTEN TO OBJECT = V-LISTEN>
<SYNTAX LISTEN FOR OBJECT = V-LISTEN>
<SYNTAX LOCK
OBJECT (ON-GROUND IN-ROOM)
WITH
OBJECT (FIND TOOLBIT) (TAKE HELD CARRIED ON-GROUND IN-ROOM)
= V-LOCK>
<SYNTAX LOOK = V-LOOK>
<SYNTAX LOOK AROUND OBJECT (FIND RMUNGBIT) = V-LOOK>
;<SYNTAX LOOK UP OBJECT (FIND RMUNGBIT) = V-LOOK-UP>
;<SYNTAX LOOK UP OBJECT = V-LOOK-UP>
<SYNTAX LOOK AT OBJECT (HELD CARRIED ON-GROUND IN-ROOM ;MANY) = V-EXAMINE
PRE-EXAMINE>
<SYNTAX LOOK WITH OBJECT = V-LOOK-INSIDE>
<SYNTAX LOOK THROUGH OBJECT = V-LOOK-INSIDE>
<SYNTAX LOOK OUT OBJECT = V-LOOK-INSIDE>
<SYNTAX LOOK UNDER OBJECT = V-LOOK-UNDER>
<SYNTAX LOOK BEHIND OBJECT = V-LOOK-BEHIND>
;<SYNTAX LOOK DOWN OBJECT = V-LOOK-DOWN>
<SYNTAX LOOK IN OBJECT (HELD CARRIED ON-GROUND IN-ROOM ;MANY) = V-LOOK-INSIDE
PRE-LOOK-IN>
<SYNTAX LOOK ON OBJECT (HELD CARRIED ON-GROUND IN-ROOM ;MANY) = V-LOOK-INSIDE
PRE-LOOK-ON>
<SYNTAX LOOK AT OBJECT (HELD CARRIED ON-GROUND IN-ROOM ;MANY) WITH OBJECT =
V-READ PRE-READ>
<SYNTAX LOOK FOR OBJECT = V-FIND>
<SYNTAX LOOK OBJECT = V-CHASTISE>
<SYNONYM LOOK L STARE GAZE PEER>
<SYNTAX SEARCH OBJECT = V-SEARCH>
<SYNTAX SEARCH IN OBJECT = V-SEARCH>
<SYNTAX SEARCH FOR OBJECT = V-FIND>
<SYNTAX LOWER OBJECT = V-LOWER>
<SYNTAX LOWER OBJECT DOWN OBJECT = V-PUT PRE-PUT>
<SYNTAX MAKE OBJECT = V-MAKE>
<SYNTAX MAYBE = V-MAYBE>
<SYNONYM MAYBE DUNNO>
<SYNTAX MELT
OBJECT
WITH
OBJECT ;(FIND FLAMEBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-MELT>
<SYNONYM MELT LIQUIFY>
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM) OBJECT = V-PUSH-TO ;PRE-PUSH-TO>
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM) WITH OBJECT = V-MOVE PRE-MOVE>
<SYNTAX ROLL UP OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNTAX PLAY OBJECT = V-PLAY>
;<SYNTAX PRICE OBJECT = V-PRICE>
;<SYNTAX PRICE OF OBJECT = V-PRICE>
<SYNTAX PULL OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNTAX PULL ON OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
;<SYNTAX PULL UP OBJECT (ON-GROUND IN-ROOM) = V-PULL-UP PRE-PULL-UP>
;<SYNTAX PULL OBJECT THROUGH OBJECT (ON-GROUND IN-ROOM) = V-PULL-UP PRE-PULL-UP>
<SYNTAX PULL OBJECT (ON-GROUND IN-ROOM) OBJECT = V-PUSH-TO ;PRE-PUSH-TO>
<SYNONYM PULL TUG YANK>
<SYNTAX MUMBLE = V-MUMBLE>
<SYNONYM MUMBLE SIGH>
<SYNTAX DESTROY
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
WITH
OBJECT (HELD CARRIED HAVE)
= V-MUNG PRE-MUNG>
<SYNTAX DESTROY IN OBJECT = V-CHIP PRE-CHIP>
<SYNTAX DESTROY IN OBJECT (ON-GROUND IN-ROOM)
WITH
OBJECT (HELD CARRIED HAVE) = V-MUNG PRE-MUNG>
<SYNTAX DESTROY
DOWN
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
WITH
OBJECT (HELD CARRIED HAVE)
= V-MUNG PRE-MUNG>
<SYNONYM DESTROY DAMAGE BREAK SMASH CHOP CHIP HIT>
<SYNTAX LUBRICATE OBJECT WITH OBJECT (HELD CARRIED) = V-OIL ;PRE-OIL>
<SYNONYM LUBRICATE GREASE>
<SYNTAX NO = V-NO>
<SYNONYM NO NEGATIVE NOPE UH-UH>
<SYNTAX OPEN
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-OPEN PRE-OPEN>
<SYNTAX OPEN
UP
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-OPEN PRE-OPEN>
<SYNTAX OPEN
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH
OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
= V-OPEN PRE-OPEN>
<SYNTAX PICK OBJECT = V-PICK>
<SYNTAX PICK OBJECT WITH OBJECT (HELD CARRIED HAVE) = V-PICK>
<SYNTAX PICK UP
OBJECT (FIND TAKEBIT)
(ON-GROUND MANY)
= V-TAKE PRE-TAKE>
<SYNTAX PLUG OBJECT WITH OBJECT (HELD CARRIED HAVE) = V-PLUG>
<SYNONYM PLUG GLUE PATCH REPAIR FIX>
;<SYNTAX PLUGH = V-ADVENTURE>
;<SYNONYM PLUGH XYZZY>
<SYNTAX POKE
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
WITH
OBJECT ;(FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-MUNG PRE-MUNG>
<SYNONYM POKE JAB BLIND>
<SYNTAX POUR OBJECT (HELD CARRIED) = V-POUR ;*>
<SYNTAX POUR OBJECT (HELD CARRIED) IN OBJECT = V-POUR-IN>
<SYNTAX POUR OBJECT (HELD CARRIED) ON OBJECT = V-POUR-ON ;PRE-POUR-ON>
<SYNTAX POUR OBJECT (HELD CARRIED) FROM OBJECT = V-POUR>
<SYNONYM POUR SPILL>
<SYNTAX PRAY = V-PRAY>
<SYNTAX PRAY FOR OBJECT = V-PRAY>
<SYNTAX PUMP UP OBJECT = V-PUMP>
<SYNTAX PUMP UP OBJECT WITH OBJECT = V-PUMP>
<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
<SYNTAX PUSH ON OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
<SYNTAX PUSH OBJECT (ON-GROUND IN-ROOM) OFF OBJECT = V-PUSH-OFF>
<SYNTAX PUSH OBJECT (ON-GROUND IN-ROOM) OBJECT = V-PUSH-TO>
<SYNTAX PUSH OBJECT (ON-GROUND IN-ROOM) TO OBJECT = V-PUSH-TO ;PRE-PUSH-TO>
<SYNTAX PUSH OBJECT (HELD CARRIED HAVE) UNDER OBJECT = V-PUSH-UNDER>
<SYNTAX PUSH OBJECT (HELD CARRIED HAVE) THROUGH OBJECT = V-PUSH-THROUGH>
<SYNTAX PUSH UP OBJECT = V-MOVE PRE-MOVE>
<SYNONYM PUSH PRESS SHOVE>
<SYNTAX PUT OBJECT (ON-GROUND HELD MANY)
IN OBJECT = V-PUT PRE-PUT ;*>
<SYNTAX PUT OBJECT (ON-GROUND HELD MANY)
ON OBJECT = V-PUT-ON PRE-PUT>
<SYNTAX PUT DOWN OBJECT (HELD MANY) = V-DROP>
<SYNTAX PUT OBJECT (HELD MANY HAVE) UNDER OBJECT = V-PUT-UNDER>
<SYNTAX PUT ON OBJECT (IN-ROOM ON-GROUND CARRIED MANY) = V-WEAR>
<SYNTAX PUT OBJECT (HELD MANY HAVE) BEHIND OBJECT = V-HIDE>
<SYNTAX PUT OBJECT (HELD HAVE) AGAINST OBJECT = V-PUT-AGAINST>
<SYNTAX PUT OBJECT (HELD HAVE) BY OBJECT = V-PUT-AGAINST>
<SYNTAX PUT OBJECT (HELD HAVE) AT OBJECT = V-PUT-AGAINST>
<SYNTAX PUT OBJECT (HELD HAVE) ACROSS OBJECT = V-PUT-ACROSS>
<SYNTAX PUT OBJECT (HELD HAVE) OVER OBJECT = V-PUT-ACROSS>
<SYNTAX PUT OBJECT (HELD HAVE) BETWEEN OBJECT = V-PUT-ON PRE-PUT>
<SYNONYM PUT STUFF INSERT PLACE WEDGE>
<SYNTAX RAISE OBJECT = V-MOVE PRE-MOVE>
<SYNTAX RAISE UP OBJECT = V-MOVE PRE-MOVE>
<SYNTAX RAISE OBJECT WITH OBJECT = V-MOVE PRE-MOVE>
<SYNONYM RAISE LIFT>
<SYNTAX RAPE OBJECT (FIND VICBIT) = V-RAPE>
<SYNONYM RAPE MOLEST>
<SYNTAX REACH IN OBJECT (FIND OPENBIT) = V-REACH-IN PRE-REACH-IN>
<SYNTAX READ
OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-READ PRE-READ ; *>
<SYNTAX READ IN OBJECT (HELD CARRIED HAVE) = V-READ-INSIDE>
<SYNTAX READ
OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH
OBJECT (HELD CARRIED HAVE)
= V-READ PRE-READ>
<SYNONYM READ SKIM>
<SYNTAX RENT OBJECT (IN-ROOM ON-GROUND MANY) = V-RENT>
<SYNTAX RENT OBJECT (IN-ROOM ON-GROUND MANY)
FROM OBJECT (FIND VICBIT) (ON-GROUND) = V-RENT>
<SYNONYM RENT LEASE>
;<SYNTAX REPENT = V-REPENT>
<SYNTAX ROB OBJECT = V-ROB>
<SYNTAX ROLL OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
<SYNTAX ROLL OBJECT (ON-GROUND IN-ROOM) OBJECT = V-PUSH-TO ;PRE-PUSH-TO>
<SYNTAX ROLL OBJECT (ON-GROUND IN-ROOM) TO OBJECT = V-PUSH-TO ;PRE-PUSH-TO>
<SYNTAX RUB OBJECT = V-RUB>
<SYNTAX RUB OBJECT WITH OBJECT = V-RUB>
<SYNTAX RUB OBJECT TO OBJECT = V-PUT-AGAINST> ;"touch magnet to mine"
<SYNONYM RUB TOUCH FEEL PAT PET>
<SYNTAX SCRIPT = V-SCRIPT>
<SYNTAX UNSCRIPT = V-UNSCRIPT>
<SYNTAX SEND OBJECT = V-SEND>
<SYNTAX SEND FOR OBJECT = V-SEND>
<SYNTAX SHAKE OBJECT = V-SHAKE>
<SYNTAX SHOW OBJECT TO OBJECT (FIND PERSON) = V-SHOW>
<SYNTAX SHOW OBJECT (FIND PERSON) OBJECT = V-SSHOW PRE-SSHOW>
<SYNONYM SHOW FLASH>
<SYNTAX SLIDE OBJECT = V-PUSH>
<SYNTAX SLIDE OBJECT UNDER OBJECT = V-PUT-UNDER>
<SYNTAX SLIDE OBJECT (IN-ROOM ON-GROUND) OBJECT = V-PUSH-TO>
<SYNTAX SLIDE OBJECT (IN-ROOM ON-GROUND) TO OBJECT = V-PUSH-TO>
<SYNTAX SKIP = V-SKIP>
<SYNONYM SKIP HOP>
<SYNTAX SMELL OBJECT = V-SMELL PRE-SMELL>
<SYNONYM SMELL SNIFF>
<SYNTAX SMOKE OBJECT = V-SMOKE>
<SYNTAX SPIN OBJECT = V-SPIN>
<SYNTAX SPRAY OBJECT ON OBJECT = V-SPRAY>
<SYNTAX SPRAY OBJECT WITH OBJECT = V-SSPRAY>
<SYNTAX SQUEEZE OBJECT = V-SQUEEZE>
<SYNTAX SQUEEZE OBJECT ON OBJECT = V-PUT PRE-PUT>
<SYNTAX STAND = V-STAND>
<SYNTAX STAND UP OBJECT (FIND RMUNGBIT) = V-STAND>
<SYNTAX STAND ON OBJECT (FIND VEHBIT) = V-CLIMB-ON>
;<SYNTAX STAND UNDER OBJECT = V-STAND-UNDER>
<SYNTAX STAY = V-STAY>
<SYNTAX STRIKE
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
WITH
OBJECT ;(FIND WEAPONBIT) (HELD CARRIED ON-GROUND IN-ROOM HAVE)
= V-ATTACK>
<SYNTAX STRIKE
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
= V-ATTACK ;*>
<SYNTAX STRIKE OBJECT (CARRIED ON-GROUND IN-ROOM) = V-LAMP-ON>
<SYNTAX SWIM = V-SWIM>
<SYNTAX SWIM OBJECT = V-SWIM>
<SYNTAX SWIM IN OBJECT = V-SWIM>
<SYNONYM SWIM BATHE WADE>
<SYNTAX SWING
OBJECT ;(FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-SWING>
<SYNTAX SWING
OBJECT ;(FIND WEAPONBIT) (HELD CARRIED HAVE)
AT
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
= V-SWING>
<SYNONYM SWING THRUST>
<SYNTAX TAKE
OBJECT (FIND TAKEBIT)
(ON-GROUND IN-ROOM MANY)
= V-TAKE PRE-TAKE ;*>
<SYNTAX TAKE IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
<SYNTAX TAKE OUT OBJECT (FIND VEHBIT) (ON-GROUND) = V-DISEMBARK>
<SYNTAX TAKE OFF OBJECT (FIND VEHBIT) (ON-GROUND) = V-DISEMBARK>
<SYNTAX TAKE ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
;<SYNTAX TAKE UNDER OBJECT = V-STAND-UNDER>
<SYNTAX TAKE UP OBJECT (FIND RMUNGBIT) = V-STAND>
<SYNTAX TAKE
OBJECT (FIND TAKEBIT) (CARRIED IN-ROOM MANY)
OUT
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) (IN-ROOM CARRIED MANY)
FROM
OBJECT
= V-TAKE PRE-TAKE>
;<SYNTAX TAKE
OBJECT (FIND TAKEBIT) (IN-ROOM CARRIED MANY)
OF
OBJECT
= V-TAKE PRE-TAKE> ;"Take a sip of water"
;<SYNTAX TAKE OBJECT (FIND TAKEBIT)
WITH OBJECT (FIND TOOLBIT) = V-TAKE PRE-TAKE>
<SYNONYM TAKE GRAB GET HOLD CARRY REMOVE>
<SYNTAX TELL OBJECT (FIND VICBIT) (IN-ROOM) = V-TELL PRE-TELL>
<SYNTAX TELL OBJECT (FIND VICBIT) (IN-ROOM) ABOUT OBJECT = V-TELL PRE-TELL>
<SYNTAX SAY TO OBJECT (FIND VICBIT) (IN-ROOM) = V-TELL PRE-TELL>
<SYNTAX SAY WITH OBJECT (FIND VICBIT) (IN-ROOM) = V-TELL PRE-TELL>
<SYNTAX SAY = V-SAY>
<SYNONYM SAY TALK SPEAK CHAT>
<SYNTAX SLEEP = V-SLEEP>
<SYNTAX SLEEP IN OBJECT = V-SLEEP>
<SYNTAX SLEEP ON OBJECT = V-SLEEP>
<SYNTAX SLEEP DOWN ON OBJECT = V-SLEEP> ;"lie down"
<SYNTAX SLEEP DOWN OBJECT (FIND RMUNGBIT) = V-SLEEP>
<SYNONYM SLEEP LIE REST NAP>
;<SYNTAX INCANT = V-INCANT>
;<SYNONYM INCANT CHANT>
<SYNTAX THROW OBJECT (HELD CARRIED TAKE HAVE) = V-THROW PRE-THROW>
;<SYNTAX THROW OBJECT (HELD CARRIED TAKE HAVE) OBJECT = V-THROW-DOWN>
<SYNTAX THROW OBJECT (HELD CARRIED TAKE HAVE) DOWN OBJECT = V-THROW PRE-THROW>
<SYNTAX THROW OBJECT (HELD CARRIED TAKE HAVE) AT OBJECT = V-THROW PRE-THROW>
<SYNTAX THROW OBJECT (HELD CARRIED TAKE HAVE) OFF OBJECT = V-THROW-OFF>
<SYNTAX THROW OBJECT (HELD CARRIED TAKE HAVE) OVER OBJECT = V-THROW-OFF>
<SYNTAX THROW OBJECT (HELD CARRIED TAKE HAVE)
WITH OBJECT (ON-GROUND IN-ROOM)
= V-THROW PRE-THROW>
<SYNTAX THROW OBJECT (HELD CARRIED TAKE HAVE) IN OBJECT = V-THROW PRE-THROW>
<SYNTAX THROW OBJECT (HELD CARRIED TAKE HAVE) ON OBJECT = V-THROW PRE-THROW>
;<SYNTAX THROW OBJECT (HELD CARRIED TAKE HAVE) TO OBJECT = V-THROW-DOWN>
<SYNONYM THROW HURL CHUCK TOSS CAST>
<SYNTAX TIE OBJECT (ON-GROUND CARRIED)
TO OBJECT = V-TIE PRE-TIE>
<SYNTAX TIE OBJECT (ON-GROUND CARRIED)
AROUND OBJECT = V-TIE PRE-TIE>
<SYNTAX TIE UP
OBJECT (FIND VICBIT) (ON-GROUND IN-ROOM)
WITH
OBJECT (ON-GROUND IN-ROOM CARRIED)
= V-TIE-UP>
<SYNONYM TIE FASTEN SECURE ATTACH CONNECT>
"<SYNTAX $TIME = V-$TIME>"
<SYNTAX TIME = V-TIME>
<SYNONYM TIME T>
<SYNTAX TURN OVER OBJECT = V-TURN-OVER>
<SYNTAX TURN OBJECT (FIND TURNBIT) TO OBJECT = V-TURN PRE-TURN>
<SYNTAX TURN OBJECT (FIND TURNBIT) FOR OBJECT = V-TURN PRE-TURN>
<SYNTAX TURN OBJECT (FIND TURNBIT) = V-TURN PRE-TURN>
<SYNTAX TURN
OBJECT (FIND TURNBIT) ( HELD CARRIED ON-GROUND IN-ROOM)
WITH
OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
= V-TURN PRE-TURN ;*>
<SYNTAX TURN ON
OBJECT ;(FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
= V-LAMP-ON>
<SYNTAX TURN OFF
OBJECT ;(FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
= V-LAMP-OFF>
<SYNONYM TURN FLIP SET>
<SYNTAX UNFOLD OBJECT = V-UNFOLD>
<SYNTAX FOLD OBJECT = V-FOLD>
<SYNTAX FOLD UP OBJECT = V-FOLD>
<SYNTAX UNLOCK OBJECT (ON-GROUND IN-ROOM) = V-UNLOCK PRE-UNLOCK>
<SYNTAX UNLOCK
OBJECT (ON-GROUND IN-ROOM)
WITH
OBJECT (HELD CARRIED ON-GROUND IN-ROOM HAVE)
= V-UNLOCK>
<SYNTAX UNTIE
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
= V-UNTIE ;*>
<SYNTAX UNTIE
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
FROM
OBJECT
= V-UNTIE>
<SYNONYM UNTIE FREE UNFASTEN DETACH UNHOOK DISCONNECT>
<SYNTAX WAIT = V-WAIT>
<SYNTAX WAIT OBJECT = V-WAIT-FOR>
;<SYNTAX WAIT UNTIL OBJECT = V-WAIT-UNTIL>
<SYNTAX WAIT FOR OBJECT = V-WAIT-FOR>
<SYNONYM WAIT Z>
<SYNTAX WAKE OBJECT (ON-GROUND IN-ROOM) = V-ALARM ;*>
<SYNTAX WAKE UP OBJECT (FIND RMUNGBIT) (ON-GROUND IN-ROOM) = V-ALARM>
<SYNONYM WAKE AWAKE SURPRISE STARTLE>
<SYNTAX WALK OBJECT = V-WALK>
<SYNTAX WALK IN OBJECT = V-THROUGH>
<SYNTAX WALK ON OBJECT = V-STEP>
<SYNTAX WALK OVER OBJECT = V-LEAP>
<SYNTAX WALK THROUGH OBJECT = V-THROUGH>
<SYNTAX WALK AROUND OBJECT = V-WALK-AROUND>
<SYNTAX WALK UP OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-UP>
<SYNTAX WALK DOWN OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
<SYNTAX WALK TO OBJECT = V-WALK-TO>
<SYNONYM WALK GO RUN PROCEED STEP>
<SYNTAX WAVE AT OBJECT = V-WAVE-AT>
<SYNTAX WAVE TO OBJECT = V-WAVE-AT>
<SYNTAX WAVE OBJECT (HELD CARRIED) = V-WAVE>
<SYNTAX WAVE OBJECT (HELD CARRIED) AT OBJECT = V-WAVE>
<SYNONYM WAVE BRANDISH>
<SYNTAX WEAR OBJECT (FIND WEARBIT) = V-WEAR>
<SYNTAX WEIGH OBJECT = V-WEIGH>
;<SYNTAX WET OBJECT (ON-GROUND IN-ROOM HELD CARRIED HAVE)
WITH OBJECT = V-WET>
<SYNTAX WIN = V-WIN>
<SYNONYM WIN WINNAGE>
<SYNTAX WIND OBJECT = V-WIND>
<SYNTAX WIND UP OBJECT = V-WIND>
<SYNTAX WITHDRAW = V-LEAVE>
<SYNTAX WITHDRAW OBJECT = V-WITHDRAW>
<SYNTAX YELL = V-YELL>
<SYNTAX YELL AT OBJECT = V-YELL>
<SYNONYM YELL SCREAM SHOUT>
<SYNTAX YES = V-YES>
<SYNONYM YES Y AFFIRMATIVE YUP UH-HUH YEAH OK OKAY SURE>
;<SYNTAX ZORK = V-ZORK>
;"Simple questions"
<SYNTAX WHAT = V-WHAT>
<SYNTAX WHAT OBJECT = V-WHAT>
<SYNTAX WHAT OBJECT OBJECT = V-WHAT PRE-WHAT>
<SYNONYM WHAT WHAT\'S WHATS WHO WHOS WHO\'S>
;"<SYNTAX WHERE ...> WHERE is a synonym of FIND"
;<SYNTAX IS OBJECT IN OBJECT = V-IS-IN>
;<SYNTAX IS OBJECT ON OBJECT = V-IS-IN>
"<SYNTAX $FO = V-$FORCE>
<SYNTAX $FO OBJECT = V-$FORCE>"

49
toa.xzap Normal file
View File

@ -0,0 +1,49 @@
.TIME
.INSERT "TOAFREQ"
.INSERT "TOADAT" ; DATA IS IN THIS FILE
.INSERT "MACROS"
.INSERT "GLOBALS"
.INSERT "SYNTAX"
.INSERT "CLOCK"
.INSERT "MAIN"
.INSERT "PARSER"
.INSERT "VERBS"
.INSERT "GOAL"
.INSERT "ISLAND"
.INSERT "BOAT"
.INSERT "WRECKS"
.INSERT "PEOPLE"
.INSERT "EVENTS"
.INSERT "TOASTR"
.END

46
toa.zap Normal file
View File

@ -0,0 +1,46 @@
.INSERT "TOADAT" ; DATA IS IN THIS FILE
.INSERT "MACROS"
.INSERT "GLOBALS"
.INSERT "SYNTAX"
.INSERT "CLOCK"
.INSERT "MAIN"
.INSERT "PARSER"
.INSERT "VERBS"
.INSERT "GOAL"
.INSERT "ISLAND"
.INSERT "BOAT"
.INSERT "WRECKS"
.INSERT "PEOPLE"
.INSERT "EVENTS"
.INSERT "TOASTR"
.END

67
toa.zil Normal file
View File

@ -0,0 +1,67 @@
"
TOA #2
(c) Copyright 1984 Infocom, Inc. All Rights Reserved.
"
<GC-MON <>>
;<COND (<GASSIGNED? ZILCH> <GC 0 T>)
(T <GC 0 T 5>)>
<GC 0 T 5>
<BLOAT 90000 0 0 3500 0 0 0 0 0 512>
;<SETG SHORT-STRINGS 2>
<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?>>
<PRINC "CUTTHROATS: Frobozz Magic Adventure Fiction
">
<COND (<GASSIGNED? PREDGEN>
<ID 0>)>
<IFILE "MACROS" T>
<IFILE "GLOBALS" T>
<PROPDEF SIZE 5>
<PROPDEF CAPACITY 0>
;<PROPDEF VALUE 0>
<IFILE "SYNTAX" T>
<ENDLOAD>
<IFILE "CLOCK" T>
<IFILE "MAIN" T>
<IFILE "PARSER" T>
<IFILE "VERBS" T>
;"Jerry: Add your files here, as with GOAL"
<IFILE "GOAL" T>
<IFILE "ISLAND" T>
<IFILE "BOAT" T>
<IFILE "WRECKS" T>
<IFILE "PEOPLE" T>
<IFILE "EVENTS" T>
;<COND (<NOT <GASSIGNED? PREDGEN>>
<CLOSE!- ,XTELLCHAN>)>
<PRINC "
Formerly SCUM: Interlogic Adventure Fiction
Get ready!">

BIN
toa.zip Normal file

Binary file not shown.

14265
toadat.zap Normal file

File diff suppressed because it is too large Load Diff

200
toafreq.xzap Normal file
View File

@ -0,0 +1,200 @@
.FSTR FSTR?1,"the " ;1546 773
.FSTR FSTR?2,"The " ;804 268
.FSTR FSTR?3,"You " ;669 223
.FSTR FSTR?4,", " ;533 533
.FSTR FSTR?5,"you " ;526 263
.FSTR FSTR?6,"and " ;486 243
.FSTR FSTR?7,". " ;414 414
.FSTR FSTR?8,"to " ;411 411
.FSTR FSTR?9,"your " ;390 130
.FSTR FSTR?10,"Johnny " ;372 62
.FSTR FSTR?11,"It's " ;360 72
.FSTR FSTR?12,"that " ;318 106
.FSTR FSTR?13,"is " ;287 287
.FSTR FSTR?14,"with " ;264 88
.FSTR FSTR?15,"don't " ;255 51
.FSTR FSTR?16,"of " ;243 243
.FSTR FSTR?17,"This " ;224 56
.FSTR FSTR?18,"are " ;212 106
.FSTR FSTR?19,"have " ;201 67
.FSTR FSTR?20,"through " ;186 31
.FSTR FSTR?21,"can't " ;185 37
.FSTR FSTR?22,"There's " ;184 23
.FSTR FSTR?23,"you're " ;174 29
.FSTR FSTR?24,"There " ;165 33
.FSTR FSTR?25,"for " ;156 78
.FSTR FSTR?26,"Weasel " ;156 26
.FSTR FSTR?27,"which " ;148 37
.FSTR FSTR?28,"in " ;147 147
.FSTR FSTR?29,"this " ;144 48
.FSTR FSTR?30,"You're " ;140 20
.FSTR FSTR?31,"That's " ;140 20
.FSTR FSTR?32,"looks " ;136 34
.FSTR FSTR?33,"about " ;132 33
.FSTR FSTR?34,"from " ;126 42
.FSTR FSTR?35,"salesman " ;119 17
.FSTR FSTR?36,"I " ;117 117
.FSTR FSTR?37,"already " ;114 19
.FSTR FSTR?38,"but " ;112 56
.FSTR FSTR?39,"here" ;108 54
.FSTR FSTR?40,"It " ;108 54
.FSTR FSTR?41,"what " ;108 36
.FSTR FSTR?42,"find " ;108 36
.FSTR FSTR?43,"it " ;107 107
.FSTR FSTR?44,"back " ;105 35
.FSTR FSTR?45,"doesn't " ;105 15
.FSTR FSTR?46,"out " ;100 50
.FSTR FSTR?47,"that" ;98 49
.FSTR FSTR?48,"McGinty " ;98 14
.FSTR FSTR?49,"his " ;96 48
.FSTR FSTR?50,"something " ;96 12
.FSTR FSTR?51,"on " ;94 94
.FSTR FSTR?52,"at " ;94 94
.FSTR FSTR?53,"not " ;94 47
.FSTR FSTR?54,"says" ;90 45
.FSTR FSTR?55,"can " ;88 44
.FSTR FSTR?56,"like " ;87 29
.FSTR FSTR?57,"see " ;86 43
.FSTR FSTR?58,"you" ;85 85
.FSTR FSTR?59,"starts " ;85 17
.FSTR FSTR?60,"then " ;84 28
.FSTR FSTR?61,"would " ;84 21
.FSTR FSTR?62,"nothing " ;84 14
.FSTR FSTR?63,"anything " ;84 12
.FSTR FSTR?64,"compressor " ;81 9
.FSTR FSTR?65,"off " ;80 40
.FSTR FSTR?66,"Pete " ;80 20
.FSTR FSTR?67,"I'm " ;80 20
.FSTR FSTR?68,"ladder " ;80 16
.FSTR FSTR?69,"isn't " ;80 16
.FSTR FSTR?70,"Wharf " ;80 16
.FSTR FSTR?71,"He's " ;80 16
.FSTR FSTR?72,"Outfitters " ;80 8
.FSTR FSTR?73,"door " ;78 26
.FSTR FSTR?74,"McGinty" ;78 13
.FSTR FSTR?75,"has " ;76 38
.FSTR FSTR?76,"He " ;76 38
.FSTR FSTR?77,"water " ;76 19
.FSTR FSTR?78,"Your " ;76 19
.FSTR FSTR?79,"than " ;72 24
.FSTR FSTR?80,"Road" ;72 24
.FSTR FSTR?81,"hands " ;72 18
.FSTR FSTR?82,"passbook" ;72 12
.FSTR FSTR?83,"forward " ;72 12
.FSTR FSTR?84,"Unfortunately" ;72 6
.FSTR FSTR?85,"teller " ;70 14
.FSTR FSTR?86,"better " ;70 14
.FSTR FSTR?87,"around " ;70 14
.FSTR FSTR?88,"I'll " ;70 14
.FSTR FSTR?89,"into " ;69 23
.FSTR FSTR?90,"down " ;69 23
.FSTR FSTR?91,"turns " ;68 17
.FSTR FSTR?92,"think " ;68 17
.FSTR FSTR?93,"leads " ;68 17
.FSTR FSTR?94,"That " ;68 17
.FSTR FSTR?95,"get " ;66 33
.FSTR FSTR?96,"more " ;66 22
;word frequency table of 96 most common words
WORDS:: .TABLE
FSTR?1
FSTR?2
FSTR?3
FSTR?4
FSTR?5
FSTR?6
FSTR?7
FSTR?8
FSTR?9
FSTR?10
FSTR?11
FSTR?12
FSTR?13
FSTR?14
FSTR?15
FSTR?16
FSTR?17
FSTR?18
FSTR?19
FSTR?20
FSTR?21
FSTR?22
FSTR?23
FSTR?24
FSTR?25
FSTR?26
FSTR?27
FSTR?28
FSTR?29
FSTR?30
FSTR?31
FSTR?32
FSTR?33
FSTR?34
FSTR?35
FSTR?36
FSTR?37
FSTR?38
FSTR?39
FSTR?40
FSTR?41
FSTR?42
FSTR?43
FSTR?44
FSTR?45
FSTR?46
FSTR?47
FSTR?48
FSTR?49
FSTR?50
FSTR?51
FSTR?52
FSTR?53
FSTR?54
FSTR?55
FSTR?56
FSTR?57
FSTR?58
FSTR?59
FSTR?60
FSTR?61
FSTR?62
FSTR?63
FSTR?64
FSTR?65
FSTR?66
FSTR?67
FSTR?68
FSTR?69
FSTR?70
FSTR?71
FSTR?72
FSTR?73
FSTR?74
FSTR?75
FSTR?76
FSTR?77
FSTR?78
FSTR?79
FSTR?80
FSTR?81
FSTR?82
FSTR?83
FSTR?84
FSTR?85
FSTR?86
FSTR?87
FSTR?88
FSTR?89
FSTR?90
FSTR?91
FSTR?92
FSTR?93
FSTR?94
FSTR?95
FSTR?96
.ENDT
.ENDI

471
toastr.zap Normal file
View File

@ -0,0 +1,471 @@
; STRINGS ARE DEFINED HERE
.GSTR STR?1,"number"
.GSTR STR?2,"that much"
.GSTR STR?3,"bunch of clothes"
.GSTR STR?4,"Air being what it is, you can't see it."
.GSTR STR?5,"hole"
.GSTR STR?6,"make anything out on the other side."
.GSTR STR?7,"door, which has lettering stencilled on it,"
.GSTR STR?8,"get there from here."
.GSTR STR?9,"do it alone."
.GSTR STR?10,"do"
.GSTR STR?11,"from here"
.GSTR STR?12,"make your way through the growth."
.GSTR STR?13,"all week"
.GSTR STR?14,"get through the rocks."
.GSTR STR?15,"You keep your money in it."
.GSTR STR?16,"there"
.GSTR STR?17,"s"
.GSTR STR?18,"It's faded to a drab off-white."
.GSTR STR?19,"It's drab and worn."
.GSTR STR?20,"counter"
.GSTR STR?21,"it"
.GSTR STR?22,"You pass out and never find that you've been mugged, rolled and killed."
.GSTR STR?23,"quite sure which direction is which..."
.GSTR STR?24,"room"
.GSTR STR?25,"open"
.GSTR STR?26,"closed"
.GSTR STR?27,"unlocked"
.GSTR STR?28,"unlock it with that!"
.GSTR STR?29,"The currents pull you in several conflicting directions, and you end up much the worse for it."
.GSTR STR?30,"make your way to the shoreline."
.GSTR STR?31,"It's the top of a ladder that leads down."
.GSTR STR?32,"It's the bottom of a ladder that leads up."
.GSTR STR?33,"The sturdy metal railing encircles the deck."
.GSTR STR?34,"p.m."
.GSTR STR?35,"a.m."
.GSTR STR?36,"table"
.GSTR STR?37,"lock"
.GSTR STR?38,"locked"
.GSTR STR?39,"wheel"
.GSTR STR?40,"bolts"
.GSTR STR?41,"see any"
.GSTR STR?42,"the rope"
.GSTR STR?43,"reach "
.GSTR STR?44,"go that way."
.GSTR STR?45,"do that."
.GSTR STR?46,"afford it."
.GSTR STR?47,"fit through the hole carrying the tank."
.GSTR STR?48,"to "
.GSTR STR?49,"in that"
.GSTR STR?50,"amount of money"
.GSTR STR?51,"a verb"
.GSTR STR?52,"enough nouns"
.GSTR STR?53,"afford to."
.GSTR STR?54,"use multiple "
.GSTR STR?55,"the right key"
.GSTR STR?56,"on"
.GSTR STR?57,"in"
.GSTR STR?58,"see "
.GSTR STR?59,"The water is too dark for you to see anything. After a moment, however, you feel something start to munch on you. Something large."
.GSTR STR?60," "
.GSTR STR?61," "
.GSTR STR?62," "
.GSTR STR?63," "
.GSTR STR?64," "
.GSTR STR?65,"going anywhere."
.GSTR STR?66,"have it."
.GSTR STR?67,"that"
.GSTR STR?68,"open the "
.GSTR STR?69,"give "
.GSTR STR?70,"carrying "
.GSTR STR?71,"talking to anyone!"
.GSTR STR?72,"close that."
.GSTR STR?73," a transcript of interaction with CUTTHROATS.
CUTTHROATS is a trademark of Infocom, Inc.
Copyright (c) 1984, Infocom, Inc. All rights reserved.
"
.GSTR STR?74,"move "
.GSTR STR?75,"turn that on."
.GSTR STR?76,"turn that off."
.GSTR STR?77,"in that!"
.GSTR STR?78,"get at your money."
.GSTR STR?79,"had to buy"
.GSTR STR?80,"need to rent"
.GSTR STR?81,"bought it!"
.GSTR STR?82,"rent that."
.GSTR STR?83,"get "
.GSTR STR?84,"You suddenly bump into something in the darkness. You find that this something has long, sharp teeth that feel uncomfortable when they enter your body."
.GSTR STR?85,"Moses!"
.GSTR STR?86,"pour that."
.GSTR STR?87,"holding the drill."
.GSTR STR?88,"drill that!"
.GSTR STR?89,"drink that."
.GSTR STR?90,"This was not a very safe place to try jumping."
.GSTR STR?91,"Hello."
.GSTR STR?92,"Good day."
.GSTR STR?93,"Nice weather we've been having lately."
.GSTR STR?94,"Goodbye."
.GSTR STR?95,"Very good. Now you can go to the second grade."
.GSTR STR?96,"I hope you enjoyed that as much as I did."
.GSTR STR?97,"Are you enjoying yourself?"
.GSTR STR?98,"Wheeeeeeeeee!!!!!"
.GSTR STR?99,"Do you expect me to applaud?"
.GSTR STR?100,"but "
.GSTR STR?101,"behind "
.GSTR STR?102,"on "
.GSTR STR?103,"special to be "
.GSTR STR?104,"on the "
.GSTR STR?105,"turn things to a specific direction."
.GSTR STR?106,"inflate"
.GSTR STR?107,"pick that."
.GSTR STR?108,"cut"
.GSTR STR?109,"kill"
.GSTR STR?110,"here to "
.GSTR STR?111,"The squid, angered and wounded, starts wrapping tentacles around you. As you attempt another foray, you find that the squid's strength is too much for you."
.GSTR STR?112,"attack"
.GSTR STR?113,"Benny Goodman"
.GSTR STR?114,"Kicking"
.GSTR STR?115,"Waving"
.GSTR STR?116,"Playing in this way with"
.GSTR STR?117,"Fiddling with"
.GSTR STR?118,"Pushing"
.GSTR STR?119,"on the floor"
.GSTR STR?120,"push things to that."
.GSTR STR?121,"Trying to destroy"
.GSTR STR?122," doesn't seem to work."
.GSTR STR?123," isn't notably helpful."
.GSTR STR?124," doesn't work."
.GSTR STR?125," has no effect."
.GSTR STR?126,"latitude"
.GSTR STR?127,"longitude"
.GSTR STR?128,"told me that."""
.GSTR STR?129,"empty that!"
.GSTR STR?130,"empty it when it's closed!"
.GSTR STR?131,"empty"
.GSTR STR?132,"in the "
.GSTR STR?133,"take it; thus, you can't shake it!"
.GSTR STR?134,"dig it, man."
.GSTR STR?135,"smell anything beyond your mask."
.GSTR STR?136,"You find that diving here is a bad idea without the proper equipment."
.GSTR STR?137,"You find that the lack of oxygen you quickly encounter is fatally frustrating."
.GSTR STR?138,"You find the water here too shallow for diving."
.GSTR STR?139,"tie it to yourself."
.GSTR STR?140,"climb onto "
.GSTR STR?141,"climb "
.GSTR STR?142," that you kill yourself, just as he would have done!"
.GSTR STR?143,"cross that!"
.GSTR STR?144,"talk to "
.GSTR STR?145,"spin that!"
.GSTR STR?146,"Not a chance."
.GSTR STR?147,"No way. At least not in this reality."
.GSTR STR?148,"Did you say that just to impress me?"
.GSTR STR?149,"An interesting concept, but beyond this reality."
.GSTR STR?150,"I'll give you the benefit of the doubt and just ignore that."
.GSTR STR?151,"A fishy idea..."
.GSTR STR?152,"What a concept!"
.GSTR STR?153,"Not a prayer."
.GSTR STR?154,"wear "
.GSTR STR?155,"wearing that!"
.GSTR STR?156,"make a withdrawal here!"
.GSTR STR?157,"make a deposit here!"
.GSTR STR?158,"throw anything off that!"
.GSTR STR?159," knocks you out. About all you feel after that is a cold knife drawing warm blood from your throat."
.GSTR STR?160,"of interest there"
.GSTR STR?161,"pick it up"
.GSTR STR?162,"to read there"
.GSTR STR?163,"into that"
.GSTR STR?164,"tell without your watch."
.GSTR STR?165,"You fall asleep and run out of air."
.GSTR STR?166,"tired."
.GSTR STR?167,"positive"
.GSTR STR?168,"ambivalent"
.GSTR STR?169,"negative"
.GSTR STR?170,"north"
.GSTR STR?171,"south"
.GSTR STR?172,"east"
.GSTR STR?173,"west"
.GSTR STR?174,"northwest"
.GSTR STR?175,"northeast"
.GSTR STR?176,"southwest"
.GSTR STR?177,"southeast"
.GSTR STR?178,"downstairs"
.GSTR STR?179,"upstairs"
.GSTR STR?180,"out"
.GSTR STR?181,"forward"
.GSTR STR?182,"aft"
.GSTR STR?183,"starboard"
.GSTR STR?184,"port"
.GSTR STR?185,"below"
.GSTR STR?186,"above"
.GSTR STR?187,", pushing his cart"
.GSTR STR?188,"The road ends at the lighthouse to the north, and heads back to the southeast. You can see and hear the ocean pound the shoreline."
.GSTR STR?189,"The lighthouse door is locked."
.GSTR STR?190,"lighthouse door"
.GSTR STR?191,"The road branches to the northeast and northwest with the lighthouse off to the northwest. To the south is an impenetrable swamp."
.GSTR STR?192,"There's no way to get footing on the swamp."
.GSTR STR?193,"swamp"
.GSTR STR?194,"A winding road starts up here to the southwest. You can see the top of the lighthouse off to the northwest. The Wharf Road lies to the northeast."
.GSTR STR?195,"This is the end of the Wharf Road, an east/west, two-lane road that's the island's main street. Off to the east, small businesses line the south side of the street. A winding road starts to the southwest, heading toward the lighthouse. The Red Boar Inn is to the south."
.GSTR STR?196,"You are on the Wharf Road, with the McGinty Salvage office to the south. The ocean lies to the north, its brine smell strong and refreshing."
.GSTR STR?197,"to from inside"
.GSTR STR?198,"You are on the Wharf Road where the wharf starts up to the north. The former site of Outfitters International's warehouse fronts the south side of the road."
.GSTR STR?199,"The east/west Wharf Road continues, with Outfitters International, a store which supplies ocean-going vessels, to the south."
.GSTR STR?200,"Outfitters is closed."
.GSTR STR?201,"You're on the east end of Wharf Road. The Ocean Road starts here and parallels the island's east edge, heading to the southeast. The Shanty is to the south."
.GSTR STR?202,"You are at the north end of the Ocean Road, a narrow north/south road on the east edge of the island. The Wharf Road starts to the northwest, and a back alley starts off to the southwest."
.GSTR STR?203,"The rocks are too sharp and dangerous."
.GSTR STR?204,"You are halfway along the Ocean Road, with the start of an alley off to the northwest. An empty field lies to your west, and the dangerous ocean shore lies off to your east."
.GSTR STR?205,"You can't get through the weeds."
.GSTR STR?206,"This is the south end of the Ocean Road. To the southeast is a small path leading up to about 100 feet above sea level. The Ocean Road heads north, and the Shore Road starts to the southwest."
.GSTR STR?207,"You are at the west end of the east/west Shore Road, with the ferry landing to the west. To the north is an impenetrable field, while the south is bordered by the ocean. You can see the mainland in the distance."
.GSTR STR?208,"The bank is closed."
.GSTR STR?209,"You're at the west end of an east/west alley. The back entrance to the Red Boar Inn is to the north, and an overgrown field is to the south."
.GSTR STR?210,"The door is locked."
.GSTR STR?211,"back door"
.GSTR STR?212,"You are in a narrow alley. To the north is the back door of McGinty Salvage, as well as a small window. An overgrown field lies to the south."
.GSTR STR?213,"""No, you don't!"" cries McGinty as he pulls out a gun and shoots you."
.GSTR STR?214,"open it from this side."
.GSTR STR?215,"window"
.GSTR STR?216,"door"
.GSTR STR?217,"You are in an east/west alley. To the north is a vacant lot, and an overgrown field lies to the south."
.GSTR STR?218,"You are in an alley behind Outfitters International. An abandoned field lies to the south."
.GSTR STR?219,"You're at the east end of an east/west alley. The back door of The Shanty is to the north, and an overgrown field is to the south. Narrow paths to the northeast and southeast lead to the Ocean Road."
.GSTR STR?220,"This is the lobby of the Red Boar Inn, a place with the charm of a two-dollar flophouse. The Wharf Road is outside, to the north, and a stairway leads up to the rooms to the south."
.GSTR STR?221,"desk clerk"
.GSTR STR?222,"A desk clerk sits behind the counter."
.GSTR STR?223,"mail"
.GSTR STR?224,"message"
.GSTR STR?225,"You are at the top of the stairs in the Red Boar. Your room is to the south, and other rooms line the hall. The lighting in the hallway is dim and drab like the wallpaper and carpeting."
.GSTR STR?226,"The people in those rooms aren't interesting."
.GSTR STR?227,"You're in your room in the Red Boar Inn. It's sparsely furnished, but comfortable enough. To the north is the door, and there's a closet without a door to the west."
.GSTR STR?228,"The Weasel is rummaging through your stuff. He notices you, and before you have a chance to react, he smiles then cuts your throat."
.GSTR STR?229,"A comfortable bed sits along the wall."
.GSTR STR?230,"In a corner of the room is a lopsided wooden dresser."
.GSTR STR?231,"April 23"
.GSTR STR?232,"It's your room key."
.GSTR STR?233,"On the floor is a note that must have been slipped under the door while you slept."
.GSTR STR?234,"The note is hastily scrawled:
""If you're interested in a big deal, be at The Shanty at 8:30 this morning.
-Johnny"""
.GSTR STR?235,"This book is included in your Cutthroats package."
.GSTR STR?236,"get it over the other equipment you're wearing."
.GSTR STR?237,"fit that over the "
.GSTR STR?238,"As you remove the mask, you find you can't breathe."
.GSTR STR?239,"filled"
.GSTR STR?240,"Not a very good idea..."
.GSTR STR?241,"As the tank falls away, it pulls the airhose with it, making you regret your lack of gills."
.GSTR STR?242,"You are in the McGinty Salvage office, a concern whose main business is salvaging wrecks. The place is a mess, and the floor is littered with chewed-on cigar stubs. To the north lies the Wharf Road. You can't help feeling uncomfortable here."
.GSTR STR?243,"desk"
.GSTR STR?244,"As McGinty sees someone climbing through the window, he pulls out a gun and fires. His aim is better than your luck."
.GSTR STR?245,"chair"
.GSTR STR?246,"The business envelope has the McGinty Salvage return address, and ""Weasel's Merchant Seaman's card - collateral for deal"" scribbled in McGinty's hand."
.GSTR STR?247,"An envelope with some writing on it sits on the desk."
.GSTR STR?248,"You are standing on the former site of the Outfitters International warehouse, which burned down a few months back. To the north is the Wharf Road and an alley is to the south."
.GSTR STR?249,"There's a wall in the way."
.GSTR STR?250,"This is Outfitters International, a store that specializes in marine supplies. There is a long, high counter separating the supplies and the front area. To the north is the Wharf Road."
.GSTR STR?251,"salesman"
.GSTR STR?252,"A salesman stands behind the counter."
.GSTR STR?253,"afford that."
.GSTR STR?254,"merchandise"
.GSTR STR?255," items"
.GSTR STR?256,"This price list is included in your Cutthroats package."
.GSTR STR?257,"""Ajax 9-volt dry cell."""
.GSTR STR?258,"""Ajax C cell."""
.GSTR STR?259,"The tube has ""Frobizz waterproof putty"" printed on the side."
.GSTR STR?260,"tube"
.GSTR STR?261,"reverse entropy."
.GSTR STR?262,"This heavy, semi-portable air compressor can fill scuba tanks."
.GSTR STR?263,"off."
.GSTR STR?264,"off"
.GSTR STR?265,"touching "
.GSTR STR?266,"As the spikes jump toward the magnet, one of them pierces your chest!"
.GSTR STR?267," The canister begins to emit noxious fumes. Before you can do anything about it, you lose consciousness."
.GSTR STR?268,"These are charts for the Hardscrabble Island area."
.GSTR STR?269,"This is The Shanty, a tavern which serves the locals. A wooden bar travels the length of the place, and behind it is a mirror so dirty, it offers no reflection. Round tables occupy the floor. The smell of cooking food permeates the place."
.GSTR STR?270,"Johnny looks around and says, ""This is no place to continue. If McGinty finds out about this, we're sunk. We better meet at the lighthouse at 9:30. Glad you're aboard."""
.GSTR STR?271,"water"
.GSTR STR?272,"bartender"
.GSTR STR?273,"A bartender behind the bar polishes glasses with a worn towel."
.GSTR STR?274,"A parrot with an eyepatch hobbles up and down the bar."
.GSTR STR?275,"It sports an eyepatch and wooden leg and has been here since the bartender bought it from a sailor. It's considered insane by the local patrons."
.GSTR STR?276,"but claw prints there"
.GSTR STR?277,"""As my Pappy said, 'When you travel the highways of life, you do not always get to stop and look at a roadmap.'"""
.GSTR STR?278,"""I must admit that in my wide travels across this ball of wax, I have seen many human specimens, though none quite like you."""
.GSTR STR?279,"""After due consideration, I find myself in an embarrassing position. I would gladly accept a hard biscuit today, if you would accept payment Tuesday."""
.GSTR STR?280,"""Read any good books lately? I found 'Tropical Birds and their Native Habitats' quite engrossing."""
.GSTR STR?281,"""Compared to salted biscuits, I like myself best."""
.GSTR STR?282,"""Hello Sailor."""
.GSTR STR?283,"furniture"
.GSTR STR?284,"it to clean it"
.GSTR STR?285,"have a drink."
.GSTR STR?286,"stick with grog."
.GSTR STR?287,"You are in Mariners' Trust, the Island's bank. In it are a table and a teller's window. You can see the safe beyond, and it looks pretty empty."
.GSTR STR?288,"teller"
.GSTR STR?289,"A teller sits behind the window."
.GSTR STR?290,"withdraw that!"
.GSTR STR?291,"September 19"
.GSTR STR?292,"deposit more than you have."
.GSTR STR?293,"You are at Point Lookout, a small, high cliff that affords a spectacular view of the sea. The cliff bottom is dangerous, so the only safe path is the northwest footpath back to the Ocean Road."
.GSTR STR?294,"If you really want to jump, say so, but do so at your own risk."
.GSTR STR?295,"Your pleasant leap is interrupted as you find yourself impaled on the jagged rocks."
.GSTR STR?296,"your money"
.GSTR STR?297,"Johnny looks disappointed. ""We need at least $500 from you. I hate to do this, but you might tell McGinty..."" Suddenly you feel a shove in the back and see the pointy rocks below rush up to meet your descent."
.GSTR STR?298,"give him more than you've got."
.GSTR STR?299,"cliff"
.GSTR STR?300,"The ferry to the mainland arrives here every two hours during the day. People are milling about. The Shore Road starts off to the east."
.GSTR STR?301,"It would help if a ship were berthed. If you want to take a dip in the ocean, you'll have to say so."
.GSTR STR?302,"The ferry for the mainland bobs up and down, its engines running."
.GSTR STR?303,"at the landing."
.GSTR STR?304,"a ferry token"
.GSTR STR?305,"occupied"
.GSTR STR?306,"The starboard side of the Mary Margaret has the wheelhouse to port. The deck is well-worn after many years of use, but still solid. The ocean is off to the other side of the rail."
.GSTR STR?307,"You're out to sea now."
.GSTR STR?308,"connected"
.GSTR STR?309,"connect the airhose to that!"
.GSTR STR?310,"Oops! So much for instantly growing gills."
.GSTR STR?311,"climb that!"
.GSTR STR?312,"connected to the deep-sea diving suit"
.GSTR STR?313,"from here."
.GSTR STR?314,"large air compressor"
.GSTR STR?315,"make out too many details from here."
.GSTR STR?316,"it from here"
.GSTR STR?317," There are spare parts for the engine and other equipment scattered about."
.GSTR STR?318,"The label is worn, so all you can make out is a large ""ACME"" at the top."
.GSTR STR?319,"small panel on the side of the machine"
.GSTR STR?320,"panel"
.GSTR STR?321,"over the wet suit"
.GSTR STR?322,"You take the suit off and quickly realize you're not a dolphin. You realize this too late, though."
.GSTR STR?323,"hidden under the mattress"
.GSTR STR?324,"bunks"
.GSTR STR?325,"You are in a small, cramped cabin decorated with a table and a few chairs. To the aft is the captain's cabin, while the galley lies forward. A ladder leading down goes into the engine room."
.GSTR STR?326,"You are in the captain's cabin. There is a large and comfortable-looking bunk here. The forward doorway leads to the crew's lounge."
.GSTR STR?327,"This large, comfortable-looking bunk is the captain's."
.GSTR STR?328,"diesel engine"
.GSTR STR?329,"avoid it."
.GSTR STR?330,"There's a bulkhead there."
.GSTR STR?331,"You are on the port side of the Night Wind. The wheelhouse is to starboard. The teak deck is very well-kept. The ocean lies off to port."
.GSTR STR?332,"in the drill"
.GSTR STR?333,"hole you drilled"
.GSTR STR?334,"second hole you drilled"
.GSTR STR?335,"first hole you drilled"
.GSTR STR?336,"You are in the crew's lounge, a cramped cabin with little more than a table and a few chairs. To aft is the captain's cabin, while the galley lies forward. A ladder leads into the engine room."
.GSTR STR?337,"You are in the captain's cabin. A large and comfortable-looking bunk is one of the many comforts in the cabin. The forward doorway leads to the crew's lounge."
.GSTR STR?338,"the line. Worry about it when you've found the treasure"
.GSTR STR?339,"do that underwater."
.GSTR STR?340,"You suddenly find yourself inhaling water! The airhose trailing behind must have torn, and there's no time to do anything about it!"
.GSTR STR?341,"As you descend further, Merv Griffin swims by, offering you Pittsburgh Penguin tickets. You realize too late that this is a hallucination, since Merv doesn't even like the Penguins. At this depth, narcosis takes over, and all that's left is to say bye to Merv..."
.GSTR STR?342,"a shipwreck"
.GSTR STR?343,"the ocean floor"
.GSTR STR?344,"The large, ugly, toothy shark is headed toward you!"
.GSTR STR?345,"You are on the ocean floor. Sediment and seaweed wave slowly with the current."
.GSTR STR?346,"You are at the bow of an old, rotting wreck where a ladder leads down through a large square hole in the deck. When the ship sank, the top of one of the masts broke off and fell into the hole. What's left of the deck continues aft."
.GSTR STR?347,"You are at the bow of a steel ship that has been here for quite a while. The deck continues aft, and there is a passage leading down at your feet."
.GSTR STR?348,"This is the bow of a very empty-looking wreck. The deck continues aft."
.GSTR STR?349,"You are now aft of midships on the topmost deck. The deck continues fore and aft."
.GSTR STR?350,"You are on the narrowing aft deck of the ship, which continues forward. A hole at the base of one mast leads down."
.GSTR STR?351,"You are on the aft deck of the ship. Passengers could have gathered here to sun themselves and sip drinks. Those times are long gone. The only way to proceed is forward."
.GSTR STR?352,"You are at the stern of this wreck. The deck continues forward."
.GSTR STR?353,"Your airhose catches and tears on the way down."
.GSTR STR?354,"the mast"
.GSTR STR?355,"upper hole"
.GSTR STR?356,"lower hole"
.GSTR STR?357,"This cabin was apparently used for storage, although what's left can only be described as debris. There is an exit abaft, a doorway outlined with barnacle-encrusted timbers. There is a hole above your head through which a broken-off mast descends."
.GSTR STR?358,"This cabin seems to have been sleeping quarters. It must have been used by the crew, as it is spartanly furnished. The only ways out of this room are up and down."
.GSTR STR?359,"bug"
.GSTR STR?360,"cut it with that."
.GSTR STR?361,"the top knot"
.GSTR STR?362,"This area is full of barnacle-encrusted iron bars, probably pikes used by the sailors for fending off boarding parties. There is a plaque on one wall. Exits are fore and aft."
.GSTR STR?363,"Water rushes into the room, making you realize the value of your equipment."
.GSTR STR?364,"This heavy iron bar was probably used as a pike."
.GSTR STR?365,"plaque"
.GSTR STR?366,"fallen partition"
.GSTR STR?367,"As you return to a watery environment, you realize the value of leaving your equipment on."
.GSTR STR?368,"This was a galley or a pantry, though only the shape and size of the cabin suggest that. There are exits fore and aft."
.GSTR STR?369,"This former dining room has some tables upturned and scattered about, a door forward, a hole through the floor, and a narrow opening abaft."
.GSTR STR?370,"Amidst a stack of rotted wood is a cask that is still in one piece."
.GSTR STR?371,"climb the rope with that load."
.GSTR STR?372,"stack of rotted wood"
.GSTR STR?373,"bunch of overturned tables"
.GSTR STR?374,"As you begin to move, you suddenly find yourself breathing water! Your airhose tore on some of the sharper debris."
.GSTR STR?375,"The settling of debris has left a very narrow passage through this cabin. You can go forward or aft."
.GSTR STR?376," wedged under the bunks."
.GSTR STR?377,"debris"
.GSTR STR?378,"You are in a bunk-lined cabin. The forward bulkhead has an open doorway in it, and a ladder leads down through the deck. The rotting interior of the hull lies aft."
.GSTR STR?379,"This might have been the purser's cabin. It can be exited forward through a narrow opening."
.GSTR STR?380,"Except for two broken rungs at the bottom, this ladder looks as if it's in good shape."
.GSTR STR?381,"the combination"
.GSTR STR?382,"You can go aft from this cabin, a small and claustrophobic area little more than a widened passageway, or through a jagged hole in the port bulkhead."
.GSTR STR?383,"This cabin is the third-class passengers' quarters. There couldn't have been many frills here since the remains are spartan. The cabin can be exited aft and up."
.GSTR STR?384,"get off the chest"
.GSTR STR?385,"As the chest starts to rise, you fall off it rather awkwardly and disconnect your airhose."
.GSTR STR?386,"This jagged hole is the result of centuries of wear on the hull."
.GSTR STR?387," to take with you"
.GSTR STR?388,"As you move away from the hole, your airhose gets caught on the edge of the hole in the wreck! As it tears, you find that breathing water is beyond your talents."
.GSTR STR?389,", dragging the chest up with it."
.GSTR STR?390,"."
.GSTR STR?391,"This room, which may have been a lounge, can be exited fore or aft."
.GSTR STR?392,"This was once the supplies locker, with exits forward and up, and a door with a sign on it in the aft bulkhead."
.GSTR STR?393,"barnacle"
.GSTR STR?394,"Although this sword is old and worn, it is still moderately sharp."
.GSTR STR?395,"You're in one of the large holds of the ship, impressive in size. There are rooms fore and aft, and a hole in the port bulkhead."
.GSTR STR?396,"This had to have been a mine locker. There is a door forward and a passage above your head."
.GSTR STR?397,"BOOOOOOOOOOMMMMMMMMMM!"
.GSTR STR?398,"This is another cabin used to house the ship's crew. There are exits forward and aft."
.GSTR STR?399,"There is a giant squid sleeping here."
.GSTR STR?400,"This cabin has suffered the ravages of the sea. Above your head at one end of the cabin a ladder leads up. The bottom two rungs of the ladder are broken, but the rest of it seems to be pretty sturdy. A doorway, outlined by rotting timbers, leads forward."
.GSTR STR?401,"high enough to get past the two broken rungs"
.GSTR STR?402,"He is wiry, hyper, and devoid of ethics. A fat cigar seems to be his only companion, since he's the type of man who would sell his own mother if given the opportunity."
.GSTR STR?403," He"
.GSTR STR?404,"The Weasel turns and yells, ""Traitor!"" Next thing you know, you've been stabbed."
.GSTR STR?405,"""Thanks for the info, pal, but I better make sure you don't use it."" He pulls out his gun and shoots."
.GSTR STR?406,"McGinty walks in the front door, spots something in the shadows, pulls out a gun, and fires. Unfortunately, you are what he noticed."
.GSTR STR?407,"A moment later, McGinty sticks his head out, asks why you were in his place, and shoots you."
.GSTR STR?408,"McGinty"
.GSTR STR?409,"A Supremo it's not."
.GSTR STR?410,"lit"
.GSTR STR?411,"Red got his name from flame-red hair which sprouts from his head and face, and peeks out from under his flannel shirt. He takes no guff, but he is fair and has a sense of justice."
.GSTR STR?412,"grins"
.GSTR STR?413,"showed me this"
.GSTR STR?414,"""Tie the line to the treasure when you've got it, then pull on it and we'll pull the treasure up."""
.GSTR STR?415,"Pete wears an eyepatch and got his name on a far-east voyage as the cook. The food ran out, and he did what he could to supply the crew with fresh meat. Needless to say, he was left at the nearest port."
.GSTR STR?416,"The Weasel is a small, greasy man with shifty eyes. He loves his sharp little knife more than life itself, and would sell out anybody for a price. Even himself."
.GSTR STR?417,"The Weasel, quite panic-stricken, doesn't stop to thank you before he pulls a small knife from his ankle and kills you."
.GSTR STR?418,"The Weasel glares at you and says, ""I don't take this from no one!"" He pulls out his knife, touches its too-sharp point with a finger, then introduces it to your chest."
.GSTR STR?419,"his card"
.GSTR STR?420,"the envelope"
.GSTR STR?421,"You can't help notice that your dresser has been opened and the contents messed up."
.GSTR STR?422,"""That's one of McGinty's envelopes! Traitor!"" Before you can respond, the Weasel's knife has violated the sanctity of your body."
.GSTR STR?423,"The card says:
""Frank Webster
Seaman First Class
No. 2626868"""
.GSTR STR?424,"set to "
.GSTR STR?425,"A desk clerk is sitting behind the counter."
.GSTR STR?426,"reach behind the "
.GSTR STR?427,"bought it."""
.GSTR STR?428,"glass of water"
.GSTR STR?429,"talk to someone who's not here."
.GSTR STR?430,"boards"
.GSTR STR?431,"disembarks"
.GSTR STR?432,"It is dated 1680 and stamped with a portrait of King Peter II of Portugal."
.GSTR STR?433,"It bears the Hollywood Cruise Lines markings."
.GSTR STR?434,"Pete spots McGinty, who is near enough to overhear! While Johnny chases McGinty, Pete accuses you of bringing McGinty along. Before you respond, the Weasel plunges his knife into your heart."
.GSTR STR?435,"Johnny glares at McGinty. ""Trying to cash in on my work again, huh? You probably killed Hevlin, too!"" And with that, he pushes McGinty off the cliff.
""I can't leave witnesses,"" he mumbles. Before you can react, you're on your way down to join what's left of McGinty."
.GSTR STR?436,"Johnny sees McGinty on the road. ""You brought McGinty, you traitor! You probably killed Hevlin, too!"" A moment later, you're falling down to the rocks."
.GSTR STR?437,"Johnny stares at you in disgust. ""A drunk diving for us? You'll probably tell McGinty, too. I'll make sure you don't."" He pushes you off the cliff. Although you feel no pain, your landing is fatal."
.GSTR STR?438,"Johnny looks disgusted. ""No money? You probably told McGinty already. Traitor!"" He pushes you off the cliff, and you scream as the pointy rocks rush up to meet you."
.GSTR STR?439,"Johnny looks disgusted. ""I can't wait all day..."" You feel a shove and then find yourself on your way down to the rocks below."
.GSTR STR?440,"shakes his head"
.GSTR STR?441,"hands something to McGinty"
.GSTR STR?442,"""You brought McGinty!"" Next thing you know, your throat's been slit."
.GSTR STR?443,"""What kind of joke is this, giving me the coordinates of the island?"""
.GSTR STR?444,"sits down for his watch"
.GSTR STR?445,"You are awakened by what feels like your ship running aground. You are put back to a permanent sleep by the Weasel's knife."
.GSTR STR?446,"Your boat is lost in a sudden squall while you sleep."
.GSTR STR?447,"find something to drink soon!"
.GSTR STR?448,"The giant squid stirs and sees what disturbed it. When the huge eyes spot you, it moves toward you and hugs you with its tentacles. You squirm in an attempt to get away, but more arms surround you and one disconnects your airhose."
.GSTR STR?449," swims up to you and starts nibbling."
.GSTR STR?450,"The row of fallen bunks pinches your airhose. A few moments later, it is impossible to breathe."
.GSTR STR?451,"You find yourself gasping for air, but there's none to breathe!"
.GSTR STR?452,"You've used all your air."
.GSTR STR?453,"There's not enough air to breathe!"
.GSTR STR?454,"You suddenly find Red's hands around your throat as he makes a comment about hating cowards and Hevlin being wrong."
.ENDI

3557
verbs.zap Normal file

File diff suppressed because it is too large Load Diff

3337
verbs.zil Normal file

File diff suppressed because it is too large Load Diff

1531
wrecks.zap Normal file

File diff suppressed because it is too large Load Diff

1925
wrecks.zil Normal file

File diff suppressed because it is too large Load Diff