aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhistoricalsource <historicalsoftware@textfiles.com>2019-04-13 21:54:32 -0400
committerhistoricalsource <historicalsoftware@textfiles.com>2019-04-13 21:54:32 -0400
commita24d33a0ad2a36ca02d4ed5b5af0ef409ce9ae61 (patch)
tree2e20a5d33e5e34531d86c850f8133a7d1fc3b76e
downloadminizork2-1988-a24d33a0ad2a36ca02d4ed5b5af0ef409ce9ae61.tar.gz
minizork2-1988-a24d33a0ad2a36ca02d4ed5b5af0ef409ce9ae61.tar.bz2
minizork2-1988-a24d33a0ad2a36ca02d4ed5b5af0ef409ce9ae61.zip
Final Revision
-rw-r--r--README.md1
-rw-r--r--alice.zabstr132
-rw-r--r--alice.zap366
-rw-r--r--alice.zil607
-rw-r--r--dungeon.zabstr147
-rw-r--r--dungeon.zap367
-rw-r--r--dungeon.zil679
-rw-r--r--globals.zabstr93
-rw-r--r--globals.zap309
-rw-r--r--globals.zil477
-rw-r--r--mini2.chart2
-rw-r--r--mini2.errors25
-rw-r--r--mini2.record462
-rw-r--r--mini2.serial1
-rw-r--r--mini2.zap50
-rw-r--r--mini2.zil35
-rw-r--r--mini2.zipbin0 -> 55690 bytes
-rw-r--r--mini2dat.zap8455
-rw-r--r--mini2freq.xzap200
-rw-r--r--mini2pur.zap8
-rw-r--r--mini2str.zap263
-rw-r--r--misc.zabstr77
-rw-r--r--misc.zap318
-rw-r--r--misc.zil535
-rw-r--r--parser.zabstr151
-rw-r--r--parser.zap1600
-rw-r--r--parser.zil1483
-rw-r--r--princess.zabstr126
-rw-r--r--princess.zap460
-rw-r--r--princess.zil684
-rw-r--r--syntax.zil390
-rw-r--r--verbs.zabstr158
-rw-r--r--verbs.zap1818
-rw-r--r--verbs.zil1388
-rw-r--r--volcano.zabstr131
-rw-r--r--volcano.zap462
-rw-r--r--volcano.zil686
-rw-r--r--wizard.zabstr171
-rw-r--r--wizard.zap870
-rw-r--r--wizard.zil1220
40 files changed, 25407 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e55b7c5
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# minizork2-1988
diff --git a/alice.zabstr b/alice.zabstr
new file mode 100644
index 0000000..7420dde
--- /dev/null
+++ b/alice.zabstr
@@ -0,0 +1,132 @@
+
+<ROOM RIDDLE-ROOM (IN ROOMS) (DESC "Riddle Room") (NW TO CAROUSEL-ROOM) (EAST
+TO CIRCULAR-ROOM IF RIDDLE-DOOR IS OPEN) (FLAGS RLANDBIT) (ACTION RIDDLE-ROOM-F
+) (PSEUDO "RIDDLE" RIDDLE-PSEUDO)>
+<DEFINE-ROUTINE RIDDLE-ROOM-F>
+<DEFINE-ROUTINE RIDDLE-PSEUDO>
+<OBJECT RIDDLE-DOOR (IN RIDDLE-ROOM) (DESC "stone door") (SYNONYM DOOR) (
+ADJECTIVE GREAT STONE) (FLAGS DOORBIT CONTBIT NDESCBIT) (ACTION RIDDLE-DOOR-F)>
+
+<DEFINE-ROUTINE RIDDLE-DOOR-F>
+<ROOM CIRCULAR-ROOM (IN ROOMS) (DESC "Circular Room") (LDESC
+"This is a tall, damp room with brick walls. There are some etchings on
+the walls. A passage leads west.") (WEST TO RIDDLE-ROOM) (UP
+"The walls cannot be climbed.") (FLAGS RLANDBIT NONLANDBIT) (GLOBAL WELL)>
+<OBJECT BOTTOM-ETCHINGS (IN CIRCULAR-ROOM) (DESC "wall with etchings") (SYNONYM
+ETCHINGS WALL) (FLAGS READBIT NDESCBIT) (TEXT
+" o b o|
+|
+ A G I|
+|
+ E L|
+|
+ m p a")>
+<OBJECT PEARL-NECKLACE (IN CIRCULAR-ROOM) (DESC "pearl necklace") (SYNONYM
+NECKLACE TREASURE) (ADJECTIVE PEARL) (SIZE 10) (VALUE 15) (FLAGS TAKEBIT)>
+<OBJECT BUCKET (IN CIRCULAR-ROOM) (DESC "wooden bucket") (LDESC
+"There is a wooden bucket here, 3 feet in diameter and 3 feet high.") (SYNONYM
+BUCKET) (ADJECTIVE WOODEN) (CAPACITY 100) (SIZE 100) (VTYPE 0) (FLAGS VEHBIT
+OPENBIT CONTBIT) (CONTFCN BUCKET-CONT) (ACTION BUCKET-F)>
+<DEFINE-ROUTINE BUCKET-CONT>
+<DEFINE-ROUTINE BUCKET-F>
+<DEFINE-ROUTINE PASS-THE-BUCKET>
+<GLOBAL BUCKET-TOP-FLAG <>>
+<GLOBAL EVAPORATED <>>
+<DEFINE-ROUTINE I-BUCKET>
+<OBJECT WELL (IN LOCAL-GLOBALS) (DESC "well") (SYNONYM WELL) (ADJECTIVE MAGIC)
+(FLAGS NDESCBIT) (ACTION WELL-F)>
+<DEFINE-ROUTINE WELL-F>
+<ROOM TOP-OF-WELL (IN ROOMS) (DESC "Top of Well") (LDESC
+"You have made it to the top. Well done. There are etchings on the well. A
+crack runs across the floor at the doorway to the east, but it can be crossed
+easily. Another doorway leads northeast.") (EAST TO TEA-ROOM) (NE TO
+MACHINE-ROOM) (DOWN "It's a long way down!") (VALUE 10) (FLAGS RLANDBIT
+NONLANDBIT) (GLOBAL WELL) (PSEUDO "CRACK" CRACK-PSEUDO)>
+<DEFINE-ROUTINE CRACK-PSEUDO>
+<OBJECT TOP-ETCHINGS (IN TOP-OF-WELL) (DESC "wall with etchings") (SYNONYM
+ETCHINGS WALL) (FLAGS READBIT NDESCBIT) (TEXT
+" o b o|
+ r z|
+f M A G I C z|
+|
+c W E L L y|
+ o n|
+ m p a")>
+<OBJECT ROBOT (IN TOP-OF-WELL) (DESC "robot") (SYNONYM ROBOT) (FLAGS ACTORBIT
+CONTBIT OPENBIT) (ACTION ROBOT-F)>
+<DEFINE-ROUTINE ROBOT-F>
+<OBJECT ROBOT-LABEL (IN TOP-OF-WELL) (DESC "green piece of paper") (SYNONYM
+PAPER PIECE) (ADJECTIVE GREEN) (SIZE 3) (FLAGS READBIT TAKEBIT BURNBIT) (TEXT
+"This robot was trained at GUE Tech to perform simple household functions. To
+activate, say:|
+ >ROBOT, <thing to do>|
+A product of the Frobozz Magic Robot Company.")>
+<ROOM MACHINE-ROOM (IN ROOMS) (DESC "Machine Room") (LDESC
+"This room is full of assorted machinery, whirring noisily. On one wall is a
+triangular button labelled, \"DANGER -- HIGH VOLTAGE.\" There are exits to the
+south and southwest.") (SOUTH TO DINGY-CLOSET) (SW TO TOP-OF-WELL) (FLAGS
+RLANDBIT ONBIT)>
+<OBJECT TRIANGULAR-BUTTON (IN MACHINE-ROOM) (DESC "triangular button") (SYNONYM
+BUTTON) (ADJECTIVE TRIANGULAR) (FLAGS NDESCBIT) (ACTION TRIANGULAR-BUTTON-F)>
+<GLOBAL CAROUSEL-ON T>
+<DEFINE-ROUTINE TRIANGULAR-BUTTON-F>
+<ROOM DINGY-CLOSET (IN ROOMS) (DESC "Dingy Closet") (LDESC
+"This is a former broom closet. A larger room lies to the north. Chiselled
+on the wall are the words \"Protected by the Frobozz Magic Alarm Company.\"") (
+OUT TO MACHINE-ROOM) (NORTH TO MACHINE-ROOM) (FLAGS ONBIT RLANDBIT)>
+<OBJECT CAGE-OBJECT (IN DINGY-CLOSET) (DESC "solid steel cage") (SYNONYM CAGE)
+(ADJECTIVE STEEL SOLID) (FLAGS INVISIBLE)>
+<ROOM CAGE (IN ROOMS) (DESC "Cage") (LDESC
+"You are trapped in a solid steel cage.") (FLAGS RLANDBIT NWALLBIT ONBIT) (
+ACTION CAGE-F)>
+<GLOBAL CAGE-SOLVE-FLAG <>>
+<DEFINE-ROUTINE CAGE-F>
+<DEFINE-ROUTINE I-CAGE-DEATH>
+<ROOM TEA-ROOM (IN ROOMS) (DESC "Tea Room") (LDESC
+"An oblong table here is set for afternoon tea. It is clear that the users
+were indeed mad. To the east is a small hole (perhaps four inches high). A
+doorway leads west.") (EAST "Only a mouse could fit.") (WEST TO TOP-OF-WELL) (
+FLAGS RLANDBIT ONBIT) (PSEUDO "HOLE" ALICE-HOLE)>
+<DEFINE-ROUTINE ALICE-HOLE>
+<OBJECT PORTRAIT (IN TEA-ROOM) (DESC "portrait of J. Pierpont Flathead") (FDESC
+"A rare portrait of J. Pierpont Flathead hangs on the wall.") (SYNONYM PORTRAIT
+PAINTING TREASURE) (ADJECTIVE RARE FLATHEAD) (SIZE 25) (VALUE 20) (FLAGS
+TAKEBIT BURNBIT)>
+<OBJECT ALICE-TABLE (IN TEA-ROOM) (DESC "table") (SYNONYM TABLE) (ADJECTIVE
+OBLONG) (CAPACITY 50) (FLAGS CONTBIT SURFACEBIT OPENBIT)>
+<OBJECT GREEN-CAKE (SIZE 4) (IN ALICE-TABLE) (DESC
+"cake frosted with green letters") (SYNONYM CAKE ICING CAKES LETTER) (ADJECTIVE
+GREEN FROSTED) (FLAGS READBIT TAKEBIT FOODBIT) (TEXT
+"The icing spells, \"Eat Me.\"") (ACTION GREEN-CAKE-F)>
+<DEFINE-ROUTINE GREEN-CAKE-F>
+<OBJECT BLUE-CAKE (IN ALICE-TABLE) (DESC "cake frosted with blue letters") (
+SYNONYM CAKE ICING CAKES LETTER) (ADJECTIVE BLUE FROSTED) (SIZE 4) (FLAGS
+READBIT TAKEBIT FOODBIT) (ACTION CAKE-F)>
+<OBJECT ORANGE-CAKE (IN ALICE-TABLE) (DESC "cake frosted with orange letters")
+(SYNONYM CAKE CAKES ICING LETTER) (ADJECTIVE ORANGE FROSTED) (SIZE 4) (FLAGS
+READBIT TAKEBIT FOODBIT) (ACTION CAKE-F)>
+<OBJECT RED-CAKE (IN ALICE-TABLE) (DESC "cake frosted with red letters") (
+SYNONYM CAKE CAKES ICING LETTER) (ADJECTIVE RED FROSTED) (SIZE 4) (FLAGS
+READBIT TAKEBIT FOODBIT) (ACTION CAKE-F)>
+<DEFINE-ROUTINE CAKE-F>
+<DEFINE-ROUTINE CAKE-CRUMBLE>
+<ROOM POSTS-ROOM (IN ROOMS) (DESC "Posts Room") (LDESC
+"In the center of this enormous room, four wooden posts support a huge
+oblong roof. To the east is a large hole; to the west a gaping chasm.") (EAST
+TO POOL-ROOM) (WEST "A chasm blocks your way.") (FLAGS RLANDBIT ONBIT) (VALUE
+10) (GLOBAL CHASM) (ACTION POSTS-ROOM-F)>
+<DEFINE-ROUTINE POSTS-ROOM-F>
+<OBJECT POSTS (IN POSTS-ROOM) (DESC "group of wooden posts") (SYNONYM POSTS
+POST) (ADJECTIVE WOODEN) (FLAGS NDESCBIT)>
+<ROOM POOL-ROOM (IN ROOMS) (DESC "Pool Room") (LDESC
+"The far half of this room is depressed. The only exit is west.") (OUT TO
+POSTS-ROOM) (WEST TO POSTS-ROOM) (FLAGS RLANDBIT)>
+<OBJECT POOL (IN POOL-ROOM) (DESC "pool") (LDESC
+"The depressed area is filled with water. There is something hazy at the
+deepest part of the pool.") (SYNONYM POOL) (ACTION POOL-F)>
+<DEFINE-ROUTINE POOL-F>
+<OBJECT CANDY (IN POOL-ROOM) (DESC "package of candy") (LDESC
+"There is a package of candied insects here.") (SYNONYM PACKAGE CANDY INSECTS)
+(ADJECTIVE CANDIED RARE) (SIZE 8) (VALUE 15) (FLAGS FOODBIT TAKEBIT INVISIBLE
+READBIT) (ACTION CANDY-F)>
+<DEFINE-ROUTINE CANDY-F> \ No newline at end of file
diff --git a/alice.zap b/alice.zap
new file mode 100644
index 0000000..e7f613b
--- /dev/null
+++ b/alice.zap
@@ -0,0 +1,366 @@
+
+
+ .FUNCT RIDDLE-ROOM-F,RARG
+ EQUAL? RARG,M-LOOK \?CCL3
+ PRINTI "This bare room has an exit in the northwest corner. To the east is a great "
+ FSET? RIDDLE-DOOR,OPENBIT \?PRG11
+ PRINTI "open"
+ JUMP ?PRG13
+?PRG11: PRINTI "closed"
+?PRG13: PRINTI " door of stone. Above it is written: ""No one shall pass without solving this riddle:"
+ CRLF
+ CRLF
+ PRINT RIDDLE-TEXT
+ RTRUE
+?CCL3: EQUAL? RARG,M-BEG \FALSE
+ EQUAL? PRSA,V?SAY \FALSE
+ FSET? RIDDLE-DOOR,OPENBIT /FALSE
+ GET P-LEXV,P-CONT
+ EQUAL? STACK,W?WELL /?CTR23
+ ADD P-CONT,2
+ GET P-LEXV,STACK
+ EQUAL? STACK,W?WELL \?PRG29
+?CTR23: ADD SCORE,5 >SCORE
+ FSET RIDDLE-DOOR,OPENBIT
+ PRINTI "With a deafening clap of thunder, the door opens."
+ CRLF
+ JUMP ?CND20
+?PRG29: PRINTI "A hollow laugh comes from the door."
+ CRLF
+?CND20: SET 'P-CONT,FALSE-VALUE
+ SET 'QUOTE-FLAG,FALSE-VALUE
+ RTRUE
+
+
+ .FUNCT RIDDLE-PSEUDO
+ EQUAL? PRSA,V?READ,V?EXAMINE \FALSE
+ PRINT RIDDLE-TEXT
+ RTRUE
+
+
+ .FUNCT RIDDLE-DOOR-F
+ EQUAL? PRSA,V?OPEN \?PRD5
+ FSET? RIDDLE-DOOR,OPENBIT \?PRG10
+?PRD5: EQUAL? PRSA,V?CLOSE \FALSE
+ FSET? RIDDLE-DOOR,OPENBIT \FALSE
+?PRG10: PRINTR "It won't budge."
+
+
+ .FUNCT BUCKET-CONT
+ EQUAL? PRSA,V?TAKE \FALSE
+ IN? WINNER,BUCKET /FALSE
+ PRINTR "You must get in the bucket to reach it."
+
+
+ .FUNCT BUCKET-F,RARG=M-BEG
+ EQUAL? RARG,M-BEG \?CCL3
+ EQUAL? PRSA,V?BURN \?CCL6
+ EQUAL? PRSO,BUCKET \?CCL6
+ PRINTR "The bucket appears to be fireproof."
+?CCL6: EQUAL? PRSA,V?PUT,V?DROP \?CCL12
+ EQUAL? PRSO,WATER \?CCL12
+ EQUAL? PRSI,BUCKET \?CCL12
+ IN? BUCKET,CIRCULAR-ROOM \?CCL12
+ IN? WINNER,BUCKET /?CCL12
+ MOVE BUCKET,TOP-OF-WELL
+ MOVE WATER,BUCKET
+ SET 'BUCKET-TOP-FLAG,TRUE-VALUE
+ CALL QUEUE,I-BUCKET,100
+ PUT STACK,0,1
+ PRINTR "The bucket swiftly rises up, and is gone."
+?CCL12: EQUAL? PRSA,V?KICK \FALSE
+ CALL JIGS-UP,STR?172
+ RSTACK
+?CCL3: EQUAL? RARG,M-END \?CCL23
+ IN? WATER,BUCKET \?CCL26
+ ZERO? BUCKET-TOP-FLAG \?CCL26
+ SET 'BUCKET-TOP-FLAG,TRUE-VALUE
+ SET 'EVAPORATED,FALSE-VALUE
+ CALL PASS-THE-BUCKET,TOP-OF-WELL
+ CALL QUEUE,I-BUCKET,100
+ PUT STACK,0,1
+ PRINTI "The bucket rises and"
+ PRINT STOPS
+ RTRUE
+?CCL26: ZERO? BUCKET-TOP-FLAG /FALSE
+ IN? WATER,BUCKET /FALSE
+ ZERO? EVAPORATED /?PRG40
+ PRINTI "The last of the water evaporates, and the bucket descends."
+ CRLF
+ CRLF
+ JUMP ?CND35
+?PRG40: PRINTI "The bucket descends and"
+ PRINT STOPS
+?CND35: SET 'BUCKET-TOP-FLAG,FALSE-VALUE
+ CALL PASS-THE-BUCKET,CIRCULAR-ROOM
+ RSTACK
+?CCL23: EQUAL? PRSA,V?CLIMB-ON \FALSE
+ CALL PERFORM,V?ENTER,PRSO
+ RTRUE
+
+
+ .FUNCT PASS-THE-BUCKET,R
+ MOVE BUCKET,R
+ IN? WINNER,BUCKET \FALSE
+ CALL GOTO,R
+ RSTACK
+
+
+ .FUNCT I-BUCKET
+ IN? WATER,BUCKET \FALSE
+ SET 'EVAPORATED,TRUE-VALUE
+ REMOVE WATER
+ RFALSE
+
+
+ .FUNCT WELL-F
+ EQUAL? PRSA,V?DROP,V?PUT,V?THROW \?CCL3
+ FSET? PRSO,TAKEBIT \?CCL3
+ MOVE PRSO,CIRCULAR-ROOM
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " is now at the bottom of the well."
+?CCL3: EQUAL? PRSA,V?CLIMB-DOWN,V?CLIMB \FALSE
+ PRINTR "You can't climb the well."
+
+
+ .FUNCT CRACK-PSEUDO
+ EQUAL? PRSA,V?EXAMINE \FALSE
+ PRINTR "It's a small, uninteresting crack."
+
+
+ .FUNCT ROBOT-F,RARG=M-OBJECT
+ EQUAL? WINNER,ROBOT \?CCL3
+ EQUAL? PRSA,V?SGIVE /FALSE
+ EQUAL? PRSA,V?FOLLOW \?CCL8
+ PRINTR """I'm too primitive. I can walk in any direction you order, though."""
+?CCL8: EQUAL? PRSA,V?MOVE,V?TAKE,V?RAISE \?CCL12
+ EQUAL? PRSO,CAGE-OBJECT \?CCL12
+ PRINTI "The robots pulverizes the cage to dust."
+ CRLF
+ CRLF
+ CALL INT,I-CAGE-DEATH
+ PUT STACK,0,0
+ SET 'WINNER,ADVENTURER
+ FCLEAR ROBOT,NDESCBIT
+ FSET PALANTIR-1,TAKEBIT
+ MOVE ROBOT,DINGY-CLOSET
+ SET 'CAGE-SOLVE-FLAG,TRUE-VALUE
+ CALL GOTO,DINGY-CLOSET
+ RSTACK
+?CCL12: EQUAL? PRSA,V?THROW,V?PUT,V?DROP \?CCL18
+ CALL ACCESSIBLE?,ROBOT
+ ZERO? STACK /FALSE
+ PRINT B-W-C
+ IN? PRSO,ROBOT \?PRG29
+ PRINTC 34
+ CRLF
+ RFALSE
+?PRG29: PRINTR " I don't have that!"""
+?CCL18: EQUAL? PRSA,V?WALK /?CTR31
+ EQUAL? PRSA,V?PUSH,V?TAKE \?CCL32
+ FSET? PRSO,ACTORBIT /?CCL32
+?CTR31: CALL ACCESSIBLE?,ROBOT
+ ZERO? STACK /FALSE
+ PRINT B-W-C
+ PRINTC 34
+ CRLF
+ RFALSE
+?CCL32: CALL ACCESSIBLE?,ROBOT
+ ZERO? STACK /TRUE
+ PRINTR """My programming is insufficient for that task."""
+?CCL3: EQUAL? PRSA,V?CLOSE,V?LOOK-INSIDE,V?OPEN \?CCL47
+ PRINTR "The robot has no access panel."
+?CCL47: EQUAL? PRSA,V?GIVE \?CCL51
+ EQUAL? PRSI,ROBOT \?CCL51
+ MOVE PRSO,ROBOT
+ PRINTI "The robot accepts the "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+?CCL51: EQUAL? PRSA,V?MUNG,V?THROW \FALSE
+ PRINTI "The robot (being of shoddy construction) disintegrates before your eyes."
+ CRLF
+ EQUAL? PRSA,V?THROW \?CCL62
+ PUSH PRSI
+ JUMP ?CND60
+?CCL62: PUSH PRSO
+?CND60: REMOVE STACK
+ RTRUE
+
+
+ .FUNCT TRIANGULAR-BUTTON-F
+ EQUAL? PRSA,V?PUSH \FALSE
+ EQUAL? WINNER,ADVENTURER \?CCL6
+ CALL JIGS-UP,STR?178
+ RSTACK
+?CCL6: ZERO? CAROUSEL-ON /?PRT7
+ SET 'CAROUSEL-ON,0
+ JUMP ?PRE9
+?PRT7: SET 'CAROUSEL-ON,1
+?PRE9: FSET? VIOLIN,INVISIBLE \?PRG15
+ FCLEAR VIOLIN,INVISIBLE
+ FCLEAR CAROUSEL-ROOM,TOUCHBIT
+ PRINTR "You hear a distant thump."
+?PRG15: PRINTR "Click."
+
+
+ .FUNCT CAGE-F,RARG
+ ZERO? CAGE-SOLVE-FLAG /FALSE
+ SET 'HERE,DINGY-CLOSET
+ RETURN HERE
+
+
+ .FUNCT I-CAGE-DEATH
+ EQUAL? HERE,DINGY-CLOSET,CAGE \FALSE
+ FSET PALANTIR-1,INVISIBLE
+ CALL JIGS-UP,STR?181
+ RSTACK
+
+
+ .FUNCT ALICE-HOLE
+ EQUAL? PRSA,V?EXAMINE,V?ENTER \?CCL3
+ CALL DO-WALK,P?EAST
+ RSTACK
+?CCL3: EQUAL? PRSA,V?LOOK-INSIDE \?CCL5
+ PRINT ONLY-DARKNESS
+ RTRUE
+?CCL5: EQUAL? PRSA,V?PUT \FALSE
+ EQUAL? PRSI,PSEUDO-OBJECT \FALSE
+ PRINTR "It doesn't fit."
+
+
+ .FUNCT GREEN-CAKE-F,F,N
+ EQUAL? PRSA,V?EAT \?CCL3
+ EQUAL? PRSO,GREEN-CAKE \?CCL3
+ EQUAL? HERE,TEA-ROOM \?CCL3
+ REMOVE GREEN-CAKE
+ FSET ALICE-TABLE,INVISIBLE
+ FSET ROBOT,INVISIBLE
+ FIRST? HERE >F /?PRG8
+?PRG8: ZERO? F /?PRG17
+ NEXT? F >N /?BOGUS12
+?BOGUS12: EQUAL? F,ADVENTURER /?CND13
+ FSET? F,TAKEBIT \?CND13
+ FSET F,NONLANDBIT
+ FSET F,TRYTAKEBIT
+ MOVE F,POSTS-ROOM
+?CND13: SET 'F,N
+ JUMP ?PRG8
+?PRG17: PRINTI "Suddenly, the room becomes huge (although your possessions retain their normal size)."
+ CRLF
+ CRLF
+ CALL GOTO,POSTS-ROOM
+ RSTACK
+?CCL3: CALL CAKE-CRUMBLE
+ RSTACK
+
+
+ .FUNCT CAKE-F,F,N
+ EQUAL? PRSA,V?READ \?CCL3
+ FSET? PRSO,NONLANDBIT \?PRG9
+ PRINTR "The cake is now too tall to read."
+?PRG9: PRINTI "The letters are tiny; all you can make out is ""E"
+ EQUAL? PRSO,RED-CAKE \?CCL13
+ PRINTI "VA"
+ JUMP ?PRG22
+?CCL13: EQUAL? PRSO,ORANGE-CAKE \?PRG20
+ PRINTI "XP"
+ JUMP ?PRG22
+?PRG20: PRINTI "NL"
+?PRG22: PRINTR """."
+?CCL3: EQUAL? PRSA,V?EAT \?CCL25
+ EQUAL? HERE,TEA-ROOM,POSTS-ROOM,POOL-ROOM \?CCL25
+ EQUAL? PRSO,ORANGE-CAKE \?CCL30
+ REMOVE PRSO
+ CALL JIGS-UP,STR?186
+ RSTACK
+?CCL30: EQUAL? PRSO,RED-CAKE \?CCL32
+ REMOVE PRSO
+ CALL JIGS-UP,STR?187
+ RSTACK
+?CCL32: EQUAL? PRSO,BLUE-CAKE \FALSE
+ REMOVE PRSO
+ PRINTI "The room shrinks."
+ CRLF
+ CRLF
+ EQUAL? HERE,POSTS-ROOM \?CCL39
+ FCLEAR ROBOT,INVISIBLE
+ FCLEAR ALICE-TABLE,INVISIBLE
+ FSET POSTS,INVISIBLE
+ FIRST? HERE >F /?PRG41
+?PRG41: ZERO? F /?REP42
+ NEXT? F >N /?BOGUS45
+?BOGUS45: EQUAL? F,ADVENTURER /?CND46
+ FSET? F,TAKEBIT \?CND46
+ FCLEAR F,NONLANDBIT
+ FCLEAR F,TRYTAKEBIT
+ MOVE F,TEA-ROOM
+?CND46: SET 'F,N
+ JUMP ?PRG41
+?REP42: CALL GOTO,TEA-ROOM
+ RSTACK
+?CCL39: CALL JIGS-UP,STR?188
+ RSTACK
+?CCL25: EQUAL? PRSA,V?PUT,V?THROW \?CCL51
+ EQUAL? PRSO,ORANGE-CAKE \?CCL51
+ EQUAL? HERE,TEA-ROOM,POSTS-ROOM,POOL-ROOM \?CCL51
+ REMOVE PRSO
+ CALL JIGS-UP,STR?186
+ RSTACK
+?CCL51: EQUAL? PRSA,V?PUT,V?THROW \?CCL56
+ EQUAL? PRSI,POOL \?CCL56
+ EQUAL? PRSO,BLUE-CAKE,ORANGE-CAKE \?CND59
+ PRINTI """Splash!"""
+ CRLF
+ REMOVE PRSO
+ RTRUE
+?CND59: MOVE PRSO,HERE
+ REMOVE PRSI
+ FCLEAR CANDY,INVISIBLE
+ PRINTR "The pool evaporates, leaving a damp (but still valuable) package of rare candies."
+?CCL56: CALL CAKE-CRUMBLE
+ RSTACK
+
+
+ .FUNCT CAKE-CRUMBLE,CAKE
+ FSET? PRSO,FOODBIT \?CCL3
+ SET 'CAKE,PRSO
+ JUMP ?CND1
+?CCL3: SET 'CAKE,PRSI
+?CND1: EQUAL? HERE,TEA-ROOM,POSTS-ROOM,POOL-ROOM /FALSE
+ EQUAL? HERE,MACHINE-ROOM,DINGY-CLOSET,TOP-OF-WELL /FALSE
+ EQUAL? HERE,CAGE /FALSE
+ REMOVE CAKE
+ PRINTI "The "
+ PRINTD CAKE
+ PRINTR " crumbles to dust."
+
+
+ .FUNCT POSTS-ROOM-F,RARG
+ EQUAL? RARG,M-BEG \FALSE
+ EQUAL? PRSA,V?TAKE \FALSE
+ FSET? PRSO,NONLANDBIT \FALSE
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " is now huge. You have no hope of taking it."
+
+
+ .FUNCT POOL-F
+ EQUAL? PRSA,V?DRINK \?CCL3
+ CALL PERFORM,V?DRINK,WATER
+ RTRUE
+?CCL3: EQUAL? PRSA,V?LOOK-UNDER \?CCL5
+ PRINTR "You can't make out what's below the surface."
+?CCL5: EQUAL? PRSA,V?ENTER \FALSE
+ CALL V-SWIM
+ RSTACK
+
+
+ .FUNCT CANDY-F
+ EQUAL? PRSA,V?READ,V?EXAMINE \?CCL3
+ PRINTR """Frobozz Magic Candy Company -- Special Assortment! Candied Grasshoppers, Chocolated Ants, and Worms Glacee!"""
+?CCL3: EQUAL? PRSA,V?OPEN,V?EAT \FALSE
+ PRINTR "It's too rich for your tastes."
+
+ .ENDI
diff --git a/alice.zil b/alice.zil
new file mode 100644
index 0000000..44db9fc
--- /dev/null
+++ b/alice.zil
@@ -0,0 +1,607 @@
+"ALICE for
+ Mini-Zork II: The Wizard of Frobozz
+ (c) Copyright 1988 Infocom, Inc. All Rights Reserved."
+
+<ROOM RIDDLE-ROOM
+ (IN ROOMS)
+ (DESC "Riddle Room")
+ (NW TO CAROUSEL-ROOM)
+ (EAST TO CIRCULAR-ROOM IF RIDDLE-DOOR IS OPEN)
+ (FLAGS RLANDBIT)
+ (ACTION RIDDLE-ROOM-F)
+ (PSEUDO "RIDDLE" RIDDLE-PSEUDO)>
+
+<ROUTINE RIDDLE-ROOM-F (RARG)
+ <COND (<EQUAL? .RARG ,M-LOOK>
+ <TELL
+"This bare room has an exit in the northwest corner. To the east is a great ">
+ <COND (<FSET? ,RIDDLE-DOOR ,OPENBIT>
+ <TELL "open">)
+ (T
+ <TELL "closed">)>
+ <TELL
+" door of stone. Above it is written: \"No one shall pass without solving
+this riddle:" CR CR ,RIDDLE-TEXT>)
+ (<EQUAL? .RARG ,M-BEG>
+ <COND (<VERB? SAY>
+ <COND (<FSET? ,RIDDLE-DOOR ,OPENBIT>
+ <RFALSE>)
+ (<OR <EQUAL? <GET ,P-LEXV ,P-CONT> ,W?WELL>
+ <EQUAL? <GET ,P-LEXV <+ ,P-CONT 2>> ,W?WELL>>
+ <SETG SCORE <+ ,SCORE 5>>
+ <FSET ,RIDDLE-DOOR ,OPENBIT>
+ <TELL
+"With a deafening clap of thunder, the door opens." CR>)
+ (T
+ <TELL "A hollow laugh comes from the door." CR>)>
+ <SETG P-CONT <>>
+ <SETG QUOTE-FLAG <>>
+ <RTRUE>)>)>>
+
+<ROUTINE RIDDLE-PSEUDO ()
+ <COND (<VERB? EXAMINE READ>
+ <TELL ,RIDDLE-TEXT>)>>
+
+<OBJECT RIDDLE-DOOR
+ (IN RIDDLE-ROOM)
+ (DESC "stone door")
+ (SYNONYM DOOR)
+ (ADJECTIVE GREAT STONE)
+ (FLAGS DOORBIT CONTBIT NDESCBIT)
+ (ACTION RIDDLE-DOOR-F)>
+
+<ROUTINE RIDDLE-DOOR-F ()
+ <COND (<OR <AND <VERB? OPEN>
+ <NOT <FSET? ,RIDDLE-DOOR ,OPENBIT>>>
+ <AND <VERB? CLOSE>
+ <FSET? ,RIDDLE-DOOR ,OPENBIT>>>
+ <TELL "It won't budge." CR>)>>
+
+<ROOM CIRCULAR-ROOM
+ (IN ROOMS)
+ (DESC "Circular Room")
+ (LDESC
+"This is a tall, damp room with brick walls. There are some etchings on
+the walls. A passage leads west.")
+ (WEST TO RIDDLE-ROOM)
+ (UP "The walls cannot be climbed.")
+ (FLAGS RLANDBIT NONLANDBIT)
+ (GLOBAL WELL)>
+
+<OBJECT BOTTOM-ETCHINGS
+ (IN CIRCULAR-ROOM)
+ (DESC "wall with etchings")
+ (SYNONYM ETCHINGS WALL)
+ (FLAGS READBIT NDESCBIT)
+ (TEXT
+" o b o|
+|
+ A G I|
+|
+ E L|
+|
+ m p a")>
+
+<OBJECT PEARL-NECKLACE
+ (IN CIRCULAR-ROOM)
+ (DESC "pearl necklace")
+ (SYNONYM NECKLACE TREASURE)
+ (ADJECTIVE PEARL)
+ (SIZE 10)
+ (VALUE 15)
+ (FLAGS TAKEBIT)>
+
+<OBJECT BUCKET
+ (IN CIRCULAR-ROOM)
+ (DESC "wooden bucket")
+ (LDESC
+"There is a wooden bucket here, 3 feet in diameter and 3 feet high.")
+ (SYNONYM BUCKET)
+ (ADJECTIVE WOODEN)
+ (CAPACITY 100)
+ (SIZE 100)
+ (VTYPE 0)
+ (FLAGS VEHBIT OPENBIT CONTBIT)
+ (CONTFCN BUCKET-CONT)
+ (ACTION BUCKET-F)>
+
+<ROUTINE BUCKET-CONT ()
+ <COND (<AND <VERB? TAKE>
+ <NOT <IN? ,WINNER ,BUCKET>>>
+ <TELL "You must get in the bucket to reach it." CR>)>>
+
+<ROUTINE BUCKET-F ("OPTIONAL" (RARG ,M-BEG))
+ <COND (<EQUAL? .RARG ,M-BEG>
+ <COND (<AND <VERB? BURN>
+ <EQUAL? ,PRSO ,BUCKET>>
+ <TELL "The bucket appears to be fireproof." CR>)
+ (<AND <VERB? DROP PUT>
+ <EQUAL? ,PRSO ,WATER>
+ <EQUAL? ,PRSI ,BUCKET>
+ <IN? ,BUCKET ,CIRCULAR-ROOM>
+ <NOT <IN? ,WINNER ,BUCKET>>>
+ <MOVE ,BUCKET ,TOP-OF-WELL>
+ <MOVE ,WATER ,BUCKET>
+ <SETG BUCKET-TOP-FLAG T>
+ <ENABLE <QUEUE I-BUCKET 100>>
+ <TELL "The bucket swiftly rises up, and is gone." CR>)
+ (<VERB? KICK>
+ <JIGS-UP "If you insist.">)>)
+ (<EQUAL? .RARG ,M-END>
+ <COND (<AND <IN? ,WATER ,BUCKET>
+ <NOT ,BUCKET-TOP-FLAG>>
+ <SETG BUCKET-TOP-FLAG T>
+ <SETG EVAPORATED <>>
+ <PASS-THE-BUCKET ,TOP-OF-WELL>
+ <ENABLE <QUEUE I-BUCKET 100>>
+ <TELL "The bucket rises and" ,STOPS>)
+ (<AND ,BUCKET-TOP-FLAG
+ <NOT <IN? ,WATER ,BUCKET>>>
+ <COND (,EVAPORATED
+ <TELL
+"The last of the water evaporates, and the bucket descends." CR CR>)
+ (T
+ <TELL "The bucket descends and" ,STOPS>)>
+ <SETG BUCKET-TOP-FLAG <>>
+ <PASS-THE-BUCKET ,CIRCULAR-ROOM>)>)
+ (<VERB? CLIMB-ON>
+ <PERFORM ,V?ENTER ,PRSO>
+ <RTRUE>)>>
+
+<ROUTINE PASS-THE-BUCKET (R)
+ <MOVE ,BUCKET .R>
+ <COND (<IN? ,WINNER ,BUCKET>
+ <GOTO .R>)>>
+
+<GLOBAL BUCKET-TOP-FLAG <>>
+
+<GLOBAL EVAPORATED <>>
+
+<ROUTINE I-BUCKET ()
+ <COND (<IN? ,WATER ,BUCKET>
+ <SETG EVAPORATED T>
+ <REMOVE ,WATER>)>
+ <RFALSE>>
+
+<OBJECT WELL
+ (IN LOCAL-GLOBALS)
+ (DESC "well")
+ (SYNONYM WELL)
+ (ADJECTIVE MAGIC)
+ (FLAGS NDESCBIT)
+ (ACTION WELL-F)>
+
+<ROUTINE WELL-F ()
+ <COND (<AND <VERB? THROW PUT DROP>
+ <FSET? ,PRSO ,TAKEBIT>>
+ <MOVE ,PRSO ,CIRCULAR-ROOM>
+ <TELL "The " D ,PRSO " is now at the bottom of the well." CR>)
+ (<VERB? CLIMB CLIMB-DOWN>
+ <TELL "You can't climb the well." CR>)>>
+
+<ROOM TOP-OF-WELL
+ (IN ROOMS)
+ (DESC "Top of Well")
+ (LDESC
+"You have made it to the top. Well done. There are etchings on the well. A
+crack runs across the floor at the doorway to the east, but it can be crossed
+easily. Another doorway leads northeast.")
+ (EAST TO TEA-ROOM)
+ (NE TO MACHINE-ROOM)
+ (DOWN "It's a long way down!")
+ (VALUE 10)
+ (FLAGS RLANDBIT NONLANDBIT)
+ (GLOBAL WELL)
+ (PSEUDO "CRACK" CRACK-PSEUDO)>
+
+<ROUTINE CRACK-PSEUDO ()
+ <COND (<VERB? EXAMINE>
+ <TELL "It's a small, uninteresting crack." CR>)>>
+
+<OBJECT TOP-ETCHINGS
+ (IN TOP-OF-WELL)
+ (DESC "wall with etchings")
+ (SYNONYM ETCHINGS WALL)
+ (FLAGS READBIT NDESCBIT)
+ (TEXT
+" o b o|
+ r z|
+f M A G I C z|
+|
+c W E L L y|
+ o n|
+ m p a")>
+
+<OBJECT ROBOT
+ (IN TOP-OF-WELL)
+ (DESC "robot")
+ (SYNONYM ROBOT)
+ (FLAGS ACTORBIT CONTBIT OPENBIT)
+ (ACTION ROBOT-F)>
+
+<ROUTINE ROBOT-F ("OPTIONAL" (RARG ,M-OBJECT)) ;"RARG necesary?"
+ <COND (<EQUAL? ,WINNER ,ROBOT>
+ <COND (<VERB? SGIVE>
+ <RFALSE>)
+ (<VERB? FOLLOW>
+ <TELL
+"\"I'm too primitive. I can walk in any direction you order, though.\"" CR>)
+ (<AND <VERB? RAISE TAKE MOVE>
+ <EQUAL? ,PRSO ,CAGE-OBJECT>>
+ <TELL "The robots pulverizes the cage to dust." CR CR>
+ <DISABLE <INT I-CAGE-DEATH>>
+ <SETG WINNER ,ADVENTURER>
+ <FCLEAR ,ROBOT ,NDESCBIT>
+ <FSET ,PALANTIR-1 ,TAKEBIT>
+ <MOVE ,ROBOT ,DINGY-CLOSET>
+ <SETG CAGE-SOLVE-FLAG T>
+ <GOTO ,DINGY-CLOSET>)
+ (<VERB? DROP PUT THROW>
+ <COND (<NOT <ACCESSIBLE? ,ROBOT>>
+ <RFALSE>)
+ (T
+ <TELL ,B-W-C>
+ <COND (<IN? ,PRSO ,ROBOT>
+ <TELL "\"" CR>
+ <RFALSE>)
+ (T
+ <TELL " I don't have that!\"" CR>)>)>)
+ (<OR <VERB? WALK>
+ <AND <VERB? TAKE PUSH>
+ <NOT <FSET? ,PRSO ,ACTORBIT>>>>
+ <COND (<NOT <ACCESSIBLE? ,ROBOT>>
+ <RFALSE>)
+ (T
+ <TELL ,B-W-C "\"" CR>)>
+ <RFALSE>)
+ (T
+ <COND (<ACCESSIBLE? ,ROBOT>
+ <TELL
+"\"My programming is insufficient for that task.\"" CR>)>
+ <RTRUE>)>)
+ (<VERB? OPEN LOOK-INSIDE CLOSE>
+ <TELL "The robot has no access panel." CR>)
+ (<AND <VERB? GIVE>
+ <EQUAL? ,PRSI ,ROBOT>>
+ <MOVE ,PRSO ,ROBOT>
+ <TELL "The robot accepts the " D ,PRSO ,PERIOD-CR>)
+ (<VERB? THROW MUNG>
+ <TELL
+"The robot (being of shoddy construction) disintegrates before your eyes." CR>
+ <REMOVE <COND (<VERB? THROW> ,PRSI)
+ (T ,PRSO)>>)>>
+
+<OBJECT ROBOT-LABEL
+ (IN TOP-OF-WELL)
+ (DESC "green piece of paper")
+ (SYNONYM PAPER PIECE)
+ (ADJECTIVE GREEN)
+ (SIZE 3)
+ (FLAGS READBIT TAKEBIT BURNBIT)
+ (TEXT
+"This robot was trained at GUE Tech to perform simple household functions. To
+activate, say:|
+ >ROBOT, <thing to do>|
+A product of the Frobozz Magic Robot Company.")>
+
+<ROOM MACHINE-ROOM
+ (IN ROOMS)
+ (DESC "Machine Room")
+ (LDESC
+"This room is full of assorted machinery, whirring noisily. On one wall is a
+triangular button labelled, \"DANGER -- HIGH VOLTAGE.\" There are exits to the
+south and southwest.")
+ (SOUTH TO DINGY-CLOSET)
+ (SW TO TOP-OF-WELL)
+ (FLAGS RLANDBIT ONBIT)>
+
+<OBJECT TRIANGULAR-BUTTON
+ (IN MACHINE-ROOM)
+ (DESC "triangular button")
+ (SYNONYM BUTTON)
+ (ADJECTIVE TRIANGULAR)
+ (FLAGS NDESCBIT)
+ (ACTION TRIANGULAR-BUTTON-F)>
+
+<GLOBAL CAROUSEL-ON T>
+
+<ROUTINE TRIANGULAR-BUTTON-F ()
+ <COND (<VERB? PUSH>
+ <COND (<EQUAL? ,WINNER ,ADVENTURER>
+ <JIGS-UP "You are instantly electrocuted.">)
+ (T
+ <SETG CAROUSEL-ON <NOT ,CAROUSEL-ON>>
+ <COND (<FSET? ,VIOLIN ,INVISIBLE>
+ <FCLEAR ,VIOLIN ,INVISIBLE>
+ <FCLEAR ,CAROUSEL-ROOM ,TOUCHBIT>
+ <TELL "You hear a distant thump." CR>)
+ (T
+ <TELL "Click." CR>)>)>)>>
+
+<ROOM DINGY-CLOSET
+ (IN ROOMS)
+ (DESC "Dingy Closet")
+ (LDESC
+"This is a former broom closet. A larger room lies to the north. Chiselled
+on the wall are the words \"Protected by the Frobozz Magic Alarm Company.\"")
+ (OUT TO MACHINE-ROOM)
+ (NORTH TO MACHINE-ROOM)
+ (FLAGS ONBIT RLANDBIT)>
+
+<OBJECT CAGE-OBJECT
+ (IN DINGY-CLOSET)
+ (DESC "solid steel cage")
+ (SYNONYM CAGE)
+ (ADJECTIVE STEEL SOLID)
+ (FLAGS INVISIBLE)>
+
+<ROOM CAGE
+ (IN ROOMS)
+ (DESC "Cage")
+ (LDESC "You are trapped in a solid steel cage.")
+ (FLAGS RLANDBIT NWALLBIT ONBIT)
+ (ACTION CAGE-F)>
+
+<GLOBAL CAGE-SOLVE-FLAG <>>
+
+<ROUTINE CAGE-F (RARG)
+ <COND (,CAGE-SOLVE-FLAG
+ <SETG HERE ,DINGY-CLOSET>)>>
+
+<ROUTINE I-CAGE-DEATH ()
+ <COND (<EQUAL? ,HERE ,DINGY-CLOSET ,CAGE>
+ <FSET ,PALANTIR-1 ,INVISIBLE>
+ <JIGS-UP "The poison gas takes effect.">)>>
+
+<ROOM TEA-ROOM
+ (IN ROOMS)
+ (DESC "Tea Room")
+ (LDESC
+"An oblong table here is set for afternoon tea. It is clear that the users
+were indeed mad. To the east is a small hole (perhaps four inches high). A
+doorway leads west.")
+ (EAST "Only a mouse could fit.")
+ (WEST TO TOP-OF-WELL)
+ (FLAGS RLANDBIT ONBIT)
+ (PSEUDO "HOLE" ALICE-HOLE)>
+
+<ROUTINE ALICE-HOLE ()
+ <COND (<VERB? ENTER EXAMINE>
+ <DO-WALK ,P?EAST>)
+ (<VERB? LOOK-INSIDE>
+ <TELL ,ONLY-DARKNESS>)
+ (<AND <VERB? PUT>
+ <EQUAL? ,PRSI ,PSEUDO-OBJECT>>
+ <TELL "It doesn't fit." CR>)>>
+
+<OBJECT PORTRAIT
+ (IN TEA-ROOM)
+ (DESC "portrait of J. Pierpont Flathead")
+ (FDESC "A rare portrait of J. Pierpont Flathead hangs on the wall.")
+ (SYNONYM PORTRAIT PAINTING TREASURE)
+ (ADJECTIVE RARE FLATHEAD)
+ (SIZE 25)
+ (VALUE 20)
+ (FLAGS TAKEBIT BURNBIT)>
+
+<OBJECT ALICE-TABLE
+ (IN TEA-ROOM)
+ (DESC "table")
+ (SYNONYM TABLE)
+ (ADJECTIVE OBLONG)
+ (CAPACITY 50)
+ (FLAGS CONTBIT SURFACEBIT OPENBIT)>
+
+<OBJECT GREEN-CAKE
+ (SIZE 4)
+ (IN ALICE-TABLE)
+ (DESC "cake frosted with green letters")
+ (SYNONYM CAKE ICING CAKES LETTER)
+ (ADJECTIVE GREEN FROSTED)
+ (FLAGS READBIT TAKEBIT FOODBIT)
+ (TEXT "The icing spells, \"Eat Me.\"")
+ (ACTION GREEN-CAKE-F)>
+
+<ROUTINE GREEN-CAKE-F ("AUX" F N)
+ <COND (<AND <VERB? EAT>
+ <EQUAL? ,PRSO ,GREEN-CAKE>
+ <EQUAL? ,HERE ,TEA-ROOM>>
+ <REMOVE ,GREEN-CAKE>
+ <FSET ,ALICE-TABLE ,INVISIBLE>
+ <FSET ,ROBOT ,INVISIBLE>
+ <SET F <FIRST? ,HERE>>
+ <REPEAT ()
+ <COND (<NOT .F>
+ <RETURN>)>
+ <SET N <NEXT? .F>>
+ <COND (<AND <NOT <EQUAL? .F ,ADVENTURER>>
+ <FSET? .F ,TAKEBIT>>
+ <FSET .F ,NONLANDBIT>
+ <FSET .F ,TRYTAKEBIT>
+ <MOVE .F ,POSTS-ROOM>)>
+ <SET F .N>>
+ <TELL
+"Suddenly, the room becomes huge (although your possessions retain their
+normal size)." CR CR>
+ <GOTO ,POSTS-ROOM>)
+ (T
+ <CAKE-CRUMBLE>)>>
+
+<OBJECT BLUE-CAKE
+ (IN ALICE-TABLE)
+ (DESC "cake frosted with blue letters")
+ (SYNONYM CAKE ICING CAKES LETTER)
+ (ADJECTIVE BLUE FROSTED)
+ (SIZE 4)
+ (FLAGS READBIT TAKEBIT FOODBIT)
+ (ACTION CAKE-F)>
+
+<OBJECT ORANGE-CAKE
+ (IN ALICE-TABLE)
+ (DESC "cake frosted with orange letters")
+ (SYNONYM CAKE CAKES ICING LETTER)
+ (ADJECTIVE ORANGE FROSTED)
+ (SIZE 4)
+ (FLAGS READBIT TAKEBIT FOODBIT)
+ (ACTION CAKE-F)>
+
+<OBJECT RED-CAKE
+ (IN ALICE-TABLE)
+ (DESC "cake frosted with red letters")
+ (SYNONYM CAKE CAKES ICING LETTER)
+ (ADJECTIVE RED FROSTED)
+ (SIZE 4)
+ (FLAGS READBIT TAKEBIT FOODBIT)
+ (ACTION CAKE-F)>
+
+<ROUTINE CAKE-F ("AUX" F N)
+ <COND (<VERB? READ>
+ <COND (<FSET? ,PRSO ,NONLANDBIT>
+ <TELL "The cake is now too tall to read." CR>)
+ (T
+ <TELL
+"The letters are tiny; all you can make out is \"E">
+ <COND (<EQUAL? ,PRSO ,RED-CAKE>
+ <TELL "VA">)
+ (<EQUAL? ,PRSO ,ORANGE-CAKE>
+ <TELL "XP">)
+ (T
+ <TELL "NL">)>
+ <TELL "\"." CR>)>)
+ (<AND <VERB? EAT>
+ <EQUAL? ,HERE ,TEA-ROOM ,POSTS-ROOM ,POOL-ROOM>>
+ <COND (<EQUAL? ,PRSO ,ORANGE-CAKE>
+ <REMOVE ,PRSO>
+ <JIGS-UP
+"You are blasted to smithereens (wherever they are).">)
+ (<EQUAL? ,PRSO ,RED-CAKE>
+ <REMOVE ,PRSO>
+ <JIGS-UP "Taste: yum. Effect: massive dehydration.">)
+ (<EQUAL? ,PRSO ,BLUE-CAKE>
+ <REMOVE ,PRSO>
+ <TELL "The room shrinks." CR CR>
+ <COND (<EQUAL? ,HERE ,POSTS-ROOM>
+ <FCLEAR ,ROBOT ,INVISIBLE>
+ <FCLEAR ,ALICE-TABLE ,INVISIBLE>
+ <FSET ,POSTS ,INVISIBLE>
+ <SET F <FIRST? ,HERE>>
+ <REPEAT ()
+ <COND (<NOT .F>
+ <RETURN>)>
+ <SET N <NEXT? .F>>
+ <COND (<AND <NOT <EQUAL? .F ,ADVENTURER>>
+ <FSET? .F ,TAKEBIT>>
+ <FCLEAR .F ,NONLANDBIT>
+ <FCLEAR .F ,TRYTAKEBIT>
+ <MOVE .F ,TEA-ROOM>)>
+ <SET F .N>>
+ <GOTO ,TEA-ROOM>)
+ (T
+ <JIGS-UP
+"The room is now too small to hold you, and the walls are tougher
+than your body." >)>)>)
+ (<AND <VERB? THROW PUT>
+ <EQUAL? ,PRSO ,ORANGE-CAKE>
+ <EQUAL? ,HERE ,TEA-ROOM ,POSTS-ROOM ,POOL-ROOM>>
+ <REMOVE ,PRSO>
+ <JIGS-UP
+"You are blasted to smithereens (wherever they are).">)
+ (<AND <VERB? THROW PUT>
+ <EQUAL? ,PRSI ,POOL>>
+ <COND (<EQUAL? ,PRSO ,BLUE-CAKE ,ORANGE-CAKE>
+ <TELL "\"Splash!\"" CR>
+ <REMOVE ,PRSO>
+ <RTRUE>)>
+ <MOVE ,PRSO ,HERE>
+ <REMOVE ,PRSI>
+ <FCLEAR ,CANDY ,INVISIBLE>
+ <TELL
+"The pool evaporates, leaving a damp (but still valuable) package of
+rare candies." CR>)
+ (T
+ <CAKE-CRUMBLE>)>>
+
+<ROUTINE CAKE-CRUMBLE ("AUX" CAKE)
+ <COND (<FSET? ,PRSO ,FOODBIT>
+ <SET CAKE ,PRSO>)
+ (T
+ <SET CAKE ,PRSI>)>
+ <COND (<OR <EQUAL? ,HERE ,TEA-ROOM ,POSTS-ROOM ,POOL-ROOM>
+ <EQUAL? ,HERE ,MACHINE-ROOM ,DINGY-CLOSET ,TOP-OF-WELL>
+ <EQUAL? ,HERE ,CAGE>>
+ <RFALSE>)
+ (T
+ <REMOVE .CAKE>
+ <TELL "The " D .CAKE " crumbles to dust." CR>)>>
+
+<ROOM POSTS-ROOM
+ (IN ROOMS)
+ (DESC "Posts Room")
+ (LDESC
+"In the center of this enormous room, four wooden posts support a huge
+oblong roof. To the east is a large hole; to the west a gaping chasm.")
+ (EAST TO POOL-ROOM)
+ (WEST "A chasm blocks your way.")
+ (FLAGS RLANDBIT ONBIT)
+ (VALUE 10)
+ (GLOBAL CHASM)
+ (ACTION POSTS-ROOM-F)>
+
+<ROUTINE POSTS-ROOM-F (RARG)
+ <COND (<AND <EQUAL? .RARG ,M-BEG>
+ <VERB? TAKE>
+ <FSET? ,PRSO ,NONLANDBIT>>
+ <TELL
+"The " D ,PRSO " is now huge. You have no hope of taking it." CR>)>>
+
+<OBJECT POSTS
+ (IN POSTS-ROOM)
+ (DESC "group of wooden posts")
+ (SYNONYM POSTS POST)
+ (ADJECTIVE WOODEN)
+ (FLAGS NDESCBIT)>
+
+<ROOM POOL-ROOM
+ (IN ROOMS)
+ (DESC "Pool Room")
+ (LDESC "The far half of this room is depressed. The only exit is west.")
+ (OUT TO POSTS-ROOM)
+ (WEST TO POSTS-ROOM)
+ (FLAGS RLANDBIT)>
+
+<OBJECT POOL
+ (IN POOL-ROOM)
+ (DESC "pool")
+ (LDESC
+"The depressed area is filled with water. There is something hazy at the
+deepest part of the pool.")
+ (SYNONYM POOL)
+ (ACTION POOL-F)>
+
+<ROUTINE POOL-F ()
+ <COND (<VERB? DRINK>
+ <PERFORM ,V?DRINK ,WATER>
+ <RTRUE>)
+ (<VERB? LOOK-UNDER>
+ <TELL "You can't make out what's below the surface." CR>)
+ (<VERB? ENTER>
+ <V-SWIM>)>>
+
+<OBJECT CANDY
+ (IN POOL-ROOM)
+ (DESC "package of candy")
+ (LDESC "There is a package of candied insects here.")
+ (SYNONYM PACKAGE CANDY INSECTS)
+ (ADJECTIVE CANDIED RARE)
+ (SIZE 8)
+ (VALUE 15)
+ (FLAGS FOODBIT TAKEBIT INVISIBLE READBIT)
+ (ACTION CANDY-F)>
+
+<ROUTINE CANDY-F ()
+ <COND (<VERB? EXAMINE READ>
+ <TELL
+"\"Frobozz Magic Candy Company -- Special Assortment! Candied Grasshoppers,
+Chocolated Ants, and Worms Glacee!\"" CR>)
+ (<VERB? EAT OPEN>
+ <TELL "It's too rich for your tastes." CR>)>> \ No newline at end of file
diff --git a/dungeon.zabstr b/dungeon.zabstr
new file mode 100644
index 0000000..6d7c83d
--- /dev/null
+++ b/dungeon.zabstr
@@ -0,0 +1,147 @@
+
+<ROOM INSIDE-THE-BARROW (IN ROOMS) (DESC "Inside the Barrow") (LDESC
+"You are in an ancient barrow which opens to the southwest.") (SW TO
+GREAT-CAVERN) (FLAGS RLANDBIT ONBIT)>
+<OBJECT LAMP (IN INSIDE-THE-BARROW) (DESC "lamp") (FDESC
+"A familiar brass lantern is lying on the ground.") (SYNONYM LAMP LANTERN LIGHT
+) (ADJECTIVE BRASS) (SIZE 15) (FLAGS TAKEBIT LIGHTBIT) (ACTION LAMP-F)>
+<DEFINE-ROUTINE LAMP-F>
+<GLOBAL LAMP-BURNED-OUT <>>
+<DEFINE-ROUTINE I-LANTERN>
+<GLOBAL LAMP-TABLE <TABLE 225 "The lamp appears a bit dimmer." 75
+"The lamp is definitely dimmer now." 25 "The lamp is nearly out." 0>>
+<ROOM GREAT-CAVERN (IN ROOMS) (DESC "Great Cavern") (LDESC
+"This is a huge limestone cavern, glowing with dim, phosphorescent light from
+far above. Narrow paths wind south and northeast.") (NE TO INSIDE-THE-BARROW) (
+SOUTH TO SHALLOW-FORD) (FLAGS RLANDBIT ONBIT)>
+<ROOM SHALLOW-FORD (IN ROOMS) (DESC "Shallow Ford") (LDESC
+"You are ankle deep in a stream. To the southwest is a dark tunnel, and to the
+north a dim cavern.") (NORTH TO GREAT-CAVERN) (SW TO DARK-TUNNEL) (FLAGS
+RLANDBIT ONBIT) (GLOBAL GLOBAL-WATER STREAM)>
+<ROOM DARK-TUNNEL (IN ROOMS) (DESC "Dark Tunnel") (LDESC
+"This smooth-walled tunnel runs northeast to southwest. A faint whirring sound
+comes from the latter direction. Another opening, choked with leaves, leads
+southeast.") (NE TO SHALLOW-FORD) (SE TO FORMAL-GARDEN) (SW TO CAROUSEL-ROOM) (
+WEST TO DEEP-FORD IF SECRET-DOOR) (FLAGS RLANDBIT)>
+<OBJECT SWORD (IN DARK-TUNNEL) (DESC "elvish sword") (LDESC
+"An Elvish sword of great antiquity is here.") (SYNONYM SWORD BLADE) (ADJECTIVE
+ELVISH OLD ANTIQUE) (FLAGS TAKEBIT WEAPONBIT TRYTAKEBIT) (SIZE 30)>
+<GLOBAL SECRET-DOOR <>>
+<ROOM DEEP-FORD (IN ROOMS) (DESC "Deep Ford") (LDESC
+"You are waist deep in a cold stream. On the northern bank, the walls rise
+to a small ledge. A \"whir\" comes from an opening to the south.") (NORTH TO
+LEDGE-IN-RAVINE) (UP TO LEDGE-IN-RAVINE) (SOUTH TO CAROUSEL-ROOM) (EAST TO
+DARK-TUNNEL IF SECRET-DOOR) (FLAGS RLANDBIT) (GLOBAL GLOBAL-WATER STREAM)>
+<ROOM CAROUSEL-ROOM (IN ROOMS) (DESC "Carousel Room") (NORTH TO DEEP-FORD) (NE
+TO DARK-TUNNEL) (EAST TO TOPIARY) (SE TO RIDDLE-ROOM) (SOUTH TO MENHIR-ROOM) (
+SW TO GUARDED-ROOM) (WEST TO ROOM-8) (NW TO COOL-ROOM) (FLAGS RLANDBIT) (ACTION
+CAROUSEL-ROOM-F)>
+<DEFINE-ROUTINE CAROUSEL-ROOM-F>
+<GLOBAL CAROUSEL-EXITS <TABLE COOL-ROOM DARK-TUNNEL DEEP-FORD TOPIARY
+RIDDLE-ROOM MENHIR-ROOM GUARDED-ROOM>>
+<OBJECT VIOLIN (IN CAROUSEL-ROOM) (DESC "fancy violin") (LDESC
+"There is a Stradivarius here.") (SYNONYM STRADIVARIUS VIOLIN TREASURE) (
+ADJECTIVE FANCY) (SIZE 10) (VALUE 20) (FLAGS INVISIBLE TAKEBIT) (ACTION
+VIOLIN-F)>
+<DEFINE-ROUTINE VIOLIN-F>
+<ROOM ROOM-8 (IN ROOMS) (DESC "Room 8") (LDESC
+"This is a small chamber carved from the western end of a short crawl. On
+the wall is crudely chiseled the number \"8\".") (EAST TO CAROUSEL-ROOM) (FLAGS
+RLANDBIT)>
+<OBJECT BILLS (IN ROOM-8) (DESC "stack of zorkmid bills") (LDESC
+"On the floor is a neat stack of 200 zorkmid bills.") (SYNONYM BILLS STACK
+MONEY TREASURE) (ADJECTIVE NEAT ZORKMID) (VALUE 25) (SIZE 10) (FLAGS READBIT
+TAKEBIT BURNBIT) (TEXT
+"Each bill is worth 100 zorkmids and bears the legend \"In Frobs We Trust\".")
+(ACTION BILLS-F)>
+<DEFINE-ROUTINE BILLS-F>
+<ROOM MENHIR-ROOM (IN ROOMS) (DESC "Menhir Room") (NORTH TO CAROUSEL-ROOM) (SW
+TO KENNEL IF MENHIR-POSITION ELSE
+"You are trying to walk through an enormous rock.") (SOUTH TO CERBERUS-ROOM) (
+FLAGS RLANDBIT) (GLOBAL MENHIR) (ACTION MENHIR-ROOM-F)>
+<DEFINE-ROUTINE MENHIR-ROOM-F>
+<GLOBAL MENHIR-POSITION <>>
+<DEFINE-ROUTINE DESCRIBE-MENHIR>
+<OBJECT GLOBAL-MENHIR (IN LOCAL-GLOBALS) (DESC "enormous menhir") (SYNONYM
+MENHIR ROCK STONE) (ADJECTIVE HUGE HEAVY ENORMOUS) (FLAGS NDESCBIT READBIT) (
+ACTION GLOBAL-MENHIR-F)>
+<DEFINE-ROUTINE GLOBAL-MENHIR-F>
+<OBJECT MENHIR (IN LOCAL-GLOBALS) (DESC "enormous menhir") (SYNONYM MENHIR ROCK
+STONE F) (ADJECTIVE HUGE HEAVY ENORMOUS) (FLAGS NDESCBIT READBIT) (ACTION
+MENHIR-F)>
+<DEFINE-ROUTINE MENHIR-F>
+<ROOM KENNEL (IN ROOMS) (DESC "Kennel") (LDESC
+"This was once a kennel for a large dog (some of the bones would fit a
+dinosaur). The only exit is northeast.") (FLAGS RLANDBIT) (NE TO MENHIR-ROOM IF
+MENHIR-POSITION ELSE "You are trying to walk through an enormous rock.") (OUT
+TO MENHIR-ROOM IF MENHIR-POSITION ELSE
+"You are trying to walk through an enormous rock.") (GLOBAL MENHIR)>
+<OBJECT COLLAR (IN KENNEL) (SYNONYM COLLAR) (ADJECTIVE HUGE GIANT DOG) (FDESC
+"A gigantic dog collar lies amidst the dust.") (DESC "gigantic dog collar") (
+FLAGS TAKEBIT) (VALUE 15) (ACTION COLLAR-F)>
+<DEFINE-ROUTINE COLLAR-F>
+<ROOM CERBERUS-ROOM (IN ROOMS) (DESC "Cerberus Room") (LDESC
+"This is the entrance to a huge tomb. A passage leads north.") (SOUTH TO CRYPT
+IF CERBERUS-LEASHED ELSE "The huge dog snaps at you.") (IN TO CRYPT IF
+CERBERUS-LEASHED ELSE "The huge dog snaps at you.") (NORTH TO MENHIR-ROOM) (
+FLAGS RLANDBIT) (PSEUDO "TOMB" TOMB-PSEUDO "CRYPT" TOMB-PSEUDO)>
+<DEFINE-ROUTINE TOMB-PSEUDO>
+<OBJECT GLOBAL-CERBERUS (IN LOCAL-GLOBALS) (DESC "three-headed dog") (SYNONYM
+CERBERUS DOG HOUND MONSTER) (ADJECTIVE HUGE GIANT THREE HEADED) (ACTION
+GLOBAL-CERBERUS-F)>
+<DEFINE-ROUTINE GLOBAL-CERBERUS-F>
+<OBJECT CERBERUS (IN CERBERUS-ROOM) (DESC "three-headed dog") (LDESC
+"A vicious-looking dog guards the entrance to the south. It's your
+usual dog, except that it has three heads and is the size of an elephant.") (
+SYNONYM CERBERUS DOG HOUND MONSTER) (ADJECTIVE HUGE GIANT THREE HEADED) (FLAGS
+ACTORBIT OPENBIT CONTBIT) (ACTION CERBERUS-F)>
+<GLOBAL CERBERUS-LEASHED <>>
+<DEFINE-ROUTINE CERBERUS-F>
+<ROOM CRYPT (IN ROOMS) (DESC "Crypt") (LDESC
+"Before you are the earthly remains of the mighty Flatheads, twelve somewhat
+flat heads mounted securely on poles. There is writing carved on the crypt.
+To the north and south are dark doorways.") (NORTH TO CERBERUS-ROOM) (SOUTH TO
+ZORK3) (VALUE 2) (FLAGS RLANDBIT)>
+<OBJECT HEADS (IN CRYPT) (DESC "set of poled heads") (SYNONYM HEADS HEAD POLE
+POLES) (FLAGS NDESCBIT TRYTAKEBIT) (ACTION HEADS-F)>
+<DEFINE-ROUTINE HEADS-F>
+<OBJECT CRYPT-OBJECT (IN CRYPT) (DESC "marble crypt") (SYNONYM TOMB CRYPT GRAVE
+) (ADJECTIVE MARBLE) (FLAGS NDESCBIT READBIT) (TEXT
+"\"Here lie the Flatheads, whose heads were placed on poles by the
+Dungeon Master for amazing untastefulness.\"") (ACTION CRYPT-OBJECT-F)>
+<DEFINE-ROUTINE CRYPT-OBJECT-F>
+<ROOM ZORK3 (IN ROOMS) (DESC "Landing") (FLAGS RLANDBIT ONBIT) (ACTION ZORK3-F)
+>
+<DEFINE-ROUTINE ZORK3-F>
+<GLOBAL MUD-FLAG <>>
+<GLOBAL MATOBJ <>>
+<GLOBAL PUNLOCK-FLAG <>>
+<GLOBAL PLOOK-FLAG <>>
+<ROOM LEDGE-IN-RAVINE (IN ROOMS) (DESC "Ledge in Ravine") (SOUTH TO DEEP-FORD)
+(DOWN TO DEEP-FORD) (WEST TO DRAGON-ROOM) (NORTH TO DREARY-ROOM IF PDOOR IS
+OPEN) (IN TO DREARY-ROOM IF PDOOR IS OPEN) (FLAGS RLANDBIT) (GLOBAL CHASM PDOOR
+STREAM PWINDOW) (ACTION LEDGE-IN-RAVINE-F)>
+<DEFINE-ROUTINE LEDGE-IN-RAVINE-F>
+<DEFINE-ROUTINE P-DOOR>
+<DEFINE-ROUTINE PCHECK>
+<ROOM DREARY-ROOM (IN ROOMS) (DESC "Dreary Room") (SOUTH TO LEDGE-IN-RAVINE IF
+PDOOR IS OPEN) (OUT TO LEDGE-IN-RAVINE IF PDOOR IS OPEN) (FLAGS RLANDBIT ONBIT)
+(GLOBAL PDOOR PWINDOW) (ACTION DREARY-ROOM-F)>
+<DEFINE-ROUTINE DREARY-ROOM-F>
+<OBJECT PDOOR (IN LOCAL-GLOBALS) (DESC "door of oak") (SYNONYM DOOR) (ADJECTIVE
+WOODEN OAK) (FLAGS DOORBIT CONTBIT) (ACTION PDOOR-F)>
+<DEFINE-ROUTINE PDOOR-F>
+<OBJECT PWINDOW (IN LOCAL-GLOBALS) (DESC "barred window") (SYNONYM WINDOW) (
+ADJECTIVE BARRED) (FLAGS DOORBIT) (ACTION PWINDOW-F)>
+<DEFINE-ROUTINE PWINDOW-F>
+<OBJECT PTABLE (IN DREARY-ROOM) (DESC "table") (SYNONYM TABLE) (ADJECTIVE DUSTY
+WOODEN) (CAPACITY 40) (FLAGS NDESCBIT CONTBIT SURFACEBIT OPENBIT)>
+<OBJECT PCRACK (IN DREARY-ROOM) (DESC "crack") (SYNONYM CRACK) (ADJECTIVE
+NARROW) (FLAGS NDESCBIT)>
+<OBJECT KEYHOLE-1 (IN LEDGE-IN-RAVINE) (DESC "keyhole") (SYNONYM KEYHOLE HOLE)
+(FLAGS NDESCBIT) (ACTION PKEYHOLE-F)>
+<OBJECT KEYHOLE-2 (IN DREARY-ROOM) (DESC "keyhole") (SYNONYM KEYHOLE HOLE) (
+FLAGS NDESCBIT) (ACTION PKEYHOLE-F)>
+<DEFINE-ROUTINE PKEYHOLE-F>
+<OBJECT KEY (IN KEYHOLE-2) (DESC "rusty iron key") (SYNONYM KEY) (ADJECTIVE
+IRON RUSTY) (SIZE 2) (FLAGS TAKEBIT NDESCBIT TOOLBIT)> \ No newline at end of file
diff --git a/dungeon.zap b/dungeon.zap
new file mode 100644
index 0000000..7f10245
--- /dev/null
+++ b/dungeon.zap
@@ -0,0 +1,367 @@
+
+
+ .FUNCT LAMP-F
+ EQUAL? PRSA,V?THROW \?CCL3
+ EQUAL? PRSO,LAMP \?CCL3
+ PRINTR "You'd break it!"
+?CCL3: EQUAL? PRSA,V?LAMP-OFF,V?LAMP-ON,V?EXAMINE \?CCL9
+ ZERO? LAMP-BURNED-OUT /?CCL9
+ PRINTR "The lamp has burned out."
+?CCL9: EQUAL? PRSA,V?LAMP-ON \?CCL15
+ CALL INT,I-LANTERN
+ PUT STACK,0,1
+ RFALSE
+?CCL15: EQUAL? PRSA,V?LAMP-OFF \?CCL17
+ CALL INT,I-LANTERN
+ PUT STACK,0,0
+ RFALSE
+?CCL17: EQUAL? PRSA,V?EXAMINE \FALSE
+ PRINTI "The lamp is o"
+ FSET? LAMP,ONBIT \?PRG27
+ PRINTC 110
+ JUMP ?PRG29
+?PRG27: PRINTI "ff"
+?PRG29: PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT I-LANTERN,TICK,TBL
+ VALUE 'LAMP-TABLE >TBL
+ GET TBL,0 >TICK
+ CALL QUEUE,I-LANTERN,TICK
+ PUT STACK,0,1
+ ZERO? TICK \?CND1
+ FCLEAR LAMP,ONBIT
+ SET 'LAMP-BURNED-OUT,TRUE-VALUE
+?CND1: CALL ACCESSIBLE?,LAMP
+ ZERO? STACK /?CND3
+ ZERO? TICK \?PRG10
+ PRINTI "You'd better have more light than from the "
+ PRINTD LAMP
+ PRINT PERIOD-CR
+ JUMP ?CND3
+?PRG10: GET TBL,1
+ PRINT STACK
+ CRLF
+?CND3: ZERO? TICK /FALSE
+ ADD TBL,4 >LAMP-TABLE
+ RETURN LAMP-TABLE
+
+
+ .FUNCT CAROUSEL-ROOM-F,RARG
+ EQUAL? RARG,M-LOOK \?CCL3
+ PRINTI "Eight identical passages leave this large circular room. The ceiling is lost in gloom."
+ ZERO? CAROUSEL-ON /?CND6
+ PRINTR " A loud whirring sound comes from all around, and you feel disoriented."
+?CND6: CRLF
+ RTRUE
+?CCL3: ZERO? CAROUSEL-ON /FALSE
+ EQUAL? RARG,M-BEG \FALSE
+ EQUAL? PRSA,V?WALK \FALSE
+ EQUAL? PRSO,P?DOWN,P?UP /FALSE
+ PRINTI "You're not sure which direction is which..."
+ CRLF
+ CRLF
+ EQUAL? PRSO,P?WEST /?CTR19
+ RANDOM 100
+ GRTR? 80,STACK \FALSE
+?CTR19: CALL PICK-ONE,CAROUSEL-EXITS
+ CALL GOTO,STACK
+ RSTACK
+
+
+ .FUNCT VIOLIN-F
+ EQUAL? PRSA,V?PLAY \FALSE
+ EQUAL? PRSO,VIOLIN \FALSE
+ PRINTR "An offensive noise issues from the violin."
+
+
+ .FUNCT BILLS-F
+ EQUAL? PRSA,V?BURN \FALSE
+ PRINTI "Nothing like having money to burn! "
+ RFALSE
+
+
+ .FUNCT MENHIR-ROOM-F,RARG
+ EQUAL? RARG,M-FLASH \?CCL3
+ ZERO? MENHIR-POSITION /?CCL3
+ CALL DESCRIBE-MENHIR
+ RSTACK
+?CCL3: EQUAL? RARG,M-LOOK \FALSE
+ PRINTI "Large limestone chunks lie about this former quarry, which appears to have produced menhirs (standing stones). Obvious passages lead north and south."
+ CRLF
+ IN? MENHIR,LOCAL-GLOBALS \TRUE
+ CALL DESCRIBE-MENHIR
+ RTRUE
+
+
+ .FUNCT DESCRIBE-MENHIR
+ EQUAL? HERE,MENHIR-ROOM \?PRG23
+ EQUAL? MENHIR-POSITION,FALSE-VALUE \?CCL6
+ PRINTR "One large menhir blocks a dark opening leading southwest."
+?CCL6: EQUAL? MENHIR-POSITION,1 \?CCL10
+ PRINTR "A menhir lies near a southwest passage."
+?CCL10: EQUAL? MENHIR-POSITION,2 \?CCL14
+ PRINTR "A dark opening leads southwest."
+?CCL14: EQUAL? MENHIR-POSITION,3 \?PRG21
+ PRINTR "There is a huge menhir here."
+?PRG21: PRINTR "A huge menhir is floating in midair above a southwest passage."
+?PRG23: PRINTR "A dark opening leads southwest."
+
+
+ .FUNCT GLOBAL-MENHIR-F
+ PRINTR "It's not here."
+
+
+ .FUNCT MENHIR-F
+ EQUAL? PRSA,V?LOOK-BEHIND,V?LOOK-UNDER \?CCL3
+ ZERO? MENHIR-POSITION \?CCL3
+ PRINTR "There's a dark passage beyond the menhir."
+?CCL3: EQUAL? PRSA,V?TURN,V?MOVE,V?TAKE \?CCL9
+ PRINTR "The menhir weighs many tons!"
+?CCL9: EQUAL? PRSA,V?READ \?CCL13
+ PRINTR """F"""
+?CCL13: EQUAL? PRSA,V?EXAMINE \?CCL17
+ PRINTR "The menhir is carved with an ornate letter ""F""."
+?CCL17: EQUAL? PRSA,V?ENCHANT \?CCL21
+ EQUAL? SPELL-USED,W?FLOAT \?CCL21
+ SET 'MENHIR-POSITION,3
+ PRINTR "The menhir floats majestically into the air. The passage beyond beckons invitingly."
+?CCL21: EQUAL? PRSA,V?DISENCHANT \FALSE
+ EQUAL? SPELL-USED,W?FLOAT \FALSE
+ SET 'MENHIR-POSITION,FALSE-VALUE
+ EQUAL? HERE,MENHIR-ROOM,KENNEL \FALSE
+ PRINTR "The menhir sinks to the ground."
+
+
+ .FUNCT COLLAR-F
+ EQUAL? PRSA,V?TAKE \?CCL3
+ ZERO? CERBERUS-LEASHED /?CCL3
+ CALL JIGS-UP,STR?127
+ RSTACK
+?CCL3: EQUAL? PRSA,V?ENCHANT \FALSE
+ EQUAL? SPELL-USED,W?FLOAT \FALSE
+ CALL PERFORM,V?ENCHANT,CERBERUS
+ RTRUE
+
+
+ .FUNCT TOMB-PSEUDO
+ EQUAL? PRSA,V?ENTER \FALSE
+ CALL DO-WALK,P?SOUTH
+ RSTACK
+
+
+ .FUNCT GLOBAL-CERBERUS-F
+ PRINTR "He's not here."
+
+
+ .FUNCT CERBERUS-F
+ EQUAL? PRSA,V?RAISE,V?RUB,V?WAVE \?CCL3
+ EQUAL? PRSO,WAND \?CCL3
+ PRINTI "The dog looks puzzled."
+ CRLF
+ RFALSE
+?CCL3: ZERO? WAND-ON /?CCL9
+ EQUAL? PRSA,V?INCANT,V?SAY /FALSE
+?CCL9: CALL HELLO?,CERBERUS
+ ZERO? STACK /?CCL13
+ ZERO? CERBERUS-LEASHED /?PRG19
+ PRINTR """Arf! Arf!"""
+?PRG19: PRINTR """Grrrr!"""
+?CCL13: EQUAL? PRSA,V?MUNG,V?ATTACK \?CCL22
+ ZERO? CERBERUS-LEASHED /?PRG28
+ REMOVE CERBERUS
+ PRINTR "With a quiet bark of disappointment, the creature expires into a small pile of dust which blows away into nothing."
+?PRG28: PRINTR "The maddened dog-thing snaps at you viciously."
+?CCL22: EQUAL? PRSA,V?PUT-ON,V?PUT \?CCL31
+ EQUAL? PRSO,COLLAR \?CCL31
+ SET 'CERBERUS-LEASHED,TRUE-VALUE
+ MOVE COLLAR,CERBERUS
+ FSET COLLAR,NDESCBIT
+ FSET COLLAR,TRYTAKEBIT
+ PUTP CERBERUS,P?LDESC,STR?131
+ PRINTR "All three heads begin licking your face, and its huge tail wags enthusiastically, almost blowing you over from the breeze it creates."
+?CCL31: EQUAL? PRSA,V?ENCHANT \?CCL37
+ EQUAL? SPELL-USED,W?FLOAT \?CCL40
+ SET 'SPELL-HANDLED?,TRUE-VALUE
+ PRINTR "The huge dog rises an inch off the ground, for a moment."
+?CCL40: EQUAL? SPELL-USED,W?FEEBLE \FALSE
+ PRINTR "What an effect! He now has the strength of just one elephant, rather than ten!"
+?CCL37: ZERO? CERBERUS-LEASHED \?CCL48
+ PRINTR "The three-headed dog snaps at you viciously!"
+?CCL48: ZERO? CERBERUS-LEASHED /FALSE
+ EQUAL? PRSA,V?RUB \FALSE
+ PRINTR "The dog slobbers and whines with uncontained joy."
+
+
+ .FUNCT HEADS-F
+ EQUAL? PRSA,V?TELL,V?HELLO \?CCL3
+ PRINTR "Dead Flatheads tell no tales."
+?CCL3: EQUAL? PRSA,V?RUB,V?ATTACK,V?KICK /?CCL7
+ EQUAL? PRSA,V?BURN,V?TAKE,V?OPEN \FALSE
+?CCL7: CALL JIGS-UP,STR?133
+ RSTACK
+
+
+ .FUNCT CRYPT-OBJECT-F
+ EQUAL? PRSA,V?OPEN \FALSE
+ PRINTR "The crypt is sealed for all time."
+
+
+ .FUNCT ZORK3-F,RARG
+ EQUAL? RARG,M-LOOK \FALSE
+ PRINTI "A rough-hewn stair leads down into darkness. "
+ IN? WAND,WINNER \?CCL8
+ PRINTI "The wand vibrates and are compelled downward. There is a burst of light, and you tumble down the staircase! At the bottom, a vast red-lit hall, guarded by sinister statues, is visible far ahead.
+
+You have conquered the Wizard of Frobozz and become master of his domain, but the final challenge awaits! (The Zork Trilogy concludes with ""Zork III: The Dungeon Master"".)"
+ CRLF
+ CRLF
+ CALL FINISH
+ RSTACK
+?CCL8: CALL JIGS-UP,STR?135
+ RSTACK
+
+
+ .FUNCT LEDGE-IN-RAVINE-F,RARG
+ EQUAL? RARG,M-LOOK \?CCL3
+ PRINTI "To the south, a stream runs through a narrow ravine. It looks as if you could scramble down to the stream. A smokey odor drifts in from the west. "
+ CALL P-DOOR,STR?136
+ RSTACK
+?CCL3: EQUAL? PRSA,V?LOOK /FALSE
+ CALL PCHECK
+ RFALSE
+
+
+ .FUNCT P-DOOR,STR
+ ZERO? PLOOK-FLAG /?PRG3
+ SET 'PLOOK-FLAG,FALSE-VALUE
+ RFALSE
+?PRG3: PRINTI "On the "
+ PRINT STR
+ PRINTI " side of the room is an oak door with a small barred window and a formidable lock (with keyhole)."
+ ZERO? MUD-FLAG /?CND5
+ PRINTC 32
+ PRINT PLACE-MAT-VISIBLE
+ ZERO? MATOBJ /?CND5
+ PRINTI " Lying on the place mat is a "
+ PRINTD MATOBJ
+ PRINTR "."
+?CND5: CRLF
+ RTRUE
+
+
+ .FUNCT PCHECK
+ SET 'PLOOK-FLAG,FALSE-VALUE
+ IN? KEY,KEYHOLE-2 \?CCL3
+ FSET KEY,NDESCBIT
+ JUMP ?CND1
+?CCL3: FCLEAR KEY,NDESCBIT
+?CND1: CALL HELD?,PLACE-MAT
+ ZERO? STACK /?CND4
+ SET 'MUD-FLAG,FALSE-VALUE
+?CND4: ZERO? MUD-FLAG /?CCL8
+ MOVE PLACE-MAT,HERE
+ FSET PLACE-MAT,NDESCBIT
+ RTRUE
+?CCL8: FCLEAR PLACE-MAT,NDESCBIT
+ RTRUE
+
+
+ .FUNCT DREARY-ROOM-F,RARG
+ EQUAL? RARG,M-LOOK \?CCL3
+ PRINTI "The room is eerily lit by a red glow emanating from a crack in one wall. The light falls upon a dusty wooden table. "
+ CALL P-DOOR,STR?137
+ RSTACK
+?CCL3: CALL PCHECK
+ RFALSE
+
+
+ .FUNCT PDOOR-F,K
+ EQUAL? PRSA,V?LOOK-UNDER \?CCL3
+ ZERO? MUD-FLAG /?CCL3
+ PRINT PLACE-MAT-VISIBLE
+ CRLF
+ RTRUE
+?CCL3: EQUAL? PRSA,V?UNLOCK \?CCL9
+ EQUAL? PRSI,KEY \?CCL12
+ SET 'PUNLOCK-FLAG,TRUE-VALUE
+ PRINTR "The door is now unlocked."
+?CCL12: EQUAL? PRSI,GOLD-KEY \?PRG19
+ PRINT DOESNT-FIT-LOCK
+ RTRUE
+?PRG19: CALL PICK-ONE,YUKS
+ PRINT STACK
+ CRLF
+ RTRUE
+?CCL9: EQUAL? PRSA,V?LOCK \?CCL22
+ EQUAL? PRSI,KEY \?CCL25
+ SET 'PUNLOCK-FLAG,FALSE-VALUE
+ PRINTR "The door is locked."
+?CCL25: EQUAL? PRSI,GOLD-KEY \?PRG32
+ PRINT DOESNT-FIT-LOCK
+ RTRUE
+?PRG32: CALL PICK-ONE,YUKS
+ PRINT STACK
+ CRLF
+ RTRUE
+?CCL22: EQUAL? PRSA,V?PUT-UNDER \?CCL35
+ EQUAL? PRSO,ROBOT-LABEL \?CCL38
+ PRINTI "The tiny paper vanishes under the door."
+ CRLF
+ EQUAL? HERE,LEDGE-IN-RAVINE \?CCL43
+ PUSH DREARY-ROOM
+ JUMP ?CND41
+?CCL43: PUSH LEDGE-IN-RAVINE
+?CND41: MOVE PRSO,STACK
+ RTRUE
+?CCL38: EQUAL? PRSO,NEWSPAPER \FALSE
+ PRINTR "The newspaper crumples up and won't go under the door."
+?CCL35: EQUAL? PRSA,V?CLOSE,V?OPEN \FALSE
+ ZERO? PUNLOCK-FLAG /?PRG53
+ CALL OPEN-CLOSE
+ RSTACK
+?PRG53: PRINTR "The door is locked."
+
+
+ .FUNCT PWINDOW-F
+ EQUAL? PRSA,V?LOOK-INSIDE \?CCL3
+ SET 'PLOOK-FLAG,TRUE-VALUE
+ FSET? PDOOR,OPENBIT \?CCL6
+ PRINTR "The door is open!"
+?CCL6: EQUAL? HERE,DREARY-ROOM \?CCL11
+ PUSH LEDGE-IN-RAVINE
+ JUMP ?CND9
+?CCL11: PUSH DREARY-ROOM
+?CND9: CALL GO&LOOK,STACK
+ RSTACK
+?CCL3: EQUAL? PRSA,V?ENTER \FALSE
+ PRINTR "Perhaps if you were diced...."
+
+
+ .FUNCT PKEYHOLE-F
+ EQUAL? PRSA,V?LOOK-INSIDE \?CCL3
+ PRINTI "You can"
+ IN? KEY,KEYHOLE-2 /?PRG13
+ EQUAL? HERE,DREARY-ROOM \?CCL12
+ PUSH LEDGE-IN-RAVINE
+ JUMP ?CND10
+?CCL12: PUSH DREARY-ROOM
+?CND10: CALL LIT?,STACK
+ ZERO? STACK \?PRG15
+?PRG13: PRINTI "'t"
+?PRG15: PRINTR " see light through the keyhole."
+?CCL3: EQUAL? PRSA,V?PUT \FALSE
+ IN? KEY,KEYHOLE-2 \?CCL21
+ EQUAL? PRSO,LETTER-OPENER \?PRG29
+ ZERO? MUD-FLAG /?CND25
+ SET 'MATOBJ,KEY
+?CND25: MOVE KEY,DREARY-ROOM
+ PRINTR "There is a faint thud behind the door."
+?PRG29: PRINTI "The "
+ PRINTD PRSO
+ PRINTR " doesn't fit."
+?CCL21: CALL PERFORM,V?UNLOCK,PDOOR,PRSO
+ RTRUE
+
+ .ENDI
diff --git a/dungeon.zil b/dungeon.zil
new file mode 100644
index 0000000..4b4c8ba
--- /dev/null
+++ b/dungeon.zil
@@ -0,0 +1,679 @@
+"DUNGEON for
+ Mini-Zork II: The Wizard of Frobozz
+ (c) Copyright 1988 Infocom, Inc. All Rights Reserved."
+
+<ROOM INSIDE-THE-BARROW
+ (IN ROOMS)
+ (DESC "Inside the Barrow")
+ (LDESC
+"You are in an ancient barrow which opens to the southwest.")
+ (SW TO GREAT-CAVERN)
+ (FLAGS RLANDBIT ONBIT)>
+
+<OBJECT LAMP
+ (IN INSIDE-THE-BARROW)
+ (DESC "lamp")
+ (FDESC "A familiar brass lantern is lying on the ground.")
+ (SYNONYM LAMP LANTERN LIGHT)
+ (ADJECTIVE BRASS)
+ (SIZE 15)
+ (FLAGS TAKEBIT LIGHTBIT)
+ (ACTION LAMP-F)>
+
+<ROUTINE LAMP-F ()
+ <COND (<AND <VERB? THROW>
+ <PRSO? ,LAMP>>
+ <TELL "You'd break it!" CR>)
+ (<AND <VERB? EXAMINE LAMP-ON LAMP-OFF>
+ ,LAMP-BURNED-OUT>
+ <TELL "The lamp has burned out." CR>)
+ (<VERB? LAMP-ON>
+ <ENABLE <INT I-LANTERN>>
+ <RFALSE>)
+ (<VERB? LAMP-OFF>
+ <DISABLE <INT I-LANTERN>>
+ <RFALSE>)
+ (<VERB? EXAMINE>
+ <TELL "The lamp is o">
+ <COND (<FSET? ,LAMP ,ONBIT>
+ <TELL "n">)
+ (T
+ <TELL "ff">)>
+ <TELL ,PERIOD-CR>)>>
+
+<GLOBAL LAMP-BURNED-OUT <>>
+
+<ROUTINE I-LANTERN ("AUX" TICK (TBL <VALUE LAMP-TABLE>))
+ <ENABLE <QUEUE I-LANTERN <SET TICK <GET .TBL 0>>>>
+ <COND (<0? .TICK>
+ <FCLEAR ,LAMP ,ONBIT>
+ <SETG LAMP-BURNED-OUT T>)>
+ <COND (<ACCESSIBLE? ,LAMP>
+ <COND (<0? .TICK>
+ <TELL
+"You'd better have more light than from the " D ,LAMP ,PERIOD-CR>)
+ (T
+ <TELL <GET .TBL 1> CR>)>)>
+ <COND (<NOT <0? .TICK>>
+ <SETG LAMP-TABLE <REST .TBL 4>>)>>
+
+<GLOBAL LAMP-TABLE
+ <TABLE 225 "The lamp appears a bit dimmer."
+ 75 "The lamp is definitely dimmer now."
+ 25 "The lamp is nearly out." 0>>
+
+<ROOM GREAT-CAVERN
+ (IN ROOMS)
+ (DESC "Great Cavern")
+ (LDESC
+"This is a huge limestone cavern, glowing with dim, phosphorescent light from
+far above. Narrow paths wind south and northeast.")
+ (NE TO INSIDE-THE-BARROW)
+ (SOUTH TO SHALLOW-FORD)
+ (FLAGS RLANDBIT ONBIT)>
+
+<ROOM SHALLOW-FORD
+ (IN ROOMS)
+ (DESC "Shallow Ford")
+ (LDESC
+"You are ankle deep in a stream. To the southwest is a dark tunnel, and to the
+north a dim cavern.")
+ (NORTH TO GREAT-CAVERN)
+ (SW TO DARK-TUNNEL)
+ (FLAGS RLANDBIT ONBIT)
+ (GLOBAL GLOBAL-WATER STREAM)>
+
+<ROOM DARK-TUNNEL
+ (IN ROOMS)
+ (DESC "Dark Tunnel")
+ (LDESC
+"This smooth-walled tunnel runs northeast to southwest. A faint whirring sound
+comes from the latter direction. Another opening, choked with leaves, leads
+southeast.")
+ (NE TO SHALLOW-FORD)
+ (SE TO FORMAL-GARDEN)
+ (SW TO CAROUSEL-ROOM)
+ (WEST TO DEEP-FORD IF SECRET-DOOR)
+ (FLAGS RLANDBIT)>
+
+<OBJECT SWORD
+ (IN DARK-TUNNEL)
+ (DESC "elvish sword")
+ (LDESC "An Elvish sword of great antiquity is here.")
+ (SYNONYM SWORD BLADE)
+ (ADJECTIVE ELVISH OLD ANTIQUE)
+ (FLAGS TAKEBIT WEAPONBIT TRYTAKEBIT)
+ (SIZE 30)>
+
+<GLOBAL SECRET-DOOR <>>
+
+<ROOM DEEP-FORD
+ (IN ROOMS)
+ (DESC "Deep Ford")
+ (LDESC
+"You are waist deep in a cold stream. On the northern bank, the walls rise
+to a small ledge. A \"whir\" comes from an opening to the south.")
+ (NORTH TO LEDGE-IN-RAVINE)
+ (UP TO LEDGE-IN-RAVINE)
+ (SOUTH TO CAROUSEL-ROOM)
+ (EAST TO DARK-TUNNEL IF SECRET-DOOR)
+ (FLAGS RLANDBIT)
+ (GLOBAL GLOBAL-WATER STREAM)>
+
+<ROOM CAROUSEL-ROOM
+ (IN ROOMS)
+ (DESC "Carousel Room")
+ (NORTH TO DEEP-FORD)
+ (NE TO DARK-TUNNEL)
+ (EAST TO TOPIARY)
+ (SE TO RIDDLE-ROOM)
+ (SOUTH TO MENHIR-ROOM)
+ (SW TO GUARDED-ROOM)
+ (WEST TO ROOM-8)
+ (NW TO COOL-ROOM)
+ (FLAGS RLANDBIT)
+ (ACTION CAROUSEL-ROOM-F)>
+
+<ROUTINE CAROUSEL-ROOM-F (RARG)
+ <COND (<EQUAL? .RARG ,M-LOOK>
+ <TELL
+"Eight identical passages leave this large circular room. The ceiling
+is lost in gloom.">
+ <COND (,CAROUSEL-ON
+ <TELL
+" A loud whirring sound comes from all around, and you feel disoriented.">)>
+ <CRLF>)
+ (<AND ,CAROUSEL-ON
+ <EQUAL? .RARG ,M-BEG>
+ <VERB? WALK>
+ <NOT <PRSO? ,P?UP ,P?DOWN>>>
+ <TELL
+"You're not sure which direction is which..." CR CR>
+ <COND (<OR <EQUAL? ,PRSO ,P?WEST>
+ <PROB 80>>
+ <GOTO <PICK-ONE ,CAROUSEL-EXITS>>)
+ (T
+ <RFALSE>)>)>>
+
+<GLOBAL CAROUSEL-EXITS
+ <TABLE
+COOL-ROOM DARK-TUNNEL DEEP-FORD TOPIARY RIDDLE-ROOM MENHIR-ROOM GUARDED-ROOM>>
+
+<OBJECT VIOLIN
+ (IN CAROUSEL-ROOM)
+ (DESC "fancy violin")
+ (LDESC "There is a Stradivarius here.")
+ (SYNONYM STRADIVARIUS VIOLIN TREASURE)
+ (ADJECTIVE FANCY)
+ (SIZE 10)
+ (VALUE 20)
+ (FLAGS INVISIBLE TAKEBIT)
+ (ACTION VIOLIN-F)>
+
+<ROUTINE VIOLIN-F ()
+ <COND (<AND <VERB? PLAY>
+ <EQUAL? ,PRSO ,VIOLIN>>
+ <TELL "An offensive noise issues from the violin." CR>)>>
+
+<ROOM ROOM-8
+ (IN ROOMS)
+ (DESC "Room 8")
+ (LDESC
+"This is a small chamber carved from the western end of a short crawl. On
+the wall is crudely chiseled the number \"8\".")
+ (EAST TO CAROUSEL-ROOM)
+ (FLAGS RLANDBIT)>
+
+<OBJECT BILLS
+ (IN ROOM-8)
+ (DESC "stack of zorkmid bills")
+ (LDESC "On the floor is a neat stack of 200 zorkmid bills.")
+ (SYNONYM BILLS STACK MONEY TREASURE)
+ (ADJECTIVE NEAT ZORKMID)
+ (VALUE 25)
+ (SIZE 10)
+ (FLAGS READBIT TAKEBIT BURNBIT)
+ (TEXT
+"Each bill is worth 100 zorkmids and bears the legend \"In Frobs We Trust\".")
+ (ACTION BILLS-F)>
+
+<ROUTINE BILLS-F ()
+ <COND (<VERB? BURN>
+ <TELL "Nothing like having money to burn! ">
+ <RFALSE>)>>
+
+<ROOM MENHIR-ROOM
+ (IN ROOMS)
+ (DESC "Menhir Room")
+ (NORTH TO CAROUSEL-ROOM)
+ (SW TO KENNEL IF MENHIR-POSITION ELSE
+ "You are trying to walk through an enormous rock.")
+ (SOUTH TO CERBERUS-ROOM)
+ (FLAGS RLANDBIT)
+ (GLOBAL MENHIR)
+ (ACTION MENHIR-ROOM-F)>
+
+<ROUTINE MENHIR-ROOM-F (RARG)
+ <COND (<AND <EQUAL? .RARG ,M-FLASH>
+ ,MENHIR-POSITION>
+ <DESCRIBE-MENHIR>)
+ (<EQUAL? .RARG ,M-LOOK>
+ <TELL
+"Large limestone chunks lie about this former quarry, which appears to have
+produced menhirs (standing stones). Obvious passages lead north and south." CR>
+ <COND (<IN? ,MENHIR ,LOCAL-GLOBALS>
+ <DESCRIBE-MENHIR>)>
+ <RTRUE>)>>
+
+<GLOBAL MENHIR-POSITION <>>
+
+<ROUTINE DESCRIBE-MENHIR ()
+ <COND (<EQUAL? ,HERE ,MENHIR-ROOM>
+ <COND (<EQUAL? ,MENHIR-POSITION <>>
+ <TELL
+"One large menhir blocks a dark opening leading southwest.">)
+ (<EQUAL? ,MENHIR-POSITION 1>
+ <TELL "A menhir lies near a southwest passage.">)
+ (<EQUAL? ,MENHIR-POSITION 2>
+ <TELL "A dark opening leads southwest.">)
+ (<EQUAL? ,MENHIR-POSITION 3>
+ <TELL "There is a huge menhir here.">)
+ (T
+ <TELL
+"A huge menhir is floating in midair above a southwest passage.">)>
+ <CRLF>)
+ (T
+ <TELL "A dark opening leads southwest." CR>)>>
+
+<OBJECT GLOBAL-MENHIR
+ (IN LOCAL-GLOBALS)
+ (DESC "enormous menhir")
+ (SYNONYM MENHIR ROCK STONE)
+ (ADJECTIVE HUGE HEAVY ENORMOUS)
+ (FLAGS NDESCBIT READBIT)
+ (ACTION GLOBAL-MENHIR-F)>
+
+<ROUTINE GLOBAL-MENHIR-F ()
+ <TELL "It's not here." CR>>
+
+<OBJECT MENHIR
+ (IN LOCAL-GLOBALS)
+ (DESC "enormous menhir")
+ (SYNONYM MENHIR ROCK STONE F)
+ (ADJECTIVE HUGE HEAVY ENORMOUS)
+ (FLAGS NDESCBIT READBIT)
+ (ACTION MENHIR-F)>
+
+<ROUTINE MENHIR-F ()
+ <COND (<AND <VERB? LOOK-UNDER LOOK-BEHIND>
+ <NOT ,MENHIR-POSITION>>
+ <TELL "There's a dark passage beyond the menhir." CR>)
+ (<VERB? TAKE MOVE TURN>
+ <TELL "The menhir weighs many tons!" CR>)
+ (<VERB? READ>
+ <TELL "\"F\"" CR>)
+ (<VERB? EXAMINE>
+ <TELL "The menhir is carved with an ornate letter \"F\"." CR>)
+ (<AND <VERB? ENCHANT>
+ <EQUAL? ,SPELL-USED ,W?FLOAT>>
+ <SETG MENHIR-POSITION 3>
+ <TELL
+"The menhir floats majestically into the air. The passage beyond
+beckons invitingly." CR>)
+ (<AND <VERB? DISENCHANT>
+ <EQUAL? ,SPELL-USED ,W?FLOAT>>
+ <SETG MENHIR-POSITION <>>
+ <COND (<EQUAL? ,HERE ,MENHIR-ROOM ,KENNEL>
+ <TELL "The menhir sinks to the ground." CR>)>)>>
+
+<ROOM KENNEL
+ (IN ROOMS)
+ (DESC "Kennel")
+ (LDESC
+"This was once a kennel for a large dog (some of the bones would fit a
+dinosaur). The only exit is northeast.")
+ (FLAGS RLANDBIT)
+ (NE TO MENHIR-ROOM IF MENHIR-POSITION ELSE
+ "You are trying to walk through an enormous rock.")
+ (OUT TO MENHIR-ROOM IF MENHIR-POSITION ELSE
+ "You are trying to walk through an enormous rock.")
+ (GLOBAL MENHIR)>
+
+<OBJECT COLLAR
+ (IN KENNEL)
+ (SYNONYM COLLAR)
+ (ADJECTIVE HUGE GIANT DOG)
+ (FDESC "A gigantic dog collar lies amidst the dust.")
+ (DESC "gigantic dog collar")
+ (FLAGS TAKEBIT)
+ (VALUE 15)
+ (ACTION COLLAR-F)>
+
+<ROUTINE COLLAR-F ()
+ <COND (<AND <VERB? TAKE>
+ ,CERBERUS-LEASHED>
+ <JIGS-UP
+"Bad idea. As you unfasten the collar, the monster rends you
+into little doggy biscuits.">)
+ (<AND <VERB? ENCHANT>
+ <EQUAL? ,SPELL-USED ,W?FLOAT>>
+ <PERFORM ,V?ENCHANT ,CERBERUS>
+ <RTRUE>)>>
+
+<ROOM CERBERUS-ROOM
+ (IN ROOMS)
+ (DESC "Cerberus Room")
+ (LDESC
+"This is the entrance to a huge tomb. A passage leads north.")
+ (SOUTH TO CRYPT IF CERBERUS-LEASHED ELSE "The huge dog snaps at you.")
+ (IN TO CRYPT IF CERBERUS-LEASHED ELSE "The huge dog snaps at you.")
+ (NORTH TO MENHIR-ROOM)
+ (FLAGS RLANDBIT)
+ (PSEUDO "TOMB" TOMB-PSEUDO "CRYPT" TOMB-PSEUDO)>
+
+<ROUTINE TOMB-PSEUDO ()
+ <COND (<VERB? ENTER>
+ <DO-WALK ,P?SOUTH>)>>
+
+<OBJECT GLOBAL-CERBERUS
+ (IN LOCAL-GLOBALS)
+ (DESC "three-headed dog")
+ (SYNONYM CERBERUS DOG HOUND MONSTER)
+ (ADJECTIVE HUGE GIANT THREE HEADED)
+ (ACTION GLOBAL-CERBERUS-F)>
+
+<ROUTINE GLOBAL-CERBERUS-F ()
+ <TELL "He's not here." CR>>
+
+<OBJECT CERBERUS
+ (IN CERBERUS-ROOM)
+ (DESC "three-headed dog")
+ (LDESC
+"A vicious-looking dog guards the entrance to the south. It's your
+usual dog, except that it has three heads and is the size of an elephant.")
+ (SYNONYM CERBERUS DOG HOUND MONSTER)
+ (ADJECTIVE HUGE GIANT THREE HEADED)
+ (FLAGS ACTORBIT OPENBIT CONTBIT)
+ (ACTION CERBERUS-F)>
+
+<GLOBAL CERBERUS-LEASHED <>>
+
+<ROUTINE CERBERUS-F ()
+ <COND (<AND <VERB? WAVE RUB RAISE>
+ <EQUAL? ,PRSO ,WAND>>
+ <TELL "The dog looks puzzled." CR>
+ <RFALSE>)
+ (<AND ,WAND-ON
+ <VERB? SAY INCANT>>
+ <RFALSE>)
+ (<HELLO? ,CERBERUS>
+ <COND (,CERBERUS-LEASHED
+ <TELL "\"Arf! Arf!\"" CR>)
+ (T
+ <TELL "\"Grrrr!\"" CR>)>)
+ (<VERB? ATTACK MUNG>
+ <COND (,CERBERUS-LEASHED
+ <REMOVE ,CERBERUS>
+ <TELL
+"With a quiet bark of disappointment, the creature expires into a small pile
+of dust which blows away into nothing." CR>)
+ (T
+ <TELL
+"The maddened dog-thing snaps at you viciously." CR>)>)
+ (<AND <VERB? PUT PUT-ON>
+ <EQUAL? ,PRSO ,COLLAR>>
+ <SETG CERBERUS-LEASHED T>
+ <MOVE ,COLLAR ,CERBERUS>
+ <FSET ,COLLAR ,NDESCBIT>
+ <FSET ,COLLAR ,TRYTAKEBIT>
+ <PUTP ,CERBERUS ,P?LDESC
+"A grinning, three-headed dog, wearing a huge collar, wags its tail here.">
+ <TELL
+"All three heads begin licking your face, and its huge tail wags
+enthusiastically, almost blowing you over from the breeze it creates." CR>)
+ (<VERB? ENCHANT>
+ <COND (<EQUAL? ,SPELL-USED ,W?FLOAT>
+ <SETG SPELL-HANDLED? T>
+ <TELL
+"The huge dog rises an inch off the ground, for a moment." CR>)
+ (<EQUAL? ,SPELL-USED ,W?FEEBLE>
+ <TELL
+"What an effect! He now has the strength of just one elephant, rather
+than ten!" CR>)>)
+ (<NOT ,CERBERUS-LEASHED>
+ <TELL "The three-headed dog snaps at you viciously!" CR>)
+ (<AND ,CERBERUS-LEASHED
+ <VERB? RUB>>
+ <TELL
+"The dog slobbers and whines with uncontained joy." CR>)>>
+
+<ROOM CRYPT
+ (IN ROOMS)
+ (DESC "Crypt")
+ (LDESC
+"Before you are the earthly remains of the mighty Flatheads, twelve somewhat
+flat heads mounted securely on poles. There is writing carved on the crypt.
+To the north and south are dark doorways.")
+ (NORTH TO CERBERUS-ROOM)
+ (SOUTH TO ZORK3)
+ (VALUE 2)
+ (FLAGS RLANDBIT)>
+
+<OBJECT HEADS
+ (IN CRYPT)
+ (DESC "set of poled heads")
+ (SYNONYM HEADS HEAD POLE POLES)
+ (FLAGS NDESCBIT TRYTAKEBIT)
+ (ACTION HEADS-F)>
+
+<ROUTINE HEADS-F ()
+ <COND (<VERB? HELLO TELL>
+ <TELL "Dead Flatheads tell no tales." CR>)
+ (<VERB? KICK ATTACK RUB OPEN TAKE BURN>
+ <JIGS-UP
+"The Flatheads foresaw that someone might tamper with their remains,
+and took steps to punish such actions.">)>>
+
+<OBJECT CRYPT-OBJECT
+ (IN CRYPT)
+ (DESC "marble crypt")
+ (SYNONYM TOMB CRYPT GRAVE)
+ (ADJECTIVE MARBLE)
+ (FLAGS NDESCBIT READBIT)
+ (TEXT
+"\"Here lie the Flatheads, whose heads were placed on poles by the
+Dungeon Master for amazing untastefulness.\"")
+ (ACTION CRYPT-OBJECT-F)>
+
+<ROUTINE CRYPT-OBJECT-F ()
+ <COND (<VERB? OPEN>
+ <TELL "The crypt is sealed for all time." CR>)>>
+
+<ROOM ZORK3
+ (IN ROOMS)
+ (DESC "Landing")
+ (FLAGS RLANDBIT ONBIT)
+ (ACTION ZORK3-F)>
+
+<ROUTINE ZORK3-F (RARG)
+ <COND (<EQUAL? .RARG ,M-LOOK>
+ <TELL "A rough-hewn stair leads down into darkness. ">
+ <COND (<IN? ,WAND ,WINNER>
+ <TELL
+"The wand vibrates and are compelled downward. There is a burst of light,
+and you tumble down the staircase! At the bottom, a vast red-lit hall,
+guarded by sinister statues, is visible far ahead.|
+|
+You have conquered the Wizard of Frobozz and become master of his domain,
+but the final challenge awaits! (The Zork Trilogy concludes with \"Zork III:
+The Dungeon Master\".)" CR CR>
+ <FINISH>)
+ (T
+ <JIGS-UP
+"Strands of light vibrate toward you, as if searching for something.
+One by one your possessions glow bright green. Finally, you are attacked
+by these magical wardens, and destroyed!">)>)>>
+\
+;"blue palantir puzzle (the old mat-under-the-door trick)"
+
+<GLOBAL MUD-FLAG <>>
+
+<GLOBAL MATOBJ <>>
+
+<GLOBAL PUNLOCK-FLAG <>>
+
+<GLOBAL PLOOK-FLAG <>>
+
+<ROOM LEDGE-IN-RAVINE
+ (IN ROOMS)
+ (DESC "Ledge in Ravine")
+ (SOUTH TO DEEP-FORD)
+ (DOWN TO DEEP-FORD)
+ (WEST TO DRAGON-ROOM)
+ (NORTH TO DREARY-ROOM IF PDOOR IS OPEN)
+ (IN TO DREARY-ROOM IF PDOOR IS OPEN)
+ (FLAGS RLANDBIT)
+ (GLOBAL CHASM PDOOR STREAM PWINDOW)
+ (ACTION LEDGE-IN-RAVINE-F)>
+
+<ROUTINE LEDGE-IN-RAVINE-F (RARG)
+ <COND (<EQUAL? .RARG ,M-LOOK>
+ <TELL
+"To the south, a stream runs through a narrow ravine. It looks as if you
+could scramble down to the stream. A smokey odor drifts in from the west. ">
+ <P-DOOR "north">)
+ (<NOT <VERB? LOOK>>
+ <PCHECK>
+ <RFALSE>)>>
+
+<ROUTINE P-DOOR (STR)
+ <COND (,PLOOK-FLAG
+ <SETG PLOOK-FLAG <>>
+ <RFALSE>)>
+ <TELL
+"On the " .STR " side of the room is an oak door with a small barred window
+and a formidable lock (with keyhole).">
+ <COND (,MUD-FLAG
+ <TELL " " ,PLACE-MAT-VISIBLE>
+ <COND (,MATOBJ
+ <TELL " Lying on the place mat is a " D ,MATOBJ ".">)>)>
+ <CRLF>>
+
+<ROUTINE PCHECK ()
+ <SETG PLOOK-FLAG <>>
+ <COND (<IN? ,KEY ,KEYHOLE-2>
+ <FSET ,KEY ,NDESCBIT>)
+ (T
+ <FCLEAR ,KEY ,NDESCBIT>)>
+ <COND (<HELD? ,PLACE-MAT>
+ <SETG MUD-FLAG <>>)> ;"HUH?"
+ <COND (,MUD-FLAG
+ <MOVE ,PLACE-MAT ,HERE>
+ <FSET ,PLACE-MAT ,NDESCBIT>)
+ (T
+ <FCLEAR ,PLACE-MAT ,NDESCBIT>)>>
+
+<ROOM DREARY-ROOM
+ (IN ROOMS)
+ (DESC "Dreary Room")
+ (SOUTH TO LEDGE-IN-RAVINE IF PDOOR IS OPEN)
+ (OUT TO LEDGE-IN-RAVINE IF PDOOR IS OPEN)
+ (FLAGS RLANDBIT ONBIT)
+ (GLOBAL PDOOR PWINDOW)
+ (ACTION DREARY-ROOM-F)>
+
+<ROUTINE DREARY-ROOM-F (RARG)
+ <COND (<EQUAL? .RARG ,M-LOOK>
+ <TELL
+"The room is eerily lit by a red glow emanating from a crack in one wall.
+The light falls upon a dusty wooden table. ">
+ <P-DOOR "south">)
+ (T
+ <PCHECK>
+ <RFALSE>)>>
+
+<OBJECT PDOOR
+ (IN LOCAL-GLOBALS)
+ (DESC "door of oak")
+ (SYNONYM DOOR)
+ (ADJECTIVE WOODEN OAK)
+ (FLAGS DOORBIT CONTBIT)
+ (ACTION PDOOR-F)>
+
+<ROUTINE PDOOR-F ("AUX" K)
+ <COND (<AND <VERB? LOOK-UNDER>
+ ,MUD-FLAG>
+ <TELL ,PLACE-MAT-VISIBLE CR>)
+ (<VERB? UNLOCK>
+ <COND (<EQUAL? ,PRSI ,KEY>
+ <SETG PUNLOCK-FLAG T>
+ <TELL "The door is now unlocked." CR>)
+ (<EQUAL? ,PRSI ,GOLD-KEY>
+ <TELL ,DOESNT-FIT-LOCK>)
+ (T
+ <TELL <PICK-ONE ,YUKS> CR>)>)
+ (<VERB? LOCK>
+ <COND (<EQUAL? ,PRSI ,KEY>
+ <SETG PUNLOCK-FLAG <>>
+ <TELL "The door is locked." CR>)
+ (<EQUAL? ,PRSI ,GOLD-KEY>
+ <TELL ,DOESNT-FIT-LOCK>)
+ (T
+ <TELL <PICK-ONE ,YUKS> CR>)>)
+ (<VERB? PUT-UNDER>
+ <COND (<EQUAL? ,PRSO ,ROBOT-LABEL>
+ <TELL "The tiny paper vanishes under the door." CR>
+ <MOVE ,PRSO <COND (<EQUAL? ,HERE ,LEDGE-IN-RAVINE>
+ ,DREARY-ROOM)
+ (T
+ ,LEDGE-IN-RAVINE)>>)
+ (<EQUAL? ,PRSO ,NEWSPAPER>
+ <TELL
+"The newspaper crumples up and won't go under the door." CR>)>)
+ (<VERB? OPEN CLOSE>
+ <COND (,PUNLOCK-FLAG
+ <OPEN-CLOSE>)
+ (T
+ <TELL "The door is locked." CR>)>)>>
+
+<OBJECT PWINDOW
+ (IN LOCAL-GLOBALS)
+ (DESC "barred window")
+ (SYNONYM WINDOW)
+ (ADJECTIVE BARRED)
+ (FLAGS DOORBIT)
+ (ACTION PWINDOW-F)>
+
+<ROUTINE PWINDOW-F ()
+ <COND (<VERB? LOOK-INSIDE>
+ <SETG PLOOK-FLAG T>
+ <COND (<FSET? ,PDOOR ,OPENBIT>
+ <TELL "The door is open!" CR>)
+ (T
+ <GO&LOOK <COND (<EQUAL? ,HERE ,DREARY-ROOM>
+ ,LEDGE-IN-RAVINE)
+ (T
+ ,DREARY-ROOM)>>)>)
+ (<VERB? ENTER>
+ <TELL "Perhaps if you were diced...." CR>)>>
+
+<OBJECT PTABLE
+ (IN DREARY-ROOM)
+ (DESC "table")
+ (SYNONYM TABLE)
+ (ADJECTIVE DUSTY WOODEN)
+ (CAPACITY 40)
+ (FLAGS NDESCBIT CONTBIT SURFACEBIT OPENBIT)>
+
+<OBJECT PCRACK
+ (IN DREARY-ROOM)
+ (DESC "crack")
+ (SYNONYM CRACK)
+ (ADJECTIVE NARROW)
+ (FLAGS NDESCBIT)>
+
+<OBJECT KEYHOLE-1
+ (IN LEDGE-IN-RAVINE)
+ (DESC "keyhole")
+ (SYNONYM KEYHOLE HOLE)
+ (FLAGS NDESCBIT)
+ (ACTION PKEYHOLE-F)>
+
+<OBJECT KEYHOLE-2
+ (IN DREARY-ROOM)
+ (DESC "keyhole")
+ (SYNONYM KEYHOLE HOLE)
+ (FLAGS NDESCBIT)
+ (ACTION PKEYHOLE-F)>
+
+<ROUTINE PKEYHOLE-F ()
+ <COND (<VERB? LOOK-INSIDE>
+ <TELL "You can">
+ <COND (<OR <IN? ,KEY ,KEYHOLE-2>
+ <NOT <LIT? <COND (<EQUAL? ,HERE ,DREARY-ROOM>
+ ,LEDGE-IN-RAVINE)
+ (T
+ ,DREARY-ROOM)>>>>
+ <TELL "'t">)>
+ <TELL " see light through the keyhole." CR>)
+ (<VERB? PUT>
+ <COND (<IN? ,KEY ,KEYHOLE-2>
+ <COND (<EQUAL? ,PRSO ,LETTER-OPENER>
+ <COND (,MUD-FLAG
+ <SETG MATOBJ ,KEY>)>
+ <MOVE ,KEY ,DREARY-ROOM>
+ <TELL
+"There is a faint thud behind the door." CR>)
+ (T
+ <TELL "The " D ,PRSO " doesn't fit." CR>)>)
+ (T
+ <PERFORM ,V?UNLOCK ,PDOOR ,PRSO>
+ <RTRUE>)>)>>
+
+<OBJECT KEY
+ (IN KEYHOLE-2)
+ (DESC "rusty iron key")
+ (SYNONYM KEY)
+ (ADJECTIVE IRON RUSTY)
+ (SIZE 2)
+ (FLAGS TAKEBIT NDESCBIT TOOLBIT)> \ No newline at end of file
diff --git a/globals.zabstr b/globals.zabstr
new file mode 100644
index 0000000..85638df
--- /dev/null
+++ b/globals.zabstr
@@ -0,0 +1,93 @@
+
+<DIRECTIONS NORTH EAST WEST SOUTH NE NW SE SW UP DOWN IN OUT LAND>
+<OBJECT GLOBAL-OBJECTS (FLAGS INVISIBLE TOUCHBIT SURFACEBIT TRYTAKEBIT OPENBIT
+SEARCHBIT TRANSBIT ONBIT RLANDBIT)>
+<OBJECT LOCAL-GLOBALS (IN GLOBAL-OBJECTS) (SYNONYM ZZMGCK)>
+<OBJECT ROOMS (IN TO ROOMS)>
+<OBJECT INTNUM (IN GLOBAL-OBJECTS) (DESC "number") (SYNONYM INTNUM) (FLAGS
+TOOLBIT)>
+<OBJECT PSEUDO-OBJECT (IN LOCAL-GLOBALS) (DESC "pseudo") (ACTION ME-F)>
+<OBJECT IT (IN GLOBAL-OBJECTS) (SYNONYM IT THEM HER HIM) (DESC "thing") (FLAGS
+NDESCBIT TOUCHBIT)>
+<OBJECT NOT-HERE-OBJECT (DESC "thing") (ACTION NOT-HERE-OBJECT-F)>
+<DEFINE-ROUTINE NOT-HERE-OBJECT-F>
+<DEFINE-ROUTINE NOT-HERE-PRINT>
+<OBJECT GROUND (IN GLOBAL-OBJECTS) (DESC "ground") (SYNONYM GROUND DIRT FLOOR)
+(ACTION GROUND-F)>
+<DEFINE-ROUTINE GROUND-F>
+<OBJECT WATER (DESC "quantity of water") (LDESC "There is some water here.") (
+SYNONYM WATER LIQUID) (SIZE 4) (FLAGS TAKEBIT DRINKBIT) (ACTION WATER-F)>
+<OBJECT GLOBAL-WATER (IN LOCAL-GLOBALS) (DESC "water") (SYNONYM WATER) (FLAGS
+DRINKBIT) (ACTION WATER-F)>
+<DEFINE-ROUTINE WATER-F>
+<DEFINE-ROUTINE PUDDLE>
+<OBJECT GRUE (IN GLOBAL-OBJECTS) (DESC "lurking grue") (SYNONYM GRUE) (
+ADJECTIVE LURKING) (ACTION GRUE-F)>
+<DEFINE-ROUTINE GRUE-F>
+<OBJECT ME (IN GLOBAL-OBJECTS) (DESC "brave adventurer") (SYNONYM ME MYSELF
+SELF) (FLAGS ACTORBIT) (ACTION ME-F)>
+<DEFINE-ROUTINE ME-F>
+<OBJECT ADVENTURER (IN INSIDE-THE-BARROW) (DESC "thing") (SYNONYM ADVENTURER) (
+STRENGTH 0) (FLAGS NDESCBIT INVISIBLE SACREDBIT ACTORBIT) (ACTION 0)>
+<OBJECT PATH-OBJECT (IN GLOBAL-OBJECTS) (DESC "passage") (SYNONYM PATH PASSAGE
+TUNNEL) (ADJECTIVE DARK DAMP SMOKEY SCORCHED NARROW) (FLAGS NDESCBIT) (ACTION
+PATH-OBJECT-F)>
+<DEFINE-ROUTINE PATH-OBJECT-F>
+<OBJECT ZORKMID (IN GLOBAL-OBJECTS) (DESC "zorkmid") (SYNONYM ZORKMID) (ACTION
+ZORKMID-F)>
+<DEFINE-ROUTINE ZORKMID-F>
+<OBJECT HANDS (IN GLOBAL-OBJECTS) (DESC "pair of hands") (SYNONYM PAIR HANDS
+HAND) (ADJECTIVE BARE) (FLAGS NDESCBIT TOOLBIT)>
+<OBJECT STREAM (IN LOCAL-GLOBALS) (DESC "stream") (SYNONYM STREAM) (ADJECTIVE
+COLD) (FLAGS NDESCBIT) (ACTION STREAM-F)>
+<DEFINE-ROUTINE STREAM-F>
+<OBJECT CHASM (IN LOCAL-GLOBALS) (DESC "chasm") (SYNONYM CHASM RAVINE) (
+ADJECTIVE DEEP) (FLAGS NDESCBIT) (ACTION CHASM-F)>
+<DEFINE-ROUTINE CHASM-F>
+<OBJECT BRIDGE (IN LOCAL-GLOBALS) (DESC "bridge") (SYNONYM BRIDGE) (ADJECTIVE
+STONE) (FLAGS NDESCBIT) (ACTION BRIDGE-F)>
+<DEFINE-ROUTINE BRIDGE-F>
+<OBJECT WALL (IN GLOBAL-OBJECTS) (DESC "wall") (SYNONYM WALL) (ADJECTIVE EAST
+EASTERN WEST WESTERN SOUTH SOUTHE NORTH NORTHE)>
+<DEFINE-ROUTINE OPEN-CLOSE>
+<DEFINE-ROUTINE HELLO?>
+<DEFINE-ROUTINE FIND-TARGET>
+<DEFINE-ROUTINE NOW-DARK?>
+<DEFINE-ROUTINE DO-WALK>
+<DEFINE-ROUTINE GLOBAL-IN?>
+<DEFINE-ROUTINE FIND-IN>
+<DEFINE-ROUTINE HELD?>
+<DEFINE-ROUTINE OTHER-SIDE>
+<DEFINE-ROUTINE HACK-HACK>
+<GLOBAL HO-HUM <LTABLE 0 " doesn't seem to work." " isn't notably helpful."
+" has no effect.">>
+<GLOBAL YUKS <LTABLE 0 "A valiant attempt." "You can't be serious."
+"Not bloody likely." "An interesting idea..." "What a concept!">>
+<GLOBAL RIDDLE-TEXT
+"What's tall as a house,|
+ round as a cup,|
+ and all the king's horses|
+ can't draw it up?\"|">
+<GLOBAL PERIOD-CR ".|">
+<GLOBAL DEMON-GONE "The demon is gone for a moment. ">
+<GLOBAL MOVED-IN-DARK "You feel a rush of air as something moved nearby.|">
+<GLOBAL STRANGE-VISION
+"As you peer into the sphere, a strange vision takes shape">
+<GLOBAL LOOK-AROUND "Look around you.|">
+<GLOBAL TOO-DARK "It's too dark to see.">
+<GLOBAL ONLY-DARKNESS "You see only darkness.|">
+<GLOBAL ALREADY "It already is!|">
+<GLOBAL WAND-STOPS-GLOWING
+"The wand stops glowing, but there is no other apparent effect.|">
+<GLOBAL CANT-GO "You can't go that way.|">
+<GLOBAL PLACE-MAT-VISIBLE "The edge of a place mat is visible under the door.">
+
+<GLOBAL DOESNT-FIT-LOCK "It doesn't fit the lock.|">
+<GLOBAL GUE-NAME " the Great Underground Empire">
+<GLOBAL REFERRING "It's not clear what you're referring to.|">
+<GLOBAL STOPS " comes to a stop.||">
+<GLOBAL B-W-C "\"Buzz, whirr, click!">
+<GLOBAL WAVES-WAND "The Wizard waves his wand ">
+<GLOBAL INVISIBLE-HAND
+", almost as though an invisible hand had tipped it over.|">
+<GLOBAL GREEDILY-DEVOURS "The guardian greedily devours "> \ No newline at end of file
diff --git a/globals.zap b/globals.zap
new file mode 100644
index 0000000..d01fc9a
--- /dev/null
+++ b/globals.zap
@@ -0,0 +1,309 @@
+
+
+ .FUNCT NOT-HERE-OBJECT-F,TBL,PRSO?=1,OBJ
+ EQUAL? PRSO,NOT-HERE-OBJECT \?CCL3
+ EQUAL? PRSI,NOT-HERE-OBJECT \?CCL3
+ PRINTR "Those things aren't here!"
+?CCL3: EQUAL? PRSO,NOT-HERE-OBJECT \?CCL9
+ SET 'TBL,P-PRSO
+ JUMP ?CND1
+?CCL9: SET 'TBL,P-PRSI
+ SET 'PRSO?,FALSE-VALUE
+?CND1: SET 'P-CONT,FALSE-VALUE
+ SET 'QUOTE-FLAG,FALSE-VALUE
+ EQUAL? WINNER,ADVENTURER \?PRG17
+ PRINTI "You can't see any "
+ CALL NOT-HERE-PRINT,PRSO?
+ PRINTR " here!"
+?PRG17: PRINTI "The "
+ PRINTD WINNER
+ PRINTI " seems confused. ""I don't see any "
+ CALL NOT-HERE-PRINT,PRSO?
+ PRINTR " here!"""
+
+
+ .FUNCT NOT-HERE-PRINT,PRSO?,?TMP1
+ ZERO? P-OFLAG /?CCL3
+ ZERO? P-XADJ /?CND4
+ PRINTB P-XADJN
+?CND4: ZERO? P-XNAM /FALSE
+ PRINTB P-XNAM
+ RTRUE
+?CCL3: ZERO? PRSO? /?CCL10
+ GET P-ITBL,P-NC1 >?TMP1
+ GET P-ITBL,P-NC1L
+ CALL BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE
+ RSTACK
+?CCL10: GET P-ITBL,P-NC2 >?TMP1
+ GET P-ITBL,P-NC2L
+ CALL BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE
+ RSTACK
+
+
+ .FUNCT GROUND-F
+ EQUAL? PRSA,V?PUT-ON,V?PUT \FALSE
+ EQUAL? PRSI,GROUND \FALSE
+ CALL PERFORM,V?DROP,PRSO
+ RTRUE
+
+
+ .FUNCT WATER-F,AV,W,PI?
+ EQUAL? PRSA,V?SGIVE /FALSE
+ EQUAL? PRSA,V?ENTER \?CCL5
+ CALL PERFORM,V?SWIM,PRSO
+ RTRUE
+?CCL5: EQUAL? PRSA,V?FILL \?CCL7
+ SET 'W,PRSI
+ SET 'PRSA,V?PUT
+ SET 'PRSI,PRSO
+ SET 'PRSO,W
+ SET 'PI?,FALSE-VALUE
+ JUMP ?CND1
+?CCL7: EQUAL? PRSO,GLOBAL-WATER,WATER \?CCL9
+ SET 'W,PRSO
+ SET 'PI?,FALSE-VALUE
+ JUMP ?CND1
+?CCL9: ZERO? PRSI /?CND1
+ SET 'W,PRSI
+ SET 'PI?,TRUE-VALUE
+?CND1: EQUAL? W,GLOBAL-WATER \?CND11
+ SET 'W,WATER
+ EQUAL? PRSA,V?PUT,V?TAKE \?CND11
+ REMOVE W
+?CND11: ZERO? PI? /?CCL17
+ SET 'PRSI,W
+ JUMP ?CND15
+?CCL17: SET 'PRSO,W
+?CND15: LOC WINNER >AV
+ FSET? AV,VEHBIT /?CND18
+ SET 'AV,FALSE-VALUE
+?CND18: EQUAL? PRSA,V?PUT,V?TAKE \?CCL22
+ ZERO? PI? \?CCL22
+ ZERO? AV /?CCL27
+ EQUAL? AV,PRSI \?CCL27
+ CALL PUDDLE,AV
+ RSTACK
+?CCL27: ZERO? AV /?CCL31
+ ZERO? PRSI \?CCL31
+ IN? W,AV /?CCL31
+ CALL PUDDLE,AV
+ RSTACK
+?CCL31: ZERO? PRSI /?CCL36
+ EQUAL? PRSI,TEAPOT /?CCL36
+ PRINTI "The water leaks out of the "
+ PRINTD PRSI
+ PRINTI " and evaporates immediately."
+ CRLF
+ REMOVE W
+ RTRUE
+?CCL36: IN? TEAPOT,WINNER \?CCL42
+ FIRST? TEAPOT /?PRG48
+ MOVE WATER,TEAPOT
+ PRINTR "The teapot is now full of water."
+?PRG48: PRINTR "The teapot isn't currently empty."
+?CCL42: IN? PRSO,TEAPOT \?PRG55
+ EQUAL? PRSA,V?TAKE \?PRG55
+ ZERO? PRSI \?PRG55
+ SET 'PRSO,TEAPOT
+ CALL ITAKE
+ SET 'PRSO,W
+ RETURN PRSO
+?PRG55: PRINTR "The water slips through your fingers."
+?CCL22: ZERO? PI? /?CCL58
+ PRINTR "Nice try."
+?CCL58: EQUAL? PRSA,V?GIVE,V?DROP \?CCL62
+ EQUAL? PRSO,WATER \?CND63
+ CALL HELD?,WATER
+ ZERO? STACK \?CND63
+ PRINTR "You don't have any water."
+?CND63: REMOVE WATER
+ ZERO? AV /?PRG72
+ CALL PUDDLE,AV
+ RSTACK
+?PRG72: PRINTI "The water spills to the floor and evaporates."
+ CRLF
+ REMOVE WATER
+ RTRUE
+?CCL62: EQUAL? PRSA,V?THROW \FALSE
+ PRINTI "The water splashes on the walls and evaporates."
+ CRLF
+ REMOVE WATER
+ RTRUE
+
+
+ .FUNCT PUDDLE,AV
+ PRINTI "There is now a puddle in the bottom of the "
+ PRINTD AV
+ PRINT PERIOD-CR
+ MOVE PRSO,AV
+ RTRUE
+
+
+ .FUNCT GRUE-F
+ EQUAL? PRSA,V?EXAMINE \?CCL3
+ PRINTR "The grue is a sinister, lurking presence in the dark places of the earth. Its favorite diet is adventurers, but its insatiable appetite is tempered by its fear of light."
+?CCL3: EQUAL? PRSA,V?FIND \FALSE
+ PRINTR "There's probably one lurking in the darkness nearby. Don't let your light go out!"
+
+
+ .FUNCT ME-F
+ EQUAL? PRSA,V?TELL \?CCL3
+ SET 'P-CONT,FALSE-VALUE
+ SET 'QUOTE-FLAG,FALSE-VALUE
+ PRINTR "Talking to yourself is a sign of impending mental collapse."
+?CCL3: EQUAL? PRSA,V?GIVE \?CCL7
+ EQUAL? PRSI,ME \?CCL7
+ CALL PERFORM,V?TAKE,PRSO
+ RTRUE
+?CCL7: EQUAL? PRSA,V?EAT \?CCL11
+ PRINTR "Auto-cannibalism is not the answer."
+?CCL11: EQUAL? PRSA,V?MUNG,V?ATTACK \?CCL15
+ CALL JIGS-UP,STR?22
+ RSTACK
+?CCL15: EQUAL? PRSA,V?TAKE \?CCL17
+ PRINTR "How romantic!"
+?CCL17: EQUAL? PRSA,V?EXAMINE \FALSE
+ PRINTR "Difficult, unless your eyes are prehensile."
+
+
+ .FUNCT PATH-OBJECT-F
+ EQUAL? PRSA,V?FOLLOW,V?TAKE \FALSE
+ CALL V-WALK-AROUND
+ RSTACK
+
+
+ .FUNCT ZORKMID-F
+ EQUAL? PRSA,V?EXAMINE \FALSE
+ PRINTI "The zorkmid is the unit of currency of"
+ PRINT GUE-NAME
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT STREAM-F
+ EQUAL? PRSA,V?ENTER \FALSE
+ CALL V-SWIM
+ RSTACK
+
+
+ .FUNCT CHASM-F
+ EQUAL? PRSA,V?LEAP /?CTR2
+ EQUAL? PRSA,V?PUT \?CCL3
+ EQUAL? PRSO,ME \?CCL3
+?CTR2: CALL JIGS-UP,STR?7
+ RSTACK
+?CCL3: EQUAL? PRSA,V?PUT \FALSE
+ EQUAL? PRSI,PSEUDO-OBJECT \FALSE
+ REMOVE PRSO
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " disappears into the chasm."
+
+
+ .FUNCT BRIDGE-F
+ EQUAL? PRSA,V?LEAP \FALSE
+ CALL JIGS-UP,STR?7
+ RSTACK
+
+
+ .FUNCT OPEN-CLOSE
+ EQUAL? PRSA,V?OPEN \?CCL3
+ FSET? PRSO,OPENBIT \?CCL6
+ PRINT LOOK-AROUND
+ RTRUE
+?CCL6: FSET PRSO,OPENBIT
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " is now open."
+?CCL3: FSET? PRSO,OPENBIT \?PRG15
+ FCLEAR PRSO,OPENBIT
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " is now closed."
+?PRG15: PRINT LOOK-AROUND
+ RTRUE
+
+
+ .FUNCT HELLO?,WHO
+ EQUAL? WINNER,WHO /?CCL3
+ EQUAL? PRSA,V?HELLO,V?SAY,V?TELL /?CCL3
+ EQUAL? PRSA,V?INCANT \FALSE
+?CCL3: EQUAL? PRSA,V?INCANT,V?SAY,V?TELL \TRUE
+ SET 'P-CONT,FALSE-VALUE
+ SET 'QUOTE-FLAG,FALSE-VALUE
+ RTRUE
+
+
+ .FUNCT FIND-TARGET,TARGET,P,TX,L,ROOM
+ IN? TARGET,HERE \?CCL3
+ RETURN HERE
+?CCL3: SET 'P,0
+?PRG4: NEXTP HERE,P >P
+ ZERO? P /FALSE
+ LESS? P,LOW-DIRECTION /?PRG4
+ GETPT HERE,P >TX
+ PTSIZE TX >L
+ EQUAL? L,UEXIT,CEXIT,DEXIT \?PRG4
+ GETB TX,0 >ROOM
+ IN? TARGET,ROOM \?PRG4
+ RETURN ROOM
+
+
+ .FUNCT NOW-DARK?
+ CALL LIT?,HERE >LIT
+ ZERO? LIT \TRUE
+ PRINTR "It is now pitch black."
+
+
+ .FUNCT DO-WALK,DIR
+ SET 'P-WALK-DIR,DIR
+ CALL PERFORM,V?WALK,DIR
+ RSTACK
+
+
+ .FUNCT GLOBAL-IN?,OBJ1,OBJ2,TX
+ GETPT OBJ2,P?GLOBAL >TX
+ ZERO? TX /FALSE
+ PTSIZE TX
+ SUB STACK,1
+ CALL ZMEMQB,OBJ1,TX,STACK
+ RSTACK
+
+
+ .FUNCT FIND-IN,WHERE,WHAT,W
+ FIRST? WHERE >W /?BOGUS1
+?BOGUS1: ZERO? W /FALSE
+?PRG4: FSET? W,WHAT \?CCL8
+ EQUAL? W,ADVENTURER /?CCL8
+ RETURN W
+?CCL8: NEXT? W >W /?PRG4
+ RFALSE
+
+
+ .FUNCT HELD?,CAN
+?PRG1: LOC CAN >CAN
+ ZERO? CAN /FALSE
+ EQUAL? CAN,WINNER \?PRG1
+ RTRUE
+
+
+ .FUNCT OTHER-SIDE,DOBJ,P=0,TX
+?PRG1: NEXTP HERE,P >P
+ LESS? P,LOW-DIRECTION /FALSE
+ GETPT HERE,P >TX
+ PTSIZE TX
+ EQUAL? STACK,DEXIT \?PRG1
+ GETB TX,DEXITOBJ
+ EQUAL? STACK,DOBJ \?PRG1
+ RETURN P
+
+
+ .FUNCT HACK-HACK,STR
+ PRINT STR
+ PRINTD PRSO
+ CALL PICK-ONE,HO-HUM
+ PRINT STACK
+ CRLF
+ RTRUE
+
+ .ENDI
diff --git a/globals.zil b/globals.zil
new file mode 100644
index 0000000..08f3b7e
--- /dev/null
+++ b/globals.zil
@@ -0,0 +1,477 @@
+"GLOBALS for
+ Mini-Zork II: The Wizard of Frobozz
+ (c) Copyright 1988 Infocom, Inc. All Rights Reserved."
+
+<DIRECTIONS NORTH EAST WEST SOUTH NE NW SE SW UP DOWN IN OUT LAND>
+
+<OBJECT GLOBAL-OBJECTS
+ (FLAGS INVISIBLE TOUCHBIT SURFACEBIT TRYTAKEBIT
+ OPENBIT SEARCHBIT TRANSBIT ONBIT RLANDBIT)>
+
+<OBJECT LOCAL-GLOBALS
+ (IN GLOBAL-OBJECTS)
+ (SYNONYM ZZMGCK) ;"Yes, this synonym needs to exist... sigh">
+
+<OBJECT ROOMS
+ (IN TO ROOMS)>
+
+<OBJECT INTNUM
+ (IN GLOBAL-OBJECTS)
+ (DESC "number")
+ (SYNONYM INTNUM)
+ (FLAGS TOOLBIT)>
+
+<OBJECT PSEUDO-OBJECT
+ (IN LOCAL-GLOBALS)
+ (DESC "pseudo")
+ (ACTION ME-F)>
+
+<OBJECT IT
+ (IN GLOBAL-OBJECTS)
+ (SYNONYM IT THEM HER HIM)
+ (DESC "thing")
+ (FLAGS NDESCBIT TOUCHBIT)>
+
+<OBJECT NOT-HERE-OBJECT
+ (DESC "thing")
+ (ACTION NOT-HERE-OBJECT-F)>
+
+<ROUTINE NOT-HERE-OBJECT-F ("AUX" TBL (PRSO? T) OBJ)
+ ;"This COND is game independent (except the TELL)"
+ <COND (<AND <EQUAL? ,PRSO ,NOT-HERE-OBJECT>
+ <EQUAL? ,PRSI ,NOT-HERE-OBJECT>>
+ <TELL "Those things aren't here!" CR>
+ <RTRUE>)
+ (<EQUAL? ,PRSO ,NOT-HERE-OBJECT>
+ <SET TBL ,P-PRSO>)
+ (T
+ <SET TBL ,P-PRSI>
+ <SET PRSO? <>>)>
+ ;"Here is the default 'cant see any' printer"
+ <SETG P-CONT <>>
+ <SETG QUOTE-FLAG <>>
+ <COND (<EQUAL? ,WINNER ,ADVENTURER>
+ <TELL "You can't see any ">
+ <NOT-HERE-PRINT .PRSO?>
+ <TELL " here!" CR>)
+ (T
+ <TELL "The " D ,WINNER " seems confused. \"I don't see any ">
+ <NOT-HERE-PRINT .PRSO?>
+ <TELL " here!\"" CR>)>
+ <RTRUE>>
+
+;<ROUTINE FIND-NOT-HERE (TBL PRSO? "AUX" M-F OBJ)
+ ;"Here is where special-case code goes. <MOBY-FIND .TBL> returns
+ number of matches. If 1, then P-MOBY-FOUND is it. One may treat
+ the 0 and >1 cases alike or different. It doesn't matter. Always
+ return RFALSE (not handled) if you have resolved the problem."
+ <SET M-F <MOBY-FIND .TBL>>
+ ;<COND (,DEBUG
+ <TELL "[Moby-found " N .M-F " objects" "]" CR>)>
+ <COND (<AND <G? .M-F 1>
+ <SET OBJ <GETP <GET .TBL 1> ,P?GLOBAL>>>
+ <SET M-F 1>
+ <SETG P-MOBY-FOUND .OBJ>)>
+ <COND (<==? 1 .M-F>
+ ;<COND (,DEBUG <TELL "[Namely: " D ,P-MOBY-FOUND "]" CR>)>
+ <COND (.PRSO? <SETG PRSO ,P-MOBY-FOUND>)
+ (T <SETG PRSI ,P-MOBY-FOUND>)>
+ <RFALSE>)
+ (<NOT .PRSO?>
+ <TELL "You wouldn't find any ">
+ <NOT-HERE-PRINT .PRSO?>
+ <TELL " there." CR>
+ <RTRUE>)
+ (T ,NOT-HERE-OBJECT)>>
+
+;<ROUTINE GLOBAL-NOT-HERE-PRINT (OBJ)
+ ;<COND (,P-MULT <SETG P-NOT-HERE <+ ,P-NOT-HERE 1>>)>
+ <SETG P-CONT <>>
+ <SETG QUOTE-FLAG <>>
+ <TELL "You can't see any">
+ <COND (<EQUAL? .OBJ ,PRSO> <PRSO-PRINT>)
+ (T <PRSI-PRINT>)>
+ <TELL " here." CR>>
+
+<ROUTINE NOT-HERE-PRINT (PRSO?)
+ <COND (,P-OFLAG
+ <COND (,P-XADJ <PRINTB ,P-XADJN>)>
+ <COND (,P-XNAM <PRINTB ,P-XNAM>)>)
+ (.PRSO?
+ <BUFFER-PRINT <GET ,P-ITBL ,P-NC1> <GET ,P-ITBL ,P-NC1L> <>>)
+ (T
+ <BUFFER-PRINT <GET ,P-ITBL ,P-NC2> <GET ,P-ITBL ,P-NC2L> <>>)>>
+
+<OBJECT GROUND
+ (IN GLOBAL-OBJECTS)
+ (DESC "ground")
+ (SYNONYM GROUND DIRT FLOOR)
+ (ACTION GROUND-F)>
+
+<ROUTINE GROUND-F ()
+ <COND (<AND <VERB? PUT PUT-ON>
+ <EQUAL? ,PRSI ,GROUND>>
+ <PERFORM ,V?DROP ,PRSO>
+ <RTRUE>)>>
+
+<OBJECT WATER
+ (DESC "quantity of water")
+ (LDESC "There is some water here.")
+ (SYNONYM WATER LIQUID)
+ (SIZE 4)
+ (FLAGS TAKEBIT DRINKBIT)
+ (ACTION WATER-F)>
+
+<OBJECT GLOBAL-WATER
+ (IN LOCAL-GLOBALS)
+ (DESC "water")
+ (SYNONYM WATER)
+ (FLAGS DRINKBIT)
+ (ACTION WATER-F)>
+
+<ROUTINE WATER-F ("AUX" AV W PI?)
+ <COND (<VERB? SGIVE>
+ <RFALSE>)
+ (<VERB? ENTER>
+ <PERFORM ,V?SWIM ,PRSO>
+ <RTRUE>)
+ (<VERB? FILL> ;"fill bottle with water =>"
+ <SET W ,PRSI> ;"put water in bottle"
+ <SETG PRSA ,V?PUT>
+ <SETG PRSI ,PRSO>
+ <SETG PRSO .W>
+ <SET PI? <>>)
+ (<EQUAL? ,PRSO ,GLOBAL-WATER ,WATER>
+ <SET W ,PRSO>
+ <SET PI? <>>)
+ (,PRSI
+ <SET W ,PRSI>
+ <SET PI? T>)>
+ <COND (<EQUAL? .W ,GLOBAL-WATER>
+ <SET W ,WATER>
+ <COND (<VERB? TAKE PUT> <REMOVE .W>)>)>
+ <COND (.PI? <SETG PRSI .W>)
+ (T <SETG PRSO .W>)>
+ <SET AV <LOC ,WINNER>>
+ <COND (<NOT <FSET? .AV ,VEHBIT>> <SET AV <>>)>
+ <COND (<AND <VERB? TAKE PUT> <NOT .PI?>>
+ <COND (<AND .AV <EQUAL? .AV ,PRSI>>
+ <PUDDLE .AV>)
+ (<AND .AV <NOT ,PRSI> <NOT <IN? .W .AV>>>
+ <PUDDLE .AV>)
+ (<AND ,PRSI <NOT <EQUAL? ,PRSI ,TEAPOT>>>
+ <TELL "The water leaks out of the " D ,PRSI
+ " and evaporates immediately." CR>
+ <REMOVE .W>)
+ (<IN? ,TEAPOT ,WINNER>
+ <COND (<NOT <FIRST? ,TEAPOT>>
+ <MOVE ,WATER ,TEAPOT>
+ <TELL "The teapot is now full of water." CR>)
+ (T
+ <TELL "The teapot isn't currently empty." CR>
+ <RTRUE>)>)
+ (<AND <IN? ,PRSO ,TEAPOT>
+ <VERB? TAKE>
+ <NOT ,PRSI>>
+ <SETG PRSO ,TEAPOT>
+ <ITAKE>
+ <SETG PRSO .W>)
+ (T
+ <TELL "The water slips through your fingers." CR>)>)
+ (.PI?
+ <TELL "Nice try." CR>)
+ (<VERB? DROP GIVE>
+ <COND (<AND <EQUAL? ,PRSO ,WATER>
+ <NOT <HELD? ,WATER>>>
+ <TELL "You don't have any water." CR>
+ <RTRUE>)>
+ <REMOVE ,WATER>
+ <COND (.AV
+ <PUDDLE .AV>)
+ (T
+ <TELL
+"The water spills to the floor and evaporates." CR>
+ <REMOVE ,WATER>)>)
+ (<VERB? THROW>
+ <TELL
+"The water splashes on the walls and evaporates." CR>
+ <REMOVE ,WATER>)>>
+
+<ROUTINE PUDDLE (AV)
+ <TELL "There is now a puddle in the bottom of the " D .AV ,PERIOD-CR>
+ <MOVE ,PRSO .AV>>
+
+<OBJECT GRUE
+ (IN GLOBAL-OBJECTS)
+ (DESC "lurking grue")
+ (SYNONYM GRUE)
+ (ADJECTIVE LURKING)
+ (ACTION GRUE-F)>
+
+<ROUTINE GRUE-F ()
+ <COND (<VERB? EXAMINE>
+ <TELL
+"The grue is a sinister, lurking presence in the dark places of the earth.
+Its favorite diet is adventurers, but its insatiable appetite is tempered
+by its fear of light." CR>)
+ (<VERB? FIND>
+ <TELL
+"There's probably one lurking in the darkness nearby. Don't let your light
+go out!" CR>)>>
+
+<OBJECT ME
+ (IN GLOBAL-OBJECTS)
+ (DESC "brave adventurer")
+ (SYNONYM ME MYSELF SELF)
+ (FLAGS ACTORBIT)
+ (ACTION ME-F)>
+
+<ROUTINE ME-F ()
+ <COND (<VERB? TELL>
+ <SETG P-CONT <>>
+ <SETG QUOTE-FLAG <>>
+ <TELL
+"Talking to yourself is a sign of impending mental collapse." CR>)
+ (<AND <VERB? GIVE>
+ <EQUAL? ,PRSI ,ME>>
+ <PERFORM ,V?TAKE ,PRSO>
+ <RTRUE>)
+ (<VERB? EAT>
+ <TELL "Auto-cannibalism is not the answer." CR>)
+ (<VERB? ATTACK MUNG>
+ <JIGS-UP "Poof, you're dead!">)
+ (<VERB? TAKE>
+ <TELL "How romantic!" CR>)
+ (<VERB? EXAMINE>
+ <TELL "Difficult, unless your eyes are prehensile." CR>)>>
+
+<OBJECT ADVENTURER
+ (IN INSIDE-THE-BARROW)
+ (DESC "thing")
+ (SYNONYM ADVENTURER)
+ (STRENGTH 0)
+ (FLAGS NDESCBIT INVISIBLE SACREDBIT ACTORBIT)
+ (ACTION 0)>
+
+<OBJECT PATH-OBJECT
+ (IN GLOBAL-OBJECTS)
+ (DESC "passage")
+ (SYNONYM PATH PASSAGE TUNNEL)
+ (ADJECTIVE DARK DAMP SMOKEY SCORCHED NARROW)
+ (FLAGS NDESCBIT)
+ (ACTION PATH-OBJECT-F)>
+
+<ROUTINE PATH-OBJECT-F ()
+ <COND (<VERB? TAKE FOLLOW>
+ <V-WALK-AROUND>)>>
+
+<OBJECT ZORKMID
+ (IN GLOBAL-OBJECTS)
+ (DESC "zorkmid")
+ (SYNONYM ZORKMID)
+ (ACTION ZORKMID-F)>
+
+<ROUTINE ZORKMID-F ()
+ <COND (<VERB? EXAMINE>
+ <TELL
+"The zorkmid is the unit of currency of" ,GUE-NAME ,PERIOD-CR>)>>
+
+<OBJECT HANDS
+ (IN GLOBAL-OBJECTS)
+ (DESC "pair of hands")
+ (SYNONYM PAIR HANDS HAND)
+ (ADJECTIVE BARE)
+ (FLAGS NDESCBIT TOOLBIT)>
+
+<OBJECT STREAM
+ (IN LOCAL-GLOBALS)
+ (DESC "stream")
+ (SYNONYM STREAM)
+ (ADJECTIVE COLD)
+ (FLAGS NDESCBIT)
+ (ACTION STREAM-F)>
+
+<ROUTINE STREAM-F ()
+ <COND (<VERB? ENTER>
+ <V-SWIM>)>>
+
+<OBJECT CHASM
+ (IN LOCAL-GLOBALS)
+ (DESC "chasm")
+ (SYNONYM CHASM RAVINE)
+ (ADJECTIVE DEEP)
+ (FLAGS NDESCBIT)
+ (ACTION CHASM-F)>
+
+<ROUTINE CHASM-F ()
+ <COND (<OR <VERB? LEAP>
+ <AND <VERB? PUT>
+ <EQUAL? ,PRSO ,ME>>>
+ <JIGS-UP "You should have looked before you leaped.">)
+ (<AND <VERB? PUT>
+ <EQUAL? ,PRSI ,PSEUDO-OBJECT>>
+ <REMOVE ,PRSO>
+ <TELL "The " D ,PRSO " disappears into the chasm." CR>)>>
+
+<OBJECT BRIDGE
+ (IN LOCAL-GLOBALS)
+ (DESC "bridge")
+ (SYNONYM BRIDGE)
+ (ADJECTIVE STONE)
+ (FLAGS NDESCBIT)
+ (ACTION BRIDGE-F)>
+
+<ROUTINE BRIDGE-F ()
+ <COND (<VERB? LEAP>
+ <JIGS-UP "You should have looked before you leaped.">)>>
+
+<OBJECT WALL
+ (IN GLOBAL-OBJECTS)
+ (DESC "wall")
+ (SYNONYM WALL)
+ (ADJECTIVE EAST EASTERN WEST WESTERN SOUTH SOUTHE NORTH NORTHE)>
+
+<ROUTINE OPEN-CLOSE ()
+ <COND (<VERB? OPEN>
+ <COND (<FSET? ,PRSO ,OPENBIT>
+ <TELL ,LOOK-AROUND>)
+ (T
+ <FSET ,PRSO ,OPENBIT>
+ <TELL "The " D ,PRSO " is now open." CR>)>)
+ (<FSET? ,PRSO ,OPENBIT>
+ <FCLEAR ,PRSO ,OPENBIT>
+ <TELL "The " D ,PRSO " is now closed." CR>)
+ (T
+ <TELL ,LOOK-AROUND>)>>
+
+<ROUTINE HELLO? (WHO)
+ <COND (<OR <EQUAL? ,WINNER .WHO>
+ <VERB? TELL SAY HELLO INCANT>>
+ <COND (<VERB? TELL SAY INCANT>
+ <SETG P-CONT <>>
+ <SETG QUOTE-FLAG <>>)>
+ <RTRUE>)>>
+
+<ROUTINE FIND-TARGET (TARGET "AUX" P TX L ROOM)
+ <COND (<IN? .TARGET ,HERE> ,HERE)
+ (T
+ <SET P 0>
+ <REPEAT ()
+ <COND (<0? <SET P <NEXTP ,HERE .P>>>
+ <RETURN <>>)
+ (<NOT <L? .P ,LOW-DIRECTION>>
+ <SET TX <GETPT ,HERE .P>>
+ <SET L <PTSIZE .TX>>
+ <COND (<EQUAL? .L ,UEXIT ,CEXIT ,DEXIT>
+ <SET ROOM <GETB .TX 0>>
+ <COND (<IN? .TARGET .ROOM>
+ <RETURN .ROOM>)>)>)>>)>>
+
+<ROUTINE NOW-DARK? ()
+ <SETG LIT <LIT? ,HERE>>
+ <COND (<NOT ,LIT>
+ <TELL "It is now pitch black." CR>)>
+ <RTRUE>>
+
+<ROUTINE DO-WALK (DIR)
+ <SETG P-WALK-DIR .DIR>
+ <PERFORM ,V?WALK .DIR>>
+
+<ROUTINE GLOBAL-IN? (OBJ1 OBJ2 "AUX" TX)
+ <COND (<SET TX <GETPT .OBJ2 ,P?GLOBAL>>
+ <ZMEMQB .OBJ1 .TX <- <PTSIZE .TX> 1>>)>>
+
+<ROUTINE FIND-IN (WHERE WHAT "AUX" W)
+ <SET W <FIRST? .WHERE>>
+ <COND (<NOT .W>
+ <RFALSE>)>
+ <REPEAT ()
+ <COND (<AND <FSET? .W .WHAT>
+ <NOT <EQUAL? .W ,ADVENTURER>>>
+ <RETURN .W>)
+ (<NOT <SET W <NEXT? .W>>>
+ <RETURN <>>)>>>
+
+<ROUTINE HELD? (CAN)
+ <REPEAT ()
+ <SET CAN <LOC .CAN>>
+ <COND (<NOT .CAN>
+ <RFALSE>)
+ (<EQUAL? .CAN ,WINNER>
+ <RTRUE>)>>>
+
+<ROUTINE OTHER-SIDE (DOBJ "AUX" (P 0) TX) ;"finds room beyond given door"
+ <REPEAT ()
+ <COND (<L? <SET P <NEXTP ,HERE .P>> ,LOW-DIRECTION>
+ <RETURN <>>)
+ (T
+ <SET TX <GETPT ,HERE .P>>
+ <COND (<AND <EQUAL? <PTSIZE .TX> ,DEXIT>
+ <EQUAL? <GETB .TX ,DEXITOBJ> .DOBJ>>
+ <RETURN .P>)>)>>>
+
+<ROUTINE HACK-HACK (STR)
+ <TELL .STR D ,PRSO <PICK-ONE ,HO-HUM> CR>>
+
+<GLOBAL HO-HUM
+ <LTABLE
+ 0
+ " doesn't seem to work."
+ " isn't notably helpful."
+ " has no effect.">>
+
+<GLOBAL YUKS
+ <LTABLE
+ 0
+ "A valiant attempt."
+ "You can't be serious."
+ "Not bloody likely."
+ "An interesting idea..."
+ "What a concept!">>
+
+<GLOBAL RIDDLE-TEXT
+"What's tall as a house,|
+ round as a cup,|
+ and all the king's horses|
+ can't draw it up?\"|">
+
+<GLOBAL PERIOD-CR ".|">
+
+<GLOBAL DEMON-GONE "The demon is gone for a moment. ">
+
+<GLOBAL MOVED-IN-DARK "You feel a rush of air as something moved nearby.|">
+
+<GLOBAL STRANGE-VISION
+"As you peer into the sphere, a strange vision takes shape">
+
+<GLOBAL LOOK-AROUND "Look around you.|">
+
+<GLOBAL TOO-DARK "It's too dark to see.">
+
+<GLOBAL ONLY-DARKNESS "You see only darkness.|">
+
+<GLOBAL ALREADY "It already is!|">
+
+<GLOBAL WAND-STOPS-GLOWING
+"The wand stops glowing, but there is no other apparent effect.|">
+
+<GLOBAL CANT-GO "You can't go that way.|">
+
+<GLOBAL PLACE-MAT-VISIBLE "The edge of a place mat is visible under the door.">
+
+<GLOBAL DOESNT-FIT-LOCK "It doesn't fit the lock.|">
+
+<GLOBAL GUE-NAME " the Great Underground Empire">
+
+<GLOBAL REFERRING "It's not clear what you're referring to.|">
+
+<GLOBAL STOPS " comes to a stop.||">
+
+<GLOBAL B-W-C "\"Buzz, whirr, click!">
+
+<GLOBAL WAVES-WAND "The Wizard waves his wand ">
+
+<GLOBAL INVISIBLE-HAND
+", almost as though an invisible hand had tipped it over.|">
+
+<GLOBAL GREEDILY-DEVOURS "The guardian greedily devours "> \ No newline at end of file
diff --git a/mini2.chart b/mini2.chart
new file mode 100644
index 0000000..c872819
--- /dev/null
+++ b/mini2.chart
@@ -0,0 +1,2 @@
+-date- -rel- -size- -pre- -obj- -glo- -voc-
+11/23 2 55690 13518 163 148 501
diff --git a/mini2.errors b/mini2.errors
new file mode 100644
index 0000000..4d9b78d
--- /dev/null
+++ b/mini2.errors
@@ -0,0 +1,25 @@
+Assembling MINI2.ZAP.1 on Monday, November 23, 1987 16:29:54
+Release: 2
+
+ 64 Inserting MINI2FREQ.XZAP.1 (616 bytes)
+ 680 Inserting MINI2DAT.ZAP.1 (12838 bytes)
+ 13518 Inserting MINI2PUR.ZAP.1 (0 bytes)
+ 13518 Inserting MISC.ZAP.1 (1166 bytes)
+ 14684 Inserting PARSER.ZAP.1 (6616 bytes)
+ 21300 Inserting VERBS.ZAP.1 (7467 bytes)
+ 28767 Inserting GLOBALS.ZAP.1 (1396 bytes)
+ 30163 Inserting WIZARD.ZAP.1 (7558 bytes)
+ 37721 Inserting DUNGEON.ZAP.1 (2520 bytes)
+ 40241 Inserting PRINCESS.ZAP.1 (3527 bytes)
+ 43768 Inserting ALICE.ZAP.1 (1920 bytes)
+ 45688 Inserting VOLCANO.ZAP.1 (2678 bytes)
+ 48366 Inserting MINI2STR.ZAP.1 (7324 bytes)
+163 objects.
+148 globals.
+501 word vocabulary.
+
+ 55690 bytes (55K).
+ 13518 bytes of preload.
+ 8349 bytes of impure.
+
+Outputting symbol tables
diff --git a/mini2.record b/mini2.record
new file mode 100644
index 0000000..2d2f1c5
--- /dev/null
+++ b/mini2.record
@@ -0,0 +1,462 @@
+
+Combined ZIL Compiler Ver 2.0 (MIM)
+-----------------------------------
+
+Incremental compilation disabled, because top-level ZIL file changed.
+
+Input file: SS:<ZORK2.MINI2>MINI2.ZIL.10
+Compiling routine: RANDOM-ELEMENT
+Compiling routine: PICK-ONE
+Compiling routine: GO
+Compiling routine: MAIN-LOOP
+Compiling routine: MAIN-LOOP-1
+Compiling routine: PERFORM
+Compiling routine: QUEUE
+Compiling routine: INT
+Compiling routine: CLOCKER
+Compiling routine: PARSER
+Compiling routine: STUFF
+Compiling routine: INBUF-STUFF
+Compiling routine: INBUF-ADD
+Compiling routine: WT?
+Compiling routine: CLAUSE
+Compiling routine: NUMBER?
+Compiling routine: ORPHAN-MERGE
+Compiling routine: ACLAUSE-WIN
+Compiling routine: NCLAUSE-WIN
+Compiling routine: WORD-PRINT
+Compiling routine: UNKNOWN-WORD
+Compiling routine: CANT-USE
+Compiling routine: GET-PREP
+Compiling routine: SYNTAX-CHECK
+Compiling routine: CANT-ORPHAN
+Compiling routine: ORPHAN
+Compiling routine: THING-PRINT
+Compiling routine: BUFFER-PRINT
+Compiling routine: PREP-PRINT
+Compiling routine: CLAUSE-COPY
+Compiling routine: CLAUSE-ADD
+Compiling routine: PREP-FIND
+Compiling routine: SYNTAX-FOUND
+Compiling routine: GWIM
+Compiling routine: SNARF-OBJECTS
+Compiling routine: BUT-MERGE
+Compiling routine: SNARFEM
+Compiling routine: GET-OBJECT
+Compiling routine: WHICH-PRINT
+Compiling routine: GLOBAL-CHECK
+Compiling routine: DO-SL
+Compiling routine: SEARCH-LIST
+Compiling routine: OBJ-FOUND
+Compiling routine: TAKE-CHECK
+Compiling routine: ITAKE-CHECK
+Compiling routine: MANY-CHECK
+Compiling routine: ZMEMQ
+Compiling routine: ZMEMQB
+Compiling routine: LIT?
+Compiling routine: THIS-IT?
+Compiling routine: ACCESSIBLE?
+Compiling routine: META-LOC
+Compiling routine: V-VERBOSE
+Compiling routine: V-BRIEF
+Compiling routine: V-SUPER-BRIEF
+Compiling routine: V-DIAGNOSE
+Compiling routine: V-INVENTORY
+Compiling routine: FINISH
+Compiling routine: V-QUIT
+Compiling routine: V-RESTART
+Compiling routine: DO-YOU-WISH
+Compiling routine: YES?
+Compiling routine: V-RESTORE
+Compiling routine: V-SAVE
+Compiling routine: V-SCORE
+Compiling routine: SCORE-OBJ
+Compiling routine: V-SCRIPT
+Compiling routine: INTERACTION
+Compiling routine: V-UNSCRIPT
+Compiling routine: V-VERSION
+Compiling routine: V-VERIFY
+Compiling routine: V-COMMAND-FILE
+Compiling routine: V-RANDOM
+Compiling routine: V-RECORD
+Compiling routine: V-UNRECORD
+Compiling routine: V-ALARM
+Compiling routine: V-ATTACK
+Compiling routine: V-BLAST
+Compiling routine: PRE-BURN
+Compiling routine: V-BURN
+Compiling routine: V-CLIMB-DOWN
+Compiling routine: V-CLIMB
+Compiling routine: V-CLIMB-ON
+Compiling routine: V-CLOSE
+Compiling routine: V-COMMAND
+Compiling routine: V-COUNT
+Compiling routine: V-CURSES
+Compiling routine: V-CUT
+Compiling routine: V-DEFLATE
+Compiling routine: V-DISEMBARK
+Compiling routine: V-DISENCHANT
+Compiling routine: V-DRINK
+Compiling routine: V-DRINK-FROM
+Compiling routine: PRE-DROP
+Compiling routine: V-DROP
+Compiling routine: V-EAT
+Compiling routine: HIT-SPOT
+Compiling routine: V-ENCHANT
+Compiling routine: REMOVE-CAREFULLY
+Compiling routine: PRE-ENTER
+Compiling routine: V-ENTER
+Compiling routine: V-EXAMINE
+Compiling routine: V-EXIT
+Compiling routine: PRE-FILL
+Compiling routine: V-FILL
+Compiling routine: V-FIND
+Compiling routine: V-FOLLOW
+Compiling routine: PRE-GIVE
+Compiling routine: V-GIVE
+Compiling routine: V-HELLO
+Compiling routine: V-INCANT
+Compiling routine: I-SPELL
+Compiling routine: V-INFLATE
+Compiling routine: V-KICK
+Compiling routine: V-KISS
+Compiling routine: V-KNOCK
+Compiling routine: V-LAMP-OFF
+Compiling routine: V-LAMP-ON
+Compiling routine: V-LAUNCH
+Compiling routine: V-LEAP
+Compiling routine: V-LEAVE
+Compiling routine: V-LISTEN
+Compiling routine: V-LOCK
+Compiling routine: V-LOOK
+Compiling routine: V-LOOK-BEHIND
+Compiling routine: V-LOOK-INSIDE
+Compiling routine: V-LOOK-UNDER
+Compiling routine: V-LOWER
+Compiling routine: V-MELT
+Compiling routine: V-MOVE
+Compiling routine: PRE-MUNG
+Compiling routine: V-MUNG
+Compiling routine: V-OPEN
+Compiling routine: V-PICK
+Compiling routine: V-PLAY
+Compiling routine: V-POUR-ON
+Compiling routine: V-PUSH
+Compiling routine: PRE-PUT
+Compiling routine: V-PUT
+Compiling routine: V-PUT-ON
+Compiling routine: V-PUT-UNDER
+Compiling routine: V-RAISE
+Compiling routine: V-RAPE
+Compiling routine: PRE-READ
+Compiling routine: V-READ
+Compiling routine: V-RUB
+Compiling routine: V-SAY
+Compiling routine: V-SEARCH
+Compiling routine: V-SGIVE
+Compiling routine: V-SHAKE
+Compiling routine: V-SKIP
+Compiling routine: V-SMELL
+Compiling routine: V-STAND
+Compiling routine: V-STRIKE
+Compiling routine: V-SWIM
+Compiling routine: V-SWING
+Compiling routine: PRE-TAKE
+Compiling routine: V-TAKE
+Compiling routine: V-TELL
+Compiling routine: V-THROW
+Compiling routine: V-THROW-OFF
+Compiling routine: V-TIE
+Compiling routine: V-TIE-UP
+Compiling routine: V-TURN
+Compiling routine: V-UNLOCK
+Compiling routine: V-UNTIE
+Compiling routine: V-WAIT
+Compiling routine: V-WALK
+Compiling routine: V-WALK-AROUND
+Compiling routine: V-WALK-TO
+Compiling routine: V-WAVE
+Compiling routine: V-YELL
+Compiling routine: V-ZORK
+Compiling routine: DESCRIBE-ROOM
+Compiling routine: DESCRIBE-OBJECTS
+Compiling routine: DESCRIBE-OBJECT
+Compiling routine: PRINT-CONTENTS
+Compiling routine: PRINT-CONT
+Compiling routine: FIRSTER
+Compiling routine: SEE-INSIDE?
+Compiling routine: JIGS-UP
+Compiling routine: NO-GO-TELL
+Compiling routine: GOTO
+Compiling routine: ITAKE
+Compiling routine: IDROP
+Compiling routine: CCOUNT
+Compiling routine: WEIGHT
+Compiling routine: NOT-HERE-OBJECT-F
+Compiling routine: NOT-HERE-PRINT
+Compiling routine: GROUND-F
+Compiling routine: WATER-F
+Compiling routine: PUDDLE
+Compiling routine: GRUE-F
+Compiling routine: ME-F
+Compiling routine: PATH-OBJECT-F
+Compiling routine: ZORKMID-F
+Compiling routine: STREAM-F
+Compiling routine: CHASM-F
+Compiling routine: BRIDGE-F
+Compiling routine: OPEN-CLOSE
+Compiling routine: HELLO?
+Compiling routine: FIND-TARGET
+Compiling routine: NOW-DARK?
+Compiling routine: DO-WALK
+Compiling routine: GLOBAL-IN?
+Compiling routine: FIND-IN
+Compiling routine: HELD?
+Compiling routine: OTHER-SIDE
+Compiling routine: HACK-HACK
+Compiling routine: WIZARD-F
+ ** Note: Atomic argument to routine assumed constant - MAGIC-ACTOR
+
+Compiling routine: I-WIZARD
+ ** Note: Atomic argument to routine assumed constant - MAGIC-ACTOR
+
+Compiling routine: MAGIC-ACTOR
+Compiling routine: RANDOM-WALK
+Compiling routine: WAND-F
+Compiling routine: I-WAND
+Compiling routine: GUARDED-ROOM-F
+Compiling routine: WIZ-DOOR-F
+Compiling routine: DOOR-KEEPER-F
+Compiling routine: TROPHY-ROOM-F
+Compiling routine: TROPHY-PSEUDO
+Compiling routine: STAND-F
+Compiling routine: PENTAGRAM-F
+Compiling routine: DEMON-F
+Compiling routine: DEMON-LEAVES
+Compiling routine: AQUARIUM-F
+Compiling routine: SERPENT-F
+Compiling routine: DEAD-SERPENT-F
+Compiling routine: MURKY-ROOM-F
+Compiling routine: WIZARD-QUARTERS-F
+Compiling routine: SPHERE-F
+Compiling routine: PALANTIR-LOOK
+Compiling routine: GO&LOOK
+Compiling routine: DEAD-PALANTIR-F
+Compiling routine: GLOBAL-PALANTIR-F
+Compiling routine: LAMP-F
+Compiling routine: I-LANTERN
+Compiling routine: CAROUSEL-ROOM-F
+Compiling routine: VIOLIN-F
+Compiling routine: BILLS-F
+Compiling routine: MENHIR-ROOM-F
+Compiling routine: DESCRIBE-MENHIR
+Compiling routine: GLOBAL-MENHIR-F
+Compiling routine: MENHIR-F
+Compiling routine: COLLAR-F
+Compiling routine: TOMB-PSEUDO
+Compiling routine: GLOBAL-CERBERUS-F
+Compiling routine: CERBERUS-F
+Compiling routine: HEADS-F
+Compiling routine: CRYPT-OBJECT-F
+Compiling routine: ZORK3-F
+Compiling routine: LEDGE-IN-RAVINE-F
+Compiling routine: P-DOOR
+Compiling routine: PCHECK
+Compiling routine: DREARY-ROOM-F
+Compiling routine: PDOOR-F
+Compiling routine: PWINDOW-F
+Compiling routine: PKEYHOLE-F
+Compiling routine: FORMAL-GARDEN-F
+Compiling routine: I-GARDEN
+Compiling routine: UNICORN-F
+Compiling routine: GAZEBO-OBJECT-F
+Compiling routine: NEWSPAPER-F
+Compiling routine: PLACE-MAT-F
+Compiling routine: TEAPOT-F
+Compiling routine: MATCH-F
+Compiling routine: I-MATCH
+Compiling routine: TOPIARY-F
+Compiling routine: I-TOPIARY
+Compiling routine: HEDGES-F
+Compiling routine: DRAGON-F
+Compiling routine: DRAGON-LEAVES
+Compiling routine: I-DRAGON
+Compiling routine: CHEST-F
+Compiling routine: PRINCESS-F
+Compiling routine: I-PRINCESS
+Compiling routine: I-UNICORN
+Compiling routine: ICE-ROOM-F
+Compiling routine: ICE-F
+Compiling routine: RIDDLE-ROOM-F
+Compiling routine: RIDDLE-PSEUDO
+Compiling routine: RIDDLE-DOOR-F
+Compiling routine: BUCKET-CONT
+Compiling routine: BUCKET-F
+Compiling routine: PASS-THE-BUCKET
+Compiling routine: I-BUCKET
+Compiling routine: WELL-F
+Compiling routine: CRACK-PSEUDO
+Compiling routine: ROBOT-F
+Compiling routine: TRIANGULAR-BUTTON-F
+Compiling routine: CAGE-F
+Compiling routine: I-CAGE-DEATH
+Compiling routine: ALICE-HOLE
+Compiling routine: GREEN-CAKE-F
+Compiling routine: CAKE-F
+Compiling routine: CAKE-CRUMBLE
+Compiling routine: POSTS-ROOM-F
+Compiling routine: POOL-F
+Compiling routine: CANDY-F
+Compiling routine: BALLOON-F
+Compiling routine: I-BALLOON
+Compiling routine: BALLOON-BURN
+Compiling routine: PUT-BALLOON
+Compiling routine: RISE-AND-SHINE
+Compiling routine: DECLINE-AND-FALL
+Compiling routine: LKP
+Compiling routine: I-BURNUP
+Compiling routine: BRAIDED-WIRE-F
+Compiling routine: BCONTENTS
+Compiling routine: VOLCANO-BY-LEDGE-F
+Compiling routine: RANDOM-BOOK-F
+Compiling routine: PURPLE-BOOK-F
+Compiling routine: LEDGE-F
+Compiling routine: DUSTY-ROOM-F
+Compiling routine: SAFE-F
+Compiling routine: SAFE-HOLE-F
+Compiling routine: BRICK-F
+Compiling routine: FUSE-F
+Compiling routine: I-FUSE
+Compiling routine: BOMB?
+Compiling routine: I-SAFE
+ ** Note: OBJECT has no properties: GLOBAL-OBJECTS
+Vocabulary: 501
+
+Prepositions: 18
+
+ABOUT AROUND AWAY DOWN FROM OFF OUT TO UP
+ACROSS AT BEHIND FOR IN ON OVER UNDER WITH
+
+Real globals: 141
+
+AGAIN-DIR LOAD-ALLOWED P-SLOCBITS
+AGAIN-LEXV LOOK-AROUND P-SYNTAX
+ALREADY MATCH-COUNT P-TABLE
+ALWAYS-LIT MATOBJ P-VTBL
+B-W-C MENHIR-POSITION P-WALK-DIR
+BALLOON-DOWNS MOVED-IN-DARK P-WON
+BALLOON-FLOATS MUD-FLAG P-XADJ
+BALLOON-INFLATED OLD-HERE P-XADJN
+BALLOON-LOC ONLY-DARKNESS P-XNAM
+BALLOON-TIED OOPS-INBUF PERIOD-CR
+BALLOON-UPS OOPS-TABLE PLACE-MAT-VISIBLE
+BUCKET-TOP-FLAG OTHER-PROPERTIES PLOOK-FLAG
+C-DEMONS P-AADJ PRCOUNT
+C-INTS P-ACLAUSE PRDIRS
+C-TABLE P-ACT PRFOLLOW
+CAGE-SOLVE-FLAG P-ADJ PRINCESS-AWAKE
+CANT-GO P-ADJN PRSA
+CAROUSEL-EXITS P-ADVERB PRSI
+CAROUSEL-ON P-ANAM PRSO
+CERBERUS-LEASHED P-AND PUNLOCK-FLAG
+CLOCK-WAIT P-BUTS QUOTE-FLAG
+DEAD P-CCTBL REFERRING
+DEATHS P-CONT RESERVE-LEXV
+DEMON-GONE P-DIR RESERVE-PTR
+DEMON-HOARD P-END-ON-PREP RIDDLE-TEXT
+DEMON-PAID P-GETFLAGS SECRET-DOOR
+DEMON-THANKS P-GWIMBIT SPELL-HANDLED?
+DESC-OBJECT P-INBUF SPELL-HINTS
+DOESNT-FIT-LOCK P-IT-OBJECT SPELL-NAMES
+DRAGON-ANGER P-ITBL SPELL-STOPS
+DRAGON-ATTACKS P-LEN SPELL-USED
+DUSTY-ROOM-COLLAPSED P-LEXV SPELL-VICTIM
+EVAPORATED P-MATCHLEN SPELL?
+FANTASIES P-MERGE STOPS
+FUMBLE-NUMBER P-MERGED STRANGE-VISION
+FUMBLE-PROB P-MULT TOO-DARK
+GREEDILY-DEVOURS P-NAM TOPIARY-COUNTER
+GUARDIAN-FED P-NCN UNICORN-FRIGHTENED
+GUE-NAME P-NOT-HERE VERBOSITY
+HO-HUM P-NUMBER WAND-ON
+ICE-MELTED P-OCLAUSE WAND-ON-LOC
+INDENTS P-OFLAG WAND-STOPS-GLOWING
+INVISIBLE-HAND P-ONEOBJ WAVES-WAND
+LABEL-REVEALED P-OTBL WINNER
+LAMP-BURNED-OUT P-OVTBL WIZ-DOOR-FLAG
+LAMP-TABLE P-PRSI WIZQDESCS
+LIT P-PRSO YUKS
+
+Objects: 163
+
+ADVENTURER GLOBAL-OBJECTS PTABLE
+ALICE-TABLE GLOBAL-PALANTIR PURPLE-BOOK
+AQUARIUM GLOBAL-WATER PWINDOW
+AQUARIUM-ROOM GOLD-KEY RECEPTACLE
+BALLOON GREAT-CAVERN RED-CAKE
+BALLOON-LABEL GREEN-CAKE RIBBON
+BILLS GROUND RIDDLE-DOOR
+BLUE-BOOK GRUE RIDDLE-ROOM
+BLUE-CAKE GUARDED-ROOM ROBOT
+BOTTOM-ETCHINGS HANDS ROBOT-LABEL
+BRAIDED-WIRE HEADS ROOM-8
+BRICK HEDGES ROOMS
+BRIDGE HOOK RUBY
+BUCKET ICE SAFE
+CAGE ICE-ROOM SAFE-HOLE
+CAGE-OBJECT INSIDE-THE-BARROW SERPENT
+CANDY INTNUM SHALLOW-FORD
+CARD IT STAMP
+CAROUSEL-ROOM KENNEL STAND-1
+CERBERUS KEY STAND-2
+CERBERUS-ROOM KEYHOLE-1 STAND-3
+CHASM KEYHOLE-2 STAND-4
+CHEST LAMP STATUETTE
+CIRCULAR-ROOM LEDGE-IN-RAVINE STONE-BRIDGE
+CLOTH-BAG LETTER-OPENER STREAM
+COIN LIBRARY SWORD
+COLLAR LOCAL-GLOBALS TEA-ROOM
+COOL-ROOM MACHINE-ROOM TEAPOT
+CROWN MATCH TOP-ETCHINGS
+CRYPT ME TOP-OF-WELL
+CRYPT-OBJECT MENHIR TOPIARY
+DARK-TUNNEL MENHIR-ROOM TRIANGULAR-BUTTON
+DEAD-PALANTIR-1 MURKY-ROOM TROPHY-ROOM
+DEAD-PALANTIR-2 NARROW-LEDGE UNICORN
+DEAD-PALANTIR-3 NEWSPAPER VIOLIN
+DEAD-PALANTIR-4 NOT-HERE-OBJECT VOLCANO-BOTTOM
+DEAD-SERPENT ORANGE-CAKE VOLCANO-BY-SMALL-LEDGE
+DEEP-FORD PALANTIR-1 VOLCANO-BY-WIDE-LEDGE
+DEGREE PALANTIR-2 VOLCANO-CORE
+DEMON PALANTIR-3 WALL
+DINGY-CLOSET PALANTIR-4 WAND
+DOOR-KEEPER PATH-OBJECT WANDS
+DRAGON PCRACK WATER
+DRAGON-LAIR PDOOR WELL
+DRAGON-ROOM PEARL-NECKLACE WHITE-BOOK
+DREARY-ROOM PENTAGRAM WIDE-LEDGE
+DUSTY-ROOM PENTAGRAM-ROOM WIZ-DOOR
+EXPLOSION PLACE-MAT WIZARD
+FORMAL-GARDEN POOL WIZARDS-QUARTERS
+FUSE POOL-ROOM WIZARDS-WORKSHOP
+GAZEBO PORTRAIT WORKBENCH
+GAZEBO-OBJECT POSTS ZORK3
+GAZEBO-TABLE POSTS-ROOM ZORKMID
+GLOBAL-CERBERUS PRINCESS
+GLOBAL-MENHIR PSEUDO-OBJECT
+
+Properties: 28
+
+P?ACTION P?DOWN P?LAND P?OUT P?STRENGTH P?VALUE
+P?ADJECTIVE P?EAST P?LDESC P?PSEUDO P?SW P?VTYPE
+P?CAPACITY P?FDESC P?NE P?SE P?SYNONYM P?WEST
+P?CONTFCN P?GLOBAL P?NORTH P?SIZE P?TEXT
+P?DESCFCN P?IN P?NW P?SOUTH P?UP
+
+Flags: 28
+
+ACTORBIT DRINKBIT NDESCBIT READBIT TAKEBIT TRYTAKEBIT
+BURNBIT FLAMEBIT NONLANDBIT RLANDBIT TOOLBIT VEHBIT
+CLIMBBIT FOODBIT NWALLBIT SACREDBIT TOUCHBIT WEAPONBIT
+CONTBIT INVISIBLE ONBIT SEARCHBIT TRANSBIT
+DOORBIT LIGHTBIT OPENBIT SURFACEBIT TREASUREBIT
diff --git a/mini2.serial b/mini2.serial
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/mini2.serial
@@ -0,0 +1 @@
+1
diff --git a/mini2.zap b/mini2.zap
new file mode 100644
index 0000000..5599966
--- /dev/null
+++ b/mini2.zap
@@ -0,0 +1,50 @@
+; Low core locations
+%ZVERSION:: .BYTE 0
+ .BYTE FLAGS
+%ZORKID:: ZORKID
+%ENDLOD:: ENDLOD
+%START:: START
+%VOCAB:: VOCAB
+%OBJECT:: OBJECT
+%GLOBAL:: GLOBAL
+%PURBOT:: IMPURE
+%FLAGS:: .WORD 0
+%SERIAL:: .WORD 0
+%SERI1:: .WORD 0
+%SERI2:: .WORD 0
+%FWORDS:: WORDS
+%PLENTH:: .WORD 0
+%PCHKSM:: .WORD 0
+%INTWRD:: .WORD 0
+%SCRWRD:: .WORD 0
+ .WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+.WORD 0
+ .INSERT "SS:<ZORK2.MINI2>MINI2FREQ" ;Frequent word table
+ .INSERT "SS:<ZORK2.MINI2>MINI2DAT" ; Data file
+ .INSERT "SS:<ZORK2.MINI2>MINI2PUR"
+ .INSERT "SS:<ZORK2.MINI2>MISC"
+ .INSERT "SS:<ZORK2.MINI2>PARSER"
+ .INSERT "SS:<ZORK2.MINI2>VERBS"
+ .INSERT "SS:<ZORK2.MINI2>GLOBALS"
+ .INSERT "SS:<ZORK2.MINI2>WIZARD"
+ .INSERT "SS:<ZORK2.MINI2>DUNGEON"
+ .INSERT "SS:<ZORK2.MINI2>PRINCESS"
+ .INSERT "SS:<ZORK2.MINI2>ALICE"
+ .INSERT "SS:<ZORK2.MINI2>VOLCANO"
+
+ .INSERT "SS:<ZORK2.MINI2>MINI2STR"
+
+ .END
diff --git a/mini2.zil b/mini2.zil
new file mode 100644
index 0000000..ad3311e
--- /dev/null
+++ b/mini2.zil
@@ -0,0 +1,35 @@
+"MINI2 for
+ Mini-Zork II: The Wizard of Frobozz
+ (c) Copyright 1988 Infocom, Inc. All Rights Reserved."
+
+ON!-INITIAL
+OFF!-INITIAL
+
+<SET REDEFINE T>
+
+<OR <GASSIGNED? ZILCH>
+ <SETG WBREAKS <STRING !\" !,WBREAKS>>>
+
+<PRINC "Mini-Zork II
+">
+
+<COND (<GASSIGNED? PREDGEN>
+ <ID 0>)>
+
+<SETG COMPACT-SYNTAXES? T>
+
+<FREQUENT-WORDS?>
+
+<INSERT-FILE "MISC" T>
+<INSERT-FILE "PARSER" T>
+<INSERT-FILE "SYNTAX" T>
+<INSERT-FILE "VERBS" T>
+<INSERT-FILE "GLOBALS" T>
+<INSERT-FILE "WIZARD" T>
+<INSERT-FILE "DUNGEON" T>
+<INSERT-FILE "PRINCESS" T>
+<INSERT-FILE "ALICE" T>
+<INSERT-FILE "VOLCANO" T>
+
+<PROPDEF SIZE 5>
+<PROPDEF CAPACITY 0> \ No newline at end of file
diff --git a/mini2.zip b/mini2.zip
new file mode 100644
index 0000000..354ccbb
--- /dev/null
+++ b/mini2.zip
Binary files differ
diff --git a/mini2dat.zap b/mini2dat.zap
new file mode 100644
index 0000000..10df2f4
--- /dev/null
+++ b/mini2dat.zap
@@ -0,0 +1,8455 @@
+
+
+; TOP LEVEL DEFINITIONS
+
+ TRUE-VALUE=1
+ FALSE-VALUE=0
+ FATAL-VALUE=2
+
+ O?ANY=1
+
+ PS?OBJECT=128
+ PS?VERB=64
+ PS?ADJECTIVE=32
+ PS?DIRECTION=16
+ PS?PREPOSITION=8
+ PS?BUZZ-WORD=4
+
+ P1?NONE=0
+ P1?OBJECT=0
+ P1?VERB=1
+ P1?ADJECTIVE=2
+ P1?DIRECTION=3
+
+
+; OBJECT FLAGS ARE DEFINED HERE
+
+
+ NWALLBIT=4
+ FX?NWALLBIT=2048
+
+ NONLANDBIT=5
+ FX?NONLANDBIT=1024
+
+ TREASUREBIT=6
+ FX?TREASUREBIT=512
+
+ SACREDBIT=7
+ FX?SACREDBIT=256
+
+ NDESCBIT=8
+ FX?NDESCBIT=128
+
+ TRANSBIT=9
+ FX?TRANSBIT=64
+
+ SEARCHBIT=10
+ FX?SEARCHBIT=32
+
+ OPENBIT=11
+ FX?OPENBIT=16
+
+ TRYTAKEBIT=12
+ FX?TRYTAKEBIT=8
+
+ SURFACEBIT=13
+ FX?SURFACEBIT=4
+
+ TOUCHBIT=14
+ FX?TOUCHBIT=2
+
+ INVISIBLE=15
+ FX?INVISIBLE=1
+
+ READBIT=16
+ FX?READBIT=32768
+
+ TAKEBIT=17
+ FX?TAKEBIT=16384
+
+ LIGHTBIT=18
+ FX?LIGHTBIT=8192
+
+ CONTBIT=19
+ FX?CONTBIT=4096
+
+ ONBIT=20
+ FX?ONBIT=2048
+
+ FOODBIT=21
+ FX?FOODBIT=1024
+
+ DRINKBIT=22
+ FX?DRINKBIT=512
+
+ WEAPONBIT=23
+ FX?WEAPONBIT=256
+
+ DOORBIT=24
+ FX?DOORBIT=128
+
+ VEHBIT=25
+ FX?VEHBIT=64
+
+ CLIMBBIT=26
+ FX?CLIMBBIT=32
+
+ RLANDBIT=27
+ FX?RLANDBIT=16
+
+ FLAMEBIT=28
+ FX?FLAMEBIT=8
+
+ BURNBIT=29
+ FX?BURNBIT=4
+
+ TOOLBIT=30
+ FX?TOOLBIT=2
+
+ ACTORBIT=31
+ FX?ACTORBIT=1
+
+; ACTION IDENTIFIERS ARE ASSIGNED HERE
+
+ V?VERBOSE=0
+ V?BRIEF=1
+ V?SUPER-BRIEF=2
+ V?DIAGNOSE=3
+ V?INVENTORY=4
+ V?QUIT=5
+ V?RESTART=6
+ V?RESTORE=7
+ V?SAVE=8
+ V?SCORE=9
+ V?SCRIPT=10
+ V?UNSCRIPT=11
+ V?VERSION=12
+ V?VERIFY=13
+ V?RANDOM=14
+ V?COMMAND-FILE=15
+ V?RECORD=16
+ V?UNRECORD=17
+ V?ATTACK=18
+ V?BLAST=19
+ V?LAMP-OFF=20
+ V?INFLATE=21
+ V?BURN=22
+ V?CLIMB=23
+ V?CLIMB-DOWN=24
+ V?ENTER=25
+ V?CLIMB-ON=26
+ V?CLOSE=27
+ V?COMMAND=28
+ V?COUNT=29
+ V?WALK-AROUND=30
+ V?CUT=31
+ V?CURSES=32
+ V?DEFLATE=33
+ V?MUNG=34
+ V?DISEMBARK=35
+ V?DISENCHANT=36
+ V?DRINK=37
+ V?DRINK-FROM=38
+ V?DROP=39
+ V?PUT=40
+ V?PUT-ON=41
+ V?EAT=42
+ V?ENCHANT=43
+ V?EXAMINE=44
+ V?LOOK-INSIDE=45
+ V?EXIT=46
+ V?FILL=47
+ V?FIND=48
+ V?FOLLOW=49
+ V?GIVE=50
+ V?SGIVE=51
+ V?HELLO=52
+ V?INCANT=53
+ V?LEAP=54
+ V?KICK=55
+ V?KISS=56
+ V?KNOCK=57
+ V?LAUNCH=58
+ V?LEAVE=59
+ V?LAMP-ON=60
+ V?LISTEN=61
+ V?LOCK=62
+ V?LOOK=63
+ V?LOOK-UNDER=64
+ V?LOOK-BEHIND=65
+ V?LOWER=66
+ V?MELT=67
+ V?MOVE=68
+ V?TURN=69
+ V?OPEN=70
+ V?PICK=71
+ V?TAKE=72
+ V?PLAY=73
+ V?POUR-ON=74
+ V?PUSH=75
+ V?PUT-UNDER=76
+ V?RAISE=77
+ V?RAPE=78
+ V?READ=79
+ V?RUB=80
+ V?SAY=81
+ V?SEARCH=82
+ V?SHAKE=83
+ V?SKIP=84
+ V?SMELL=85
+ V?STAND=86
+ V?STRIKE=87
+ V?SWIM=88
+ V?SWING=89
+ V?TELL=90
+ V?THROW=91
+ V?THROW-OFF=92
+ V?TIE=93
+ V?TIE-UP=94
+ V?UNLOCK=95
+ V?UNTIE=96
+ V?WAIT=97
+ V?ALARM=98
+ V?WALK=99
+ V?WALK-TO=100
+ V?WAVE=101
+ V?YELL=102
+ V?ZORK=103
+
+; PROPERTIES ARE DEFINED HERE
+
+ P?NORTH=31
+ P?EAST=30
+ P?WEST=29
+ P?SOUTH=28
+ P?NE=27
+ P?NW=26
+ P?SE=25
+ P?SW=24
+ P?UP=23
+ P?DOWN=22
+ P?IN=21
+ P?OUT=20
+ P?LAND=19
+ P?SYNONYM=18
+ P?ACTION=17
+ P?LDESC=16
+ P?SIZE=15
+ P?ADJECTIVE=14
+ P?STRENGTH=13
+ P?VALUE=12
+ P?GLOBAL=11
+ P?PSEUDO=10
+ P?TEXT=9
+ P?CAPACITY=8
+ P?FDESC=7
+ P?VTYPE=6
+ P?CONTFCN=5
+ P?DESCFCN=4
+
+; ADJECTIVES ARE DEFINED HERE
+
+ A?LURKING=255
+ A?DARK=254
+ A?DAMP=253
+ A?SMOKEY=252
+ A?SCORCHED=251
+ A?NARROW=250
+ A?BARE=249
+ A?COLD=248
+ A?DEEP=247
+ A?STONE=246
+ A?EAST=245
+ A?EASTERN=244
+ A?WEST=243
+ A?WESTERN=242
+ A?SOUTH=241
+ A?SOUTHE=240
+ A?NORTH=239
+ A?NORTHE=238
+ A?LITTLE=237
+ A?FROBOZZ=236
+ A?OLD=235
+ A?MAGIC=234
+ A?BATTERED=233
+ A?NASTY=232
+ A?WORN=231
+ A?USED=230
+ A?WORK=229
+ A?WIZARD=228
+ A?CRYSTAL=227
+ A?RUBY=226
+ A?SAPPHIRE=225
+ A?DIAMOND=224
+ A?OBSIDIAN=223
+ A?BLACK=222
+ A?STRANGE=221
+ A?GREAT=220
+ A?HUGE=219
+ A?BABY=218
+ A?SEA=217
+ A?DEAD=216
+ A?RED=215
+ A?BLUE=214
+ A?WHITE=213
+ A?CLEAR=212
+ A?BRASS=211
+ A?ELVISH=210
+ A?ANTIQUE=209
+ A?FANCY=208
+ A?NEAT=207
+ A?ZORKMID=206
+ A?HEAVY=205
+ A?ENORMOUS=204
+ A?GIANT=203
+ A?DOG=202
+ A?THREE=201
+ A?HEADED=200
+ A?MARBLE=199
+ A?WOODEN=198
+ A?OAK=197
+ A?BARRED=196
+ A?DUSTY=195
+ A?IRON=194
+ A?RUSTY=193
+ A?BEAUTIFUL=192
+ A?DELICATE=191
+ A?GOLD=190
+ A?VELVET=189
+ A?SATIN=188
+ A?NEWS=187
+ A?NEWSPAPER=186
+ A?PLACE=185
+ A?CHINA=184
+ A?TEA=183
+ A?LETTER=182
+ A?YOUNG=181
+ A?ICY=180
+ A?PEARL=179
+ A?GREEN=178
+ A?TRIANGULAR=177
+ A?STEEL=176
+ A?SOLID=175
+ A?RARE=174
+ A?FLATHEAD=173
+ A?OBLONG=172
+ A?FROSTED=171
+ A?ORANGE=170
+ A?CANDIED=169
+ A?MOBY=168
+ A?WICKER=167
+ A?BRAIDED=166
+ A?CLOTH=165
+ A?METAL=164
+ A?PRICELESS=163
+ A?PURPLE=162
+ A?SMALL=161
+ A?GAUDY=160
+ A?SQUARE=159
+ A?CLAY=158
+ A?THIN=157
+
+; BUZZ WORDS ARE DEFINED HERE
+
+ B?A=255
+ B?AN=254
+ B?THE=253
+ B?IS=252
+ B?AND=251
+ B?OF=250
+ B?THEN=249
+ B?ALL=248
+ B?ONE=247
+ B?BUT=246
+ B?EXCEPT=245
+ B?PERIOD=244
+ B?COMMA=243
+ B?QUOTE=242
+ B?YES=241
+ B?NO=240
+ B?Y=239
+ B?HERE=238
+ B?FEEBLE=237
+ B?FUMBLE=236
+ B?FREEZE=235
+ B?FALL=234
+ B?FRY=233
+ B?FLUORESCE=232
+ B?FERMENT=231
+ B?FLOAT=230
+ B?FIREPROOF=229
+ B?FENCE=228
+ B?FUDGE=227
+ B?FANTASIZE=226
+ B?AGAIN=225
+ B?G=224
+ B?OOPS=223
+
+; PREPOSITIONS ARE DEFINED HERE
+
+ PR?WITH=255
+ PR?OUT=254
+ PR?UP=253
+ PR?DOWN=252
+ PR?IN=251
+ PR?ON=250
+ PR?FROM=249
+ PR?TO=248
+ PR?OVER=247
+ PR?ACROSS=246
+ PR?OFF=245
+ PR?AT=244
+ PR?AROUND=243
+ PR?UNDER=242
+ PR?BEHIND=241
+ PR?FOR=240
+ PR?ABOUT=239
+ PR?AWAY=238
+
+; DIRECTIONS ARE DEFINED HERE
+
+
+; ACTIONS ARE DEFINED HERE
+
+ ACT?KISS=255
+ ACT?SKIP=254
+ ACT?INFLAT=253
+ ACT?PULL=252
+ ACT?PUT=251
+ ACT?RAPE=250
+ ACT?VERBOSE=249
+ ACT?WALK=248
+ ACT?QUIT=247
+ ACT?FIND=246
+ ACT?DESTROY=245
+ ACT?UNLOCK=244
+ ACT?READ=243
+ ACT?SAY=242
+ ACT?JUMP=241
+ ACT?POUR=240
+ ACT?WAIT=239
+ ACT?TAKE=238
+ ACT?COUNT=237
+ ACT?RAISE=236
+ ACT?FOLLOW=235
+ ACT?VERSION=234
+ ACT?#UNRECORD=233
+ ACT?LIGHT=232
+ ACT?MOVE=231
+ ACT?PLAY=230
+ ACT?OPEN=229
+ ACT?#COMMAND=228
+ ACT?BLOW=227
+ ACT?KNOCK=226
+ ACT?PICK=225
+ ACT?DEFLATE=224
+ ACT?#RANDOM=223
+ ACT?STAND=222
+ ACT?ENCHANT=221
+ ACT?LISTEN=220
+ ACT?TIE=219
+ ACT?SAVE=218
+ ACT?TELL=217
+ ACT?THROW=216
+ ACT?ZORK=215
+ ACT?LOWER=214
+ ACT?COMMAND=213
+ ACT?TALK=212
+ ACT?SHAKE=211
+ ACT?INVENTORY=210
+ ACT?ATTACK=209
+ ACT?ENTER=208
+ ACT?SEARCH=207
+ ACT?DISEMBARK=206
+ ACT?SWIM=205
+ ACT?UNTIE=204
+ ACT?CUT=203
+ ACT?UNSCRIPT=202
+ ACT?MELT=201
+ ACT?PUSH=200
+ ACT?RUB=199
+ ACT?SUPER=198
+ ACT?INCANT=197
+ ACT?SCORE=196
+ ACT?LOOK=195
+ ACT?DROP=194
+ ACT?LEAVE=193
+ ACT?CURSE=192
+ ACT?SCRIPT=191
+ ACT?$VERIFY=190
+ ACT?EXTINGUISH=189
+ ACT?SWING=188
+ ACT?RESTART=187
+ ACT?POKE=186
+ ACT?SMELL=185
+ ACT?BRIEF=184
+ ACT?DIAGNOSE=183
+ ACT?GIVE=182
+ ACT?WAKE=181
+ ACT?DRINK=180
+ ACT?YELL=179
+ ACT?LOCK=178
+ ACT?BURN=177
+ ACT?KICK=176
+ ACT?TURN=175
+ ACT?#RECORD=174
+ ACT?CROSS=173
+ ACT?RESTORE=172
+ ACT?CLOSE=171
+ ACT?STRIKE=170
+ ACT?SLIDE=169
+ ACT?WAVE=168
+ ACT?EXIT=167
+ ACT?EXAMINE=166
+ ACT?DISENCHANT=165
+ ACT?EAT=164
+ ACT?FILL=163
+ ACT?CLIMB=162
+ ACT?LAUNCH=161
+ ACT?HELLO=160
+
+; USER DEFINED CONSTANTS ARE INITIALIZED HERE
+
+ SOG=16
+ SIR=32
+ DEXITSTR=1
+ XEQUAL?=4
+ S-FANTASIZE=9
+ P-ITBLLEN=9
+ P-SYNLEN=8
+ P-SRCTOP=0
+ C-INTLEN=6
+ S-FERMENT=5
+ O-START=1
+ DEXITOBJ=1
+ P-P1OFF=5
+ O-PTR=0
+ S-FEEBLE=1
+ O-LENGTH=2
+ C-TABLELEN=180
+ P-NC2=8
+ P-NC1=6
+ S-FLOAT=6
+ P-WORDLEN=4
+ SERIAL=0
+ P-VERBN=1
+ P-P1BITS=3
+ FEXIT=3
+ S-FENCE=8
+ CC-SEPTR=1
+ P-SPREP1=0
+ CC-SBPTR=0
+ P-PREP1=2
+ M-BEG=1
+ XDIV=3
+ M-FATAL=2
+ XGRTR?=5
+ NEXITSTR=0
+ SPELLS=9
+ NEXIT=2
+ P-SLOC2=6
+ SC=64
+ P-PREP1N=3
+ P-PSOFF=4
+ XLESS?=6
+ P-VERB=0
+ M-HANDLED=1
+ M-ENTER=2
+ DEXIT=5
+ CC-DEPTR=3
+ SHAVE=2
+ P-SRCBOT=2
+ P-SYNLEN-1=4
+ P-SYNLEN-0=2
+ M-OBJDESC=5
+ CC-DBPTR=2
+ P-SYNLEN-2=7
+ SMANY=4
+ STAKE=8
+ P-SPREP2=4
+ XSUB=1
+ XADD=0
+ S-FALL=4
+ CEXIT=4
+ P-LEXSTART=1
+ TREASURES-MAX=10
+ M-LOOK=3
+ UEXIT=1
+ S-FIREPROOF=7
+ O-END=3
+ P-LEXELEN=2
+ P-LEXWORDS=1
+ P-ALL=1
+ XMUL=2
+ P-SFWIM1=2
+ P-INHIBIT=4
+ CEXITFLAG=1
+ M-FLASH=4
+ M-OBJECT=0
+ FEXITFCN=0
+ M-NOT-HANDLED=0
+ CEXITSTR=1
+ P-SRCALL=1
+ S-FUMBLE=2
+ P-SLOC1=3
+ M-END=6
+ P-PREP2=4
+ LOW-DIRECTION=19
+ C-TICK=1
+ P-NC2L=9
+ P-NC1L=7
+ S-FREEZE=3
+ P-ONE=2
+ P-SACTION=1
+ P-PREP2N=5
+ P-SFWIM2=5
+ C-ENABLED?=0
+ REXIT=0
+ SH=128
+ C-RTN=2
+
+; THE GLOBAL VARIABLES ARE ALL LOCATED HERE
+
+GLOBAL::.TABLE
+ .GVAR HERE=0
+ .GVAR SCORE=0
+ .GVAR MOVES=0
+ .GVAR P-END-ON-PREP=0
+ .GVAR B-W-C=STR?47,STRING
+ .GVAR SPELL-VICTIM=0
+ .GVAR P-BUTS=T?1402,TABLE
+ .GVAR EVAPORATED=0
+ .GVAR PERIOD-CR=STR?32,STRING
+ .GVAR DUSTY-ROOM-COLLAPSED=0
+ .GVAR P-DIR=0
+ .GVAR P-ACLAUSE=0
+ .GVAR LABEL-REVEALED=0
+ .GVAR P-SLOCBITS=0
+ .GVAR P-MATCHLEN=0
+ .GVAR P-ADVERB=0
+ .GVAR PUNLOCK-FLAG=0
+ .GVAR P-MULT=0
+ .GVAR CLOCK-WAIT=0
+ .GVAR P-OTBL=T?902,TABLE
+ .GVAR GREEDILY-DEVOURS=STR?50,STRING
+ .GVAR WIZQDESCS=T?606,TABLE
+ .GVAR P-NAM=0
+ .GVAR ALWAYS-LIT=0
+ .GVAR C-TABLE=T?101,TABLE
+ .GVAR P-XNAM=0
+ .GVAR OOPS-TABLE=T?702,TABLE
+ .GVAR P-WALK-DIR=0
+ .GVAR P-ANAM=0
+ .GVAR OTHER-PROPERTIES=STR?222,STRING
+ .GVAR MUD-FLAG=0
+ .GVAR P-CONT=0
+ .GVAR P-PRSI=T?1302,TABLE
+ .GVAR PRCOUNT=0
+ .GVAR AGAIN-LEXV=T?302,TABLE
+ .GVAR VERBOSITY=1
+ .GVAR SPELL-USED=0
+ .GVAR REFERRING=STR?45,STRING
+ .GVAR MENHIR-POSITION=0
+ .GVAR FUMBLE-NUMBER=7
+ .GVAR CANT-GO=STR?41,STRING
+ .GVAR DESC-OBJECT=0
+ .GVAR LIT=0
+ .GVAR DOESNT-FIT-LOCK=STR?43,STRING
+ .GVAR P-VTBL=T?1002,TABLE
+ .GVAR P-XADJN=0
+ .GVAR SPELL-NAMES=T?106,TABLE
+ .GVAR RESERVE-LEXV=T?402,TABLE
+ .GVAR LAMP-TABLE=T?107,TABLE
+ .GVAR P-ACT=0
+ .GVAR P-ADJ=0
+ .GVAR P-LEN=0
+ .GVAR CAROUSEL-EXITS=T?207,TABLE
+ .GVAR C-INTS=180
+ .GVAR P-CCTBL=T?102,TABLE
+ .GVAR P-LEXV=T?202,TABLE
+ .GVAR LOAD-ALLOWED=100
+ .GVAR STOPS=STR?46,STRING
+ .GVAR TOPIARY-COUNTER=0
+ .GVAR BALLOON-TIED=0
+ .GVAR WAND-ON-LOC=0
+ .GVAR TOO-DARK=STR?37,STRING
+ .GVAR ONLY-DARKNESS=STR?38,STRING
+ .GVAR BALLOON-INFLATED=0
+ .GVAR PRSO=0
+ .GVAR BUCKET-TOP-FLAG=0
+ .GVAR GUE-NAME=STR?44,STRING
+ .GVAR P-MERGED=0
+ .GVAR PRFOLLOW=0
+ .GVAR P-GWIMBIT=0
+ .GVAR C-DEMONS=180
+ .GVAR PLOOK-FLAG=0
+ .GVAR MATCH-COUNT=6
+ .GVAR P-OCLAUSE=T?1602,TABLE
+ .GVAR PRINCESS-AWAKE=0
+ .GVAR P-SYNTAX=0
+ .GVAR P-XADJ=0
+ .GVAR P-AADJ=0
+ .GVAR PRSA=0
+ .GVAR ICE-MELTED=0
+ .GVAR PRDIRS=T?208,TABLE
+ .GVAR P-PRSO=T?1202,TABLE
+ .GVAR MOVED-IN-DARK=STR?34,STRING
+ .GVAR SPELL?=0
+ .GVAR P-AND=0
+ .GVAR UNICORN-FRIGHTENED=0
+ .GVAR P-ONEOBJ=0
+ .GVAR DEMON-PAID=0
+ .GVAR P-INBUF=T?502,TABLE
+ .GVAR DEAD=0
+ .GVAR P-MERGE=T?1502,TABLE
+ .GVAR WAND-STOPS-GLOWING=STR?40,STRING
+ .GVAR DEATHS=0
+ .GVAR P-WON=0
+ .GVAR WIZ-DOOR-FLAG=0
+ .GVAR SPELL-STOPS=T?306,TABLE
+ .GVAR P-OVTBL=T?1102,TABLE
+ .GVAR SPELL-HANDLED?=0
+ .GVAR LOOK-AROUND=STR?36,STRING
+ .GVAR DRAGON-ATTACKS=T?108,TABLE
+ .GVAR P-ITBL=T?802,TABLE
+ .GVAR QUOTE-FLAG=0
+ .GVAR RIDDLE-TEXT=STR?31,STRING
+ .GVAR P-TABLE=0
+ .GVAR CERBERUS-LEASHED=0
+ .GVAR P-GETFLAGS=0
+ .GVAR ALREADY=STR?39,STRING
+ .GVAR DRAGON-ANGER=0
+ .GVAR YUKS=T?205,TABLE
+ .GVAR OOPS-INBUF=T?602,TABLE
+ .GVAR INDENTS=T?104,TABLE
+ .GVAR FUMBLE-PROB=8
+ .GVAR P-NUMBER=0
+ .GVAR P-OFLAG=0
+ .GVAR STRANGE-VISION=STR?35,STRING
+ .GVAR WINNER=0
+ .GVAR BALLOON-UPS=T?110,TABLE
+ .GVAR P-ADJN=0
+ .GVAR LAMP-BURNED-OUT=0
+ .GVAR AGAIN-DIR=0
+ .GVAR PLACE-MAT-VISIBLE=STR?42,STRING
+ .GVAR BALLOON-LOC=VOLCANO-BOTTOM
+ .GVAR DEMON-THANKS=T?506,TABLE
+ .GVAR FANTASIES=T?406,TABLE
+ .GVAR MATOBJ=0
+ .GVAR CAGE-SOLVE-FLAG=0
+ .GVAR DEMON-GONE=STR?33,STRING
+ .GVAR CAROUSEL-ON=1
+ .GVAR WAND-ON=0
+ .GVAR GUARDIAN-FED=0
+ .GVAR P-IT-OBJECT=0
+ .GVAR HO-HUM=T?105,TABLE
+ .GVAR WAVES-WAND=STR?48,STRING
+ .GVAR OLD-HERE=DRAGON-ROOM
+ .GVAR DEMON-HOARD=0
+ .GVAR BALLOON-DOWNS=T?310,TABLE
+ .GVAR PRSI=0
+ .GVAR RESERVE-PTR=0
+ .GVAR BALLOON-FLOATS=T?210,TABLE
+ .GVAR SPELL-HINTS=T?206,TABLE
+ .GVAR INVISIBLE-HAND=STR?49,STRING
+ .GVAR P-NOT-HERE=0
+ .GVAR P-NCN=0
+ .GVAR SECRET-DOOR=0
+ .GVAR PREPOSITIONS=PRTBL,TABLE
+ .GVAR ACTIONS=ATBL,TABLE
+ .GVAR PREACTIONS=PATBL,TABLE
+ .GVAR VERBS=VTBL,TABLE
+ .ENDT
+
+GLOEND::
+
+
+; PROPERTY DEFAULTS AND OBJECTS ARE DEFINED HERE
+
+OBJECT::.TABLE
+ 0 ;()
+ 0 ;()
+ 0 ;()
+ 0 ;(P?DESCFCN)
+ 0 ;(P?CONTFCN)
+ 0 ;(P?VTYPE)
+ 0 ;(P?FDESC)
+ 0 ;(P?CAPACITY)
+ 0 ;(P?TEXT)
+ 0 ;(P?PSEUDO)
+ 0 ;(P?GLOBAL)
+ 0 ;(P?VALUE)
+ 0 ;(P?STRENGTH)
+ 0 ;(P?ADJECTIVE)
+ 5 ;(P?SIZE)
+ 0 ;(P?LDESC)
+ 0 ;(P?ACTION)
+ 0 ;(P?SYNONYM)
+ 0 ;(P?LAND)
+ 0 ;(P?OUT)
+ 0 ;(P?IN)
+ 0 ;(P?DOWN)
+ 0 ;(P?UP)
+ 0 ;(P?SW)
+ 0 ;(P?SE)
+ 0 ;(P?NW)
+ 0 ;(P?NE)
+ 0 ;(P?SOUTH)
+ 0 ;(P?WEST)
+ 0 ;(P?EAST)
+ 0 ;(P?NORTH)
+ .OBJECT STATUETTE,FX?TREASUREBIT,FX?TAKEBIT,CHEST,0,0,T?STATUETTE
+ .OBJECT MURKY-ROOM,0,FX?ONBIT+FX?RLANDBIT,ROOMS,AQUARIUM-ROOM,PALANTIR-3,T?MURKY-ROOM
+ .OBJECT TRIANGULAR-BUTTON,FX?NDESCBIT,0,MACHINE-ROOM,0,0,T?TRIANGULAR-BUTTON
+ .OBJECT GLOBAL-WATER,0,FX?DRINKBIT,LOCAL-GLOBALS,PSEUDO-OBJECT,0,T?GLOBAL-WATER
+ .OBJECT RIDDLE-DOOR,FX?NDESCBIT,FX?CONTBIT+FX?DOORBIT,RIDDLE-ROOM,0,0,T?RIDDLE-DOOR
+ .OBJECT BOTTOM-ETCHINGS,FX?NDESCBIT,FX?READBIT,CIRCULAR-ROOM,0,0,T?BOTTOM-ETCHINGS
+ .OBJECT WELL,FX?NDESCBIT,0,LOCAL-GLOBALS,GAZEBO-OBJECT,0,T?WELL
+ .OBJECT HANDS,FX?NDESCBIT,FX?TOOLBIT,GLOBAL-OBJECTS,ZORKMID,0,T?HANDS
+ .OBJECT CAGE,FX?NWALLBIT,FX?ONBIT+FX?RLANDBIT,ROOMS,DINGY-CLOSET,0,T?CAGE
+ .OBJECT INSIDE-THE-BARROW,0,FX?ONBIT+FX?RLANDBIT,ROOMS,DEAD-PALANTIR-4,LAMP,T?INSIDE-THE-BARROW
+ .OBJECT KEY,FX?NDESCBIT,FX?TOOLBIT+FX?TAKEBIT,KEYHOLE-2,0,0,T?KEY
+ .OBJECT NARROW-LEDGE,FX?NONLANDBIT,FX?RLANDBIT,ROOMS,VOLCANO-BY-WIDE-LEDGE,COIN,T?NARROW-LEDGE
+ .OBJECT WIZARD,FX?OPENBIT,FX?CONTBIT+FX?ACTORBIT,0,0,WAND,T?WIZARD
+ .OBJECT DEAD-SERPENT,0,FX?TAKEBIT,0,0,0,T?DEAD-SERPENT
+ .OBJECT WAND,FX?TRYTAKEBIT+FX?NDESCBIT,FX?TAKEBIT,WIZARD,0,0,T?WAND
+ .OBJECT MATCH,0,FX?TAKEBIT+FX?READBIT,GAZEBO-TABLE,LETTER-OPENER,0,T?MATCH
+ .OBJECT ME,0,FX?ACTORBIT,GLOBAL-OBJECTS,GRUE,0,T?ME
+ .OBJECT UNICORN,FX?OPENBIT+FX?TRYTAKEBIT,FX?CONTBIT+FX?ACTORBIT,0,0,RIBBON,T?UNICORN
+ .OBJECT PALANTIR-1,FX?TRYTAKEBIT+FX?TRANSBIT,FX?TAKEBIT,DINGY-CLOSET,0,0,T?PALANTIR-1
+ .OBJECT HOOK,0,0,LOCAL-GLOBALS,WELL,0,T?HOOK
+ .OBJECT PALANTIR-3,FX?TRANSBIT+FX?NDESCBIT,FX?TAKEBIT,MURKY-ROOM,0,0,T?PALANTIR-3
+ .OBJECT SERPENT,0,FX?ACTORBIT,AQUARIUM,0,0,T?SERPENT
+ .OBJECT PALANTIR-2,FX?TRANSBIT,FX?TAKEBIT,DREARY-ROOM,0,0,T?PALANTIR-2
+ .OBJECT ICE-ROOM,0,FX?RLANDBIT,ROOMS,COOL-ROOM,ICE,T?ICE-ROOM
+ .OBJECT GAZEBO-OBJECT,FX?NDESCBIT,0,LOCAL-GLOBALS,PWINDOW,0,T?GAZEBO-OBJECT
+ .OBJECT PALANTIR-4,FX?TRANSBIT,FX?TAKEBIT,STAND-4,0,0,T?PALANTIR-4
+ .OBJECT ROOMS,0,0,0,0,DUSTY-ROOM,T?ROOMS
+ .OBJECT POOL,0,0,POOL-ROOM,0,0,T?POOL
+ .OBJECT ADVENTURER,FX?SACREDBIT+FX?INVISIBLE+FX?NDESCBIT,FX?ACTORBIT,INSIDE-THE-BARROW,0,0,T?ADVENTURER
+ .OBJECT WIDE-LEDGE,FX?NONLANDBIT,FX?RLANDBIT,ROOMS,LIBRARY,0,T?WIDE-LEDGE
+ .OBJECT WIZ-DOOR,0,FX?CONTBIT+FX?DOORBIT,LOCAL-GLOBALS,BRIDGE,0,T?WIZ-DOOR
+ .OBJECT LOCAL-GLOBALS,0,0,GLOBAL-OBJECTS,0,HOOK,T?LOCAL-GLOBALS
+ .OBJECT WIZARDS-WORKSHOP,0,FX?ONBIT+FX?RLANDBIT,ROOMS,TROPHY-ROOM,WORKBENCH,T?WIZARDS-WORKSHOP
+ .OBJECT BUCKET,FX?OPENBIT,FX?CONTBIT+FX?VEHBIT,CIRCULAR-ROOM,PEARL-NECKLACE,0,T?BUCKET
+ .OBJECT SHALLOW-FORD,0,FX?ONBIT+FX?RLANDBIT,ROOMS,GREAT-CAVERN,0,T?SHALLOW-FORD
+ .OBJECT PORTRAIT,0,FX?BURNBIT+FX?TAKEBIT,TEA-ROOM,0,0,T?PORTRAIT
+ .OBJECT CARD,0,FX?BURNBIT+FX?TAKEBIT+FX?READBIT,SAFE,0,0,T?CARD
+ .OBJECT DREARY-ROOM,0,FX?ONBIT+FX?RLANDBIT,ROOMS,LEDGE-IN-RAVINE,KEYHOLE-2,T?DREARY-ROOM
+ .OBJECT CERBERUS,FX?OPENBIT,FX?CONTBIT+FX?ACTORBIT,CERBERUS-ROOM,0,0,T?CERBERUS
+ .OBJECT BLUE-BOOK,0,FX?BURNBIT+FX?CONTBIT+FX?TAKEBIT+FX?READBIT,LIBRARY,0,0,T?BLUE-BOOK
+ .OBJECT GLOBAL-OBJECTS,FX?TRANSBIT+FX?SEARCHBIT+FX?OPENBIT+FX?TRYTAKEBIT+FX?SURFACEBIT+FX?TOUCHBIT+FX?INVISIBLE,FX?RLANDBIT+FX?ONBIT,0,0,WALL,T?GLOBAL-OBJECTS
+ .OBJECT TROPHY-ROOM,0,FX?RLANDBIT,ROOMS,GUARDED-ROOM,WANDS,T?TROPHY-ROOM
+ .OBJECT SAFE-HOLE,FX?NDESCBIT+FX?OPENBIT,0,DUSTY-ROOM,SAFE,0,T?SAFE-HOLE
+ .OBJECT IT,FX?TOUCHBIT+FX?NDESCBIT,0,GLOBAL-OBJECTS,INTNUM,0,T?IT
+ .OBJECT WIZARDS-QUARTERS,0,FX?RLANDBIT,ROOMS,MURKY-ROOM,0,T?WIZARDS-QUARTERS
+ .OBJECT COLLAR,0,FX?TAKEBIT,KENNEL,0,0,T?COLLAR
+ .OBJECT RIBBON,FX?NDESCBIT,0,UNICORN,GOLD-KEY,0,T?RIBBON
+ .OBJECT BRIDGE,FX?NDESCBIT,0,LOCAL-GLOBALS,CHASM,0,T?BRIDGE
+ .OBJECT WORKBENCH,FX?OPENBIT+FX?SURFACEBIT+FX?NDESCBIT,FX?CONTBIT,WIZARDS-WORKSHOP,0,STAND-3,T?WORKBENCH
+ .OBJECT PCRACK,FX?NDESCBIT,0,DREARY-ROOM,PTABLE,0,T?PCRACK
+ .OBJECT STAMP,0,FX?BURNBIT+FX?TAKEBIT+FX?READBIT,PURPLE-BOOK,0,0,T?STAMP
+ .OBJECT DOOR-KEEPER,FX?NDESCBIT,0,GUARDED-ROOM,0,0,T?DOOR-KEEPER
+ .OBJECT DINGY-CLOSET,0,FX?RLANDBIT+FX?ONBIT,ROOMS,MACHINE-ROOM,CAGE-OBJECT,T?DINGY-CLOSET
+ .OBJECT STONE-BRIDGE,0,FX?RLANDBIT,ROOMS,DRAGON-LAIR,BRICK,T?STONE-BRIDGE
+ .OBJECT CHEST,0,FX?TAKEBIT+FX?CONTBIT,DRAGON-LAIR,0,STATUETTE,T?CHEST
+ .OBJECT POOL-ROOM,0,FX?RLANDBIT,ROOMS,POSTS-ROOM,CANDY,T?POOL-ROOM
+ .OBJECT MENHIR,FX?NDESCBIT,FX?READBIT,LOCAL-GLOBALS,GLOBAL-MENHIR,0,T?MENHIR
+ .OBJECT TOPIARY,0,FX?RLANDBIT,ROOMS,GAZEBO,HEDGES,T?TOPIARY
+ .OBJECT CRYPT-OBJECT,FX?NDESCBIT,FX?READBIT,CRYPT,HEADS,0,T?CRYPT-OBJECT
+ .OBJECT PEARL-NECKLACE,0,FX?TAKEBIT,CIRCULAR-ROOM,BOTTOM-ETCHINGS,0,T?PEARL-NECKLACE
+ .OBJECT MACHINE-ROOM,0,FX?ONBIT+FX?RLANDBIT,ROOMS,TOP-OF-WELL,TRIANGULAR-BUTTON,T?MACHINE-ROOM
+ .OBJECT BLUE-CAKE,0,FX?FOODBIT+FX?TAKEBIT+FX?READBIT,ALICE-TABLE,GREEN-CAKE,0,T?BLUE-CAKE
+ .OBJECT STAND-1,FX?OPENBIT+FX?SURFACEBIT+FX?NDESCBIT,FX?CONTBIT,WORKBENCH,0,0,T?STAND-1
+ .OBJECT PENTAGRAM-ROOM,0,FX?ONBIT+FX?RLANDBIT,ROOMS,WIZARDS-WORKSHOP,PENTAGRAM,T?PENTAGRAM-ROOM
+ .OBJECT CLOTH-BAG,FX?NDESCBIT,0,BALLOON,BRAIDED-WIRE,0,T?CLOTH-BAG
+ .OBJECT WANDS,FX?TRYTAKEBIT+FX?NDESCBIT,0,TROPHY-ROOM,DEGREE,0,T?WANDS
+ .OBJECT RUBY,0,FX?TAKEBIT,VOLCANO-BOTTOM,0,0,T?RUBY
+ .OBJECT ROBOT,FX?OPENBIT,FX?CONTBIT+FX?ACTORBIT,TOP-OF-WELL,TOP-ETCHINGS,0,T?ROBOT
+ .OBJECT STAND-3,FX?OPENBIT+FX?SURFACEBIT+FX?NDESCBIT,FX?CONTBIT,WORKBENCH,STAND-2,0,T?STAND-3
+ .OBJECT PLACE-MAT,FX?OPENBIT+FX?SURFACEBIT,FX?CONTBIT+FX?TAKEBIT,GAZEBO-TABLE,NEWSPAPER,0,T?PLACE-MAT
+ .OBJECT EXPLOSION,0,0,0,0,0,T?EXPLOSION
+ .OBJECT STREAM,FX?NDESCBIT,0,LOCAL-GLOBALS,GLOBAL-WATER,0,T?STREAM
+ .OBJECT CHASM,FX?NDESCBIT,0,LOCAL-GLOBALS,STREAM,0,T?CHASM
+ .OBJECT TEAPOT,FX?OPENBIT+FX?TRANSBIT,FX?CONTBIT+FX?TAKEBIT,GAZEBO-TABLE,PLACE-MAT,0,T?TEAPOT
+ .OBJECT KEYHOLE-2,FX?NDESCBIT,0,DREARY-ROOM,PCRACK,KEY,T?KEYHOLE-2
+ .OBJECT DUSTY-ROOM,0,FX?ONBIT+FX?RLANDBIT,ROOMS,WIDE-LEDGE,SAFE-HOLE,T?DUSTY-ROOM
+ .OBJECT ICE,0,0,ICE-ROOM,0,0,T?ICE
+ .OBJECT ZORKMID,0,0,GLOBAL-OBJECTS,PATH-OBJECT,0,T?ZORKMID
+ .OBJECT CRYPT,0,FX?RLANDBIT,ROOMS,CERBERUS-ROOM,CRYPT-OBJECT,T?CRYPT
+ .OBJECT HEADS,FX?TRYTAKEBIT+FX?NDESCBIT,0,CRYPT,0,0,T?HEADS
+ .OBJECT HEDGES,FX?NDESCBIT,0,TOPIARY,0,0,T?HEDGES
+ .OBJECT POSTS-ROOM,0,FX?ONBIT+FX?RLANDBIT,ROOMS,TEA-ROOM,POSTS,T?POSTS-ROOM
+ .OBJECT RECEPTACLE,FX?NDESCBIT+FX?SEARCHBIT,FX?CONTBIT,BALLOON,CLOTH-BAG,0,T?RECEPTACLE
+ .OBJECT GOLD-KEY,FX?TRYTAKEBIT+FX?NDESCBIT,FX?TOOLBIT+FX?TAKEBIT,UNICORN,0,0,T?GOLD-KEY
+ .OBJECT KENNEL,0,FX?RLANDBIT,ROOMS,MENHIR-ROOM,COLLAR,T?KENNEL
+ .OBJECT PATH-OBJECT,FX?NDESCBIT,0,GLOBAL-OBJECTS,ME,0,T?PATH-OBJECT
+ .OBJECT KEYHOLE-1,FX?NDESCBIT,0,LEDGE-IN-RAVINE,0,0,T?KEYHOLE-1
+ .OBJECT CANDY,FX?INVISIBLE,FX?READBIT+FX?TAKEBIT+FX?FOODBIT,POOL-ROOM,POOL,0,T?CANDY
+ .OBJECT CIRCULAR-ROOM,FX?NONLANDBIT,FX?RLANDBIT,ROOMS,RIDDLE-ROOM,BUCKET,T?CIRCULAR-ROOM
+ .OBJECT SAFE,FX?NDESCBIT,FX?CONTBIT,DUSTY-ROOM,0,CROWN,T?SAFE
+ .OBJECT PDOOR,0,FX?CONTBIT+FX?DOORBIT,LOCAL-GLOBALS,GLOBAL-CERBERUS,0,T?PDOOR
+ .OBJECT BALLOON-LABEL,0,FX?BURNBIT+FX?TAKEBIT+FX?READBIT,0,0,0,T?BALLOON-LABEL
+ .OBJECT LIBRARY,0,FX?RLANDBIT,ROOMS,NARROW-LEDGE,PURPLE-BOOK,T?LIBRARY
+ .OBJECT VIOLIN,FX?INVISIBLE,FX?TAKEBIT,CAROUSEL-ROOM,0,0,T?VIOLIN
+ .OBJECT CAROUSEL-ROOM,0,FX?RLANDBIT,ROOMS,DEEP-FORD,VIOLIN,T?CAROUSEL-ROOM
+ .OBJECT CAGE-OBJECT,FX?INVISIBLE,0,DINGY-CLOSET,PALANTIR-1,0,T?CAGE-OBJECT
+ .OBJECT CROWN,0,FX?TAKEBIT,SAFE,CARD,0,T?CROWN
+ .OBJECT GUARDED-ROOM,0,FX?RLANDBIT,ROOMS,0,DOOR-KEEPER,T?GUARDED-ROOM
+ .OBJECT LAMP,0,FX?LIGHTBIT+FX?TAKEBIT,INSIDE-THE-BARROW,ADVENTURER,0,T?LAMP
+ .OBJECT PRINCESS,0,FX?ACTORBIT,DRAGON-LAIR,CHEST,0,T?PRINCESS
+ .OBJECT ALICE-TABLE,FX?OPENBIT+FX?SURFACEBIT,FX?CONTBIT,TEA-ROOM,PORTRAIT,RED-CAKE,T?ALICE-TABLE
+ .OBJECT FORMAL-GARDEN,0,FX?RLANDBIT,ROOMS,DREARY-ROOM,0,T?FORMAL-GARDEN
+ .OBJECT DARK-TUNNEL,0,FX?RLANDBIT,ROOMS,SHALLOW-FORD,SWORD,T?DARK-TUNNEL
+ .OBJECT MENHIR-ROOM,0,FX?RLANDBIT,ROOMS,ROOM-8,0,T?MENHIR-ROOM
+ .OBJECT CERBERUS-ROOM,0,FX?RLANDBIT,ROOMS,KENNEL,CERBERUS,T?CERBERUS-ROOM
+ .OBJECT GLOBAL-MENHIR,FX?NDESCBIT,FX?READBIT,LOCAL-GLOBALS,GLOBAL-PALANTIR,0,T?GLOBAL-MENHIR
+ .OBJECT BALLOON,FX?OPENBIT,FX?VEHBIT,VOLCANO-BOTTOM,RUBY,RECEPTACLE,T?BALLOON
+ .OBJECT BRAIDED-WIRE,FX?NDESCBIT,0,BALLOON,0,0,T?BRAIDED-WIRE
+ .OBJECT GRUE,0,0,GLOBAL-OBJECTS,GROUND,0,T?GRUE
+ .OBJECT PWINDOW,0,FX?DOORBIT,LOCAL-GLOBALS,PDOOR,0,T?PWINDOW
+ .OBJECT COOL-ROOM,0,FX?RLANDBIT,ROOMS,STONE-BRIDGE,0,T?COOL-ROOM
+ .OBJECT DEGREE,FX?TRYTAKEBIT+FX?NDESCBIT,FX?READBIT,TROPHY-ROOM,0,0,T?DEGREE
+ .OBJECT VOLCANO-BOTTOM,FX?NONLANDBIT,FX?RLANDBIT,ROOMS,POOL-ROOM,BALLOON,T?VOLCANO-BOTTOM
+ .OBJECT BILLS,0,FX?BURNBIT+FX?TAKEBIT+FX?READBIT,ROOM-8,0,0,T?BILLS
+ .OBJECT GAZEBO-TABLE,FX?OPENBIT+FX?SURFACEBIT+FX?NDESCBIT,FX?CONTBIT,GAZEBO,0,MATCH,T?GAZEBO-TABLE
+ .OBJECT RED-CAKE,0,FX?FOODBIT+FX?TAKEBIT+FX?READBIT,ALICE-TABLE,ORANGE-CAKE,0,T?RED-CAKE
+ .OBJECT NEWSPAPER,0,FX?READBIT+FX?BURNBIT+FX?TAKEBIT,GAZEBO-TABLE,0,0,T?NEWSPAPER
+ .OBJECT LEDGE-IN-RAVINE,0,FX?RLANDBIT,ROOMS,ZORK3,KEYHOLE-1,T?LEDGE-IN-RAVINE
+ .OBJECT GREAT-CAVERN,0,FX?ONBIT+FX?RLANDBIT,ROOMS,INSIDE-THE-BARROW,0,T?GREAT-CAVERN
+ .OBJECT WATER,0,FX?DRINKBIT+FX?TAKEBIT,0,0,0,T?WATER
+ .OBJECT GROUND,0,0,GLOBAL-OBJECTS,IT,0,T?GROUND
+ .OBJECT GLOBAL-PALANTIR,FX?NDESCBIT,0,LOCAL-GLOBALS,WIZ-DOOR,0,T?GLOBAL-PALANTIR
+ .OBJECT TOP-ETCHINGS,FX?NDESCBIT,FX?READBIT,TOP-OF-WELL,0,0,T?TOP-ETCHINGS
+ .OBJECT TEA-ROOM,0,FX?ONBIT+FX?RLANDBIT,ROOMS,CAGE,ALICE-TABLE,T?TEA-ROOM
+ .OBJECT NOT-HERE-OBJECT,0,0,0,0,0,T?NOT-HERE-OBJECT
+ .OBJECT DRAGON,0,FX?ACTORBIT,DRAGON-ROOM,0,0,T?DRAGON
+ .OBJECT POSTS,FX?NDESCBIT,0,POSTS-ROOM,0,0,T?POSTS
+ .OBJECT INTNUM,0,FX?TOOLBIT,GLOBAL-OBJECTS,LOCAL-GLOBALS,0,T?INTNUM
+ .OBJECT STAND-4,FX?OPENBIT+FX?SURFACEBIT,FX?CONTBIT,0,0,PALANTIR-4,T?STAND-4
+ .OBJECT PURPLE-BOOK,FX?SEARCHBIT,FX?BURNBIT+FX?CONTBIT+FX?TAKEBIT+FX?READBIT,LIBRARY,WHITE-BOOK,STAMP,T?PURPLE-BOOK
+ .OBJECT DRAGON-LAIR,0,FX?RLANDBIT,ROOMS,DRAGON-ROOM,PRINCESS,T?DRAGON-LAIR
+ .OBJECT PENTAGRAM,FX?OPENBIT+FX?SURFACEBIT+FX?NDESCBIT,FX?CONTBIT,PENTAGRAM-ROOM,0,0,T?PENTAGRAM
+ .OBJECT ROOM-8,0,FX?RLANDBIT,ROOMS,CAROUSEL-ROOM,BILLS,T?ROOM-8
+ .OBJECT GLOBAL-CERBERUS,0,0,LOCAL-GLOBALS,MENHIR,0,T?GLOBAL-CERBERUS
+ .OBJECT DEAD-PALANTIR-4,0,FX?ONBIT+FX?RLANDBIT,ROOMS,DEAD-PALANTIR-3,0,T?DEAD-PALANTIR-4
+ .OBJECT FUSE,0,FX?BURNBIT+FX?TAKEBIT,RIDDLE-ROOM,RIDDLE-DOOR,0,T?FUSE
+ .OBJECT STAND-2,FX?OPENBIT+FX?SURFACEBIT+FX?NDESCBIT,FX?CONTBIT,WORKBENCH,STAND-1,0,T?STAND-2
+ .OBJECT GREEN-CAKE,0,FX?FOODBIT+FX?TAKEBIT+FX?READBIT,ALICE-TABLE,0,0,T?GREEN-CAKE
+ .OBJECT DEAD-PALANTIR-1,0,FX?ONBIT+FX?RLANDBIT,ROOMS,WIZARDS-QUARTERS,0,T?DEAD-PALANTIR-1
+ .OBJECT SWORD,FX?TRYTAKEBIT,FX?WEAPONBIT+FX?TAKEBIT,DARK-TUNNEL,0,0,T?SWORD
+ .OBJECT BRICK,FX?SEARCHBIT+FX?OPENBIT,FX?BURNBIT+FX?TAKEBIT,STONE-BRIDGE,0,0,T?BRICK
+ .OBJECT DEAD-PALANTIR-2,0,FX?ONBIT+FX?RLANDBIT,ROOMS,DEAD-PALANTIR-1,0,T?DEAD-PALANTIR-2
+ .OBJECT DEAD-PALANTIR-3,0,FX?ONBIT+FX?RLANDBIT,ROOMS,DEAD-PALANTIR-2,0,T?DEAD-PALANTIR-3
+ .OBJECT ORANGE-CAKE,0,FX?FOODBIT+FX?TAKEBIT+FX?READBIT,ALICE-TABLE,BLUE-CAKE,0,T?ORANGE-CAKE
+ .OBJECT VOLCANO-BY-WIDE-LEDGE,FX?NWALLBIT+FX?NONLANDBIT,0,ROOMS,VOLCANO-BY-SMALL-LEDGE,0,T?VOLCANO-BY-WIDE-LEDGE
+ .OBJECT ZORK3,0,FX?ONBIT+FX?RLANDBIT,ROOMS,CRYPT,0,T?ZORK3
+ .OBJECT VOLCANO-BY-SMALL-LEDGE,FX?NWALLBIT+FX?NONLANDBIT,0,ROOMS,VOLCANO-CORE,0,T?VOLCANO-BY-SMALL-LEDGE
+ .OBJECT DEEP-FORD,0,FX?RLANDBIT,ROOMS,DARK-TUNNEL,0,T?DEEP-FORD
+ .OBJECT VOLCANO-CORE,FX?NWALLBIT+FX?NONLANDBIT,0,ROOMS,VOLCANO-BOTTOM,0,T?VOLCANO-CORE
+ .OBJECT WHITE-BOOK,0,FX?BURNBIT+FX?CONTBIT+FX?TAKEBIT+FX?READBIT,LIBRARY,BLUE-BOOK,0,T?WHITE-BOOK
+ .OBJECT DEMON,FX?INVISIBLE,FX?ACTORBIT,0,0,0,T?DEMON
+ .OBJECT AQUARIUM-ROOM,0,FX?ONBIT+FX?RLANDBIT,ROOMS,PENTAGRAM-ROOM,AQUARIUM,T?AQUARIUM-ROOM
+ .OBJECT GAZEBO,0,FX?ONBIT+FX?RLANDBIT,ROOMS,FORMAL-GARDEN,GAZEBO-TABLE,T?GAZEBO
+ .OBJECT WALL,0,0,GLOBAL-OBJECTS,HANDS,0,T?WALL
+ .OBJECT RIDDLE-ROOM,0,FX?RLANDBIT,ROOMS,ICE-ROOM,FUSE,T?RIDDLE-ROOM
+ .OBJECT TOP-OF-WELL,FX?NONLANDBIT,FX?RLANDBIT,ROOMS,CIRCULAR-ROOM,ROBOT-LABEL,T?TOP-OF-WELL
+ .OBJECT ROBOT-LABEL,0,FX?BURNBIT+FX?TAKEBIT+FX?READBIT,TOP-OF-WELL,ROBOT,0,T?ROBOT-LABEL
+ .OBJECT COIN,0,FX?TAKEBIT+FX?READBIT,NARROW-LEDGE,0,0,T?COIN
+ .OBJECT LETTER-OPENER,0,FX?TOOLBIT+FX?TAKEBIT,GAZEBO-TABLE,TEAPOT,0,T?LETTER-OPENER
+ .OBJECT PSEUDO-OBJECT,0,0,LOCAL-GLOBALS,0,0,T?PSEUDO-OBJECT
+ .OBJECT DRAGON-ROOM,0,FX?RLANDBIT,ROOMS,TOPIARY,DRAGON,T?DRAGON-ROOM
+ .OBJECT AQUARIUM,FX?OPENBIT,FX?CONTBIT,AQUARIUM-ROOM,0,SERPENT,T?AQUARIUM
+ .OBJECT PTABLE,FX?OPENBIT+FX?SURFACEBIT+FX?NDESCBIT,FX?CONTBIT,DREARY-ROOM,PALANTIR-2,0,T?PTABLE
+ .ENDT
+
+; OBJECT PROPERTY TABLES ARE DEFINED HERE
+
+OBJPRP::
+
+T?STATUETTE:: .TABLE ; TABLE FOR OBJECT STATUETTE
+ .STRL "golden dragon statuette"
+ .PROP 6,P?SYNONYM
+ W?TREASURE
+ W?STATUE
+ W?DRAGON
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?GOLD
+ .PROP 2,P?VALUE
+ 20
+ .PROP 2,P?FDESC
+ STR?156
+ .BYTE 0
+ .ENDT
+
+T?MURKY-ROOM:: .TABLE ; TABLE FOR OBJECT MURKY-ROOM
+ .STRL "Murky Room"
+ .PROP 1,P?OUT ; UNCONDITIONAL EXIT
+ .BYTE AQUARIUM-ROOM ; TO ROOM
+ .PROP 2,P?ACTION
+ MURKY-ROOM-F
+ .BYTE 0
+ .ENDT
+
+T?TRIANGULAR-BUTTON:: .TABLE ; TABLE FOR OBJECT TRIANGULAR-BUTTON
+ .STRL "triangular button"
+ .PROP 2,P?SYNONYM
+ W?BUTTON
+ .PROP 2,P?ACTION
+ TRIANGULAR-BUTTON-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?TRIANGULAR
+ .BYTE 0
+ .ENDT
+
+T?GLOBAL-WATER:: .TABLE ; TABLE FOR OBJECT GLOBAL-WATER
+ .STRL "water"
+ .PROP 2,P?SYNONYM
+ W?WATER
+ .PROP 2,P?ACTION
+ WATER-F
+ .BYTE 0
+ .ENDT
+
+T?RIDDLE-DOOR:: .TABLE ; TABLE FOR OBJECT RIDDLE-DOOR
+ .STRL "stone door"
+ .PROP 2,P?SYNONYM
+ W?DOOR
+ .PROP 2,P?ACTION
+ RIDDLE-DOOR-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?GREAT
+ .BYTE A?STONE
+ .BYTE 0
+ .ENDT
+
+T?BOTTOM-ETCHINGS:: .TABLE ; TABLE FOR OBJECT BOTTOM-ETCHINGS
+ .STRL "wall with etchings"
+ .PROP 4,P?SYNONYM
+ W?ETCHINGS
+ W?WALL
+ .PROP 2,P?TEXT
+ STR?170
+ .BYTE 0
+ .ENDT
+
+T?WELL:: .TABLE ; TABLE FOR OBJECT WELL
+ .STRL "well"
+ .PROP 2,P?SYNONYM
+ W?WELL
+ .PROP 2,P?ACTION
+ WELL-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?MAGIC
+ .BYTE 0
+ .ENDT
+
+T?HANDS:: .TABLE ; TABLE FOR OBJECT HANDS
+ .STRL "pair of hands"
+ .PROP 6,P?SYNONYM
+ W?PAIR
+ W?HANDS
+ W?HAND
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?BARE
+ .BYTE 0
+ .ENDT
+
+T?CAGE:: .TABLE ; TABLE FOR OBJECT CAGE
+ .STRL "Cage"
+ .PROP 2,P?ACTION
+ CAGE-F
+ .PROP 2,P?LDESC
+ STR?180
+ .BYTE 0
+ .ENDT
+
+T?INSIDE-THE-BARROW:: .TABLE ; TABLE FOR OBJECT INSIDE-THE-BARROW
+ .STRL "Inside the Barrow"
+ .PROP 1,P?SW ; UNCONDITIONAL EXIT
+ .BYTE GREAT-CAVERN ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?110
+ .BYTE 0
+ .ENDT
+
+T?KEY:: .TABLE ; TABLE FOR OBJECT KEY
+ .STRL "rusty iron key"
+ .PROP 2,P?SYNONYM
+ W?KEY
+ .PROP 2,P?SIZE
+ 2
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?IRON
+ .BYTE A?RUSTY
+ .BYTE 0
+ .ENDT
+
+T?NARROW-LEDGE:: .TABLE ; TABLE FOR OBJECT NARROW-LEDGE
+ .STRL "Narrow Ledge"
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE LIBRARY ; TO ROOM
+ .PROP 2,P?DOWN ; IMPOSSIBLE EXIT
+ STR?205 ; FAILURE MESSAGE
+ .PROP 1,P?IN ; UNCONDITIONAL EXIT
+ .BYTE LIBRARY ; TO ROOM
+ .PROP 2,P?ACTION
+ LEDGE-F
+ .PROP 1,P?GLOBAL
+ .BYTE HOOK
+ .BYTE 0
+ .ENDT
+
+T?WIZARD:: .TABLE ; TABLE FOR OBJECT WIZARD
+ .STRL "Wizard of Frobozz"
+ .PROP 4,P?SYNONYM
+ W?WIZARD
+ W?MAN
+ .PROP 2,P?ACTION
+ WIZARD-F
+ .PROP 2,P?LDESC
+ STR?51
+ .PROP 3,P?ADJECTIVE
+ .BYTE A?LITTLE
+ .BYTE A?FROBOZZ
+ .BYTE A?OLD
+ .BYTE 0
+ .ENDT
+
+T?DEAD-SERPENT:: .TABLE ; TABLE FOR OBJECT DEAD-SERPENT
+ .STRL "dead sea serpent"
+ .PROP 4,P?SYNONYM
+ W?SERPENT
+ W?SNAKE
+ .PROP 2,P?ACTION
+ DEAD-SERPENT-F
+ .PROP 2,P?SIZE
+ 400
+ .PROP 3,P?ADJECTIVE
+ .BYTE A?DEAD
+ .BYTE A?BABY
+ .BYTE A?SEA
+ .BYTE 0
+ .ENDT
+
+T?WAND:: .TABLE ; TABLE FOR OBJECT WAND
+ .STRL "magic wand"
+ .PROP 2,P?SYNONYM
+ W?WAND
+ .PROP 2,P?ACTION
+ WAND-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?MAGIC
+ .PROP 2,P?VALUE
+ 30
+ .BYTE 0
+ .ENDT
+
+T?MATCH:: .TABLE ; TABLE FOR OBJECT MATCH
+ .STRL "matchbook"
+ .PROP 6,P?SYNONYM
+ W?MATCH
+ W?MATCHES
+ W?MATCHBOOK
+ .PROP 2,P?ACTION
+ MATCH-F
+ .PROP 2,P?LDESC
+ STR?141
+ .PROP 2,P?SIZE
+ 2
+ .PROP 2,P?TEXT
+ STR?142
+ .BYTE 0
+ .ENDT
+
+T?ME:: .TABLE ; TABLE FOR OBJECT ME
+ .STRL "brave adventurer"
+ .PROP 6,P?SYNONYM
+ W?ME
+ W?MYSELF
+ W?SELF
+ .PROP 2,P?ACTION
+ ME-F
+ .BYTE 0
+ .ENDT
+
+T?UNICORN:: .TABLE ; TABLE FOR OBJECT UNICORN
+ .STRL "unicorn"
+ .PROP 4,P?SYNONYM
+ W?UNICORN
+ W?ANIMAL
+ .PROP 2,P?ACTION
+ UNICORN-F
+ .PROP 2,P?LDESC
+ STR?139
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?BEAUTIFUL
+ .BYTE A?WHITE
+ .BYTE 0
+ .ENDT
+
+T?PALANTIR-1:: .TABLE ; TABLE FOR OBJECT PALANTIR-1
+ .STRL "red crystal sphere"
+ .PROP 2,P?SYNONYM
+ W?SPHERE
+ .PROP 2,P?ACTION
+ SPHERE-F
+ .PROP 2,P?SIZE
+ 10
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?CRYSTAL
+ .BYTE A?RED
+ .PROP 2,P?VALUE
+ 20
+ .BYTE 0
+ .ENDT
+
+T?HOOK:: .TABLE ; TABLE FOR OBJECT HOOK
+ .STRL "hook"
+ .PROP 2,P?SYNONYM
+ W?HOOK
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?SMALL
+ .BYTE 0
+ .ENDT
+
+T?PALANTIR-3:: .TABLE ; TABLE FOR OBJECT PALANTIR-3
+ .STRL "clear crystal sphere"
+ .PROP 2,P?SYNONYM
+ W?SPHERE
+ .PROP 2,P?ACTION
+ SPHERE-F
+ .PROP 3,P?ADJECTIVE
+ .BYTE A?CRYSTAL
+ .BYTE A?WHITE
+ .BYTE A?CLEAR
+ .PROP 2,P?VALUE
+ 20
+ .PROP 2,P?FDESC
+ STR?108
+ .BYTE 0
+ .ENDT
+
+T?SERPENT:: .TABLE ; TABLE FOR OBJECT SERPENT
+ .STRL "baby sea serpent"
+ .PROP 4,P?SYNONYM
+ W?SERPENT
+ W?SNAKE
+ .PROP 2,P?ACTION
+ SERPENT-F
+ .PROP 2,P?LDESC
+ STR?97
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?BABY
+ .BYTE A?SEA
+ .BYTE 0
+ .ENDT
+
+T?PALANTIR-2:: .TABLE ; TABLE FOR OBJECT PALANTIR-2
+ .STRL "blue crystal sphere"
+ .PROP 2,P?SYNONYM
+ W?SPHERE
+ .PROP 2,P?ACTION
+ SPHERE-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?CRYSTAL
+ .BYTE A?BLUE
+ .PROP 2,P?VALUE
+ 20
+ .PROP 2,P?FDESC
+ STR?107
+ .BYTE 0
+ .ENDT
+
+T?ICE-ROOM:: .TABLE ; TABLE FOR OBJECT ICE-ROOM
+ .STRL "Ice Room"
+ .PROP 1,P?EAST ; UNCONDITIONAL EXIT
+ .BYTE COOL-ROOM ; TO ROOM
+ .PROP 4,P?WEST ; CONDITIONAL EXIT
+ .BYTE VOLCANO-BOTTOM ; TO ROOM
+ .BYTE ICE-MELTED ; IF FLAG IS TRUE
+ STR?166 ; FAILURE MESSAGE
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE GUARDED-ROOM ; TO ROOM
+ .PROP 2,P?ACTION
+ ICE-ROOM-F
+ .BYTE 0
+ .ENDT
+
+T?GAZEBO-OBJECT:: .TABLE ; TABLE FOR OBJECT GAZEBO-OBJECT
+ .STRL "gazebo"
+ .PROP 2,P?SYNONYM
+ W?GAZEBO
+ .PROP 2,P?ACTION
+ GAZEBO-OBJECT-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?WOODEN
+ .BYTE 0
+ .ENDT
+
+T?PALANTIR-4:: .TABLE ; TABLE FOR OBJECT PALANTIR-4
+ .STRL "black crystal sphere"
+ .PROP 2,P?SYNONYM
+ W?SPHERE
+ .PROP 2,P?ACTION
+ SPHERE-F
+ .PROP 2,P?LDESC
+ STR?82
+ .PROP 2,P?SIZE
+ 10
+ .PROP 3,P?ADJECTIVE
+ .BYTE A?CRYSTAL
+ .BYTE A?STRANGE
+ .BYTE A?BLACK
+ .PROP 2,P?VALUE
+ 30
+ .BYTE 0
+ .ENDT
+
+T?ROOMS:: .TABLE ; TABLE FOR OBJECT ROOMS
+ .STRL ""
+ .PROP 1,P?IN ; UNCONDITIONAL EXIT
+ .BYTE ROOMS ; TO ROOM
+ .BYTE 0
+ .ENDT
+
+T?POOL:: .TABLE ; TABLE FOR OBJECT POOL
+ .STRL "pool"
+ .PROP 2,P?SYNONYM
+ W?POOL
+ .PROP 2,P?ACTION
+ POOL-F
+ .PROP 2,P?LDESC
+ STR?192
+ .BYTE 0
+ .ENDT
+
+T?ADVENTURER:: .TABLE ; TABLE FOR OBJECT ADVENTURER
+ .STRL "thing"
+ .PROP 2,P?SYNONYM
+ W?ADVENTURER
+ .PROP 2,P?ACTION
+ 0
+ .PROP 2,P?STRENGTH
+ 0
+ .BYTE 0
+ .ENDT
+
+T?WIDE-LEDGE:: .TABLE ; TABLE FOR OBJECT WIDE-LEDGE
+ .STRL "Wide Ledge"
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE DUSTY-ROOM ; TO ROOM
+ .PROP 2,P?DOWN ; IMPOSSIBLE EXIT
+ STR?164 ; FAILURE MESSAGE
+ .PROP 1,P?IN ; UNCONDITIONAL EXIT
+ .BYTE DUSTY-ROOM ; TO ROOM
+ .PROP 2,P?ACTION
+ LEDGE-F
+ .PROP 1,P?GLOBAL
+ .BYTE HOOK
+ .BYTE 0
+ .ENDT
+
+T?WIZ-DOOR:: .TABLE ; TABLE FOR OBJECT WIZ-DOOR
+ .STRL "door"
+ .PROP 2,P?SYNONYM
+ W?DOOR
+ .PROP 2,P?ACTION
+ WIZ-DOOR-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?BATTERED
+ .BYTE 0
+ .ENDT
+
+T?LOCAL-GLOBALS:: .TABLE ; TABLE FOR OBJECT LOCAL-GLOBALS
+ .STRL ""
+ .PROP 2,P?SYNONYM
+ W?ZZMGCK
+ .BYTE 0
+ .ENDT
+
+T?WIZARDS-WORKSHOP:: .TABLE ; TABLE FOR OBJECT WIZARDS-WORKSHOP
+ .STRL "Wizard's Workshop"
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE TROPHY-ROOM ; TO ROOM
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE PENTAGRAM-ROOM ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?81
+ .BYTE 0
+ .ENDT
+
+T?BUCKET:: .TABLE ; TABLE FOR OBJECT BUCKET
+ .STRL "wooden bucket"
+ .PROP 2,P?SYNONYM
+ W?BUCKET
+ .PROP 2,P?ACTION
+ BUCKET-F
+ .PROP 2,P?LDESC
+ STR?171
+ .PROP 2,P?SIZE
+ 100
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?WOODEN
+ .PROP 2,P?CAPACITY
+ 100
+ .PROP 2,P?VTYPE
+ 0
+ .PROP 2,P?CONTFCN
+ BUCKET-CONT
+ .BYTE 0
+ .ENDT
+
+T?SHALLOW-FORD:: .TABLE ; TABLE FOR OBJECT SHALLOW-FORD
+ .STRL "Shallow Ford"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE GREAT-CAVERN ; TO ROOM
+ .PROP 1,P?SW ; UNCONDITIONAL EXIT
+ .BYTE DARK-TUNNEL ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?116
+ .PROP 2,P?GLOBAL
+ .BYTE GLOBAL-WATER
+ .BYTE STREAM
+ .BYTE 0
+ .ENDT
+
+T?PORTRAIT:: .TABLE ; TABLE FOR OBJECT PORTRAIT
+ .STRL "portrait of J. Pierpont Flathead"
+ .PROP 6,P?SYNONYM
+ W?PORTRAIT
+ W?PAINTING
+ W?TREASURE
+ .PROP 2,P?SIZE
+ 25
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?RARE
+ .BYTE A?FLATHEAD
+ .PROP 2,P?VALUE
+ 20
+ .PROP 2,P?FDESC
+ STR?184
+ .BYTE 0
+ .ENDT
+
+T?CARD:: .TABLE ; TABLE FOR OBJECT CARD
+ .STRL "card"
+ .PROP 4,P?SYNONYM
+ W?CARD
+ W?NOTE
+ .PROP 2,P?LDESC
+ STR?215
+ .PROP 2,P?SIZE
+ 1
+ .PROP 2,P?TEXT
+ STR?216
+ .BYTE 0
+ .ENDT
+
+T?DREARY-ROOM:: .TABLE ; TABLE FOR OBJECT DREARY-ROOM
+ .STRL "Dreary Room"
+ .PROP 5,P?SOUTH ; CONDITIONAL EXIT
+ .BYTE LEDGE-IN-RAVINE ; TO ROOM
+ .BYTE PDOOR ; IF DOOR IS OPEN
+ 0 ; FAILURE MESSAGE
+ .BYTE 0
+ .PROP 5,P?OUT ; CONDITIONAL EXIT
+ .BYTE LEDGE-IN-RAVINE ; TO ROOM
+ .BYTE PDOOR ; IF DOOR IS OPEN
+ 0 ; FAILURE MESSAGE
+ .BYTE 0
+ .PROP 2,P?ACTION
+ DREARY-ROOM-F
+ .PROP 2,P?GLOBAL
+ .BYTE PDOOR
+ .BYTE PWINDOW
+ .BYTE 0
+ .ENDT
+
+T?CERBERUS:: .TABLE ; TABLE FOR OBJECT CERBERUS
+ .STRL "three-headed dog"
+ .PROP 8,P?SYNONYM
+ W?CERBERUS
+ W?DOG
+ W?HOUND
+ W?MONSTER
+ .PROP 2,P?ACTION
+ CERBERUS-F
+ .PROP 2,P?LDESC
+ STR?130
+ .PROP 4,P?ADJECTIVE
+ .BYTE A?HUGE
+ .BYTE A?GIANT
+ .BYTE A?THREE
+ .BYTE A?HEADED
+ .BYTE 0
+ .ENDT
+
+T?BLUE-BOOK:: .TABLE ; TABLE FOR OBJECT BLUE-BOOK
+ .STRL "blue book"
+ .PROP 4,P?SYNONYM
+ W?BOOK
+ W?BOOKS
+ .PROP 2,P?ACTION
+ RANDOM-BOOK-F
+ .PROP 2,P?SIZE
+ 10
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?BLUE
+ .PROP 2,P?TEXT
+ STR?210
+ .PROP 2,P?CAPACITY
+ 2
+ .PROP 2,P?FDESC
+ STR?209
+ .BYTE 0
+ .ENDT
+
+T?GLOBAL-OBJECTS:: .TABLE ; TABLE FOR OBJECT GLOBAL-OBJECTS
+ .STRL ""
+ .BYTE 0
+ .ENDT
+
+T?TROPHY-ROOM:: .TABLE ; TABLE FOR OBJECT TROPHY-ROOM
+ .STRL "Trophy Room"
+ .PROP 5,P?NORTH ; CONDITIONAL EXIT
+ .BYTE GUARDED-ROOM ; TO ROOM
+ .BYTE WIZ-DOOR ; IF DOOR IS OPEN
+ 0 ; FAILURE MESSAGE
+ .BYTE 0
+ .PROP 1,P?EAST ; UNCONDITIONAL EXIT
+ .BYTE WIZARDS-WORKSHOP ; TO ROOM
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE AQUARIUM-ROOM ; TO ROOM
+ .PROP 5,P?OUT ; CONDITIONAL EXIT
+ .BYTE GUARDED-ROOM ; TO ROOM
+ .BYTE WIZ-DOOR ; IF DOOR IS OPEN
+ 0 ; FAILURE MESSAGE
+ .BYTE 0
+ .PROP 2,P?ACTION
+ TROPHY-ROOM-F
+ .PROP 2,P?VALUE
+ 10
+ .PROP 1,P?GLOBAL
+ .BYTE WIZ-DOOR
+ .PROP 4,P?PSEUDO
+ W?OWL ; NAME
+ TROPHY-PSEUDO ; HANDLER
+ .BYTE 0
+ .ENDT
+
+T?SAFE-HOLE:: .TABLE ; TABLE FOR OBJECT SAFE-HOLE
+ .STRL "hole"
+ .PROP 4,P?SYNONYM
+ W?SLOT
+ W?HOLE
+ .PROP 2,P?ACTION
+ SAFE-HOLE-F
+ .PROP 2,P?CAPACITY
+ 10
+ .BYTE 0
+ .ENDT
+
+T?IT:: .TABLE ; TABLE FOR OBJECT IT
+ .STRL "thing"
+ .PROP 8,P?SYNONYM
+ W?IT
+ W?THEM
+ W?HER
+ W?HIM
+ .BYTE 0
+ .ENDT
+
+T?WIZARDS-QUARTERS:: .TABLE ; TABLE FOR OBJECT WIZARDS-QUARTERS
+ .STRL "Wizard's Quarters"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE AQUARIUM-ROOM ; TO ROOM
+ .PROP 2,P?ACTION
+ WIZARD-QUARTERS-F
+ .BYTE 0
+ .ENDT
+
+T?COLLAR:: .TABLE ; TABLE FOR OBJECT COLLAR
+ .STRL "gigantic dog collar"
+ .PROP 2,P?SYNONYM
+ W?COLLAR
+ .PROP 2,P?ACTION
+ COLLAR-F
+ .PROP 3,P?ADJECTIVE
+ .BYTE A?HUGE
+ .BYTE A?GIANT
+ .BYTE A?DOG
+ .PROP 2,P?VALUE
+ 15
+ .PROP 2,P?FDESC
+ STR?126
+ .BYTE 0
+ .ENDT
+
+T?RIBBON:: .TABLE ; TABLE FOR OBJECT RIBBON
+ .STRL "ribbon"
+ .PROP 2,P?SYNONYM
+ W?RIBBON
+ .PROP 2,P?ACTION
+ UNICORN-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?VELVET
+ .BYTE A?SATIN
+ .BYTE 0
+ .ENDT
+
+T?BRIDGE:: .TABLE ; TABLE FOR OBJECT BRIDGE
+ .STRL "bridge"
+ .PROP 2,P?SYNONYM
+ W?BRIDGE
+ .PROP 2,P?ACTION
+ BRIDGE-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?STONE
+ .BYTE 0
+ .ENDT
+
+T?WORKBENCH:: .TABLE ; TABLE FOR OBJECT WORKBENCH
+ .STRL "Wizard's workbench"
+ .PROP 6,P?SYNONYM
+ W?WORKBENCH
+ W?BENCH
+ W?TABLE
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?WORK
+ .BYTE A?WIZARD
+ .PROP 2,P?CAPACITY
+ 200
+ .BYTE 0
+ .ENDT
+
+T?PCRACK:: .TABLE ; TABLE FOR OBJECT PCRACK
+ .STRL "crack"
+ .PROP 2,P?SYNONYM
+ W?CRACK
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?NARROW
+ .BYTE 0
+ .ENDT
+
+T?STAMP:: .TABLE ; TABLE FOR OBJECT STAMP
+ .STRL "Flathead stamp"
+ .PROP 4,P?SYNONYM
+ W?STAMP
+ W?TREASURE
+ .PROP 2,P?SIZE
+ 1
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?FLATHEAD
+ .PROP 2,P?VALUE
+ 10
+ .PROP 2,P?TEXT
+ STR?214
+ .BYTE 0
+ .ENDT
+
+T?DOOR-KEEPER:: .TABLE ; TABLE FOR OBJECT DOOR-KEEPER
+ .STRL "lizard"
+ .PROP 6,P?SYNONYM
+ W?GUARDIAN
+ W?LIZARD
+ W?HEAD
+ .PROP 2,P?ACTION
+ DOOR-KEEPER-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?NASTY
+ .BYTE 0
+ .ENDT
+
+T?DINGY-CLOSET:: .TABLE ; TABLE FOR OBJECT DINGY-CLOSET
+ .STRL "Dingy Closet"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE MACHINE-ROOM ; TO ROOM
+ .PROP 1,P?OUT ; UNCONDITIONAL EXIT
+ .BYTE MACHINE-ROOM ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?179
+ .BYTE 0
+ .ENDT
+
+T?STONE-BRIDGE:: .TABLE ; TABLE FOR OBJECT STONE-BRIDGE
+ .STRL "Stone Bridge"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE DRAGON-ROOM ; TO ROOM
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE COOL-ROOM ; TO ROOM
+ .PROP 2,P?DOWN ; IMPOSSIBLE EXIT
+ STR?164 ; FAILURE MESSAGE
+ .PROP 2,P?LDESC
+ STR?163
+ .PROP 2,P?GLOBAL
+ .BYTE BRIDGE
+ .BYTE CHASM
+ .BYTE 0
+ .ENDT
+
+T?CHEST:: .TABLE ; TABLE FOR OBJECT CHEST
+ .STRL "wooden chest"
+ .PROP 4,P?SYNONYM
+ W?CHEST
+ W?TRUNK
+ .PROP 2,P?ACTION
+ CHEST-F
+ .PROP 2,P?SIZE
+ 40
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?WOODEN
+ .BYTE A?OLD
+ .PROP 2,P?CAPACITY
+ 40
+ .PROP 2,P?FDESC
+ STR?155
+ .BYTE 0
+ .ENDT
+
+T?POOL-ROOM:: .TABLE ; TABLE FOR OBJECT POOL-ROOM
+ .STRL "Pool Room"
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE POSTS-ROOM ; TO ROOM
+ .PROP 1,P?OUT ; UNCONDITIONAL EXIT
+ .BYTE POSTS-ROOM ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?191
+ .BYTE 0
+ .ENDT
+
+T?MENHIR:: .TABLE ; TABLE FOR OBJECT MENHIR
+ .STRL "enormous menhir"
+ .PROP 8,P?SYNONYM
+ W?MENHIR
+ W?ROCK
+ W?STONE
+ W?F
+ .PROP 2,P?ACTION
+ MENHIR-F
+ .PROP 3,P?ADJECTIVE
+ .BYTE A?HUGE
+ .BYTE A?HEAVY
+ .BYTE A?ENORMOUS
+ .BYTE 0
+ .ENDT
+
+T?TOPIARY:: .TABLE ; TABLE FOR OBJECT TOPIARY
+ .STRL "Topiary"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE FORMAL-GARDEN ; TO ROOM
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE CAROUSEL-ROOM ; TO ROOM
+ .PROP 2,P?ACTION
+ TOPIARY-F
+ .PROP 2,P?LDESC
+ STR?143
+ .BYTE 0
+ .ENDT
+
+T?CRYPT-OBJECT:: .TABLE ; TABLE FOR OBJECT CRYPT-OBJECT
+ .STRL "marble crypt"
+ .PROP 6,P?SYNONYM
+ W?TOMB
+ W?CRYPT
+ W?GRAVE
+ .PROP 2,P?ACTION
+ CRYPT-OBJECT-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?MARBLE
+ .PROP 2,P?TEXT
+ STR?134
+ .BYTE 0
+ .ENDT
+
+T?PEARL-NECKLACE:: .TABLE ; TABLE FOR OBJECT PEARL-NECKLACE
+ .STRL "pearl necklace"
+ .PROP 4,P?SYNONYM
+ W?NECKLACE
+ W?TREASURE
+ .PROP 2,P?SIZE
+ 10
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?PEARL
+ .PROP 2,P?VALUE
+ 15
+ .BYTE 0
+ .ENDT
+
+T?MACHINE-ROOM:: .TABLE ; TABLE FOR OBJECT MACHINE-ROOM
+ .STRL "Machine Room"
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE DINGY-CLOSET ; TO ROOM
+ .PROP 1,P?SW ; UNCONDITIONAL EXIT
+ .BYTE TOP-OF-WELL ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?177
+ .BYTE 0
+ .ENDT
+
+T?BLUE-CAKE:: .TABLE ; TABLE FOR OBJECT BLUE-CAKE
+ .STRL "cake frosted with blue letters"
+ .PROP 8,P?SYNONYM
+ W?CAKE
+ W?ICING
+ W?CAKES
+ W?LETTER
+ .PROP 2,P?ACTION
+ CAKE-F
+ .PROP 2,P?SIZE
+ 4
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?BLUE
+ .BYTE A?FROSTED
+ .BYTE 0
+ .ENDT
+
+T?STAND-1:: .TABLE ; TABLE FOR OBJECT STAND-1
+ .STRL "ruby stand"
+ .PROP 4,P?SYNONYM
+ W?STAND
+ W?STANDS
+ .PROP 2,P?ACTION
+ STAND-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?CRYSTAL
+ .BYTE A?RUBY
+ .PROP 2,P?CAPACITY
+ 10
+ .BYTE 0
+ .ENDT
+
+T?PENTAGRAM-ROOM:: .TABLE ; TABLE FOR OBJECT PENTAGRAM-ROOM
+ .STRL "Pentagram Room"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE WIZARDS-WORKSHOP ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?83
+ .PROP 2,P?GLOBAL
+ .BYTE GLOBAL-MENHIR
+ .BYTE GLOBAL-CERBERUS
+ .BYTE 0
+ .ENDT
+
+T?CLOTH-BAG:: .TABLE ; TABLE FOR OBJECT CLOTH-BAG
+ .STRL "cloth bag"
+ .PROP 2,P?SYNONYM
+ W?BAG
+ .PROP 2,P?ACTION
+ BCONTENTS
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?CLOTH
+ .BYTE 0
+ .ENDT
+
+T?WANDS:: .TABLE ; TABLE FOR OBJECT WANDS
+ .STRL "set of used wands"
+ .PROP 8,P?SYNONYM
+ W?WANDS
+ W?WAND
+ W?RACK
+ W?SET
+ .PROP 2,P?ACTION
+ TROPHY-PSEUDO
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?WORN
+ .BYTE A?USED
+ .BYTE 0
+ .ENDT
+
+T?RUBY:: .TABLE ; TABLE FOR OBJECT RUBY
+ .STRL "ruby"
+ .PROP 4,P?SYNONYM
+ W?RUBY
+ W?TREASURE
+ .PROP 2,P?LDESC
+ STR?195
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?MOBY
+ .PROP 2,P?VALUE
+ 15
+ .BYTE 0
+ .ENDT
+
+T?ROBOT:: .TABLE ; TABLE FOR OBJECT ROBOT
+ .STRL "robot"
+ .PROP 2,P?SYNONYM
+ W?ROBOT
+ .PROP 2,P?ACTION
+ ROBOT-F
+ .BYTE 0
+ .ENDT
+
+T?STAND-3:: .TABLE ; TABLE FOR OBJECT STAND-3
+ .STRL "diamond stand"
+ .PROP 4,P?SYNONYM
+ W?STAND
+ W?STANDS
+ .PROP 2,P?ACTION
+ STAND-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?DIAMOND
+ .BYTE A?CRYSTAL
+ .PROP 2,P?CAPACITY
+ 10
+ .BYTE 0
+ .ENDT
+
+T?PLACE-MAT:: .TABLE ; TABLE FOR OBJECT PLACE-MAT
+ .STRL "place mat"
+ .PROP 4,P?SYNONYM
+ W?MAT
+ W?PLACEM
+ .PROP 2,P?ACTION
+ PLACE-MAT-F
+ .PROP 2,P?SIZE
+ 12
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?PLACE
+ .PROP 2,P?CAPACITY
+ 20
+ .BYTE 0
+ .ENDT
+
+T?EXPLOSION:: .TABLE ; TABLE FOR OBJECT EXPLOSION
+ .STRL "debris from an explosion"
+ .PROP 2,P?SYNONYM
+ W?KREBF
+ .PROP 2,P?LDESC
+ STR?221
+ .BYTE 0
+ .ENDT
+
+T?STREAM:: .TABLE ; TABLE FOR OBJECT STREAM
+ .STRL "stream"
+ .PROP 2,P?SYNONYM
+ W?STREAM
+ .PROP 2,P?ACTION
+ STREAM-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?COLD
+ .BYTE 0
+ .ENDT
+
+T?CHASM:: .TABLE ; TABLE FOR OBJECT CHASM
+ .STRL "chasm"
+ .PROP 4,P?SYNONYM
+ W?CHASM
+ W?RAVINE
+ .PROP 2,P?ACTION
+ CHASM-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?DEEP
+ .BYTE 0
+ .ENDT
+
+T?TEAPOT:: .TABLE ; TABLE FOR OBJECT TEAPOT
+ .STRL "china teapot"
+ .PROP 4,P?SYNONYM
+ W?TEAPOT
+ W?POT
+ .PROP 2,P?ACTION
+ TEAPOT-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?CHINA
+ .BYTE A?TEA
+ .PROP 2,P?CAPACITY
+ 4
+ .BYTE 0
+ .ENDT
+
+T?KEYHOLE-2:: .TABLE ; TABLE FOR OBJECT KEYHOLE-2
+ .STRL "keyhole"
+ .PROP 4,P?SYNONYM
+ W?KEYHOLE
+ W?HOLE
+ .PROP 2,P?ACTION
+ PKEYHOLE-F
+ .BYTE 0
+ .ENDT
+
+T?DUSTY-ROOM:: .TABLE ; TABLE FOR OBJECT DUSTY-ROOM
+ .STRL "Dusty Room"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE WIDE-LEDGE ; TO ROOM
+ .PROP 1,P?OUT ; UNCONDITIONAL EXIT
+ .BYTE WIDE-LEDGE ; TO ROOM
+ .PROP 2,P?ACTION
+ DUSTY-ROOM-F
+ .BYTE 0
+ .ENDT
+
+T?ICE:: .TABLE ; TABLE FOR OBJECT ICE
+ .STRL "glacier"
+ .PROP 6,P?SYNONYM
+ W?ICE
+ W?MASS
+ W?GLACIER
+ .PROP 2,P?ACTION
+ ICE-F
+ .PROP 2,P?LDESC
+ STR?167
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?COLD
+ .BYTE A?ICY
+ .BYTE 0
+ .ENDT
+
+T?ZORKMID:: .TABLE ; TABLE FOR OBJECT ZORKMID
+ .STRL "zorkmid"
+ .PROP 2,P?SYNONYM
+ W?ZORKMID
+ .PROP 2,P?ACTION
+ ZORKMID-F
+ .BYTE 0
+ .ENDT
+
+T?CRYPT:: .TABLE ; TABLE FOR OBJECT CRYPT
+ .STRL "Crypt"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE CERBERUS-ROOM ; TO ROOM
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE ZORK3 ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?132
+ .PROP 2,P?VALUE
+ 2
+ .BYTE 0
+ .ENDT
+
+T?HEADS:: .TABLE ; TABLE FOR OBJECT HEADS
+ .STRL "set of poled heads"
+ .PROP 8,P?SYNONYM
+ W?HEADS
+ W?HEAD
+ W?POLE
+ W?POLES
+ .PROP 2,P?ACTION
+ HEADS-F
+ .BYTE 0
+ .ENDT
+
+T?HEDGES:: .TABLE ; TABLE FOR OBJECT HEDGES
+ .STRL "hedge"
+ .PROP 4,P?SYNONYM
+ W?HEDGE
+ W?HEDGES
+ .PROP 2,P?ACTION
+ HEDGES-F
+ .BYTE 0
+ .ENDT
+
+T?POSTS-ROOM:: .TABLE ; TABLE FOR OBJECT POSTS-ROOM
+ .STRL "Posts Room"
+ .PROP 1,P?EAST ; UNCONDITIONAL EXIT
+ .BYTE POOL-ROOM ; TO ROOM
+ .PROP 2,P?WEST ; IMPOSSIBLE EXIT
+ STR?190 ; FAILURE MESSAGE
+ .PROP 2,P?ACTION
+ POSTS-ROOM-F
+ .PROP 2,P?LDESC
+ STR?189
+ .PROP 2,P?VALUE
+ 10
+ .PROP 1,P?GLOBAL
+ .BYTE CHASM
+ .BYTE 0
+ .ENDT
+
+T?RECEPTACLE:: .TABLE ; TABLE FOR OBJECT RECEPTACLE
+ .STRL "receptacle"
+ .PROP 2,P?SYNONYM
+ W?RECEPTACLE
+ .PROP 2,P?ACTION
+ BCONTENTS
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?METAL
+ .PROP 2,P?CAPACITY
+ 6
+ .BYTE 0
+ .ENDT
+
+T?GOLD-KEY:: .TABLE ; TABLE FOR OBJECT GOLD-KEY
+ .STRL "delicate gold key"
+ .PROP 4,P?SYNONYM
+ W?KEY
+ W?TREASURE
+ .PROP 2,P?ACTION
+ UNICORN-F
+ .PROP 2,P?SIZE
+ 3
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?DELICATE
+ .BYTE A?GOLD
+ .PROP 2,P?VALUE
+ 15
+ .BYTE 0
+ .ENDT
+
+T?KENNEL:: .TABLE ; TABLE FOR OBJECT KENNEL
+ .STRL "Kennel"
+ .PROP 4,P?NE ; CONDITIONAL EXIT
+ .BYTE MENHIR-ROOM ; TO ROOM
+ .BYTE MENHIR-POSITION ; IF FLAG IS TRUE
+ STR?124 ; FAILURE MESSAGE
+ .PROP 4,P?OUT ; CONDITIONAL EXIT
+ .BYTE MENHIR-ROOM ; TO ROOM
+ .BYTE MENHIR-POSITION ; IF FLAG IS TRUE
+ STR?124 ; FAILURE MESSAGE
+ .PROP 2,P?LDESC
+ STR?125
+ .PROP 1,P?GLOBAL
+ .BYTE MENHIR
+ .BYTE 0
+ .ENDT
+
+T?PATH-OBJECT:: .TABLE ; TABLE FOR OBJECT PATH-OBJECT
+ .STRL "passage"
+ .PROP 6,P?SYNONYM
+ W?PATH
+ W?PASSAGE
+ W?TUNNEL
+ .PROP 2,P?ACTION
+ PATH-OBJECT-F
+ .PROP 5,P?ADJECTIVE
+ .BYTE A?DARK
+ .BYTE A?DAMP
+ .BYTE A?SMOKEY
+ .BYTE A?SCORCHED
+ .BYTE A?NARROW
+ .BYTE 0
+ .ENDT
+
+T?KEYHOLE-1:: .TABLE ; TABLE FOR OBJECT KEYHOLE-1
+ .STRL "keyhole"
+ .PROP 4,P?SYNONYM
+ W?KEYHOLE
+ W?HOLE
+ .PROP 2,P?ACTION
+ PKEYHOLE-F
+ .BYTE 0
+ .ENDT
+
+T?CANDY:: .TABLE ; TABLE FOR OBJECT CANDY
+ .STRL "package of candy"
+ .PROP 6,P?SYNONYM
+ W?PACKAGE
+ W?CANDY
+ W?INSECTS
+ .PROP 2,P?ACTION
+ CANDY-F
+ .PROP 2,P?LDESC
+ STR?193
+ .PROP 2,P?SIZE
+ 8
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?CANDIED
+ .BYTE A?RARE
+ .PROP 2,P?VALUE
+ 15
+ .BYTE 0
+ .ENDT
+
+T?CIRCULAR-ROOM:: .TABLE ; TABLE FOR OBJECT CIRCULAR-ROOM
+ .STRL "Circular Room"
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE RIDDLE-ROOM ; TO ROOM
+ .PROP 2,P?UP ; IMPOSSIBLE EXIT
+ STR?169 ; FAILURE MESSAGE
+ .PROP 2,P?LDESC
+ STR?168
+ .PROP 1,P?GLOBAL
+ .BYTE WELL
+ .BYTE 0
+ .ENDT
+
+T?SAFE:: .TABLE ; TABLE FOR OBJECT SAFE
+ .STRL "box"
+ .PROP 4,P?SYNONYM
+ W?SAFE
+ W?BOX
+ .PROP 2,P?ACTION
+ SAFE-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?STEEL
+ .BYTE A?RUSTY
+ .PROP 2,P?CAPACITY
+ 15
+ .BYTE 0
+ .ENDT
+
+T?PDOOR:: .TABLE ; TABLE FOR OBJECT PDOOR
+ .STRL "door of oak"
+ .PROP 2,P?SYNONYM
+ W?DOOR
+ .PROP 2,P?ACTION
+ PDOOR-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?WOODEN
+ .BYTE A?OAK
+ .BYTE 0
+ .ENDT
+
+T?BALLOON-LABEL:: .TABLE ; TABLE FOR OBJECT BALLOON-LABEL
+ .STRL "blue label"
+ .PROP 2,P?SYNONYM
+ W?LABEL
+ .PROP 2,P?LDESC
+ STR?202
+ .PROP 2,P?SIZE
+ 1
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?BLUE
+ .PROP 2,P?TEXT
+ STR?203
+ .BYTE 0
+ .ENDT
+
+T?LIBRARY:: .TABLE ; TABLE FOR OBJECT LIBRARY
+ .STRL "Library"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE NARROW-LEDGE ; TO ROOM
+ .PROP 1,P?OUT ; UNCONDITIONAL EXIT
+ .BYTE NARROW-LEDGE ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?208
+ .BYTE 0
+ .ENDT
+
+T?VIOLIN:: .TABLE ; TABLE FOR OBJECT VIOLIN
+ .STRL "fancy violin"
+ .PROP 6,P?SYNONYM
+ W?STRADIVARIUS
+ W?VIOLIN
+ W?TREASURE
+ .PROP 2,P?ACTION
+ VIOLIN-F
+ .PROP 2,P?LDESC
+ STR?120
+ .PROP 2,P?SIZE
+ 10
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?FANCY
+ .PROP 2,P?VALUE
+ 20
+ .BYTE 0
+ .ENDT
+
+T?CAROUSEL-ROOM:: .TABLE ; TABLE FOR OBJECT CAROUSEL-ROOM
+ .STRL "Carousel Room"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE DEEP-FORD ; TO ROOM
+ .PROP 1,P?EAST ; UNCONDITIONAL EXIT
+ .BYTE TOPIARY ; TO ROOM
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE ROOM-8 ; TO ROOM
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE MENHIR-ROOM ; TO ROOM
+ .PROP 1,P?NE ; UNCONDITIONAL EXIT
+ .BYTE DARK-TUNNEL ; TO ROOM
+ .PROP 1,P?NW ; UNCONDITIONAL EXIT
+ .BYTE COOL-ROOM ; TO ROOM
+ .PROP 1,P?SE ; UNCONDITIONAL EXIT
+ .BYTE RIDDLE-ROOM ; TO ROOM
+ .PROP 1,P?SW ; UNCONDITIONAL EXIT
+ .BYTE GUARDED-ROOM ; TO ROOM
+ .PROP 2,P?ACTION
+ CAROUSEL-ROOM-F
+ .BYTE 0
+ .ENDT
+
+T?CAGE-OBJECT:: .TABLE ; TABLE FOR OBJECT CAGE-OBJECT
+ .STRL "solid steel cage"
+ .PROP 2,P?SYNONYM
+ W?CAGE
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?STEEL
+ .BYTE A?SOLID
+ .BYTE 0
+ .ENDT
+
+T?CROWN:: .TABLE ; TABLE FOR OBJECT CROWN
+ .STRL "gaudy crown"
+ .PROP 4,P?SYNONYM
+ W?CROWN
+ W?TREASURE
+ .PROP 2,P?LDESC
+ STR?218
+ .PROP 2,P?SIZE
+ 10
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?GAUDY
+ .PROP 2,P?VALUE
+ 20
+ .PROP 2,P?FDESC
+ STR?217
+ .BYTE 0
+ .ENDT
+
+T?GUARDED-ROOM:: .TABLE ; TABLE FOR OBJECT GUARDED-ROOM
+ .STRL "Guarded Room"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE ICE-ROOM ; TO ROOM
+ .PROP 5,P?SOUTH ; CONDITIONAL EXIT
+ .BYTE TROPHY-ROOM ; TO ROOM
+ .BYTE WIZ-DOOR ; IF DOOR IS OPEN
+ 0 ; FAILURE MESSAGE
+ .BYTE 0
+ .PROP 5,P?IN ; CONDITIONAL EXIT
+ .BYTE TROPHY-ROOM ; TO ROOM
+ .BYTE WIZ-DOOR ; IF DOOR IS OPEN
+ 0 ; FAILURE MESSAGE
+ .BYTE 0
+ .PROP 2,P?ACTION
+ GUARDED-ROOM-F
+ .PROP 1,P?GLOBAL
+ .BYTE WIZ-DOOR
+ .BYTE 0
+ .ENDT
+
+T?LAMP:: .TABLE ; TABLE FOR OBJECT LAMP
+ .STRL "lamp"
+ .PROP 6,P?SYNONYM
+ W?LAMP
+ W?LANTERN
+ W?LIGHT
+ .PROP 2,P?ACTION
+ LAMP-F
+ .PROP 2,P?SIZE
+ 15
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?BRASS
+ .PROP 2,P?FDESC
+ STR?111
+ .BYTE 0
+ .ENDT
+
+T?PRINCESS:: .TABLE ; TABLE FOR OBJECT PRINCESS
+ .STRL "beautiful princess"
+ .PROP 6,P?SYNONYM
+ W?PRINCESS
+ W?WOMAN
+ W?LADY
+ .PROP 2,P?ACTION
+ PRINCESS-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?BEAUTIFUL
+ .BYTE A?YOUNG
+ .PROP 2,P?FDESC
+ STR?157
+ .BYTE 0
+ .ENDT
+
+T?ALICE-TABLE:: .TABLE ; TABLE FOR OBJECT ALICE-TABLE
+ .STRL "table"
+ .PROP 2,P?SYNONYM
+ W?TABLE
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?OBLONG
+ .PROP 2,P?CAPACITY
+ 50
+ .BYTE 0
+ .ENDT
+
+T?FORMAL-GARDEN:: .TABLE ; TABLE FOR OBJECT FORMAL-GARDEN
+ .STRL "Formal Garden"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE DARK-TUNNEL ; TO ROOM
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE TOPIARY ; TO ROOM
+ .PROP 1,P?IN ; UNCONDITIONAL EXIT
+ .BYTE GAZEBO ; TO ROOM
+ .PROP 2,P?ACTION
+ FORMAL-GARDEN-F
+ .PROP 2,P?LDESC
+ STR?138
+ .PROP 1,P?GLOBAL
+ .BYTE GAZEBO-OBJECT
+ .BYTE 0
+ .ENDT
+
+T?DARK-TUNNEL:: .TABLE ; TABLE FOR OBJECT DARK-TUNNEL
+ .STRL "Dark Tunnel"
+ .PROP 4,P?WEST ; CONDITIONAL EXIT
+ .BYTE DEEP-FORD ; TO ROOM
+ .BYTE SECRET-DOOR ; IF FLAG IS TRUE
+ 0 ; FAILURE MESSAGE
+ .PROP 1,P?NE ; UNCONDITIONAL EXIT
+ .BYTE SHALLOW-FORD ; TO ROOM
+ .PROP 1,P?SE ; UNCONDITIONAL EXIT
+ .BYTE FORMAL-GARDEN ; TO ROOM
+ .PROP 1,P?SW ; UNCONDITIONAL EXIT
+ .BYTE CAROUSEL-ROOM ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?117
+ .BYTE 0
+ .ENDT
+
+T?MENHIR-ROOM:: .TABLE ; TABLE FOR OBJECT MENHIR-ROOM
+ .STRL "Menhir Room"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE CAROUSEL-ROOM ; TO ROOM
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE CERBERUS-ROOM ; TO ROOM
+ .PROP 4,P?SW ; CONDITIONAL EXIT
+ .BYTE KENNEL ; TO ROOM
+ .BYTE MENHIR-POSITION ; IF FLAG IS TRUE
+ STR?124 ; FAILURE MESSAGE
+ .PROP 2,P?ACTION
+ MENHIR-ROOM-F
+ .PROP 1,P?GLOBAL
+ .BYTE MENHIR
+ .BYTE 0
+ .ENDT
+
+T?CERBERUS-ROOM:: .TABLE ; TABLE FOR OBJECT CERBERUS-ROOM
+ .STRL "Cerberus Room"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE MENHIR-ROOM ; TO ROOM
+ .PROP 4,P?SOUTH ; CONDITIONAL EXIT
+ .BYTE CRYPT ; TO ROOM
+ .BYTE CERBERUS-LEASHED ; IF FLAG IS TRUE
+ STR?129 ; FAILURE MESSAGE
+ .PROP 4,P?IN ; CONDITIONAL EXIT
+ .BYTE CRYPT ; TO ROOM
+ .BYTE CERBERUS-LEASHED ; IF FLAG IS TRUE
+ STR?129 ; FAILURE MESSAGE
+ .PROP 2,P?LDESC
+ STR?128
+ .PROP 8,P?PSEUDO
+ W?TOMB ; NAME
+ TOMB-PSEUDO ; HANDLER
+ W?CRYPT ; NAME
+ TOMB-PSEUDO ; HANDLER
+ .BYTE 0
+ .ENDT
+
+T?GLOBAL-MENHIR:: .TABLE ; TABLE FOR OBJECT GLOBAL-MENHIR
+ .STRL "enormous menhir"
+ .PROP 6,P?SYNONYM
+ W?MENHIR
+ W?ROCK
+ W?STONE
+ .PROP 2,P?ACTION
+ GLOBAL-MENHIR-F
+ .PROP 3,P?ADJECTIVE
+ .BYTE A?HUGE
+ .BYTE A?HEAVY
+ .BYTE A?ENORMOUS
+ .BYTE 0
+ .ENDT
+
+T?BALLOON:: .TABLE ; TABLE FOR OBJECT BALLOON
+ .STRL "basket"
+ .PROP 4,P?SYNONYM
+ W?BALLOON
+ W?BASKET
+ .PROP 2,P?ACTION
+ BALLOON-F
+ .PROP 2,P?SIZE
+ 70
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?WICKER
+ .PROP 2,P?CAPACITY
+ 100
+ .PROP 2,P?VTYPE
+ 0
+ .PROP 2,P?DESCFCN
+ BALLOON-F
+ .BYTE 0
+ .ENDT
+
+T?BRAIDED-WIRE:: .TABLE ; TABLE FOR OBJECT BRAIDED-WIRE
+ .STRL "braided wire"
+ .PROP 4,P?SYNONYM
+ W?ROPE
+ W?WIRE
+ .PROP 2,P?ACTION
+ BRAIDED-WIRE-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?BRAIDED
+ .BYTE 0
+ .ENDT
+
+T?GRUE:: .TABLE ; TABLE FOR OBJECT GRUE
+ .STRL "lurking grue"
+ .PROP 2,P?SYNONYM
+ W?GRUE
+ .PROP 2,P?ACTION
+ GRUE-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?LURKING
+ .BYTE 0
+ .ENDT
+
+T?PWINDOW:: .TABLE ; TABLE FOR OBJECT PWINDOW
+ .STRL "barred window"
+ .PROP 2,P?SYNONYM
+ W?WINDOW
+ .PROP 2,P?ACTION
+ PWINDOW-F
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?BARRED
+ .BYTE 0
+ .ENDT
+
+T?COOL-ROOM:: .TABLE ; TABLE FOR OBJECT COOL-ROOM
+ .STRL "Cool Room"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE STONE-BRIDGE ; TO ROOM
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE ICE-ROOM ; TO ROOM
+ .PROP 1,P?SE ; UNCONDITIONAL EXIT
+ .BYTE CAROUSEL-ROOM ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?165
+ .PROP 1,P?GLOBAL
+ .BYTE BRIDGE
+ .BYTE 0
+ .ENDT
+
+T?DEGREE:: .TABLE ; TABLE FOR OBJECT DEGREE
+ .STRL "degree"
+ .PROP 4,P?SYNONYM
+ W?DEGREE
+ W?DIPLOMA
+ .PROP 2,P?ACTION
+ TROPHY-PSEUDO
+ .PROP 2,P?TEXT
+ STR?80
+ .BYTE 0
+ .ENDT
+
+T?VOLCANO-BOTTOM:: .TABLE ; TABLE FOR OBJECT VOLCANO-BOTTOM
+ .STRL "Volcano Bottom"
+ .PROP 1,P?EAST ; UNCONDITIONAL EXIT
+ .BYTE ICE-ROOM ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?194
+ .BYTE 0
+ .ENDT
+
+T?BILLS:: .TABLE ; TABLE FOR OBJECT BILLS
+ .STRL "stack of zorkmid bills"
+ .PROP 8,P?SYNONYM
+ W?BILLS
+ W?STACK
+ W?MONEY
+ W?TREASURE
+ .PROP 2,P?ACTION
+ BILLS-F
+ .PROP 2,P?LDESC
+ STR?122
+ .PROP 2,P?SIZE
+ 10
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?NEAT
+ .BYTE A?ZORKMID
+ .PROP 2,P?VALUE
+ 25
+ .PROP 2,P?TEXT
+ STR?123
+ .BYTE 0
+ .ENDT
+
+T?GAZEBO-TABLE:: .TABLE ; TABLE FOR OBJECT GAZEBO-TABLE
+ .STRL "table"
+ .PROP 2,P?SYNONYM
+ W?TABLE
+ .PROP 2,P?CAPACITY
+ 100
+ .BYTE 0
+ .ENDT
+
+T?RED-CAKE:: .TABLE ; TABLE FOR OBJECT RED-CAKE
+ .STRL "cake frosted with red letters"
+ .PROP 8,P?SYNONYM
+ W?CAKE
+ W?CAKES
+ W?ICING
+ W?LETTER
+ .PROP 2,P?ACTION
+ CAKE-F
+ .PROP 2,P?SIZE
+ 4
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?RED
+ .BYTE A?FROSTED
+ .BYTE 0
+ .ENDT
+
+T?NEWSPAPER:: .TABLE ; TABLE FOR OBJECT NEWSPAPER
+ .STRL "newspaper"
+ .PROP 4,P?SYNONYM
+ W?PAPER
+ W?NEWSPAPER
+ .PROP 2,P?ACTION
+ NEWSPAPER-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?NEWS
+ .BYTE A?NEWSPAPER
+ .BYTE 0
+ .ENDT
+
+T?LEDGE-IN-RAVINE:: .TABLE ; TABLE FOR OBJECT LEDGE-IN-RAVINE
+ .STRL "Ledge in Ravine"
+ .PROP 5,P?NORTH ; CONDITIONAL EXIT
+ .BYTE DREARY-ROOM ; TO ROOM
+ .BYTE PDOOR ; IF DOOR IS OPEN
+ 0 ; FAILURE MESSAGE
+ .BYTE 0
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE DRAGON-ROOM ; TO ROOM
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE DEEP-FORD ; TO ROOM
+ .PROP 1,P?DOWN ; UNCONDITIONAL EXIT
+ .BYTE DEEP-FORD ; TO ROOM
+ .PROP 5,P?IN ; CONDITIONAL EXIT
+ .BYTE DREARY-ROOM ; TO ROOM
+ .BYTE PDOOR ; IF DOOR IS OPEN
+ 0 ; FAILURE MESSAGE
+ .BYTE 0
+ .PROP 2,P?ACTION
+ LEDGE-IN-RAVINE-F
+ .PROP 4,P?GLOBAL
+ .BYTE CHASM
+ .BYTE PDOOR
+ .BYTE STREAM
+ .BYTE PWINDOW
+ .BYTE 0
+ .ENDT
+
+T?GREAT-CAVERN:: .TABLE ; TABLE FOR OBJECT GREAT-CAVERN
+ .STRL "Great Cavern"
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE SHALLOW-FORD ; TO ROOM
+ .PROP 1,P?NE ; UNCONDITIONAL EXIT
+ .BYTE INSIDE-THE-BARROW ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?115
+ .BYTE 0
+ .ENDT
+
+T?WATER:: .TABLE ; TABLE FOR OBJECT WATER
+ .STRL "quantity of water"
+ .PROP 4,P?SYNONYM
+ W?WATER
+ W?LIQUID
+ .PROP 2,P?ACTION
+ WATER-F
+ .PROP 2,P?LDESC
+ STR?21
+ .PROP 2,P?SIZE
+ 4
+ .BYTE 0
+ .ENDT
+
+T?GROUND:: .TABLE ; TABLE FOR OBJECT GROUND
+ .STRL "ground"
+ .PROP 6,P?SYNONYM
+ W?GROUND
+ W?DIRT
+ W?FLOOR
+ .PROP 2,P?ACTION
+ GROUND-F
+ .BYTE 0
+ .ENDT
+
+T?GLOBAL-PALANTIR:: .TABLE ; TABLE FOR OBJECT GLOBAL-PALANTIR
+ .STRL "sphere"
+ .PROP 2,P?SYNONYM
+ W?SPHERE
+ .PROP 2,P?ACTION
+ GLOBAL-PALANTIR-F
+ .PROP 4,P?ADJECTIVE
+ .BYTE A?RED
+ .BYTE A?BLUE
+ .BYTE A?WHITE
+ .BYTE A?CRYSTAL
+ .BYTE 0
+ .ENDT
+
+T?TOP-ETCHINGS:: .TABLE ; TABLE FOR OBJECT TOP-ETCHINGS
+ .STRL "wall with etchings"
+ .PROP 4,P?SYNONYM
+ W?ETCHINGS
+ W?WALL
+ .PROP 2,P?TEXT
+ STR?175
+ .BYTE 0
+ .ENDT
+
+T?TEA-ROOM:: .TABLE ; TABLE FOR OBJECT TEA-ROOM
+ .STRL "Tea Room"
+ .PROP 2,P?EAST ; IMPOSSIBLE EXIT
+ STR?183 ; FAILURE MESSAGE
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE TOP-OF-WELL ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?182
+ .PROP 4,P?PSEUDO
+ W?HOLE ; NAME
+ ALICE-HOLE ; HANDLER
+ .BYTE 0
+ .ENDT
+
+T?NOT-HERE-OBJECT:: .TABLE ; TABLE FOR OBJECT NOT-HERE-OBJECT
+ .STRL "thing"
+ .PROP 2,P?ACTION
+ NOT-HERE-OBJECT-F
+ .BYTE 0
+ .ENDT
+
+T?DRAGON:: .TABLE ; TABLE FOR OBJECT DRAGON
+ .STRL "huge red dragon"
+ .PROP 2,P?SYNONYM
+ W?DRAGON
+ .PROP 2,P?ACTION
+ DRAGON-F
+ .PROP 2,P?LDESC
+ STR?147
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?RED
+ .BYTE A?HUGE
+ .PROP 2,P?FDESC
+ STR?148
+ .BYTE 0
+ .ENDT
+
+T?POSTS:: .TABLE ; TABLE FOR OBJECT POSTS
+ .STRL "group of wooden posts"
+ .PROP 4,P?SYNONYM
+ W?POSTS
+ W?POST
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?WOODEN
+ .BYTE 0
+ .ENDT
+
+T?INTNUM:: .TABLE ; TABLE FOR OBJECT INTNUM
+ .STRL "number"
+ .PROP 2,P?SYNONYM
+ W?INTNUM
+ .BYTE 0
+ .ENDT
+
+T?STAND-4:: .TABLE ; TABLE FOR OBJECT STAND-4
+ .STRL "black obsidian stand"
+ .PROP 4,P?SYNONYM
+ W?STAND
+ W?STANDS
+ .PROP 2,P?ACTION
+ STAND-F
+ .PROP 2,P?SIZE
+ 5
+ .PROP 4,P?ADJECTIVE
+ .BYTE A?OBSIDIAN
+ .BYTE A?BLACK
+ .BYTE A?CRYSTAL
+ .BYTE A?STRANGE
+ .PROP 2,P?CAPACITY
+ 10
+ .BYTE 0
+ .ENDT
+
+T?PURPLE-BOOK:: .TABLE ; TABLE FOR OBJECT PURPLE-BOOK
+ .STRL "purple book"
+ .PROP 4,P?SYNONYM
+ W?BOOK
+ W?BOOKS
+ .PROP 2,P?ACTION
+ PURPLE-BOOK-F
+ .PROP 2,P?SIZE
+ 10
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?PURPLE
+ .PROP 2,P?TEXT
+ STR?210
+ .PROP 2,P?CAPACITY
+ 2
+ .PROP 2,P?FDESC
+ STR?213
+ .BYTE 0
+ .ENDT
+
+T?DRAGON-LAIR:: .TABLE ; TABLE FOR OBJECT DRAGON-LAIR
+ .STRL "Dragon's Lair"
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE DRAGON-ROOM ; TO ROOM
+ .PROP 1,P?OUT ; UNCONDITIONAL EXIT
+ .BYTE DRAGON-ROOM ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?154
+ .BYTE 0
+ .ENDT
+
+T?PENTAGRAM:: .TABLE ; TABLE FOR OBJECT PENTAGRAM
+ .STRL "pentagram"
+ .PROP 6,P?SYNONYM
+ W?PENTAGRAM
+ W?STAR
+ W?CIRCLE
+ .PROP 2,P?ACTION
+ PENTAGRAM-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?GREAT
+ .BYTE A?BLACK
+ .PROP 2,P?CAPACITY
+ 200
+ .BYTE 0
+ .ENDT
+
+T?ROOM-8:: .TABLE ; TABLE FOR OBJECT ROOM-8
+ .STRL "Room 8"
+ .PROP 1,P?EAST ; UNCONDITIONAL EXIT
+ .BYTE CAROUSEL-ROOM ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?121
+ .BYTE 0
+ .ENDT
+
+T?GLOBAL-CERBERUS:: .TABLE ; TABLE FOR OBJECT GLOBAL-CERBERUS
+ .STRL "three-headed dog"
+ .PROP 8,P?SYNONYM
+ W?CERBERUS
+ W?DOG
+ W?HOUND
+ W?MONSTER
+ .PROP 2,P?ACTION
+ GLOBAL-CERBERUS-F
+ .PROP 4,P?ADJECTIVE
+ .BYTE A?HUGE
+ .BYTE A?GIANT
+ .BYTE A?THREE
+ .BYTE A?HEADED
+ .BYTE 0
+ .ENDT
+
+T?DEAD-PALANTIR-4:: .TABLE ; TABLE FOR OBJECT DEAD-PALANTIR-4
+ .STRL "Room of Black Mist"
+ .PROP 2,P?ACTION
+ DEAD-PALANTIR-F
+ .BYTE 0
+ .ENDT
+
+T?FUSE:: .TABLE ; TABLE FOR OBJECT FUSE
+ .STRL "black string"
+ .PROP 6,P?SYNONYM
+ W?FUSE
+ W?STRING
+ W?COIL
+ .PROP 2,P?ACTION
+ FUSE-F
+ .PROP 2,P?LDESC
+ STR?220
+ .PROP 2,P?SIZE
+ 1
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?BLACK
+ .BYTE A?THIN
+ .BYTE 0
+ .ENDT
+
+T?STAND-2:: .TABLE ; TABLE FOR OBJECT STAND-2
+ .STRL "sapphire stand"
+ .PROP 4,P?SYNONYM
+ W?STAND
+ W?STANDS
+ .PROP 2,P?ACTION
+ STAND-F
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?CRYSTAL
+ .BYTE A?SAPPHIRE
+ .PROP 2,P?CAPACITY
+ 10
+ .BYTE 0
+ .ENDT
+
+T?GREEN-CAKE:: .TABLE ; TABLE FOR OBJECT GREEN-CAKE
+ .STRL "cake frosted with green letters"
+ .PROP 8,P?SYNONYM
+ W?CAKE
+ W?ICING
+ W?CAKES
+ W?LETTER
+ .PROP 2,P?ACTION
+ GREEN-CAKE-F
+ .PROP 2,P?SIZE
+ 4
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?GREEN
+ .BYTE A?FROSTED
+ .PROP 2,P?TEXT
+ STR?185
+ .BYTE 0
+ .ENDT
+
+T?DEAD-PALANTIR-1:: .TABLE ; TABLE FOR OBJECT DEAD-PALANTIR-1
+ .STRL "Room of Red Mist"
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE DEAD-PALANTIR-2 ; TO ROOM
+ .PROP 2,P?ACTION
+ DEAD-PALANTIR-F
+ .PROP 1,P?GLOBAL
+ .BYTE GLOBAL-PALANTIR
+ .BYTE 0
+ .ENDT
+
+T?SWORD:: .TABLE ; TABLE FOR OBJECT SWORD
+ .STRL "elvish sword"
+ .PROP 4,P?SYNONYM
+ W?SWORD
+ W?BLADE
+ .PROP 2,P?LDESC
+ STR?118
+ .PROP 2,P?SIZE
+ 30
+ .PROP 3,P?ADJECTIVE
+ .BYTE A?ELVISH
+ .BYTE A?OLD
+ .BYTE A?ANTIQUE
+ .BYTE 0
+ .ENDT
+
+T?BRICK:: .TABLE ; TABLE FOR OBJECT BRICK
+ .STRL "brick"
+ .PROP 2,P?SYNONYM
+ W?BRICK
+ .PROP 2,P?ACTION
+ BRICK-F
+ .PROP 2,P?LDESC
+ STR?219
+ .PROP 2,P?SIZE
+ 9
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?SQUARE
+ .BYTE A?CLAY
+ .PROP 2,P?CAPACITY
+ 2
+ .BYTE 0
+ .ENDT
+
+T?DEAD-PALANTIR-2:: .TABLE ; TABLE FOR OBJECT DEAD-PALANTIR-2
+ .STRL "Room of Blue Mist"
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE DEAD-PALANTIR-3 ; TO ROOM
+ .PROP 2,P?ACTION
+ DEAD-PALANTIR-F
+ .PROP 1,P?GLOBAL
+ .BYTE GLOBAL-PALANTIR
+ .BYTE 0
+ .ENDT
+
+T?DEAD-PALANTIR-3:: .TABLE ; TABLE FOR OBJECT DEAD-PALANTIR-3
+ .STRL "Room of White Mist"
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE DEAD-PALANTIR-4 ; TO ROOM
+ .PROP 2,P?ACTION
+ DEAD-PALANTIR-F
+ .PROP 1,P?GLOBAL
+ .BYTE GLOBAL-PALANTIR
+ .BYTE 0
+ .ENDT
+
+T?ORANGE-CAKE:: .TABLE ; TABLE FOR OBJECT ORANGE-CAKE
+ .STRL "cake frosted with orange letters"
+ .PROP 8,P?SYNONYM
+ W?CAKE
+ W?CAKES
+ W?ICING
+ W?LETTER
+ .PROP 2,P?ACTION
+ CAKE-F
+ .PROP 2,P?SIZE
+ 4
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?ORANGE
+ .BYTE A?FROSTED
+ .BYTE 0
+ .ENDT
+
+T?VOLCANO-BY-WIDE-LEDGE:: .TABLE ; TABLE FOR OBJECT VOLCANO-BY-WIDE-LEDGE
+ .STRL "Volcano By Wide Ledge"
+ .PROP 1,P?WEST ; UNCONDITIONAL EXIT
+ .BYTE WIDE-LEDGE ; TO ROOM
+ .PROP 1,P?LAND ; UNCONDITIONAL EXIT
+ .BYTE WIDE-LEDGE ; TO ROOM
+ .PROP 2,P?ACTION
+ VOLCANO-BY-LEDGE-F
+ .BYTE 0
+ .ENDT
+
+T?ZORK3:: .TABLE ; TABLE FOR OBJECT ZORK3
+ .STRL "Landing"
+ .PROP 2,P?ACTION
+ ZORK3-F
+ .BYTE 0
+ .ENDT
+
+T?VOLCANO-BY-SMALL-LEDGE:: .TABLE ; TABLE FOR OBJECT VOLCANO-BY-SMALL-LEDGE
+ .STRL "Volcano By Small Ledge"
+ .PROP 1,P?EAST ; UNCONDITIONAL EXIT
+ .BYTE NARROW-LEDGE ; TO ROOM
+ .PROP 1,P?LAND ; UNCONDITIONAL EXIT
+ .BYTE NARROW-LEDGE ; TO ROOM
+ .PROP 2,P?ACTION
+ VOLCANO-BY-LEDGE-F
+ .BYTE 0
+ .ENDT
+
+T?DEEP-FORD:: .TABLE ; TABLE FOR OBJECT DEEP-FORD
+ .STRL "Deep Ford"
+ .PROP 1,P?NORTH ; UNCONDITIONAL EXIT
+ .BYTE LEDGE-IN-RAVINE ; TO ROOM
+ .PROP 4,P?EAST ; CONDITIONAL EXIT
+ .BYTE DARK-TUNNEL ; TO ROOM
+ .BYTE SECRET-DOOR ; IF FLAG IS TRUE
+ 0 ; FAILURE MESSAGE
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE CAROUSEL-ROOM ; TO ROOM
+ .PROP 1,P?UP ; UNCONDITIONAL EXIT
+ .BYTE LEDGE-IN-RAVINE ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?119
+ .PROP 2,P?GLOBAL
+ .BYTE GLOBAL-WATER
+ .BYTE STREAM
+ .BYTE 0
+ .ENDT
+
+T?VOLCANO-CORE:: .TABLE ; TABLE FOR OBJECT VOLCANO-CORE
+ .STRL "Volcano Core"
+ .PROP 2,P?LDESC
+ STR?204
+ .BYTE 0
+ .ENDT
+
+T?WHITE-BOOK:: .TABLE ; TABLE FOR OBJECT WHITE-BOOK
+ .STRL "white book"
+ .PROP 4,P?SYNONYM
+ W?BOOK
+ W?BOOKS
+ .PROP 2,P?ACTION
+ RANDOM-BOOK-F
+ .PROP 2,P?SIZE
+ 5
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?WHITE
+ .PROP 2,P?TEXT
+ STR?212
+ .PROP 2,P?CAPACITY
+ 2
+ .PROP 2,P?FDESC
+ STR?211
+ .BYTE 0
+ .ENDT
+
+T?DEMON:: .TABLE ; TABLE FOR OBJECT DEMON
+ .STRL "demon"
+ .PROP 6,P?SYNONYM
+ W?DEVIL
+ W?DEMON
+ W?GENIE
+ .PROP 2,P?ACTION
+ DEMON-F
+ .PROP 2,P?LDESC
+ STR?84
+ .BYTE 0
+ .ENDT
+
+T?AQUARIUM-ROOM:: .TABLE ; TABLE FOR OBJECT AQUARIUM-ROOM
+ .STRL "Aquarium Room"
+ .PROP 1,P?EAST ; UNCONDITIONAL EXIT
+ .BYTE TROPHY-ROOM ; TO ROOM
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE WIZARDS-QUARTERS ; TO ROOM
+ .PROP 1,P?IN ; UNCONDITIONAL EXIT
+ .BYTE MURKY-ROOM ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?93
+ .BYTE 0
+ .ENDT
+
+T?GAZEBO:: .TABLE ; TABLE FOR OBJECT GAZEBO
+ .STRL "Gazebo"
+ .PROP 1,P?OUT ; UNCONDITIONAL EXIT
+ .BYTE FORMAL-GARDEN ; TO ROOM
+ .PROP 2,P?LDESC
+ STR?140
+ .PROP 1,P?GLOBAL
+ .BYTE GAZEBO-OBJECT
+ .BYTE 0
+ .ENDT
+
+T?WALL:: .TABLE ; TABLE FOR OBJECT WALL
+ .STRL "wall"
+ .PROP 2,P?SYNONYM
+ W?WALL
+ .PROP 8,P?ADJECTIVE
+ .BYTE A?EAST
+ .BYTE A?EASTERN
+ .BYTE A?WEST
+ .BYTE A?WESTERN
+ .BYTE A?SOUTH
+ .BYTE A?SOUTHE
+ .BYTE A?NORTH
+ .BYTE A?NORTHE
+ .BYTE 0
+ .ENDT
+
+T?RIDDLE-ROOM:: .TABLE ; TABLE FOR OBJECT RIDDLE-ROOM
+ .STRL "Riddle Room"
+ .PROP 5,P?EAST ; CONDITIONAL EXIT
+ .BYTE CIRCULAR-ROOM ; TO ROOM
+ .BYTE RIDDLE-DOOR ; IF DOOR IS OPEN
+ 0 ; FAILURE MESSAGE
+ .BYTE 0
+ .PROP 1,P?NW ; UNCONDITIONAL EXIT
+ .BYTE CAROUSEL-ROOM ; TO ROOM
+ .PROP 2,P?ACTION
+ RIDDLE-ROOM-F
+ .PROP 4,P?PSEUDO
+ W?RIDDLE ; NAME
+ RIDDLE-PSEUDO ; HANDLER
+ .BYTE 0
+ .ENDT
+
+T?TOP-OF-WELL:: .TABLE ; TABLE FOR OBJECT TOP-OF-WELL
+ .STRL "Top of Well"
+ .PROP 1,P?EAST ; UNCONDITIONAL EXIT
+ .BYTE TEA-ROOM ; TO ROOM
+ .PROP 1,P?NE ; UNCONDITIONAL EXIT
+ .BYTE MACHINE-ROOM ; TO ROOM
+ .PROP 2,P?DOWN ; IMPOSSIBLE EXIT
+ STR?174 ; FAILURE MESSAGE
+ .PROP 2,P?LDESC
+ STR?173
+ .PROP 2,P?VALUE
+ 10
+ .PROP 1,P?GLOBAL
+ .BYTE WELL
+ .PROP 4,P?PSEUDO
+ W?CRACK ; NAME
+ CRACK-PSEUDO ; HANDLER
+ .BYTE 0
+ .ENDT
+
+T?ROBOT-LABEL:: .TABLE ; TABLE FOR OBJECT ROBOT-LABEL
+ .STRL "green piece of paper"
+ .PROP 4,P?SYNONYM
+ W?PAPER
+ W?PIECE
+ .PROP 2,P?SIZE
+ 3
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?GREEN
+ .PROP 2,P?TEXT
+ STR?176
+ .BYTE 0
+ .ENDT
+
+T?COIN:: .TABLE ; TABLE FOR OBJECT COIN
+ .STRL "priceless zorkmid"
+ .PROP 8,P?SYNONYM
+ W?COIN
+ W?ZORKMID
+ W?GOLD
+ W?TREASURE
+ .PROP 2,P?SIZE
+ 10
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?GOLD
+ .BYTE A?PRICELESS
+ .PROP 2,P?VALUE
+ 20
+ .PROP 2,P?TEXT
+ STR?207
+ .PROP 2,P?FDESC
+ STR?206
+ .BYTE 0
+ .ENDT
+
+T?LETTER-OPENER:: .TABLE ; TABLE FOR OBJECT LETTER-OPENER
+ .STRL "letter opener"
+ .PROP 2,P?SYNONYM
+ W?OPENER
+ .PROP 2,P?SIZE
+ 2
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?LETTER
+ .BYTE 0
+ .ENDT
+
+T?PSEUDO-OBJECT:: .TABLE ; TABLE FOR OBJECT PSEUDO-OBJECT
+ .STRL "pseudo"
+ .PROP 2,P?ACTION
+ ME-F
+ .BYTE 0
+ .ENDT
+
+T?DRAGON-ROOM:: .TABLE ; TABLE FOR OBJECT DRAGON-ROOM
+ .STRL "Dragon Room"
+ .PROP 4,P?NORTH ; CONDITIONAL EXIT
+ .BYTE DRAGON-LAIR ; TO ROOM
+ .BYTE ICE-MELTED ; IF FLAG IS TRUE
+ STR?146 ; FAILURE MESSAGE
+ .PROP 1,P?EAST ; UNCONDITIONAL EXIT
+ .BYTE LEDGE-IN-RAVINE ; TO ROOM
+ .PROP 1,P?SOUTH ; UNCONDITIONAL EXIT
+ .BYTE STONE-BRIDGE ; TO ROOM
+ .PROP 4,P?IN ; CONDITIONAL EXIT
+ .BYTE DRAGON-LAIR ; TO ROOM
+ .BYTE ICE-MELTED ; IF FLAG IS TRUE
+ STR?146 ; FAILURE MESSAGE
+ .PROP 2,P?LDESC
+ STR?145
+ .PROP 1,P?GLOBAL
+ .BYTE BRIDGE
+ .BYTE 0
+ .ENDT
+
+T?AQUARIUM:: .TABLE ; TABLE FOR OBJECT AQUARIUM
+ .STRL "aquarium"
+ .PROP 4,P?SYNONYM
+ W?AQUARIUM
+ W?GLASS
+ .PROP 2,P?ACTION
+ AQUARIUM-F
+ .PROP 2,P?LDESC
+ STR?94
+ .PROP 1,P?ADJECTIVE
+ .BYTE A?HUGE
+ .PROP 2,P?CAPACITY
+ 200
+ .BYTE 0
+ .ENDT
+
+T?PTABLE:: .TABLE ; TABLE FOR OBJECT PTABLE
+ .STRL "table"
+ .PROP 2,P?SYNONYM
+ W?TABLE
+ .PROP 2,P?ADJECTIVE
+ .BYTE A?DUSTY
+ .BYTE A?WOODEN
+ .PROP 2,P?CAPACITY
+ 40
+ .BYTE 0
+ .ENDT
+
+
+; IMPURE TABLES ARE DEFINED HERE
+
+IMPTBL::
+
+T?101::
+T?C-TABLE:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?102::
+T?P-CCTBL:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?202::
+T?P-LEXV:: .TABLE
+ .BYTE 59
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+T?302::
+T?AGAIN-LEXV:: .TABLE
+ .BYTE 59
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+T?402::
+T?RESERVE-LEXV:: .TABLE
+ .BYTE 59
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ 0
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+T?502::
+T?P-INBUF:: .TABLE
+ .BYTE 120
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+T?602::
+T?OOPS-INBUF:: .TABLE
+ .BYTE 120
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+T?702::
+T?OOPS-TABLE:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?802::
+T?P-ITBL:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?902::
+T?P-OTBL:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?1002::
+T?P-VTBL:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?1102::
+T?P-OVTBL:: .TABLE
+ 0
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+T?1202::
+T?P-PRSO:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?1302::
+T?P-PRSI:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?1402::
+T?P-BUTS:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?1502::
+T?P-MERGE:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?1602::
+T?P-OCLAUSE:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?104::
+T?INDENTS:: .TABLE
+ STR?14
+ STR?15
+ STR?16
+ STR?17
+ STR?18
+ STR?19
+ .ENDT
+
+T?105::
+T?HO-HUM:: .TABLE
+ 4
+ 0
+ STR?23
+ STR?24
+ STR?25
+ .ENDT
+
+T?205::
+T?YUKS:: .TABLE
+ 6
+ 0
+ STR?26
+ STR?27
+ STR?28
+ STR?29
+ STR?30
+ .ENDT
+
+T?106::
+T?SPELL-NAMES:: .TABLE
+ 9
+ STR?56
+ STR?57
+ STR?58
+ STR?59
+ STR?60
+ STR?61
+ STR?62
+ STR?63
+ STR?64
+ .ENDT
+
+T?206::
+T?SPELL-HINTS:: .TABLE
+ 9
+ STR?65
+ 0
+ STR?66
+ 0
+ STR?67
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+T?306::
+T?SPELL-STOPS:: .TABLE
+ 9
+ STR?68
+ 0
+ STR?69
+ 0
+ STR?70
+ STR?71
+ 0
+ 0
+ 0
+ .ENDT
+
+T?406::
+T?FANTASIES:: .TABLE
+ 8
+ STR?72
+ STR?73
+ STR?74
+ STR?75
+ STR?76
+ STR?77
+ STR?78
+ STR?79
+ .ENDT
+
+T?506::
+T?DEMON-THANKS:: .TABLE
+ 9
+ STR?87
+ STR?88
+ STR?89
+ STR?90
+ STR?91
+ STR?88
+ STR?89
+ STR?91
+ STR?92
+ .ENDT
+
+T?606::
+T?WIZQDESCS:: .TABLE
+ 6
+ STR?101
+ STR?102
+ STR?103
+ STR?104
+ STR?105
+ STR?106
+ .ENDT
+
+T?107::
+T?LAMP-TABLE:: .TABLE
+ 225
+ STR?112
+ 75
+ STR?113
+ 25
+ STR?114
+ 0
+ .ENDT
+
+T?207::
+T?CAROUSEL-EXITS:: .TABLE
+ COOL-ROOM
+ DARK-TUNNEL
+ DEEP-FORD
+ TOPIARY
+ RIDDLE-ROOM
+ MENHIR-ROOM
+ GUARDED-ROOM
+ .ENDT
+
+T?108::
+T?DRAGON-ATTACKS:: .TABLE
+ 4
+ STR?149
+ STR?150
+ STR?151
+ STR?152
+ .ENDT
+
+T?208::
+T?PRDIRS:: .TABLE
+ STR?137
+ DRAGON-ROOM
+ STR?136
+ P?SOUTH
+ STR?159
+ LEDGE-IN-RAVINE
+ STR?160
+ P?EAST
+ STR?137
+ DEEP-FORD
+ STR?136
+ P?SOUTH
+ STR?159
+ DARK-TUNNEL
+ STR?160
+ P?EAST
+ STR?137
+ FORMAL-GARDEN
+ STR?136
+ P?SOUTH
+ STR?161
+ GAZEBO
+ STR?162
+ P?IN
+ .ENDT
+
+T?110::
+T?BALLOON-UPS:: .TABLE
+ 3
+ VOLCANO-CORE
+ VOLCANO-BY-SMALL-LEDGE
+ VOLCANO-BY-WIDE-LEDGE
+ .ENDT
+
+T?210::
+T?BALLOON-FLOATS:: .TABLE
+ 4
+ NARROW-LEDGE
+ VOLCANO-BY-SMALL-LEDGE
+ WIDE-LEDGE
+ VOLCANO-BY-WIDE-LEDGE
+ .ENDT
+
+T?310::
+T?BALLOON-DOWNS:: .TABLE
+ 3
+ VOLCANO-BY-WIDE-LEDGE
+ VOLCANO-BY-SMALL-LEDGE
+ VOLCANO-CORE
+ .ENDT
+
+
+; END OF IMPURENESS
+
+IMPURE::
+
+
+
+; VERB TABLE IS DEFINED HERE
+
+VTBL:: .TABLE
+ ST?KISS
+ ST?SKIP
+ ST?INFLAT
+ ST?PULL
+ ST?PUT
+ ST?RAPE
+ ST?VERBOSE
+ ST?WALK
+ ST?QUIT
+ ST?FIND
+ ST?DESTROY
+ ST?UNLOCK
+ ST?READ
+ ST?SAY
+ ST?JUMP
+ ST?POUR
+ ST?WAIT
+ ST?TAKE
+ ST?COUNT
+ ST?RAISE
+ ST?FOLLOW
+ ST?VERSION
+ ST?#UNRECORD
+ ST?LIGHT
+ ST?MOVE
+ ST?PLAY
+ ST?OPEN
+ ST?#COMMAND
+ ST?BLOW
+ ST?KNOCK
+ ST?PICK
+ ST?DEFLATE
+ ST?#RANDOM
+ ST?STAND
+ ST?ENCHANT
+ ST?LISTEN
+ ST?TIE
+ ST?SAVE
+ ST?TELL
+ ST?THROW
+ ST?ZORK
+ ST?LOWER
+ ST?COMMAND
+ ST?TALK
+ ST?SHAKE
+ ST?INVENTORY
+ ST?ATTACK
+ ST?ENTER
+ ST?SEARCH
+ ST?DISEMBARK
+ ST?SWIM
+ ST?UNTIE
+ ST?CUT
+ ST?UNSCRIPT
+ ST?MELT
+ ST?PUSH
+ ST?RUB
+ ST?SUPER
+ ST?INCANT
+ ST?SCORE
+ ST?LOOK
+ ST?DROP
+ ST?LEAVE
+ ST?CURSE
+ ST?SCRIPT
+ ST?$VERIFY
+ ST?EXTINGUISH
+ ST?SWING
+ ST?RESTART
+ ST?POKE
+ ST?SMELL
+ ST?BRIEF
+ ST?DIAGNOSE
+ ST?GIVE
+ ST?WAKE
+ ST?DRINK
+ ST?YELL
+ ST?LOCK
+ ST?BURN
+ ST?KICK
+ ST?TURN
+ ST?#RECORD
+ ST?CROSS
+ ST?RESTORE
+ ST?CLOSE
+ ST?STRIKE
+ ST?SLIDE
+ ST?WAVE
+ ST?EXIT
+ ST?EXAMINE
+ ST?DISENCHANT
+ ST?EAT
+ ST?FILL
+ ST?CLIMB
+ ST?LAUNCH
+ ST?HELLO
+ .ENDT
+
+; SYNTAX DEFINITION TABLES ARE DEFINED HERE
+
+ST?KISS:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?KISS
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .ENDT
+
+ST?SKIP:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?SKIP
+ .ENDT
+
+ST?INFLAT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?INFLATE
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE TOOLBIT
+ .BYTE 0
+ .ENDT
+
+ST?PULL:: .TABLE
+ .BYTE 3 ;NUMBER OF SYNTAXES
+ .BYTE 125 ; 1 PR?UP
+ .BYTE V?MOVE
+ .BYTE 0
+ .BYTE SOG+SIR
+ .BYTE 122 ; 1 PR?ON
+ .BYTE V?MOVE
+ .BYTE 0
+ .BYTE SOG+SIR
+ .BYTE 64 ; 1 0
+ .BYTE V?MOVE
+ .BYTE 0
+ .BYTE SOG+SIR
+ .ENDT
+
+ST?PUT:: .TABLE
+ .BYTE 5 ;NUMBER OF SYNTAXES
+ .BYTE 126 ; 1 PR?OUT
+ .BYTE V?LAMP-OFF
+ .BYTE ONBIT
+ .BYTE STAKE+SHAVE
+ .BYTE 128 ; 2 0
+ .BYTE V?PUT-UNDER
+ .BYTE 0
+ .BYTE SH+SHAVE
+ .BYTE 50 ;PR?UNDER
+ .BYTE 0
+ .BYTE 0
+ .BYTE 124 ; 1 PR?DOWN
+ .BYTE V?DROP
+ .BYTE 0
+ .BYTE SH+SMANY
+ .BYTE 128 ; 2 0
+ .BYTE V?PUT-ON
+ .BYTE 0
+ .BYTE SH+SMANY+SHAVE
+ .BYTE 58 ;PR?ON
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?PUT
+ .BYTE 0
+ .BYTE SH+SMANY+SHAVE
+ .BYTE 59 ;PR?IN
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?RAPE:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?RAPE
+ .BYTE ACTORBIT
+ .BYTE 0
+ .ENDT
+
+ST?VERBOSE:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?VERBOSE
+ .ENDT
+
+ST?WALK:: .TABLE
+ .BYTE 11 ;NUMBER OF SYNTAXES
+ .BYTE 124 ; 1 PR?DOWN
+ .BYTE V?CLIMB-DOWN
+ .BYTE CLIMBBIT
+ .BYTE SOG+SIR
+ .BYTE 125 ; 1 PR?UP
+ .BYTE V?CLIMB
+ .BYTE CLIMBBIT
+ .BYTE SOG+SIR
+ .BYTE 115 ; 1 PR?AROUND
+ .BYTE V?WALK-AROUND
+ .BYTE RLANDBIT
+ .BYTE 0
+ .BYTE 120 ; 1 PR?TO
+ .BYTE V?WALK-TO
+ .BYTE 0
+ .BYTE 0
+ .BYTE 119 ; 1 PR?OVER
+ .BYTE V?LEAP
+ .BYTE 0
+ .BYTE 0
+ .BYTE 122 ; 1 PR?ON
+ .BYTE V?ENTER
+ .BYTE VEHBIT
+ .BYTE SOG+SIR
+ .BYTE 127 ; 1 PR?WITH
+ .BYTE V?ENTER
+ .BYTE VEHBIT
+ .BYTE SOG+SIR
+ .BYTE 123 ; 1 PR?IN
+ .BYTE V?ENTER
+ .BYTE VEHBIT
+ .BYTE SOG+SIR
+ .BYTE 110 ; 1 PR?AWAY
+ .BYTE V?WALK
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?WALK
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0 ; 0 0
+ .BYTE V?WALK-AROUND
+ .ENDT
+
+ST?QUIT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?QUIT
+ .ENDT
+
+ST?FIND:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?FIND
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?DESTROY:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 188 ; 2 PR?DOWN
+ .BYTE V?MUNG
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE 0
+ .BYTE SH+SC+STAKE
+ .BYTE 128 ; 2 0
+ .BYTE V?MUNG
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE 0
+ .BYTE SH+SC+STAKE
+ .ENDT
+
+ST?UNLOCK:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?UNLOCK
+ .BYTE 0
+ .BYTE SOG+SIR
+ .BYTE 63 ;PR?WITH
+ .BYTE TOOLBIT
+ .BYTE STAKE
+ .ENDT
+
+ST?READ:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 121 ; 1 PR?FROM
+ .BYTE V?READ
+ .BYTE READBIT
+ .BYTE STAKE
+ .BYTE 64 ; 1 0
+ .BYTE V?READ
+ .BYTE READBIT
+ .BYTE STAKE
+ .ENDT
+
+ST?SAY:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?SAY
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0 ; 0 0
+ .BYTE V?SAY
+ .ENDT
+
+ST?JUMP:: .TABLE
+ .BYTE 6 ;NUMBER OF SYNTAXES
+ .BYTE 117 ; 1 PR?OFF
+ .BYTE V?LEAP
+ .BYTE 0
+ .BYTE 0
+ .BYTE 121 ; 1 PR?FROM
+ .BYTE V?LEAP
+ .BYTE 0
+ .BYTE 0
+ .BYTE 123 ; 1 PR?IN
+ .BYTE V?LEAP
+ .BYTE 0
+ .BYTE 0
+ .BYTE 118 ; 1 PR?ACROSS
+ .BYTE V?LEAP
+ .BYTE 0
+ .BYTE 0
+ .BYTE 119 ; 1 PR?OVER
+ .BYTE V?LEAP
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0 ; 0 0
+ .BYTE V?LEAP
+ .ENDT
+
+ST?POUR:: .TABLE
+ .BYTE 4 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?DROP
+ .BYTE 0
+ .BYTE SH+SC
+ .BYTE 57 ;PR?FROM
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?POUR-ON
+ .BYTE 0
+ .BYTE SH+SC
+ .BYTE 58 ;PR?ON
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?DROP
+ .BYTE 0
+ .BYTE SH+SC
+ .BYTE 59 ;PR?IN
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?DROP
+ .BYTE 0
+ .BYTE SH+SC
+ .ENDT
+
+ST?WAIT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?WAIT
+ .ENDT
+
+ST?TAKE:: .TABLE
+ .BYTE 8 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?TAKE
+ .BYTE TAKEBIT
+ .BYTE SIR+SC+SMANY
+ .BYTE 57 ;PR?FROM
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?TAKE
+ .BYTE TAKEBIT
+ .BYTE SC+SIR+SMANY
+ .BYTE 53 ;PR?OFF
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?TAKE
+ .BYTE TAKEBIT
+ .BYTE SC+SIR+SMANY
+ .BYTE 62 ;PR?OUT
+ .BYTE 0
+ .BYTE 0
+ .BYTE 125 ; 1 PR?UP
+ .BYTE V?STAND
+ .BYTE RLANDBIT
+ .BYTE 0
+ .BYTE 122 ; 1 PR?ON
+ .BYTE V?CLIMB-ON
+ .BYTE VEHBIT
+ .BYTE SOG+SIR
+ .BYTE 126 ; 1 PR?OUT
+ .BYTE V?DISEMBARK
+ .BYTE RLANDBIT
+ .BYTE SOG+SIR
+ .BYTE 123 ; 1 PR?IN
+ .BYTE V?ENTER
+ .BYTE VEHBIT
+ .BYTE SOG+SIR
+ .BYTE 64 ; 1 0
+ .BYTE V?TAKE
+ .BYTE TAKEBIT
+ .BYTE SOG+SIR+SMANY
+ .ENDT
+
+ST?COUNT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?COUNT
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?RAISE:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 125 ; 1 PR?UP
+ .BYTE V?RAISE
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?RAISE
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?FOLLOW:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?FOLLOW
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0 ; 0 0
+ .BYTE V?FOLLOW
+ .ENDT
+
+ST?VERSION:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?VERSION
+ .ENDT
+
+ST?#UNRECORD:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?UNRECORD
+ .ENDT
+
+ST?LIGHT:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?BURN
+ .BYTE LIGHTBIT
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE FLAMEBIT
+ .BYTE SH+SC+STAKE+SHAVE
+ .BYTE 64 ; 1 0
+ .BYTE V?LAMP-ON
+ .BYTE LIGHTBIT
+ .BYTE STAKE+SHAVE
+ .ENDT
+
+ST?MOVE:: .TABLE
+ .BYTE 3 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?TURN
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE TOOLBIT
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?PUT
+ .BYTE 0
+ .BYTE SH+SMANY+SHAVE
+ .BYTE 59 ;PR?IN
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?MOVE
+ .BYTE 0
+ .BYTE SOG+SIR
+ .ENDT
+
+ST?PLAY:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?PLAY
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?OPEN:: .TABLE
+ .BYTE 3 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?OPEN
+ .BYTE DOORBIT
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE TOOLBIT
+ .BYTE SHAVE
+ .BYTE 125 ; 1 PR?UP
+ .BYTE V?OPEN
+ .BYTE DOORBIT
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?OPEN
+ .BYTE DOORBIT
+ .BYTE 0
+ .ENDT
+
+ST?#COMMAND:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?COMMAND-FILE
+ .ENDT
+
+ST?BLOW:: .TABLE
+ .BYTE 4 ;NUMBER OF SYNTAXES
+ .BYTE 125 ; 1 PR?UP
+ .BYTE V?BLAST
+ .BYTE 0
+ .BYTE 0
+ .BYTE 189 ; 2 PR?UP
+ .BYTE V?INFLATE
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE TOOLBIT
+ .BYTE 0
+ .BYTE 126 ; 1 PR?OUT
+ .BYTE V?LAMP-OFF
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?BLAST
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?KNOCK:: .TABLE
+ .BYTE 3 ;NUMBER OF SYNTAXES
+ .BYTE 124 ; 1 PR?DOWN
+ .BYTE V?ATTACK
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .BYTE 122 ; 1 PR?ON
+ .BYTE V?KNOCK
+ .BYTE 0
+ .BYTE 0
+ .BYTE 116 ; 1 PR?AT
+ .BYTE V?KNOCK
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?PICK:: .TABLE
+ .BYTE 3 ;NUMBER OF SYNTAXES
+ .BYTE 125 ; 1 PR?UP
+ .BYTE V?TAKE
+ .BYTE TAKEBIT
+ .BYTE SOG+SMANY
+ .BYTE 128 ; 2 0
+ .BYTE V?PICK
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?PICK
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?DEFLATE:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?DEFLATE
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?#RANDOM:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?RANDOM
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?STAND:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 125 ; 1 PR?UP
+ .BYTE V?STAND
+ .BYTE RLANDBIT
+ .BYTE 0
+ .BYTE 0 ; 0 0
+ .BYTE V?STAND
+ .ENDT
+
+ST?ENCHANT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?ENCHANT
+ .BYTE 0
+ .BYTE SOG+SIR
+ .ENDT
+
+ST?LISTEN:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 120 ; 1 PR?TO
+ .BYTE V?LISTEN
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?TIE:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 189 ; 2 PR?UP
+ .BYTE V?TIE-UP
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .BYTE 63 ;PR?WITH
+ .BYTE TOOLBIT
+ .BYTE SHAVE
+ .BYTE 128 ; 2 0
+ .BYTE V?TIE
+ .BYTE 0
+ .BYTE 0
+ .BYTE 56 ;PR?TO
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?SAVE:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?SAVE
+ .ENDT
+
+ST?TELL:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?TELL
+ .BYTE ACTORBIT
+ .BYTE SIR
+ .BYTE 47 ;PR?ABOUT
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?TELL
+ .BYTE ACTORBIT
+ .BYTE SIR
+ .ENDT
+
+ST?THROW:: .TABLE
+ .BYTE 6 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?THROW-OFF
+ .BYTE 0
+ .BYTE SH+SC+SHAVE
+ .BYTE 55 ;PR?OVER
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?THROW-OFF
+ .BYTE 0
+ .BYTE SH+SC+SHAVE
+ .BYTE 53 ;PR?OFF
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?PUT-ON
+ .BYTE 0
+ .BYTE SH+SC+SHAVE
+ .BYTE 58 ;PR?ON
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?PUT
+ .BYTE 0
+ .BYTE SH+SC+SHAVE
+ .BYTE 59 ;PR?IN
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?THROW
+ .BYTE 0
+ .BYTE SH+SC+SHAVE
+ .BYTE 63 ;PR?WITH
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .BYTE 128 ; 2 0
+ .BYTE V?THROW
+ .BYTE 0
+ .BYTE SH+SC+SHAVE
+ .BYTE 52 ;PR?AT
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .ENDT
+
+ST?ZORK:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?ZORK
+ .ENDT
+
+ST?LOWER:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?LOWER
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?COMMAND:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?COMMAND
+ .BYTE ACTORBIT
+ .BYTE 0
+ .ENDT
+
+ST?TALK:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 120 ; 1 PR?TO
+ .BYTE V?TELL
+ .BYTE ACTORBIT
+ .BYTE SIR
+ .ENDT
+
+ST?SHAKE:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?SHAKE
+ .BYTE 0
+ .BYTE SHAVE
+ .ENDT
+
+ST?INVENTORY:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?INVENTORY
+ .ENDT
+
+ST?ATTACK:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?ATTACK
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .BYTE 63 ;PR?WITH
+ .BYTE 0
+ .BYTE SH+SC+SHAVE
+ .BYTE 64 ; 1 0
+ .BYTE V?ATTACK
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .ENDT
+
+ST?ENTER:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?ENTER
+ .BYTE VEHBIT
+ .BYTE SOG+SIR
+ .BYTE 0 ; 0 0
+ .BYTE V?ENTER
+ .ENDT
+
+ST?SEARCH:: .TABLE
+ .BYTE 3 ;NUMBER OF SYNTAXES
+ .BYTE 112 ; 1 PR?FOR
+ .BYTE V?FIND
+ .BYTE 0
+ .BYTE 0
+ .BYTE 123 ; 1 PR?IN
+ .BYTE V?SEARCH
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?SEARCH
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?DISEMBARK:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?DISEMBARK
+ .BYTE VEHBIT
+ .BYTE SOG+SIR
+ .ENDT
+
+ST?SWIM:: .TABLE
+ .BYTE 3 ;NUMBER OF SYNTAXES
+ .BYTE 118 ; 1 PR?ACROSS
+ .BYTE V?SWIM
+ .BYTE 0
+ .BYTE 0
+ .BYTE 123 ; 1 PR?IN
+ .BYTE V?SWIM
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0 ; 0 0
+ .BYTE V?SWIM
+ .ENDT
+
+ST?UNTIE:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?UNTIE
+ .BYTE 0
+ .BYTE 0
+ .BYTE 57 ;PR?FROM
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?UNTIE
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?CUT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?CUT
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE WEAPONBIT
+ .BYTE SC+SH
+ .ENDT
+
+ST?UNSCRIPT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?UNSCRIPT
+ .ENDT
+
+ST?MELT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?MELT
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE FLAMEBIT
+ .BYTE 0
+ .ENDT
+
+ST?PUSH:: .TABLE
+ .BYTE 4 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?PUT-UNDER
+ .BYTE 0
+ .BYTE 0
+ .BYTE 50 ;PR?UNDER
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?TURN
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE TOOLBIT
+ .BYTE 0
+ .BYTE 122 ; 1 PR?ON
+ .BYTE V?PUSH
+ .BYTE 0
+ .BYTE SIR+SOG+SMANY
+ .BYTE 64 ; 1 0
+ .BYTE V?PUSH
+ .BYTE 0
+ .BYTE SIR+SOG+SMANY
+ .ENDT
+
+ST?RUB:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?RUB
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?RUB
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?SUPER:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?SUPER-BRIEF
+ .ENDT
+
+ST?INCANT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?INCANT
+ .ENDT
+
+ST?SCORE:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?SCORE
+ .ENDT
+
+ST?LOOK:: .TABLE
+ .BYTE 11 ;NUMBER OF SYNTAXES
+ .BYTE 112 ; 1 PR?FOR
+ .BYTE V?FIND
+ .BYTE 0
+ .BYTE 0
+ .BYTE 123 ; 1 PR?IN
+ .BYTE V?LOOK-INSIDE
+ .BYTE 0
+ .BYTE SMANY
+ .BYTE 113 ; 1 PR?BEHIND
+ .BYTE V?LOOK-BEHIND
+ .BYTE 0
+ .BYTE 0
+ .BYTE 114 ; 1 PR?UNDER
+ .BYTE V?LOOK-UNDER
+ .BYTE 0
+ .BYTE 0
+ .BYTE 127 ; 1 PR?WITH
+ .BYTE V?LOOK-INSIDE
+ .BYTE 0
+ .BYTE SMANY
+ .BYTE 122 ; 1 PR?ON
+ .BYTE V?LOOK-INSIDE
+ .BYTE 0
+ .BYTE 0
+ .BYTE 116 ; 1 PR?AT
+ .BYTE V?EXAMINE
+ .BYTE 0
+ .BYTE SMANY
+ .BYTE 124 ; 1 PR?DOWN
+ .BYTE V?LOOK
+ .BYTE RLANDBIT
+ .BYTE 0
+ .BYTE 125 ; 1 PR?UP
+ .BYTE V?LOOK
+ .BYTE RLANDBIT
+ .BYTE 0
+ .BYTE 115 ; 1 PR?AROUND
+ .BYTE V?LOOK
+ .BYTE RLANDBIT
+ .BYTE 0
+ .BYTE 0 ; 0 0
+ .BYTE V?LOOK
+ .ENDT
+
+ST?DROP:: .TABLE
+ .BYTE 4 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?PUT-ON
+ .BYTE 0
+ .BYTE SH+SMANY+SHAVE
+ .BYTE 58 ;PR?ON
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?PUT
+ .BYTE 0
+ .BYTE SH+SMANY+SHAVE
+ .BYTE 59 ;PR?IN
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?PUT
+ .BYTE 0
+ .BYTE SH+SMANY+SHAVE
+ .BYTE 60 ;PR?DOWN
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?DROP
+ .BYTE 0
+ .BYTE SH+SMANY+SHAVE
+ .ENDT
+
+ST?LEAVE:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?DROP
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0 ; 0 0
+ .BYTE V?LEAVE
+ .ENDT
+
+ST?CURSE:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?CURSES
+ .BYTE ACTORBIT
+ .BYTE 0
+ .BYTE 0 ; 0 0
+ .BYTE V?CURSES
+ .ENDT
+
+ST?SCRIPT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?SCRIPT
+ .ENDT
+
+ST?$VERIFY:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?VERIFY
+ .ENDT
+
+ST?EXTINGUISH:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?LAMP-OFF
+ .BYTE ONBIT
+ .BYTE STAKE+SHAVE
+ .ENDT
+
+ST?SWING:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?SWING
+ .BYTE WEAPONBIT
+ .BYTE SH+SC+SHAVE
+ .BYTE 52 ;PR?AT
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .BYTE 64 ; 1 0
+ .BYTE V?SWING
+ .BYTE WEAPONBIT
+ .BYTE SH+SC+SHAVE
+ .ENDT
+
+ST?RESTART:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?RESTART
+ .ENDT
+
+ST?POKE:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?MUNG
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .BYTE 63 ;PR?WITH
+ .BYTE WEAPONBIT
+ .BYTE SH+SC+SHAVE
+ .ENDT
+
+ST?SMELL:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?SMELL
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?BRIEF:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?BRIEF
+ .ENDT
+
+ST?DIAGNOSE:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?DIAGNOSE
+ .ENDT
+
+ST?GIVE:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?SGIVE
+ .BYTE ACTORBIT
+ .BYTE SOG
+ .BYTE 0 ;0
+ .BYTE 0
+ .BYTE SMANY+SH+SHAVE
+ .BYTE 128 ; 2 0
+ .BYTE V?GIVE
+ .BYTE 0
+ .BYTE SMANY+SH+SHAVE
+ .BYTE 56 ;PR?TO
+ .BYTE ACTORBIT
+ .BYTE SOG
+ .ENDT
+
+ST?WAKE:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 125 ; 1 PR?UP
+ .BYTE V?ALARM
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .BYTE 64 ; 1 0
+ .BYTE V?ALARM
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .ENDT
+
+ST?DRINK:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 121 ; 1 PR?FROM
+ .BYTE V?DRINK-FROM
+ .BYTE 0
+ .BYTE SH+SC
+ .BYTE 64 ; 1 0
+ .BYTE V?DRINK
+ .BYTE DRINKBIT
+ .BYTE 0
+ .ENDT
+
+ST?YELL:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?YELL
+ .ENDT
+
+ST?LOCK:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?LOCK
+ .BYTE 0
+ .BYTE SOG+SIR
+ .BYTE 63 ;PR?WITH
+ .BYTE TOOLBIT
+ .BYTE STAKE
+ .ENDT
+
+ST?BURN:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 188 ; 2 PR?DOWN
+ .BYTE V?BURN
+ .BYTE BURNBIT
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE FLAMEBIT
+ .BYTE SHAVE
+ .BYTE 128 ; 2 0
+ .BYTE V?BURN
+ .BYTE BURNBIT
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE FLAMEBIT
+ .BYTE SHAVE
+ .ENDT
+
+ST?KICK:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?KICK
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?TURN:: .TABLE
+ .BYTE 4 ;NUMBER OF SYNTAXES
+ .BYTE 117 ; 1 PR?OFF
+ .BYTE V?LAMP-OFF
+ .BYTE ONBIT
+ .BYTE STAKE+SHAVE
+ .BYTE 186 ; 2 PR?ON
+ .BYTE V?LAMP-ON
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE 0
+ .BYTE SHAVE
+ .BYTE 122 ; 1 PR?ON
+ .BYTE V?LAMP-ON
+ .BYTE LIGHTBIT
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?TURN
+ .BYTE 0
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?#RECORD:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?RECORD
+ .ENDT
+
+ST?CROSS:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?WALK-AROUND
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?RESTORE:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 0 ; 0 0
+ .BYTE V?RESTORE
+ .ENDT
+
+ST?CLOSE:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?CLOSE
+ .BYTE DOORBIT
+ .BYTE SH+SC+SOG+SIR
+ .ENDT
+
+ST?STRIKE:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?STRIKE
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?ATTACK
+ .BYTE ACTORBIT
+ .BYTE SOG+SIR
+ .BYTE 63 ;PR?WITH
+ .BYTE WEAPONBIT
+ .BYTE SHAVE
+ .ENDT
+
+ST?SLIDE:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 128 ; 2 0
+ .BYTE V?PUT-UNDER
+ .BYTE 0
+ .BYTE 0
+ .BYTE 50 ;PR?UNDER
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?WAVE:: .TABLE
+ .BYTE 3 ;NUMBER OF SYNTAXES
+ .BYTE 116 ; 1 PR?AT
+ .BYTE V?WAVE
+ .BYTE 0
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?WAVE
+ .BYTE 0
+ .BYTE SH+SC+STAKE+SHAVE
+ .BYTE 52 ;PR?AT
+ .BYTE 0
+ .BYTE 0
+ .BYTE 64 ; 1 0
+ .BYTE V?WAVE
+ .BYTE 0
+ .BYTE SH+SC+STAKE+SHAVE
+ .ENDT
+
+ST?EXIT:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?EXIT
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0 ; 0 0
+ .BYTE V?EXIT
+ .ENDT
+
+ST?EXAMINE:: .TABLE
+ .BYTE 3 ;NUMBER OF SYNTAXES
+ .BYTE 122 ; 1 PR?ON
+ .BYTE V?LOOK-INSIDE
+ .BYTE 0
+ .BYTE SMANY
+ .BYTE 123 ; 1 PR?IN
+ .BYTE V?LOOK-INSIDE
+ .BYTE 0
+ .BYTE SMANY
+ .BYTE 64 ; 1 0
+ .BYTE V?EXAMINE
+ .BYTE 0
+ .BYTE SMANY
+ .ENDT
+
+ST?DISENCHANT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?DISENCHANT
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?EAT:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?EAT
+ .BYTE FOODBIT
+ .BYTE SHAVE+STAKE
+ .ENDT
+
+ST?FILL:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?FILL
+ .BYTE CONTBIT
+ .BYTE 0
+ .BYTE 128 ; 2 0
+ .BYTE V?FILL
+ .BYTE CONTBIT
+ .BYTE 0
+ .BYTE 63 ;PR?WITH
+ .BYTE 0
+ .BYTE 0
+ .ENDT
+
+ST?CLIMB:: .TABLE
+ .BYTE 5 ;NUMBER OF SYNTAXES
+ .BYTE 122 ; 1 PR?ON
+ .BYTE V?CLIMB-ON
+ .BYTE VEHBIT
+ .BYTE SOG+SIR
+ .BYTE 123 ; 1 PR?IN
+ .BYTE V?ENTER
+ .BYTE VEHBIT
+ .BYTE SOG+SIR
+ .BYTE 64 ; 1 0
+ .BYTE V?CLIMB
+ .BYTE CLIMBBIT
+ .BYTE SOG+SIR
+ .BYTE 124 ; 1 PR?DOWN
+ .BYTE V?CLIMB-DOWN
+ .BYTE RLANDBIT
+ .BYTE 0
+ .BYTE 125 ; 1 PR?UP
+ .BYTE V?CLIMB
+ .BYTE RLANDBIT
+ .BYTE 0
+ .ENDT
+
+ST?LAUNCH:: .TABLE
+ .BYTE 1 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?LAUNCH
+ .BYTE VEHBIT
+ .BYTE 0
+ .ENDT
+
+ST?HELLO:: .TABLE
+ .BYTE 2 ;NUMBER OF SYNTAXES
+ .BYTE 64 ; 1 0
+ .BYTE V?HELLO
+ .BYTE 0
+ .BYTE 0
+ .BYTE 0 ; 0 0
+ .BYTE V?HELLO
+ .ENDT
+
+
+; THE ACTION CALLING TABLE IS DEFINED HERE
+
+ATBL:: .TABLE
+ V-VERBOSE
+ V-BRIEF
+ V-SUPER-BRIEF
+ V-DIAGNOSE
+ V-INVENTORY
+ V-QUIT
+ V-RESTART
+ V-RESTORE
+ V-SAVE
+ V-SCORE
+ V-SCRIPT
+ V-UNSCRIPT
+ V-VERSION
+ V-VERIFY
+ V-RANDOM
+ V-COMMAND-FILE
+ V-RECORD
+ V-UNRECORD
+ V-ATTACK
+ V-BLAST
+ V-LAMP-OFF
+ V-INFLATE
+ V-BURN
+ V-CLIMB
+ V-CLIMB-DOWN
+ V-ENTER
+ V-CLIMB-ON
+ V-CLOSE
+ V-COMMAND
+ V-COUNT
+ V-WALK-AROUND
+ V-CUT
+ V-CURSES
+ V-DEFLATE
+ V-MUNG
+ V-DISEMBARK
+ V-DISENCHANT
+ V-DRINK
+ V-DRINK-FROM
+ V-DROP
+ V-PUT
+ V-PUT-ON
+ V-EAT
+ V-ENCHANT
+ V-EXAMINE
+ V-LOOK-INSIDE
+ V-EXIT
+ V-FILL
+ V-FIND
+ V-FOLLOW
+ V-GIVE
+ V-SGIVE
+ V-HELLO
+ V-INCANT
+ V-LEAP
+ V-KICK
+ V-KISS
+ V-KNOCK
+ V-LAUNCH
+ V-LEAVE
+ V-LAMP-ON
+ V-LISTEN
+ V-LOCK
+ V-LOOK
+ V-LOOK-UNDER
+ V-LOOK-BEHIND
+ V-LOWER
+ V-MELT
+ V-MOVE
+ V-TURN
+ V-OPEN
+ V-PICK
+ V-TAKE
+ V-PLAY
+ V-POUR-ON
+ V-PUSH
+ V-PUT-UNDER
+ V-RAISE
+ V-RAPE
+ V-READ
+ V-RUB
+ V-SAY
+ V-SEARCH
+ V-SHAKE
+ V-SKIP
+ V-SMELL
+ V-STAND
+ V-STRIKE
+ V-SWIM
+ V-SWING
+ V-TELL
+ V-THROW
+ V-THROW-OFF
+ V-TIE
+ V-TIE-UP
+ V-UNLOCK
+ V-UNTIE
+ V-WAIT
+ V-ALARM
+ V-WALK
+ V-WALK-TO
+ V-WAVE
+ V-YELL
+ V-ZORK
+ .ENDT
+
+; THE PREACTION CALLING TABLE IS DEFINED HERE
+
+PATBL:: .TABLE
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ PRE-BURN
+ 0
+ 0
+ PRE-ENTER
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ PRE-MUNG
+ 0
+ 0
+ 0
+ 0
+ PRE-DROP
+ PRE-PUT
+ PRE-PUT
+ 0
+ 0
+ 0
+ 0
+ 0
+ PRE-FILL
+ 0
+ 0
+ PRE-GIVE
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ PRE-TAKE
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ PRE-READ
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .ENDT
+
+
+; PREPOSITION TABLE IS DEFINED HERE
+
+PRTBL:: .TABLE
+ .WORD 18
+ W?AWAY
+ PR?AWAY
+ W?ABOUT
+ PR?ABOUT
+ W?FOR
+ PR?FOR
+ W?BEHIND
+ PR?BEHIND
+ W?UNDER
+ PR?UNDER
+ W?AROUND
+ PR?AROUND
+ W?AT
+ PR?AT
+ W?OFF
+ PR?OFF
+ W?ACROSS
+ PR?ACROSS
+ W?OVER
+ PR?OVER
+ W?TO
+ PR?TO
+ W?FROM
+ PR?FROM
+ W?ON
+ PR?ON
+ W?IN
+ PR?IN
+ W?DOWN
+ PR?DOWN
+ W?UP
+ PR?UP
+ W?OUT
+ PR?OUT
+ W?WITH
+ PR?WITH
+ .ENDT
+
+
+; VOCABULARY TABLE IS HERE
+
+VOCAB:: .TABLE
+ .BYTE 3
+ .BYTE 46
+ .BYTE 44
+ .BYTE 34
+ .BYTE 7
+ 501
+W?$VERIFY:: .ZWORD "$verif"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?$VERIFY
+ .BYTE 0
+W?PERIOD:: .ZWORD "."
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?PERIOD
+ .BYTE 0
+W?COMMA:: .ZWORD ","
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?COMMA
+ .BYTE 0
+W?#COMMAND:: .ZWORD "#comma"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?#COMMAND
+ .BYTE 0
+W?#RANDOM:: .ZWORD "#rando"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?#RANDOM
+ .BYTE 0
+W?#RECORD:: .ZWORD "#recor"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?#RECORD
+ .BYTE 0
+W?#UNRECORD:: .ZWORD "#unrec"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?#UNRECORD
+ .BYTE 0
+W?QUOTE:: .ZWORD """"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?QUOTE
+ .BYTE 0
+W?A:: .ZWORD "a"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?A
+ .BYTE 0
+W?ABOUT:: .ZWORD "about"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?ABOUT
+ .BYTE 0
+W?ACROSS:: .ZWORD "across"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?ACROSS
+ .BYTE 0
+W?ADVENTURER:: .ZWORD "advent"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?AGAIN:: .ZWORD "again"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?AGAIN
+ .BYTE 0
+W?ALL:: .ZWORD "all"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?ALL
+ .BYTE 0
+W?AN:: .ZWORD "an"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?AN
+ .BYTE 0
+W?AND:: .ZWORD "and"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?AND
+ .BYTE 0
+W?ANIMAL:: .ZWORD "animal"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?ANSWER:: .ZWORD "answer"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SAY
+ .BYTE 0
+W?ANTIQUE:: .ZWORD "antiqu"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?ANTIQUE
+ .BYTE 0
+W?AQUARIUM:: .ZWORD "aquari"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?AROUND:: .ZWORD "around"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?AROUND
+ .BYTE 0
+W?ASK:: .ZWORD "ask"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TELL
+ .BYTE 0
+W?AT:: .ZWORD "at"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?AT
+ .BYTE 0
+W?ATTACH:: .ZWORD "attach"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TIE
+ .BYTE 0
+W?ATTACK:: .ZWORD "attack"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?ATTACK
+ .BYTE 0
+W?AWAKE:: .ZWORD "awake"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?WAKE
+ .BYTE 0
+W?AWAY:: .ZWORD "away"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?AWAY
+ .BYTE 0
+W?BABY:: .ZWORD "baby"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?BABY
+ .BYTE 0
+W?BAG:: .ZWORD "bag"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BALLOON:: .ZWORD "balloo"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BARE:: .ZWORD "bare"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?BARE
+ .BYTE 0
+W?BARRED:: .ZWORD "barred"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?BARRED
+ .BYTE 0
+W?BASKET:: .ZWORD "basket"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BATTERED:: .ZWORD "batter"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?BATTERED
+ .BYTE 0
+W?BEAUTIFUL:: .ZWORD "beauti"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?BEAUTIFUL
+ .BYTE 0
+W?BEHIND:: .ZWORD "behind"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?BEHIND
+ .BYTE 0
+W?BELOW:: .ZWORD "below"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?UNDER
+ .BYTE 0
+W?BENCH:: .ZWORD "bench"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BENEATH:: .ZWORD "beneat"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?UNDER
+ .BYTE 0
+W?BILLS:: .ZWORD "bills"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BITE:: .ZWORD "bite"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?EAT
+ .BYTE 0
+W?BLACK:: .ZWORD "black"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?BLACK
+ .BYTE 0
+W?BLADE:: .ZWORD "blade"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BLAST:: .ZWORD "blast"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?BLOW
+ .BYTE 0
+W?BLOW:: .ZWORD "blow"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?BLOW
+ .BYTE 0
+W?BLUE:: .ZWORD "blue"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?BLUE
+ .BYTE 0
+W?BOARD:: .ZWORD "board"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?ENTER
+ .BYTE 0
+W?BOOK:: .ZWORD "book"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BOOKS:: .ZWORD "books"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BOX:: .ZWORD "box"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BRAIDED:: .ZWORD "braide"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?BRAIDED
+ .BYTE 0
+W?BRASS:: .ZWORD "brass"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?BRASS
+ .BYTE 0
+W?BREAK:: .ZWORD "break"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?DESTROY
+ .BYTE 0
+W?BRICK:: .ZWORD "brick"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BRIDGE:: .ZWORD "bridge"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BRIEF:: .ZWORD "brief"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?BRIEF
+ .BYTE 0
+W?BUCKET:: .ZWORD "bucket"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?BURN:: .ZWORD "burn"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?BURN
+ .BYTE 0
+W?BUT:: .ZWORD "but"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?BUT
+ .BYTE 0
+W?BUTTON:: .ZWORD "button"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CAGE:: .ZWORD "cage"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CAKE:: .ZWORD "cake"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CAKES:: .ZWORD "cakes"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CANDIED:: .ZWORD "candie"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?CANDIED
+ .BYTE 0
+W?CANDY:: .ZWORD "candy"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CARD:: .ZWORD "card"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CARRY:: .ZWORD "carry"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TAKE
+ .BYTE 0
+W?CATCH:: .ZWORD "catch"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TAKE
+ .BYTE 0
+W?CERBERUS:: .ZWORD "cerber"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CHANT:: .ZWORD "chant"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?INCANT
+ .BYTE 0
+W?CHASE:: .ZWORD "chase"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?FOLLOW
+ .BYTE 0
+W?CHASM:: .ZWORD "chasm"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CHEST:: .ZWORD "chest"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CHINA:: .ZWORD "china"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?CHINA
+ .BYTE 0
+W?CIRCLE:: .ZWORD "circle"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CLAY:: .ZWORD "clay"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?CLAY
+ .BYTE 0
+W?CLEAR:: .ZWORD "clear"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?CLEAR
+ .BYTE 0
+W?CLIMB:: .ZWORD "climb"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?CLIMB
+ .BYTE 0
+W?CLOSE:: .ZWORD "close"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?CLOSE
+ .BYTE 0
+W?CLOTH:: .ZWORD "cloth"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?CLOTH
+ .BYTE 0
+W?COIL:: .ZWORD "coil"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?COIN:: .ZWORD "coin"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?COLD:: .ZWORD "cold"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?COLD
+ .BYTE 0
+W?COLLAR:: .ZWORD "collar"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?COMMAND:: .ZWORD "comman"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?COMMAND
+ .BYTE 0
+W?COUNT:: .ZWORD "count"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?COUNT
+ .BYTE 0
+W?CRACK:: .ZWORD "crack"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CROSS:: .ZWORD "cross"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?CROSS
+ .BYTE 0
+W?CROWN:: .ZWORD "crown"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CRYPT:: .ZWORD "crypt"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?CRYSTAL:: .ZWORD "crysta"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?CRYSTAL
+ .BYTE 0
+W?CURSE:: .ZWORD "curse"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?CURSE
+ .BYTE 0
+W?CUT:: .ZWORD "cut"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?CUT
+ .BYTE 0
+W?D:: .ZWORD "d"
+ .BYTE PS?DIRECTION+PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?DOWN
+ .BYTE 22
+W?DAMN:: .ZWORD "damn"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?CURSE
+ .BYTE 0
+W?DAMP:: .ZWORD "damp"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?DAMP
+ .BYTE 0
+W?DARK:: .ZWORD "dark"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?DARK
+ .BYTE 0
+W?DEAD:: .ZWORD "dead"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?DEAD
+ .BYTE 0
+W?DEEP:: .ZWORD "deep"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?DEEP
+ .BYTE 0
+W?DEFLATE:: .ZWORD "deflat"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?DEFLATE
+ .BYTE 0
+W?DEGREE:: .ZWORD "degree"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?DELICATE:: .ZWORD "delica"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?DELICATE
+ .BYTE 0
+W?DEMON:: .ZWORD "demon"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?DESCRIBE:: .ZWORD "descri"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?EXAMINE
+ .BYTE 0
+W?DESTROY:: .ZWORD "destro"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?DESTROY
+ .BYTE 0
+W?DEVIL:: .ZWORD "devil"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?DIAGNOSE:: .ZWORD "diagno"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?DIAGNOSE
+ .BYTE 0
+W?DIAMOND:: .ZWORD "diamon"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?DIAMOND
+ .BYTE 0
+W?DIPLOMA:: .ZWORD "diplom"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?DIRT:: .ZWORD "dirt"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?DISEMBARK:: .ZWORD "disemb"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?DISEMBARK
+ .BYTE 0
+W?DISENCHANT:: .ZWORD "disenc"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?DISENCHANT
+ .BYTE 0
+W?DIVE:: .ZWORD "dive"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?JUMP
+ .BYTE 0
+W?DOG:: .ZWORD "dog"
+ .BYTE PS?OBJECT+PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?DOG
+ .BYTE O?ANY
+W?DOOR:: .ZWORD "door"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?DOUSE:: .ZWORD "douse"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?EXTINGUISH
+ .BYTE 0
+W?DOWN:: .ZWORD "down"
+ .BYTE PS?DIRECTION+PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?DOWN
+ .BYTE 22
+W?DRAGON:: .ZWORD "dragon"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?DRINK:: .ZWORD "drink"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?DRINK
+ .BYTE 0
+W?DROP:: .ZWORD "drop"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?DROP
+ .BYTE 0
+W?DUSTY:: .ZWORD "dusty"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?DUSTY
+ .BYTE 0
+W?E:: .ZWORD "e"
+ .BYTE PS?ADJECTIVE+PS?DIRECTION+P1?DIRECTION
+ .BYTE 30
+ .BYTE A?EAST
+W?EAST:: .ZWORD "east"
+ .BYTE PS?ADJECTIVE+PS?DIRECTION+P1?DIRECTION
+ .BYTE 30
+ .BYTE A?EAST
+W?EASTERN:: .ZWORD "easter"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?EASTERN
+ .BYTE 0
+W?EAT:: .ZWORD "eat"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?EAT
+ .BYTE 0
+W?ELVISH:: .ZWORD "elvish"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?ELVISH
+ .BYTE 0
+W?ENCHANT:: .ZWORD "enchan"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?ENCHANT
+ .BYTE 0
+W?ENORMOUS:: .ZWORD "enormo"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?ENORMOUS
+ .BYTE 0
+W?ENTER:: .ZWORD "enter"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?ENTER
+ .BYTE 0
+W?ETCHINGS:: .ZWORD "etchin"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?EXAMINE:: .ZWORD "examin"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?EXAMINE
+ .BYTE 0
+W?EXCEPT:: .ZWORD "except"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?EXCEPT
+ .BYTE 0
+W?EXIT:: .ZWORD "exit"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?EXIT
+ .BYTE 0
+W?EXTINGUISH:: .ZWORD "exting"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?EXTINGUISH
+ .BYTE 0
+W?F:: .ZWORD "f"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?FALL:: .ZWORD "fall"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FALL
+ .BYTE 0
+W?FANCY:: .ZWORD "fancy"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?FANCY
+ .BYTE 0
+W?FANTASIZE:: .ZWORD "fantas"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FANTASIZE
+ .BYTE 0
+W?FASTEN:: .ZWORD "fasten"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TIE
+ .BYTE 0
+W?FEEBLE:: .ZWORD "feeble"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FEEBLE
+ .BYTE 0
+W?FEED:: .ZWORD "feed"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?GIVE
+ .BYTE 0
+W?FEEL:: .ZWORD "feel"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?RUB
+ .BYTE 0
+W?FENCE:: .ZWORD "fence"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FENCE
+ .BYTE 0
+W?FERMENT:: .ZWORD "fermen"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FERMENT
+ .BYTE 0
+W?FIGHT:: .ZWORD "fight"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?ATTACK
+ .BYTE 0
+W?FILL:: .ZWORD "fill"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?FILL
+ .BYTE 0
+W?FIND:: .ZWORD "find"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?FIND
+ .BYTE 0
+W?FIREPROOF:: .ZWORD "firepr"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FIREPROOF
+ .BYTE 0
+W?FLATHEAD:: .ZWORD "flathe"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?FLATHEAD
+ .BYTE 0
+W?FLOAT:: .ZWORD "float"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FLOAT
+ .BYTE 0
+W?FLOOR:: .ZWORD "floor"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?FLUORESCE:: .ZWORD "fluore"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FLUORESCE
+ .BYTE 0
+W?FOLLOW:: .ZWORD "follow"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?FOLLOW
+ .BYTE 0
+W?FOR:: .ZWORD "for"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?FOR
+ .BYTE 0
+W?FORD:: .ZWORD "ford"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?CROSS
+ .BYTE 0
+W?FREE:: .ZWORD "free"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?UNTIE
+ .BYTE 0
+W?FREEZE:: .ZWORD "freeze"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FREEZE
+ .BYTE 0
+W?FROBOZZ:: .ZWORD "froboz"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?FROBOZZ
+ .BYTE 0
+W?FROM:: .ZWORD "from"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?FROM
+ .BYTE 0
+W?FROSTED:: .ZWORD "froste"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?FROSTED
+ .BYTE 0
+W?FRY:: .ZWORD "fry"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FRY
+ .BYTE 0
+W?FUCK:: .ZWORD "fuck"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?CURSE
+ .BYTE 0
+W?FUDGE:: .ZWORD "fudge"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FUDGE
+ .BYTE 0
+W?FUMBLE:: .ZWORD "fumble"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?FUMBLE
+ .BYTE 0
+W?FUSE:: .ZWORD "fuse"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?G:: .ZWORD "g"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?G
+ .BYTE 0
+W?GAUDY:: .ZWORD "gaudy"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?GAUDY
+ .BYTE 0
+W?GAZEBO:: .ZWORD "gazebo"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?GENIE:: .ZWORD "genie"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?GET:: .ZWORD "get"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TAKE
+ .BYTE 0
+W?GIANT:: .ZWORD "giant"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?GIANT
+ .BYTE 0
+W?GIVE:: .ZWORD "give"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?GIVE
+ .BYTE 0
+W?GLACIER:: .ZWORD "glacie"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?GLASS:: .ZWORD "glass"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?GO:: .ZWORD "go"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?WALK
+ .BYTE 0
+W?GOLD:: .ZWORD "gold"
+ .BYTE PS?OBJECT+PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?GOLD
+ .BYTE O?ANY
+W?GRAB:: .ZWORD "grab"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TAKE
+ .BYTE 0
+W?GRAVE:: .ZWORD "grave"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?GREAT:: .ZWORD "great"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?GREAT
+ .BYTE 0
+W?GREEN:: .ZWORD "green"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?GREEN
+ .BYTE 0
+W?GROUND:: .ZWORD "ground"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?GRUE:: .ZWORD "grue"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?GUARDIAN:: .ZWORD "guardi"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HAND:: .ZWORD "hand"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HANDS:: .ZWORD "hands"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HEAD:: .ZWORD "head"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HEADED:: .ZWORD "headed"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?HEADED
+ .BYTE 0
+W?HEADS:: .ZWORD "heads"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HEAVY:: .ZWORD "heavy"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?HEAVY
+ .BYTE 0
+W?HEDGE:: .ZWORD "hedge"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HEDGES:: .ZWORD "hedges"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HELLO:: .ZWORD "hello"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?HELLO
+ .BYTE 0
+W?HER:: .ZWORD "her"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HERE:: .ZWORD "here"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?HERE
+ .BYTE 0
+W?HI:: .ZWORD "hi"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?HELLO
+ .BYTE 0
+W?HIDE:: .ZWORD "hide"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?PUT
+ .BYTE 0
+W?HIM:: .ZWORD "him"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HIT:: .ZWORD "hit"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?ATTACK
+ .BYTE 0
+W?HOLD:: .ZWORD "hold"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TAKE
+ .BYTE 0
+W?HOLE:: .ZWORD "hole"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HOOK:: .ZWORD "hook"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HOP:: .ZWORD "hop"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SKIP
+ .BYTE 0
+W?HOUND:: .ZWORD "hound"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?HUGE:: .ZWORD "huge"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?HUGE
+ .BYTE 0
+W?HURL:: .ZWORD "hurl"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?THROW
+ .BYTE 0
+W?I:: .ZWORD "i"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?INVENTORY
+ .BYTE 0
+W?ICE:: .ZWORD "ice"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?ICING:: .ZWORD "icing"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?ICY:: .ZWORD "icy"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?ICY
+ .BYTE 0
+W?IGNITE:: .ZWORD "ignite"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?BURN
+ .BYTE 0
+W?IN:: .ZWORD "in"
+ .BYTE PS?DIRECTION+PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?IN
+ .BYTE 21
+W?INCANT:: .ZWORD "incant"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?INCANT
+ .BYTE 0
+W?INFLAT:: .ZWORD "inflat"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?INFLAT
+ .BYTE 0
+W?INSECTS:: .ZWORD "insect"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?INSERT:: .ZWORD "insert"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?PUT
+ .BYTE 0
+W?INSIDE:: .ZWORD "inside"
+ .BYTE PS?DIRECTION+PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?IN
+ .BYTE 21
+W?INTNUM:: .ZWORD "intnum"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?INTO:: .ZWORD "into"
+ .BYTE PS?DIRECTION+PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?IN
+ .BYTE 21
+W?INVENTORY:: .ZWORD "invent"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?INVENTORY
+ .BYTE 0
+W?IRON:: .ZWORD "iron"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?IRON
+ .BYTE 0
+W?IS:: .ZWORD "is"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?IS
+ .BYTE 0
+W?IT:: .ZWORD "it"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?JUMP:: .ZWORD "jump"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?JUMP
+ .BYTE 0
+W?KEY:: .ZWORD "key"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?KEYHOLE:: .ZWORD "keyhol"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?KICK:: .ZWORD "kick"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?KICK
+ .BYTE 0
+W?KILL:: .ZWORD "kill"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?ATTACK
+ .BYTE 0
+W?KISS:: .ZWORD "kiss"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?KISS
+ .BYTE 0
+W?KNOCK:: .ZWORD "knock"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?KNOCK
+ .BYTE 0
+W?KREBF:: .ZWORD "krebf"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?L:: .ZWORD "l"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?LOOK
+ .BYTE 0
+W?LABEL:: .ZWORD "label"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?LADY:: .ZWORD "lady"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?LAMP:: .ZWORD "lamp"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?LAND:: .ZWORD "land"
+ .BYTE PS?DIRECTION+P1?DIRECTION
+ .BYTE 19
+ .BYTE 0
+W?LANTERN:: .ZWORD "lanter"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?LAUNCH:: .ZWORD "launch"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?LAUNCH
+ .BYTE 0
+W?LEAP:: .ZWORD "leap"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?JUMP
+ .BYTE 0
+W?LEAVE:: .ZWORD "leave"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?LEAVE
+ .BYTE 0
+W?LETTER:: .ZWORD "letter"
+ .BYTE PS?OBJECT+PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?LETTER
+ .BYTE O?ANY
+W?LIFT:: .ZWORD "lift"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?RAISE
+ .BYTE 0
+W?LIGHT:: .ZWORD "light"
+ .BYTE PS?OBJECT+PS?VERB+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE ACT?LIGHT
+W?LIQUID:: .ZWORD "liquid"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?LISTEN:: .ZWORD "listen"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?LISTEN
+ .BYTE 0
+W?LITTLE:: .ZWORD "little"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?LITTLE
+ .BYTE 0
+W?LIZARD:: .ZWORD "lizard"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?LOCK:: .ZWORD "lock"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?LOCK
+ .BYTE 0
+W?LOOK:: .ZWORD "look"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?LOOK
+ .BYTE 0
+W?LOWER:: .ZWORD "lower"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?LOWER
+ .BYTE 0
+W?LURKING:: .ZWORD "lurkin"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?LURKING
+ .BYTE 0
+W?MAGIC:: .ZWORD "magic"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?MAGIC
+ .BYTE 0
+W?MAN:: .ZWORD "man"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?MARBLE:: .ZWORD "marble"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?MARBLE
+ .BYTE 0
+W?MASS:: .ZWORD "mass"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?MAT:: .ZWORD "mat"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?MATCH:: .ZWORD "match"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?MATCHBOOK:: .ZWORD "matchb"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?MATCHES:: .ZWORD "matche"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?ME:: .ZWORD "me"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?MELT:: .ZWORD "melt"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?MELT
+ .BYTE 0
+W?MENHIR:: .ZWORD "menhir"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?METAL:: .ZWORD "metal"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?METAL
+ .BYTE 0
+W?MOBY:: .ZWORD "moby"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?MOBY
+ .BYTE 0
+W?MOLEST:: .ZWORD "molest"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?RAPE
+ .BYTE 0
+W?MONEY:: .ZWORD "money"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?MONSTER:: .ZWORD "monste"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?MOVE:: .ZWORD "move"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?MOVE
+ .BYTE 0
+W?MURDER:: .ZWORD "murder"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?ATTACK
+ .BYTE 0
+W?MYSELF:: .ZWORD "myself"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?N:: .ZWORD "n"
+ .BYTE PS?ADJECTIVE+PS?DIRECTION+P1?DIRECTION
+ .BYTE 31
+ .BYTE A?NORTH
+W?NARROW:: .ZWORD "narrow"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?NARROW
+ .BYTE 0
+W?NASTY:: .ZWORD "nasty"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?NASTY
+ .BYTE 0
+W?NE:: .ZWORD "ne"
+ .BYTE PS?DIRECTION+P1?DIRECTION
+ .BYTE 27
+ .BYTE 0
+W?NEAT:: .ZWORD "neat"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?NEAT
+ .BYTE 0
+W?NECKLACE:: .ZWORD "neckla"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?NEWS:: .ZWORD "news"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?NEWS
+ .BYTE 0
+W?NEWSPAPER:: .ZWORD "newspa"
+ .BYTE PS?OBJECT+PS?ADJECTIVE+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE A?NEWSPAPER
+W?NO:: .ZWORD "no"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?NO
+ .BYTE 0
+W?NORTH:: .ZWORD "north"
+ .BYTE PS?ADJECTIVE+PS?DIRECTION+P1?DIRECTION
+ .BYTE 31
+ .BYTE A?NORTH
+W?NORTHE:: .ZWORD "northe"
+ .BYTE PS?ADJECTIVE+PS?DIRECTION+P1?ADJECTIVE
+ .BYTE A?NORTHE
+ .BYTE 27
+W?NORTHWEST:: .ZWORD "northw"
+ .BYTE PS?DIRECTION+P1?DIRECTION
+ .BYTE 26
+ .BYTE 0
+W?NOTE:: .ZWORD "note"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?NW:: .ZWORD "nw"
+ .BYTE PS?DIRECTION+P1?DIRECTION
+ .BYTE 26
+ .BYTE 0
+W?OAK:: .ZWORD "oak"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?OAK
+ .BYTE 0
+W?OBLONG:: .ZWORD "oblong"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?OBLONG
+ .BYTE 0
+W?OBSIDIAN:: .ZWORD "obsidi"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?OBSIDIAN
+ .BYTE 0
+W?OF:: .ZWORD "of"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?OF
+ .BYTE 0
+W?OFF:: .ZWORD "off"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?OFF
+ .BYTE 0
+W?OFFER:: .ZWORD "offer"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?GIVE
+ .BYTE 0
+W?OLD:: .ZWORD "old"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?OLD
+ .BYTE 0
+W?ON:: .ZWORD "on"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?ON
+ .BYTE 0
+W?ONE:: .ZWORD "one"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?ONE
+ .BYTE 0
+W?ONTO:: .ZWORD "onto"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?ON
+ .BYTE 0
+W?OOPS:: .ZWORD "oops"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?OOPS
+ .BYTE 0
+W?OPEN:: .ZWORD "open"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?OPEN
+ .BYTE 0
+W?OPENER:: .ZWORD "opener"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?ORANGE:: .ZWORD "orange"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?ORANGE
+ .BYTE 0
+W?OUT:: .ZWORD "out"
+ .BYTE PS?DIRECTION+PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?OUT
+ .BYTE 20
+W?OVER:: .ZWORD "over"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?OVER
+ .BYTE 0
+W?OWL:: .ZWORD "owl"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PACKAGE:: .ZWORD "packag"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PAINTING:: .ZWORD "painti"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PAIR:: .ZWORD "pair"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PAPER:: .ZWORD "paper"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PASSAGE:: .ZWORD "passag"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PAT:: .ZWORD "pat"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?RUB
+ .BYTE 0
+W?PATH:: .ZWORD "path"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PEARL:: .ZWORD "pearl"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?PEARL
+ .BYTE 0
+W?PENTAGRAM:: .ZWORD "pentag"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PET:: .ZWORD "pet"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?RUB
+ .BYTE 0
+W?PICK:: .ZWORD "pick"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?PICK
+ .BYTE 0
+W?PIECE:: .ZWORD "piece"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PLACE:: .ZWORD "place"
+ .BYTE PS?VERB+PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?PLACE
+ .BYTE ACT?PUT
+W?PLACEM:: .ZWORD "placem"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PLAY:: .ZWORD "play"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?PLAY
+ .BYTE 0
+W?POINT:: .ZWORD "point"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?WAVE
+ .BYTE 0
+W?POKE:: .ZWORD "poke"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?POKE
+ .BYTE 0
+W?POLE:: .ZWORD "pole"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?POLES:: .ZWORD "poles"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?POOL:: .ZWORD "pool"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PORTRAIT:: .ZWORD "portra"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?POST:: .ZWORD "post"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?POSTS:: .ZWORD "posts"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?POT:: .ZWORD "pot"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?POUR:: .ZWORD "pour"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?POUR
+ .BYTE 0
+W?PRESS:: .ZWORD "press"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?PUSH
+ .BYTE 0
+W?PRICELESS:: .ZWORD "pricel"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?PRICELESS
+ .BYTE 0
+W?PRINCESS:: .ZWORD "prince"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?PROCEED:: .ZWORD "procee"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?WALK
+ .BYTE 0
+W?PULL:: .ZWORD "pull"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?PULL
+ .BYTE 0
+W?PUNCTURE:: .ZWORD "punctu"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?POKE
+ .BYTE 0
+W?PURPLE:: .ZWORD "purple"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?PURPLE
+ .BYTE 0
+W?PUSH:: .ZWORD "push"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?PUSH
+ .BYTE 0
+W?PUT:: .ZWORD "put"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?PUT
+ .BYTE 0
+W?Q:: .ZWORD "q"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?QUIT
+ .BYTE 0
+W?QUIT:: .ZWORD "quit"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?QUIT
+ .BYTE 0
+W?RACK:: .ZWORD "rack"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?RAISE:: .ZWORD "raise"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?RAISE
+ .BYTE 0
+W?RAP:: .ZWORD "rap"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?KNOCK
+ .BYTE 0
+W?RAPE:: .ZWORD "rape"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?RAPE
+ .BYTE 0
+W?RARE:: .ZWORD "rare"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?RARE
+ .BYTE 0
+W?RAVINE:: .ZWORD "ravine"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?READ:: .ZWORD "read"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?READ
+ .BYTE 0
+W?RECEPTACLE:: .ZWORD "recept"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?RED:: .ZWORD "red"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?RED
+ .BYTE 0
+W?RELEASE:: .ZWORD "releas"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?UNTIE
+ .BYTE 0
+W?REMOVE:: .ZWORD "remove"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TAKE
+ .BYTE 0
+W?REPLY:: .ZWORD "reply"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SAY
+ .BYTE 0
+W?RESTART:: .ZWORD "restar"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?RESTART
+ .BYTE 0
+W?RESTORE:: .ZWORD "restor"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?RESTORE
+ .BYTE 0
+W?RIBBON:: .ZWORD "ribbon"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?RIDDLE:: .ZWORD "riddle"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?ROBOT:: .ZWORD "robot"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?ROCK:: .ZWORD "rock"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?ROLL:: .ZWORD "roll"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?MOVE
+ .BYTE 0
+W?ROPE:: .ZWORD "rope"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?RUB:: .ZWORD "rub"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?RUB
+ .BYTE 0
+W?RUBY:: .ZWORD "ruby"
+ .BYTE PS?OBJECT+PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?RUBY
+ .BYTE O?ANY
+W?RUN:: .ZWORD "run"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?WALK
+ .BYTE 0
+W?RUSTY:: .ZWORD "rusty"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?RUSTY
+ .BYTE 0
+W?S:: .ZWORD "s"
+ .BYTE PS?ADJECTIVE+PS?DIRECTION+P1?DIRECTION
+ .BYTE 28
+ .BYTE A?SOUTH
+W?SAFE:: .ZWORD "safe"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?SAPPHIRE:: .ZWORD "sapphi"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?SAPPHIRE
+ .BYTE 0
+W?SATIN:: .ZWORD "satin"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?SATIN
+ .BYTE 0
+W?SAVE:: .ZWORD "save"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SAVE
+ .BYTE 0
+W?SAY:: .ZWORD "say"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SAY
+ .BYTE 0
+W?SCORCHED:: .ZWORD "scorch"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?SCORCHED
+ .BYTE 0
+W?SCORE:: .ZWORD "score"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SCORE
+ .BYTE 0
+W?SCREAM:: .ZWORD "scream"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?YELL
+ .BYTE 0
+W?SCRIPT:: .ZWORD "script"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SCRIPT
+ .BYTE 0
+W?SE:: .ZWORD "se"
+ .BYTE PS?DIRECTION+P1?DIRECTION
+ .BYTE 25
+ .BYTE 0
+W?SEA:: .ZWORD "sea"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?SEA
+ .BYTE 0
+W?SEARCH:: .ZWORD "search"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SEARCH
+ .BYTE 0
+W?SECURE:: .ZWORD "secure"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TIE
+ .BYTE 0
+W?SELF:: .ZWORD "self"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?SERPENT:: .ZWORD "serpen"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?SET:: .ZWORD "set"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?SHAKE:: .ZWORD "shake"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SHAKE
+ .BYTE 0
+W?SHIT:: .ZWORD "shit"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?CURSE
+ .BYTE 0
+W?SHOUT:: .ZWORD "shout"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?YELL
+ .BYTE 0
+W?SHUT:: .ZWORD "shut"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TURN
+ .BYTE 0
+W?SIT:: .ZWORD "sit"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?CLIMB
+ .BYTE 0
+W?SKIM:: .ZWORD "skim"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?READ
+ .BYTE 0
+W?SKIP:: .ZWORD "skip"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SKIP
+ .BYTE 0
+W?SLAY:: .ZWORD "slay"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?ATTACK
+ .BYTE 0
+W?SLICE:: .ZWORD "slice"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?CUT
+ .BYTE 0
+W?SLIDE:: .ZWORD "slide"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SLIDE
+ .BYTE 0
+W?SLOT:: .ZWORD "slot"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?SMALL:: .ZWORD "small"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?SMALL
+ .BYTE 0
+W?SMASH:: .ZWORD "smash"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?DESTROY
+ .BYTE 0
+W?SMELL:: .ZWORD "smell"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SMELL
+ .BYTE 0
+W?SMOKEY:: .ZWORD "smokey"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?SMOKEY
+ .BYTE 0
+W?SNAKE:: .ZWORD "snake"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?SOLID:: .ZWORD "solid"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?SOLID
+ .BYTE 0
+W?SOUTH:: .ZWORD "south"
+ .BYTE PS?ADJECTIVE+PS?DIRECTION+P1?DIRECTION
+ .BYTE 28
+ .BYTE A?SOUTH
+W?SOUTHE:: .ZWORD "southe"
+ .BYTE PS?ADJECTIVE+PS?DIRECTION+P1?ADJECTIVE
+ .BYTE A?SOUTHE
+ .BYTE 25
+W?SOUTHWEST:: .ZWORD "southw"
+ .BYTE PS?DIRECTION+P1?DIRECTION
+ .BYTE 24
+ .BYTE 0
+W?SPHERE:: .ZWORD "sphere"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?SPILL:: .ZWORD "spill"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?POUR
+ .BYTE 0
+W?SQUARE:: .ZWORD "square"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?SQUARE
+ .BYTE 0
+W?STAB:: .ZWORD "stab"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?ATTACK
+ .BYTE 0
+W?STACK:: .ZWORD "stack"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?STAMP:: .ZWORD "stamp"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?STAND:: .ZWORD "stand"
+ .BYTE PS?OBJECT+PS?VERB+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE ACT?STAND
+W?STANDS:: .ZWORD "stands"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?STAR:: .ZWORD "star"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?STATUE:: .ZWORD "statue"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?STEEL:: .ZWORD "steel"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?STEEL
+ .BYTE 0
+W?STEP:: .ZWORD "step"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?WALK
+ .BYTE 0
+W?STONE:: .ZWORD "stone"
+ .BYTE PS?OBJECT+PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?STONE
+ .BYTE O?ANY
+W?STRADIVARIUS:: .ZWORD "stradi"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?STRANGE:: .ZWORD "strang"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?STRANGE
+ .BYTE 0
+W?STREAM:: .ZWORD "stream"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?STRIKE:: .ZWORD "strike"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?STRIKE
+ .BYTE 0
+W?STRING:: .ZWORD "string"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?SUPER:: .ZWORD "super"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SUPER
+ .BYTE 0
+W?SUPERBRIEF:: .ZWORD "superb"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SUPER
+ .BYTE 0
+W?SW:: .ZWORD "sw"
+ .BYTE PS?DIRECTION+P1?DIRECTION
+ .BYTE 24
+ .BYTE 0
+W?SWIM:: .ZWORD "swim"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SWIM
+ .BYTE 0
+W?SWING:: .ZWORD "swing"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SWING
+ .BYTE 0
+W?SWORD:: .ZWORD "sword"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?TABLE:: .ZWORD "table"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?TAKE:: .ZWORD "take"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TAKE
+ .BYTE 0
+W?TALK:: .ZWORD "talk"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TALK
+ .BYTE 0
+W?TASTE:: .ZWORD "taste"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?EAT
+ .BYTE 0
+W?TEA:: .ZWORD "tea"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?TEA
+ .BYTE 0
+W?TEAPOT:: .ZWORD "teapot"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?TELL:: .ZWORD "tell"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TELL
+ .BYTE 0
+W?THE:: .ZWORD "the"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?THE
+ .BYTE 0
+W?THEM:: .ZWORD "them"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?THEN:: .ZWORD "then"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?THEN
+ .BYTE 0
+W?THIN:: .ZWORD "thin"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?THIN
+ .BYTE 0
+W?THREE:: .ZWORD "three"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?THREE
+ .BYTE 0
+W?THROUGH:: .ZWORD "throug"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?WITH
+ .BYTE 0
+W?THROW:: .ZWORD "throw"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?THROW
+ .BYTE 0
+W?THRU:: .ZWORD "thru"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?WITH
+ .BYTE 0
+W?THRUST:: .ZWORD "thrust"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SWING
+ .BYTE 0
+W?TIE:: .ZWORD "tie"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TIE
+ .BYTE 0
+W?TO:: .ZWORD "to"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?TO
+ .BYTE 0
+W?TOMB:: .ZWORD "tomb"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?TOSS:: .ZWORD "toss"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?THROW
+ .BYTE 0
+W?TOUCH:: .ZWORD "touch"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?RUB
+ .BYTE 0
+W?TREASURE:: .ZWORD "treasu"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?TRIANGULAR:: .ZWORD "triang"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?TRIANGULAR
+ .BYTE 0
+W?TRUNK:: .ZWORD "trunk"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?TUG:: .ZWORD "tug"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?PULL
+ .BYTE 0
+W?TUNNEL:: .ZWORD "tunnel"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?TURN:: .ZWORD "turn"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?TURN
+ .BYTE 0
+W?U:: .ZWORD "u"
+ .BYTE PS?DIRECTION+PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?UP
+ .BYTE 23
+W?UNATTACH:: .ZWORD "unatta"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?UNTIE
+ .BYTE 0
+W?UNDER:: .ZWORD "under"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?UNDER
+ .BYTE 0
+W?UNDERNEATH:: .ZWORD "undern"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?UNDER
+ .BYTE 0
+W?UNFASTEN:: .ZWORD "unfast"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?UNTIE
+ .BYTE 0
+W?UNHOOK:: .ZWORD "unhook"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?UNTIE
+ .BYTE 0
+W?UNICORN:: .ZWORD "unicor"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?UNLOCK:: .ZWORD "unlock"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?UNLOCK
+ .BYTE 0
+W?UNSCRIPT:: .ZWORD "unscri"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?UNSCRIPT
+ .BYTE 0
+W?UNTIE:: .ZWORD "untie"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?UNTIE
+ .BYTE 0
+W?UP:: .ZWORD "up"
+ .BYTE PS?DIRECTION+PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?UP
+ .BYTE 23
+W?USED:: .ZWORD "used"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?USED
+ .BYTE 0
+W?USING:: .ZWORD "using"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?WITH
+ .BYTE 0
+W?VELVET:: .ZWORD "velvet"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?VELVET
+ .BYTE 0
+W?VERBOSE:: .ZWORD "verbos"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?VERBOSE
+ .BYTE 0
+W?VERSION:: .ZWORD "versio"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?VERSION
+ .BYTE 0
+W?VIOLIN:: .ZWORD "violin"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?W:: .ZWORD "w"
+ .BYTE PS?ADJECTIVE+PS?DIRECTION+P1?DIRECTION
+ .BYTE 29
+ .BYTE A?WEST
+W?WADE:: .ZWORD "wade"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?SWIM
+ .BYTE 0
+W?WAIT:: .ZWORD "wait"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?WAIT
+ .BYTE 0
+W?WAKE:: .ZWORD "wake"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?WAKE
+ .BYTE 0
+W?WALK:: .ZWORD "walk"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?WALK
+ .BYTE 0
+W?WALL:: .ZWORD "wall"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?WAND:: .ZWORD "wand"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?WANDS:: .ZWORD "wands"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?WATER:: .ZWORD "water"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?WAVE:: .ZWORD "wave"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?WAVE
+ .BYTE 0
+W?WELL:: .ZWORD "well"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?WEST:: .ZWORD "west"
+ .BYTE PS?ADJECTIVE+PS?DIRECTION+P1?DIRECTION
+ .BYTE 29
+ .BYTE A?WEST
+W?WESTERN:: .ZWORD "wester"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?WESTERN
+ .BYTE 0
+W?WHAT:: .ZWORD "what"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?EXAMINE
+ .BYTE 0
+W?WHATS:: .ZWORD "whats"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?EXAMINE
+ .BYTE 0
+W?WHERE:: .ZWORD "where"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?FIND
+ .BYTE 0
+W?WHITE:: .ZWORD "white"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?WHITE
+ .BYTE 0
+W?WICKER:: .ZWORD "wicker"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?WICKER
+ .BYTE 0
+W?WINDOW:: .ZWORD "window"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?WIRE:: .ZWORD "wire"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?WITH:: .ZWORD "with"
+ .BYTE PS?PREPOSITION+P1?OBJECT
+ .BYTE PR?WITH
+ .BYTE 0
+W?WIZARD:: .ZWORD "wizard"
+ .BYTE PS?OBJECT+PS?ADJECTIVE+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE A?WIZARD
+W?WOMAN:: .ZWORD "woman"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?WOODEN:: .ZWORD "wooden"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?WOODEN
+ .BYTE 0
+W?WORK:: .ZWORD "work"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?WORK
+ .BYTE 0
+W?WORKBENCH:: .ZWORD "workbe"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+W?WORN:: .ZWORD "worn"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?WORN
+ .BYTE 0
+W?Y:: .ZWORD "y"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?Y
+ .BYTE 0
+W?YANK:: .ZWORD "yank"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?PULL
+ .BYTE 0
+W?YELL:: .ZWORD "yell"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?YELL
+ .BYTE 0
+W?YES:: .ZWORD "yes"
+ .BYTE PS?BUZZ-WORD
+ .BYTE B?YES
+ .BYTE 0
+W?YOUNG:: .ZWORD "young"
+ .BYTE PS?ADJECTIVE+P1?ADJECTIVE
+ .BYTE A?YOUNG
+ .BYTE 0
+W?Z:: .ZWORD "z"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?WAIT
+ .BYTE 0
+W?ZORK:: .ZWORD "zork"
+ .BYTE PS?VERB+P1?VERB
+ .BYTE ACT?ZORK
+ .BYTE 0
+W?ZORKMID:: .ZWORD "zorkmi"
+ .BYTE PS?OBJECT+PS?ADJECTIVE+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE A?ZORKMID
+W?ZZMGCK:: .ZWORD "zzmgck"
+ .BYTE PS?OBJECT+P1?OBJECT
+ .BYTE O?ANY
+ .BYTE 0
+ .ENDT
+
+
+; END LOAD
+
+ENDLOD::
+
+
+ .ENDI
diff --git a/mini2freq.xzap b/mini2freq.xzap
new file mode 100644
index 0000000..6a48244
--- /dev/null
+++ b/mini2freq.xzap
@@ -0,0 +1,200 @@
+ .FSTR FSTR?1,"the " ;894 448
+ .FSTR FSTR?2,"The " ;828 277
+ .FSTR FSTR?3,"You " ;465 156
+ .FSTR FSTR?4,", " ;302 303
+ .FSTR FSTR?5,"and " ;286 144
+ .FSTR FSTR?6,"is " ;264 265
+ .FSTR FSTR?7,"you " ;250 126
+ .FSTR FSTR?8,"can't " ;225 46
+ .FSTR FSTR?9,"There " ;220 45
+ .FSTR FSTR?10,". " ;218 219
+ .FSTR FSTR?11,"to " ;185 186
+ .FSTR FSTR?12,"with " ;171 58
+ .FSTR FSTR?13,"of " ;167 168
+ .FSTR FSTR?14,"your " ;159 54
+ .FSTR FSTR?15,"from " ;150 51
+ .FSTR FSTR?16,"have " ;144 49
+ .FSTR FSTR?17,"Wizard " ;138 24
+ .FSTR FSTR?18,"This " ;128 33
+ .FSTR FSTR?19,"that " ;117 40
+ .FSTR FSTR?20,"are " ;114 58
+ .FSTR FSTR?21,"dragon " ;100 21
+ .FSTR FSTR?22,"in " ;97 98
+ .FSTR FSTR?23,"don't " ;90 19
+ .FSTR FSTR?24,"room " ;84 29
+ .FSTR FSTR?25,"into " ;84 29
+ .FSTR FSTR?26,"princess " ;84 13
+ .FSTR FSTR?27,"It " ;80 41
+ .FSTR FSTR?28,"It's " ;80 17
+ .FSTR FSTR?29,"huge " ;78 27
+ .FSTR FSTR?30,"balloon " ;78 14
+ .FSTR FSTR?31,"seems " ;72 19
+ .FSTR FSTR?32,"already " ;72 13
+ .FSTR FSTR?33,"here" ;70 36
+ .FSTR FSTR?34,"but " ;70 36
+ .FSTR FSTR?35,"this " ;69 24
+ .FSTR FSTR?36,"A " ;68 69
+ .FSTR FSTR?37,"Wizard's " ;63 8
+ .FSTR FSTR?38,"his " ;62 32
+ .FSTR FSTR?39,"appears " ;60 11
+ .FSTR FSTR?40,"for " ;54 28
+ .FSTR FSTR?41,"Room" ;54 19
+ .FSTR FSTR?42,"nothing " ;54 10
+ .FSTR FSTR?43,"that" ;52 27
+ .FSTR FSTR?44,"not " ;52 27
+ .FSTR FSTR?45,"which " ;52 14
+ .FSTR FSTR?46,"sphere" ;52 14
+ .FSTR FSTR?47,"closed" ;52 14
+ .FSTR FSTR?48,"out " ;50 26
+ .FSTR FSTR?49,"has " ;50 26
+ .FSTR FSTR?50,"enormous " ;49 8
+ .FSTR FSTR?51,"doesn't " ;49 8
+ .FSTR FSTR?52,"You're " ;49 8
+ .FSTR FSTR?53,"Frobozz " ;49 8
+ .FSTR FSTR?54,"He " ;48 25
+ .FSTR FSTR?55,"demon " ;48 13
+ .FSTR FSTR?56,"crystal " ;48 9
+ .FSTR FSTR?57,"There's " ;48 7
+ .FSTR FSTR?58,"on " ;47 48
+ .FSTR FSTR?59,"wand " ;45 16
+ .FSTR FSTR?60,"door " ;45 16
+ .FSTR FSTR?61,"isn't " ;45 10
+ .FSTR FSTR?62,"would " ;44 12
+ .FSTR FSTR?63,"small " ;44 12
+ .FSTR FSTR?64,"you're " ;42 8
+ .FSTR FSTR?65,"through " ;42 8
+ .FSTR FSTR?66,"passage " ;42 8
+ .FSTR FSTR?67,"direction" ;42 7
+ .FSTR FSTR?68,"Nothing " ;42 7
+ .FSTR FSTR?69,"light " ;40 11
+ .FSTR FSTR?70,"leads " ;40 11
+ .FSTR FSTR?71,"ground" ;40 11
+ .FSTR FSTR?72,"Your " ;40 11
+ .FSTR FSTR?73,"That " ;40 11
+ .FSTR FSTR?74,"menhir " ;40 9
+ .FSTR FSTR?75,"cannot " ;40 9
+ .FSTR FSTR?76,"before " ;40 9
+ .FSTR FSTR?77,"something " ;40 6
+ .FSTR FSTR?78,"I " ;39 40
+ .FSTR FSTR?79,"one " ;38 20
+ .FSTR FSTR?80,"you" ;37 38
+ .FSTR FSTR?81,"be " ;37 38
+ .FSTR FSTR?82,"! " ;37 38
+ .FSTR FSTR?83,"as " ;36 37
+ .FSTR FSTR?84,"an " ;36 37
+ .FSTR FSTR?85,"only " ;36 13
+ .FSTR FSTR?86,"been " ;36 13
+ .FSTR FSTR?87,"takes " ;36 10
+ .FSTR FSTR?88,"south " ;36 10
+ .FSTR FSTR?89,"looks " ;36 10
+ .FSTR FSTR?90,"large " ;36 10
+ .FSTR FSTR?91,"unicorn " ;36 7
+ .FSTR FSTR?92,"wooden " ;35 8
+ .FSTR FSTR?93,"southwest" ;35 6
+ .FSTR FSTR?94,"You'll " ;35 6
+ .FSTR FSTR?95,"it " ;34 35
+ .FSTR FSTR?96,"now " ;34 18
+
+
+;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
diff --git a/mini2pur.zap b/mini2pur.zap
new file mode 100644
index 0000000..a2ba0d2
--- /dev/null
+++ b/mini2pur.zap
@@ -0,0 +1,8 @@
+
+
+; PURE TABLES ARE DEFINED HERE
+
+PURTBL::
+
+PURTND::
+ .ENDI
diff --git a/mini2str.zap b/mini2str.zap
new file mode 100644
index 0000000..f7d960c
--- /dev/null
+++ b/mini2str.zap
@@ -0,0 +1,263 @@
+
+
+; STRINGS ARE DEFINED HERE
+
+STRBEG::
+
+ .GSTR STR?14,""
+ .GSTR STR?25," has no effect."
+ .GSTR STR?61,"Float"
+ .GSTR STR?76,"yellow sphere"
+ .GSTR STR?77,"grue"
+ .GSTR STR?155,"An old wooden chest sits in the corner."
+ .GSTR STR?173,"You have made it to the top. Well done. There are etchings on the well. A crack runs across the floor at the doorway to the east, but it can be crossed easily. Another doorway leads northeast."
+ .GSTR STR?32,".
+"
+ .GSTR STR?218,"Lord Dimwit's crown is here."
+ .GSTR STR?12,"Oh, no! You have walked into the slavering fangs of a lurking grue!"
+ .GSTR STR?16," "
+ .GSTR STR?106,"a dim cave, its floor piled with furs and old bones"
+ .GSTR STR?107,"On the table sits a blue crystal sphere."
+ .GSTR STR?122,"On the floor is a neat stack of 200 zorkmid bills."
+ .GSTR STR?149,"Dragon hide is tough as steel, but you have annoyed him a bit. He looks as if deciding whether or not to eat you."
+ .GSTR STR?195,"On the floor lies a moby ruby."
+ .GSTR STR?206,"On the floor is a priceless gold zorkmid (a valuable collector's item)."
+ .GSTR STR?222,"Now you've done it. It seems that the brick is an explosive and you have been blown to bits."
+ .GSTR STR?43,"It doesn't fit the lock.
+"
+ .GSTR STR?59,"Fall"
+ .GSTR STR?20," and devoured you!"
+ .GSTR STR?44," the Great Underground Empire"
+ .GSTR STR?150,"That captured his interest. He stares at you balefully."
+ .GSTR STR?152,"That did no damage, but he turns his smoky yellow eyes in your direction."
+ .GSTR STR?165,"The air is cool and damp. A path from the southeast splits here; north toward a stone bridge, and west into a narrow tunnel. It is from the latter that the chill originates."
+ .GSTR STR?72,"pile of jewels"
+ .GSTR STR?196,"The balloon floats majestically out of the volcano, revealing a breathtaking view of a forest clearing with a white house. High winds carry you into the snow-capped (and jagged) cliffs of the Flathead Mountains!"
+ .GSTR STR?201,"descends."
+ .GSTR STR?212,"The book details the use of the so-called ""magic wand"". Apparently, these work by pointing them at the object to be ensorcelled, and then chanting the appropriate magic word. (Amazing how credulous these ancients were.)"
+ .GSTR STR?3,"begin"
+ .GSTR STR?30,"What a concept!"
+ .GSTR STR?52,"You plunge down the well."
+ .GSTR STR?53,"You plunge down the volcano."
+ .GSTR STR?94,"Filling the northern half of the room is a huge aquarium."
+ .GSTR STR?115,"This is a huge limestone cavern, glowing with dim, phosphorescent light from far above. Narrow paths wind south and northeast."
+ .GSTR STR?117,"This smooth-walled tunnel runs northeast to southwest. A faint whirring sound comes from the latter direction. Another opening, choked with leaves, leads southeast."
+ .GSTR STR?121,"This is a small chamber carved from the western end of a short crawl. On the wall is crudely chiseled the number ""8""."
+ .GSTR STR?125,"This was once a kennel for a large dog (some of the bones would fit a dinosaur). The only exit is northeast."
+ .GSTR STR?128,"This is the entrance to a huge tomb. A passage leads north."
+ .GSTR STR?140,"This is a gazebo in the midst of a formal garden. It is cool and restful here. A tea table adorns the center of the gazebo."
+ .GSTR STR?143,"This is the southern end of a garden, where fantastically shaped hedges are arrayed with geometric precision. Though recently untended, the bushes have clearly been shaped: There is a dragon, a unicorn, a great serpent, a huge misshapen dog, and several human figures. To the west is a tunnel."
+ .GSTR STR?168,"This is a tall, damp room with brick walls. There are some etchings on the walls. A passage leads west."
+ .GSTR STR?176,"This robot was trained at GUE Tech to perform simple household functions. To activate, say:
+ >ROBOT, <thing to do>
+A product of the Frobozz Magic Robot Company."
+ .GSTR STR?177,"This room is full of assorted machinery, whirring noisily. On one wall is a triangular button labelled, ""DANGER -- HIGH VOLTAGE."" There are exits to the south and southwest."
+ .GSTR STR?179,"This is a former broom closet. A larger room lies to the north. Chiselled on the wall are the words ""Protected by the Frobozz Magic Alarm Company."""
+ .GSTR STR?207,"This octagonal coin reads ""1000 Zorkmids"" and ""In Frobs We Trust""."
+ .GSTR STR?208,"This must have been a large library, probably for the royal family. All of the shelves have been gnawed to pieces by unfriendly gnomes. To the north is an exit."
+ .GSTR STR?210,"This book is written in an unfamiliar tongue."
+ .GSTR STR?214,"This three zorkmid stamp portrays Lord Dimwit Flathead the Excessive."
+ .GSTR STR?26,"A valiant attempt."
+ .GSTR STR?33,"The demon is gone for a moment. "
+ .GSTR STR?46," comes to a stop.
+
+"
+ .GSTR STR?85,"The demon crushes you with his enormous hand."
+ .GSTR STR?146,"The dragon hisses and blocks your way."
+ .GSTR STR?151,"The dragon is surprised and interested (for the moment)."
+ .GSTR STR?192,"The depressed area is filled with water. There is something hazy at the deepest part of the pool."
+ .GSTR STR?42,"The edge of a place mat is visible under the door."
+ .GSTR STR?132,"Before you are the earthly remains of the mighty Flatheads, twelve somewhat flat heads mounted securely on poles. There is writing carved on the crypt. To the north and south are dark doorways."
+ .GSTR STR?134,"""Here lie the Flatheads, whose heads were placed on poles by the Dungeon Master for amazing untastefulness."""
+ .GSTR STR?147,"A huge red dragon is lying on the rocks, watching."
+ .GSTR STR?148,"A huge red dragon is blocking the north exit. Smoke curls from his nostrils."
+ .GSTR STR?160,"west"
+ .GSTR STR?217,"The excessively gaudy crown of Lord Dimwit Flathead sits in the safe."
+ .GSTR STR?7,"You should have looked before you leaped."
+ .GSTR STR?38,"You see only darkness.
+"
+ .GSTR STR?71,"You sink quietly down again."
+ .GSTR STR?95,"A shattered aquarium fills the northern half of the room."
+ .GSTR STR?159,"east"
+ .GSTR STR?162,"out"
+ .GSTR STR?191,"The far half of this room is depressed. The only exit is west."
+ .GSTR STR?50,"The guardian greedily devours "
+ .GSTR STR?54,"You trip on something and fall over the edge of the bridge."
+ .GSTR STR?74,"basilisk"
+ .GSTR STR?129,"The huge dog snaps at you."
+ .GSTR STR?136,"north"
+ .GSTR STR?36,"Look around you.
+"
+ .GSTR STR?101,"almost monkish in its austerity"
+ .GSTR STR?161,"in"
+ .GSTR STR?185,"The icing spells, ""Eat Me."""
+ .GSTR STR?9,"Pushing the "
+ .GSTR STR?31,"What's tall as a house,
+ round as a cup,
+ and all the king's horses
+ can't draw it up?""
+"
+ .GSTR STR?55,"and the resulting fall does you in."
+ .GSTR STR?86,"A dejected and fearful Wizard watches from the corner."
+ .GSTR STR?109,""""
+ .GSTR STR?211,"Beside the purple book is a white one."
+ .GSTR STR?83,"Inscribed on the floor is a great pentagram drawn with black chalk. In its center is a black circle."
+ .GSTR STR?49,", almost as though an invisible hand had tipped it over.
+"
+ .GSTR STR?60,"Ferment"
+ .GSTR STR?112,"The lamp appears a bit dimmer."
+ .GSTR STR?113,"The lamp is definitely dimmer now."
+ .GSTR STR?114,"The lamp is nearly out."
+ .GSTR STR?47,"""Buzz, whirr, click!"
+ .GSTR STR?65,"All at once you feel very tired."
+ .GSTR STR?37,"It's too dark to see."
+ .GSTR STR?45,"It's not clear what you're referring to.
+"
+ .GSTR STR?164,"It's a long way down."
+ .GSTR STR?174,"It's a long way down!"
+ .GSTR STR?183,"Only a mouse could fit."
+ .GSTR STR?105,"a suburban bedroom out of the 1950's, complete with bunk beds"
+ .GSTR STR?181,"The poison gas takes effect."
+ .GSTR STR?88,"Very nice, but not enough!"
+ .GSTR STR?93,"Here a dark hallway turns a corner. To the south is a dark room, to the east is fitful light."
+ .GSTR STR?137,"south"
+ .GSTR STR?142,"""Visit Exotic ZORK I! Consult the Frobozz Magic Travel Agency, or visit your local computer store for details."""
+ .GSTR STR?199,"lifts off."
+ .GSTR STR?6,"Kicking the "
+ .GSTR STR?131,"A grinning, three-headed dog, wearing a huge collar, wags its tail here."
+ .GSTR STR?154,"The rock walls are scarred by flame, and a blackened doorway leads south."
+ .GSTR STR?188,"The room is now too small to hold you, and the walls are tougher than your body."
+ .GSTR STR?209,"In one corner sits a blue book."
+ .GSTR STR?221,"The room is cluttered with debris from an explosion. The walls seem ready to collapse."
+ .GSTR STR?223,"The room trembles and 5000 tons of rock fall on you."
+ .GSTR STR?24," isn't notably helpful."
+ .GSTR STR?90,"Almost halfway there, oh worthy one!"
+ .GSTR STR?21,"There is some water here."
+ .GSTR STR?80,"The text is in an obscure tongue."
+ .GSTR STR?82,"There is a strange black sphere here."
+ .GSTR STR?84,"There is a demon floating in midair here."
+ .GSTR STR?97,"There is a baby sea serpent swimming in the aquarium."
+ .GSTR STR?108,"There is a clear crystal sphere lying in the sand."
+ .GSTR STR?120,"There is a Stradivarius here."
+ .GSTR STR?141,"There is a matchbook saying ""Visit ZORK I"" here."
+ .GSTR STR?144,"The topiary animals attack! You are crushed by their branches and clawed by their thorns."
+ .GSTR STR?171,"There is a wooden bucket here, 3 feet in diameter and 3 feet high."
+ .GSTR STR?187,"Taste: yum. Effect: massive dehydration."
+ .GSTR STR?193,"There is a package of candied insects here."
+ .GSTR STR?202,"There is a blue label here."
+ .GSTR STR?203,"""FROBOZZ MAGIC BALLOON COMPANY! Hello, Aviator!
+
+To land your balloon, say LAND. Otherwise, you're on your own! (No warranty expressed or implied.)"""
+ .GSTR STR?215,"There is a card with writing on it here."
+ .GSTR STR?219,"There is a square brick here which feels like clay."
+ .GSTR STR?220,"There is a coil of black, braided string here."
+ .GSTR STR?104,"overhung with palm-trees and lianas. The only furniture is a hammock"
+ .GSTR STR?133,"The Flatheads foresaw that someone might tamper with their remains, and took steps to punish such actions."
+ .GSTR STR?135,"Strands of light vibrate toward you, as if searching for something. One by one your possessions glow bright green. Finally, you are attacked by these magical wardens, and destroyed!"
+ .GSTR STR?205,"I wouldn't jump from here."
+ .GSTR STR?35,"As you peer into the sphere, a strange vision takes shape"
+ .GSTR STR?103,"decorated in the Louis XIV style"
+ .GSTR STR?8,"Playing in this way with the "
+ .GSTR STR?13,"Waving the "
+ .GSTR STR?40,"The wand stops glowing, but there is no other apparent effect.
+"
+ .GSTR STR?58,"Freeze"
+ .GSTR STR?145,"The walls of this large cavern are scorched and a sooty dry smell is very strong here. A stone bridge leads the south, and a smokey tunnel opens to the north. To the east is a small opening."
+ .GSTR STR?169,"The walls cannot be climbed."
+ .GSTR STR?1,"leave the game"
+ .GSTR STR?118,"An Elvish sword of great antiquity is here."
+ .GSTR STR?153,", but you barely feel the heat. The dragon is puzzled, but not too puzzled to crush you in his jaws."
+ .GSTR STR?156,"Nestled in the chest is a gold statuette of a dragon."
+ .GSTR STR?200,"lands."
+ .GSTR STR?89,"Ah, truly magnificent! Keep them coming."
+ .GSTR STR?123,"Each bill is worth 100 zorkmids and bears the legend ""In Frobs We Trust""."
+ .GSTR STR?22,"Poof, you're dead!"
+ .GSTR STR?57,"Fumble"
+ .GSTR STR?127,"Bad idea. As you unfasten the collar, the monster rends you into little doggy biscuits."
+ .GSTR STR?10,"Fiddling with the "
+ .GSTR STR?75,"bulging chest"
+ .GSTR STR?79,"copy of ZORK I"
+ .GSTR STR?111,"A familiar brass lantern is lying on the ground."
+ .GSTR STR?29,"An interesting idea..."
+ .GSTR STR?81,"Halls lead west and south. The Wizard's workbench dominates the room. It is stained from years of use, and is deeply gouged as though some huge clawed animal was imprisoned on it. In the center of the bench, three stands - ruby, sapphire, and diamond - form a triangle."
+ .GSTR STR?172,"If you insist."
+ .GSTR STR?190,"A chasm blocks your way."
+ .GSTR STR?96,"rends you limb from limb before he drowns in the air."
+ .GSTR STR?216,"Warning: This room was constructed near weak rock strata. Detonation of explosives here is strictly prohibited!"
+ .GSTR STR?63,"Fence"
+ .GSTR STR?28,"Not bloody likely."
+ .GSTR STR?66,"Your limbs suddenly feel like stone. You can't move a muscle."
+ .GSTR STR?69,"Your little finger begins to twitch, and then your whole body is free again."
+ .GSTR STR?70,"Your head is clearer now."
+ .GSTR STR?78,"convention of wizards"
+ .GSTR STR?91,"Your generosity overwhelms me!"
+ .GSTR STR?130,"A vicious-looking dog guards the entrance to the south. It's your usual dog, except that it has three heads and is the size of an elephant."
+ .GSTR STR?138,"A path of crushed white stone winds among bushes and flower beds of this garden from south to north. Almost hidden by the shrubbery is a small white gazebo."
+ .GSTR STR?182,"An oblong table here is set for afternoon tea. It is clear that the users were indeed mad. To the east is a small hole (perhaps four inches high). A doorway leads west."
+ .GSTR STR?197,"ascends."
+ .GSTR STR?198,"floats, ascending due to its light load."
+ .GSTR STR?56,"Feeble"
+ .GSTR STR?15," "
+ .GSTR STR?62,"Fireproof"
+ .GSTR STR?73,"gold ingot"
+ .GSTR STR?158,". ""Fry!"" he intones, and a bolt of lightning reduces you to a pile of ash. (Serves you right, too, if you ask me.)"
+ .GSTR STR?17," "
+ .GSTR STR?18," "
+ .GSTR STR?19," "
+ .GSTR STR?39,"It already is!
+"
+ .GSTR STR?98,"He takes you instead. ""Uurrp!"""
+ .GSTR STR?110,"You are in an ancient barrow which opens to the southwest."
+ .GSTR STR?116,"You are ankle deep in a stream. To the southwest is a dark tunnel, and to the north a dim cavern."
+ .GSTR STR?119,"You are waist deep in a cold stream. On the northern bank, the walls rise to a small ledge. A ""whir"" comes from an opening to the south."
+ .GSTR STR?124,"You are trying to walk through an enormous rock."
+ .GSTR STR?163,"You are on a north-south bridge spanning a deep ravine. Water flows far beneath."
+ .GSTR STR?170," o b o
+
+ A G I
+
+ E L
+
+ m p a"
+ .GSTR STR?175," o b o
+ r z
+f M A G I C z
+
+c W E L L y
+ o n
+ m p a"
+ .GSTR STR?178,"You are instantly electrocuted."
+ .GSTR STR?180,"You are trapped in a solid steel cage."
+ .GSTR STR?186,"You are blasted to smithereens (wherever they are)."
+ .GSTR STR?194,"You are at the base of a dormant volcano. High above, light enters the cone of the volcano. The only exit is east."
+ .GSTR STR?204,"You are about one hundred feet above the bottom of the volcano."
+ .GSTR STR?4,"end"
+ .GSTR STR?67,"You begin to feel lightheaded."
+ .GSTR STR?87,"Most fine, master! But 'tis not enough. I will do a great service, and are not great services bought at great price?"
+ .GSTR STR?92,"Wondrous fine, master! But one treasure is yet to be given!"
+ .GSTR STR?102,"an opulently furnished seraglio out of an Arabian folktale"
+ .GSTR STR?2,"restart"
+ .GSTR STR?27,"You can't be serious."
+ .GSTR STR?41,"You can't go that way.
+"
+ .GSTR STR?100,"You cut yourself severely on the broken glass."
+ .GSTR STR?5," it at the time."
+ .GSTR STR?48,"The Wizard waves his wand "
+ .GSTR STR?51,"The Wizard of Frobozz is here, eyeing you warily."
+ .GSTR STR?99,"You drop into the aquarium with a splash, which attracts the serpent. Being a hungry baby, he greedily eats you."
+ .GSTR STR?166,"You don't even have an ice-pick."
+ .GSTR STR?64,"Fantasize"
+ .GSTR STR?126,"A gigantic dog collar lies amidst the dust."
+ .GSTR STR?139,"A beautiful unicorn is munching grass here."
+ .GSTR STR?157,"A beautiful princess sits on a rock in the corner. Her hair is unkempt and she appears to be in a trance."
+ .GSTR STR?184,"A rare portrait of J. Pierpont Flathead hangs on the wall."
+ .GSTR STR?23," doesn't seem to work."
+ .GSTR STR?34,"You feel a rush of air as something moved nearby.
+"
+ .GSTR STR?68,"You feel more energetic now."
+ .GSTR STR?213,"Lying in the dust, covered with mold, is a purple book."
+ .GSTR STR?11,"."
+ .GSTR STR?167,"A mass of ice fills the western half of the room."
+ .GSTR STR?189,"In the center of this enormous room, four wooden posts support a huge oblong roof. To the east is a large hole; to the west a gaping chasm."
+
+ .ENDI
diff --git a/misc.zabstr b/misc.zabstr
new file mode 100644
index 0000000..22babb8
--- /dev/null
+++ b/misc.zabstr
@@ -0,0 +1,77 @@
+
+<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>>) (<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 PRINTD .O>>) (<OR <=? .P "A"> <=? .P "AN">> <
+MAPRET <FORM PRINTA .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>>)
+(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>>
+<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 ()>>>
+<DEFMAC BSET ('OBJ "ARGS" BITS) <MULTIBITS FSET .OBJ .BITS>>
+<DEFMAC BCLEAR ('OBJ "ARGS" BITS) <MULTIBITS FCLEAR .OBJ .BITS>>
+<DEFMAC BSET? ('OBJ "ARGS" BITS) <MULTIBITS FSET? .OBJ .BITS>>
+<DEFINE MULTIBITS (X OBJ ATMS "AUX" (O ()) ATM) <REPEAT () <COND (<EMPTY? .ATMS
+> <RETURN <COND (<LENGTH? .O 1> <NTH .O 1>) (<==? .X FSET?> <FORM OR !.O>) (
+ELSE <FORM PROG () !.O>)>>)> <SET ATM <NTH .ATMS 1>> <SET ATMS <REST .ATMS>> <
+SET O (<FORM .X .OBJ <COND (<TYPE? .ATM FORM> .ATM) (ELSE <FORM GVAL .ATM>)>>
+!.O)>>>
+<DEFMAC RFATAL () '<PROG () <PUSH 2> <RSTACK>>>
+<DEFMAC PROB ('BASE?) <FORM G? .BASE? '<RANDOM 100>>>
+<DEFINE-ROUTINE RANDOM-ELEMENT>
+<DEFINE-ROUTINE PICK-ONE>
+<DEFMAC ENABLE ('INT) <FORM PUT .INT ,C-ENABLED? 1>>
+<DEFMAC DISABLE ('INT) <FORM PUT .INT ,C-ENABLED? 0>>
+<DEFMAC FLAMING? ('OBJ) <FORM AND <FORM FSET? .OBJ ',FLAMEBIT> <FORM FSET? .OBJ
+',ONBIT>>>
+<DEFMAC OPENABLE? ('OBJ) <FORM OR <FORM FSET? .OBJ ',DOORBIT> <FORM FSET? .OBJ
+',CONTBIT>>>
+<DEFMAC ABS ('NUM) <FORM COND (<FORM L? .NUM 0> <FORM - 0 .NUM>) (T .NUM)>>
+<DEFMAC P-SONUMS ('SYN) <FORM / <FORM GETB .SYN ',P-SPREP1> 64>>
+<CONSTANT SERIAL 0>
+<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>
+<DEFINE-ROUTINE GO>
+<DEFINE-ROUTINE MAIN-LOOP>
+<DEFINE-ROUTINE MAIN-LOOP-1>
+<GLOBAL P-MULT <>>
+<GLOBAL P-NOT-HERE 0>
+<DEFINE-ROUTINE PERFORM>
+<CONSTANT C-TABLELEN 180>
+<GLOBAL C-TABLE <ITABLE NONE 180>>
+<GLOBAL C-DEMONS 180>
+<GLOBAL C-INTS 180>
+<CONSTANT C-INTLEN 6>
+<CONSTANT C-ENABLED? 0>
+<CONSTANT C-TICK 1>
+<CONSTANT C-RTN 2>
+<DEFINE-ROUTINE QUEUE>
+<DEFINE-ROUTINE INT>
+<GLOBAL CLOCK-WAIT <>>
+<GLOBAL MOVES 0>
+<DEFINE-ROUTINE CLOCKER> \ No newline at end of file
diff --git a/misc.zap b/misc.zap
new file mode 100644
index 0000000..d1bb78c
--- /dev/null
+++ b/misc.zap
@@ -0,0 +1,318 @@
+
+
+ .FUNCT RANDOM-ELEMENT,FROB
+ GET FROB,0
+ RANDOM STACK
+ GET FROB,STACK
+ RSTACK
+
+
+ .FUNCT PICK-ONE,FROB,L,CNT,RND,MSG,RFROB
+ GET FROB,0 >L
+ GET FROB,1 >CNT
+ DEC 'L
+ ADD FROB,2 >FROB
+ MUL CNT,2
+ ADD FROB,STACK >RFROB
+ SUB L,CNT
+ RANDOM STACK >RND
+ GET RFROB,RND >MSG
+ GET RFROB,1
+ PUT RFROB,RND,STACK
+ PUT RFROB,1,MSG
+ INC 'CNT
+ EQUAL? CNT,L \?CND1
+ SET 'CNT,0
+?CND1: PUT FROB,0,CNT
+ RETURN MSG
+
+
+ .FUNCT GO
+START::
+
+?FCN: PUTB P-LEXV,0,59
+ CALL QUEUE,I-WIZARD,4
+ PUT STACK,0,1
+ CALL QUEUE,I-LANTERN,200
+ PUTP BALLOON,P?VTYPE,NONLANDBIT
+ PUTP BUCKET,P?VTYPE,NONLANDBIT
+ SET 'LIT,TRUE-VALUE
+ SET 'WINNER,ADVENTURER
+ SET 'HERE,INSIDE-THE-BARROW
+ SET 'P-IT-OBJECT,FALSE-VALUE
+ FSET? HERE,TOUCHBIT /?CND1
+ CALL V-VERSION
+ CRLF
+?CND1: CALL V-LOOK
+ CALL MAIN-LOOP
+ JUMP ?FCN
+
+
+ .FUNCT MAIN-LOOP,TRASH
+?PRG1: CALL MAIN-LOOP-1 >TRASH
+ JUMP ?PRG1
+
+
+ .FUNCT MAIN-LOOP-1,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,O,I
+ SET 'CNT,0
+ SET 'OBJ,FALSE-VALUE
+ SET 'PTBL,TRUE-VALUE
+ CALL PARSER >P-WON
+ ZERO? P-WON /?CCL3
+ GET P-PRSI,P-MATCHLEN >ICNT
+ GET P-PRSO,P-MATCHLEN >OCNT
+ ZERO? P-IT-OBJECT /?CND4
+ CALL ACCESSIBLE?,P-IT-OBJECT
+ ZERO? STACK /?CND4
+ SET 'TMP,FALSE-VALUE
+?PRG8: IGRTR? 'CNT,ICNT /?REP9
+ GET P-PRSI,CNT
+ EQUAL? STACK,IT \?PRG8
+ PUT P-PRSI,CNT,P-IT-OBJECT
+ SET 'TMP,TRUE-VALUE
+?REP9: ZERO? TMP \?CND15
+ SET 'CNT,0
+?PRG17: IGRTR? 'CNT,OCNT /?CND15
+ GET P-PRSO,CNT
+ EQUAL? STACK,IT \?PRG17
+ PUT P-PRSO,CNT,P-IT-OBJECT
+?CND15: SET 'CNT,0
+?CND4: ZERO? OCNT \?CCL26
+ SET 'NUM,OCNT
+ JUMP ?CND24
+?CCL26: GRTR? OCNT,1 \?CCL28
+ SET 'TBL,P-PRSO
+ ZERO? ICNT \?CCL31
+ SET 'OBJ,FALSE-VALUE
+ JUMP ?CND29
+?CCL31: GET P-PRSI,1 >OBJ
+?CND29: SET 'NUM,OCNT
+ JUMP ?CND24
+?CCL28: GRTR? ICNT,1 \?CCL33
+ SET 'PTBL,FALSE-VALUE
+ SET 'TBL,P-PRSI
+ GET P-PRSO,1 >OBJ
+ SET 'NUM,ICNT
+ JUMP ?CND24
+?CCL33: SET 'NUM,1
+?CND24: ZERO? OBJ \?CND34
+ EQUAL? ICNT,1 \?CND34
+ GET P-PRSI,1 >OBJ
+?CND34: EQUAL? PRSA,V?WALK \?CCL40
+ ZERO? P-WALK-DIR /?CCL40
+ CALL PERFORM,PRSA,PRSO >V
+ JUMP ?CND38
+?CCL40: ZERO? NUM \?CCL44
+ GETB P-SYNTAX,P-SPREP1
+ DIV STACK,64
+ ZERO? STACK \?CCL47
+ CALL PERFORM,PRSA >V
+ SET 'PRSO,FALSE-VALUE
+ JUMP ?CND38
+?CCL47: ZERO? LIT \?PRG52
+ PRINT TOO-DARK
+ CRLF
+ JUMP ?CND38
+?PRG52: PRINT REFERRING
+ SET 'V,FALSE-VALUE
+ JUMP ?CND38
+?CCL44: SET 'P-NOT-HERE,0
+ SET 'P-MULT,FALSE-VALUE
+ GRTR? NUM,1 \?CND54
+ SET 'P-MULT,TRUE-VALUE
+?CND54: SET 'TMP,FALSE-VALUE
+?PRG56: IGRTR? 'CNT,NUM \?CCL60
+ GRTR? P-NOT-HERE,0 \?CCL63
+ PRINTI "The "
+ EQUAL? P-NOT-HERE,NUM /?PRG70
+ PRINTI "other "
+?PRG70: PRINTI "object"
+ EQUAL? P-NOT-HERE,1 /?PRG76
+ PRINTC 115
+?PRG76: PRINTI " that you mentioned "
+ EQUAL? P-NOT-HERE,1 /?PRG83
+ PRINTI "are"
+ JUMP ?PRG85
+?PRG83: PRINTI "is"
+?PRG85: PRINTI "n't here."
+ CRLF
+ JUMP ?CND38
+?CCL63: ZERO? TMP \?CND38
+ PRINTI "There's nothing here you can take."
+ CRLF
+ JUMP ?CND38
+?CCL60: ZERO? PTBL /?CCL92
+ GET P-PRSO,CNT >OBJ1
+ JUMP ?CND90
+?CCL92: GET P-PRSI,CNT >OBJ1
+?CND90: ZERO? PTBL /?CCL95
+ SET 'O,OBJ1
+ JUMP ?CND93
+?CCL95: SET 'O,OBJ
+?CND93: ZERO? PTBL /?CCL98
+ SET 'I,OBJ
+ JUMP ?CND96
+?CCL98: SET 'I,OBJ1
+?CND96: GRTR? NUM,1 /?CCL100
+ GET P-ITBL,P-NC1
+ GET STACK,0
+ EQUAL? STACK,W?ALL \?CND99
+?CCL100: LOC WINNER >V
+ EQUAL? O,NOT-HERE-OBJECT \?CCL105
+ INC 'P-NOT-HERE
+ JUMP ?PRG56
+?CCL105: EQUAL? PRSA,V?TAKE \?CCL107
+ ZERO? I /?CCL107
+ GET P-ITBL,P-NC1
+ GET STACK,0
+ EQUAL? STACK,W?ALL \?CCL107
+ IN? O,I \?PRG56
+?CCL107: EQUAL? P-GETFLAGS,P-ALL \?CCL113
+ EQUAL? PRSA,V?TAKE \?CCL113
+ LOC O
+ EQUAL? STACK,WINNER,HERE,V /?PRD118
+ LOC O
+ EQUAL? STACK,I /?PRD118
+ LOC O
+ FSET? STACK,SURFACEBIT \?PRG56
+?PRD118: FSET? O,TAKEBIT /?CCL113
+ FSET? O,TRYTAKEBIT \?PRG56
+?CCL113: EQUAL? OBJ1,IT \?CCL126
+ PRINTD P-IT-OBJECT
+ JUMP ?PRG127
+?CCL126: PRINTD OBJ1
+?PRG127: PRINTI ": "
+?CND99: SET 'PRSO,O
+ SET 'PRSI,I
+ SET 'TMP,TRUE-VALUE
+ CALL PERFORM,PRSA,PRSO,PRSI >V
+ EQUAL? V,M-FATAL \?PRG56
+?CND38: EQUAL? V,M-FATAL /?CND131
+ LOC WINNER
+ GETP STACK,P?ACTION
+ CALL STACK,M-END >V
+?CND131: EQUAL? V,M-FATAL \?CND1
+ SET 'P-CONT,FALSE-VALUE
+ JUMP ?CND1
+?CCL3: SET 'P-CONT,FALSE-VALUE
+?CND1: ZERO? P-WON /FALSE
+ EQUAL? PRSA,V?SUPER-BRIEF,V?BRIEF,V?TELL /TRUE
+ EQUAL? PRSA,V?VERSION,V?SAVE,V?VERBOSE /TRUE
+ EQUAL? PRSA,V?SCORE,V?RESTART,V?QUIT /TRUE
+ EQUAL? PRSA,V?RESTORE,V?UNSCRIPT,V?SCRIPT /TRUE
+ CALL CLOCKER >V
+ RETURN V
+
+
+ .FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI
+ SET 'OA,PRSA
+ SET 'OO,PRSO
+ SET 'OI,PRSI
+ EQUAL? IT,I,O \?CND1
+ CALL ACCESSIBLE?,P-IT-OBJECT
+ ZERO? STACK \?CND1
+ PRINT REFERRING
+ RETURN 2
+?CND1: EQUAL? O,IT \?CND9
+ SET 'O,P-IT-OBJECT
+?CND9: EQUAL? I,IT \?CND11
+ SET 'I,P-IT-OBJECT
+?CND11: SET 'PRSA,A
+ SET 'PRSO,O
+ ZERO? PRSO /?CND13
+ EQUAL? PRSI,IT /?CND13
+ EQUAL? PRSA,V?WALK /?CND13
+ SET 'P-IT-OBJECT,PRSO
+?CND13: SET 'PRSI,I
+ EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?CCL20
+ CALL NOT-HERE-OBJECT-F >V
+ ZERO? V \?CND18
+?CCL20: SET 'O,PRSO
+ SET 'I,PRSI
+ GETP WINNER,P?ACTION
+ CALL STACK >V
+ ZERO? V \?CND18
+ LOC WINNER
+ GETP STACK,P?ACTION
+ CALL STACK,M-BEG >V
+ ZERO? V \?CND18
+ GET PREACTIONS,A
+ CALL STACK >V
+ ZERO? V \?CND18
+ ZERO? I /?CCL31
+ GETP I,P?ACTION
+ CALL STACK >V
+ ZERO? V \?CND18
+?CCL31: ZERO? O /?CCL35
+ EQUAL? A,V?WALK /?CCL35
+ LOC O
+ ZERO? STACK /?CCL35
+ LOC O
+ GETP STACK,P?CONTFCN
+ CALL STACK >V
+ ZERO? V \?CND18
+?CCL35: ZERO? O /?CCL41
+ EQUAL? A,V?WALK /?CCL41
+ GETP O,P?ACTION
+ CALL STACK >V
+ ZERO? V \?CND18
+?CCL41: GET ACTIONS,A
+ CALL STACK >V
+ ZERO? V /?CND18
+?CND18: SET 'PRSA,OA
+ SET 'PRSO,OO
+ SET 'PRSI,OI
+ RETURN V
+
+
+ .FUNCT QUEUE,RTN,TICK,CINT
+ CALL INT,RTN >CINT
+ PUT CINT,C-TICK,TICK
+ RETURN CINT
+
+
+ .FUNCT INT,RTN,DEMON=0,E,C,INT
+ ADD C-TABLE,C-TABLELEN >E
+ ADD C-TABLE,C-INTS >C
+?PRG1: EQUAL? C,E \?CCL5
+ SUB C-INTS,C-INTLEN >C-INTS
+ ZERO? DEMON /?PEN6
+ SUB C-DEMONS,C-INTLEN >C-DEMONS
+?PEN6: ADD C-TABLE,C-INTS >INT
+ PUT INT,C-RTN,RTN
+ RETURN INT
+?CCL5: GET C,C-RTN
+ EQUAL? STACK,RTN \?CND3
+ RETURN C
+?CND3: ADD C,C-INTLEN >C
+ JUMP ?PRG1
+
+
+ .FUNCT CLOCKER,C,E,TICK,FLG=0
+ ZERO? CLOCK-WAIT /?CND1
+ SET 'CLOCK-WAIT,FALSE-VALUE
+ RFALSE
+?CND1: ZERO? P-WON /?CCL5
+ PUSH C-INTS
+ JUMP ?CND3
+?CCL5: PUSH C-DEMONS
+?CND3: ADD C-TABLE,STACK >C
+ ADD C-TABLE,C-TABLELEN >E
+?PRG6: EQUAL? C,E \?CCL10
+ INC 'MOVES
+ RETURN FLG
+?CCL10: GET C,C-ENABLED?
+ ZERO? STACK /?CND8
+ GET C,C-TICK >TICK
+ ZERO? TICK /?CND8
+ SUB TICK,1
+ PUT C,C-TICK,STACK
+ GRTR? TICK,1 /?CND8
+ GET C,C-RTN
+ CALL STACK
+ ZERO? STACK /?CND8
+ SET 'FLG,TRUE-VALUE
+?CND8: ADD C,C-INTLEN >C
+ JUMP ?PRG6
+
+ .ENDI
diff --git a/misc.zil b/misc.zil
new file mode 100644
index 0000000..00312ff
--- /dev/null
+++ b/misc.zil
@@ -0,0 +1,535 @@
+"MISC for
+ Mini-Zork II: The Wizard of Frobozz
+ (c) Copyright 1988 Infocom, Inc. All Rights Reserved."
+
+;"former MACROS stuff"
+
+<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>>)
+ (<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 PRINTD .O>>)
+ (<OR <=? .P "A">
+ <=? .P "AN">>
+ <MAPRET <FORM PRINTA .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>>)
+ (ELSE <ERROR UNKNOWN-TYPE .E>)>>>>>
+
+;<ROUTINE PRINTA (O)
+ <TELL "a " D .O>>
+
+<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>>
+
+<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 ()>>>
+
+<DEFMAC BSET ('OBJ "ARGS" BITS)
+ <MULTIBITS FSET .OBJ .BITS>>
+
+<DEFMAC BCLEAR ('OBJ "ARGS" BITS)
+ <MULTIBITS FCLEAR .OBJ .BITS>>
+
+<DEFMAC BSET? ('OBJ "ARGS" BITS)
+ <MULTIBITS FSET? .OBJ .BITS>>
+
+<DEFINE MULTIBITS (X OBJ ATMS "AUX" (O ()) ATM)
+ <REPEAT ()
+ <COND (<EMPTY? .ATMS>
+ <RETURN!- <COND (<LENGTH? .O 1> <NTH .O 1>)
+ (<==? .X FSET?> <FORM OR !.O>)
+ (ELSE <FORM PROG () !.O>)>>)>
+ <SET ATM <NTH .ATMS 1>>
+ <SET ATMS <REST .ATMS>>
+ <SET O
+ (<FORM .X
+ .OBJ
+ <COND (<TYPE? .ATM FORM> .ATM)
+ (ELSE <FORM GVAL .ATM>)>>
+ !.O)>>>
+
+<DEFMAC RFATAL ()
+ '<PROG () <PUSH 2> <RSTACK>>>
+
+<DEFMAC PROB ('BASE?)
+ <FORM G? .BASE? '<RANDOM 100>>>
+
+<ROUTINE RANDOM-ELEMENT (FROB)
+ <GET .FROB <RANDOM <GET .FROB 0>>>>
+
+<ROUTINE PICK-ONE (FROB
+ "AUX" (L <GET .FROB 0>) (CNT <GET .FROB 1>) RND MSG RFROB)
+ <SET L <- .L 1>>
+ <SET FROB <REST .FROB 2>>
+ <SET RFROB <REST .FROB <* .CNT 2>>>
+ <SET RND <RANDOM <- .L .CNT>>>
+ <SET MSG <GET .RFROB .RND>>
+ <PUT .RFROB .RND <GET .RFROB 1>>
+ <PUT .RFROB 1 .MSG>
+ <SET CNT <+ .CNT 1>>
+ <COND (<==? .CNT .L> <SET CNT 0>)>
+ <PUT .FROB 0 .CNT>
+ .MSG>
+
+<DEFMAC ENABLE ('INT) <FORM PUT .INT ,C-ENABLED? 1>>
+
+<DEFMAC DISABLE ('INT) <FORM PUT .INT ,C-ENABLED? 0>>
+
+<DEFMAC FLAMING? ('OBJ)
+ <FORM AND <FORM FSET? .OBJ ',FLAMEBIT>
+ <FORM FSET? .OBJ ',ONBIT>>>
+
+<DEFMAC OPENABLE? ('OBJ)
+ <FORM OR <FORM FSET? .OBJ ',DOORBIT>
+ <FORM FSET? .OBJ ',CONTBIT>>>
+
+<DEFMAC ABS ('NUM)
+ <FORM COND (<FORM L? .NUM 0> <FORM - 0 .NUM>)
+ (T .NUM)>>
+
+; "taa 11/7/87 Macro to return number of objects needed by syntax
+ in compact format"
+<DEFMAC P-SONUMS ('SYN)
+ <FORM / <FORM GETB .SYN ',P-SPREP1> 64>>
+
+\
+;"former MAIN stuff"
+
+<CONSTANT SERIAL 0>
+
+<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>
+
+<ROUTINE GO ()
+ <PUTB ,P-LEXV 0 59>
+ <ENABLE <QUEUE I-WIZARD 4>>
+ <QUEUE I-LANTERN 200>
+ <PUTP ,BALLOON ,P?VTYPE ,NONLANDBIT>
+ <PUTP ,BUCKET ,P?VTYPE ,NONLANDBIT>
+ <SETG LIT T>
+ <SETG WINNER ,ADVENTURER>
+ <SETG HERE ,INSIDE-THE-BARROW>
+ <SETG P-IT-OBJECT <>>
+ <COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
+ <V-VERSION>
+ <CRLF>)>
+ <V-LOOK>
+ <MAIN-LOOP>
+ <AGAIN>>
+
+<ROUTINE MAIN-LOOP ("AUX" TRASH)
+ <REPEAT ()
+ <SET TRASH <MAIN-LOOP-1>>>>
+
+<ROUTINE MAIN-LOOP-1 ("AUX" ICNT OCNT NUM CNT OBJ TBL V PTBL OBJ1 TMP O I)
+ <SET CNT 0>
+ <SET OBJ <>>
+ <SET PTBL T>
+ <COND (<SETG P-WON <PARSER>>
+ <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>
+ <NOT <ZERO? ,P-WALK-DIR>>>
+ <SET V <PERFORM ,PRSA ,PRSO>>)
+ (<0? .NUM>
+ <COND (<0? <P-SONUMS ,P-SYNTAX>
+ ;<BAND <GETB ,P-SYNTAX ,P-SBITS> ,P-SONUMS>>
+ <SET V <PERFORM ,PRSA>>
+ <SETG PRSO <>>)
+ (<NOT ,LIT>
+ <TELL ,TOO-DARK CR>)
+ (T
+ <TELL ,REFERRING>
+ <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
+"There's nothing here you can take." CR>)>
+ <RETURN>)
+ (T
+ <COND (.PTBL <SET OBJ1 <GET ,P-PRSO .CNT>>)
+ (T <SET OBJ1 <GET ,P-PRSI .CNT>>)>
+ <SET O <COND (.PTBL .OBJ1) (T .OBJ)>>
+ <SET I <COND (.PTBL .OBJ) (T .OBJ1)>>
+
+;"multiple exceptions"
+<COND (<OR <G? .NUM 1>
+ <EQUAL? <GET <GET ,P-ITBL ,P-NC1> 0> ,W?ALL>>
+ <SET V <LOC ,WINNER>>
+ <COND (<EQUAL? .O ,NOT-HERE-OBJECT>
+ <SETG P-NOT-HERE <+ ,P-NOT-HERE 1>>
+ <AGAIN>)
+ (<AND <VERB? TAKE>
+ .I
+ <EQUAL? <GET <GET ,P-ITBL ,P-NC1> 0> ,W?ALL>
+ <NOT <IN? .O .I>>>
+ <AGAIN>)
+ (<AND <EQUAL? ,P-GETFLAGS ,P-ALL>
+ <VERB? TAKE>
+ <OR <AND <NOT <EQUAL? <LOC .O> ,WINNER ,HERE .V>>
+ <NOT <EQUAL? <LOC .O> .I>>
+ <NOT <FSET? <LOC .O> ,SURFACEBIT>>>
+ <NOT <OR <FSET? .O ,TAKEBIT>
+ <FSET? .O ,TRYTAKEBIT>>>>>
+ <AGAIN>)
+ (ELSE
+ <COND (<EQUAL? .OBJ1 ,IT>
+ <PRINTD ,P-IT-OBJECT>)
+ (T <PRINTD .OBJ1>)>
+ <TELL ": ">)>)>
+;"end multiple exceptions"
+ <SETG PRSO .O>
+ <SETG PRSI .I>
+ <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 <>>)>
+ <SET V <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-END>>)>
+ ;<COND (<VERB? ;AGAIN ;"WALK -- why was this here?"
+ SAVE RESTORE ;SCORE ;VERSION ;WAIT> T)
+ (T
+ <SETG L-PRSA ,PRSA>
+ <SETG L-PRSO ,PRSO>
+ <SETG L-PRSI ,PRSI>)>
+ <COND (<==? .V ,M-FATAL> <SETG P-CONT <>>)>)
+ (T
+ <SETG P-CONT <>>)>
+ <COND (,P-WON
+ <COND (<VERB? TELL BRIEF SUPER-BRIEF VERBOSE SAVE VERSION
+ QUIT RESTART SCORE SCRIPT UNSCRIPT RESTORE> T)
+ (T <SET V <CLOCKER>>)>)>>
+
+<GLOBAL P-MULT <>>
+
+<GLOBAL P-NOT-HERE 0>
+
+
+
+%<COND (<GASSIGNED? PREDGEN>
+
+'<ROUTINE PERFORM (A "OPTIONAL" (O <>) (I <>) "AUX" V OA OO OI)
+ ;<COND (,DEBUG
+ <TELL "[Perform: ">
+ %<COND (<GASSIGNED? PREDGEN> '<TELL N .A>)
+ (T '<PRINC <NTH ,ACTIONS <+ <* .A 2> 1>>>)>
+ <COND (<AND .O <NOT <==? .A ,V?WALK>>>
+ <TELL "/" D .O>)>
+ <COND (.I <TELL "/" D .I>)>
+ <TELL "]" CR>)>
+ <SET OA ,PRSA>
+ <SET OO ,PRSO>
+ <SET OI ,PRSI>
+ <COND (<AND <EQUAL? ,IT .I .O>
+ <NOT <ACCESSIBLE? ,P-IT-OBJECT>>>
+ <TELL ,REFERRING>
+ <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 PRSI .I>
+ <COND (<AND <EQUAL? ,NOT-HERE-OBJECT ,PRSO ,PRSI>
+ <SET V <NOT-HERE-OBJECT-F>>> .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 .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>>>>
+ .V)
+ (<AND .O
+ <NOT <==? .A ,V?WALK>>
+ <SET V <APPLY <GETP .O ,P?ACTION>>>>
+ .V)
+ (<SET V <APPLY <GET ,ACTIONS .A>>> .V)>)>
+ <SETG PRSA .OA>
+ <SETG PRSO .OO>
+ <SETG PRSI .OI>
+ .V>)
+ (T
+
+'<PROG ()
+
+<SETG DEBUG <>>
+
+<ROUTINE PERFORM (A "OPTIONAL" (O <>) (I <>) "AUX" V OA OO OI)
+ <COND (,DEBUG
+ <TELL "** PERFORM: PRSA = ">
+ <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 <EQUAL? ,IT .I .O>
+ <NOT <ACCESSIBLE? ,P-IT-OBJECT>>>
+ <TELL ,REFERRING>
+ <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 <VERB? WALK>>>
+ <SETG P-IT-OBJECT ,PRSO>)>
+ <SETG PRSI .I>
+ <COND (<AND <EQUAL? ,NOT-HERE-OBJECT ,PRSO ,PRSI>
+ <SET V <D-APPLY "Not Here" ,NOT-HERE-OBJECT-F>>> .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 .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)>)>
+ <SETG PRSA .OA>
+ <SETG PRSO .OO>
+ <SETG PRSI .OI>
+ .V>
+
+<DEFINE D-APPLY (STR FCN "OPTIONAL" FOO "AUX" RES)
+ <COND (<NOT .FCN> <>)
+ (T
+ <COND (,DEBUG
+ <COND (<NOT .STR>
+ <TELL CR " Default ->" CR>)
+ (T <TELL CR " " .STR " -> ">)>)>
+ <SET RES
+ <COND (<ASSIGNED? FOO>
+ <APPLY .FCN .FOO>)
+ (T <APPLY .FCN>)>>
+ <COND (<AND ,DEBUG .STR>
+ <COND (<==? .RES 2>
+ <TELL "Fatal" CR>)
+ (<NOT .RES>
+ <TELL "Not handled">)
+ (T <TELL "Handled" CR>)>)>
+ .RES)>>
+
+<ROUTINE DD-APPLY (STR OBJ FCN "OPTIONAL" (FOO <>))
+ <COND (,DEBUG <TELL "[" D .OBJ "=]">)>
+ <D-APPLY .STR .FCN .FOO>>
+>)>
+\
+;"former CLOCK stuff"
+
+<CONSTANT C-TABLELEN 180>
+
+<GLOBAL C-TABLE <ITABLE NONE 180>>
+
+<GLOBAL C-DEMONS 180>
+
+<GLOBAL C-INTS 180>
+
+<CONSTANT C-INTLEN 6>
+
+<CONSTANT C-ENABLED? 0>
+
+<CONSTANT C-TICK 1>
+
+<CONSTANT C-RTN 2>
+
+<ROUTINE QUEUE (RTN TICK "AUX" CINT)
+ <PUT <SET CINT <INT .RTN>> ,C-TICK .TICK>
+ .CINT>
+
+<ROUTINE INT (RTN "OPTIONAL" (DEMON <>) E C INT)
+ <SET E <REST ,C-TABLE ,C-TABLELEN>>
+ <SET C <REST ,C-TABLE ,C-INTS>>
+ <REPEAT ()
+ <COND (<==? .C .E>
+ <SETG C-INTS <- ,C-INTS ,C-INTLEN>>
+ <AND .DEMON <SETG C-DEMONS <- ,C-DEMONS ,C-INTLEN>>>
+ <SET INT <REST ,C-TABLE ,C-INTS>>
+ <PUT .INT ,C-RTN .RTN>
+ <RETURN .INT>)
+ (<EQUAL? <GET .C ,C-RTN> .RTN> <RETURN .C>)>
+ <SET C <REST .C ,C-INTLEN>>>>
+
+<GLOBAL CLOCK-WAIT <>>
+
+<GLOBAL MOVES 0>
+
+<ROUTINE CLOCKER ("AUX" C E TICK (FLG <>))
+ <COND (,CLOCK-WAIT <SETG CLOCK-WAIT <>> <RFALSE>)>
+ <SET C <REST ,C-TABLE <COND (,P-WON ,C-INTS) (T ,C-DEMONS)>>>
+ <SET E <REST ,C-TABLE ,C-TABLELEN>>
+ <REPEAT ()
+ <COND (<==? .C .E>
+ <SETG MOVES <+ ,MOVES 1>>
+ <RETURN .FLG>)
+ (<NOT <0? <GET .C ,C-ENABLED?>>>
+ <SET TICK <GET .C ,C-TICK>>
+ <COND (<0? .TICK>)
+ (T
+ <PUT .C ,C-TICK <- .TICK 1>>
+ <COND (<AND <NOT <G? .TICK 1>>
+ <APPLY <GET .C ,C-RTN>>>
+ <SET FLG T>)>)>)>
+ <SET C <REST .C ,C-INTLEN>>>> \ No newline at end of file
diff --git a/parser.zabstr b/parser.zabstr
new file mode 100644
index 0000000..7fd5ac8
--- /dev/null
+++ b/parser.zabstr
@@ -0,0 +1,151 @@
+
+<SETG SIBREAKS ".,\"">
+<GLOBAL PRSA <>>
+<GLOBAL PRSI <>>
+<GLOBAL PRSO <>>
+<GLOBAL P-TABLE 0>
+<GLOBAL P-ONEOBJ 0>
+<GLOBAL P-SYNTAX 0>
+<GLOBAL P-CCTBL <TABLE 0 0 0 0>>
+<CONSTANT CC-SBPTR 0>
+<CONSTANT CC-SEPTR 1>
+<CONSTANT CC-DBPTR 2>
+<CONSTANT CC-DEPTR 3>
+<GLOBAL P-LEN 0>
+<GLOBAL P-DIR 0>
+<GLOBAL HERE 0>
+<GLOBAL WINNER 0>
+<GLOBAL P-LEXV <ITABLE 59 (LEXV) 0 #BYTE *000000000000* #BYTE *000000000000*>>
+<GLOBAL AGAIN-LEXV <ITABLE 59 (LEXV) 0 #BYTE *000000000000* #BYTE
+*000000000000*>>
+<GLOBAL RESERVE-LEXV <ITABLE 59 (LEXV) 0 #BYTE *000000000000* #BYTE
+*000000000000*>>
+<GLOBAL RESERVE-PTR <>>
+<GLOBAL P-INBUF <ITABLE 120 (BYTE LENGTH) 0>>
+<GLOBAL OOPS-INBUF <ITABLE 120 (BYTE LENGTH) 0>>
+<GLOBAL OOPS-TABLE <TABLE <> <> <> <>>>
+<CONSTANT O-PTR 0>
+<CONSTANT O-START 1>
+<CONSTANT O-LENGTH 2>
+<CONSTANT O-END 3>
+<GLOBAL P-CONT <>>
+<GLOBAL P-IT-OBJECT <>>
+<GLOBAL P-OFLAG <>>
+<GLOBAL P-MERGED <>>
+<GLOBAL P-ACLAUSE <>>
+<GLOBAL P-ANAM <>>
+<GLOBAL P-AADJ <>>
+<CONSTANT P-LEXWORDS 1>
+<CONSTANT P-LEXSTART 1>
+<CONSTANT P-LEXELEN 2>
+<CONSTANT P-WORDLEN 4>
+<CONSTANT P-PSOFF 4>
+<CONSTANT P-P1OFF 5>
+<CONSTANT P-P1BITS 3>
+<CONSTANT P-ITBLLEN 9>
+<GLOBAL P-ITBL <TABLE 0 0 0 0 0 0 0 0 0 0>>
+<GLOBAL P-OTBL <TABLE 0 0 0 0 0 0 0 0 0 0>>
+<GLOBAL P-VTBL <TABLE 0 0 0 0>>
+<GLOBAL P-OVTBL <TABLE 0 #BYTE *000000000000* #BYTE *000000000000*>>
+<GLOBAL P-NCN 0>
+<CONSTANT P-VERB 0>
+<CONSTANT P-VERBN 1>
+<CONSTANT P-PREP1 2>
+<CONSTANT P-PREP1N 3>
+<CONSTANT P-PREP2 4>
+<CONSTANT P-PREP2N 5>
+<CONSTANT P-NC1 6>
+<CONSTANT P-NC1L 7>
+<CONSTANT P-NC2 8>
+<CONSTANT P-NC2L 9>
+<GLOBAL QUOTE-FLAG <>>
+<GLOBAL P-END-ON-PREP <>>
+<DEFINE-ROUTINE PARSER>
+<GLOBAL P-ACT <>>
+<GLOBAL P-WALK-DIR <>>
+<GLOBAL AGAIN-DIR <>>
+<DEFINE-ROUTINE STUFF>
+<DEFINE-ROUTINE INBUF-STUFF>
+<DEFINE-ROUTINE INBUF-ADD>
+<DEFINE-ROUTINE WT?>
+<DEFINE-ROUTINE CLAUSE>
+<DEFINE-ROUTINE NUMBER?>
+<GLOBAL P-NUMBER 0>
+<DEFINE-ROUTINE ORPHAN-MERGE>
+<DEFINE-ROUTINE ACLAUSE-WIN>
+<DEFINE-ROUTINE NCLAUSE-WIN>
+<DEFINE-ROUTINE WORD-PRINT>
+<DEFINE-ROUTINE UNKNOWN-WORD>
+<DEFINE-ROUTINE CANT-USE>
+<GLOBAL P-SLOCBITS 0>
+<CONSTANT P-SYNLEN 8>
+<CONSTANT P-SPREP1 0>
+<CONSTANT P-SACTION 1>
+<CONSTANT P-SFWIM1 2>
+<CONSTANT P-SLOC1 3>
+<CONSTANT P-SPREP2 4>
+<CONSTANT P-SFWIM2 5>
+<CONSTANT P-SLOC2 6>
+<CONSTANT P-SYNLEN-0 2>
+<CONSTANT P-SYNLEN-1 4>
+<CONSTANT P-SYNLEN-2 7>
+<DEFINE-ROUTINE GET-PREP>
+<DEFINE-ROUTINE SYNTAX-CHECK>
+<DEFINE-ROUTINE CANT-ORPHAN>
+<DEFINE-ROUTINE ORPHAN>
+<DEFINE-ROUTINE THING-PRINT>
+<DEFINE-ROUTINE BUFFER-PRINT>
+<DEFINE-ROUTINE PREP-PRINT>
+<DEFINE-ROUTINE CLAUSE-COPY>
+<DEFINE-ROUTINE CLAUSE-ADD>
+<DEFINE-ROUTINE PREP-FIND>
+<DEFINE-ROUTINE SYNTAX-FOUND>
+<GLOBAL P-GWIMBIT 0>
+<DEFINE-ROUTINE GWIM>
+<DEFINE-ROUTINE SNARF-OBJECTS>
+<DEFINE-ROUTINE BUT-MERGE>
+<GLOBAL P-NAM <>>
+<GLOBAL P-ADJ <>>
+<GLOBAL P-ADVERB <>>
+<GLOBAL P-ADJN <>>
+<GLOBAL P-PRSO <ITABLE NONE 50>>
+<GLOBAL P-PRSI <ITABLE NONE 50>>
+<GLOBAL P-BUTS <ITABLE NONE 50>>
+<GLOBAL P-MERGE <ITABLE NONE 50>>
+<GLOBAL P-OCLAUSE <ITABLE NONE 100>>
+<GLOBAL P-MATCHLEN 0>
+<GLOBAL P-GETFLAGS 0>
+<CONSTANT P-ALL 1>
+<CONSTANT P-ONE 2>
+<CONSTANT P-INHIBIT 4>
+<GLOBAL P-AND <>>
+<DEFINE-ROUTINE SNARFEM>
+<CONSTANT SH 128>
+<CONSTANT SC 64>
+<CONSTANT SIR 32>
+<CONSTANT SOG 16>
+<CONSTANT STAKE 8>
+<CONSTANT SMANY 4>
+<CONSTANT SHAVE 2>
+<DEFINE-ROUTINE GET-OBJECT>
+<GLOBAL P-XNAM <>>
+<GLOBAL P-XADJ <>>
+<GLOBAL P-XADJN <>>
+<DEFINE-ROUTINE WHICH-PRINT>
+<DEFINE-ROUTINE GLOBAL-CHECK>
+<DEFINE-ROUTINE DO-SL>
+<CONSTANT P-SRCBOT 2>
+<CONSTANT P-SRCTOP 0>
+<CONSTANT P-SRCALL 1>
+<DEFINE-ROUTINE SEARCH-LIST>
+<DEFINE-ROUTINE OBJ-FOUND>
+<DEFINE-ROUTINE TAKE-CHECK>
+<DEFINE-ROUTINE ITAKE-CHECK>
+<DEFINE-ROUTINE MANY-CHECK>
+<DEFINE-ROUTINE ZMEMQ>
+<DEFINE-ROUTINE ZMEMQB>
+<GLOBAL ALWAYS-LIT <>>
+<DEFINE-ROUTINE LIT?>
+<DEFINE-ROUTINE THIS-IT?>
+<DEFINE-ROUTINE ACCESSIBLE?>
+<DEFINE-ROUTINE META-LOC> \ No newline at end of file
diff --git a/parser.zap b/parser.zap
new file mode 100644
index 0000000..9c55f98
--- /dev/null
+++ b/parser.zap
@@ -0,0 +1,1600 @@
+
+
+ .FUNCT PARSER,PTR=P-LEXSTART,WRD,VAL=0,VERB=0,OF-FLAG=0,OWINNER,OMERGED,LEN,DIR=0,NW=0,LW=0,CNT=-1,?TMP2,?TMP1
+?PRG1: IGRTR? 'CNT,P-ITBLLEN /?REP2
+ ZERO? P-OFLAG \?CND6
+ GET P-ITBL,CNT
+ PUT P-OTBL,CNT,STACK
+?CND6: PUT P-ITBL,CNT,0
+ JUMP ?PRG1
+?REP2: SET 'OWINNER,WINNER
+ SET 'OMERGED,P-MERGED
+ SET 'P-ADVERB,FALSE-VALUE
+ SET 'P-MERGED,FALSE-VALUE
+ SET 'P-END-ON-PREP,FALSE-VALUE
+ PUT P-PRSO,P-MATCHLEN,0
+ PUT P-PRSI,P-MATCHLEN,0
+ PUT P-BUTS,P-MATCHLEN,0
+ ZERO? QUOTE-FLAG \?CND8
+ EQUAL? WINNER,ADVENTURER /?CND8
+ SET 'WINNER,ADVENTURER
+ CALL META-LOC,ADVENTURER >HERE
+ CALL LIT?,HERE >LIT
+?CND8: ZERO? RESERVE-PTR /?CCL14
+ SET 'PTR,RESERVE-PTR
+ CALL STUFF,RESERVE-LEXV,P-LEXV
+ GRTR? VERBOSITY,0 \?CND15
+ EQUAL? ADVENTURER,WINNER \?CND15
+ CRLF
+?CND15: SET 'RESERVE-PTR,FALSE-VALUE
+ SET 'P-CONT,FALSE-VALUE
+ JUMP ?CND12
+?CCL14: ZERO? P-CONT /?CCL20
+ SET 'PTR,P-CONT
+ GRTR? VERBOSITY,0 \?CND21
+ EQUAL? ADVENTURER,WINNER \?CND21
+ EQUAL? PRSA,V?SAY /?CND21
+ CRLF
+?CND21: SET 'P-CONT,FALSE-VALUE
+ JUMP ?CND12
+?CCL20: SET 'WINNER,ADVENTURER
+ SET 'QUOTE-FLAG,FALSE-VALUE
+ LOC WINNER
+ FSET? STACK,VEHBIT /?CND26
+ LOC WINNER >HERE
+?CND26: CALL LIT?,HERE >LIT
+ GRTR? VERBOSITY,0 \?PRG30
+ CRLF
+?PRG30: PRINTC 62
+ READ P-INBUF,P-LEXV
+?CND12: GETB P-LEXV,P-LEXWORDS >P-LEN
+ ZERO? P-LEN \?CND32
+ PRINTI "I beg your pardon?"
+ CRLF
+ RFALSE
+?CND32: GET P-LEXV,PTR >WRD
+ EQUAL? WRD,W?OOPS \?CCL38
+ ADD PTR,P-LEXELEN
+ GET P-LEXV,STACK
+ EQUAL? STACK,W?PERIOD,W?COMMA \?CND39
+ ADD PTR,P-LEXELEN >PTR
+ DEC 'P-LEN
+?CND39: GRTR? P-LEN,1 /?CCL43
+ PRINTI "I can't help your clumsiness."
+ CRLF
+ RFALSE
+?CCL43: GET OOPS-TABLE,O-PTR
+ ZERO? STACK /?CCL47
+ GRTR? P-LEN,2 \?CCL50
+ ADD PTR,P-LEXELEN
+ GET P-LEXV,STACK
+ EQUAL? STACK,W?QUOTE \?CCL50
+ PRINTI "Sorry, you can't correct mistakes in quoted text."
+ CRLF
+ RFALSE
+?CCL50: GRTR? P-LEN,2 \?CND48
+ PRINTI "Warning: only the first word after OOPS is used."
+ CRLF
+?CND48: GET OOPS-TABLE,O-PTR >?TMP1
+ ADD PTR,P-LEXELEN
+ GET P-LEXV,STACK
+ PUT AGAIN-LEXV,?TMP1,STACK
+ SET 'WINNER,OWINNER
+ MUL PTR,P-LEXELEN
+ ADD STACK,6
+ GETB P-LEXV,STACK >?TMP2
+ MUL PTR,P-LEXELEN
+ ADD STACK,7
+ GETB P-LEXV,STACK >?TMP1
+ GET OOPS-TABLE,O-PTR
+ MUL STACK,P-LEXELEN
+ ADD STACK,3
+ CALL INBUF-ADD,?TMP2,?TMP1,STACK
+ CALL STUFF,AGAIN-LEXV,P-LEXV
+ GETB P-LEXV,P-LEXWORDS >P-LEN
+ GET OOPS-TABLE,O-START >PTR
+ CALL INBUF-STUFF,OOPS-INBUF,P-INBUF
+ JUMP ?CND36
+?CCL47: PUT OOPS-TABLE,O-END,FALSE-VALUE
+ PRINTI "There was no word to replace!"
+ CRLF
+ RFALSE
+?CCL38: EQUAL? WRD,W?AGAIN,W?G /?CND60
+ SET 'P-NUMBER,0
+?CND60: PUT OOPS-TABLE,O-END,FALSE-VALUE
+?CND36: GET P-LEXV,PTR
+ EQUAL? STACK,W?AGAIN,W?G \?CCL64
+ GETB OOPS-INBUF,1
+ ZERO? STACK \?CCL67
+ PRINTI "Beg pardon?"
+ CRLF
+ RFALSE
+?CCL67: ZERO? P-OFLAG /?CCL71
+ PRINTI "It's difficult to repeat fragments."
+ CRLF
+ RFALSE
+?CCL71: ZERO? P-WON \?CCL75
+ PRINTI "That would just repeat a mistake."
+ CRLF
+ RFALSE
+?CCL75: GRTR? P-LEN,1 \?CCL79
+ ADD PTR,P-LEXELEN
+ GET P-LEXV,STACK
+ EQUAL? STACK,W?PERIOD,W?COMMA,W?THEN /?CTR81
+ ADD PTR,P-LEXELEN
+ GET P-LEXV,STACK
+ EQUAL? STACK,W?AND \?PRG85
+?CTR81: ADD PTR,4 >PTR
+ GETB P-LEXV,P-LEXWORDS
+ SUB STACK,2
+ PUTB P-LEXV,P-LEXWORDS,STACK
+ JUMP ?CND65
+?PRG85: PRINTI "I couldn't understand that sentence."
+ CRLF
+ RFALSE
+?CCL79: ADD PTR,P-LEXELEN >PTR
+ GETB P-LEXV,P-LEXWORDS
+ SUB STACK,1
+ PUTB P-LEXV,P-LEXWORDS,STACK
+?CND65: GETB P-LEXV,P-LEXWORDS
+ GRTR? STACK,0 \?CCL89
+ CALL STUFF,P-LEXV,RESERVE-LEXV
+ SET 'RESERVE-PTR,PTR
+ JUMP ?CND87
+?CCL89: SET 'RESERVE-PTR,FALSE-VALUE
+?CND87: SET 'WINNER,OWINNER
+ SET 'P-MERGED,OMERGED
+ CALL INBUF-STUFF,OOPS-INBUF,P-INBUF
+ CALL STUFF,AGAIN-LEXV,P-LEXV
+ SET 'CNT,-1
+ SET 'DIR,AGAIN-DIR
+?PRG90: IGRTR? 'CNT,P-ITBLLEN /?CND62
+ GET P-OTBL,CNT
+ PUT P-ITBL,CNT,STACK
+ JUMP ?PRG90
+?CCL64: CALL STUFF,P-LEXV,AGAIN-LEXV
+ CALL INBUF-STUFF,P-INBUF,OOPS-INBUF
+ PUT OOPS-TABLE,O-START,PTR
+ MUL 4,P-LEN
+ PUT OOPS-TABLE,O-LENGTH,STACK
+ GETB P-LEXV,P-LEXWORDS
+ MUL P-LEXELEN,STACK
+ ADD PTR,STACK
+ MUL 2,STACK >LEN
+ SUB LEN,1
+ GETB P-LEXV,STACK >?TMP1
+ SUB LEN,2
+ GETB P-LEXV,STACK
+ ADD ?TMP1,STACK
+ PUT OOPS-TABLE,O-END,STACK
+ SET 'RESERVE-PTR,FALSE-VALUE
+ SET 'LEN,P-LEN
+ SET 'P-DIR,FALSE-VALUE
+ SET 'P-NCN,0
+ SET 'P-GETFLAGS,0
+?PRG95: DLESS? 'P-LEN,0 \?CCL99
+ SET 'QUOTE-FLAG,FALSE-VALUE
+ JUMP ?CND62
+?CCL99: GET P-LEXV,PTR >WRD
+ ZERO? WRD \?CTR100
+ CALL NUMBER?,PTR >WRD
+ ZERO? WRD /?CCL101
+?CTR100: ZERO? P-LEN \?CCL106
+ SET 'NW,0
+ JUMP ?CND104
+?CCL106: ADD PTR,P-LEXELEN
+ GET P-LEXV,STACK >NW
+?CND104: EQUAL? WRD,W?TO \?CCL109
+ EQUAL? VERB,ACT?TELL \?CCL109
+ SET 'WRD,W?QUOTE
+ JUMP ?CND107
+?CCL109: EQUAL? WRD,W?THEN \?CND107
+ GRTR? P-LEN,0 \?CND107
+ ZERO? VERB \?CND107
+ ZERO? QUOTE-FLAG \?CND107
+ EQUAL? LW,0,W?PERIOD \?CCL119
+ SET 'WRD,W?THE
+ JUMP ?CND107
+?CCL119: PUT P-ITBL,P-VERB,ACT?TELL
+ PUT P-ITBL,P-VERBN,0
+ SET 'WRD,W?QUOTE
+?CND107: EQUAL? WRD,W?THEN,W?PERIOD,W?QUOTE \?CCL122
+ EQUAL? WRD,W?QUOTE \?CND123
+ ZERO? QUOTE-FLAG /?CCL127
+ SET 'QUOTE-FLAG,FALSE-VALUE
+ JUMP ?CND123
+?CCL127: SET 'QUOTE-FLAG,TRUE-VALUE
+?CND123: ZERO? P-LEN /?PEN128
+ ADD PTR,P-LEXELEN >P-CONT
+?PEN128: PUTB P-LEXV,P-LEXWORDS,P-LEN
+ JUMP ?CND62
+?CCL122: CALL WT?,WRD,16,3 >VAL
+ ZERO? VAL /?CCL131
+ EQUAL? VERB,FALSE-VALUE,ACT?WALK \?CCL131
+ EQUAL? LEN,1 /?CTR130
+ EQUAL? LEN,2 \?PRD137
+ EQUAL? VERB,ACT?WALK /?CTR130
+?PRD137: EQUAL? NW,W?THEN,W?PERIOD,W?QUOTE \?PRD140
+ LESS? LEN,2 \?CTR130
+?PRD140: ZERO? QUOTE-FLAG /?PRD143
+ EQUAL? LEN,2 \?PRD143
+ EQUAL? NW,W?QUOTE /?CTR130
+?PRD143: GRTR? LEN,2 \?CCL131
+ EQUAL? NW,W?COMMA,W?AND \?CCL131
+?CTR130: SET 'DIR,VAL
+ EQUAL? NW,W?COMMA,W?AND \?CND149
+ ADD PTR,P-LEXELEN
+ PUT P-LEXV,STACK,W?THEN
+?CND149: GRTR? LEN,2 /?CND97
+ SET 'QUOTE-FLAG,FALSE-VALUE
+ JUMP ?CND62
+?CCL131: CALL WT?,WRD,64,1 >VAL
+ ZERO? VAL /?CCL154
+ ZERO? VERB \?CCL154
+ SET 'VERB,VAL
+ PUT P-ITBL,P-VERB,VAL
+ PUT P-ITBL,P-VERBN,P-VTBL
+ PUT P-VTBL,0,WRD
+ MUL PTR,2
+ ADD STACK,2 >CNT
+ GETB P-LEXV,CNT
+ PUTB P-VTBL,2,STACK
+ ADD CNT,1
+ GETB P-LEXV,STACK
+ PUTB P-VTBL,3,STACK
+ JUMP ?CND97
+?CCL154: CALL WT?,WRD,8,0 >VAL
+ ZERO? VAL \?CTR157
+ EQUAL? WRD,W?ALL,W?ONE /?CTR157
+ CALL WT?,WRD,32
+ ZERO? STACK \?CTR157
+ CALL WT?,WRD,128
+ ZERO? STACK /?CCL158
+?CTR157: GRTR? P-LEN,1 \?CCL165
+ EQUAL? NW,W?OF \?CCL165
+ ZERO? VAL \?CCL165
+ EQUAL? WRD,W?ALL,W?ONE,W?A /?CCL165
+ SET 'OF-FLAG,TRUE-VALUE
+ JUMP ?CND97
+?CCL165: ZERO? VAL /?CCL171
+ ZERO? P-LEN /?CTR170
+ EQUAL? NW,W?THEN,W?PERIOD \?CCL171
+?CTR170: SET 'P-END-ON-PREP,TRUE-VALUE
+ LESS? P-NCN,2 \?CND97
+ PUT P-ITBL,P-PREP1,VAL
+ PUT P-ITBL,P-PREP1N,WRD
+ JUMP ?CND97
+?CCL171: EQUAL? P-NCN,2 \?CCL179
+ PRINTI "There were too many nouns in that sentence."
+ CRLF
+ RFALSE
+?CCL179: INC 'P-NCN
+ SET 'P-ACT,VERB
+ CALL CLAUSE,PTR,VAL,WRD >PTR
+ ZERO? PTR /FALSE
+ LESS? PTR,0 \?CND97
+ SET 'QUOTE-FLAG,FALSE-VALUE
+?CND62: PUT OOPS-TABLE,O-PTR,FALSE-VALUE
+ ZERO? DIR /?CCL203
+ SET 'PRSA,V?WALK
+ SET 'PRSO,DIR
+ SET 'P-OFLAG,FALSE-VALUE
+ SET 'P-WALK-DIR,DIR
+ SET 'AGAIN-DIR,DIR
+ RETURN AGAIN-DIR
+?CCL158: EQUAL? WRD,W?OF \?CCL187
+ ZERO? OF-FLAG /?CTR189
+ EQUAL? NW,W?PERIOD,W?THEN \?CCL190
+?CTR189: CALL CANT-USE,PTR
+ RFALSE
+?CCL190: SET 'OF-FLAG,FALSE-VALUE
+?CND97: SET 'LW,WRD
+ ADD PTR,P-LEXELEN >PTR
+ JUMP ?PRG95
+?CCL187: CALL WT?,WRD,4
+ ZERO? STACK \?CND97
+ EQUAL? VERB,ACT?TELL \?CCL195
+ CALL WT?,WRD,64,1
+ ZERO? STACK /?CCL195
+ EQUAL? WINNER,ADVENTURER \?CCL195
+ PRINTI "Please consult your manual for the correct way to talk to other people or creatures."
+ CRLF
+ RFALSE
+?CCL195: CALL CANT-USE,PTR
+ RFALSE
+?CCL101: CALL UNKNOWN-WORD,PTR
+ RFALSE
+?CCL203: ZERO? P-OFLAG /?CND204
+ CALL ORPHAN-MERGE
+?CND204: SET 'P-WALK-DIR,FALSE-VALUE
+ SET 'AGAIN-DIR,FALSE-VALUE
+ CALL SYNTAX-CHECK
+ ZERO? STACK /FALSE
+ CALL SNARF-OBJECTS
+ ZERO? STACK /FALSE
+ CALL MANY-CHECK
+ ZERO? STACK /FALSE
+ CALL TAKE-CHECK
+ ZERO? STACK \TRUE
+ RFALSE
+
+
+ .FUNCT STUFF,SRC,DEST,MAX=29,PTR=P-LEXSTART,CTR=1,BPTR
+ GETB SRC,0
+ PUTB DEST,0,STACK
+ GETB SRC,1
+ PUTB DEST,1,STACK
+?PRG1: GET SRC,PTR
+ PUT DEST,PTR,STACK
+ MUL PTR,2
+ ADD STACK,2 >BPTR
+ GETB SRC,BPTR
+ PUTB DEST,BPTR,STACK
+ MUL PTR,2
+ ADD STACK,3 >BPTR
+ GETB SRC,BPTR
+ PUTB DEST,BPTR,STACK
+ ADD PTR,P-LEXELEN >PTR
+ IGRTR? 'CTR,MAX \?PRG1
+ RTRUE
+
+
+ .FUNCT INBUF-STUFF,SRC,DEST,CNT
+ GETB SRC,0
+ SUB STACK,1 >CNT
+?PRG1: GETB SRC,CNT
+ PUTB DEST,CNT,STACK
+ DLESS? 'CNT,0 \?PRG1
+ RTRUE
+
+
+ .FUNCT INBUF-ADD,LEN,BEG,SLOT,DBEG,CTR=0,TMP,?TMP1
+ GET OOPS-TABLE,O-END >TMP
+ ZERO? TMP /?CCL3
+ SET 'DBEG,TMP
+ JUMP ?CND1
+?CCL3: GET OOPS-TABLE,O-LENGTH >TMP
+ GETB AGAIN-LEXV,TMP >?TMP1
+ ADD TMP,1
+ GETB AGAIN-LEXV,STACK
+ ADD ?TMP1,STACK >DBEG
+?CND1: ADD DBEG,LEN
+ PUT OOPS-TABLE,O-END,STACK
+?PRG4: ADD DBEG,CTR >?TMP1
+ ADD BEG,CTR
+ GETB P-INBUF,STACK
+ PUTB OOPS-INBUF,?TMP1,STACK
+ INC 'CTR
+ EQUAL? CTR,LEN \?PRG4
+ PUTB AGAIN-LEXV,SLOT,DBEG
+ SUB SLOT,1
+ PUTB AGAIN-LEXV,STACK,LEN
+ RTRUE
+
+
+ .FUNCT WT?,PTR,BIT,B1=5,OFFS=P-P1OFF,TYP
+ GETB PTR,P-PSOFF >TYP
+ BTST TYP,BIT \FALSE
+ GRTR? B1,4 /TRUE
+ BAND TYP,P-P1BITS >TYP
+ EQUAL? TYP,B1 /?CND7
+ INC 'OFFS
+?CND7: GETB PTR,OFFS
+ RSTACK
+
+
+ .FUNCT CLAUSE,PTR,VAL,WRD,OFF,NUM,ANDFLG=0,FIRST??=1,NW,LW=0,?TMP1
+ SUB P-NCN,1
+ MUL STACK,2 >OFF
+ ZERO? VAL /?CCL3
+ ADD P-PREP1,OFF >NUM
+ PUT P-ITBL,NUM,VAL
+ ADD NUM,1
+ PUT P-ITBL,STACK,WRD
+ ADD PTR,P-LEXELEN >PTR
+ JUMP ?CND1
+?CCL3: INC 'P-LEN
+?CND1: ZERO? P-LEN \?CND4
+ DEC 'P-NCN
+ RETURN -1
+?CND4: ADD P-NC1,OFF >NUM
+ MUL PTR,2
+ ADD P-LEXV,STACK
+ PUT P-ITBL,NUM,STACK
+ GET P-LEXV,PTR
+ EQUAL? STACK,W?THE,W?A,W?AN \?PRG8
+ GET P-ITBL,NUM
+ ADD STACK,4
+ PUT P-ITBL,NUM,STACK
+?PRG8: DLESS? 'P-LEN,0 \?CND10
+ ADD NUM,1 >?TMP1
+ MUL PTR,2
+ ADD P-LEXV,STACK
+ PUT P-ITBL,?TMP1,STACK
+ RETURN -1
+?CND10: GET P-LEXV,PTR >WRD
+ ZERO? WRD \?CTR13
+ CALL NUMBER?,PTR >WRD
+ ZERO? WRD /?CCL14
+?CTR13: ZERO? P-LEN \?CCL19
+ SET 'NW,0
+ JUMP ?CND17
+?CCL19: ADD PTR,P-LEXELEN
+ GET P-LEXV,STACK >NW
+?CND17: EQUAL? WRD,W?AND,W?COMMA \?CCL22
+ SET 'ANDFLG,TRUE-VALUE
+ JUMP ?CND12
+?CCL22: EQUAL? WRD,W?ALL,W?ONE \?CCL24
+ EQUAL? NW,W?OF \?CND12
+ DEC 'P-LEN
+ ADD PTR,P-LEXELEN >PTR
+ JUMP ?CND12
+?CCL24: EQUAL? WRD,W?THEN,W?PERIOD /?CTR27
+ CALL WT?,WRD,8
+ ZERO? STACK /?CCL28
+ GET P-ITBL,P-VERB
+ ZERO? STACK /?CCL28
+ ZERO? FIRST?? \?CCL28
+?CTR27: INC 'P-LEN
+ ADD NUM,1 >?TMP1
+ MUL PTR,2
+ ADD P-LEXV,STACK
+ PUT P-ITBL,?TMP1,STACK
+ SUB PTR,P-LEXELEN
+ RSTACK
+?CCL28: CALL WT?,WRD,128
+ ZERO? STACK /?CCL35
+ GRTR? P-LEN,0 \?CCL38
+ EQUAL? NW,W?OF \?CCL38
+ EQUAL? WRD,W?ALL,W?ONE \?CND12
+?CCL38: CALL WT?,WRD,32,2
+ ZERO? STACK /?CCL42
+ ZERO? NW /?CCL42
+ CALL WT?,NW,128
+ ZERO? STACK \?CND12
+?CCL42: ZERO? ANDFLG \?CCL47
+ EQUAL? NW,W?BUT,W?EXCEPT /?CCL47
+ EQUAL? NW,W?AND,W?COMMA /?CCL47
+ ADD NUM,1 >?TMP1
+ ADD PTR,2
+ MUL STACK,2
+ ADD P-LEXV,STACK
+ PUT P-ITBL,?TMP1,STACK
+ RETURN PTR
+?CCL47: SET 'ANDFLG,FALSE-VALUE
+ JUMP ?CND12
+?CCL35: ZERO? P-MERGED \?PRD53
+ ZERO? P-OFLAG \?PRD53
+ GET P-ITBL,P-VERB
+ ZERO? STACK /?CCL51
+?PRD53: CALL WT?,WRD,32
+ ZERO? STACK \?CND12
+ CALL WT?,WRD,4
+ ZERO? STACK \?CND12
+?CCL51: ZERO? ANDFLG /?CCL60
+ CALL WT?,WRD,16
+ ZERO? STACK \?CTR59
+ CALL WT?,WRD,64
+ ZERO? STACK /?CCL60
+?CTR59: SUB PTR,4 >PTR
+ ADD PTR,2
+ PUT P-LEXV,STACK,W?THEN
+ ADD P-LEN,2 >P-LEN
+?CND12: SET 'LW,WRD
+ SET 'FIRST??,FALSE-VALUE
+ ADD PTR,P-LEXELEN >PTR
+ JUMP ?PRG8
+?CCL60: CALL WT?,WRD,8
+ ZERO? STACK \?CND12
+ CALL CANT-USE,PTR
+ RFALSE
+?CCL14: CALL UNKNOWN-WORD,PTR
+ RFALSE
+
+
+ .FUNCT NUMBER?,PTR,CNT,BPTR,CHR,SUM=0,TIM=0,?TMP1
+ MUL PTR,2
+ ADD P-LEXV,STACK
+ GETB STACK,2 >CNT
+ MUL PTR,2
+ ADD P-LEXV,STACK
+ GETB STACK,3 >BPTR
+?PRG1: DLESS? 'CNT,0 /?REP2
+ GETB P-INBUF,BPTR >CHR
+ EQUAL? CHR,58 \?CCL8
+ SET 'TIM,SUM
+ SET 'SUM,0
+ JUMP ?CND6
+?CCL8: GRTR? SUM,10000 /FALSE
+ LESS? CHR,58 \FALSE
+ GRTR? CHR,47 \FALSE
+ MUL SUM,10 >?TMP1
+ SUB CHR,48
+ ADD ?TMP1,STACK >SUM
+?CND6: INC 'BPTR
+ JUMP ?PRG1
+?REP2: PUT P-LEXV,PTR,W?INTNUM
+ GRTR? SUM,1000 /FALSE
+ ZERO? TIM /?CND15
+ LESS? TIM,8 \?CCL21
+ ADD TIM,12 >TIM
+ JUMP ?CND19
+?CCL21: GRTR? TIM,23 /FALSE
+?CND19: MUL TIM,60
+ ADD SUM,STACK >SUM
+?CND15: SET 'P-NUMBER,SUM
+ RETURN W?INTNUM
+
+
+ .FUNCT ORPHAN-MERGE,CNT=-1,TEMP,VERB,BEG,END,ADJ=0,WRD,?TMP1
+ SET 'P-OFLAG,FALSE-VALUE
+ GET P-ITBL,P-VERBN
+ GET STACK,0 >WRD
+ CALL WT?,WRD,64,1 >?TMP1
+ GET P-OTBL,P-VERB
+ EQUAL? ?TMP1,STACK /?CTR2
+ CALL WT?,WRD,32
+ ZERO? STACK /?CCL3
+?CTR2: SET 'ADJ,TRUE-VALUE
+ JUMP ?CND1
+?CCL3: CALL WT?,WRD,128,0
+ ZERO? STACK /?CND1
+ ZERO? P-NCN \?CND1
+ PUT P-ITBL,P-VERB,0
+ PUT P-ITBL,P-VERBN,0
+ ADD P-LEXV,2
+ PUT P-ITBL,P-NC1,STACK
+ ADD P-LEXV,6
+ PUT P-ITBL,P-NC1L,STACK
+ SET 'P-NCN,1
+?CND1: GET P-ITBL,P-VERB >VERB
+ ZERO? VERB /?CCL11
+ ZERO? ADJ \?CCL11
+ GET P-OTBL,P-VERB
+ EQUAL? VERB,STACK \FALSE
+?CCL11: EQUAL? P-NCN,2 /FALSE
+ GET P-OTBL,P-NC1
+ EQUAL? STACK,1 \?CCL18
+ GET P-ITBL,P-PREP1 >TEMP
+ GET P-OTBL,P-PREP1
+ EQUAL? TEMP,STACK /?CTR20
+ ZERO? TEMP \FALSE
+?CTR20: ZERO? ADJ /?CCL26
+ ADD P-LEXV,2
+ PUT P-OTBL,P-NC1,STACK
+ GET P-ITBL,P-NC1L
+ ZERO? STACK \?CND27
+ ADD P-LEXV,6
+ PUT P-ITBL,P-NC1L,STACK
+?CND27: ZERO? P-NCN \?CND24
+ SET 'P-NCN,1
+ JUMP ?CND24
+?CCL26: GET P-ITBL,P-NC1
+ PUT P-OTBL,P-NC1,STACK
+?CND24: GET P-ITBL,P-NC1L
+ PUT P-OTBL,P-NC1L,STACK
+ JUMP ?CND9
+?CCL18: GET P-OTBL,P-NC2
+ EQUAL? STACK,1 \?CCL32
+ GET P-ITBL,P-PREP1 >TEMP
+ GET P-OTBL,P-PREP2
+ EQUAL? TEMP,STACK /?CTR34
+ ZERO? TEMP \FALSE
+?CTR34: ZERO? ADJ /?CND38
+ ADD P-LEXV,2
+ PUT P-ITBL,P-NC1,STACK
+ GET P-ITBL,P-NC1L
+ ZERO? STACK \?CND38
+ ADD P-LEXV,6
+ PUT P-ITBL,P-NC1L,STACK
+?CND38: GET P-ITBL,P-NC1
+ PUT P-OTBL,P-NC2,STACK
+ GET P-ITBL,P-NC1L
+ PUT P-OTBL,P-NC2L,STACK
+ SET 'P-NCN,2
+ JUMP ?CND9
+?CCL32: ZERO? P-ACLAUSE /?CND9
+ EQUAL? P-NCN,1 /?CCL45
+ ZERO? ADJ \?CCL45
+ SET 'P-ACLAUSE,FALSE-VALUE
+ RFALSE
+?CCL45: GET P-ITBL,P-NC1 >BEG
+ ZERO? ADJ /?CND48
+ ADD P-LEXV,2 >BEG
+ SET 'ADJ,FALSE-VALUE
+?CND48: GET P-ITBL,P-NC1L >END
+?PRG50: GET BEG,0 >WRD
+ EQUAL? BEG,END \?CCL54
+ ZERO? ADJ /?CCL57
+ CALL ACLAUSE-WIN,ADJ
+ JUMP ?CND9
+?CCL57: SET 'P-ACLAUSE,FALSE-VALUE
+ RFALSE
+?CCL54: ZERO? ADJ \?CCL59
+ GETB WRD,P-PSOFF
+ BTST STACK,32 /?CTR58
+ EQUAL? WRD,W?ALL,W?ONE \?CCL59
+?CTR58: SET 'ADJ,WRD
+?CND52: ADD BEG,P-WORDLEN >BEG
+ ZERO? END \?PRG50
+ SET 'END,BEG
+ SET 'P-NCN,1
+ SUB BEG,4
+ PUT P-ITBL,P-NC1,STACK
+ PUT P-ITBL,P-NC1L,BEG
+ JUMP ?PRG50
+?CCL59: EQUAL? WRD,W?ONE \?CCL65
+ CALL ACLAUSE-WIN,ADJ
+ JUMP ?CND9
+?CCL65: GETB WRD,P-PSOFF
+ BTST STACK,128 \?CND52
+ EQUAL? WRD,P-ANAM \?CCL69
+ CALL ACLAUSE-WIN,ADJ
+ JUMP ?CND9
+?CCL69: CALL NCLAUSE-WIN
+?CND9: GET P-OVTBL,0
+ PUT P-VTBL,0,STACK
+ GETB P-OVTBL,2
+ PUTB P-VTBL,2,STACK
+ GETB P-OVTBL,3
+ PUTB P-VTBL,3,STACK
+ PUT P-OTBL,P-VERBN,P-VTBL
+ PUTB P-VTBL,2,0
+?PRG72: IGRTR? 'CNT,P-ITBLLEN \?CCL76
+ SET 'P-MERGED,TRUE-VALUE
+ RTRUE
+?CCL76: GET P-OTBL,CNT
+ PUT P-ITBL,CNT,STACK
+ JUMP ?PRG72
+
+
+ .FUNCT ACLAUSE-WIN,ADJ
+ GET P-OTBL,P-VERB
+ PUT P-ITBL,P-VERB,STACK
+ PUT P-CCTBL,CC-SBPTR,P-ACLAUSE
+ ADD P-ACLAUSE,1
+ PUT P-CCTBL,CC-SEPTR,STACK
+ PUT P-CCTBL,CC-DBPTR,P-ACLAUSE
+ ADD P-ACLAUSE,1
+ PUT P-CCTBL,CC-DEPTR,STACK
+ CALL CLAUSE-COPY,P-OTBL,P-OTBL,ADJ
+ GET P-OTBL,P-NC2
+ ZERO? STACK /?PEN1
+ SET 'P-NCN,2
+?PEN1: SET 'P-ACLAUSE,FALSE-VALUE
+ RTRUE
+
+
+ .FUNCT NCLAUSE-WIN
+ PUT P-CCTBL,CC-SBPTR,P-NC1
+ PUT P-CCTBL,CC-SEPTR,P-NC1L
+ PUT P-CCTBL,CC-DBPTR,P-ACLAUSE
+ ADD P-ACLAUSE,1
+ PUT P-CCTBL,CC-DEPTR,STACK
+ CALL CLAUSE-COPY,P-ITBL,P-OTBL
+ GET P-OTBL,P-NC2
+ ZERO? STACK /?PEN1
+ SET 'P-NCN,2
+?PEN1: SET 'P-ACLAUSE,FALSE-VALUE
+ RTRUE
+
+
+ .FUNCT WORD-PRINT,CNT,BUF
+?PRG1: DLESS? 'CNT,0 /TRUE
+ GETB P-INBUF,BUF
+ PRINTC STACK
+ INC 'BUF
+ JUMP ?PRG1
+
+
+ .FUNCT UNKNOWN-WORD,PTR,BUF,?TMP1
+ PUT OOPS-TABLE,O-PTR,PTR
+ EQUAL? PRSA,V?SAY \?PRG5
+ PRINTI "Nothing happens."
+ CRLF
+ RFALSE
+?PRG5: PRINTI "I don't know the word """
+ MUL PTR,2 >BUF
+ ADD P-LEXV,BUF
+ GETB STACK,2 >?TMP1
+ ADD P-LEXV,BUF
+ GETB STACK,3
+ CALL WORD-PRINT,?TMP1,STACK
+ PRINTI """."
+ CRLF
+ SET 'QUOTE-FLAG,FALSE-VALUE
+ SET 'P-OFLAG,FALSE-VALUE
+ RETURN P-OFLAG
+
+
+ .FUNCT CANT-USE,PTR,BUF,?TMP1
+ EQUAL? PRSA,V?SAY \?PRG5
+ PRINTI "Nothing happens."
+ CRLF
+ RFALSE
+?PRG5: PRINTI "You used the word """
+ MUL PTR,2 >BUF
+ ADD P-LEXV,BUF
+ GETB STACK,2 >?TMP1
+ ADD P-LEXV,BUF
+ GETB STACK,3
+ CALL WORD-PRINT,?TMP1,STACK
+ PRINTI """ in a way that I don't understand."
+ CRLF
+ SET 'QUOTE-FLAG,FALSE-VALUE
+ SET 'P-OFLAG,FALSE-VALUE
+ RETURN P-OFLAG
+
+
+ .FUNCT GET-PREP,SYN,WHICH,PREP
+ EQUAL? WHICH,1 \?CCL3
+ GETB SYN,P-SPREP1 >PREP
+ JUMP ?CND1
+?CCL3: GETB SYN,P-SPREP2 >PREP
+?CND1: BAND PREP,63 >PREP
+ ZERO? PREP /FALSE
+ ADD PREP,192
+ RSTACK
+
+
+ .FUNCT SYNTAX-CHECK,SYN,LEN,NUM,OBJ,DRIVE1=0,DRIVE2=0,PREP,VERB,TMP,?TMP2,?TMP1
+ GET P-ITBL,P-VERB >VERB
+ ZERO? VERB \?CND1
+ PRINTI "There was no verb in that sentence!"
+ CRLF
+ RFALSE
+?CND1: SUB 255,VERB
+ GET VERBS,STACK >SYN
+ GETB SYN,0 >LEN
+ INC 'SYN
+?PRG5: GETB SYN,P-SPREP1
+ DIV STACK,64 >NUM
+ GRTR? P-NCN,NUM /?CND7
+ LESS? NUM,1 /?CCL11
+ ZERO? P-NCN \?CCL11
+ GET P-ITBL,P-PREP1 >PREP
+ ZERO? PREP /?CTR10
+ CALL GET-PREP,SYN,1
+ EQUAL? PREP,STACK \?CCL11
+?CTR10: SET 'DRIVE1,SYN
+ JUMP ?CND7
+?CCL11: CALL GET-PREP,SYN,1 >?TMP1
+ GET P-ITBL,P-PREP1
+ EQUAL? ?TMP1,STACK \?CND7
+ EQUAL? NUM,2 \?CCL20
+ EQUAL? P-NCN,1 \?CCL20
+ SET 'DRIVE2,SYN
+?CND7: DLESS? 'LEN,1 \?CCL28
+ ZERO? DRIVE1 \?REP6
+ ZERO? DRIVE2 \?REP6
+ PRINTI "That sentence isn't one I recognize."
+ CRLF
+ RFALSE
+?CCL20: GRTR? NUM,1 \?CCL23
+ CALL GET-PREP,SYN,2 >?TMP1
+ GET P-ITBL,P-PREP2
+ EQUAL? ?TMP1,STACK \?CND7
+?CCL23: CALL SYNTAX-FOUND,SYN
+ RTRUE
+?CCL28: ZERO? NUM \?CCL38
+ ADD SYN,P-SYNLEN-0 >SYN
+ JUMP ?PRG5
+?CCL38: EQUAL? NUM,1 \?CCL40
+ ADD SYN,P-SYNLEN-1 >SYN
+ JUMP ?PRG5
+?CCL40: ADD SYN,P-SYNLEN-2 >SYN
+ JUMP ?PRG5
+?REP6: ZERO? DRIVE1 /?CCL43
+ GETB DRIVE1,P-SFWIM1 >?TMP2
+ GETB DRIVE1,P-SLOC1 >?TMP1
+ CALL GET-PREP,DRIVE1,1
+ CALL GWIM,?TMP2,?TMP1,STACK >OBJ
+ ZERO? OBJ /?CCL43
+ PUT P-PRSO,P-MATCHLEN,1
+ PUT P-PRSO,1,OBJ
+ CALL SYNTAX-FOUND,DRIVE1
+ RSTACK
+?CCL43: ZERO? DRIVE2 /?CCL47
+ GETB DRIVE2,P-SFWIM2 >?TMP2
+ GETB DRIVE2,P-SLOC2 >?TMP1
+ CALL GET-PREP,DRIVE2,2
+ CALL GWIM,?TMP2,?TMP1,STACK >OBJ
+ ZERO? OBJ /?CCL47
+ PUT P-PRSI,P-MATCHLEN,1
+ PUT P-PRSI,1,OBJ
+ CALL SYNTAX-FOUND,DRIVE2
+ RSTACK
+?CCL47: EQUAL? VERB,ACT?FIND \?CCL51
+ PRINTI "That question can't be answered."
+ CRLF
+ RFALSE
+?CCL51: EQUAL? WINNER,ADVENTURER /?CCL55
+ CALL CANT-ORPHAN
+ RSTACK
+?CCL55: CALL ORPHAN,DRIVE1,DRIVE2
+ PRINTI "What do you want to "
+ GET P-OTBL,P-VERBN >TMP
+ ZERO? TMP \?CCL60
+ PRINTI "tell"
+ JUMP ?CND58
+?CCL60: GETB P-VTBL,2
+ ZERO? STACK \?CCL64
+ GET TMP,0
+ PRINTB STACK
+ JUMP ?CND58
+?CCL64: GETB TMP,2 >?TMP1
+ GETB TMP,3
+ CALL WORD-PRINT,?TMP1,STACK
+ PUTB P-VTBL,2,0
+?CND58: ZERO? DRIVE2 /?CND65
+ PRINTC 32
+ CALL THING-PRINT,TRUE-VALUE,TRUE-VALUE
+?CND65: SET 'P-OFLAG,TRUE-VALUE
+ ZERO? DRIVE1 /?CCL71
+ CALL GET-PREP,DRIVE1,1
+ JUMP ?CND69
+?CCL71: CALL GET-PREP,DRIVE2,2
+?CND69: CALL PREP-PRINT,STACK
+ PRINTC 63
+ CRLF
+ RFALSE
+
+
+ .FUNCT CANT-ORPHAN
+ PRINTI """I don't understand! What are you referring to?"""
+ CRLF
+ RFALSE
+
+
+ .FUNCT ORPHAN,D1,D2,CNT=-1
+ ZERO? P-MERGED \?CND1
+ PUT P-OCLAUSE,P-MATCHLEN,0
+?CND1: GET P-VTBL,0
+ PUT P-OVTBL,0,STACK
+ GETB P-VTBL,2
+ PUTB P-OVTBL,2,STACK
+ GETB P-VTBL,3
+ PUTB P-OVTBL,3,STACK
+?PRG3: IGRTR? 'CNT,P-ITBLLEN /?REP4
+ GET P-ITBL,CNT
+ PUT P-OTBL,CNT,STACK
+ JUMP ?PRG3
+?REP4: EQUAL? P-NCN,2 \?CND8
+ PUT P-CCTBL,CC-SBPTR,P-NC2
+ PUT P-CCTBL,CC-SEPTR,P-NC2L
+ PUT P-CCTBL,CC-DBPTR,P-NC2
+ PUT P-CCTBL,CC-DEPTR,P-NC2L
+ CALL CLAUSE-COPY,P-ITBL,P-OTBL
+?CND8: LESS? P-NCN,1 /?CND10
+ PUT P-CCTBL,CC-SBPTR,P-NC1
+ PUT P-CCTBL,CC-SEPTR,P-NC1L
+ PUT P-CCTBL,CC-DBPTR,P-NC1
+ PUT P-CCTBL,CC-DEPTR,P-NC1L
+ CALL CLAUSE-COPY,P-ITBL,P-OTBL
+?CND10: ZERO? D1 /?CCL14
+ CALL GET-PREP,D1,1
+ PUT P-OTBL,P-PREP1,STACK
+ PUT P-OTBL,P-NC1,1
+ RTRUE
+?CCL14: ZERO? D2 /FALSE
+ CALL GET-PREP,D2,2
+ PUT P-OTBL,P-PREP2,STACK
+ PUT P-OTBL,P-NC2,1
+ RTRUE
+
+
+ .FUNCT THING-PRINT,PRSO?,THE?=0,BEG,END
+ ZERO? PRSO? /?CCL3
+ GET P-ITBL,P-NC1 >BEG
+ GET P-ITBL,P-NC1L >END
+ JUMP ?CND1
+?CCL3: GET P-ITBL,P-NC2 >BEG
+ GET P-ITBL,P-NC2L >END
+?CND1: CALL BUFFER-PRINT,BEG,END,THE?
+ RSTACK
+
+
+ .FUNCT BUFFER-PRINT,BEG,END,CP,NOSP=1,WRD,FIRST??=1,PN=0,Q?=0,?TMP1
+?PRG1: EQUAL? BEG,END /TRUE
+ GET BEG,0 >WRD
+ EQUAL? WRD,W?COMMA \?CCL8
+ PRINTI ", "
+ JUMP ?CND6
+?CCL8: ZERO? NOSP /?PRG13
+ SET 'NOSP,FALSE-VALUE
+ JUMP ?CND6
+?PRG13: PRINTC 32
+?CND6: EQUAL? WRD,W?PERIOD,W?COMMA \?CCL17
+ SET 'NOSP,TRUE-VALUE
+ JUMP ?CND3
+?CCL17: EQUAL? WRD,W?ME \?CCL19
+ PRINTD ME
+ SET 'PN,TRUE-VALUE
+ JUMP ?CND3
+?CCL19: EQUAL? WRD,W?INTNUM \?CCL21
+ PRINTN P-NUMBER
+ SET 'PN,TRUE-VALUE
+ JUMP ?CND3
+?CCL21: ZERO? FIRST?? /?CND22
+ ZERO? PN \?CND22
+ ZERO? CP /?CND22
+ PRINTI "the "
+?CND22: ZERO? P-OFLAG \?CTR30
+ ZERO? P-MERGED /?CCL31
+?CTR30: PRINTB WRD
+ JUMP ?CND29
+?CCL31: EQUAL? WRD,W?IT \?CCL35
+ CALL ACCESSIBLE?,P-IT-OBJECT
+ ZERO? STACK /?CCL35
+ PRINTD P-IT-OBJECT
+ JUMP ?CND29
+?CCL35: GETB BEG,2 >?TMP1
+ GETB BEG,3
+ CALL WORD-PRINT,?TMP1,STACK
+?CND29: SET 'FIRST??,FALSE-VALUE
+?CND3: ADD BEG,P-WORDLEN >BEG
+ JUMP ?PRG1
+
+
+ .FUNCT PREP-PRINT,PREP,WRD
+ ZERO? PREP /FALSE
+ PRINTC 32
+ CALL PREP-FIND,PREP >WRD
+ PRINTB WRD
+ RTRUE
+
+
+ .FUNCT CLAUSE-COPY,SRC,DEST,INSRT=0,BEG,END,?TMP1
+ GET P-CCTBL,CC-SBPTR
+ GET SRC,STACK >BEG
+ GET P-CCTBL,CC-SEPTR
+ GET SRC,STACK >END
+ GET P-CCTBL,CC-DBPTR >?TMP1
+ GET P-OCLAUSE,P-MATCHLEN
+ MUL STACK,P-LEXELEN
+ ADD STACK,2
+ ADD P-OCLAUSE,STACK
+ PUT DEST,?TMP1,STACK
+?PRG1: EQUAL? BEG,END \?CCL5
+ GET P-CCTBL,CC-DEPTR >?TMP1
+ GET P-OCLAUSE,P-MATCHLEN
+ MUL STACK,P-LEXELEN
+ ADD STACK,2
+ ADD P-OCLAUSE,STACK
+ PUT DEST,?TMP1,STACK
+ RTRUE
+?CCL5: ZERO? INSRT /?CND6
+ GET BEG,0
+ EQUAL? P-ANAM,STACK \?CND6
+ CALL CLAUSE-ADD,INSRT
+?CND6: GET BEG,0
+ CALL CLAUSE-ADD,STACK
+ ADD BEG,P-WORDLEN >BEG
+ JUMP ?PRG1
+
+
+ .FUNCT CLAUSE-ADD,WRD,PTR
+ GET P-OCLAUSE,P-MATCHLEN
+ ADD STACK,2 >PTR
+ SUB PTR,1
+ PUT P-OCLAUSE,STACK,WRD
+ PUT P-OCLAUSE,PTR,0
+ PUT P-OCLAUSE,P-MATCHLEN,PTR
+ RTRUE
+
+
+ .FUNCT PREP-FIND,PREP,CNT=0,SIZE
+ GET PREPOSITIONS,0
+ MUL STACK,2 >SIZE
+?PRG1: IGRTR? 'CNT,SIZE /FALSE
+ GET PREPOSITIONS,CNT
+ EQUAL? STACK,PREP \?PRG1
+ SUB CNT,1
+ GET PREPOSITIONS,STACK
+ RSTACK
+
+
+ .FUNCT SYNTAX-FOUND,SYN
+ SET 'P-SYNTAX,SYN
+ GETB SYN,P-SACTION >PRSA
+ RETURN PRSA
+
+
+ .FUNCT GWIM,GBIT,LBIT,PREP,OBJ
+ EQUAL? GBIT,RLANDBIT \?CND1
+ RETURN ROOMS
+?CND1: SET 'P-GWIMBIT,GBIT
+ SET 'P-SLOCBITS,LBIT
+ PUT P-MERGE,P-MATCHLEN,0
+ CALL GET-OBJECT,P-MERGE,FALSE-VALUE
+ ZERO? STACK /?CCL5
+ SET 'P-GWIMBIT,0
+ GET P-MERGE,P-MATCHLEN
+ EQUAL? STACK,1 \FALSE
+ GET P-MERGE,1 >OBJ
+ PRINTC 40
+ ZERO? PREP /?PRG31
+ ZERO? P-END-ON-PREP \?PRG31
+ CALL PREP-FIND,PREP >PREP
+ PRINTB PREP
+ EQUAL? PREP,W?OUT \?PRG20
+ PRINTI " of"
+?PRG20: PRINTC 32
+ EQUAL? OBJ,HANDS \?PRG27
+ PRINTI "your hands"
+ JUMP ?PRG29
+?PRG27: PRINTI "the "
+ PRINTD OBJ
+?PRG29: PRINTC 41
+ CRLF
+ RETURN OBJ
+?PRG31: PRINTD OBJ
+ PRINTC 41
+ CRLF
+ RETURN OBJ
+?CCL5: SET 'P-GWIMBIT,0
+ RFALSE
+
+
+ .FUNCT SNARF-OBJECTS,OPTR,IPTR,L
+ PUT P-BUTS,P-MATCHLEN,0
+ GET P-ITBL,P-NC2 >IPTR
+ ZERO? IPTR /?CND1
+ GETB P-SYNTAX,P-SLOC2 >P-SLOCBITS
+ GET P-ITBL,P-NC2L
+ CALL SNARFEM,IPTR,STACK,P-PRSI
+ ZERO? STACK /FALSE
+?CND1: GET P-ITBL,P-NC1 >OPTR
+ ZERO? OPTR /?CND5
+ GETB P-SYNTAX,P-SLOC1 >P-SLOCBITS
+ GET P-ITBL,P-NC1L
+ CALL SNARFEM,OPTR,STACK,P-PRSO
+ ZERO? STACK /FALSE
+?CND5: GET P-BUTS,P-MATCHLEN
+ ZERO? STACK /TRUE
+ GET P-PRSO,P-MATCHLEN >L
+ ZERO? OPTR /?CND11
+ CALL BUT-MERGE,P-PRSO >P-PRSO
+?CND11: ZERO? IPTR /TRUE
+ ZERO? OPTR /?CCL14
+ GET P-PRSO,P-MATCHLEN
+ EQUAL? L,STACK \TRUE
+?CCL14: CALL BUT-MERGE,P-PRSI >P-PRSI
+ RTRUE
+
+
+ .FUNCT BUT-MERGE,TBL,LEN,BUTLEN,CNT=1,MATCHES=0,OBJ,NTBL
+ GET TBL,P-MATCHLEN >LEN
+ PUT P-MERGE,P-MATCHLEN,0
+?PRG1: DLESS? 'LEN,0 /?REP2
+ GET TBL,CNT >OBJ
+ CALL ZMEMQ,OBJ,P-BUTS
+ ZERO? STACK \?CND3
+ ADD MATCHES,1
+ PUT P-MERGE,STACK,OBJ
+ INC 'MATCHES
+?CND3: INC 'CNT
+ JUMP ?PRG1
+?REP2: PUT P-MERGE,P-MATCHLEN,MATCHES
+ SET 'NTBL,P-MERGE
+ SET 'P-MERGE,TBL
+ RETURN NTBL
+
+
+ .FUNCT SNARFEM,PTR,EPTR,TBL,BUT=0,LEN,WV,WRD,NW,WAS-ALL=0
+ SET 'P-AND,FALSE-VALUE
+ EQUAL? P-GETFLAGS,P-ALL \?CND1
+ SET 'WAS-ALL,TRUE-VALUE
+?CND1: SET 'P-GETFLAGS,0
+ PUT TBL,P-MATCHLEN,0
+ GET PTR,0 >WRD
+?PRG3: EQUAL? PTR,EPTR \?CCL7
+ ZERO? BUT /?PRD10
+ PUSH BUT
+ JUMP ?PEN8
+?PRD10: PUSH TBL
+?PEN8: CALL GET-OBJECT,STACK >WV
+ ZERO? WAS-ALL \?CCL12
+ RETURN WV
+?CCL12: SET 'P-GETFLAGS,P-ALL
+ RETURN WV
+?CCL7: ADD PTR,P-WORDLEN
+ EQUAL? EPTR,STACK \?CCL15
+ SET 'NW,0
+ JUMP ?CND13
+?CCL15: GET PTR,P-LEXELEN >NW
+?CND13: EQUAL? WRD,W?ALL \?CCL18
+ SET 'P-GETFLAGS,P-ALL
+ EQUAL? NW,W?OF \?CND5
+ ADD PTR,P-WORDLEN >PTR
+ JUMP ?CND5
+?CCL18: EQUAL? WRD,W?BUT,W?EXCEPT \?CCL22
+ ZERO? BUT /?PRD27
+ PUSH BUT
+ JUMP ?PEN25
+?PRD27: PUSH TBL
+?PEN25: CALL GET-OBJECT,STACK
+ ZERO? STACK /FALSE
+ SET 'BUT,P-BUTS
+ PUT BUT,P-MATCHLEN,0
+ JUMP ?CND5
+?CCL22: EQUAL? WRD,W?A,W?ONE \?CCL29
+ ZERO? P-ADJ \?CCL32
+ SET 'P-GETFLAGS,P-ONE
+ EQUAL? NW,W?OF \?CND5
+ ADD PTR,P-WORDLEN >PTR
+ JUMP ?CND5
+?CCL32: SET 'P-NAM,P-ONEOBJ
+ ZERO? BUT /?PRD39
+ PUSH BUT
+ JUMP ?PEN37
+?PRD39: PUSH TBL
+?PEN37: CALL GET-OBJECT,STACK
+ ZERO? STACK /FALSE
+ ZERO? NW \?CND5
+ RTRUE
+?CCL29: EQUAL? WRD,W?AND,W?COMMA \?CCL43
+ EQUAL? NW,W?AND,W?COMMA /?CCL43
+ SET 'P-AND,TRUE-VALUE
+ ZERO? BUT /?PRD50
+ PUSH BUT
+ JUMP ?PEN48
+?PRD50: PUSH TBL
+?PEN48: CALL GET-OBJECT,STACK
+ ZERO? STACK \?CND5
+ RFALSE
+?CCL43: CALL WT?,WRD,4
+ ZERO? STACK \?CND5
+ EQUAL? WRD,W?AND,W?COMMA /?CND5
+ EQUAL? WRD,W?OF \?CCL54
+ ZERO? P-GETFLAGS \?CND5
+ SET 'P-GETFLAGS,P-INHIBIT
+ JUMP ?CND5
+?CCL54: CALL WT?,WRD,32,2 >WV
+ ZERO? WV /?CCL58
+ ZERO? P-ADJ \?CCL58
+ SET 'P-ADJ,WV
+ SET 'P-ADJN,WRD
+ JUMP ?CND5
+?CCL58: CALL WT?,WRD,128,0
+ ZERO? STACK /?CND5
+ SET 'P-NAM,WRD
+ SET 'P-ONEOBJ,WRD
+?CND5: EQUAL? PTR,EPTR /?PRG3
+ ADD PTR,P-WORDLEN >PTR
+ SET 'WRD,NW
+ JUMP ?PRG3
+
+
+ .FUNCT GET-OBJECT,TBL,VRB=1,BITS,LEN,XBITS,TLEN,GCHECK=0,OLEN=0,OBJ
+ SET 'XBITS,P-SLOCBITS
+ GET TBL,P-MATCHLEN >TLEN
+ BTST P-GETFLAGS,P-INHIBIT /TRUE
+ ZERO? P-NAM \?CND3
+ ZERO? P-ADJ /?CND3
+ CALL WT?,P-ADJN,128,0
+ ZERO? STACK /?CND3
+ SET 'P-NAM,P-ADJN
+ SET 'P-ADJ,FALSE-VALUE
+?CND3: ZERO? P-NAM \?CND9
+ ZERO? P-ADJ \?CND9
+ EQUAL? P-GETFLAGS,P-ALL /?CND9
+ ZERO? P-GWIMBIT \?CND9
+ ZERO? VRB /FALSE
+ PRINTI "There seems to be a noun missing in that sentence!"
+ CRLF
+ RFALSE
+?CND9: EQUAL? P-GETFLAGS,P-ALL \?CCL20
+ ZERO? P-SLOCBITS \?CND19
+?CCL20: SET 'P-SLOCBITS,-1
+?CND19: SET 'P-TABLE,TBL
+?PRG23: ZERO? GCHECK /?CCL27
+ CALL GLOBAL-CHECK,TBL
+ JUMP ?CND25
+?CCL27: ZERO? LIT /?CND28
+ FCLEAR ADVENTURER,TRANSBIT
+ CALL DO-SL,HERE,SOG,SIR
+ FSET ADVENTURER,TRANSBIT
+?CND28: CALL DO-SL,ADVENTURER,SH,SC
+?CND25: GET TBL,P-MATCHLEN
+ SUB STACK,TLEN >LEN
+ BTST P-GETFLAGS,P-ALL /?CND30
+ BTST P-GETFLAGS,P-ONE \?CCL33
+ ZERO? LEN /?CCL33
+ EQUAL? LEN,1 /?CND36
+ RANDOM LEN
+ GET TBL,STACK
+ PUT TBL,1,STACK
+ PRINTI "(How about the "
+ GET TBL,1
+ PRINTD STACK
+ PRINTI "?)"
+ CRLF
+?CND36: PUT TBL,P-MATCHLEN,1
+ JUMP ?CND30
+?CCL33: GRTR? LEN,1 /?CCL42
+ ZERO? LEN \?CND30
+ EQUAL? P-SLOCBITS,-1 /?CND30
+?CCL42: EQUAL? P-SLOCBITS,-1 \?CCL49
+ SET 'P-SLOCBITS,XBITS
+ SET 'OLEN,LEN
+ GET TBL,P-MATCHLEN
+ SUB STACK,LEN
+ PUT TBL,P-MATCHLEN,STACK
+ JUMP ?PRG23
+?CCL49: ZERO? LEN \?CND50
+ SET 'LEN,OLEN
+?CND50: EQUAL? WINNER,ADVENTURER /?CCL54
+ CALL CANT-ORPHAN
+ RFALSE
+?CCL54: ZERO? VRB /?CCL56
+ ZERO? P-NAM /?CCL56
+ CALL WHICH-PRINT,TLEN,LEN,TBL
+ EQUAL? TBL,P-PRSO \?CCL61
+ SET 'P-ACLAUSE,P-NC1
+ JUMP ?CND59
+?CCL61: SET 'P-ACLAUSE,P-NC2
+?CND59: SET 'P-AADJ,P-ADJ
+ SET 'P-ANAM,P-NAM
+ CALL ORPHAN,FALSE-VALUE,FALSE-VALUE
+ SET 'P-OFLAG,TRUE-VALUE
+ JUMP ?CND52
+?CCL56: ZERO? VRB /?CND52
+ PRINTI "There seems to be a noun missing in that sentence!"
+ CRLF
+?CND52: SET 'P-NAM,FALSE-VALUE
+ SET 'P-ADJ,FALSE-VALUE
+ RFALSE
+?CND30: ZERO? LEN \?CCL67
+ ZERO? GCHECK /?CCL67
+ ZERO? VRB /?CND70
+ SET 'P-SLOCBITS,XBITS
+ ZERO? LIT \?CTR73
+ EQUAL? PRSA,V?TELL \?PRG77
+?CTR73: CALL OBJ-FOUND,NOT-HERE-OBJECT,TBL
+ SET 'P-XNAM,P-NAM
+ SET 'P-XADJ,P-ADJ
+ SET 'P-XADJN,P-ADJN
+ SET 'P-NAM,FALSE-VALUE
+ SET 'P-ADJ,FALSE-VALUE
+ SET 'P-ADJN,FALSE-VALUE
+ RTRUE
+?PRG77: PRINT TOO-DARK
+ CRLF
+?CND70: SET 'P-NAM,FALSE-VALUE
+ SET 'P-ADJ,FALSE-VALUE
+ RFALSE
+?CCL67: ZERO? LEN \?CND65
+ SET 'GCHECK,TRUE-VALUE
+ JUMP ?PRG23
+?CND65: SET 'P-SLOCBITS,XBITS
+ SET 'P-NAM,FALSE-VALUE
+ SET 'P-ADJ,FALSE-VALUE
+ RTRUE
+
+
+ .FUNCT WHICH-PRINT,TLEN,LEN,TBL,OBJ,RLEN
+ SET 'RLEN,LEN
+ PRINTI "Which "
+ ZERO? P-OFLAG \?CTR4
+ ZERO? P-MERGED \?CTR4
+ ZERO? P-AND /?CCL5
+?CTR4: ZERO? P-NAM /?CCL11
+ PUSH P-NAM
+ JUMP ?CND9
+?CCL11: ZERO? P-ADJ /?CCL13
+ PUSH P-ADJN
+ JUMP ?CND9
+?CCL13: PUSH W?ONE
+?CND9: PRINTB STACK
+ JUMP ?PRG16
+?CCL5: EQUAL? TBL,P-PRSO /?PRD14
+ PUSH 0
+ JUMP ?PRD15
+?PRD14: PUSH 1
+?PRD15: CALL THING-PRINT,STACK
+?PRG16: PRINTI " do you mean, "
+?PRG18: INC 'TLEN
+ GET TBL,TLEN >OBJ
+ PRINTI "the "
+ PRINTD OBJ
+ EQUAL? LEN,2 \?CCL24
+ EQUAL? RLEN,2 /?PRG29
+ PRINTC 44
+?PRG29: PRINTI " or "
+ JUMP ?CND22
+?CCL24: GRTR? LEN,2 \?CND22
+ PRINTI ", "
+?CND22: DLESS? 'LEN,1 \?PRG18
+ PRINTR "?"
+
+
+ .FUNCT GLOBAL-CHECK,TBL,LEN,RMG,RMGL,CNT=0,OBJ,OBITS,FOO
+ GET TBL,P-MATCHLEN >LEN
+ SET 'OBITS,P-SLOCBITS
+ GETPT HERE,P?GLOBAL >RMG
+ ZERO? RMG /?CND1
+ PTSIZE RMG
+ SUB STACK,1 >RMGL
+?PRG3: GETB RMG,CNT >OBJ
+ CALL THIS-IT?,OBJ,TBL
+ ZERO? STACK /?CND5
+ CALL OBJ-FOUND,OBJ,TBL
+?CND5: IGRTR? 'CNT,RMGL \?PRG3
+?CND1: GETPT HERE,P?PSEUDO >RMG
+ ZERO? RMG /?CND9
+ PTSIZE RMG
+ DIV STACK,4
+ SUB STACK,1 >RMGL
+ SET 'CNT,0
+?PRG11: MUL CNT,2
+ GET RMG,STACK
+ EQUAL? P-NAM,STACK \?CCL15
+ MUL CNT,2
+ ADD STACK,1
+ GET RMG,STACK
+ PUTP PSEUDO-OBJECT,P?ACTION,STACK
+ GETPT PSEUDO-OBJECT,P?ACTION
+ SUB STACK,5 >FOO
+ GET P-NAM,0
+ PUT FOO,0,STACK
+ GET P-NAM,1
+ PUT FOO,1,STACK
+ CALL OBJ-FOUND,PSEUDO-OBJECT,TBL
+ JUMP ?CND9
+?CCL15: IGRTR? 'CNT,RMGL \?PRG11
+?CND9: GET TBL,P-MATCHLEN
+ EQUAL? STACK,LEN \FALSE
+ SET 'P-SLOCBITS,-1
+ SET 'P-TABLE,TBL
+ CALL DO-SL,GLOBAL-OBJECTS,1,1
+ SET 'P-SLOCBITS,OBITS
+ GET TBL,P-MATCHLEN
+ ZERO? STACK \FALSE
+ EQUAL? PRSA,V?LOOK-INSIDE,V?SEARCH,V?EXAMINE \FALSE
+ CALL DO-SL,ROOMS,1,1
+ RSTACK
+
+
+ .FUNCT DO-SL,OBJ,BIT1,BIT2,BTS
+ ADD BIT1,BIT2
+ BTST P-SLOCBITS,STACK \?CCL3
+ CALL SEARCH-LIST,OBJ,P-TABLE,P-SRCALL
+ RSTACK
+?CCL3: BTST P-SLOCBITS,BIT1 \?CCL6
+ CALL SEARCH-LIST,OBJ,P-TABLE,P-SRCTOP
+ RSTACK
+?CCL6: BTST P-SLOCBITS,BIT2 \TRUE
+ CALL SEARCH-LIST,OBJ,P-TABLE,P-SRCBOT
+ RSTACK
+
+
+ .FUNCT SEARCH-LIST,OBJ,TBL,LVL,FLS,NOBJ
+ FIRST? OBJ >OBJ \FALSE
+?PRG4: EQUAL? LVL,P-SRCBOT /?CND6
+ GETPT OBJ,P?SYNONYM
+ ZERO? STACK /?CND6
+ CALL THIS-IT?,OBJ,TBL
+ ZERO? STACK /?CND6
+ CALL OBJ-FOUND,OBJ,TBL
+?CND6: ZERO? LVL \?PRD14
+ FSET? OBJ,SEARCHBIT /?PRD14
+ FSET? OBJ,SURFACEBIT \?CND11
+?PRD14: FIRST? OBJ >NOBJ \?CND11
+ FSET? OBJ,OPENBIT /?CCL12
+ FSET? OBJ,TRANSBIT \?CND11
+?CCL12: FSET? OBJ,SURFACEBIT \?CCL23
+ PUSH P-SRCALL
+ JUMP ?CND21
+?CCL23: FSET? OBJ,SEARCHBIT \?CCL25
+ PUSH P-SRCALL
+ JUMP ?CND21
+?CCL25: PUSH P-SRCTOP
+?CND21: CALL SEARCH-LIST,OBJ,TBL,STACK >FLS
+?CND11: NEXT? OBJ >OBJ /?PRG4
+ RTRUE
+
+
+ .FUNCT OBJ-FOUND,OBJ,TBL,PTR
+ GET TBL,P-MATCHLEN >PTR
+ ADD PTR,1
+ PUT TBL,STACK,OBJ
+ ADD PTR,1
+ PUT TBL,P-MATCHLEN,STACK
+ RTRUE
+
+
+ .FUNCT TAKE-CHECK,N
+ GETB P-SYNTAX,P-SPREP1
+ DIV STACK,64 >N
+ GRTR? N,0 \TRUE
+ GETB P-SYNTAX,P-SLOC1
+ CALL ITAKE-CHECK,P-PRSO,STACK
+ ZERO? STACK /FALSE
+ GRTR? N,1 \TRUE
+ GETB P-SYNTAX,P-SLOC2
+ CALL ITAKE-CHECK,P-PRSI,STACK
+ RSTACK
+
+
+ .FUNCT ITAKE-CHECK,TBL,IBITS,PTR,OBJ,TAKEN
+ GET TBL,P-MATCHLEN >PTR
+ ZERO? PTR /TRUE
+ BTST IBITS,SHAVE /?PRG8
+ BTST IBITS,STAKE \TRUE
+?PRG8: DLESS? 'PTR,0 /TRUE
+ ADD PTR,1
+ GET TBL,STACK >OBJ
+ EQUAL? OBJ,IT \?CND13
+ CALL ACCESSIBLE?,P-IT-OBJECT
+ ZERO? STACK \?CCL17
+ PRINT REFERRING
+ RFALSE
+?CCL17: SET 'OBJ,P-IT-OBJECT
+?CND13: CALL HELD?,OBJ
+ ZERO? STACK \?PRG8
+ EQUAL? OBJ,HANDS,ME /?PRG8
+ SET 'PRSO,OBJ
+ FSET? OBJ,TRYTAKEBIT \?CCL26
+ SET 'TAKEN,TRUE-VALUE
+ JUMP ?CND24
+?CCL26: EQUAL? WINNER,ADVENTURER /?CCL28
+ SET 'TAKEN,FALSE-VALUE
+ JUMP ?CND24
+?CCL28: BTST IBITS,STAKE \?CCL30
+ CALL ITAKE,FALSE-VALUE
+ EQUAL? STACK,TRUE-VALUE \?CCL30
+ SET 'TAKEN,FALSE-VALUE
+ JUMP ?CND24
+?CCL30: SET 'TAKEN,TRUE-VALUE
+?CND24: ZERO? TAKEN /?CCL35
+ BTST IBITS,SHAVE \?CCL35
+ EQUAL? WINNER,ADVENTURER \?CCL35
+ EQUAL? OBJ,NOT-HERE-OBJECT \?PRG43
+ PRINTI "You don't have that!"
+ CRLF
+ RFALSE
+?PRG43: PRINTI "You don't have the "
+ PRINTD OBJ
+ PRINT PERIOD-CR
+ RFALSE
+?CCL35: ZERO? TAKEN \?PRG8
+ EQUAL? WINNER,ADVENTURER \?PRG8
+ PRINTI "(Taken)"
+ CRLF
+ JUMP ?PRG8
+
+
+ .FUNCT MANY-CHECK,LOSS=0,TMP,?TMP1
+ GET P-PRSO,P-MATCHLEN
+ GRTR? STACK,1 \?CCL3
+ GETB P-SYNTAX,P-SLOC1
+ BTST STACK,SMANY /?CCL3
+ SET 'LOSS,1
+ JUMP ?CND1
+?CCL3: GET P-PRSI,P-MATCHLEN
+ GRTR? STACK,1 \?CND1
+ GETB P-SYNTAX,P-SLOC2
+ BTST STACK,SMANY /?CND1
+ SET 'LOSS,2
+?CND1: ZERO? LOSS /TRUE
+ PRINTI "You can't use multiple "
+ EQUAL? LOSS,2 \?PRG18
+ PRINTI "in"
+?PRG18: PRINTI "direct objects with """
+ GET P-ITBL,P-VERBN >TMP
+ ZERO? TMP \?CCL22
+ PRINTI "tell"
+ JUMP ?PRG29
+?CCL22: ZERO? P-OFLAG \?CTR25
+ ZERO? P-MERGED /?CCL26
+?CTR25: GET TMP,0
+ PRINTB STACK
+ JUMP ?PRG29
+?CCL26: GETB TMP,2 >?TMP1
+ GETB TMP,3
+ CALL WORD-PRINT,?TMP1,STACK
+?PRG29: PRINTI """."
+ CRLF
+ RFALSE
+
+
+ .FUNCT ZMEMQ,ITM,TBL,SIZE=-1,CNT=1
+ ZERO? TBL /FALSE
+ LESS? SIZE,0 /?CCL5
+ SET 'CNT,0
+ JUMP ?PRG6
+?CCL5: GET TBL,0 >SIZE
+?PRG6: GET TBL,CNT
+ EQUAL? ITM,STACK \?CCL10
+ MUL CNT,2
+ ADD TBL,STACK
+ RSTACK
+?CCL10: IGRTR? 'CNT,SIZE \?PRG6
+ RFALSE
+
+
+ .FUNCT ZMEMQB,ITM,TBL,SIZE,CNT=0
+?PRG1: GETB TBL,CNT
+ EQUAL? ITM,STACK /TRUE
+ IGRTR? 'CNT,SIZE \?PRG1
+ RFALSE
+
+
+ .FUNCT LIT?,RM,RMBIT=1,OHERE,LIT=0
+ ZERO? ALWAYS-LIT /?CND1
+ EQUAL? WINNER,ADVENTURER /TRUE
+?CND1: SET 'P-GWIMBIT,ONBIT
+ SET 'OHERE,HERE
+ SET 'HERE,RM
+ ZERO? RMBIT /?CCL7
+ FSET? RM,ONBIT \?CCL7
+ SET 'LIT,TRUE-VALUE
+ JUMP ?CND5
+?CCL7: PUT P-MERGE,P-MATCHLEN,0
+ SET 'P-TABLE,P-MERGE
+ SET 'P-SLOCBITS,-1
+ EQUAL? OHERE,RM \?CND10
+ CALL DO-SL,WINNER,1,1
+ EQUAL? WINNER,ADVENTURER /?CND10
+ IN? ADVENTURER,RM \?CND10
+ CALL DO-SL,ADVENTURER,1,1
+?CND10: CALL DO-SL,RM,1,1
+ GET P-TABLE,P-MATCHLEN
+ GRTR? STACK,0 \?CND5
+ SET 'LIT,TRUE-VALUE
+?CND5: SET 'HERE,OHERE
+ SET 'P-GWIMBIT,0
+ RETURN LIT
+
+
+ .FUNCT THIS-IT?,OBJ,TBL,SYNS,?TMP1
+ FSET? OBJ,INVISIBLE /FALSE
+ ZERO? P-NAM /?CCL5
+ GETPT OBJ,P?SYNONYM >SYNS
+ PTSIZE SYNS
+ DIV STACK,2
+ SUB STACK,1
+ CALL ZMEMQ,P-NAM,SYNS,STACK
+ ZERO? STACK /FALSE
+?CCL5: ZERO? P-ADJ /?CCL9
+ GETPT OBJ,P?ADJECTIVE >SYNS
+ ZERO? SYNS /FALSE
+ PTSIZE SYNS
+ SUB STACK,1
+ CALL ZMEMQB,P-ADJ,SYNS,STACK
+ ZERO? STACK /FALSE
+?CCL9: ZERO? P-GWIMBIT /TRUE
+ FSET? OBJ,P-GWIMBIT /TRUE
+ RFALSE
+
+
+ .FUNCT ACCESSIBLE?,OBJ,L,?TMP1
+ LOC OBJ >L
+ FSET? OBJ,INVISIBLE /FALSE
+ ZERO? L /FALSE
+ EQUAL? L,GLOBAL-OBJECTS /TRUE
+ EQUAL? L,LOCAL-GLOBALS \?CCL9
+ CALL GLOBAL-IN?,OBJ,HERE
+ ZERO? STACK \TRUE
+?CCL9: CALL META-LOC,OBJ >?TMP1
+ LOC WINNER
+ EQUAL? ?TMP1,HERE,STACK \FALSE
+ LOC WINNER
+ EQUAL? L,WINNER,HERE,STACK /TRUE
+ FSET? L,OPENBIT \FALSE
+ CALL ACCESSIBLE?,L
+ ZERO? STACK /FALSE
+ RTRUE
+
+
+ .FUNCT META-LOC,OBJ
+?PRG1: ZERO? OBJ /FALSE
+ IN? OBJ,GLOBAL-OBJECTS \?CND3
+ RETURN GLOBAL-OBJECTS
+?CND3: IN? OBJ,ROOMS \?CCL9
+ RETURN OBJ
+?CCL9: LOC OBJ >OBJ
+ JUMP ?PRG1
+
+ .ENDI
diff --git a/parser.zil b/parser.zil
new file mode 100644
index 0000000..aba8b6c
--- /dev/null
+++ b/parser.zil
@@ -0,0 +1,1483 @@
+"PARSER for
+ Mini-Zork II: The Wizard of Frobozz
+ (c) Copyright 1988 Infocom, Inc. All Rights Reserved."
+
+;"WHICH and TRAP retrofixes installed"
+
+"Parser global variable convention: All parser globals will
+ begin with 'P-'. Local variables are not restricted in any
+ way.
+"
+
+<SETG SIBREAKS ".,\"">
+
+<GLOBAL PRSA <>>
+<GLOBAL PRSI <>>
+<GLOBAL PRSO <>>
+
+<GLOBAL P-TABLE 0>
+<GLOBAL P-ONEOBJ 0>
+<GLOBAL P-SYNTAX 0>
+
+<GLOBAL P-CCTBL <TABLE 0 0 0 0>>
+;"pointers used by CLAUSE-COPY (source/destination beginning/end pointers)"
+<CONSTANT CC-SBPTR 0>
+<CONSTANT CC-SEPTR 1>
+<CONSTANT CC-DBPTR 2>
+<CONSTANT CC-DEPTR 3>
+
+<GLOBAL P-LEN 0>
+<GLOBAL P-DIR 0>
+<GLOBAL HERE 0>
+<GLOBAL WINNER 0>
+
+<GLOBAL P-LEXV
+ <ITABLE 59 (LEXV) 0 #BYTE 0 #BYTE 0> ;<ITABLE BYTE 120>>
+<GLOBAL AGAIN-LEXV
+ <ITABLE 59 (LEXV) 0 #BYTE 0 #BYTE 0> ;<ITABLE BYTE 120>>
+<GLOBAL RESERVE-LEXV
+ <ITABLE 59 (LEXV) 0 #BYTE 0 #BYTE 0> ;<ITABLE BYTE 120>>
+<GLOBAL RESERVE-PTR <>>
+
+;"INBUF - Input buffer for READ"
+
+<GLOBAL P-INBUF
+ <ITABLE 120 (BYTE LENGTH) 0>
+ ;<ITABLE BYTE 60>>
+<GLOBAL OOPS-INBUF
+ <ITABLE 120 (BYTE LENGTH) 0>
+ ;<ITABLE BYTE 60>>
+<GLOBAL OOPS-TABLE <TABLE <> <> <> <>>>
+<CONSTANT O-PTR 0> "word pointer to unknown token in P-LEXV"
+<CONSTANT O-START 1> "word pointer to sentence start in P-LEXV"
+<CONSTANT O-LENGTH 2> "byte length of unparsed tokens in P-LEXV"
+<CONSTANT O-END 3> "byte pointer to first free byte in OOPS-INBUF"
+
+;"Parse-cont variable"
+
+<GLOBAL P-CONT <>>
+<GLOBAL P-IT-OBJECT <>>
+;<GLOBAL LAST-PSEUDO-LOC <>>
+
+;"Orphan flag"
+
+<GLOBAL P-OFLAG <>>
+<GLOBAL P-MERGED <>>
+<GLOBAL P-ACLAUSE <>>
+<GLOBAL P-ANAM <>>
+<GLOBAL P-AADJ <>>
+;"Parser variables and temporaries"
+
+;"Byte offset to # of entries in LEXV"
+
+<CONSTANT P-LEXWORDS 1> ;"Word offset to start of LEXV entries"
+<CONSTANT P-LEXSTART 1> ;"Number of words per LEXV entry"
+<CONSTANT P-LEXELEN 2>
+<CONSTANT P-WORDLEN 4> ;"Offset to parts of speech byte"
+
+<CONSTANT P-PSOFF 4> ;"Offset to first part of speech"
+<CONSTANT P-P1OFF 5> ;"First part of speech bit mask in PSOFF byte"
+<CONSTANT P-P1BITS 3>
+
+<CONSTANT P-ITBLLEN 9>
+<GLOBAL P-ITBL <TABLE 0 0 0 0 0 0 0 0 0 0>>
+<GLOBAL P-OTBL <TABLE 0 0 0 0 0 0 0 0 0 0>>
+<GLOBAL P-VTBL <TABLE 0 0 0 0>>
+<GLOBAL P-OVTBL <TABLE 0 #BYTE 0 #BYTE 0>>
+
+<GLOBAL P-NCN 0>
+
+<CONSTANT P-VERB 0>
+<CONSTANT P-VERBN 1>
+<CONSTANT P-PREP1 2>
+<CONSTANT P-PREP1N 3>
+<CONSTANT P-PREP2 4>
+<CONSTANT P-PREP2N 5>
+<CONSTANT P-NC1 6>
+<CONSTANT P-NC1L 7>
+<CONSTANT P-NC2 8>
+<CONSTANT P-NC2L 9>
+
+<GLOBAL QUOTE-FLAG <>>
+<GLOBAL P-END-ON-PREP <>>
+
+" Grovel down the input finding the verb, prepositions, and noun clauses.
+ If the input is <direction> or <walk> <direction>, fall out immediately
+ setting PRSA to ,V?WALK and PRSO to <direction>. Otherwise, perform
+ all required orphaning, syntax checking, and noun clause lookup."
+
+<ROUTINE PARSER ("AUX" (PTR ,P-LEXSTART) WRD (VAL 0) (VERB <>) (OF-FLAG <>)
+ OWINNER OMERGED LEN (DIR <>) (NW 0) (LW 0) (CNT -1))
+ <REPEAT ()
+ <COND (<G? <SET CNT <+ .CNT 1>> ,P-ITBLLEN> <RETURN>)
+ (T
+ <COND (<NOT ,P-OFLAG>
+ <PUT ,P-OTBL .CNT <GET ,P-ITBL .CNT>>)>
+ <PUT ,P-ITBL .CNT 0>)>>
+ <SET OWINNER ,WINNER>
+ <SET OMERGED ,P-MERGED>
+ <SETG P-ADVERB <>>
+ <SETG P-MERGED <>>
+ <SETG P-END-ON-PREP <>>
+ <PUT ,P-PRSO ,P-MATCHLEN 0>
+ <PUT ,P-PRSI ,P-MATCHLEN 0>
+ <PUT ,P-BUTS ,P-MATCHLEN 0>
+ <COND (<AND <NOT ,QUOTE-FLAG> <N==? ,WINNER ,ADVENTURER>>
+ <SETG WINNER ,ADVENTURER>
+ <SETG HERE <META-LOC ,ADVENTURER>>
+ ;<COND (<NOT <FSET? <LOC ,WINNER> ,VEHBIT>>
+ <SETG HERE <LOC ,WINNER>>)>
+ <SETG LIT <LIT? ,HERE>>)>
+ <COND (,RESERVE-PTR
+ <SET PTR ,RESERVE-PTR>
+ <STUFF ,RESERVE-LEXV ,P-LEXV>
+ <COND (<AND <G? ,VERBOSITY 0>
+ <EQUAL? ,ADVENTURER ,WINNER>>
+ <CRLF>)>
+ <SETG RESERVE-PTR <>>
+ <SETG P-CONT <>>)
+ (,P-CONT
+ <SET PTR ,P-CONT>
+ <COND (<AND <G? ,VERBOSITY 0>
+ <EQUAL? ,ADVENTURER ,WINNER>
+ <NOT <VERB? SAY>>>
+ <CRLF>)>
+ <SETG P-CONT <>>)
+ (T
+ <SETG WINNER ,ADVENTURER>
+ <SETG QUOTE-FLAG <>>
+ <COND (<NOT <FSET? <LOC ,WINNER> ,VEHBIT>>
+ <SETG HERE <LOC ,WINNER>>)>
+ <SETG LIT <LIT? ,HERE>>
+ <COND (<G? ,VERBOSITY 0>
+ <CRLF>)>
+ <TELL ">">
+ <READ ,P-INBUF ,P-LEXV>)>
+ <SETG P-LEN <GETB ,P-LEXV ,P-LEXWORDS>>
+ <COND (<ZERO? ,P-LEN> <TELL "I beg your pardon?" CR> <RFALSE>)>
+ <COND (<EQUAL? <SET WRD <GET ,P-LEXV .PTR>> ,W?OOPS>
+ <COND (<EQUAL? <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>
+ ,W?PERIOD ,W?COMMA>
+ <SET PTR <+ .PTR ,P-LEXELEN>>
+ <SETG P-LEN <- ,P-LEN 1>>)>
+ <COND (<NOT <G? ,P-LEN 1>>
+ <TELL "I can't help your clumsiness." CR>
+ <RFALSE>)
+ (<GET ,OOPS-TABLE ,O-PTR>
+ <COND (<AND <G? ,P-LEN 2>
+ <EQUAL? <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>
+ ,W?QUOTE>>
+ <TELL
+"Sorry, you can't correct mistakes in quoted text." CR>
+ <RFALSE>)
+ (<G? ,P-LEN 2>
+ <TELL
+"Warning: only the first word after OOPS is used." CR>)>
+ <PUT ,AGAIN-LEXV <GET ,OOPS-TABLE ,O-PTR>
+ <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>>
+ <SETG WINNER .OWINNER> ;"maybe fix oops vs. chars.?"
+ <INBUF-ADD <GETB ,P-LEXV <+ <* .PTR ,P-LEXELEN> 6>>
+ <GETB ,P-LEXV <+ <* .PTR ,P-LEXELEN> 7>>
+ <+ <* <GET ,OOPS-TABLE ,O-PTR> ,P-LEXELEN> 3>>
+ <STUFF ,AGAIN-LEXV ,P-LEXV>
+ <SETG P-LEN <GETB ,P-LEXV ,P-LEXWORDS>>
+ <SET PTR <GET ,OOPS-TABLE ,O-START>>
+ <INBUF-STUFF ,OOPS-INBUF ,P-INBUF>)
+ (T
+ <PUT ,OOPS-TABLE ,O-END <>>
+ <TELL "There was no word to replace!" CR>
+ <RFALSE>)>)
+ (T
+ <COND (<NOT <EQUAL? .WRD ,W?AGAIN ,W?G>>
+ <SETG P-NUMBER 0>)>
+ <PUT ,OOPS-TABLE ,O-END <>>)>
+ <COND (<EQUAL? <GET ,P-LEXV .PTR> ,W?AGAIN ,W?G>
+ <COND (<ZERO? <GETB ,OOPS-INBUF 1>>
+ <TELL "Beg pardon?" CR>
+ <RFALSE>)
+ (,P-OFLAG
+ <TELL "It's difficult to repeat fragments." CR>
+ <RFALSE>)
+ (<NOT ,P-WON>
+ <TELL "That would just repeat a mistake." CR>
+ <RFALSE>)
+ (<G? ,P-LEN 1>
+ <COND (<OR <EQUAL? <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>
+ ,W?PERIOD ,W?COMMA ,W?THEN>
+ <EQUAL? <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>
+ ,W?AND>>
+ <SET PTR <+ .PTR <* 2 ,P-LEXELEN>>>
+ <PUTB ,P-LEXV ,P-LEXWORDS
+ <- <GETB ,P-LEXV ,P-LEXWORDS> 2>>)
+ (T
+ <TELL "I couldn't understand that sentence." CR>
+ <RFALSE>)>)
+ (T
+ <SET PTR <+ .PTR ,P-LEXELEN>>
+ <PUTB ,P-LEXV ,P-LEXWORDS
+ <- <GETB ,P-LEXV ,P-LEXWORDS> 1>>)>
+ <COND (<G? <GETB ,P-LEXV ,P-LEXWORDS> 0>
+ <STUFF ,P-LEXV ,RESERVE-LEXV>
+ <SETG RESERVE-PTR .PTR>)
+ (T
+ <SETG RESERVE-PTR <>>)>
+ ;<SETG P-LEN <GETB ,AGAIN-LEXV ,P-LEXWORDS>>
+ <SETG WINNER .OWINNER>
+ <SETG P-MERGED .OMERGED>
+ <INBUF-STUFF ,OOPS-INBUF ,P-INBUF>
+ <STUFF ,AGAIN-LEXV ,P-LEXV>
+ <SET CNT -1>
+ <SET DIR ,AGAIN-DIR>
+ <REPEAT ()
+ <COND (<IGRTR? CNT ,P-ITBLLEN> <RETURN>)
+ (T <PUT ,P-ITBL .CNT <GET ,P-OTBL .CNT>>)>>)
+ (T
+ <STUFF ,P-LEXV ,AGAIN-LEXV>
+ <INBUF-STUFF ,P-INBUF ,OOPS-INBUF>
+ <PUT ,OOPS-TABLE ,O-START .PTR>
+ <PUT ,OOPS-TABLE ,O-LENGTH <* 4 ,P-LEN>>
+ <SET LEN
+ <* 2 <+ .PTR <* ,P-LEXELEN <GETB ,P-LEXV ,P-LEXWORDS>>>>>
+ <PUT ,OOPS-TABLE ,O-END <+ <GETB ,P-LEXV <- .LEN 1>>
+ <GETB ,P-LEXV <- .LEN 2>>>>
+ <SETG RESERVE-PTR <>>
+ <SET LEN ,P-LEN>
+ <SETG P-DIR <>>
+ <SETG P-NCN 0>
+ <SETG P-GETFLAGS 0>
+ <REPEAT ()
+ <COND (<L? <SETG P-LEN <- ,P-LEN 1>> 0>
+ <SETG QUOTE-FLAG <>>
+ <RETURN>)
+ (<OR <SET WRD <GET ,P-LEXV .PTR>>
+ <SET WRD <NUMBER? .PTR>>>
+ <COND (<ZERO? ,P-LEN> <SET NW 0>)
+ (T <SET NW <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>>)>
+ <COND (<AND <EQUAL? .WRD ,W?TO>
+ <EQUAL? .VERB ,ACT?TELL ;,ACT?ASK>>
+ <SET WRD ,W?QUOTE>)
+ (<AND <EQUAL? .WRD ,W?THEN>
+ <G? ,P-LEN 0>
+ <NOT .VERB>
+ <NOT ,QUOTE-FLAG> ;"Last NOT added 7/3">
+ <COND (<EQUAL? .LW 0 ,W?PERIOD>
+ <SET WRD ,W?THE>)
+ (ELSE
+ <PUT ,P-ITBL ,P-VERB ,ACT?TELL>
+ <PUT ,P-ITBL ,P-VERBN 0>
+ <SET WRD ,W?QUOTE>)>)>
+ <COND (<EQUAL? .WRD ,W?THEN ,W?PERIOD ,W?QUOTE>
+ <COND (<EQUAL? .WRD ,W?QUOTE>
+ <COND (,QUOTE-FLAG
+ <SETG QUOTE-FLAG <>>)
+ (T <SETG QUOTE-FLAG T>)>)>
+ <OR <ZERO? ,P-LEN>
+ <SETG P-CONT <+ .PTR ,P-LEXELEN>>>
+ <PUTB ,P-LEXV ,P-LEXWORDS ,P-LEN>
+ <RETURN>)
+ (<AND <SET VAL
+ <WT? .WRD
+ ,PS?DIRECTION
+ ,P1?DIRECTION>>
+ <EQUAL? .VERB <> ,ACT?WALK>
+ <OR <EQUAL? .LEN 1>
+ <AND <EQUAL? .LEN 2>
+ <EQUAL? .VERB ,ACT?WALK>>
+ <AND <EQUAL? .NW
+ ,W?THEN
+ ,W?PERIOD
+ ,W?QUOTE>
+ <NOT <L? .LEN 2>>>
+ <AND ,QUOTE-FLAG
+ <EQUAL? .LEN 2>
+ <EQUAL? .NW ,W?QUOTE>>
+ <AND <G? .LEN 2>
+ <EQUAL? .NW ,W?COMMA ,W?AND>>>>
+ <SET DIR .VAL>
+ <COND (<EQUAL? .NW ,W?COMMA ,W?AND>
+ <PUT ,P-LEXV
+ <+ .PTR ,P-LEXELEN>
+ ,W?THEN>)>
+ <COND (<NOT <G? .LEN 2>>
+ <SETG QUOTE-FLAG <>>
+ <RETURN>)>)
+ (<AND <SET VAL <WT? .WRD ,PS?VERB ,P1?VERB>>
+ <NOT .VERB>>
+ <SET VERB .VAL>
+ <PUT ,P-ITBL ,P-VERB .VAL>
+ <PUT ,P-ITBL ,P-VERBN ,P-VTBL>
+ <PUT ,P-VTBL 0 .WRD>
+ <PUTB ,P-VTBL 2 <GETB ,P-LEXV
+ <SET CNT
+ <+ <* .PTR 2> 2>>>>
+ <PUTB ,P-VTBL 3 <GETB ,P-LEXV <+ .CNT 1>>>)
+ (<OR <SET VAL <WT? .WRD ,PS?PREPOSITION 0>>
+ <EQUAL? .WRD ,W?ALL ,W?ONE ;,W?BOTH>
+ <WT? .WRD ,PS?ADJECTIVE>
+ <WT? .WRD ,PS?OBJECT>>
+ <COND (<AND <G? ,P-LEN 1>
+ <EQUAL? .NW ,W?OF>
+ <ZERO? .VAL>
+ <NOT <EQUAL? .WRD
+ ,W?ALL ,W?ONE ,W?A>>
+ ;<NOT <EQUAL? .WRD ,W?BOTH>>>
+ <SET OF-FLAG T>)
+ (<AND <NOT <ZERO? .VAL>>
+ <OR <ZERO? ,P-LEN>
+ <EQUAL? .NW ,W?THEN ,W?PERIOD>>>
+ <SETG P-END-ON-PREP T>
+ <COND (<L? ,P-NCN 2>
+ <PUT ,P-ITBL ,P-PREP1 .VAL>
+ <PUT ,P-ITBL ,P-PREP1N .WRD>)>)
+ (<EQUAL? ,P-NCN 2>
+ <TELL
+"There were too many nouns in that sentence." CR>
+ <RFALSE>)
+ (T
+ <SETG P-NCN <+ ,P-NCN 1>>
+ <SETG P-ACT .VERB>
+ <OR <SET PTR <CLAUSE .PTR .VAL .WRD>>
+ <RFALSE>>
+ <COND (<L? .PTR 0>
+ <SETG QUOTE-FLAG <>>
+ <RETURN>)>)>)
+ (<EQUAL? .WRD ,W?OF>
+ <COND (<OR <NOT .OF-FLAG>
+ <EQUAL? .NW ,W?PERIOD ,W?THEN>>
+ <CANT-USE .PTR>
+ <RFALSE>)
+ (T
+ <SET OF-FLAG <>>)>)
+ (<WT? .WRD ,PS?BUZZ-WORD>)
+ (<AND <EQUAL? .VERB ,ACT?TELL>
+ <WT? .WRD ,PS?VERB ,P1?VERB>
+ <EQUAL? ,WINNER ,ADVENTURER>>
+ <TELL
+"Please consult your manual for the correct way to talk to other people
+or creatures." CR>
+ <RFALSE>)
+ (T
+ <CANT-USE .PTR>
+ <RFALSE>)>)
+ (T
+ <UNKNOWN-WORD .PTR>
+ <RFALSE>)>
+ <SET LW .WRD>
+ <SET PTR <+ .PTR ,P-LEXELEN>>>)>
+ <PUT ,OOPS-TABLE ,O-PTR <>>
+ <COND (.DIR
+ <SETG PRSA ,V?WALK>
+ <SETG PRSO .DIR>
+ <SETG P-OFLAG <>>
+ <SETG P-WALK-DIR .DIR>
+ <SETG AGAIN-DIR .DIR>)
+ (ELSE
+ <COND (,P-OFLAG <ORPHAN-MERGE>)>
+ <SETG P-WALK-DIR <>>
+ <SETG AGAIN-DIR <>>
+ <COND (<AND <SYNTAX-CHECK>
+ <SNARF-OBJECTS>
+ <MANY-CHECK>
+ <TAKE-CHECK>>
+ T)>)>>
+
+<GLOBAL P-ACT <>>
+<GLOBAL P-WALK-DIR <>>
+<GLOBAL AGAIN-DIR <>>
+
+;"For AGAIN purposes, put contents of one LEXV table into another."
+<ROUTINE STUFF (SRC DEST "OPTIONAL" (MAX 29) "AUX" (PTR ,P-LEXSTART) (CTR 1)
+ BPTR)
+ <PUTB .DEST 0 <GETB .SRC 0>>
+ <PUTB .DEST 1 <GETB .SRC 1>>
+ <REPEAT ()
+ <PUT .DEST .PTR <GET .SRC .PTR>>
+ <SET BPTR <+ <* .PTR 2> 2>>
+ <PUTB .DEST .BPTR <GETB .SRC .BPTR>>
+ <SET BPTR <+ <* .PTR 2> 3>>
+ <PUTB .DEST .BPTR <GETB .SRC .BPTR>>
+ <SET PTR <+ .PTR ,P-LEXELEN>>
+ <COND (<IGRTR? CTR .MAX>
+ <RETURN>)>>>
+
+;"Put contents of one INBUF into another"
+<ROUTINE INBUF-STUFF (SRC DEST "AUX" CNT)
+ <SET CNT <- <GETB .SRC 0> 1>>
+ <REPEAT ()
+ <PUTB .DEST .CNT <GETB .SRC .CNT>>
+ <COND (<DLESS? CNT 0> <RETURN>)>>>
+
+;"Put the word in the positions specified from P-INBUF to the end of
+OOPS-INBUF, leaving the appropriate pointers in AGAIN-LEXV"
+<ROUTINE INBUF-ADD (LEN BEG SLOT "AUX" DBEG (CTR 0) TMP)
+ <COND (<SET TMP <GET ,OOPS-TABLE ,O-END>>
+ <SET DBEG .TMP>)
+ (T
+ <SET DBEG <+ <GETB ,AGAIN-LEXV
+ <SET TMP <GET ,OOPS-TABLE ,O-LENGTH>>>
+ <GETB ,AGAIN-LEXV <+ .TMP 1>>>>)>
+ <PUT ,OOPS-TABLE ,O-END <+ .DBEG .LEN>>
+ <REPEAT ()
+ <PUTB ,OOPS-INBUF <+ .DBEG .CTR> <GETB ,P-INBUF <+ .BEG .CTR>>>
+ <SET CTR <+ .CTR 1>>
+ <COND (<EQUAL? .CTR .LEN> <RETURN>)>>
+ <PUTB ,AGAIN-LEXV .SLOT .DBEG>
+ <PUTB ,AGAIN-LEXV <- .SLOT 1> .LEN>>
+
+;"Check whether word pointed at by PTR is the correct part of speech.
+ The second argument is the part of speech (,PS?<part of speech>). The
+ 3rd argument (,P1?<part of speech>), if given, causes the value
+ for that part of speech to be returned."
+
+<ROUTINE WT? (PTR BIT "OPTIONAL" (B1 5) "AUX" (OFFS ,P-P1OFF) TYP)
+ <COND (<BTST <SET TYP <GETB .PTR ,P-PSOFF>> .BIT>
+ <COND (<G? .B1 4> <RTRUE>)
+ (T
+ <SET TYP <BAND .TYP ,P-P1BITS>>
+ <COND (<NOT <EQUAL? .TYP .B1>> <SET OFFS <+ .OFFS 1>>)>
+ <GETB .PTR .OFFS>)>)>>
+
+;" Scan through a noun clause, leave a pointer to its starting location"
+
+<ROUTINE CLAUSE (PTR VAL WRD "AUX" OFF NUM (ANDFLG <>) (FIRST?? T) NW (LW 0))
+ <SET OFF <* <- ,P-NCN 1> 2>>
+ <COND (<NOT <EQUAL? .VAL 0>>
+ <PUT ,P-ITBL <SET NUM <+ ,P-PREP1 .OFF>> .VAL>
+ <PUT ,P-ITBL <+ .NUM 1> .WRD>
+ <SET PTR <+ .PTR ,P-LEXELEN>>)
+ (T <SETG P-LEN <+ ,P-LEN 1>>)>
+ <COND (<ZERO? ,P-LEN> <SETG P-NCN <- ,P-NCN 1>> <RETURN -1>)>
+ <PUT ,P-ITBL <SET NUM <+ ,P-NC1 .OFF>> <REST ,P-LEXV <* .PTR 2>>>
+ <COND (<EQUAL? <GET ,P-LEXV .PTR> ,W?THE ,W?A ,W?AN>
+ <PUT ,P-ITBL .NUM <REST <GET ,P-ITBL .NUM> 4>>)>
+ <REPEAT ()
+ <COND (<L? <SETG P-LEN <- ,P-LEN 1>> 0>
+ <PUT ,P-ITBL <+ .NUM 1> <REST ,P-LEXV <* .PTR 2>>>
+ <RETURN -1>)>
+ <COND (<OR <SET WRD <GET ,P-LEXV .PTR>>
+ <SET WRD <NUMBER? .PTR>>>
+ <COND (<ZERO? ,P-LEN> <SET NW 0>)
+ (T <SET NW <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>>)>
+ <COND (<EQUAL? .WRD ,W?AND ,W?COMMA> <SET ANDFLG T>)
+ (<EQUAL? .WRD ,W?ALL ,W?ONE ;,W?BOTH>
+ <COND (<EQUAL? .NW ,W?OF>
+ <SETG P-LEN <- ,P-LEN 1>>
+ <SET PTR <+ .PTR ,P-LEXELEN>>)>)
+ (<OR <EQUAL? .WRD ,W?THEN ,W?PERIOD>
+ <AND <WT? .WRD ,PS?PREPOSITION>
+ <GET ,P-ITBL ,P-VERB>
+ ;"ADDED 4/27 FOR TURTLE,UP"
+ <NOT .FIRST??>>>
+ <SETG P-LEN <+ ,P-LEN 1>>
+ <PUT ,P-ITBL
+ <+ .NUM 1>
+ <REST ,P-LEXV <* .PTR 2>>>
+ <RETURN <- .PTR ,P-LEXELEN>>)
+ (<WT? .WRD ,PS?OBJECT>
+ <COND (<AND <G? ,P-LEN 0>
+ <EQUAL? .NW ,W?OF>
+ <NOT <EQUAL? .WRD ,W?ALL ,W?ONE>>>
+ T)
+ (<AND <WT? .WRD
+ ,PS?ADJECTIVE
+ ,P1?ADJECTIVE>
+ <NOT <EQUAL? .NW 0>>
+ <WT? .NW ,PS?OBJECT>>)
+ (<AND <NOT .ANDFLG>
+ <NOT <EQUAL? .NW ,W?BUT ,W?EXCEPT>>
+ <NOT <EQUAL? .NW ,W?AND ,W?COMMA>>>
+ <PUT ,P-ITBL
+ <+ .NUM 1>
+ <REST ,P-LEXV <* <+ .PTR 2> 2>>>
+ <RETURN .PTR>)
+ (T <SET ANDFLG <>>)>)
+ (<AND <OR ,P-MERGED
+ ,P-OFLAG
+ <NOT <EQUAL? <GET ,P-ITBL ,P-VERB> 0>>>
+ <OR <WT? .WRD ,PS?ADJECTIVE>
+ <WT? .WRD ,PS?BUZZ-WORD>>>)
+ (<AND .ANDFLG
+ <OR <WT? .WRD ,PS?DIRECTION>
+ <WT? .WRD ,PS?VERB>>>
+ <SET PTR <- .PTR 4>>
+ <PUT ,P-LEXV <+ .PTR 2> ,W?THEN>
+ <SETG P-LEN <+ ,P-LEN 2>>)
+ (<WT? .WRD ,PS?PREPOSITION> T)
+ (T
+ <CANT-USE .PTR>
+ <RFALSE>)>)
+ (T <UNKNOWN-WORD .PTR> <RFALSE>)>
+ <SET LW .WRD>
+ <SET FIRST?? <>>
+ <SET PTR <+ .PTR ,P-LEXELEN>>>>
+
+<ROUTINE NUMBER? (PTR "AUX" CNT BPTR CHR (SUM 0) (TIM <>))
+ <SET CNT <GETB <REST ,P-LEXV <* .PTR 2>> 2>>
+ <SET BPTR <GETB <REST ,P-LEXV <* .PTR 2>> 3>>
+ <REPEAT ()
+ <COND (<L? <SET CNT <- .CNT 1>> 0> <RETURN>)
+ (T
+ <SET CHR <GETB ,P-INBUF .BPTR>>
+ <COND (<EQUAL? .CHR 58>
+ <SET TIM .SUM>
+ <SET SUM 0>)
+ (<G? .SUM 10000> <RFALSE>)
+ (<AND <L? .CHR 58> <G? .CHR 47>>
+ <SET SUM <+ <* .SUM 10> <- .CHR 48>>>)
+ (T <RFALSE>)>
+ <SET BPTR <+ .BPTR 1>>)>>
+ <PUT ,P-LEXV .PTR ,W?INTNUM>
+ <COND (<G? .SUM 1000> <RFALSE>)
+ (.TIM
+ <COND (<L? .TIM 8> <SET TIM <+ .TIM 12>>)
+ (<G? .TIM 23> <RFALSE>)>
+ <SET SUM <+ .SUM <* .TIM 60>>>)>
+ <SETG P-NUMBER .SUM>
+ ,W?INTNUM>
+
+<GLOBAL P-NUMBER 0>
+
+;"New ORPHAN-MERGE for TRAP Retrofix 6/21/84"
+
+<ROUTINE ORPHAN-MERGE ("AUX" (CNT -1) TEMP VERB BEG END (ADJ <>) WRD)
+ <SETG P-OFLAG <>>
+ <COND (<OR <EQUAL? <WT? <SET WRD <GET <GET ,P-ITBL ,P-VERBN> 0>>
+ ,PS?VERB ,P1?VERB>
+ <GET ,P-OTBL ,P-VERB>>
+ <NOT <ZERO? <WT? .WRD ,PS?ADJECTIVE>>>>
+ <SET ADJ T>)
+ (<AND <NOT <ZERO? <WT? .WRD ,PS?OBJECT ,P1?OBJECT>>>
+ <EQUAL? ,P-NCN 0>>
+ <PUT ,P-ITBL ,P-VERB 0>
+ <PUT ,P-ITBL ,P-VERBN 0>
+ <PUT ,P-ITBL ,P-NC1 <REST ,P-LEXV 2>>
+ <PUT ,P-ITBL ,P-NC1L <REST ,P-LEXV 6>>
+ <SETG P-NCN 1>)>
+ <COND (<AND <NOT <ZERO? <SET VERB <GET ,P-ITBL ,P-VERB>>>>
+ <NOT .ADJ>
+ <NOT <EQUAL? .VERB <GET ,P-OTBL ,P-VERB>>>>
+ <RFALSE>)
+ (<EQUAL? ,P-NCN 2> <RFALSE>)
+ (<EQUAL? <GET ,P-OTBL ,P-NC1> 1>
+ <COND (<OR <EQUAL? <SET TEMP <GET ,P-ITBL ,P-PREP1>>
+ <GET ,P-OTBL ,P-PREP1>>
+ <ZERO? .TEMP>>
+ <COND (.ADJ
+ <PUT ,P-OTBL ,P-NC1 <REST ,P-LEXV 2>>
+ <COND (<ZERO? <GET ,P-ITBL ,P-NC1L>>
+ <PUT ,P-ITBL ,P-NC1L <REST ,P-LEXV 6>>)>
+ <COND (<ZERO? ,P-NCN> <SETG P-NCN 1>)>)
+ (T
+ <PUT ,P-OTBL ,P-NC1 <GET ,P-ITBL ,P-NC1>>)>
+ <PUT ,P-OTBL ,P-NC1L <GET ,P-ITBL ,P-NC1L>>)
+ (T <RFALSE>)>)
+ (<EQUAL? <GET ,P-OTBL ,P-NC2> 1>
+ <COND (<OR <EQUAL? <SET TEMP <GET ,P-ITBL ,P-PREP1>>
+ <GET ,P-OTBL ,P-PREP2>>
+ <ZERO? .TEMP>>
+ <COND (.ADJ
+ <PUT ,P-ITBL ,P-NC1 <REST ,P-LEXV 2>>
+ <COND (<ZERO? <GET ,P-ITBL ,P-NC1L>>
+ <PUT ,P-ITBL ,P-NC1L <REST ,P-LEXV 6>>)>)>
+ <PUT ,P-OTBL ,P-NC2 <GET ,P-ITBL ,P-NC1>>
+ <PUT ,P-OTBL ,P-NC2L <GET ,P-ITBL ,P-NC1L>>
+ <SETG P-NCN 2>)
+ (T <RFALSE>)>)
+ (<NOT <ZERO? ,P-ACLAUSE>>
+ <COND (<AND <NOT <EQUAL? ,P-NCN 1>> <NOT .ADJ>>
+ <SETG P-ACLAUSE <>>
+ <RFALSE>)
+ (T
+ <SET BEG <GET ,P-ITBL ,P-NC1>>
+ <COND (.ADJ <SET BEG <REST ,P-LEXV 2>> <SET ADJ <>>)>
+ <SET END <GET ,P-ITBL ,P-NC1L>>
+ <REPEAT ()
+ <SET WRD <GET .BEG 0>>
+ <COND (<EQUAL? .BEG .END>
+ <COND (.ADJ <ACLAUSE-WIN .ADJ> <RETURN>)
+ (T <SETG P-ACLAUSE <>> <RFALSE>)>)
+ (<AND <NOT .ADJ>
+ <OR <BTST <GETB .WRD ,P-PSOFF>
+ ,PS?ADJECTIVE>
+ <EQUAL? .WRD ,W?ALL ,W?ONE>>>
+ <SET ADJ .WRD>)
+ (<EQUAL? .WRD ,W?ONE>
+ <ACLAUSE-WIN .ADJ>
+ <RETURN>)
+ (<BTST <GETB .WRD ,P-PSOFF> ,PS?OBJECT>
+ <COND (<EQUAL? .WRD ,P-ANAM>
+ <ACLAUSE-WIN .ADJ>)
+ (T
+ <NCLAUSE-WIN>)>
+ <RETURN>)>
+ <SET BEG <REST .BEG ,P-WORDLEN>>
+ <COND (<EQUAL? .END 0>
+ <SET END .BEG>
+ <SETG P-NCN 1>
+ <PUT ,P-ITBL ,P-NC1 <BACK .BEG 4>>
+ <PUT ,P-ITBL ,P-NC1L .BEG>)>>)>)>
+ <PUT ,P-VTBL 0 <GET ,P-OVTBL 0>>
+ <PUTB ,P-VTBL 2 <GETB ,P-OVTBL 2>>
+ <PUTB ,P-VTBL 3 <GETB ,P-OVTBL 3>>
+ <PUT ,P-OTBL ,P-VERBN ,P-VTBL>
+ <PUTB ,P-VTBL 2 0>
+ <REPEAT ()
+ <COND (<G? <SET CNT <+ .CNT 1>> ,P-ITBLLEN>
+ <SETG P-MERGED T>
+ <RTRUE>)
+ (T <PUT ,P-ITBL .CNT <GET ,P-OTBL .CNT>>)>>
+ T>
+
+;"New ACLAUSE-WIN for TRAP retrofix 6/21/84"
+
+<ROUTINE ACLAUSE-WIN (ADJ)
+ <PUT ,P-ITBL ,P-VERB <GET ,P-OTBL ,P-VERB>>
+ <PUT ,P-CCTBL ,CC-SBPTR ,P-ACLAUSE>
+ <PUT ,P-CCTBL ,CC-SEPTR <+ ,P-ACLAUSE 1>>
+ <PUT ,P-CCTBL ,CC-DBPTR ,P-ACLAUSE>
+ <PUT ,P-CCTBL ,CC-DEPTR <+ ,P-ACLAUSE 1>>
+ <CLAUSE-COPY ,P-OTBL ,P-OTBL .ADJ>
+ <AND <NOT <EQUAL? <GET ,P-OTBL ,P-NC2> 0>> <SETG P-NCN 2>>
+ <SETG P-ACLAUSE <>>
+ <RTRUE>>
+
+<ROUTINE NCLAUSE-WIN ()
+ <PUT ,P-CCTBL ,CC-SBPTR ,P-NC1>
+ <PUT ,P-CCTBL ,CC-SEPTR ,P-NC1L>
+ <PUT ,P-CCTBL ,CC-DBPTR ,P-ACLAUSE>
+ <PUT ,P-CCTBL ,CC-DEPTR <+ ,P-ACLAUSE 1>>
+ <CLAUSE-COPY ,P-ITBL ,P-OTBL>
+ <AND <NOT <EQUAL? <GET ,P-OTBL ,P-NC2> 0>> <SETG P-NCN 2>>
+ <SETG P-ACLAUSE <>>
+ <RTRUE>>
+
+;"Print undefined word in input.
+ PTR points to the unknown word in P-LEXV"
+
+<ROUTINE WORD-PRINT (CNT BUF)
+ <REPEAT ()
+ <COND (<DLESS? CNT 0> <RETURN>)
+ (ELSE
+ <PRINTC <GETB ,P-INBUF .BUF>>
+ <SET BUF <+ .BUF 1>>)>>>
+
+<ROUTINE UNKNOWN-WORD (PTR "AUX" BUF)
+ <PUT ,OOPS-TABLE ,O-PTR .PTR>
+ <COND (<VERB? SAY>
+ <TELL "Nothing happens." CR>
+ <RFALSE>)>
+ <TELL "I don't know the word \"">
+ <WORD-PRINT <GETB <REST ,P-LEXV <SET BUF <* .PTR 2>>> 2>
+ <GETB <REST ,P-LEXV .BUF> 3>>
+ <TELL "\"." CR>
+ <SETG QUOTE-FLAG <>>
+ <SETG P-OFLAG <>>>
+
+<ROUTINE CANT-USE (PTR "AUX" BUF)
+ <COND (<VERB? SAY>
+ <TELL "Nothing happens." CR>
+ <RFALSE>)>
+ <TELL "You used the word \"">
+ <WORD-PRINT <GETB <REST ,P-LEXV <SET BUF <* .PTR 2>>> 2>
+ <GETB <REST ,P-LEXV .BUF> 3>>
+ <TELL "\" in a way that I don't understand." CR>
+ <SETG QUOTE-FLAG <>>
+ <SETG P-OFLAG <>>>
+
+;" Perform syntax matching operations, using P-ITBL as the source of
+ the verb and adjectives for this input. Returns false if no
+ syntax matches, and does it's own orphaning. If return is true,
+ the syntax is saved in P-SYNTAX."
+
+<GLOBAL P-SLOCBITS 0>
+
+<CONSTANT P-SYNLEN 8>
+
+;<CONSTANT P-SBITS 0>
+;<CONSTANT P-SPREP1 1>
+;<CONSTANT P-SPREP2 2>
+;<CONSTANT P-SFWIM1 3>
+;<CONSTANT P-SFWIM2 4>
+;<CONSTANT P-SLOC1 5>
+;<CONSTANT P-SLOC2 6>
+;<CONSTANT P-SACTION 7>
+;<CONSTANT P-SONUMS 3>
+
+; "Constants for compact syntax tables. TAA 11/7/87"
+; "See also P-SONUMS macro in MISC."
+<CONSTANT P-SPREP1 0>
+<CONSTANT P-SACTION 1>
+<CONSTANT P-SFWIM1 2>
+<CONSTANT P-SLOC1 3>
+<CONSTANT P-SPREP2 4>
+<CONSTANT P-SFWIM2 5>
+<CONSTANT P-SLOC2 6>
+; "Syntax lengths, for 0, 1, & 2 objects"
+<CONSTANT P-SYNLEN-0 2>
+<CONSTANT P-SYNLEN-1 4>
+<CONSTANT P-SYNLEN-2 7>
+<ROUTINE GET-PREP (SYN WHICH "AUX" PREP)
+ <COND (<==? .WHICH 1>
+ <SET PREP <GETB .SYN ,P-SPREP1>>)
+ (T
+ <SET PREP <GETB .SYN ,P-SPREP2>>)>
+ <COND (<0? <SET PREP <ANDB .PREP *77*>>> <>)
+ (T
+ <+ .PREP 192>)>>
+
+<ROUTINE SYNTAX-CHECK ("AUX" SYN LEN NUM OBJ
+ (DRIVE1 <>) (DRIVE2 <>) PREP VERB TMP)
+ <COND (<ZERO? <SET VERB <GET ,P-ITBL ,P-VERB>>>
+ <TELL "There was no verb in that sentence!" CR>
+ <RFALSE>)>
+ <SET SYN <GET ,VERBS <- 255 .VERB>>>
+ <SET LEN <GETB .SYN 0>>
+ <SET SYN <REST .SYN>>
+ <REPEAT ()
+ <SET NUM <P-SONUMS .SYN>> ;"TAA"
+ ;<SET NUM <BAND <GETB .SYN ,P-SBITS> ,P-SONUMS>>
+ <COND (<G? ,P-NCN .NUM> T)
+ (<AND <G=? .NUM 1>
+ <ZERO? ,P-NCN>
+ <OR <ZERO? <SET PREP <GET ,P-ITBL ,P-PREP1>>>
+ <EQUAL? .PREP <GET-PREP .SYN 1> ;"TAA"
+ ;<GETB .SYN ,P-SPREP1>>>>
+ <SET DRIVE1 .SYN>)
+ (<EQUAL? <GET-PREP .SYN 1> ;"TAA"
+ ;<GETB .SYN ,P-SPREP1> <GET ,P-ITBL ,P-PREP1>>
+ <COND (<AND <EQUAL? .NUM 2> <EQUAL? ,P-NCN 1>>
+ <SET DRIVE2 .SYN>)
+ (<OR <L=? .NUM 1> ;"TAA"
+ <EQUAL? <GET-PREP .SYN 2>
+ ;<GETB .SYN ,P-SPREP2>
+ <GET ,P-ITBL ,P-PREP2>>>
+ <SYNTAX-FOUND .SYN>
+ <RTRUE>)>)>
+ <COND (<DLESS? LEN 1>
+ <COND (<OR .DRIVE1 .DRIVE2> <RETURN>)
+ (T
+ <TELL
+"That sentence isn't one I recognize." CR>
+ <RFALSE>)>)
+ (T
+ <COND (<0? .NUM> ;"TAA"
+ <SET SYN <REST .SYN ,P-SYNLEN-0>>)
+ (<1? .NUM>
+ <SET SYN <REST .SYN ,P-SYNLEN-1>>)
+ (T
+ <SET SYN <REST .SYN ,P-SYNLEN-2>>)>
+ ;<SET SYN <REST .SYN ,P-SYNLEN>>)>>
+ <COND (<AND .DRIVE1
+ <SET OBJ
+ <GWIM <GETB .DRIVE1 ,P-SFWIM1>
+ <GETB .DRIVE1 ,P-SLOC1>
+ <GET-PREP .DRIVE1 1> ;"TAA"
+ ;<GETB .DRIVE1 ,P-SPREP1>>>>
+ <PUT ,P-PRSO ,P-MATCHLEN 1>
+ <PUT ,P-PRSO 1 .OBJ>
+ <SYNTAX-FOUND .DRIVE1>)
+ (<AND .DRIVE2
+ <SET OBJ
+ <GWIM <GETB .DRIVE2 ,P-SFWIM2>
+ <GETB .DRIVE2 ,P-SLOC2>
+ <GET-PREP .DRIVE2 2>
+ ;<GETB .DRIVE2 ,P-SPREP2>>>>
+ <PUT ,P-PRSI ,P-MATCHLEN 1>
+ <PUT ,P-PRSI 1 .OBJ>
+ <SYNTAX-FOUND .DRIVE2>)
+ (<EQUAL? .VERB ,ACT?FIND>
+ <TELL "That question can't be answered." CR>
+ <RFALSE>)
+ (<NOT <EQUAL? ,WINNER ,ADVENTURER>>
+ <CANT-ORPHAN>)
+ (T
+ <ORPHAN .DRIVE1 .DRIVE2>
+ <TELL "What do you want to ">
+ <SET TMP <GET ,P-OTBL ,P-VERBN>>
+ <COND (<EQUAL? .TMP 0> <TELL "tell">)
+ (<ZERO? <GETB ,P-VTBL 2>>
+ <PRINTB <GET .TMP 0>>)
+ (T
+ <WORD-PRINT <GETB .TMP 2> <GETB .TMP 3>>
+ <PUTB ,P-VTBL 2 0>)>
+ <COND (.DRIVE2
+ <TELL " ">
+ <THING-PRINT T T>)>
+ <SETG P-OFLAG T>
+ <PREP-PRINT <COND (.DRIVE1
+ <GET-PREP .DRIVE1 1> ;"TAA"
+ ;<GETB .DRIVE1 ,P-SPREP1>)
+ (T
+ <GET-PREP .DRIVE2 2> ;"TAA"
+ ;<GETB .DRIVE2 ,P-SPREP2>)>>
+ <TELL "?" CR>
+ <RFALSE>)>>
+
+<ROUTINE CANT-ORPHAN ()
+ <TELL "\"I don't understand! What are you referring to?\"" CR>
+ <RFALSE>>
+
+
+<ROUTINE ORPHAN (D1 D2 "AUX" (CNT -1))
+ <COND (<NOT ,P-MERGED>
+ <PUT ,P-OCLAUSE ,P-MATCHLEN 0>)>
+ <PUT ,P-OVTBL 0 <GET ,P-VTBL 0>>
+ <PUTB ,P-OVTBL 2 <GETB ,P-VTBL 2>>
+ <PUTB ,P-OVTBL 3 <GETB ,P-VTBL 3>>
+ <REPEAT ()
+ <COND (<IGRTR? CNT ,P-ITBLLEN> <RETURN>)
+ (T <PUT ,P-OTBL .CNT <GET ,P-ITBL .CNT>>)>>
+ <COND (<EQUAL? ,P-NCN 2>
+ <PUT ,P-CCTBL ,CC-SBPTR ,P-NC2>
+ <PUT ,P-CCTBL ,CC-SEPTR ,P-NC2L>
+ <PUT ,P-CCTBL ,CC-DBPTR ,P-NC2>
+ <PUT ,P-CCTBL ,CC-DEPTR ,P-NC2L>
+ <CLAUSE-COPY ,P-ITBL ,P-OTBL>)>
+ <COND (<NOT <L? ,P-NCN 1>>
+ <PUT ,P-CCTBL ,CC-SBPTR ,P-NC1>
+ <PUT ,P-CCTBL ,CC-SEPTR ,P-NC1L>
+ <PUT ,P-CCTBL ,CC-DBPTR ,P-NC1>
+ <PUT ,P-CCTBL ,CC-DEPTR ,P-NC1L>
+ <CLAUSE-COPY ,P-ITBL ,P-OTBL>)>
+ <COND (.D1
+ <PUT ,P-OTBL ,P-PREP1
+ <GET-PREP .D1 1> ;"TAA"
+ ;<GETB .D1 ,P-SPREP1>>
+ <PUT ,P-OTBL ,P-NC1 1>)
+ (.D2
+ <PUT ,P-OTBL ,P-PREP2
+ <GET-PREP .D2 2>
+ ;<GETB .D2 ,P-SPREP2>>
+ <PUT ,P-OTBL ,P-NC2 1>)>>
+
+;<ROUTINE CLAUSE-PRINT (BPTR EPTR "OPTIONAL" (THE? T))
+ <BUFFER-PRINT <GET ,P-ITBL .BPTR> <GET ,P-ITBL .EPTR> .THE?>>
+
+<ROUTINE THING-PRINT (PRSO? "OPTIONAL" (THE? <>) "AUX" BEG END)
+ <COND (.PRSO?
+ <SET BEG <GET ,P-ITBL ,P-NC1>>
+ <SET END <GET ,P-ITBL ,P-NC1L>>)
+ (ELSE
+ <SET BEG <GET ,P-ITBL ,P-NC2>>
+ <SET END <GET ,P-ITBL ,P-NC2L>>)>
+ <BUFFER-PRINT .BEG .END .THE?>>
+
+<ROUTINE BUFFER-PRINT (BEG END CP
+ "AUX" (NOSP T) WRD (FIRST?? T) (PN <>) (Q? <>))
+ <REPEAT ()
+ <COND (<EQUAL? .BEG .END> <RETURN>)
+ (T
+ <SET WRD <GET .BEG 0>>
+ <COND ;(<EQUAL? .WRD ,W?$BUZZ> T)
+ (<EQUAL? .WRD ,W?COMMA>
+ <TELL ", ">)
+ (.NOSP <SET NOSP <>>)
+ (ELSE <TELL " ">)>
+ <COND (<EQUAL? .WRD ,W?PERIOD ,W?COMMA>
+ <SET NOSP T>)
+ (<EQUAL? .WRD ,W?ME>
+ <PRINTD ,ME>
+ <SET PN T>)
+ (<EQUAL? .WRD ,W?INTNUM>
+ <PRINTN ,P-NUMBER>
+ <SET PN T>)
+ (T
+ <COND (<AND .FIRST?? <NOT .PN> .CP>
+ <TELL "the ">)>
+ <COND (<OR ,P-OFLAG ,P-MERGED> <PRINTB .WRD>)
+ (<AND <EQUAL? .WRD ,W?IT>
+ <ACCESSIBLE? ,P-IT-OBJECT>>
+ <PRINTD ,P-IT-OBJECT>)
+ (T
+ <WORD-PRINT <GETB .BEG 2>
+ <GETB .BEG 3>>)>
+ <SET FIRST?? <>>)>)>
+ <SET BEG <REST .BEG ,P-WORDLEN>>>>
+
+<ROUTINE PREP-PRINT (PREP "AUX" WRD)
+ <COND (<NOT <ZERO? .PREP>>
+ <TELL " ">
+ <COND ;(<EQUAL? .PREP ,PR?THROUGH>
+ <TELL "through">)
+ (T
+ <SET WRD <PREP-FIND .PREP>>
+ <PRINTB .WRD>)>)>>
+
+<ROUTINE CLAUSE-COPY (SRC DEST "OPTIONAL" (INSRT <>) "AUX" BEG END)
+ <SET BEG <GET .SRC <GET ,P-CCTBL ,CC-SBPTR>>>
+ <SET END <GET .SRC <GET ,P-CCTBL ,CC-SEPTR>>>
+ <PUT .DEST
+ <GET ,P-CCTBL ,CC-DBPTR>
+ <REST ,P-OCLAUSE
+ <+ <* <GET ,P-OCLAUSE ,P-MATCHLEN> ,P-LEXELEN> 2>>>
+ <REPEAT ()
+ <COND (<EQUAL? .BEG .END>
+ <PUT .DEST
+ <GET ,P-CCTBL ,CC-DEPTR>
+ <REST ,P-OCLAUSE
+ <+ <* <GET ,P-OCLAUSE ,P-MATCHLEN> ,P-LEXELEN>
+ 2>>>
+ <RETURN>)
+ (T
+ <COND (<AND .INSRT <EQUAL? ,P-ANAM <GET .BEG 0>>>
+ <CLAUSE-ADD .INSRT>)>
+ <CLAUSE-ADD <GET .BEG 0>>)>
+ <SET BEG <REST .BEG ,P-WORDLEN>>>>
+
+
+<ROUTINE CLAUSE-ADD (WRD "AUX" PTR)
+ <SET PTR <+ <GET ,P-OCLAUSE ,P-MATCHLEN> 2>>
+ <PUT ,P-OCLAUSE <- .PTR 1> .WRD>
+ <PUT ,P-OCLAUSE .PTR 0>
+ <PUT ,P-OCLAUSE ,P-MATCHLEN .PTR>>
+
+<ROUTINE PREP-FIND (PREP "AUX" (CNT 0) SIZE)
+ <SET SIZE <* <GET ,PREPOSITIONS 0> 2>>
+ <REPEAT ()
+ <COND (<IGRTR? CNT .SIZE> <RFALSE>)
+ (<EQUAL? <GET ,PREPOSITIONS .CNT> .PREP>
+ <RETURN <GET ,PREPOSITIONS <- .CNT 1>>>)>>>
+
+<ROUTINE SYNTAX-FOUND (SYN)
+ <SETG P-SYNTAX .SYN>
+ <SETG PRSA <GETB .SYN ,P-SACTION>>>
+
+<GLOBAL P-GWIMBIT 0>
+
+<ROUTINE GWIM (GBIT LBIT PREP "AUX" OBJ)
+ <COND (<EQUAL? .GBIT ,RLANDBIT>
+ <RETURN ,ROOMS>)>
+ <SETG P-GWIMBIT .GBIT>
+ <SETG P-SLOCBITS .LBIT>
+ <PUT ,P-MERGE ,P-MATCHLEN 0>
+ <COND (<GET-OBJECT ,P-MERGE <>>
+ <SETG P-GWIMBIT 0>
+ <COND (<EQUAL? <GET ,P-MERGE ,P-MATCHLEN> 1>
+ <SET OBJ <GET ,P-MERGE 1>>
+ <TELL "(">
+ <COND (<AND <NOT <ZERO? .PREP>>
+ <NOT ,P-END-ON-PREP>>
+ <PRINTB <SET PREP <PREP-FIND .PREP>>>
+ <COND (<EQUAL? .PREP ,W?OUT>
+ <TELL " of">)>
+ <TELL " ">
+ <COND (<EQUAL? .OBJ ,HANDS>
+ <TELL "your hands">)
+ (T
+ <TELL "the " D .OBJ>)>
+ <TELL ")" CR>)
+ (ELSE
+ <TELL D .OBJ ")" CR>)>
+ .OBJ)>)
+ (T <SETG P-GWIMBIT 0> <RFALSE>)>>
+
+<ROUTINE SNARF-OBJECTS ("AUX" OPTR IPTR L)
+ <PUT ,P-BUTS ,P-MATCHLEN 0>
+ <COND (<NOT <EQUAL? <SET IPTR <GET ,P-ITBL ,P-NC2>> 0>>
+ <SETG P-SLOCBITS <GETB ,P-SYNTAX ,P-SLOC2>>
+ <OR <SNARFEM .IPTR <GET ,P-ITBL ,P-NC2L> ,P-PRSI> <RFALSE>>)>
+ <COND (<NOT <EQUAL? <SET OPTR <GET ,P-ITBL ,P-NC1>> 0>>
+ <SETG P-SLOCBITS <GETB ,P-SYNTAX ,P-SLOC1>>
+ <OR <SNARFEM .OPTR <GET ,P-ITBL ,P-NC1L> ,P-PRSO> <RFALSE>>)>
+ <COND (<NOT <ZERO? <GET ,P-BUTS ,P-MATCHLEN>>>
+ <SET L <GET ,P-PRSO ,P-MATCHLEN>>
+ <COND (.OPTR <SETG P-PRSO <BUT-MERGE ,P-PRSO>>)>
+ <COND (<AND .IPTR
+ <OR <NOT .OPTR>
+ <EQUAL? .L <GET ,P-PRSO ,P-MATCHLEN>>>>
+ <SETG P-PRSI <BUT-MERGE ,P-PRSI>>)>)>
+ <RTRUE>>
+
+<ROUTINE BUT-MERGE (TBL "AUX" LEN BUTLEN (CNT 1) (MATCHES 0) OBJ NTBL)
+ <SET LEN <GET .TBL ,P-MATCHLEN>>
+ <PUT ,P-MERGE ,P-MATCHLEN 0>
+ <REPEAT ()
+ <COND (<DLESS? LEN 0> <RETURN>)
+ (<ZMEMQ <SET OBJ <GET .TBL .CNT>> ,P-BUTS>)
+ (T
+ <PUT ,P-MERGE <+ .MATCHES 1> .OBJ>
+ <SET MATCHES <+ .MATCHES 1>>)>
+ <SET CNT <+ .CNT 1>>>
+ <PUT ,P-MERGE ,P-MATCHLEN .MATCHES>
+ <SET NTBL ,P-MERGE>
+ <SETG P-MERGE .TBL>
+ .NTBL>
+
+<GLOBAL P-NAM <>>
+<GLOBAL P-ADJ <>>
+<GLOBAL P-ADVERB <>>
+<GLOBAL P-ADJN <>>
+<GLOBAL P-PRSO <ITABLE NONE 50>>
+<GLOBAL P-PRSI <ITABLE NONE 50>>
+<GLOBAL P-BUTS <ITABLE NONE 50>>
+<GLOBAL P-MERGE <ITABLE NONE 50>>
+<GLOBAL P-OCLAUSE <ITABLE NONE 100>>
+<GLOBAL P-MATCHLEN 0>
+<GLOBAL P-GETFLAGS 0>
+<CONSTANT P-ALL 1>
+<CONSTANT P-ONE 2>
+<CONSTANT P-INHIBIT 4>
+
+
+<GLOBAL P-AND <>>
+
+<ROUTINE SNARFEM (PTR EPTR TBL "AUX" (BUT <>) LEN WV WRD NW (WAS-ALL <>))
+ <SETG P-AND <>>
+ <COND (<EQUAL? ,P-GETFLAGS ,P-ALL>
+ <SET WAS-ALL T>)>
+ <SETG P-GETFLAGS 0>
+ <PUT .TBL ,P-MATCHLEN 0>
+ <SET WRD <GET .PTR 0>>
+ <REPEAT ()
+ <COND (<EQUAL? .PTR .EPTR>
+ <SET WV <GET-OBJECT <OR .BUT .TBL>>>
+ <COND (.WAS-ALL <SETG P-GETFLAGS ,P-ALL>)>
+ <RETURN .WV>)
+ (T
+ <COND (<==? .EPTR <REST .PTR ,P-WORDLEN>>
+ <SET NW 0>)
+ (T <SET NW <GET .PTR ,P-LEXELEN>>)>
+ <COND (<EQUAL? .WRD ,W?ALL ;,W?BOTH>
+ <SETG P-GETFLAGS ,P-ALL>
+ <COND (<EQUAL? .NW ,W?OF>
+ <SET PTR <REST .PTR ,P-WORDLEN>>)>)
+ (<EQUAL? .WRD ,W?BUT ,W?EXCEPT>
+ <OR <GET-OBJECT <OR .BUT .TBL>> <RFALSE>>
+ <SET BUT ,P-BUTS>
+ <PUT .BUT ,P-MATCHLEN 0>)
+ (<EQUAL? .WRD ,W?A ,W?ONE>
+ <COND (<NOT ,P-ADJ>
+ <SETG P-GETFLAGS ,P-ONE>
+ <COND (<EQUAL? .NW ,W?OF>
+ <SET PTR <REST .PTR ,P-WORDLEN>>)>)
+ (T
+ <SETG P-NAM ,P-ONEOBJ>
+ <OR <GET-OBJECT <OR .BUT .TBL>> <RFALSE>>
+ <AND <ZERO? .NW> <RTRUE>>)>)
+ (<AND <EQUAL? .WRD ,W?AND ,W?COMMA>
+ <NOT <EQUAL? .NW ,W?AND ,W?COMMA>>>
+ <SETG P-AND T>
+ <OR <GET-OBJECT <OR .BUT .TBL>> <RFALSE>>
+ T)
+ (<WT? .WRD ,PS?BUZZ-WORD>)
+ (<EQUAL? .WRD ,W?AND ,W?COMMA>)
+ (<EQUAL? .WRD ,W?OF>
+ <COND (<ZERO? ,P-GETFLAGS>
+ <SETG P-GETFLAGS ,P-INHIBIT>)>)
+ (<AND <SET WV <WT? .WRD ,PS?ADJECTIVE ,P1?ADJECTIVE>>
+ <NOT ,P-ADJ>>
+ <SETG P-ADJ .WV>
+ <SETG P-ADJN .WRD>)
+ (<WT? .WRD ,PS?OBJECT ,P1?OBJECT>
+ <SETG P-NAM .WRD>
+ <SETG P-ONEOBJ .WRD>)>)>
+ <COND (<NOT <EQUAL? .PTR .EPTR>>
+ <SET PTR <REST .PTR ,P-WORDLEN>>
+ <SET WRD .NW>)>>>
+
+<CONSTANT SH 128>
+<CONSTANT SC 64>
+<CONSTANT SIR 32>
+<CONSTANT SOG 16>
+<CONSTANT STAKE 8>
+<CONSTANT SMANY 4>
+<CONSTANT SHAVE 2>
+
+<ROUTINE GET-OBJECT (TBL
+ "OPTIONAL" (VRB T)
+ "AUX" BITS LEN XBITS TLEN (GCHECK <>) (OLEN 0) OBJ)
+ <SET XBITS ,P-SLOCBITS>
+ <SET TLEN <GET .TBL ,P-MATCHLEN>>
+ <COND (<BTST ,P-GETFLAGS ,P-INHIBIT> <RTRUE>)>
+ <COND (<AND <NOT ,P-NAM> ,P-ADJ>
+ <COND (<WT? ,P-ADJN ,PS?OBJECT ,P1?OBJECT>
+ <SETG P-NAM ,P-ADJN>
+ <SETG P-ADJ <>>)>)>
+ <COND (<AND <NOT ,P-NAM>
+ <NOT ,P-ADJ>
+ <NOT <EQUAL? ,P-GETFLAGS ,P-ALL>>
+ <ZERO? ,P-GWIMBIT>>
+ <COND (.VRB
+ <TELL
+"There seems to be a noun missing in that sentence!" CR>)>
+ <RFALSE>)>
+ <COND (<OR <NOT <EQUAL? ,P-GETFLAGS ,P-ALL>> <ZERO? ,P-SLOCBITS>>
+ <SETG P-SLOCBITS -1>)>
+ <SETG P-TABLE .TBL>
+ <PROG ()
+ <COND (.GCHECK <GLOBAL-CHECK .TBL>)
+ (T
+ <COND (,LIT
+ <FCLEAR ,ADVENTURER ,TRANSBIT>
+ <DO-SL ,HERE ,SOG ,SIR>
+ <FSET ,ADVENTURER ,TRANSBIT>)>
+ <DO-SL ,ADVENTURER ,SH ,SC>)>
+ <SET LEN <- <GET .TBL ,P-MATCHLEN> .TLEN>>
+ <COND (<BTST ,P-GETFLAGS ,P-ALL>)
+ (<AND <BTST ,P-GETFLAGS ,P-ONE>
+ <NOT <ZERO? .LEN>>>
+ <COND (<NOT <EQUAL? .LEN 1>>
+ <PUT .TBL 1 <GET .TBL <RANDOM .LEN>>>
+ <TELL "(How about the ">
+ <PRINTD <GET .TBL 1>>
+ <TELL "?)" CR>)>
+ <PUT .TBL ,P-MATCHLEN 1>)
+ (<OR <G? .LEN 1>
+ <AND <ZERO? .LEN> <NOT <EQUAL? ,P-SLOCBITS -1>>>>
+ <COND (<EQUAL? ,P-SLOCBITS -1>
+ <SETG P-SLOCBITS .XBITS>
+ <SET OLEN .LEN>
+ <PUT .TBL
+ ,P-MATCHLEN
+ <- <GET .TBL ,P-MATCHLEN> .LEN>>
+ <AGAIN>)
+ (T
+ <COND (<ZERO? .LEN> <SET LEN .OLEN>)>
+ <COND (<NOT <EQUAL? ,WINNER ,ADVENTURER>>
+ <CANT-ORPHAN>
+ <RFALSE>)
+ (<AND .VRB ,P-NAM>
+ <WHICH-PRINT .TLEN .LEN .TBL>
+ <SETG P-ACLAUSE
+ <COND (<EQUAL? .TBL ,P-PRSO> ,P-NC1)
+ (T ,P-NC2)>>
+ <SETG P-AADJ ,P-ADJ>
+ <SETG P-ANAM ,P-NAM>
+ <ORPHAN <> <>>
+ <SETG P-OFLAG T>)
+ (.VRB
+ <TELL
+"There seems to be a noun missing in that sentence!" CR>)>
+ <SETG P-NAM <>>
+ <SETG P-ADJ <>>
+ <RFALSE>)>)>
+ <COND (<AND <ZERO? .LEN> .GCHECK>
+ <COND (.VRB
+ ;"next added 1/2/85 by JW"
+ <SETG P-SLOCBITS .XBITS>
+ <COND (<OR ,LIT <VERB? TELL ;WHERE ;WHAT ;WHO>>
+ ;"Changed 6/10/83 - MARC"
+ <OBJ-FOUND ,NOT-HERE-OBJECT .TBL>
+ <SETG P-XNAM ,P-NAM>
+ <SETG P-XADJ ,P-ADJ>
+ <SETG P-XADJN ,P-ADJN>
+ <SETG P-NAM <>>
+ <SETG P-ADJ <>>
+ <SETG P-ADJN <>>
+ <RTRUE>)
+ (T
+ <TELL ,TOO-DARK CR>)>)>
+ <SETG P-NAM <>>
+ <SETG P-ADJ <>>
+ <RFALSE>)
+ (<ZERO? .LEN> <SET GCHECK T> <AGAIN>)>
+ <SETG P-SLOCBITS .XBITS>
+ <SETG P-NAM <>>
+ <SETG P-ADJ <>>
+ <RTRUE>>>
+
+;<ROUTINE MOBY-FIND (TBL "AUX" FOO LEN)
+ <SETG P-SLOCBITS -1>
+ <SETG P-NAM ,P-XNAM>
+ <SETG P-ADJ ,P-XADJ>
+ <PUT .TBL ,P-MATCHLEN 0>
+ <SET FOO <FIRST? ,ROOMS>>
+ <REPEAT ()
+ <COND (<NOT .FOO> <RETURN>)
+ (T
+ <SEARCH-LIST .FOO .TBL ,P-SRCALL>
+ <SET FOO <NEXT? .FOO>>)>>
+ <COND (<EQUAL? <SET LEN <GET .TBL ,P-MATCHLEN>> 0>
+ <DO-SL ,LOCAL-GLOBALS 1 1>)>
+ <COND (<EQUAL? <SET LEN <GET .TBL ,P-MATCHLEN>> 0>
+ <DO-SL ,ROOMS 1 1>)>
+ <COND (<EQUAL? <SET LEN <GET .TBL ,P-MATCHLEN>> 1>
+ <SETG P-MOBY-FOUND <GET .TBL 1>>)>
+ <SETG P-NAM <>>
+ <SETG P-ADJ <>>
+ .LEN>
+
+;<GLOBAL P-MOBY-FOUND <>>
+<GLOBAL P-XNAM <>>
+<GLOBAL P-XADJ <>>
+<GLOBAL P-XADJN <>>
+
+<ROUTINE WHICH-PRINT (TLEN LEN TBL "AUX" OBJ RLEN)
+ <SET RLEN .LEN>
+ <TELL "Which ">
+ <COND (<OR ,P-OFLAG ,P-MERGED ,P-AND>
+ <PRINTB <COND (,P-NAM ,P-NAM)
+ (,P-ADJ ,P-ADJN)
+ (ELSE ,W?ONE)>>)
+ (ELSE
+ <THING-PRINT <EQUAL? .TBL ,P-PRSO>>)>
+ <TELL " do you mean, ">
+ <REPEAT ()
+ <SET TLEN <+ .TLEN 1>>
+ <SET OBJ <GET .TBL .TLEN>>
+ <TELL "the " D .OBJ>
+ <COND (<EQUAL? .LEN 2>
+ <COND (<NOT <EQUAL? .RLEN 2>> <TELL ",">)>
+ <TELL " or ">)
+ (<G? .LEN 2> <TELL ", ">)>
+ <COND (<L? <SET LEN <- .LEN 1>> 1>
+ <TELL "?" CR>
+ <RETURN>)>>>
+
+
+<ROUTINE GLOBAL-CHECK (TBL "AUX" LEN RMG RMGL (CNT 0) OBJ OBITS FOO)
+ <SET LEN <GET .TBL ,P-MATCHLEN>>
+ <SET OBITS ,P-SLOCBITS>
+ <COND (<SET RMG <GETPT ,HERE ,P?GLOBAL>>
+ <SET RMGL <- <PTSIZE .RMG> 1>>
+ <REPEAT ()
+ <COND (<THIS-IT? <SET OBJ <GETB .RMG .CNT>> .TBL>
+ <OBJ-FOUND .OBJ .TBL>)>
+ <COND (<IGRTR? CNT .RMGL> <RETURN>)>>)>
+ <COND (<SET RMG <GETPT ,HERE ,P?PSEUDO>>
+ <SET RMGL <- </ <PTSIZE .RMG> 4> 1>>
+ <SET CNT 0>
+ <REPEAT ()
+ <COND (<EQUAL? ,P-NAM <GET .RMG <* .CNT 2>>>
+ <PUTP ,PSEUDO-OBJECT
+ ,P?ACTION
+ <GET .RMG <+ <* .CNT 2> 1>>>
+ <SET FOO
+ <BACK <GETPT ,PSEUDO-OBJECT ,P?ACTION> 5>>
+ <PUT .FOO 0 <GET ,P-NAM 0>>
+ <PUT .FOO 1 <GET ,P-NAM 1>>
+ <OBJ-FOUND ,PSEUDO-OBJECT .TBL>
+ <RETURN>)
+ (<IGRTR? CNT .RMGL> <RETURN>)>>)>
+ <COND (<EQUAL? <GET .TBL ,P-MATCHLEN> .LEN>
+ <SETG P-SLOCBITS -1>
+ <SETG P-TABLE .TBL>
+ <DO-SL ,GLOBAL-OBJECTS 1 1>
+ <SETG P-SLOCBITS .OBITS>
+ <COND (<AND <ZERO? <GET .TBL ,P-MATCHLEN>>
+ <EQUAL? ,PRSA ,V?LOOK-INSIDE ,V?SEARCH ,V?EXAMINE>>
+ <DO-SL ,ROOMS 1 1>)>)>>
+
+<ROUTINE DO-SL (OBJ BIT1 BIT2 "AUX" BTS)
+ <COND (<BTST ,P-SLOCBITS <+ .BIT1 .BIT2>>
+ <SEARCH-LIST .OBJ ,P-TABLE ,P-SRCALL>)
+ (T
+ <COND (<BTST ,P-SLOCBITS .BIT1>
+ <SEARCH-LIST .OBJ ,P-TABLE ,P-SRCTOP>)
+ (<BTST ,P-SLOCBITS .BIT2>
+ <SEARCH-LIST .OBJ ,P-TABLE ,P-SRCBOT>)
+ (T <RTRUE>)>)>>
+
+<CONSTANT P-SRCBOT 2>
+<CONSTANT P-SRCTOP 0>
+<CONSTANT P-SRCALL 1>
+
+<ROUTINE SEARCH-LIST (OBJ TBL LVL "AUX" FLS NOBJ)
+ <COND (<SET OBJ <FIRST? .OBJ>>
+ <REPEAT ()
+ <COND (<AND <NOT <EQUAL? .LVL ,P-SRCBOT>>
+ <GETPT .OBJ ,P?SYNONYM>
+ <THIS-IT? .OBJ .TBL>>
+ <OBJ-FOUND .OBJ .TBL>)>
+ <COND (<AND <OR <NOT <EQUAL? .LVL ,P-SRCTOP>>
+ <FSET? .OBJ ,SEARCHBIT>
+ <FSET? .OBJ ,SURFACEBIT>>
+ <SET NOBJ <FIRST? .OBJ>>
+ <OR <FSET? .OBJ ,OPENBIT>
+ <FSET? .OBJ ,TRANSBIT>>>
+ <SET FLS
+ <SEARCH-LIST .OBJ
+ .TBL
+ <COND (<FSET? .OBJ ,SURFACEBIT>
+ ,P-SRCALL)
+ (<FSET? .OBJ ,SEARCHBIT>
+ ,P-SRCALL)
+ (T ,P-SRCTOP)>>>)>
+ <COND (<SET OBJ <NEXT? .OBJ>>) (T <RETURN>)>>)>>
+
+<ROUTINE OBJ-FOUND (OBJ TBL "AUX" PTR)
+ <SET PTR <GET .TBL ,P-MATCHLEN>>
+ <PUT .TBL <+ .PTR 1> .OBJ>
+ <PUT .TBL ,P-MATCHLEN <+ .PTR 1>>>
+
+<ROUTINE TAKE-CHECK ("AUX" N)
+ <COND (<G? <SET N <P-SONUMS ,P-SYNTAX>> 0> ;"TAA"
+ <COND (<ITAKE-CHECK ,P-PRSO <GETB ,P-SYNTAX ,P-SLOC1>>
+ <COND (<G? .N 1>
+ <ITAKE-CHECK ,P-PRSI <GETB ,P-SYNTAX ,P-SLOC2>>)
+ (T
+ <RTRUE>)>)>)
+ (T
+ <RTRUE>)>>
+
+<ROUTINE ITAKE-CHECK (TBL IBITS "AUX" PTR OBJ TAKEN)
+ <COND (<AND <SET PTR <GET .TBL ,P-MATCHLEN>>
+ <OR <BTST .IBITS ,SHAVE>
+ <BTST .IBITS ,STAKE>>>
+ <REPEAT ()
+ <COND (<L? <SET PTR <- .PTR 1>> 0> <RETURN>)
+ (T
+ <SET OBJ <GET .TBL <+ .PTR 1>>>
+ <COND (<EQUAL? .OBJ ,IT>
+ <COND (<NOT <ACCESSIBLE? ,P-IT-OBJECT>>
+ <TELL ,REFERRING>
+ <RFALSE>)
+ (T
+ <SET OBJ ,P-IT-OBJECT>)>)>
+ <COND (<AND <NOT <HELD? .OBJ>>
+ <NOT <EQUAL? .OBJ ,HANDS ,ME>>>
+ <SETG PRSO .OBJ>
+ <COND (<FSET? .OBJ ,TRYTAKEBIT>
+ <SET TAKEN T>)
+ (<NOT <EQUAL? ,WINNER ,ADVENTURER>>
+ <SET TAKEN <>>)
+ (<AND <BTST .IBITS ,STAKE>
+ <EQUAL? <ITAKE <>> T>>
+ <SET TAKEN <>>)
+ (T <SET TAKEN T>)>
+ <COND (<AND .TAKEN
+ <BTST .IBITS ,SHAVE>
+ <EQUAL? ,WINNER
+ ,ADVENTURER>>
+ <COND (<EQUAL? .OBJ
+ ,NOT-HERE-OBJECT>
+ <TELL
+"You don't have that!" CR>
+ <RFALSE>)>
+ <TELL "You don't have the ">
+ <PRINTD .OBJ>
+ <TELL ,PERIOD-CR>
+ <RFALSE>)
+ (<AND <NOT .TAKEN>
+ <EQUAL? ,WINNER ,ADVENTURER>>
+ <TELL "(Taken)" CR>)>)>)>>)
+ (T)>>
+
+<ROUTINE MANY-CHECK ("AUX" (LOSS <>) TMP)
+ <COND (<AND <G? <GET ,P-PRSO ,P-MATCHLEN> 1>
+ <NOT <BTST <GETB ,P-SYNTAX ,P-SLOC1> ,SMANY>>>
+ <SET LOSS 1>)
+ (<AND <G? <GET ,P-PRSI ,P-MATCHLEN> 1>
+ <NOT <BTST <GETB ,P-SYNTAX ,P-SLOC2> ,SMANY>>>
+ <SET LOSS 2>)>
+ <COND (.LOSS
+ <TELL "You can't use multiple ">
+ <COND (<EQUAL? .LOSS 2> <TELL "in">)>
+ <TELL "direct objects with \"">
+ <SET TMP <GET ,P-ITBL ,P-VERBN>>
+ <COND (<ZERO? .TMP> <TELL "tell">)
+ (<OR ,P-OFLAG ,P-MERGED>
+ <PRINTB <GET .TMP 0>>)
+ (T
+ <WORD-PRINT <GETB .TMP 2> <GETB .TMP 3>>)>
+ <TELL "\"." CR>
+ <RFALSE>)
+ (T)>>
+
+<ROUTINE ZMEMQ (ITM TBL "OPTIONAL" (SIZE -1) "AUX" (CNT 1))
+ <COND (<NOT .TBL> <RFALSE>)>
+ <COND (<NOT <L? .SIZE 0>> <SET CNT 0>)
+ (ELSE <SET SIZE <GET .TBL 0>>)>
+ <REPEAT ()
+ <COND (<EQUAL? .ITM <GET .TBL .CNT>>
+ <RETURN <REST .TBL <* .CNT 2>>>)
+ (<IGRTR? CNT .SIZE> <RFALSE>)>>>
+
+<ROUTINE ZMEMQB (ITM TBL SIZE "AUX" (CNT 0))
+ <REPEAT ()
+ <COND (<EQUAL? .ITM <GETB .TBL .CNT>>
+ <RTRUE>)
+ (<IGRTR? CNT .SIZE>
+ <RFALSE>)>>>
+
+<GLOBAL ALWAYS-LIT <>>
+
+<ROUTINE LIT? (RM "OPTIONAL" (RMBIT T) "AUX" OHERE (LIT <>))
+ <COND (<AND ,ALWAYS-LIT <EQUAL? ,WINNER ,ADVENTURER>>
+ <RTRUE>)>
+ <SETG P-GWIMBIT ,ONBIT>
+ <SET OHERE ,HERE>
+ <SETG HERE .RM>
+ <COND (<AND .RMBIT
+ <FSET? .RM ,ONBIT>>
+ <SET LIT T>)
+ (T
+ <PUT ,P-MERGE ,P-MATCHLEN 0>
+ <SETG P-TABLE ,P-MERGE>
+ <SETG P-SLOCBITS -1>
+ <COND (<EQUAL? .OHERE .RM>
+ <DO-SL ,WINNER 1 1>
+ <COND (<AND <NOT <EQUAL? ,WINNER ,ADVENTURER>>
+ <IN? ,ADVENTURER .RM>>
+ <DO-SL ,ADVENTURER 1 1>)>)>
+ <DO-SL .RM 1 1>
+ <COND (<G? <GET ,P-TABLE ,P-MATCHLEN> 0> <SET LIT T>)>)>
+ <SETG HERE .OHERE>
+ <SETG P-GWIMBIT 0>
+ .LIT>
+
+;<ROUTINE PRSO-PRINT ("AUX" PTR)
+ <COND (<OR ,P-MERGED
+ <EQUAL? <GET <SET PTR <GET ,P-ITBL ,P-NC1>> 0> ,W?IT>>
+ <TELL " " D ,PRSO>)
+ (T <BUFFER-PRINT .PTR <GET ,P-ITBL ,P-NC1L> <>>)>>
+
+;<ROUTINE PRSI-PRINT ("AUX" PTR)
+ <COND (<OR ,P-MERGED
+ <EQUAL? <GET <SET PTR <GET ,P-ITBL ,P-NC2>> 0> ,W?IT>>
+ <TELL " " D ,PRSO>)
+ (T <BUFFER-PRINT .PTR <GET ,P-ITBL ,P-NC2L> <>>)>>
+
+;"former CRUFTY routine, re-written by SWG"
+
+<ROUTINE THIS-IT? (OBJ TBL "AUX" SYNS)
+ <COND (<FSET? .OBJ ,INVISIBLE> <RFALSE>)
+ (<AND ,P-NAM
+ <NOT <ZMEMQ ,P-NAM
+ <SET SYNS <GETPT .OBJ ,P?SYNONYM>>
+ <- </ <PTSIZE .SYNS> 2> 1>>>>
+ <RFALSE>)
+ (<AND ,P-ADJ
+ <OR <NOT <SET SYNS <GETPT .OBJ ,P?ADJECTIVE>>>
+ <NOT <ZMEMQB ,P-ADJ .SYNS <- <PTSIZE .SYNS> 1>>>>>
+ <RFALSE>)
+ (<AND <NOT <ZERO? ,P-GWIMBIT>> <NOT <FSET? .OBJ ,P-GWIMBIT>>>
+ <RFALSE>)>
+ <RTRUE>>
+
+<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? ,LAST-PSEUDO-LOC ,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 <LOC ,WINNER>>>
+ <RFALSE>)
+ (<EQUAL? .L ,WINNER ,HERE <LOC ,WINNER>>
+ <RTRUE>)
+ (<AND <FSET? .L ,OPENBIT>
+ <ACCESSIBLE? .L>>
+ <RTRUE>)
+ (T
+ <RFALSE>)>>
+
+<ROUTINE META-LOC (OBJ)
+ <REPEAT ()
+ <COND (<NOT .OBJ>
+ <RFALSE>)
+ (<IN? .OBJ ,GLOBAL-OBJECTS>
+ <RETURN ,GLOBAL-OBJECTS>)>
+ <COND (<IN? .OBJ ,ROOMS>
+ <RETURN .OBJ>)
+ (T
+ <SET OBJ <LOC .OBJ>>)>>>
diff --git a/princess.zabstr b/princess.zabstr
new file mode 100644
index 0000000..80484f1
--- /dev/null
+++ b/princess.zabstr
@@ -0,0 +1,126 @@
+
+<ROOM FORMAL-GARDEN (IN ROOMS) (DESC "Formal Garden") (LDESC
+"A path of crushed white stone winds among bushes and flower beds of this
+garden from south to north. Almost hidden by the shrubbery is a small white
+gazebo.") (IN TO GAZEBO) (NORTH TO DARK-TUNNEL) (SOUTH TO TOPIARY) (FLAGS
+RLANDBIT) (GLOBAL GAZEBO-OBJECT) (ACTION FORMAL-GARDEN-F)>
+<DEFINE-ROUTINE FORMAL-GARDEN-F>
+<DEFINE-ROUTINE I-GARDEN>
+<OBJECT UNICORN (DESC "unicorn") (LDESC
+"A beautiful unicorn is munching grass here.") (SYNONYM UNICORN ANIMAL) (
+ADJECTIVE BEAUTIFUL WHITE) (FLAGS ACTORBIT TRYTAKEBIT OPENBIT CONTBIT) (ACTION
+UNICORN-F)>
+<GLOBAL UNICORN-FRIGHTENED <>>
+<DEFINE-ROUTINE UNICORN-F>
+<OBJECT GOLD-KEY (IN UNICORN) (DESC "delicate gold key") (SYNONYM KEY TREASURE)
+(ADJECTIVE DELICATE GOLD) (VALUE 15) (SIZE 3) (FLAGS NDESCBIT TAKEBIT
+TRYTAKEBIT TOOLBIT) (ACTION UNICORN-F)>
+<OBJECT RIBBON (IN UNICORN) (DESC "ribbon") (SYNONYM RIBBON) (ADJECTIVE VELVET
+SATIN) (FLAGS NDESCBIT) (ACTION UNICORN-F)>
+<ROOM GAZEBO (IN ROOMS) (DESC "Gazebo") (LDESC
+"This is a gazebo in the midst of a formal garden. It is cool and restful
+here. A tea table adorns the center of the gazebo.") (OUT TO FORMAL-GARDEN) (
+FLAGS RLANDBIT ONBIT) (GLOBAL GAZEBO-OBJECT)>
+<OBJECT GAZEBO-OBJECT (IN LOCAL-GLOBALS) (DESC "gazebo") (SYNONYM GAZEBO) (
+ADJECTIVE WOODEN) (FLAGS NDESCBIT) (ACTION GAZEBO-OBJECT-F)>
+<DEFINE-ROUTINE GAZEBO-OBJECT-F>
+<OBJECT GAZEBO-TABLE (IN GAZEBO) (DESC "table") (SYNONYM TABLE) (CAPACITY 100)
+(FLAGS NDESCBIT SURFACEBIT CONTBIT OPENBIT)>
+<OBJECT NEWSPAPER (IN GAZEBO-TABLE) (DESC "newspaper") (SYNONYM PAPER NEWSPAPER
+) (ADJECTIVE NEWS NEWSPAPER) (FLAGS TAKEBIT BURNBIT READBIT) (ACTION
+NEWSPAPER-F)>
+<DEFINE-ROUTINE NEWSPAPER-F>
+<OBJECT PLACE-MAT (IN GAZEBO-TABLE) (DESC "place mat") (SYNONYM MAT PLACEM) (
+ADJECTIVE PLACE) (SIZE 12) (CAPACITY 20) (FLAGS TAKEBIT SURFACEBIT CONTBIT
+OPENBIT) (ACTION PLACE-MAT-F)>
+<DEFINE-ROUTINE PLACE-MAT-F>
+<OBJECT TEAPOT (IN GAZEBO-TABLE) (DESC "china teapot") (SYNONYM TEAPOT POT) (
+ADJECTIVE CHINA TEA) (CAPACITY 4) (FLAGS TAKEBIT TRANSBIT CONTBIT OPENBIT) (
+ACTION TEAPOT-F)>
+<DEFINE-ROUTINE TEAPOT-F>
+<OBJECT LETTER-OPENER (IN GAZEBO-TABLE) (DESC "letter opener") (SYNONYM OPENER)
+(ADJECTIVE LETTER) (SIZE 2) (FLAGS TAKEBIT TOOLBIT)>
+<OBJECT MATCH (IN GAZEBO-TABLE) (DESC "matchbook") (LDESC
+"There is a matchbook saying \"Visit ZORK I\" here.") (SYNONYM MATCH MATCHES
+MATCHBOOK) (SIZE 2) (FLAGS READBIT TAKEBIT) (TEXT
+"\"Visit Exotic ZORK I! Consult the Frobozz Magic Travel Agency, or visit
+your local computer store for details.\"") (ACTION MATCH-F)>
+<GLOBAL MATCH-COUNT 6>
+<DEFINE-ROUTINE MATCH-F>
+<DEFINE-ROUTINE I-MATCH>
+<ROOM TOPIARY (IN ROOMS) (DESC "Topiary") (LDESC
+"This is the southern end of a garden, where fantastically shaped hedges are
+arrayed with geometric precision. Though recently untended, the bushes have
+clearly been shaped: There is a dragon, a unicorn, a great serpent, a huge
+misshapen dog, and several human figures. To the west is a tunnel.") (WEST TO
+CAROUSEL-ROOM) (NORTH TO FORMAL-GARDEN) (FLAGS RLANDBIT) (ACTION TOPIARY-F)>
+<DEFINE-ROUTINE TOPIARY-F>
+<GLOBAL TOPIARY-COUNTER 0>
+<DEFINE-ROUTINE I-TOPIARY>
+<OBJECT HEDGES (IN TOPIARY) (DESC "hedge") (SYNONYM HEDGE HEDGES) (FLAGS
+NDESCBIT) (ACTION HEDGES-F)>
+<DEFINE-ROUTINE HEDGES-F>
+<ROOM DRAGON-ROOM (IN ROOMS) (DESC "Dragon Room") (LDESC
+"The walls of this large cavern are scorched and a sooty dry smell is very
+strong here. A stone bridge leads the south, and a smokey tunnel opens to
+the north. To the east is a small opening.") (EAST TO LEDGE-IN-RAVINE) (NORTH
+TO DRAGON-LAIR IF ICE-MELTED ELSE "The dragon hisses and blocks your way.") (IN
+TO DRAGON-LAIR IF ICE-MELTED ELSE "The dragon hisses and blocks your way.") (
+SOUTH TO STONE-BRIDGE) (FLAGS RLANDBIT) (GLOBAL BRIDGE)>
+<OBJECT DRAGON (IN DRAGON-ROOM) (DESC "huge red dragon") (SYNONYM DRAGON) (
+ADJECTIVE RED HUGE) (LDESC "A huge red dragon is lying on the rocks, watching."
+) (FDESC "A huge red dragon is blocking the north exit. Smoke curls from his nostrils."
+) (FLAGS ACTORBIT) (ACTION DRAGON-F)>
+<DEFINE-ROUTINE DRAGON-F>
+<GLOBAL DRAGON-ATTACKS <LTABLE
+"Dragon hide is tough as steel, but you have annoyed him a bit. He looks
+as if deciding whether or not to eat you."
+"That captured his interest. He stares at you balefully."
+"The dragon is surprised and interested (for the moment)."
+"That did no damage, but he turns his smoky yellow eyes in your direction.">>
+<GLOBAL DRAGON-ANGER 0>
+<GLOBAL ICE-MELTED <>>
+<GLOBAL OLD-HERE DRAGON-ROOM>
+<DEFINE-ROUTINE DRAGON-LEAVES>
+<DEFINE-ROUTINE I-DRAGON>
+<ROOM DRAGON-LAIR (IN ROOMS) (DESC "Dragon's Lair") (LDESC
+"The rock walls are scarred by flame, and a blackened doorway leads south.") (
+SOUTH TO DRAGON-ROOM) (OUT TO DRAGON-ROOM) (FLAGS RLANDBIT)>
+<OBJECT CHEST (IN DRAGON-LAIR) (DESC "wooden chest") (FDESC
+"An old wooden chest sits in the corner.") (SYNONYM CHEST TRUNK) (ADJECTIVE
+WOODEN OLD) (FLAGS CONTBIT TAKEBIT) (CAPACITY 40) (SIZE 40) (ACTION CHEST-F)>
+<DEFINE-ROUTINE CHEST-F>
+<OBJECT STATUETTE (IN CHEST) (DESC "golden dragon statuette") (FDESC
+"Nestled in the chest is a gold statuette of a dragon.") (SYNONYM TREASURE
+STATUE DRAGON) (ADJECTIVE GOLD) (FLAGS TREASUREBIT TAKEBIT) (VALUE 20)>
+<OBJECT PRINCESS (IN DRAGON-LAIR) (DESC "beautiful princess") (FDESC
+"A beautiful princess sits on a rock in the corner. Her hair is unkempt
+and she appears to be in a trance.") (SYNONYM PRINCESS WOMAN LADY) (ADJECTIVE
+BEAUTIFUL YOUNG) (FLAGS ACTORBIT) (ACTION PRINCESS-F)>
+<GLOBAL PRINCESS-AWAKE <>>
+<DEFINE-ROUTINE PRINCESS-F>
+<DEFINE-ROUTINE I-PRINCESS>
+<GLOBAL PRCOUNT 0>
+<GLOBAL PRFOLLOW <>>
+<GLOBAL PRDIRS <TABLE "south" DRAGON-ROOM "north" P?SOUTH "east"
+LEDGE-IN-RAVINE "west" P?EAST "south" DEEP-FORD "north" P?SOUTH "east"
+DARK-TUNNEL "west" P?EAST "south" FORMAL-GARDEN "north" P?SOUTH "in" GAZEBO
+"out" P?IN>>
+<DEFINE-ROUTINE I-UNICORN>
+<ROOM STONE-BRIDGE (IN ROOMS) (DESC "Stone Bridge") (LDESC
+"You are on a north-south bridge spanning a deep ravine. Water flows
+far beneath.") (NORTH TO DRAGON-ROOM) (SOUTH TO COOL-ROOM) (DOWN
+"It's a long way down.") (FLAGS RLANDBIT) (GLOBAL BRIDGE CHASM)>
+<ROOM COOL-ROOM (IN ROOMS) (DESC "Cool Room") (LDESC
+"The air is cool and damp. A path from the southeast splits here; north toward
+a stone bridge, and west into a narrow tunnel. It is from the latter that the
+chill originates.") (SE TO CAROUSEL-ROOM) (NORTH TO STONE-BRIDGE) (WEST TO
+ICE-ROOM) (FLAGS RLANDBIT) (GLOBAL BRIDGE)>
+<ROOM ICE-ROOM (IN ROOMS) (DESC "Ice Room") (EAST TO COOL-ROOM) (WEST TO
+VOLCANO-BOTTOM IF ICE-MELTED ELSE "You don't even have an ice-pick.") (SOUTH TO
+GUARDED-ROOM) (FLAGS RLANDBIT) (ACTION ICE-ROOM-F)>
+<DEFINE-ROUTINE ICE-ROOM-F>
+<OBJECT ICE (IN ICE-ROOM) (DESC "glacier") (LDESC
+"A mass of ice fills the western half of the room.") (SYNONYM ICE MASS GLACIER)
+(ADJECTIVE COLD ICY) (ACTION ICE-F)>
+<DEFINE-ROUTINE ICE-F> \ No newline at end of file
diff --git a/princess.zap b/princess.zap
new file mode 100644
index 0000000..1abb358
--- /dev/null
+++ b/princess.zap
@@ -0,0 +1,460 @@
+
+
+ .FUNCT FORMAL-GARDEN-F,RARG
+ EQUAL? RARG,M-ENTER \FALSE
+ CALL QUEUE,I-GARDEN,-1
+ PUT STACK,0,1
+ RTRUE
+
+
+ .FUNCT I-GARDEN
+ EQUAL? HERE,FORMAL-GARDEN \?CCL3
+ IN? UNICORN,FORMAL-GARDEN \?CCL6
+ RANDOM 100
+ GRTR? 33,STACK \?CCL6
+ REMOVE UNICORN
+ PRINTR "The unicorn bounds lightly away."
+?CCL6: IN? PRINCESS,DRAGON-LAIR \FALSE
+ IN? UNICORN,FORMAL-GARDEN /FALSE
+ RANDOM 100
+ GRTR? 25,STACK \FALSE
+ ZERO? UNICORN-FRIGHTENED /?CND16
+ SET 'UNICORN-FRIGHTENED,FALSE-VALUE
+ RFALSE
+?CND16: MOVE UNICORN,FORMAL-GARDEN
+ PRINTI "A beautiful unicorn is peacefully cropping grass across the garden. A gold key hangs from a red satin ribbon around its neck."
+ RTRUE
+?CCL3: REMOVE UNICORN
+ CALL INT,I-GARDEN
+ PUT STACK,0,0
+ RFALSE
+
+
+ .FUNCT UNICORN-F
+ CALL HELLO?,UNICORN
+ ZERO? STACK /?CCL3
+ PRINTR "The unicorn continues cropping grass."
+?CCL3: EQUAL? PRSA,V?FOLLOW \?CCL7
+ PRINTR "The unicorn shies away as you near."
+?CCL7: EQUAL? PRSA,V?RUB,V?PUT,V?TAKE /?CCL11
+ EQUAL? PRSA,V?ATTACK,V?MUNG \FALSE
+?CCL11: REMOVE UNICORN
+ SET 'UNICORN-FRIGHTENED,TRUE-VALUE
+ PRINTR "The unicorn, unsurprised to discover that you are indeed the uncouth sort it suspected you were, melts into the hedges and is gone."
+
+
+ .FUNCT GAZEBO-OBJECT-F
+ EQUAL? PRSA,V?ENTER \?CCL3
+ EQUAL? HERE,FORMAL-GARDEN \?PRG7
+ CALL DO-WALK,P?IN
+ RSTACK
+?PRG7: PRINT LOOK-AROUND
+ RTRUE
+?CCL3: EQUAL? HERE,GAZEBO \FALSE
+ EQUAL? PRSA,V?EXIT,V?LEAVE \FALSE
+ CALL DO-WALK,P?OUT
+ RSTACK
+
+
+ .FUNCT NEWSPAPER-F
+ EQUAL? PRSA,V?READ \FALSE
+ PRINTI "Famed Adventurer to Explore"
+ PRINT GUE-NAME
+ PRINTI "! A world-famous and battle-hardened adventurer has been seen in the vicinity of"
+ PRINT GUE-NAME
+ PRINTR ". Local grues have been reported sharpening their (slavering) fangs..."
+
+
+ .FUNCT PLACE-MAT-F
+ EQUAL? PRSA,V?PUT-UNDER \?CCL3
+ EQUAL? PRSI,PDOOR \?CCL6
+ MOVE PRSO,HERE
+ SET 'MUD-FLAG,TRUE-VALUE
+ PRINTR "The mat slies under the door."
+?CCL6: EQUAL? PRSI,WIZ-DOOR,RIDDLE-DOOR \FALSE
+ PRINTR "There's not enough room."
+?CCL3: EQUAL? PRSA,V?MOVE,V?TAKE \FALSE
+ ZERO? MATOBJ /FALSE
+ MOVE MATOBJ,HERE
+ SET 'MATOBJ,FALSE-VALUE
+ SET 'MUD-FLAG,FALSE-VALUE
+ PRINTI "As the place mat is moved, a "
+ PRINTD MATOBJ
+ PRINTR " falls from it to the floor."
+
+
+ .FUNCT TEAPOT-F
+ EQUAL? PRSA,V?CLOSE,V?OPEN \FALSE
+ PRINTR "The teapot has no lid."
+
+
+ .FUNCT MATCH-F,CNT
+ EQUAL? PRSA,V?BURN,V?LAMP-ON \?CCL3
+ EQUAL? PRSO,MATCH \?CCL3
+ GRTR? MATCH-COUNT,0 \?CND6
+ DEC 'MATCH-COUNT
+?CND6: GRTR? MATCH-COUNT,0 /?CCL10
+ PRINTR "You've run out of matches."
+?CCL10: FSET MATCH,FLAMEBIT
+ FSET MATCH,ONBIT
+ CALL QUEUE,I-MATCH,2
+ PUT STACK,0,1
+ PRINTR "A match starts to burn."
+?CCL3: EQUAL? PRSA,V?LAMP-OFF \?CCL16
+ FSET? MATCH,FLAMEBIT \?CCL16
+ FCLEAR MATCH,FLAMEBIT
+ FCLEAR MATCH,ONBIT
+ CALL QUEUE,I-MATCH,0
+ PRINTR "The match is out."
+?CCL16: EQUAL? PRSA,V?COUNT \?CCL22
+ PRINTI "You have "
+ SUB MATCH-COUNT,1 >CNT
+ PRINTN CNT
+ PRINTI " match"
+ EQUAL? CNT,1 /?PRG31
+ PRINTI "es"
+?PRG31: PRINT PERIOD-CR
+ RTRUE
+?CCL22: EQUAL? PRSA,V?EXAMINE \FALSE
+ FSET? MATCH,ONBIT \?PRG40
+ PRINTC 65
+ JUMP ?PRG42
+?PRG40: PRINTI "No"
+?PRG42: PRINTR " match is burning."
+
+
+ .FUNCT I-MATCH
+ FCLEAR MATCH,FLAMEBIT
+ FCLEAR MATCH,ONBIT
+ PRINTR "The match has gone out."
+
+
+ .FUNCT TOPIARY-F,RARG
+ EQUAL? RARG,M-ENTER \FALSE
+ CALL QUEUE,I-TOPIARY,-1
+ PUT STACK,0,1
+ RTRUE
+
+
+ .FUNCT I-TOPIARY
+ EQUAL? HERE,TOPIARY \?CCL3
+ ZERO? TOPIARY-COUNTER \?CCL6
+ RANDOM 100
+ GRTR? 12,STACK \?CCL6
+ SET 'TOPIARY-COUNTER,1
+ PRINTR "Strangely, the topiary animals seem to have shifted position a bit."
+?CCL6: ZERO? TOPIARY-COUNTER \?CCL12
+ RANDOM 100
+ GRTR? 8,STACK \?CCL12
+ SET 'TOPIARY-COUNTER,2
+ PRINTR "You turn, and the topiary animals seem to have closed in on you."
+?CCL12: ZERO? TOPIARY-COUNTER \FALSE
+ RANDOM 100
+ GRTR? 4,STACK \FALSE
+ SET 'TOPIARY-COUNTER,0
+ CALL JIGS-UP,STR?144
+ RSTACK
+?CCL3: CALL INT,I-TOPIARY
+ PUT STACK,0,0
+ RFALSE
+
+
+ .FUNCT HEDGES-F
+ EQUAL? PRSA,V?EXAMINE \FALSE
+ PRINTR "The hedges are shaped like various animals: dogs, serpents, dragons..."
+
+
+ .FUNCT DRAGON-F
+ CALL QUEUE,I-DRAGON,-1
+ PUT STACK,0,1
+ CALL HELLO?,DRAGON
+ ZERO? STACK /?CCL3
+ ADD DRAGON-ANGER,2 >DRAGON-ANGER
+ PRINTR "The dragon looks amused."
+?CCL3: EQUAL? PRSA,V?EXAMINE \?CCL7
+ INC 'DRAGON-ANGER
+ PRINTR "He looks back at you, his cat's eyes yellow in the gloom. You start to feel weak, and quickly turn away."
+?CCL7: EQUAL? PRSA,V?KICK,V?MUNG,V?ATTACK /?CTR10
+ EQUAL? PRSA,V?LAMP-ON \?CCL11
+?CTR10: ADD DRAGON-ANGER,4 >DRAGON-ANGER
+ EQUAL? PRSA,V?LAMP-ON /?PRG21
+ EQUAL? PRSA,V?ATTACK \?PRG23
+ ZERO? PRSI \?PRG23
+?PRG21: PRINTR "With your bare hands? I doubt the dragon even noticed."
+?PRG23: CALL RANDOM-ELEMENT,DRAGON-ATTACKS
+ PRINT STACK
+ CRLF
+ RTRUE
+?CCL11: EQUAL? PRSA,V?GIVE \?CCL26
+ EQUAL? PRSI,DRAGON \?CCL26
+ INC 'DRAGON-ANGER
+ FSET? PRSO,TREASUREBIT \?CCL31
+ MOVE PRSO,CHEST
+ PRINTI "The dragon excuses himself for a moment and returns without the "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+?CCL31: CALL BOMB?,PRSO
+ ZERO? STACK /?PRG38
+ ADD DRAGON-ANGER,2 >DRAGON-ANGER
+ REMOVE BRICK
+ PRINTR "The politely swallows the bomb. A moment later, he belches and smoke curls from his nostrils."
+?PRG38: PRINTR "The dragon refuses it."
+?CCL26: EQUAL? PRSA,V?WALK \FALSE
+ EQUAL? HERE,DRAGON-ROOM \FALSE
+ EQUAL? PRSO,P?NORTH \FALSE
+ ADD DRAGON-ANGER,3 >DRAGON-ANGER
+ PRINTR "The dragon puts out a claw and blocks your way."
+
+
+ .FUNCT DRAGON-LEAVES
+ MOVE DRAGON,DRAGON-ROOM
+ SET 'DRAGON-ANGER,0
+ CALL INT,I-DRAGON
+ PUT STACK,0,0
+ RTRUE
+
+
+ .FUNCT I-DRAGON,ROOM
+ GRTR? DRAGON-ANGER,6 \?CCL3
+ PRINTI "With an almost bored yawn, the dragon opens his mouth and blasts you with a gout of white-hot flame"
+ EQUAL? SPELL?,S-FIREPROOF \?CCL8
+ PRINTI ", but it washes over you harmlessly."
+ CRLF
+ JUMP ?CND1
+?CCL8: CALL DRAGON-LEAVES
+ CALL JIGS-UP,STR?11
+ JUMP ?CND1
+?CCL3: EQUAL? HERE,DRAGON-ROOM \?CCL12
+ IN? DRAGON,DRAGON-ROOM /?CCL12
+ MOVE DRAGON,DRAGON-ROOM
+ PRINTI "The dragon charges in, maddened by your attempt to sneak past him. His eyes glow with anger. He opens his mouth, and a huge ball of flame engulfs you"
+ EQUAL? SPELL?,S-FIREPROOF \?CCL19
+ CALL JIGS-UP,STR?153
+ JUMP ?CND1
+?CCL19: CALL JIGS-UP,STR?11
+ JUMP ?CND1
+?CCL12: GRTR? DRAGON-ANGER,0 /?CCL21
+ RANDOM 100
+ GRTR? 50,STACK \?CCL24
+ IN? DRAGON,HERE \?CCL24
+ PRINTI "The dragon looks bored."
+ CRLF
+ JUMP ?CND1
+?CCL24: CALL DRAGON-LEAVES
+ EQUAL? HERE,OLD-HERE \?CND1
+ PRINTI "The dragon seems to have lost interest in you."
+ EQUAL? OLD-HERE,DRAGON-ROOM \?PRG36
+ CRLF
+ JUMP ?CND1
+?PRG36: PRINTI " He wanders off."
+ CRLF
+ JUMP ?CND1
+?CCL21: CALL FIND-TARGET,WINNER >ROOM
+ ZERO? ROOM \?CCL40
+ RANDOM 100
+ GRTR? 25,STACK \?CND1
+ CALL DRAGON-LEAVES
+ JUMP ?CND1
+?CCL40: EQUAL? ROOM,CAROUSEL-ROOM,DREARY-ROOM,LEDGE-IN-RAVINE \?CCL44
+ RANDOM 100
+ GRTR? 25,STACK \?PRG47
+ CALL DRAGON-LEAVES
+?PRG47: PRINTI "The dragon follows no further."
+ CRLF
+ JUMP ?CND1
+?CCL44: EQUAL? ROOM,ICE-ROOM \?CCL50
+ REMOVE DRAGON
+ REMOVE ICE
+ CALL INT,I-DRAGON
+ PUT STACK,0,0
+ ADD SCORE,5 >SCORE
+ SET 'ICE-MELTED,TRUE-VALUE
+ CRLF
+ PRINTI "The dragon enters and spies his reflection on the icy surface of the glacier. Thinking that another dragon has invaded his territory, he rears up to his full height and roars a challenge! The intruder responds! The dragon takes a deep breath and expels a massive gout of flame. It washes over the ice, which melts rapidly, sending out huge cloud of steam! When the steam dissipates, the glacier is gone, and so is the dragon.
+With the ice gone, you notice a passage leading west."
+ CRLF
+ JUMP ?CND1
+?CCL50: EQUAL? ROOM,OLD-HERE /?PRG58
+ MOVE DRAGON,ROOM
+ PRINTI "The dragon follows you, out of mingled curiosity and anger."
+ CRLF
+ JUMP ?CND53
+?PRG58: PRINTI "The dragon continues to watch you carefully."
+ CRLF
+?CND53: GRTR? DRAGON-ANGER,0 /?CND1
+ SET 'DRAGON-ANGER,0
+ CALL INT,I-DRAGON
+ PUT STACK,0,0
+?CND1: LOC DRAGON >OLD-HERE
+ SUB DRAGON-ANGER,2 >DRAGON-ANGER
+ LESS? DRAGON-ANGER,0 \TRUE
+ SET 'DRAGON-ANGER,0
+ RTRUE
+
+
+ .FUNCT CHEST-F
+ EQUAL? PRSA,V?OPEN \FALSE
+ IN? PRINCESS,HERE \?PRG12
+ ZERO? PRINCESS-AWAKE \?PRG12
+ RANDOM 100
+ GRTR? 25,STACK \?PRG12
+ CALL V-OPEN
+ PRINTI "The squeaky lid startles the young woman."
+ CRLF
+ JUMP ?CND4
+?PRG12: PRINTI "The rusty hinges almost give. It would probably open if you tried again."
+ IN? PRINCESS,HERE \?CND14
+ ZERO? PRINCESS-AWAKE \?CND14
+ PRINTI " The commotion has startled the young woman."
+?CND14: CRLF
+?CND4: PUTP CHEST,P?ACTION,0
+ IN? PRINCESS,HERE \TRUE
+ ZERO? PRINCESS-AWAKE \TRUE
+ CALL PERFORM,V?ALARM,PRINCESS
+ RTRUE
+
+
+ .FUNCT PRINCESS-F,DEM
+ CALL INT,I-PRINCESS >DEM
+ EQUAL? PRSA,V?FOLLOW \?CCL3
+ ZERO? PRFOLLOW /?PRG7
+ CALL DO-WALK,PRFOLLOW
+ RSTACK
+?PRG7: PRINTR "You've lost track of her."
+?CCL3: EQUAL? PRSA,V?RAPE,V?MUNG,V?ATTACK \?CCL10
+ REMOVE PRINCESS
+ PRINTI "The princess screams, ""Won't someone deliver me from this awful fate?"" The Wizard of Frobozz "
+ IN? WIZARD,HERE \?PRG18
+ PRINTI "turns toward you"
+ JUMP ?CND13
+?PRG18: PRINTI "appears"
+?CND13: CALL JIGS-UP,STR?158
+ RSTACK
+?CCL10: CALL HELLO?,PRINCESS
+ ZERO? STACK \?CTR20
+ EQUAL? PRSA,V?EXAMINE,V?KISS,V?ALARM /?CTR20
+ EQUAL? PRSA,V?RUB \?CCL21
+?CTR20: IN? PRINCESS,DRAGON-LAIR \?PRG32
+ GET DEM,C-ENABLED?
+ ZERO? STACK \?PRG32
+ CALL QUEUE,I-PRINCESS,2
+ PUT STACK,0,1
+ SET 'PRINCESS-AWAKE,TRUE-VALUE
+ PRINTR "The princess shakes herself awake, notices you, and smiles. ""Thank you for rescuing me from that horrid worm, but I must depart."" She rises, looking purposefully out of the lair."
+?PRG32: PRINTI "The princess ignores you; her eyes fix on the "
+ EQUAL? HERE,GAZEBO \?CCL36
+ PRINTI "garden"
+ JUMP ?PRG49
+?CCL36: EQUAL? HERE,FORMAL-GARDEN \?CCL40
+ PRINTI "gazebo"
+ JUMP ?PRG49
+?CCL40: EQUAL? HERE,LEDGE-IN-RAVINE \?PRG47
+ PRINTI "ledge"
+ JUMP ?PRG49
+?PRG47: MUL PRCOUNT,4
+ GET PRDIRS,STACK
+ PRINT STACK
+?PRG49: PRINT PERIOD-CR
+ RTRUE
+?CCL21: ZERO? PRINCESS-AWAKE \FALSE
+ PRINTR "She's in a trance!"
+
+
+ .FUNCT I-PRINCESS,DEM,OLDP,PC
+ CALL INT,I-PRINCESS >DEM
+ LOC PRINCESS >OLDP
+ MUL PRCOUNT,4 >PC
+ ADD PC,1
+ GET PRDIRS,STACK
+ MOVE PRINCESS,STACK
+ SET 'PRFOLLOW,FALSE-VALUE
+ IN? PRINCESS,DARK-TUNNEL \?CCL3
+ IN? ADVENTURER,DEEP-FORD \?CCL3
+ PRINTI "The princess touches the ravine wall and a section slides away, revealing a passage to the east. She enters it."
+ CRLF
+ IN? WINNER,OLDP \?CND8
+ ADD PC,3
+ GET PRDIRS,STACK >PRFOLLOW
+?CND8: SET 'SECRET-DOOR,TRUE-VALUE
+ JUMP ?CND1
+?CCL3: IN? PRINCESS,DARK-TUNNEL \?CCL11
+ IN? WINNER,DARK-TUNNEL \?CCL11
+ SET 'SECRET-DOOR,TRUE-VALUE
+ PRINTI "The princess appears from behind some rocks, as though she had walked through a wall."
+ CRLF
+ JUMP ?CND1
+?CCL11: IN? WINNER,OLDP \?CCL17
+ ADD PC,3
+ GET PRDIRS,STACK >PRFOLLOW
+ EQUAL? OLDP,FORMAL-GARDEN \?CCL20
+ PRINTI "The princess enters the gazebo."
+ CRLF
+ JUMP ?CND1
+?CCL20: EQUAL? OLDP,LEDGE-IN-RAVINE \?PRG27
+ PRINTI "The princess climbs daintily down the rock face."
+ CRLF
+ JUMP ?CND1
+?PRG27: PRINTI "The princess walks "
+ GET PRDIRS,PC
+ PRINT STACK
+ PRINTI ". She glances back at you as she goes."
+ CRLF
+ JUMP ?CND1
+?CCL17: IN? PRINCESS,HERE \?CND1
+ EQUAL? HERE,GAZEBO \?CCL36
+ PRINTI "The princess joins you in the gazebo."
+ CRLF
+ JUMP ?CND1
+?CCL36: EQUAL? HERE,DEEP-FORD \?PRG43
+ PRINTI "The princess clambers down from the ledge."
+ CRLF
+ JUMP ?CND1
+?PRG43: PRINTI "The princess enters from the "
+ ADD 2,PC
+ GET PRDIRS,STACK
+ PRINT STACK
+ PRINTI ". She seems surprised to see you."
+ CRLF
+?CND1: IN? PRINCESS,GAZEBO \?CCL51
+ PUT DEM,0,0
+ CALL QUEUE,I-UNICORN,6
+ PUT STACK,0,1
+ RTRUE
+?CCL51: INC 'PRCOUNT
+ RANDOM 100
+ GRTR? 75,STACK \?CCL54
+ PUSH 1
+ JUMP ?CND52
+?CCL54: PUSH 2
+?CND52: CALL QUEUE,I-PRINCESS,STACK
+ PUT STACK,0,1
+ RTRUE
+
+
+ .FUNCT I-UNICORN
+ EQUAL? HERE,GAZEBO,FORMAL-GARDEN \?CCL3
+ FCLEAR GOLD-KEY,NDESCBIT
+ MOVE GOLD-KEY,WINNER
+ CALL SCORE-OBJ,GOLD-KEY
+ PUTP GOLD-KEY,P?ACTION,0
+ REMOVE PRINCESS
+ PRINTR "Shyly, a unicorn peeks out of the hedges and approaches the princess. Around its neck hangs a gold key. The princess takes the key and, smiling, hands it to you. ""It is the least I can do for one who rescued me from a fate I dare not contemplate."" With that, she mounts the unicorn and rides away."
+?CCL3: REMOVE PRINCESS
+ RFALSE
+
+
+ .FUNCT ICE-ROOM-F,RARG
+ EQUAL? RARG,M-LOOK \FALSE
+ PRINTI "This is a large hall of ancient lava, worn smooth by a glacier. Tunnels lead east and south."
+ ZERO? ICE-MELTED /?CND6
+ PRINTR " A damp, scorched passage leads west."
+?CND6: CRLF
+ RTRUE
+
+
+ .FUNCT ICE-F
+ EQUAL? PRSA,V?MELT \FALSE
+ PRINTR "This is a big glacier; you'll need lots of heat."
+
+ .ENDI
diff --git a/princess.zil b/princess.zil
new file mode 100644
index 0000000..fcb2dd9
--- /dev/null
+++ b/princess.zil
@@ -0,0 +1,684 @@
+"PRINCESS for
+ Mini-Zork II: The Wizard of Frobozz
+ (c) Copyright 1988 Infocom, Inc. All Rights Reserved."
+
+<ROOM FORMAL-GARDEN
+ (IN ROOMS)
+ (DESC "Formal Garden")
+ (LDESC
+"A path of crushed white stone winds among bushes and flower beds of this
+garden from south to north. Almost hidden by the shrubbery is a small white
+gazebo.")
+ (IN TO GAZEBO)
+ (NORTH TO DARK-TUNNEL)
+ (SOUTH TO TOPIARY)
+ (FLAGS RLANDBIT)
+ (GLOBAL GAZEBO-OBJECT)
+ (ACTION FORMAL-GARDEN-F)>
+
+<ROUTINE FORMAL-GARDEN-F (RARG)
+ <COND (<EQUAL? .RARG ,M-ENTER>
+ <ENABLE <QUEUE I-GARDEN -1>>)>>
+
+<ROUTINE I-GARDEN ()
+ <COND (<EQUAL? ,HERE ,FORMAL-GARDEN>
+ <COND (<AND <IN? ,UNICORN ,FORMAL-GARDEN>
+ <PROB 33>>
+ <REMOVE ,UNICORN>
+ <TELL "The unicorn bounds lightly away." CR>)
+ (<AND <IN? ,PRINCESS ,DRAGON-LAIR>
+ <NOT <IN? ,UNICORN ,FORMAL-GARDEN>>
+ <PROB 25>>
+ <COND (,UNICORN-FRIGHTENED
+ <SETG UNICORN-FRIGHTENED <>>
+ <RFALSE>)>
+ <MOVE ,UNICORN ,FORMAL-GARDEN>
+ <TELL
+"A beautiful unicorn is peacefully cropping grass across the garden. A gold
+key hangs from a red satin ribbon around its neck.">)>)
+ (T
+ <REMOVE ,UNICORN>
+ <DISABLE <INT I-GARDEN>>
+ <RFALSE>)>>
+
+<OBJECT UNICORN
+ (DESC "unicorn")
+ (LDESC "A beautiful unicorn is munching grass here.")
+ (SYNONYM UNICORN ANIMAL)
+ (ADJECTIVE BEAUTIFUL WHITE)
+ (FLAGS ACTORBIT TRYTAKEBIT OPENBIT CONTBIT)
+ (ACTION UNICORN-F)>
+
+<GLOBAL UNICORN-FRIGHTENED <>>
+
+<ROUTINE UNICORN-F ()
+ <COND (<HELLO? ,UNICORN>
+ <TELL "The unicorn continues cropping grass." CR>)
+ (<VERB? FOLLOW>
+ <TELL "The unicorn shies away as you near." CR>)
+ (<VERB? TAKE PUT RUB MUNG ATTACK>
+ <REMOVE ,UNICORN>
+ <SETG UNICORN-FRIGHTENED T>
+ <TELL
+"The unicorn, unsurprised to discover that you are indeed the uncouth sort
+it suspected you were, melts into the hedges and is gone." CR>)>>
+
+<OBJECT GOLD-KEY
+ (IN UNICORN)
+ (DESC "delicate gold key")
+ (SYNONYM KEY TREASURE)
+ (ADJECTIVE DELICATE GOLD)
+ (VALUE 15)
+ (SIZE 3)
+ (FLAGS NDESCBIT TAKEBIT TRYTAKEBIT TOOLBIT)
+ (ACTION UNICORN-F)>
+
+<OBJECT RIBBON
+ (IN UNICORN)
+ (DESC "ribbon")
+ (SYNONYM RIBBON)
+ (ADJECTIVE VELVET SATIN)
+ (FLAGS NDESCBIT)
+ (ACTION UNICORN-F)>
+
+<ROOM GAZEBO
+ (IN ROOMS)
+ (DESC "Gazebo")
+ (LDESC
+"This is a gazebo in the midst of a formal garden. It is cool and restful
+here. A tea table adorns the center of the gazebo.")
+ (OUT TO FORMAL-GARDEN)
+ (FLAGS RLANDBIT ONBIT)
+ (GLOBAL GAZEBO-OBJECT)>
+
+<OBJECT GAZEBO-OBJECT
+ (IN LOCAL-GLOBALS)
+ (DESC "gazebo")
+ (SYNONYM GAZEBO)
+ (ADJECTIVE WOODEN)
+ (FLAGS NDESCBIT)
+ (ACTION GAZEBO-OBJECT-F)>
+
+<ROUTINE GAZEBO-OBJECT-F ()
+ <COND (<VERB? ENTER>
+ <COND (<EQUAL? ,HERE ,FORMAL-GARDEN>
+ <DO-WALK ,P?IN>)
+ (T
+ <TELL ,LOOK-AROUND>)>)
+ (<AND <EQUAL? ,HERE ,GAZEBO>
+ <VERB? LEAVE EXIT>>
+ <DO-WALK ,P?OUT>)>>
+
+<OBJECT GAZEBO-TABLE
+ (IN GAZEBO)
+ (DESC "table")
+ (SYNONYM TABLE)
+ (CAPACITY 100)
+ (FLAGS NDESCBIT SURFACEBIT CONTBIT OPENBIT)>
+
+<OBJECT NEWSPAPER
+ (IN GAZEBO-TABLE)
+ (DESC "newspaper")
+ (SYNONYM PAPER NEWSPAPER)
+ (ADJECTIVE NEWS NEWSPAPER)
+ (FLAGS TAKEBIT BURNBIT READBIT)
+ (ACTION NEWSPAPER-F)>
+
+<ROUTINE NEWSPAPER-F ()
+ <COND (<VERB? READ>
+ <TELL
+"Famed Adventurer to Explore" ,GUE-NAME "! A world-famous and battle-hardened
+adventurer has been seen in the vicinity of" ,GUE-NAME ". Local grues have
+been reported sharpening their (slavering) fangs..." CR>)>>
+
+<OBJECT PLACE-MAT
+ (IN GAZEBO-TABLE)
+ (DESC "place mat")
+ (SYNONYM MAT PLACEM)
+ (ADJECTIVE PLACE)
+ (SIZE 12)
+ (CAPACITY 20)
+ (FLAGS TAKEBIT SURFACEBIT CONTBIT OPENBIT)
+ (ACTION PLACE-MAT-F)>
+
+<ROUTINE PLACE-MAT-F ()
+ <COND (<VERB? PUT-UNDER>
+ <COND (<EQUAL? ,PRSI ,PDOOR>
+ <MOVE ,PRSO ,HERE>
+ <SETG MUD-FLAG T>
+ <TELL "The mat slies under the door." CR>)
+ (<EQUAL? ,PRSI ,WIZ-DOOR ,RIDDLE-DOOR>
+ <TELL "There's not enough room." CR>)>)
+ (<AND <VERB? TAKE MOVE> ,MATOBJ>
+ <MOVE ,MATOBJ ,HERE>
+ <SETG MATOBJ <>>
+ <SETG MUD-FLAG <>>
+ <TELL
+"As the place mat is moved, a " D ,MATOBJ " falls from it to the floor." CR>)>>
+
+<OBJECT TEAPOT
+ (IN GAZEBO-TABLE)
+ (DESC "china teapot")
+ (SYNONYM TEAPOT POT)
+ (ADJECTIVE CHINA TEA)
+ (CAPACITY 4)
+ (FLAGS TAKEBIT TRANSBIT CONTBIT OPENBIT)
+ (ACTION TEAPOT-F)>
+
+<ROUTINE TEAPOT-F ()
+ <COND (<VERB? OPEN CLOSE>
+ <TELL "The teapot has no lid." CR>)>>
+
+<OBJECT LETTER-OPENER
+ (IN GAZEBO-TABLE)
+ (DESC "letter opener")
+ (SYNONYM OPENER)
+ (ADJECTIVE LETTER)
+ (SIZE 2)
+ (FLAGS TAKEBIT TOOLBIT)>
+
+<OBJECT MATCH
+ (IN GAZEBO-TABLE)
+ (DESC "matchbook")
+ (LDESC "There is a matchbook saying \"Visit ZORK I\" here.")
+ (SYNONYM MATCH MATCHES MATCHBOOK)
+ (SIZE 2)
+ (FLAGS READBIT TAKEBIT)
+ (TEXT
+"\"Visit Exotic ZORK I! Consult the Frobozz Magic Travel Agency, or visit
+your local computer store for details.\"")
+ (ACTION MATCH-F)>
+
+<GLOBAL MATCH-COUNT 6>
+
+<ROUTINE MATCH-F ("AUX" CNT)
+ <COND (<AND <VERB? LAMP-ON BURN>
+ <EQUAL? ,PRSO ,MATCH>>
+ <COND (<G? ,MATCH-COUNT 0>
+ <SETG MATCH-COUNT <- ,MATCH-COUNT 1>>)>
+ <COND (<NOT <G? ,MATCH-COUNT 0>>
+ <TELL "You've run out of matches." CR>)
+ (T
+ <FSET ,MATCH ,FLAMEBIT>
+ <FSET ,MATCH ,ONBIT>
+ <ENABLE <QUEUE I-MATCH 2>>
+ <TELL "A match starts to burn." CR>)>)
+ (<AND <VERB? LAMP-OFF>
+ <FSET? ,MATCH ,FLAMEBIT>>
+ <FCLEAR ,MATCH ,FLAMEBIT>
+ <FCLEAR ,MATCH ,ONBIT>
+ <QUEUE I-MATCH 0>
+ <TELL "The match is out." CR>)
+ (<VERB? COUNT>
+ <TELL "You have ">
+ <SET CNT <- ,MATCH-COUNT 1>>
+ <TELL N .CNT " match">
+ <COND (<NOT <1? .CNT>>
+ <TELL "es">)>
+ <TELL ,PERIOD-CR>)
+ (<VERB? EXAMINE>
+ <COND (<FSET? ,MATCH ,ONBIT>
+ <TELL "A">)
+ (T
+ <TELL "No">)>
+ <TELL " match is burning." CR>)>>
+
+<ROUTINE I-MATCH ()
+ <FCLEAR ,MATCH ,FLAMEBIT>
+ <FCLEAR ,MATCH ,ONBIT>
+ <TELL "The match has gone out." CR>>
+
+<ROOM TOPIARY
+ (IN ROOMS)
+ (DESC "Topiary")
+ (LDESC
+"This is the southern end of a garden, where fantastically shaped hedges are
+arrayed with geometric precision. Though recently untended, the bushes have
+clearly been shaped: There is a dragon, a unicorn, a great serpent, a huge
+misshapen dog, and several human figures. To the west is a tunnel.")
+ (WEST TO CAROUSEL-ROOM)
+ (NORTH TO FORMAL-GARDEN)
+ (FLAGS RLANDBIT)
+ (ACTION TOPIARY-F)>
+
+<ROUTINE TOPIARY-F (RARG)
+ <COND (<EQUAL? .RARG ,M-ENTER>
+ <ENABLE <QUEUE I-TOPIARY -1>>)>>
+
+<GLOBAL TOPIARY-COUNTER 0>
+
+<ROUTINE I-TOPIARY ()
+ <COND (<EQUAL? ,HERE ,TOPIARY>
+ <COND (<AND <EQUAL? ,TOPIARY-COUNTER 0>
+ <PROB 12>>
+ <SETG TOPIARY-COUNTER 1>
+ <TELL
+"Strangely, the topiary animals seem to have shifted position a bit." CR>)
+ (<AND <EQUAL? ,TOPIARY-COUNTER 0>
+ <PROB 8>>
+ <SETG TOPIARY-COUNTER 2>
+ <TELL
+"You turn, and the topiary animals seem to have closed in on you." CR>)
+ (<AND <EQUAL? ,TOPIARY-COUNTER 0>
+ <PROB 4>>
+ <SETG TOPIARY-COUNTER 0>
+ <JIGS-UP
+"The topiary animals attack! You are crushed by their branches and clawed
+by their thorns.">)>)
+ (T
+ <DISABLE <INT I-TOPIARY>>
+ <RFALSE>)>>
+
+<OBJECT HEDGES
+ (IN TOPIARY)
+ (DESC "hedge")
+ (SYNONYM HEDGE HEDGES)
+ (FLAGS NDESCBIT)
+ (ACTION HEDGES-F)>
+
+<ROUTINE HEDGES-F ()
+ <COND (<VERB? EXAMINE>
+ <TELL
+"The hedges are shaped like various animals: dogs, serpents, dragons..." CR>)>>
+
+<ROOM DRAGON-ROOM
+ (IN ROOMS)
+ (DESC "Dragon Room")
+ (LDESC
+"The walls of this large cavern are scorched and a sooty dry smell is very
+strong here. A stone bridge leads the south, and a smokey tunnel opens to
+the north. To the east is a small opening.")
+ (EAST TO LEDGE-IN-RAVINE)
+ (NORTH TO DRAGON-LAIR IF ICE-MELTED ELSE
+ "The dragon hisses and blocks your way.")
+ (IN TO DRAGON-LAIR IF ICE-MELTED ELSE
+ "The dragon hisses and blocks your way.")
+ (SOUTH TO STONE-BRIDGE)
+ (FLAGS RLANDBIT)
+ (GLOBAL BRIDGE)>
+
+<OBJECT DRAGON
+ (IN DRAGON-ROOM)
+ (DESC "huge red dragon")
+ (SYNONYM DRAGON)
+ (ADJECTIVE RED HUGE)
+ (LDESC "A huge red dragon is lying on the rocks, watching.")
+ (FDESC
+"A huge red dragon is blocking the north exit. Smoke curls from his nostrils.")
+ (FLAGS ACTORBIT)
+ (ACTION DRAGON-F)>
+
+<ROUTINE DRAGON-F ()
+ <ENABLE <QUEUE I-DRAGON -1>>
+ <COND (<HELLO? ,DRAGON>
+ <SETG DRAGON-ANGER <+ ,DRAGON-ANGER 2>>
+ <TELL "The dragon looks amused." CR>)
+ (<VERB? EXAMINE>
+ <SETG DRAGON-ANGER <+ ,DRAGON-ANGER 1>>
+ <TELL
+"He looks back at you, his cat's eyes yellow in the gloom. You start to
+feel weak, and quickly turn away." CR>)
+ (<VERB? ATTACK MUNG KICK LAMP-ON>
+ <SETG DRAGON-ANGER <+ ,DRAGON-ANGER 4>>
+ <COND (<OR <VERB? LAMP-ON>
+ <AND <VERB? ATTACK>
+ <NOT ,PRSI>>>
+ <TELL
+"With your bare hands? I doubt the dragon even noticed." CR>)
+ (T
+ <TELL <RANDOM-ELEMENT ,DRAGON-ATTACKS> CR>)>)
+ (<AND <VERB? GIVE>
+ <EQUAL? ,PRSI ,DRAGON>>
+ <SETG DRAGON-ANGER <+ ,DRAGON-ANGER 1>>
+ <COND (<FSET? ,PRSO ,TREASUREBIT>
+ <MOVE ,PRSO ,CHEST>
+ <TELL
+"The dragon excuses himself for a moment and
+returns without the " D ,PRSO ,PERIOD-CR>)
+ (<BOMB? ,PRSO>
+ <SETG DRAGON-ANGER <+ ,DRAGON-ANGER 2>>
+ <REMOVE ,BRICK>
+ <TELL
+"The politely swallows the bomb. A moment later, he belches and smoke curls
+from his nostrils." CR>)
+ (T
+ <TELL "The dragon refuses it." CR>)>)
+ (<AND <VERB? WALK>
+ <EQUAL? ,HERE ,DRAGON-ROOM>
+ <EQUAL? ,PRSO ,P?NORTH>>
+ <SETG DRAGON-ANGER <+ ,DRAGON-ANGER 3>>
+ <TELL
+"The dragon puts out a claw and blocks your way." CR>)>>
+
+<GLOBAL DRAGON-ATTACKS
+ <LTABLE
+"Dragon hide is tough as steel, but you have annoyed him a bit. He looks
+as if deciding whether or not to eat you."
+"That captured his interest. He stares at you balefully."
+"The dragon is surprised and interested (for the moment)."
+"That did no damage, but he turns his smoky yellow eyes in your direction.">>
+
+<GLOBAL DRAGON-ANGER 0>
+
+<GLOBAL ICE-MELTED <>>
+
+<GLOBAL OLD-HERE DRAGON-ROOM>
+
+<ROUTINE DRAGON-LEAVES ()
+ <MOVE ,DRAGON ,DRAGON-ROOM>
+ <SETG DRAGON-ANGER 0>
+ <DISABLE <INT I-DRAGON>>>
+
+<ROUTINE I-DRAGON ("AUX" ROOM)
+ <COND (<G? ,DRAGON-ANGER 6>
+ <TELL
+"With an almost bored yawn, the dragon opens his mouth and blasts you with
+a gout of white-hot flame">
+ <COND (<EQUAL? ,SPELL? ,S-FIREPROOF>
+ <TELL ", but it washes over you harmlessly." CR>)
+ (T
+ <DRAGON-LEAVES>
+ <JIGS-UP ".">)>)
+ (<AND <EQUAL? ,HERE ,DRAGON-ROOM>
+ <NOT <IN? ,DRAGON ,DRAGON-ROOM>>>
+ <MOVE ,DRAGON ,DRAGON-ROOM>
+ <TELL
+"The dragon charges in, maddened by your attempt to sneak past him. His eyes
+glow with anger. He opens his mouth, and a huge ball of flame engulfs you">
+ <COND (<EQUAL? ,SPELL? ,S-FIREPROOF>
+ <JIGS-UP
+", but you barely feel the heat. The dragon is puzzled, but not too
+puzzled to crush you in his jaws.">)
+ (T
+ <JIGS-UP ".">)>)
+ (<NOT <G? ,DRAGON-ANGER 0>>
+ <COND (<AND <PROB 50>
+ <IN? ,DRAGON ,HERE>>
+ <TELL "The dragon looks bored." CR>)
+ (T
+ <DRAGON-LEAVES>
+ <COND (<EQUAL? ,HERE ,OLD-HERE>
+ <TELL
+"The dragon seems to have lost interest in you.">
+ <COND (<EQUAL? ,OLD-HERE ,DRAGON-ROOM>
+ <CRLF>)
+ (T
+ <TELL " He wanders off." CR>)>)>)>)
+ (T
+ <SET ROOM <FIND-TARGET ,WINNER>>
+ <COND (<NOT .ROOM>
+ <COND (<PROB 25>
+ <DRAGON-LEAVES>)>)
+ (<EQUAL? .ROOM ,CAROUSEL-ROOM
+ ,DREARY-ROOM ,LEDGE-IN-RAVINE>
+ <COND (<PROB 25>
+ <DRAGON-LEAVES>)>
+ <TELL "The dragon follows no further." CR>)
+ (<EQUAL? .ROOM ,ICE-ROOM>
+ <REMOVE ,DRAGON>
+ <REMOVE ,ICE>
+ <DISABLE <INT I-DRAGON>>
+ <SETG SCORE <+ ,SCORE 5>>
+ <SETG ICE-MELTED T>
+ <TELL CR
+"The dragon enters and spies his reflection on the icy surface of the
+glacier. Thinking that another dragon has invaded his territory, he rears
+up to his full height and roars a challenge! The intruder responds! The
+dragon takes a deep breath and expels a massive gout of flame. It washes
+over the ice, which melts rapidly, sending out huge cloud of steam! When
+the steam dissipates, the glacier is gone, and so is the dragon.
+|
+With the ice gone, you notice a passage leading west." CR>)
+ (T
+ <COND (<NOT <EQUAL? .ROOM ,OLD-HERE>>
+ <MOVE ,DRAGON .ROOM>
+ <TELL
+"The dragon follows you, out of mingled curiosity and anger." CR>)
+ (T
+ <TELL
+"The dragon continues to watch you carefully." CR>)>
+ <COND (<NOT <G? ,DRAGON-ANGER 0>>
+ <SETG DRAGON-ANGER 0>
+ <DISABLE <INT I-DRAGON>>)>)>)>
+ <SETG OLD-HERE <LOC ,DRAGON>>
+ <SETG DRAGON-ANGER <- ,DRAGON-ANGER 2>>
+ <COND (<L? ,DRAGON-ANGER 0>
+ <SETG DRAGON-ANGER 0>)>
+ <RTRUE>>
+
+<ROOM DRAGON-LAIR
+ (IN ROOMS)
+ (DESC "Dragon's Lair")
+ (LDESC
+"The rock walls are scarred by flame, and a blackened doorway leads south.")
+ (SOUTH TO DRAGON-ROOM)
+ (OUT TO DRAGON-ROOM)
+ (FLAGS RLANDBIT)>
+
+<OBJECT CHEST
+ (IN DRAGON-LAIR)
+ (DESC "wooden chest")
+ (FDESC "An old wooden chest sits in the corner.")
+ (SYNONYM CHEST TRUNK)
+ (ADJECTIVE WOODEN OLD)
+ (FLAGS CONTBIT TAKEBIT)
+ (CAPACITY 40)
+ (SIZE 40)
+ (ACTION CHEST-F)>
+
+<ROUTINE CHEST-F ()
+ <COND (<VERB? OPEN>
+ <COND (<AND <IN? ,PRINCESS ,HERE>
+ <NOT ,PRINCESS-AWAKE>
+ <PROB 25>>
+ <V-OPEN>
+ <TELL "The squeaky lid startles the young woman." CR>)
+ (T
+ <TELL
+"The rusty hinges almost give. It would probably open if you tried again.">
+ <COND (<AND <IN? ,PRINCESS ,HERE>
+ <NOT ,PRINCESS-AWAKE>>
+ <TELL
+" The commotion has startled the young woman.">)>
+ <CRLF>)>
+ <PUTP ,CHEST ,P?ACTION 0>
+ <COND (<AND <IN? ,PRINCESS ,HERE>
+ <NOT ,PRINCESS-AWAKE>>
+ <PERFORM ,V?ALARM ,PRINCESS>)>
+ <RTRUE>)>>
+
+<OBJECT STATUETTE
+ (IN CHEST)
+ (DESC "golden dragon statuette")
+ (FDESC "Nestled in the chest is a gold statuette of a dragon.")
+ (SYNONYM TREASURE STATUE DRAGON)
+ (ADJECTIVE GOLD)
+ (FLAGS TREASUREBIT TAKEBIT)
+ (VALUE 20)>
+
+<OBJECT PRINCESS
+ (IN DRAGON-LAIR)
+ (DESC "beautiful princess")
+ (FDESC
+"A beautiful princess sits on a rock in the corner. Her hair is unkempt
+and she appears to be in a trance.")
+ (SYNONYM PRINCESS WOMAN LADY)
+ (ADJECTIVE BEAUTIFUL YOUNG)
+ (FLAGS ACTORBIT)
+ (ACTION PRINCESS-F)>
+
+<GLOBAL PRINCESS-AWAKE <>>
+
+<ROUTINE PRINCESS-F ("AUX" (DEM <INT I-PRINCESS>))
+ <COND (<VERB? FOLLOW>
+ <COND (,PRFOLLOW
+ <DO-WALK ,PRFOLLOW>)
+ (T
+ <TELL "You've lost track of her." CR>)>)
+ (<VERB? ATTACK MUNG RAPE>
+ <REMOVE ,PRINCESS>
+ <TELL
+"The princess screams, \"Won't someone deliver me from this awful fate?\"
+The Wizard of Frobozz ">
+ <COND (<IN? ,WIZARD ,HERE>
+ <TELL "turns toward you">)
+ (ELSE
+ <TELL "appears">)>
+ <JIGS-UP
+". \"Fry!\" he intones, and a bolt of lightning reduces you to a pile of ash.
+(Serves you right, too, if you ask me.)">)
+ (<OR <HELLO? ,PRINCESS>
+ <VERB? ALARM KISS EXAMINE RUB>>
+ <COND (<AND <IN? ,PRINCESS ,DRAGON-LAIR>
+ <EQUAL? <GET .DEM ,C-ENABLED?> 0>>
+ <ENABLE <QUEUE I-PRINCESS 2>>
+ <SETG PRINCESS-AWAKE T>
+ <TELL
+"The princess shakes herself awake, notices you, and smiles. \"Thank you for
+rescuing me from that horrid worm, but I must depart.\" She rises, looking
+purposefully out of the lair." CR>)
+ (T
+ <TELL
+"The princess ignores you; her eyes fix on the ">
+ <COND (<EQUAL? ,HERE ,GAZEBO>
+ <TELL "garden">)
+ (<EQUAL? ,HERE ,FORMAL-GARDEN>
+ <TELL "gazebo">)
+ (<EQUAL? ,HERE ,LEDGE-IN-RAVINE>
+ <TELL "ledge">)
+ (T
+ <TELL <GET ,PRDIRS <* ,PRCOUNT 4>>>)>
+ <TELL ,PERIOD-CR>)>)
+ (<NOT ,PRINCESS-AWAKE>
+ <TELL "She's in a trance!" CR>)>>
+
+<ROUTINE I-PRINCESS ("AUX" (DEM <INT I-PRINCESS>) (OLDP <LOC ,PRINCESS>)
+ (PC <* ,PRCOUNT 4>))
+ <MOVE ,PRINCESS <GET ,PRDIRS <+ .PC 1>>>
+ <SETG PRFOLLOW <>>
+ <COND (<AND <IN? ,PRINCESS ,DARK-TUNNEL>
+ <IN? ,ADVENTURER ,DEEP-FORD>>
+ <TELL
+"The princess touches the ravine wall and a section slides away, revealing
+a passage to the east. She enters it." CR>
+ <COND (<IN? ,WINNER .OLDP>
+ <SETG PRFOLLOW <GET ,PRDIRS <+ .PC 3>>>)>
+ <SETG SECRET-DOOR T>)
+ (<AND <IN? ,PRINCESS ,DARK-TUNNEL>
+ <IN? ,WINNER ,DARK-TUNNEL>>
+ <SETG SECRET-DOOR T>
+ <TELL
+"The princess appears from behind some rocks, as though she had walked
+through a wall." CR>)
+ (<IN? ,WINNER .OLDP>
+ <SETG PRFOLLOW <GET ,PRDIRS <+ .PC 3>>>
+ <COND (<EQUAL? .OLDP ,FORMAL-GARDEN>
+ <TELL "The princess enters the gazebo." CR>)
+ (<EQUAL? .OLDP ,LEDGE-IN-RAVINE>
+ <TELL
+"The princess climbs daintily down the rock face." CR>)
+ (T
+ <TELL "The princess walks ">
+ <TELL <GET ,PRDIRS .PC>>
+ <TELL ". She glances back at you as she goes." CR>)>)
+ (<IN? ,PRINCESS ,HERE>
+ <COND (<EQUAL? ,HERE ,GAZEBO>
+ <TELL "The princess joins you in the gazebo." CR>)
+ (<EQUAL? ,HERE ,DEEP-FORD>
+ <TELL "The princess clambers down from the ledge." CR>)
+ (T
+ <TELL "The princess enters from the ">
+ <TELL <GET ,PRDIRS <+ 2 .PC>>>
+ <TELL ". She seems surprised to see you." CR>)>)>
+ <COND (<IN? ,PRINCESS ,GAZEBO>
+ <DISABLE .DEM>
+ <ENABLE <QUEUE I-UNICORN 6>>)
+ (T
+ <SETG PRCOUNT <+ ,PRCOUNT 1>>
+ <ENABLE <QUEUE I-PRINCESS <COND (<PROB 75> 1)
+ (T 2)>>>)>
+ <RTRUE>>
+
+<GLOBAL PRCOUNT 0>
+
+<GLOBAL PRFOLLOW <>>
+
+<GLOBAL PRDIRS
+ <TABLE "south" DRAGON-ROOM "north" P?SOUTH
+ "east" LEDGE-IN-RAVINE "west" P?EAST
+ "south" DEEP-FORD "north" P?SOUTH
+ "east" DARK-TUNNEL "west" P?EAST
+ "south" FORMAL-GARDEN "north" P?SOUTH
+ "in" GAZEBO "out" P?IN>>
+
+<ROUTINE I-UNICORN ()
+ <COND (<EQUAL? ,HERE ,GAZEBO ,FORMAL-GARDEN>
+ <FCLEAR ,GOLD-KEY ,NDESCBIT>
+ <MOVE ,GOLD-KEY ,WINNER>
+ <SCORE-OBJ ,GOLD-KEY>
+ <PUTP ,GOLD-KEY ,P?ACTION 0>
+ <REMOVE ,PRINCESS>
+ <TELL
+"Shyly, a unicorn peeks out of the hedges and approaches the princess. Around
+its neck hangs a gold key. The princess takes the key and, smiling, hands it
+to you. \"It is the least I can do for one who rescued me from a fate I dare
+not contemplate.\" With that, she mounts the unicorn and rides away." CR>)
+ (T
+ <REMOVE ,PRINCESS>
+ <RFALSE>)>>
+
+<ROOM STONE-BRIDGE
+ (IN ROOMS)
+ (DESC "Stone Bridge")
+ (LDESC
+"You are on a north-south bridge spanning a deep ravine. Water flows
+far beneath.")
+ (NORTH TO DRAGON-ROOM)
+ (SOUTH TO COOL-ROOM)
+ (DOWN "It's a long way down.")
+ (FLAGS RLANDBIT)
+ (GLOBAL BRIDGE CHASM)>
+
+<ROOM COOL-ROOM
+ (IN ROOMS)
+ (DESC "Cool Room")
+ (LDESC
+"The air is cool and damp. A path from the southeast splits here; north toward
+a stone bridge, and west into a narrow tunnel. It is from the latter that the
+chill originates.")
+ (SE TO CAROUSEL-ROOM)
+ (NORTH TO STONE-BRIDGE)
+ (WEST TO ICE-ROOM)
+ (FLAGS RLANDBIT)
+ (GLOBAL BRIDGE)>
+
+<ROOM ICE-ROOM
+ (IN ROOMS)
+ (DESC "Ice Room")
+ (EAST TO COOL-ROOM)
+ (WEST TO VOLCANO-BOTTOM IF ICE-MELTED ELSE
+ "You don't even have an ice-pick.")
+ (SOUTH TO GUARDED-ROOM)
+ (FLAGS RLANDBIT)
+ (ACTION ICE-ROOM-F)>
+
+<ROUTINE ICE-ROOM-F (RARG)
+ <COND (<EQUAL? .RARG ,M-LOOK>
+ <TELL
+"This is a large hall of ancient lava, worn smooth by a glacier. Tunnels
+lead east and south.">
+ <COND (,ICE-MELTED
+ <TELL " A damp, scorched passage leads west.">)>
+ <CRLF>)>>
+
+<OBJECT ICE
+ (IN ICE-ROOM)
+ (DESC "glacier")
+ (LDESC "A mass of ice fills the western half of the room.")
+ (SYNONYM ICE MASS GLACIER)
+ (ADJECTIVE COLD ICY)
+ (ACTION ICE-F)>
+
+<ROUTINE ICE-F ()
+ <COND (<VERB? MELT>
+ <TELL "This is a big glacier; you'll need lots of heat." CR>)>> \ No newline at end of file
diff --git a/syntax.zil b/syntax.zil
new file mode 100644
index 0000000..6d7ab15
--- /dev/null
+++ b/syntax.zil
@@ -0,0 +1,390 @@
+"SYNTAX for
+ Mini-Zork II: The Wizard of Frobozz
+ (c) Copyright 1988 Infocom, Inc. All Rights Reserved."
+
+"Buzzwords, Prepositions and Directions"
+
+<BUZZ A AN THE IS AND OF THEN ALL ONE BUT EXCEPT \. \, \" YES NO Y HERE
+ FEEBLE FUMBLE FREEZE FALL FRY FLUORESCE FERMENT FLOAT FIREPROOF
+ FENCE FUDGE FANTASIZE AGAIN G OOPS>
+
+<SYNONYM WITH USING THROUGH THRU>
+<SYNONYM IN INSIDE INTO>
+<SYNONYM ON ONTO>
+<SYNONYM UNDER UNDERNEATH BENEATH BELOW>
+
+<SYNONYM NORTH N>
+<SYNONYM SOUTH S>
+<SYNONYM EAST E>
+<SYNONYM WEST W>
+<SYNONYM DOWN D>
+<SYNONYM UP U>
+<SYNONYM NW NORTHWEST>
+<SYNONYM NE NORTHE>
+<SYNONYM SW SOUTHWEST>
+<SYNONYM SE SOUTHE>
+\^L
+"Game Commands"
+
+<SYNTAX VERBOSE = V-VERBOSE>
+
+<SYNTAX BRIEF = V-BRIEF>
+
+<SYNTAX SUPER = V-SUPER-BRIEF>
+<SYNONYM SUPER SUPERBRIEF>
+
+<SYNTAX DIAGNOSE = V-DIAGNOSE>
+
+<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>
+
+<SYNTAX SCRIPT = V-SCRIPT>
+
+<SYNTAX UNSCRIPT = V-UNSCRIPT>
+
+<SYNTAX VERSION = V-VERSION>
+
+<SYNTAX $VERIFY = V-VERIFY>
+
+<SYNTAX \#RANDOM OBJECT = V-RANDOM>
+
+<SYNTAX \#COMMAND = V-COMMAND-FILE>
+
+<SYNTAX \#RECORD = V-RECORD>
+
+<SYNTAX \#UNRECORD = V-UNRECORD>
+
+;<SYNTAX DEBUG = V-DEBUG>
+\^L
+"Real Verbs"
+
+<SYNTAX ATTACK OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-ATTACK>
+<SYNTAX ATTACK OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) WITH OBJECT
+ (HELD CARRIED HAVE) = V-ATTACK>
+<SYNONYM ATTACK FIGHT HIT KILL MURDER SLAY STAB>
+
+<SYNTAX BLOW OBJECT = V-BLAST>
+<SYNTAX BLOW OUT OBJECT = V-LAMP-OFF>
+<SYNTAX BLOW UP OBJECT WITH OBJECT (FIND TOOLBIT) = V-INFLATE>
+<SYNTAX BLOW UP OBJECT = V-BLAST>
+<SYNONYM BLOW BLAST>
+
+<SYNTAX BURN OBJECT (FIND BURNBIT) WITH OBJECT (FIND FLAMEBIT) (HAVE)
+ = V-BURN PRE-BURN>
+<SYNTAX BURN DOWN OBJECT (FIND BURNBIT) WITH OBJECT (FIND FLAMEBIT) (HAVE)
+ = V-BURN PRE-BURN>
+<SYNONYM BURN IGNITE>
+
+<SYNTAX CLIMB UP OBJECT (FIND RLANDBIT) = V-CLIMB>
+<SYNTAX CLIMB DOWN OBJECT (FIND RLANDBIT) = V-CLIMB-DOWN>
+<SYNTAX CLIMB OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB>
+<SYNTAX CLIMB IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-ENTER PRE-ENTER>
+<SYNTAX CLIMB ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
+<SYNONYM CLIMB SIT>
+
+<SYNTAX CLOSE OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM) = V-CLOSE>
+
+<SYNTAX COMMAND OBJECT (FIND ACTORBIT) = V-COMMAND>
+
+<SYNTAX COUNT OBJECT = V-COUNT>
+
+<SYNTAX CROSS OBJECT = V-WALK-AROUND>
+<SYNONYM CROSS FORD>
+
+<SYNTAX CUT OBJECT WITH OBJECT (FIND WEAPONBIT) (CARRIED HELD) = V-CUT>
+<SYNONYM CUT SLICE>
+
+<SYNTAX CURSE = V-CURSES>
+<SYNTAX CURSE OBJECT (FIND ACTORBIT) = V-CURSES>
+<SYNONYM CURSE SHIT FUCK DAMN>
+
+<SYNTAX DEFLATE OBJECT = V-DEFLATE>
+
+<SYNTAX DESTROY OBJECT WITH OBJECT (HELD CARRIED TAKE) = V-MUNG PRE-MUNG>
+<SYNTAX DESTROY DOWN OBJECT WITH OBJECT (HELD CARRIED TAKE) = V-MUNG PRE-MUNG>
+<SYNONYM DESTROY BREAK SMASH>
+
+<SYNTAX DISEMBARK OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-DISEMBARK>
+
+<SYNTAX DISENCHANT OBJECT = V-DISENCHANT>
+
+<SYNTAX DRINK OBJECT (FIND DRINKBIT) = V-DRINK>
+<SYNTAX DRINK FROM OBJECT (HELD CARRIED) = V-DRINK-FROM>
+
+<SYNTAX DROP OBJECT (HELD MANY HAVE) = V-DROP PRE-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-ON PRE-PUT>
+
+<SYNTAX EAT OBJECT (FIND FOODBIT) (HAVE TAKE) = V-EAT>
+<SYNONYM EAT TASTE BITE>
+
+<SYNTAX ENCHANT OBJECT (ON-GROUND IN-ROOM) = V-ENCHANT>
+
+<SYNTAX ENTER = V-ENTER PRE-ENTER>
+<SYNTAX ENTER OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-ENTER PRE-ENTER>
+<SYNONYM ENTER BOARD>
+
+<SYNTAX EXAMINE OBJECT (MANY) = V-EXAMINE>
+<SYNTAX EXAMINE IN OBJECT (MANY) = V-LOOK-INSIDE>
+<SYNTAX EXAMINE ON OBJECT (MANY) = V-LOOK-INSIDE>
+<SYNONYM EXAMINE DESCRIBE WHAT WHATS>
+
+<SYNTAX EXIT = V-EXIT>
+<SYNTAX EXIT OBJECT = V-EXIT>
+
+<SYNTAX EXTINGUISH OBJECT (FIND ONBIT) (TAKE HAVE) = V-LAMP-OFF>
+<SYNONYM EXTINGUISH DOUSE>
+
+<SYNTAX FILL OBJECT (FIND CONTBIT) WITH OBJECT = V-FILL PRE-FILL>
+<SYNTAX FILL OBJECT (FIND CONTBIT) = V-FILL PRE-FILL>
+
+<SYNTAX FIND OBJECT = V-FIND>
+<SYNONYM FIND WHERE>
+
+<SYNTAX FOLLOW = V-FOLLOW>
+<SYNTAX FOLLOW OBJECT = V-FOLLOW>
+<SYNONYM FOLLOW CHASE>
+
+<SYNTAX GIVE OBJECT (MANY HELD HAVE) TO OBJECT (FIND ACTORBIT) (ON-GROUND)
+ = V-GIVE PRE-GIVE>
+<SYNTAX GIVE OBJECT (FIND ACTORBIT) (ON-GROUND) OBJECT (MANY HELD HAVE)
+ = V-SGIVE>
+<SYNONYM GIVE OFFER FEED>
+
+<SYNTAX HELLO = V-HELLO>
+<SYNTAX HELLO OBJECT = V-HELLO>
+<SYNONYM HELLO HI>
+
+<SYNTAX INCANT = V-INCANT>
+<SYNONYM INCANT CHANT>
+
+<SYNTAX INFLAT OBJECT WITH OBJECT (FIND TOOLBIT) = 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-LEAP>
+<SYNTAX JUMP OFF OBJECT = V-LEAP>
+<SYNONYM JUMP LEAP DIVE>
+
+<SYNTAX KICK OBJECT = V-KICK>
+
+<SYNTAX KISS OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-KISS>
+
+<SYNTAX KNOCK AT OBJECT = V-KNOCK>
+<SYNTAX KNOCK ON OBJECT = V-KNOCK>
+<SYNTAX KNOCK DOWN OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-ATTACK>
+<SYNONYM KNOCK RAP>
+
+<SYNTAX LAUNCH OBJECT (FIND VEHBIT) = V-LAUNCH>
+
+<SYNTAX LEAVE = V-LEAVE>
+<SYNTAX LEAVE OBJECT = V-DROP PRE-DROP>
+
+<SYNTAX LIGHT OBJECT (FIND LIGHTBIT) (TAKE HAVE) = V-LAMP-ON>
+<SYNTAX LIGHT OBJECT (FIND LIGHTBIT) WITH OBJECT (FIND FLAMEBIT)
+ (HELD CARRIED TAKE HAVE) = V-BURN PRE-BURN>
+
+<SYNTAX LISTEN TO OBJECT = V-LISTEN>
+
+<SYNTAX LOCK OBJECT (ON-GROUND IN-ROOM) WITH OBJECT (FIND TOOLBIT) (TAKE)
+ = V-LOCK>
+
+<SYNTAX LOOK = V-LOOK>
+<SYNTAX LOOK AROUND OBJECT (FIND RLANDBIT) = V-LOOK>
+<SYNTAX LOOK UP OBJECT (FIND RLANDBIT) = V-LOOK>
+<SYNTAX LOOK DOWN OBJECT (FIND RLANDBIT) = V-LOOK>
+<SYNTAX LOOK AT OBJECT (MANY) = V-EXAMINE>
+<SYNTAX LOOK ON OBJECT = V-LOOK-INSIDE>
+<SYNTAX LOOK WITH OBJECT (MANY) = V-LOOK-INSIDE>
+<SYNTAX LOOK UNDER OBJECT = V-LOOK-UNDER>
+<SYNTAX LOOK BEHIND OBJECT = V-LOOK-BEHIND>
+<SYNTAX LOOK IN OBJECT (MANY) = V-LOOK-INSIDE>
+<SYNTAX LOOK FOR OBJECT = V-FIND>
+<SYNONYM LOOK L>
+
+<SYNTAX LOWER OBJECT = V-LOWER>
+
+<SYNTAX MELT OBJECT WITH OBJECT (FIND FLAMEBIT) = V-MELT>
+
+<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
+<SYNTAX MOVE OBJECT (HELD MANY HAVE) IN OBJECT = V-PUT PRE-PUT>
+<SYNTAX MOVE OBJECT WITH OBJECT (FIND TOOLBIT) = V-TURN>
+<SYNONYM MOVE ROLL>
+
+<SYNTAX OPEN OBJECT (FIND DOORBIT) = V-OPEN>
+<SYNTAX OPEN UP OBJECT (FIND DOORBIT) = V-OPEN>
+<SYNTAX OPEN OBJECT (FIND DOORBIT) WITH OBJECT (FIND TOOLBIT) (HAVE) = V-OPEN>
+
+<SYNTAX PICK OBJECT = V-PICK>
+<SYNTAX PICK OBJECT WITH OBJECT = V-PICK>
+<SYNTAX PICK UP OBJECT (FIND TAKEBIT) (ON-GROUND MANY) = V-TAKE PRE-TAKE>
+
+<SYNTAX PLAY OBJECT = V-PLAY>
+
+<SYNTAX POKE OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM)
+ WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-MUNG PRE-MUNG>
+<SYNONYM POKE PUNCTURE>
+
+<SYNTAX POUR OBJECT (HELD CARRIED) = V-DROP PRE-DROP>
+<SYNTAX POUR OBJECT (HELD CARRIED) IN OBJECT = V-DROP PRE-DROP>
+<SYNTAX POUR OBJECT (HELD CARRIED) ON OBJECT = V-POUR-ON>
+<SYNTAX POUR OBJECT (HELD CARRIED) FROM OBJECT = V-DROP PRE-DROP>
+<SYNONYM POUR SPILL>
+
+<SYNTAX PULL OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
+<SYNTAX PULL ON OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
+<SYNTAX PULL UP OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
+<SYNONYM PULL TUG YANK>
+
+<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
+<SYNTAX PUSH ON OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
+<SYNTAX PUSH OBJECT WITH OBJECT (FIND TOOLBIT) = V-TURN>
+<SYNTAX PUSH OBJECT UNDER OBJECT = V-PUT-UNDER>
+<SYNONYM PUSH PRESS>
+
+<SYNTAX PUT OBJECT (HELD MANY HAVE) IN OBJECT = V-PUT PRE-PUT>
+<SYNTAX PUT OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT-ON PRE-PUT>
+<SYNTAX PUT DOWN OBJECT (HELD MANY) = V-DROP PRE-DROP>
+<SYNTAX PUT OBJECT (HELD HAVE) UNDER OBJECT = V-PUT-UNDER>
+<SYNTAX PUT OUT OBJECT (FIND ONBIT) (TAKE HAVE) = V-LAMP-OFF>
+<SYNONYM PUT INSERT PLACE HIDE>
+
+<SYNTAX RAISE OBJECT = V-RAISE>
+<SYNTAX RAISE UP OBJECT = V-RAISE>
+<SYNONYM RAISE LIFT>
+
+<SYNTAX RAPE OBJECT (FIND ACTORBIT) = V-RAPE>
+<SYNONYM RAPE MOLEST>
+
+<SYNTAX READ OBJECT (FIND READBIT) (TAKE) = V-READ PRE-READ>
+<SYNTAX READ FROM OBJECT (FIND READBIT) (TAKE) = V-READ PRE-READ>
+<SYNONYM READ SKIM>
+
+<SYNTAX RUB OBJECT = V-RUB>
+<SYNTAX RUB OBJECT WITH OBJECT = V-RUB>
+<SYNONYM RUB TOUCH FEEL PAT PET>
+
+<SYNTAX SAY = V-SAY>
+<SYNTAX SAY OBJECT = V-SAY>
+<SYNONYM SAY ANSWER REPLY>
+
+<SYNTAX SEARCH OBJECT = V-SEARCH>
+<SYNTAX SEARCH IN OBJECT = V-SEARCH>
+<SYNTAX SEARCH FOR OBJECT = V-FIND>
+
+<SYNTAX SHAKE OBJECT (HAVE) = V-SHAKE>
+
+<SYNTAX SKIP = V-SKIP>
+<SYNONYM SKIP HOP>
+
+<SYNTAX SLIDE OBJECT UNDER OBJECT = V-PUT-UNDER>
+
+<SYNTAX SMELL OBJECT = V-SMELL>
+
+<SYNTAX STAND = V-STAND>
+<SYNTAX STAND UP OBJECT (FIND RLANDBIT) = V-STAND>
+
+<SYNTAX STRIKE OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) WITH OBJECT
+ (FIND WEAPONBIT) (HAVE) = V-ATTACK>
+<SYNTAX STRIKE OBJECT = V-STRIKE>
+
+<SYNTAX SWIM = V-SWIM>
+<SYNTAX SWIM IN OBJECT = V-SWIM>
+<SYNTAX SWIM ACROSS OBJECT = V-SWIM>
+<SYNONYM SWIM WADE>
+
+<SYNTAX SWING OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-SWING>
+<SYNTAX SWING OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
+ AT OBJECT (FIND ACTORBIT) (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-ENTER PRE-ENTER>
+<SYNTAX TAKE OUT OBJECT (FIND RLANDBIT) (ON-GROUND IN-ROOM) = V-DISEMBARK>
+<SYNTAX TAKE ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
+<SYNTAX TAKE UP OBJECT (FIND RLANDBIT) = 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>
+<SYNONYM TAKE GET HOLD CARRY REMOVE GRAB CATCH>
+
+<SYNTAX TALK TO OBJECT (FIND ACTORBIT) (IN-ROOM) = V-TELL>
+
+<SYNTAX TELL OBJECT (FIND ACTORBIT) (IN-ROOM) = V-TELL>
+<SYNTAX TELL OBJECT (FIND ACTORBIT) (IN-ROOM) ABOUT OBJECT = V-TELL>
+<SYNONYM TELL ASK>
+
+<SYNTAX THROW OBJECT (HELD CARRIED HAVE) AT OBJECT (FIND ACTORBIT)
+ (ON-GROUND IN-ROOM) = V-THROW>
+<SYNTAX THROW OBJECT (HELD CARRIED HAVE) WITH OBJECT (FIND ACTORBIT)
+ (ON-GROUND IN-ROOM) = V-THROW>
+<SYNTAX THROW OBJECT (HELD CARRIED HAVE) IN OBJECT = V-PUT PRE-PUT>
+<SYNTAX THROW OBJECT (HELD CARRIED HAVE) ON OBJECT = V-PUT-ON PRE-PUT>
+<SYNTAX THROW OBJECT (HELD CARRIED HAVE) OFF OBJECT = V-THROW-OFF>
+<SYNTAX THROW OBJECT (HELD CARRIED HAVE) OVER OBJECT = V-THROW-OFF>
+<SYNONYM THROW HURL TOSS>
+
+<SYNTAX TIE OBJECT TO OBJECT = V-TIE>
+<SYNTAX TIE UP OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) WITH OBJECT
+ (FIND TOOLBIT) (HAVE) = V-TIE-UP>
+<SYNONYM TIE FASTEN SECURE ATTACH>
+
+<SYNTAX TURN OBJECT WITH OBJECT = V-TURN>
+<SYNTAX TURN ON OBJECT (FIND LIGHTBIT) = V-LAMP-ON>
+<SYNTAX TURN ON OBJECT WITH OBJECT (HAVE) = V-LAMP-ON>
+<SYNTAX TURN OFF OBJECT (FIND ONBIT) (TAKE HAVE) = V-LAMP-OFF>
+<SYNONYM TURN SHUT>
+
+<SYNTAX UNLOCK OBJECT (ON-GROUND IN-ROOM) WITH OBJECT (FIND TOOLBIT) (TAKE)
+ = V-UNLOCK>
+
+<SYNTAX UNTIE OBJECT = V-UNTIE>
+<SYNTAX UNTIE OBJECT FROM OBJECT = V-UNTIE>
+<SYNONYM UNTIE FREE RELEASE UNFASTEN UNATTACH UNHOOK>
+
+<SYNTAX WAIT = V-WAIT>
+<SYNONYM WAIT Z>
+
+<SYNTAX WAKE OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-ALARM>
+<SYNTAX WAKE UP OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-ALARM>
+<SYNONYM WAKE AWAKE>
+
+<SYNTAX WALK = V-WALK-AROUND>
+<SYNTAX WALK OBJECT = V-WALK>
+<SYNTAX WALK AWAY OBJECT = V-WALK>
+<SYNTAX WALK IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-ENTER PRE-ENTER>
+<SYNTAX WALK WITH OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-ENTER PRE-ENTER>
+<SYNTAX WALK ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-ENTER PRE-ENTER>
+<SYNTAX WALK OVER OBJECT = V-LEAP>
+<SYNTAX WALK TO OBJECT = V-WALK-TO>
+<SYNTAX WALK AROUND OBJECT (FIND RLANDBIT) = V-WALK-AROUND>
+<SYNTAX WALK UP OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB>
+<SYNTAX WALK DOWN OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
+<SYNONYM WALK GO RUN PROCEED STEP>
+
+<SYNTAX WAVE OBJECT (HELD CARRIED TAKE HAVE) = V-WAVE>
+<SYNTAX WAVE OBJECT (HELD CARRIED TAKE HAVE) AT OBJECT = V-WAVE>
+<SYNTAX WAVE AT OBJECT = V-WAVE>
+<SYNONYM WAVE POINT>
+
+<SYNTAX YELL = V-YELL>
+<SYNONYM YELL SCREAM SHOUT>
+
+<SYNTAX ZORK = V-ZORK> \ No newline at end of file
diff --git a/verbs.zabstr b/verbs.zabstr
new file mode 100644
index 0000000..4b55cff
--- /dev/null
+++ b/verbs.zabstr
@@ -0,0 +1,158 @@
+
+<GLOBAL VERBOSITY 1>
+<DEFINE-ROUTINE V-VERBOSE>
+<DEFINE-ROUTINE V-BRIEF>
+<DEFINE-ROUTINE V-SUPER-BRIEF>
+<DEFINE-ROUTINE V-DIAGNOSE>
+<DEFINE-ROUTINE V-INVENTORY>
+<DEFINE-ROUTINE FINISH>
+<DEFINE-ROUTINE V-QUIT>
+<DEFINE-ROUTINE V-RESTART>
+<DEFINE-ROUTINE DO-YOU-WISH>
+<DEFINE-ROUTINE YES?>
+<DEFINE-ROUTINE V-RESTORE>
+<DEFINE-ROUTINE V-SAVE>
+<DEFINE-ROUTINE V-SCORE>
+<GLOBAL SCORE 0>
+<DEFINE-ROUTINE SCORE-OBJ>
+<DEFINE-ROUTINE V-SCRIPT>
+<DEFINE-ROUTINE INTERACTION>
+<DEFINE-ROUTINE V-UNSCRIPT>
+<DEFINE-ROUTINE V-VERSION>
+<DEFINE-ROUTINE V-VERIFY>
+<DEFINE-ROUTINE V-COMMAND-FILE>
+<DEFINE-ROUTINE V-RANDOM>
+<DEFINE-ROUTINE V-RECORD>
+<DEFINE-ROUTINE V-UNRECORD>
+<DEFINE-ROUTINE V-ALARM>
+<DEFINE-ROUTINE V-ATTACK>
+<DEFINE-ROUTINE V-BLAST>
+<DEFINE-ROUTINE PRE-BURN>
+<DEFINE-ROUTINE V-BURN>
+<DEFINE-ROUTINE V-CLIMB-DOWN>
+<DEFINE-ROUTINE V-CLIMB>
+<DEFINE-ROUTINE V-CLIMB-ON>
+<DEFINE-ROUTINE V-CLOSE>
+<DEFINE-ROUTINE V-COMMAND>
+<DEFINE-ROUTINE V-COUNT>
+<DEFINE-ROUTINE V-CURSES>
+<DEFINE-ROUTINE V-CUT>
+<DEFINE-ROUTINE V-DEFLATE>
+<DEFINE-ROUTINE V-DISEMBARK>
+<DEFINE-ROUTINE V-DISENCHANT>
+<DEFINE-ROUTINE V-DRINK>
+<DEFINE-ROUTINE V-DRINK-FROM>
+<DEFINE-ROUTINE PRE-DROP>
+<DEFINE-ROUTINE V-DROP>
+<DEFINE-ROUTINE V-EAT>
+<DEFINE-ROUTINE HIT-SPOT>
+<DEFINE-ROUTINE V-ENCHANT>
+<DEFINE-ROUTINE REMOVE-CAREFULLY>
+<DEFINE-ROUTINE PRE-ENTER>
+<DEFINE-ROUTINE V-ENTER>
+<DEFINE-ROUTINE V-EXAMINE>
+<DEFINE-ROUTINE V-EXIT>
+<DEFINE-ROUTINE PRE-FILL>
+<DEFINE-ROUTINE V-FILL>
+<DEFINE-ROUTINE V-FIND>
+<DEFINE-ROUTINE V-FOLLOW>
+<DEFINE-ROUTINE PRE-GIVE>
+<DEFINE-ROUTINE V-GIVE>
+<DEFINE-ROUTINE V-HELLO>
+<DEFINE-ROUTINE V-INCANT>
+<DEFINE-ROUTINE I-SPELL>
+<DEFINE-ROUTINE V-INFLATE>
+<DEFINE-ROUTINE V-KICK>
+<DEFINE-ROUTINE V-KISS>
+<DEFINE-ROUTINE V-KNOCK>
+<DEFINE-ROUTINE V-LAMP-OFF>
+<DEFINE-ROUTINE V-LAMP-ON>
+<DEFINE-ROUTINE V-LAUNCH>
+<DEFINE-ROUTINE V-LEAP>
+<DEFINE-ROUTINE V-LEAVE>
+<DEFINE-ROUTINE V-LISTEN>
+<DEFINE-ROUTINE V-LOCK>
+<DEFINE-ROUTINE V-LOOK>
+<DEFINE-ROUTINE V-LOOK-BEHIND>
+<DEFINE-ROUTINE V-LOOK-INSIDE>
+<DEFINE-ROUTINE V-LOOK-UNDER>
+<DEFINE-ROUTINE V-LOWER>
+<DEFINE-ROUTINE V-MELT>
+<DEFINE-ROUTINE V-MOVE>
+<DEFINE-ROUTINE PRE-MUNG>
+<DEFINE-ROUTINE V-MUNG>
+<DEFINE-ROUTINE V-OPEN>
+<DEFINE-ROUTINE V-PICK>
+<DEFINE-ROUTINE V-PLAY>
+<DEFINE-ROUTINE V-POUR-ON>
+<DEFINE-ROUTINE V-PUSH>
+<DEFINE-ROUTINE PRE-PUT>
+<DEFINE-ROUTINE V-PUT>
+<DEFINE-ROUTINE V-PUT-ON>
+<DEFINE-ROUTINE V-PUT-UNDER>
+<DEFINE-ROUTINE V-RAISE>
+<DEFINE-ROUTINE V-RAPE>
+<DEFINE-ROUTINE PRE-READ>
+<DEFINE-ROUTINE V-READ>
+<DEFINE-ROUTINE V-RUB>
+<DEFINE-ROUTINE V-SAY>
+<DEFINE-ROUTINE V-SEARCH>
+<DEFINE-ROUTINE V-SGIVE>
+<DEFINE-ROUTINE V-SHAKE>
+<DEFINE-ROUTINE V-SKIP>
+<DEFINE-ROUTINE V-SMELL>
+<DEFINE-ROUTINE V-STAND>
+<DEFINE-ROUTINE V-STRIKE>
+<DEFINE-ROUTINE V-SWIM>
+<DEFINE-ROUTINE V-SWING>
+<DEFINE-ROUTINE PRE-TAKE>
+<DEFINE-ROUTINE V-TAKE>
+<DEFINE-ROUTINE V-TELL>
+<DEFINE-ROUTINE V-THROW>
+<DEFINE-ROUTINE V-THROW-OFF>
+<DEFINE-ROUTINE V-TIE>
+<DEFINE-ROUTINE V-TIE-UP>
+<DEFINE-ROUTINE V-TURN>
+<DEFINE-ROUTINE V-UNLOCK>
+<DEFINE-ROUTINE V-UNTIE>
+<DEFINE-ROUTINE V-WAIT>
+<DEFINE-ROUTINE V-WALK>
+<DEFINE-ROUTINE V-WALK-AROUND>
+<DEFINE-ROUTINE V-WALK-TO>
+<DEFINE-ROUTINE V-WAVE>
+<DEFINE-ROUTINE V-YELL>
+<DEFINE-ROUTINE V-ZORK>
+<GLOBAL INDENTS <TABLE "" " " " " " " " " " ">>
+<GLOBAL LIT <>>
+<DEFINE-ROUTINE DESCRIBE-ROOM>
+<DEFINE-ROUTINE DESCRIBE-OBJECTS>
+<GLOBAL DESC-OBJECT <>>
+<DEFINE-ROUTINE DESCRIBE-OBJECT>
+<DEFINE-ROUTINE PRINT-CONTENTS>
+<DEFINE-ROUTINE PRINT-CONT>
+<DEFINE-ROUTINE FIRSTER>
+<DEFINE-ROUTINE SEE-INSIDE?>
+<GLOBAL DEAD <>>
+<GLOBAL DEATHS 0>
+<DEFINE-ROUTINE JIGS-UP>
+<CONSTANT REXIT 0>
+<CONSTANT UEXIT 1>
+<CONSTANT NEXIT 2>
+<CONSTANT FEXIT 3>
+<CONSTANT CEXIT 4>
+<CONSTANT DEXIT 5>
+<CONSTANT NEXITSTR 0>
+<CONSTANT FEXITFCN 0>
+<CONSTANT CEXITFLAG 1>
+<CONSTANT CEXITSTR 1>
+<CONSTANT DEXITOBJ 1>
+<CONSTANT DEXITSTR 1>
+<DEFINE-ROUTINE NO-GO-TELL>
+<DEFINE-ROUTINE GOTO>
+<GLOBAL FUMBLE-NUMBER 7>
+<GLOBAL FUMBLE-PROB 8>
+<GLOBAL LOAD-ALLOWED 100>
+<DEFINE-ROUTINE ITAKE>
+<DEFINE-ROUTINE IDROP>
+<DEFINE-ROUTINE CCOUNT>
+<DEFINE-ROUTINE WEIGHT> \ No newline at end of file
diff --git a/verbs.zap b/verbs.zap
new file mode 100644
index 0000000..a5835e8
--- /dev/null
+++ b/verbs.zap
@@ -0,0 +1,1818 @@
+
+
+ .FUNCT V-VERBOSE
+ SET 'VERBOSITY,2
+ PRINTR "Maximum verbosity."
+
+
+ .FUNCT V-BRIEF
+ SET 'VERBOSITY,1
+ PRINTR "Brief descriptions."
+
+
+ .FUNCT V-SUPER-BRIEF
+ SET 'VERBOSITY,0
+ PRINTR "Superbrief descriptions."
+
+
+ .FUNCT V-DIAGNOSE
+ PRINTI "You are "
+ ZERO? DEAD /?CCL5
+ PRINTI "dead"
+ JUMP ?CND3
+?CCL5: EQUAL? SPELL?,S-FERMENT \?CCL9
+ PRINTI "drunk"
+ JUMP ?CND3
+?CCL9: EQUAL? SPELL?,S-FEEBLE \?CCL13
+ PRINTI "unusually"
+ JUMP ?CND3
+?CCL13: EQUAL? SPELL?,S-FLOAT \?CCL17
+ PRINTI "floating"
+ JUMP ?CND3
+?CCL17: EQUAL? SPELL?,S-FREEZE \?PRG24
+ PRINTI "frozen stiff"
+ JUMP ?CND3
+?PRG24: PRINTI "in perfect health"
+?CND3: ZERO? DEATHS /?PRG41
+ PRINTI ". You have been killed "
+ EQUAL? DEATHS,1 \?CCL32
+ PRINTI "once"
+ JUMP ?PRG41
+?CCL32: EQUAL? DEATHS,2 \?PRG39
+ PRINTI "twice"
+ JUMP ?PRG41
+?PRG39: PRINTI "an awful lot"
+?PRG41: PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT V-INVENTORY
+ FIRST? WINNER \?PRG4
+ CALL PRINT-CONT,WINNER
+ RSTACK
+?PRG4: PRINTR "You are empty-handed."
+
+
+ .FUNCT FINISH,WRD
+ CALL V-SCORE
+?PRG1: CRLF
+ PRINTI "Would you like to start over, restore a saved position, or stop playing?
+(Type RESTART, RESTORE, or QUIT):
+>"
+ READ P-INBUF,P-LEXV
+ GET P-LEXV,1 >WRD
+ EQUAL? WRD,W?RESTART \?CCL7
+ RESTART
+ PRINTI "Failed."
+ CRLF
+ JUMP ?PRG1
+?CCL7: EQUAL? WRD,W?RESTORE \?CCL11
+ RESTORE
+ PRINTI "Failed."
+ CRLF
+ JUMP ?PRG1
+?CCL11: EQUAL? WRD,W?QUIT,W?Q \?PRG1
+ QUIT
+ JUMP ?PRG1
+
+
+ .FUNCT V-QUIT,SCOR
+ CALL DO-YOU-WISH,STR?1
+ ZERO? STACK /?PRG4
+ QUIT
+ RTRUE
+?PRG4: PRINTR "Ok."
+
+
+ .FUNCT V-RESTART
+ CALL DO-YOU-WISH,STR?2
+ ZERO? STACK /FALSE
+ PRINTI "Restarting."
+ CRLF
+ RESTART
+ PRINTR "Failed."
+
+
+ .FUNCT DO-YOU-WISH,STRING
+ CALL V-SCORE
+ PRINTI "Do you wish to "
+ PRINT STRING
+ PRINTI "? (Y is affirmative): "
+ CALL YES?
+ ZERO? STACK /FALSE
+ RTRUE
+
+
+ .FUNCT YES?
+ PRINTC 62
+ READ P-INBUF,P-LEXV
+ GET P-LEXV,1
+ EQUAL? STACK,W?YES,W?Y /TRUE
+ RFALSE
+
+
+ .FUNCT V-RESTORE
+ RESTORE
+ PRINTR "Failed."
+
+
+ .FUNCT V-SAVE
+ SAVE \?PRG6
+ PRINTR "Ok."
+?PRG6: PRINTR "Failed."
+
+
+ .FUNCT V-SCORE
+ PRINTI "Your score is "
+ PRINTN SCORE
+ PRINTI " (out of 400 points), in "
+ PRINTN MOVES
+ PRINTI " move"
+ EQUAL? MOVES,1 /?PRG7
+ PRINTC 115
+?PRG7: PRINTI ". This score gives you the rank of "
+ EQUAL? SCORE,400 \?CCL11
+ PRINTI "Wizard"
+ JUMP ?PRG32
+?CCL11: GRTR? SCORE,320 \?CCL15
+ PRINTI "Master Adventurer"
+ JUMP ?PRG32
+?CCL15: GRTR? SCORE,240 \?CCL19
+ PRINTI "Senior Adventurer"
+ JUMP ?PRG32
+?CCL19: GRTR? SCORE,160 \?CCL23
+ PRINTI "Junior Adventurer"
+ JUMP ?PRG32
+?CCL23: GRTR? SCORE,80 \?PRG30
+ PRINTI "Amateur Adventurer"
+ JUMP ?PRG32
+?PRG30: PRINTI "Beginner"
+?PRG32: PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT SCORE-OBJ,OBJ,TEMP
+ GETP OBJ,P?VALUE >TEMP
+ GRTR? TEMP,0 \FALSE
+ ADD SCORE,TEMP >SCORE
+ PUTP OBJ,P?VALUE,0
+ RTRUE
+
+
+ .FUNCT V-SCRIPT
+ GET 0,8
+ BOR STACK,1
+ PUT 0,8,STACK
+ CALL INTERACTION,STR?3
+ RSTACK
+
+
+ .FUNCT INTERACTION,STRING
+ PRINTI "Here "
+ PRINT STRING
+ PRINTI "s a transcript of interaction with"
+ CRLF
+ CALL V-VERSION
+ RSTACK
+
+
+ .FUNCT V-UNSCRIPT
+ CALL INTERACTION,STR?4
+ GET 0,8
+ BAND STACK,-2
+ PUT 0,8,STACK
+ RTRUE
+
+
+ .FUNCT V-VERSION,CNT=17
+ PRINTI "Mini-Zork II: The Wizard of Frobozz
+Copyright (c) 1988, Infocom, Inc. All rights reserved.
+ZORK is a registered trademark of Infocom, Inc.
+Release "
+ GET 0,1
+ BAND STACK,2047
+ PRINTN STACK
+ PRINTI " / Serial number "
+?PRG5: IGRTR? 'CNT,23 /?REP6
+ GETB 0,CNT
+ PRINTC STACK
+ JUMP ?PRG5
+?REP6: CRLF
+ RTRUE
+
+
+ .FUNCT V-VERIFY
+ PRINTI "Verifying..."
+ CRLF
+ VERIFY \?PRG8
+ PRINTR "Correct."
+?PRG8: CRLF
+ PRINTR "** Failed! **"
+
+
+ .FUNCT V-COMMAND-FILE
+ DIRIN 1
+ RTRUE
+
+
+ .FUNCT V-RANDOM
+ EQUAL? PRSO,INTNUM /?CCL3
+ PRINTR "Illegal call to #RND."
+?CCL3: SUB 0,P-NUMBER
+ RANDOM STACK
+ RTRUE
+
+
+ .FUNCT V-RECORD
+ DIROUT 4
+ RTRUE
+
+
+ .FUNCT V-UNRECORD
+ DIROUT -4
+ RTRUE
+
+
+ .FUNCT V-ALARM
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " isn't sleeping."
+
+
+ .FUNCT V-ATTACK
+ FSET? PRSO,ACTORBIT /?CND1
+ PRINTI "Fight a "
+ PRINTD PRSO
+ PRINTR "!?!"
+?CND1: ZERO? PRSI \?PRG10
+ IN? ADVENTURER,SWORD \?CCL9
+ SET 'PRSI,SWORD
+ JUMP ?PRG10
+?CCL9: SET 'PRSI,HANDS
+?PRG10: PRINTI "Trying to attack a "
+ PRINTD PRSO
+ PRINTI " with "
+ EQUAL? PRSI,HANDS \?PRG17
+ PRINTI "your bare hands"
+ JUMP ?PRG19
+?PRG17: PRINTI "a "
+ PRINTD PRSI
+?PRG19: PRINTR " is suicidal."
+
+
+ .FUNCT V-BLAST
+ PRINTR "You can't blast anything by using words."
+
+
+ .FUNCT PRE-BURN
+ ZERO? PRSI \?CCL3
+ PRINTR "You didn't say with what!"
+?CCL3: FSET? PRSI,FLAMEBIT \?PRG10
+ FSET? PRSI,ONBIT /FALSE
+?PRG10: PRINTI "With a "
+ PRINTD PRSI
+ PRINTR "??!?"
+
+
+ .FUNCT V-BURN
+ LOC PRSO
+ EQUAL? STACK,RECEPTACLE \?CCL3
+ CALL BALLOON-BURN
+ RTRUE
+?CCL3: FSET? PRSO,BURNBIT \?PRG24
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTI " catches fire"
+ CALL REMOVE-CAREFULLY,PRSO
+ IN? PRSO,WINNER /?PRG13
+ IN? WINNER,PRSO \?PRG22
+?PRG13: PRINTI ". Unfortunately, you were "
+ IN? WINNER,PRSO \?PRG20
+ PRINTI "in"
+ JUMP ?CND15
+?PRG20: PRINTI "holding"
+?CND15: CALL JIGS-UP,STR?5
+ RSTACK
+?PRG22: PRINTR " and is consumed."
+?PRG24: PRINTI "You can't burn a "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT V-CLIMB-DOWN
+ CALL DO-WALK,P?DOWN
+ RSTACK
+
+
+ .FUNCT V-CLIMB
+ CALL DO-WALK,P?UP
+ RSTACK
+
+
+ .FUNCT V-CLIMB-ON
+ FSET? PRSO,VEHBIT \?PRG4
+ CALL PERFORM,V?ENTER,PRSO
+ RTRUE
+?PRG4: PRINTI "You can't climb onto the "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT V-CLOSE
+ FSET? PRSO,DOORBIT \?CCL3
+ FSET? PRSO,OPENBIT \?PRG9
+ FCLEAR PRSO,OPENBIT
+ PRINTR "Closed."
+?PRG9: PRINT ALREADY
+ RTRUE
+?CCL3: FSET? PRSO,SURFACEBIT /?PRG15
+ FSET? PRSO,CONTBIT /?CCL12
+?PRG15: PRINTI "You can't close a "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+?CCL12: FSET? PRSO,OPENBIT \?PRG21
+ FCLEAR PRSO,OPENBIT
+ PRINTI "Closed."
+ CRLF
+ CALL NOW-DARK?
+ RSTACK
+?PRG21: PRINT ALREADY
+ RTRUE
+
+
+ .FUNCT V-COMMAND
+ FSET? PRSO,ACTORBIT \?PRG6
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " pays no attention."
+?PRG6: PRINTR "You cannot talk to that!"
+
+
+ .FUNCT V-COUNT
+ PRINTR "You have lost your mind."
+
+
+ .FUNCT V-CURSES
+ PRINTR "Such language in a high-class establishment like this!"
+
+
+ .FUNCT V-CUT
+ FSET? PRSO,ACTORBIT \?CCL3
+ CALL PERFORM,V?ATTACK,PRSO,PRSI
+ RSTACK
+?CCL3: FSET? PRSI,WEAPONBIT /?CCL5
+ PRINTI "The ""cutting edge"" of a "
+ PRINTD PRSI
+ PRINTR " is inadequate."
+?CCL5: FSET? PRSO,BURNBIT \?PRG17
+ IN? WINNER,PRSO \?CCL12
+ PRINTR "You're in it!"
+?CCL12: CALL REMOVE-CAREFULLY,PRSO
+ PRINTI "You skillfully slice the "
+ PRINTD PRSO
+ PRINTR " into slivers, which blow away."
+?PRG17: PRINTI "Strange concept, cutting the "
+ PRINTD PRSO
+ PRINTR "...."
+
+
+ .FUNCT V-DEFLATE
+ PRINTR "Come on, now!"
+
+
+ .FUNCT V-DISEMBARK
+ EQUAL? PRSO,ROOMS \?CCL3
+ LOC WINNER
+ FSET? STACK,VEHBIT \?CCL3
+ LOC WINNER
+ CALL PERFORM,V?DISEMBARK,STACK
+ RTRUE
+?CCL3: LOC WINNER
+ EQUAL? STACK,PRSO /?CCL7
+ PRINT LOOK-AROUND
+ RETURN 2
+?CCL7: FSET? HERE,RLANDBIT \?PRG16
+ MOVE WINNER,HERE
+ PRINTR "You are on your own feet again."
+?PRG16: PRINTI "Getting out here would be fatal."
+ CRLF
+ RETURN 2
+
+
+ .FUNCT V-DISENCHANT
+ IN? PRSO,HERE \TRUE
+ EQUAL? SPELL-USED,W?FEEBLE,W?FUMBLE /?CTR4
+ EQUAL? SPELL-USED,W?FREEZE,W?FALL,W?FERMENT /?CTR4
+ EQUAL? SPELL-USED,W?FENCE,W?FANTASIZE \?CCL5
+?CTR4: FSET? PRSO,ACTORBIT \FALSE
+ EQUAL? SPELL-USED,W?FEEBLE \?CCL14
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " seems stronger now."
+?CCL14: EQUAL? SPELL-USED,W?FUMBLE \?CCL18
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " no longer appears clumsy."
+?CCL18: EQUAL? SPELL-USED,W?FREEZE \?CCL22
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " moves again."
+?CCL22: EQUAL? SPELL-USED,W?FERMENT \FALSE
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " stops swaying."
+?CCL5: EQUAL? SPELL-USED,W?FLOAT \?CCL30
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " sinks to the ground."
+?CCL30: EQUAL? SPELL-USED,W?FUDGE \FALSE
+ PRINTR "The sweet smell has dispersed."
+
+
+ .FUNCT V-DRINK
+ CALL V-EAT
+ RSTACK
+
+
+ .FUNCT V-DRINK-FROM
+ PRINTR "How peculiar!"
+
+
+ .FUNCT PRE-DROP
+ LOC WINNER
+ EQUAL? PRSO,STACK \FALSE
+ CALL PERFORM,V?DISEMBARK,PRSO
+ RTRUE
+
+
+ .FUNCT V-DROP
+ CALL IDROP
+ ZERO? STACK /FALSE
+ PRINTR "Dropped."
+
+
+ .FUNCT V-EAT
+ FSET? PRSO,FOODBIT \?CCL3
+ CALL HIT-SPOT
+ RSTACK
+?CCL3: EQUAL? PRSO,GLOBAL-WATER \?CCL5
+ CALL HIT-SPOT
+ RSTACK
+?CCL5: EQUAL? PRSO,WATER \?PRG13
+ LOC PRSO
+ CALL HELD?,STACK
+ ZERO? STACK \?CCL10
+ PRINTI "You're not holding the "
+ LOC PRSO
+ PRINTD STACK
+ PRINT PERIOD-CR
+ RTRUE
+?CCL10: CALL HIT-SPOT
+ RSTACK
+?PRG13: PRINTI "It's doubtful the "
+ PRINTD PRSO
+ PRINTR " would agree with you."
+
+
+ .FUNCT HIT-SPOT
+ EQUAL? PRSO,GLOBAL-WATER /?PRG3
+ CALL REMOVE-CAREFULLY,PRSO
+?PRG3: PRINTR "That really hit the spot."
+
+
+ .FUNCT V-ENCHANT
+ ZERO? WAND-ON /?CND1
+ SET 'SPELL-VICTIM,WAND-ON
+?CND1: ZERO? SPELL-VICTIM /?CCL5
+ ZERO? SPELL-USED \?CND6
+ PRINTR "You must be more specific."
+?CND6: EQUAL? SPELL-USED,W?FEEBLE,W?FUMBLE /?CTR11
+ EQUAL? SPELL-USED,W?FREEZE,W?FALL,W?FERMENT /?CTR11
+ EQUAL? SPELL-USED,W?FENCE,W?FANTASIZE \?CCL12
+?CTR11: FSET? PRSO,ACTORBIT \?PRG21
+ PRINT WAND-STOPS-GLOWING
+ RTRUE
+?PRG21: PRINTI "That might have done something, but it's hard to tell with a "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+?CCL12: EQUAL? SPELL-USED,W?FUDGE \?CCL24
+ PRINTR "An odor of chocolate permeates the room."
+?CCL24: EQUAL? SPELL-USED,W?FLUORESCE \?CCL28
+ FSET PRSO,LIGHTBIT
+ FSET PRSO,ONBIT
+ SET 'LIT,TRUE-VALUE
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " begins to glow."
+?CCL28: EQUAL? SPELL-USED,W?FLOAT \?CCL32
+ FSET? PRSO,TAKEBIT \?CCL32
+ EQUAL? SPELL-VICTIM,COLLAR \?PRG39
+ IN? COLLAR,CERBERUS \?PRG39
+ SET 'SPELL-VICTIM,CERBERUS
+?PRG39: PRINTI "The "
+ PRINTD PRSO
+ PRINTR " floats serenely in midair."
+?CCL32: EQUAL? SPELL-USED,W?FRY \?CCL42
+ FSET? PRSO,TAKEBIT \?CCL42
+ SET 'SPELL-HANDLED?,TRUE-VALUE
+ CALL REMOVE-CAREFULLY,PRSO
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " goes up in a puff of smoke."
+?CCL42: SET 'SPELL-VICTIM,FALSE-VALUE
+ PRINT WAND-STOPS-GLOWING
+ RTRUE
+?CCL5: SET 'SPELL-VICTIM,FALSE-VALUE
+ PRINTR "Nothing happens."
+
+
+ .FUNCT REMOVE-CAREFULLY,OBJ,OLIT
+ EQUAL? OBJ,P-IT-OBJECT \?CND1
+ SET 'P-IT-OBJECT,FALSE-VALUE
+?CND1: SET 'OLIT,LIT
+ REMOVE OBJ
+ CALL NOW-DARK?
+ RSTACK
+
+
+ .FUNCT PRE-ENTER,M
+ ZERO? PRSO \?CCL3
+ CALL DO-WALK,P?IN
+ RETURN 2
+?CCL3: FSET? PRSO,DOORBIT \?CCL5
+ CALL OTHER-SIDE,PRSO >M
+ ZERO? M /?CCL5
+ CALL DO-WALK,M
+ RETURN 2
+?CCL5: FSET? PRSO,VEHBIT \?CCL9
+ LOC ADVENTURER
+ FSET? STACK,VEHBIT \FALSE
+ PRINT LOOK-AROUND
+ RETURN 2
+?CCL9: EQUAL? PRSO,GLOBAL-WATER,WATER /FALSE
+ PRINTI "You hit your head against the "
+ PRINTD PRSO
+ PRINTI " as you attempt this feat."
+ CRLF
+ RETURN 2
+
+
+ .FUNCT V-ENTER
+ PRINTI "You are now in the "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ MOVE WINNER,PRSO
+ GETP PRSO,P?ACTION
+ CALL STACK,M-ENTER
+ RTRUE
+
+
+ .FUNCT V-EXAMINE
+ GETP PRSO,P?TEXT
+ ZERO? STACK /?CCL3
+ GETP PRSO,P?TEXT
+ PRINT STACK
+ CRLF
+ RTRUE
+?CCL3: FSET? PRSO,CONTBIT /?CTR6
+ FSET? PRSO,DOORBIT \?PRG10
+?CTR6: CALL V-LOOK-INSIDE
+ RSTACK
+?PRG10: PRINTI "There's nothing special about the "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT V-EXIT
+ EQUAL? PRSO,FALSE-VALUE,ROOMS \?PRD5
+ LOC WINNER
+ FSET? STACK,VEHBIT /?CTR2
+?PRD5: ZERO? PRSO /?CCL3
+ IN? WINNER,PRSO \?CCL3
+?CTR2: LOC WINNER
+ CALL PERFORM,V?DISEMBARK,STACK
+ RTRUE
+?CCL3: CALL DO-WALK,P?OUT
+ RSTACK
+
+
+ .FUNCT PRE-FILL,TX
+ ZERO? PRSI \?CCL3
+ CALL GLOBAL-IN?,GLOBAL-WATER,HERE
+ ZERO? STACK /?CCL6
+ CALL PERFORM,V?FILL,PRSO,GLOBAL-WATER
+ RTRUE
+?CCL6: LOC WINNER
+ IN? WATER,STACK \?PRG9
+ CALL PERFORM,V?FILL,PRSO,WATER
+ RTRUE
+?PRG9: PRINTR "There is nothing to fill it with."
+?CCL3: EQUAL? PRSI,WATER,GLOBAL-WATER /FALSE
+ CALL PERFORM,V?PUT,PRSI,PRSO
+ RTRUE
+
+
+ .FUNCT V-FILL
+ PRINTR "Huh?"
+
+
+ .FUNCT V-FIND,L
+ LOC PRSO >L
+ EQUAL? PRSO,HANDS \?CCL3
+ PRINTR "Within six feet of your head, hopefully."
+?CCL3: EQUAL? L,GLOBAL-OBJECTS \?CCL7
+ PRINTR "You find it."
+?CCL7: IN? PRSO,WINNER \?CCL11
+ PRINTR "You have it."
+?CCL11: IN? PRSO,HERE /?PRG19
+ CALL GLOBAL-IN?,PRSO,HERE
+ ZERO? STACK \?PRG19
+ EQUAL? PRSO,PSEUDO-OBJECT \?CCL15
+?PRG19: PRINTR "It's right here."
+?CCL15: FSET? L,ACTORBIT \?CCL22
+ PRINTI "The "
+ PRINTD L
+ PRINTR " has it."
+?CCL22: FSET? L,SURFACEBIT \?CCL26
+ PRINTI "It's on the "
+ PRINTD L
+ PRINT PERIOD-CR
+ RTRUE
+?CCL26: FSET? L,CONTBIT \?PRG33
+ PRINTI "It's in the "
+ PRINTD L
+ PRINT PERIOD-CR
+ RTRUE
+?PRG33: PRINTR "Beats me."
+
+
+ .FUNCT V-FOLLOW
+ CALL V-COUNT
+ RSTACK
+
+
+ .FUNCT PRE-GIVE
+ CALL HELD?,PRSO
+ ZERO? STACK \FALSE
+ PRINTI "That's easy for you to say since you don't even have the "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT V-GIVE
+ FSET? PRSI,ACTORBIT /?PRG6
+ PRINTI "You can't give a "
+ PRINTD PRSO
+ PRINTI " to a "
+ PRINTD PRSI
+ PRINTR "!"
+?PRG6: PRINTI "The "
+ PRINTD PRSI
+ PRINTR " refuses it politely."
+
+
+ .FUNCT V-HELLO
+ ZERO? PRSO /?PRG11
+ FSET? PRSO,ACTORBIT \?PRG9
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " bows his head to you in greeting."
+?PRG9: PRINTI "Only schizophrenics say ""Hello"" to a "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+?PRG11: PRINTR "Goodbye."
+
+
+ .FUNCT V-INCANT
+ ZERO? SPELL-USED /?CCL3
+ PRINTI "Nothing happens."
+ CRLF
+ JUMP ?CND1
+?CCL3: ZERO? WAND-ON /?PRG10
+ SET 'SPELL-VICTIM,WAND-ON
+ GET P-LEXV,P-CONT >SPELL-USED
+ PRINTI "The wand glows very brightly for a moment."
+ CRLF
+ RANDOM 10
+ ADD 10,STACK
+ CALL QUEUE,I-SPELL,STACK
+ PUT STACK,0,1
+ SET 'WAND-ON,FALSE-VALUE
+ CALL PERFORM,V?ENCHANT,SPELL-VICTIM
+ JUMP ?CND1
+?PRG10: PRINTI "The incantation echoes back faintly, but nothing else happens."
+ CRLF
+?CND1: SET 'QUOTE-FLAG,FALSE-VALUE
+ SET 'P-CONT,FALSE-VALUE
+ RTRUE
+
+
+ .FUNCT I-SPELL
+ ZERO? SPELL-HANDLED? \?CND1
+ ZERO? SPELL-VICTIM /?CND1
+ CALL PERFORM,V?DISENCHANT,SPELL-VICTIM
+?CND1: SET 'SPELL-HANDLED?,FALSE-VALUE
+ SET 'WAND-ON,FALSE-VALUE
+ SET 'SPELL-USED,FALSE-VALUE
+ SET 'SPELL-VICTIM,FALSE-VALUE
+ RETURN SPELL-VICTIM
+
+
+ .FUNCT V-INFLATE
+ PRINTR "How can you inflate that?"
+
+
+ .FUNCT V-KICK
+ CALL HACK-HACK,STR?6
+ RSTACK
+
+
+ .FUNCT V-KISS
+ PRINTR "I'd sooner kiss a pig."
+
+
+ .FUNCT V-KNOCK
+ FSET? PRSO,DOORBIT \?PRG6
+ PRINTR "Nobody's home."
+?PRG6: PRINTI "Why knock on a "
+ PRINTD PRSO
+ PRINTR "?"
+
+
+ .FUNCT V-LAMP-OFF
+ FSET? PRSO,LIGHTBIT \?PRG11
+ FSET? PRSO,ONBIT /?CCL6
+ PRINT ALREADY
+ RTRUE
+?CCL6: FCLEAR PRSO,ONBIT
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTI " is now off."
+ CRLF
+ CALL NOW-DARK?
+ RSTACK
+?PRG11: PRINTR "You can't turn that off."
+
+
+ .FUNCT V-LAMP-ON
+ FSET? PRSO,LIGHTBIT \?CCL3
+ FSET? PRSO,ONBIT \?CCL6
+ PRINT ALREADY
+ RTRUE
+?CCL6: FSET PRSO,ONBIT
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTI " is now on."
+ CRLF
+ ZERO? LIT \FALSE
+ CALL LIT?,HERE >LIT
+ CRLF
+ CALL V-LOOK
+ RSTACK
+?CCL3: FSET? PRSO,BURNBIT \?PRG18
+ PRINTI "If you wish to burn the "
+ PRINTD PRSO
+ PRINTR ", you should say so."
+?PRG18: PRINTR "You can't turn that on."
+
+
+ .FUNCT V-LAUNCH
+ PRINTR "You can't launch that by saying ""launch""!"
+
+
+ .FUNCT V-LEAP,TX,S
+ ZERO? PRSO /?CCL3
+ PRINTR "That would be a good trick."
+?CCL3: GETPT HERE,P?DOWN >TX
+ ZERO? TX /?CCL7
+ PTSIZE TX >S
+ EQUAL? S,2 /?CTR9
+ EQUAL? S,4 \?CCL10
+ GETB TX,1
+ VALUE STACK
+ ZERO? STACK \?CCL10
+?CTR9: CALL JIGS-UP,STR?7
+ RSTACK
+?CCL10: CALL V-SKIP
+ RSTACK
+?CCL7: CALL V-SKIP
+ RSTACK
+
+
+ .FUNCT V-LEAVE
+ CALL DO-WALK,P?OUT
+ RSTACK
+
+
+ .FUNCT V-LISTEN
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " makes no sound."
+
+
+ .FUNCT V-LOCK
+ PRINTR "It doesn't seem to work."
+
+
+ .FUNCT V-LOOK
+ CALL DESCRIBE-ROOM,TRUE-VALUE
+ ZERO? LIT /FALSE
+ CALL DESCRIBE-OBJECTS,TRUE-VALUE
+ RSTACK
+
+
+ .FUNCT V-LOOK-BEHIND
+ PRINTI "There is nothing behind the "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT V-LOOK-INSIDE
+ FSET? PRSO,DOORBIT \?CCL3
+ PRINTI "The "
+ PRINTD PRSO
+ FSET? PRSO,OPENBIT \?PRG11
+ PRINTR " is open, but you can't see beyond it."
+?PRG11: PRINTR " is closed."
+?CCL3: FSET? PRSO,CONTBIT \?PRG31
+ FSET? PRSO,ACTORBIT \?CCL17
+ PRINTR "There is nothing special to be seen."
+?CCL17: CALL SEE-INSIDE?,PRSO
+ ZERO? STACK /?PRG29
+ FIRST? PRSO \?PRG27
+ CALL PRINT-CONT,PRSO
+ ZERO? STACK \TRUE
+?PRG27: PRINTI "The "
+ PRINTD PRSO
+ PRINTR " is empty."
+?PRG29: PRINTI "The "
+ PRINTD PRSO
+ PRINTR " is closed."
+?PRG31: PRINTI "You can't look inside a "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT V-LOOK-UNDER
+ PRINTR "There is nothing but dust there."
+
+
+ .FUNCT V-LOWER
+ CALL HACK-HACK,STR?8
+ RSTACK
+
+
+ .FUNCT V-MELT
+ PRINTI "You can't melt a "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT V-MOVE
+ CALL HELD?,PRSO
+ ZERO? STACK /?CCL3
+ PRINTR "Why juggle objects?"
+?CCL3: FSET? PRSO,TAKEBIT \?PRG10
+ PRINTI "Moving the "
+ PRINTD PRSO
+ PRINTR " reveals nothing."
+?PRG10: PRINTI "You can't move the "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT PRE-MUNG
+ ZERO? PRSI /?PRG6
+ FSET? PRSI,WEAPONBIT /FALSE
+?PRG6: PRINTI "Trying to destroy the "
+ PRINTD PRSO
+ PRINTI " with "
+ ZERO? PRSI \?PRG13
+ PRINTI "your bare hands"
+ JUMP ?PRG15
+?PRG13: PRINTI "a "
+ PRINTD PRSI
+?PRG15: PRINTR " is futile."
+
+
+ .FUNCT V-MUNG
+ FSET? PRSO,ACTORBIT \?PRG4
+ CALL PERFORM,V?ATTACK,PRSO
+ RTRUE
+?PRG4: PRINTR "Nice try."
+
+
+ .FUNCT V-OPEN,F,STR
+ FSET? PRSO,CONTBIT \?CCL3
+ FSET? PRSO,OPENBIT \?CCL6
+ PRINT ALREADY
+ RTRUE
+?CCL6: FSET PRSO,OPENBIT
+ FSET PRSO,TOUCHBIT
+ FIRST? PRSO \?PRG14
+ FSET? PRSO,TRANSBIT \?CCL11
+?PRG14: PRINTR "Opened."
+?CCL11: FIRST? PRSO >F \?PRG26
+ NEXT? F /?PRG26
+ FSET? F,TOUCHBIT /?PRG26
+ GETP F,P?FDESC >STR
+ ZERO? STR /?PRG26
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTI " opens."
+ CRLF
+ PRINT STR
+ CRLF
+ RTRUE
+?PRG26: PRINTI "Opening the "
+ PRINTD PRSO
+ PRINTI " reveals "
+ CALL PRINT-CONTENTS,PRSO
+ PRINT PERIOD-CR
+ RTRUE
+?CCL3: FSET? PRSO,DOORBIT \?PRG39
+ FSET? PRSO,OPENBIT \?CCL34
+ PRINT ALREADY
+ RTRUE
+?CCL34: FSET PRSO,OPENBIT
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTR " opens."
+?PRG39: PRINTI "You can't open a "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT V-PICK
+ PRINTR "You can't pick that."
+
+
+ .FUNCT V-PLAY
+ PRINTR "That's silly!"
+
+
+ .FUNCT V-POUR-ON
+ EQUAL? PRSO,WATER \?PRG15
+ CALL REMOVE-CAREFULLY,PRSO
+ FSET? PRSI,FLAMEBIT \?PRG13
+ FSET? PRSI,ONBIT \?PRG13
+ PRINTI "The "
+ PRINTD PRSI
+ PRINTI " is extinguished."
+ CRLF
+ EQUAL? PRSI,BALLOON-INFLATED \?CND11
+ SET 'BALLOON-INFLATED,FALSE-VALUE
+?CND11: FCLEAR PRSI,ONBIT
+ FCLEAR PRSI,FLAMEBIT
+ RTRUE
+?PRG13: PRINTI "The water spills over the "
+ PRINTD PRSI
+ PRINTR " and evaporates."
+?PRG15: PRINTR "You can't pour that."
+
+
+ .FUNCT V-PUSH
+ CALL HACK-HACK,STR?9
+ RSTACK
+
+
+ .FUNCT PRE-PUT
+ CALL PRE-GIVE
+ RSTACK
+
+
+ .FUNCT V-PUT,?TMP1,?TMP2,?TMP3
+ FSET? PRSI,OPENBIT /?CCL3
+ FSET? PRSI,DOORBIT /?CCL3
+ FSET? PRSI,CONTBIT /?CCL3
+ FSET? PRSI,VEHBIT /?CCL3
+ PRINTR "You can't do that."
+?CCL3: FSET? PRSI,OPENBIT /?CCL12
+ SET 'P-IT-OBJECT,PRSI
+ PRINTI "The "
+ PRINTD PRSI
+ PRINTR " isn't open."
+?CCL12: EQUAL? PRSI,PRSO \?CCL16
+ PRINTR "How can you do that?"
+?CCL16: IN? PRSO,PRSI \?CCL20
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTI " is already in the "
+ PRINTD PRSI
+ PRINT PERIOD-CR
+ RTRUE
+?CCL20: CALL WEIGHT,PRSI >?TMP3
+ CALL WEIGHT,PRSO
+ ADD ?TMP3,STACK >?TMP2
+ GETP PRSI,P?SIZE
+ SUB ?TMP2,STACK >?TMP1
+ GETP PRSI,P?CAPACITY
+ GRTR? ?TMP1,STACK \?CCL24
+ PRINTR "There's no room."
+?CCL24: CALL HELD?,PRSO
+ ZERO? STACK \?CCL28
+ CALL ITAKE
+ ZERO? STACK /TRUE
+?CCL28: MOVE PRSO,PRSI
+ FSET PRSO,TOUCHBIT
+ CALL SCORE-OBJ,PRSO
+ PRINTR "Done."
+
+
+ .FUNCT V-PUT-ON
+ EQUAL? PRSI,GROUND \?CCL3
+ CALL PERFORM,V?DROP,PRSO
+ RTRUE
+?CCL3: FSET? PRSI,SURFACEBIT \?PRG6
+ CALL V-PUT
+ RSTACK
+?PRG6: PRINTI "There's no good surface on the "
+ PRINTD PRSI
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT V-PUT-UNDER
+ PRINTR "You can't do that."
+
+
+ .FUNCT V-RAISE
+ CALL V-LOWER
+ RSTACK
+
+
+ .FUNCT V-RAPE
+ PRINTR "What a (ahem!) strange idea."
+
+
+ .FUNCT PRE-READ
+ ZERO? LIT \FALSE
+ PRINT TOO-DARK
+ CRLF
+ RTRUE
+
+
+ .FUNCT V-READ
+ FSET? PRSO,READBIT /?PRG6
+ PRINTI "How does one read a "
+ PRINTD PRSO
+ PRINTR "?"
+?PRG6: GETP PRSO,P?TEXT
+ PRINT STACK
+ CRLF
+ RTRUE
+
+
+ .FUNCT V-RUB
+ CALL HACK-HACK,STR?10
+ RSTACK
+
+
+ .FUNCT V-SAY,V
+ ZERO? SPELL-USED \?CTR2
+ ZERO? WAND-ON /?CCL3
+?CTR2: CALL PERFORM,V?INCANT
+ RTRUE
+?CCL3: ZERO? P-CONT \?CCL7
+ PRINTR "Say what?"
+?CCL7: SET 'QUOTE-FLAG,FALSE-VALUE
+ SET 'P-CONT,FALSE-VALUE
+ CALL FIND-IN,HERE,ACTORBIT >V
+ ZERO? V /?PRG15
+ PRINTI "You must address the "
+ PRINTD V
+ PRINTR " directly."
+?PRG15: PRINTR "Talking to yourself is a sign of impending mental collapse."
+
+
+ .FUNCT V-SEARCH
+ PRINTR "You find nothing unusual."
+
+
+ .FUNCT V-SGIVE
+ CALL PERFORM,V?GIVE,PRSI,PRSO
+ RTRUE
+
+
+ .FUNCT V-SHAKE
+ PRINTR "Shaken."
+
+
+ .FUNCT V-SKIP
+ PRINTR "Wheeeeeeee!!!"
+
+
+ .FUNCT V-SMELL
+ PRINTI "It smells like a "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT V-STAND
+ LOC WINNER
+ FSET? STACK,VEHBIT \?PRG4
+ LOC WINNER
+ CALL PERFORM,V?DISEMBARK,STACK
+ RTRUE
+?PRG4: PRINT LOOK-AROUND
+ RTRUE
+
+
+ .FUNCT V-STRIKE
+ FSET? PRSO,ACTORBIT \?CCL3
+ CALL PERFORM,V?ATTACK,PRSO,HANDS
+ RTRUE
+?CCL3: CALL PERFORM,V?LAMP-ON,PRSO
+ RTRUE
+
+
+ .FUNCT V-SWIM
+ PRINTI "Swimming isn't usually allowed in the "
+ EQUAL? PRSO,WATER,GLOBAL-WATER /?PRG8
+ PRINTD PRSO
+ PRINTR "."
+?PRG8: PRINTR "dungeon."
+
+
+ .FUNCT V-SWING
+ ZERO? PRSI \?CCL3
+ PRINTR "Whoosh!"
+?CCL3: CALL PERFORM,V?ATTACK,PRSI,PRSO
+ RSTACK
+
+
+ .FUNCT PRE-TAKE
+ IN? PRSO,WINNER \?CCL3
+ PRINTR "You already have that!"
+?CCL3: LOC PRSO
+ FSET? STACK,CONTBIT \?CCL7
+ LOC PRSO
+ FSET? STACK,OPENBIT /?CCL7
+ PRINTR "You can't reach into a closed container."
+?CCL7: ZERO? PRSI /?CCL13
+ EQUAL? PRSI,DOOR-KEEPER,GROUND \?CCL16
+ SET 'PRSI,FALSE-VALUE
+ RFALSE
+?CCL16: LOC PRSO
+ EQUAL? PRSI,STACK /?CCL18
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTI " isn't in the "
+ PRINTD PRSI
+ PRINT PERIOD-CR
+ RTRUE
+?CCL18: SET 'PRSI,FALSE-VALUE
+ RFALSE
+?CCL13: LOC WINNER
+ EQUAL? PRSO,STACK \FALSE
+ PRINTR "You're in it!"
+
+
+ .FUNCT V-TAKE
+ CALL ITAKE
+ EQUAL? STACK,TRUE-VALUE \FALSE
+ PRINTR "Taken."
+
+
+ .FUNCT V-TELL
+ FSET? PRSO,ACTORBIT \?PRG9
+ ZERO? P-CONT /?PRG7
+ SET 'WINNER,PRSO
+ LOC WINNER >HERE
+ RETURN HERE
+?PRG7: PRINTI "The "
+ PRINTD PRSO
+ PRINTR " pauses, thinking that you should reread the manual."
+?PRG9: PRINTI "You can't talk to the "
+ PRINTD PRSO
+ PRINTC 33
+ CRLF
+ SET 'QUOTE-FLAG,FALSE-VALUE
+ SET 'P-CONT,FALSE-VALUE
+ RETURN 2
+
+
+ .FUNCT V-THROW
+ CALL IDROP
+ ZERO? STACK /?PRG19
+ EQUAL? PRSI,ME \?CCL6
+ SET 'WINNER,ADVENTURER
+ PRINTI "A terrific throw! The "
+ PRINTD PRSO
+ PRINTI " hits your head. By incredible mischance, you fall trying to duck and break your neck, justice being swift and merciful in"
+ PRINT GUE-NAME
+ CALL JIGS-UP,STR?11
+ RSTACK
+?CCL6: ZERO? PRSI /?PRG17
+ FSET? PRSI,ACTORBIT \?PRG17
+ PRINTI "The "
+ PRINTD PRSI
+ PRINTR " ducks."
+?PRG17: PRINTR "Thrown."
+?PRG19: PRINTR "Huh?"
+
+
+ .FUNCT V-THROW-OFF
+ PRINTR "You can't throw anything off of that!"
+
+
+ .FUNCT V-TIE
+ PRINTI "You can't tie the "
+ PRINTD PRSO
+ PRINTR " to that."
+
+
+ .FUNCT V-TIE-UP
+ PRINTR "You could certainly never tie it with that!"
+
+
+ .FUNCT V-TURN
+ PRINTR "You can't turn that!"
+
+
+ .FUNCT V-UNLOCK
+ CALL V-LOCK
+ RSTACK
+
+
+ .FUNCT V-UNTIE
+ PRINTR "This cannot be tied, so it cannot be untied!"
+
+
+ .FUNCT V-WAIT,NUM=3
+ PRINTI "Time passes..."
+ CRLF
+?PRG3: DLESS? 'NUM,0 /?REP4
+ CALL CLOCKER
+ ZERO? STACK /?PRG3
+?REP4: SET 'CLOCK-WAIT,TRUE-VALUE
+ RETURN CLOCK-WAIT
+
+
+ .FUNCT V-WALK,PT,PTS,STR,OBJ,RM
+ ZERO? P-WALK-DIR \?CCL3
+ CALL PERFORM,V?WALK-TO,PRSO
+ RTRUE
+?CCL3: GETPT HERE,PRSO >PT
+ ZERO? PT /?CCL5
+ PTSIZE PT >PTS
+ EQUAL? PTS,UEXIT \?CCL8
+ GETB PT,REXIT
+ CALL GOTO,STACK
+ RSTACK
+?CCL8: EQUAL? PTS,NEXIT \?CCL10
+ GET PT,NEXITSTR
+ PRINT STACK
+ CRLF
+ RETURN 2
+?CCL10: EQUAL? PTS,FEXIT \?CCL16
+ GET PT,FEXITFCN
+ CALL STACK >RM
+ ZERO? RM /?PRG20
+ CALL GOTO,RM
+ RSTACK
+?PRG20: RETURN 2
+?CCL16: EQUAL? PTS,CEXIT \?CCL23
+ GETB PT,CEXITFLAG
+ VALUE STACK
+ ZERO? STACK /?CCL26
+ GETB PT,REXIT
+ CALL GOTO,STACK
+ RSTACK
+?CCL26: GET PT,CEXITSTR >STR
+ ZERO? STR /?PRG33
+ PRINT STR
+ CRLF
+ RETURN 2
+?PRG33: PRINT CANT-GO
+ RETURN 2
+?CCL23: EQUAL? PTS,DEXIT \FALSE
+ GETB PT,DEXITOBJ >OBJ
+ FSET? OBJ,OPENBIT \?CCL41
+ GETB PT,REXIT
+ CALL GOTO,STACK
+ RSTACK
+?CCL41: GET PT,DEXITSTR >STR
+ ZERO? STR /?PRG48
+ PRINT STR
+ CRLF
+ RETURN 2
+?PRG48: PRINTI "The "
+ PRINTD OBJ
+ PRINTI " is closed."
+ CRLF
+ SET 'P-IT-OBJECT,OBJ
+ RETURN 2
+?CCL5: ZERO? LIT \?PRG58
+ RANDOM 100
+ GRTR? 80,STACK \?PRG58
+ EQUAL? WINNER,ADVENTURER \?PRG58
+ FSET? HERE,NONLANDBIT /?PRG58
+ CALL JIGS-UP,STR?12
+ RSTACK
+?PRG58: PRINT CANT-GO
+ RETURN 2
+
+
+ .FUNCT V-WALK-AROUND
+ PRINTR "Use compass directions for movement."
+
+
+ .FUNCT V-WALK-TO
+ ZERO? PRSO /?CCL3
+ IN? PRSO,HERE /?PRG8
+ CALL GLOBAL-IN?,PRSO,HERE
+ ZERO? STACK /?CCL3
+?PRG8: PRINTR "It's here!"
+?CCL3: CALL V-WALK-AROUND
+ RSTACK
+
+
+ .FUNCT V-WAVE
+ CALL HACK-HACK,STR?13
+ RSTACK
+
+
+ .FUNCT V-YELL
+ PRINTR "Aaaarrrrgggghhhh!"
+
+
+ .FUNCT V-ZORK
+ PRINTR "At your service!"
+
+
+ .FUNCT DESCRIBE-ROOM,LOOK?=0,V?,STR,AV
+ LOC WINNER >AV
+ ZERO? LOOK? /?PRD3
+ SET 'V?,LOOK?
+ JUMP ?PEN1
+?PRD3: EQUAL? VERBOSITY,2 /?PRD4
+ PUSH 0
+ JUMP ?PRD5
+?PRD4: PUSH 1
+?PRD5: SET 'V?,STACK
+?PEN1: ZERO? LIT \?CND6
+ PRINTI "It is pitch black. You are likely to be eaten by a grue."
+ CRLF
+ RFALSE
+?CND6: FSET? HERE,TOUCHBIT /?CND10
+ FSET HERE,TOUCHBIT
+ SET 'V?,TRUE-VALUE
+?CND10: IN? HERE,ROOMS \?CND12
+ PRINTD HERE
+ FSET? AV,VEHBIT \?CND16
+ PRINTI ", in the "
+ PRINTD AV
+?CND16: CRLF
+?CND12: ZERO? LOOK? \?CCL22
+ GRTR? VERBOSITY,0 /?CCL22
+ EQUAL? HERE,ZORK3 \FALSE
+?CCL22: ZERO? V? /?CCL28
+ GETP HERE,P?ACTION
+ CALL STACK,M-LOOK
+ ZERO? STACK \TRUE
+?CCL28: ZERO? V? /?CCL32
+ GETP HERE,P?LDESC >STR
+ ZERO? STR /?CCL32
+ PRINT STR
+ CRLF
+ JUMP ?CND26
+?CCL32: GETP HERE,P?ACTION
+ CALL STACK,M-FLASH
+?CND26: EQUAL? HERE,AV /FALSE
+ FSET? AV,VEHBIT \FALSE
+ GETP AV,P?ACTION
+ CALL STACK,M-LOOK
+ RSTACK
+
+
+ .FUNCT DESCRIBE-OBJECTS,V?=0
+ FIRST? HERE \FALSE
+ ZERO? V? /?PRD6
+ SET 'V?,V?
+ JUMP ?PEN4
+?PRD6: EQUAL? VERBOSITY,2 /?PRD7
+ PUSH 0
+ JUMP ?PRD8
+?PRD7: PUSH 1
+?PRD8: SET 'V?,STACK
+?PEN4: CALL PRINT-CONT,HERE,V?,-1
+ RSTACK
+
+
+ .FUNCT DESCRIBE-OBJECT,OBJ,V?,LEVEL,STR=0,AV
+ SET 'DESC-OBJECT,OBJ
+ ZERO? LEVEL \?CCL3
+ GETP OBJ,P?DESCFCN
+ CALL STACK,M-OBJDESC
+ ZERO? STACK \TRUE
+?CCL3: ZERO? LEVEL \?CCL7
+ FSET? OBJ,TOUCHBIT /?PRD11
+ GETP OBJ,P?FDESC >STR
+ ZERO? STR \?PRG14
+?PRD11: GETP OBJ,P?LDESC >STR
+ ZERO? STR /?CCL7
+?PRG14: PRINT STR
+ JUMP ?CND1
+?CCL7: ZERO? LEVEL \?PRG26
+ PRINTI "There is a "
+ PRINTD OBJ
+ PRINTI " here"
+ FSET? OBJ,ONBIT \?PRG24
+ PRINTI " (providing light)"
+?PRG24: PRINTC 46
+ JUMP ?CND1
+?PRG26: GET INDENTS,LEVEL
+ PRINT STACK
+ PRINTI "A "
+ PRINTD OBJ
+ FSET? OBJ,ONBIT \?CND1
+ PRINTI " (providing light)"
+?CND1: EQUAL? OBJ,SPELL-VICTIM \?CND34
+ EQUAL? SPELL-USED,W?FLOAT \?CND34
+ PRINTI " (floating in midair)"
+?CND34: CRLF
+ CALL SEE-INSIDE?,OBJ
+ ZERO? STACK /FALSE
+ FIRST? OBJ \FALSE
+ CALL PRINT-CONT,OBJ,V?,LEVEL
+ RSTACK
+
+
+ .FUNCT PRINT-CONTENTS,OBJ,F,N,1ST?=1,IT?=0,TWO?=0
+ FIRST? OBJ >F \FALSE
+?PRG4: NEXT? F >N /?BOGUS6
+?BOGUS6: ZERO? 1ST? /?PRG10
+ SET '1ST?,FALSE-VALUE
+ JUMP ?PRG16
+?PRG10: PRINTI ", "
+ ZERO? N \?PRG16
+ PRINTI "and "
+?PRG16: PRINTI "a "
+ PRINTD F
+ ZERO? IT? \?CCL20
+ ZERO? TWO? \?CCL20
+ SET 'IT?,F
+ JUMP ?CND18
+?CCL20: SET 'TWO?,TRUE-VALUE
+ SET 'IT?,FALSE-VALUE
+?CND18: SET 'F,N
+ ZERO? F \?PRG4
+ ZERO? IT? /TRUE
+ ZERO? TWO? \TRUE
+ SET 'P-IT-OBJECT,IT?
+ RTRUE
+
+
+ .FUNCT PRINT-CONT,OBJ,V?=0,LEVEL=0,Y,1ST?,SHIT,AV,STR,PV?=0,INV?=0
+ FIRST? OBJ >Y \TRUE
+ LOC WINNER >AV
+ ZERO? AV /?CCL5
+ FSET? AV,VEHBIT /?CND3
+?CCL5: SET 'AV,FALSE-VALUE
+?CND3: SET '1ST?,TRUE-VALUE
+ SET 'SHIT,TRUE-VALUE
+ LOC OBJ
+ EQUAL? WINNER,OBJ,STACK \?PRG11
+ SET 'INV?,TRUE-VALUE
+ FIRST? OBJ >Y /?PRG46
+?PRG46: ZERO? Y \?CCL50
+ ZERO? PV? /?REP47
+ ZERO? AV /?REP47
+ FIRST? AV \?REP47
+ INC 'LEVEL
+ CALL PRINT-CONT,AV,V?,LEVEL
+?REP47: ZERO? 1ST? /TRUE
+ ZERO? SHIT \FALSE
+ RTRUE
+?PRG11: ZERO? Y \?CCL15
+ ZERO? LEVEL \?CND16
+ EQUAL? SPELL?,S-FANTASIZE \?CND16
+ RANDOM 100
+ GRTR? 20,STACK \?CND16
+ PRINTI "There is a "
+ CALL PICK-ONE,FANTASIES
+ PRINT STACK
+ PRINTI " here."
+ CRLF
+ SET '1ST?,FALSE-VALUE
+?CND16: ZERO? 1ST? /TRUE
+ RFALSE
+?CCL15: EQUAL? Y,AV \?CCL27
+ SET 'PV?,TRUE-VALUE
+ JUMP ?CND13
+?CCL27: EQUAL? Y,WINNER /?CND13
+ FSET? Y,INVISIBLE /?CND13
+ FSET? Y,TOUCHBIT /?CND13
+ GETP Y,P?FDESC >STR
+ ZERO? STR /?CND13
+ FSET? Y,NDESCBIT /?CND33
+ PRINT STR
+ CRLF
+ SET 'SHIT,FALSE-VALUE
+?CND33: CALL SEE-INSIDE?,Y
+ ZERO? STACK /?CND13
+ LOC Y
+ GETP STACK,P?DESCFCN
+ ZERO? STACK \?CND13
+ FIRST? Y \?CND13
+ CALL PRINT-CONT,Y,V?,0
+ ZERO? STACK /?CND13
+ SET '1ST?,FALSE-VALUE
+?CND13: NEXT? Y >Y /?PRG11
+ JUMP ?PRG11
+?CCL50: EQUAL? Y,AV,ADVENTURER /?CND48
+ FSET? Y,INVISIBLE /?CND48
+ ZERO? INV? \?CCL57
+ FSET? Y,TOUCHBIT /?CCL57
+ GETP Y,P?FDESC
+ ZERO? STACK \?CND48
+?CCL57: FSET? Y,NDESCBIT /?CCL65
+ ZERO? 1ST? /?CND66
+ CALL FIRSTER,OBJ,LEVEL
+ ZERO? STACK /?CND68
+ LESS? LEVEL,0 \?CND68
+ SET 'LEVEL,0
+?CND68: INC 'LEVEL
+ SET '1ST?,FALSE-VALUE
+?CND66: LESS? LEVEL,0 \?CND72
+ SET 'LEVEL,0
+?CND72: CALL DESCRIBE-OBJECT,Y,V?,LEVEL
+ JUMP ?CND48
+?CCL65: FIRST? Y \?CND48
+ CALL SEE-INSIDE?,Y
+ ZERO? STACK /?CND48
+ INC 'LEVEL
+ CALL PRINT-CONT,Y,V?,LEVEL
+ DEC 'LEVEL
+?CND48: NEXT? Y >Y /?PRG46
+ JUMP ?PRG46
+
+
+ .FUNCT FIRSTER,OBJ,LEVEL
+ EQUAL? OBJ,WINNER \?CCL3
+ PRINTR "You have:"
+?CCL3: IN? OBJ,ROOMS /FALSE
+ GRTR? LEVEL,0 \?CND8
+ GET INDENTS,LEVEL
+ PRINT STACK
+?CND8: FSET? OBJ,SURFACEBIT \?CCL14
+ PRINTI "Sitting on the "
+ PRINTD OBJ
+ PRINTR " is: "
+?CCL14: FSET? OBJ,ACTORBIT \?PRG21
+ PRINTI "The "
+ PRINTD OBJ
+ PRINTR " is holding: "
+?PRG21: PRINTI "The "
+ PRINTD OBJ
+ PRINTR " contains:"
+
+
+ .FUNCT SEE-INSIDE?,OBJ
+ FSET? OBJ,INVISIBLE /FALSE
+ FSET? OBJ,TRANSBIT /TRUE
+ FSET? OBJ,OPENBIT /TRUE
+ RFALSE
+
+
+ .FUNCT JIGS-UP,DESC,F,N
+ PRINT DESC
+ CRLF
+ EQUAL? ADVENTURER,WINNER /?CND3
+ PRINTI "
+ **** The "
+ PRINTD WINNER
+ PRINTI " has died ****"
+ CRLF
+ CRLF
+ REMOVE WINNER
+ SET 'WINNER,ADVENTURER
+ LOC WINNER >HERE
+ RETURN 2
+?CND3: SUB SCORE,10 >SCORE
+ PRINTI "
+ **** You have died ****"
+ CRLF
+ CRLF
+ SET 'DEAD,TRUE-VALUE
+ SET 'SPELL?,FALSE-VALUE
+ PUTP ADVENTURER,P?ACTION,0
+ INC 'DEATHS
+ MOVE WINNER,HERE
+ FCLEAR DEAD-PALANTIR-1,TOUCHBIT
+ FCLEAR DEAD-PALANTIR-2,TOUCHBIT
+ FCLEAR DEAD-PALANTIR-3,TOUCHBIT
+ IN? LAMP,WINNER \?CND11
+ MOVE LAMP,INSIDE-THE-BARROW
+?CND11: FIRST? WINNER >N /?PRG14
+?PRG14: SET 'F,N
+ ZERO? F /?REP15
+ NEXT? F >N /?BOGUS18
+?BOGUS18: GETP F,P?VALUE
+ ZERO? STACK /?CCL21
+ MOVE F,CAROUSEL-ROOM
+ JUMP ?PRG14
+?CCL21: MOVE F,GAZEBO
+ JUMP ?PRG14
+?REP15: CALL GOTO,DEAD-PALANTIR-1
+ SET 'P-CONT,FALSE-VALUE
+ CALL DRAGON-LEAVES
+ CALL INT,I-MATCH
+ PUT STACK,0,0
+ RETURN 2
+
+
+ .FUNCT NO-GO-TELL,AV,WLOC
+ PRINTI "You can't go there "
+ ZERO? AV /?PRG8
+ PRINTI "in a "
+ PRINTD WLOC
+ JUMP ?PRG10
+?PRG8: PRINTI "without a vehicle"
+?PRG10: PRINT PERIOD-CR
+ RTRUE
+
+
+ .FUNCT GOTO,RM,V?=1,LB,WLOC,AV=0,OLIT,OHERE
+ FSET? RM,RLANDBIT /?PRD1
+ PUSH 0
+ JUMP ?PRD2
+?PRD1: PUSH 1
+?PRD2: SET 'LB,STACK
+ LOC WINNER >WLOC
+ SET 'OLIT,LIT
+ SET 'OHERE,HERE
+ FSET? WLOC,VEHBIT \?CND3
+ GETP WLOC,P?VTYPE >AV
+?CND3: ZERO? LB \?CCL7
+ ZERO? AV \?CCL7
+ CALL NO-GO-TELL,AV,WLOC
+ RFALSE
+?CCL7: ZERO? LB \?CCL11
+ FSET? RM,AV /?CCL11
+ CALL NO-GO-TELL,AV,WLOC
+ RFALSE
+?CCL11: FSET? HERE,RLANDBIT \?CCL15
+ ZERO? LB /?CCL15
+ ZERO? AV /?CCL15
+ EQUAL? AV,RLANDBIT /?CCL15
+ FSET? RM,AV /?CCL15
+ CALL NO-GO-TELL,AV,WLOC
+ RFALSE
+?CCL15: ZERO? LB /?CND21
+ FSET? HERE,RLANDBIT /?CND21
+ ZERO? DEAD \?CND21
+ FSET? WLOC,VEHBIT \?CND21
+ EQUAL? WLOC,BALLOON \?CCL29
+ PRINTI "The balloon lands."
+ CRLF
+ JUMP ?CND21
+?CCL29: FSET? WLOC,VEHBIT \?CND21
+ PRINTI "The "
+ PRINTD WLOC
+ PRINT STOPS
+?CND21: ZERO? AV /?CCL37
+ MOVE WLOC,RM
+ JUMP ?CND35
+?CCL37: MOVE WINNER,RM
+?CND35: SET 'HERE,RM
+ CALL LIT?,HERE >LIT
+ ZERO? OLIT \?CND38
+ ZERO? LIT \?CND38
+ RANDOM 100
+ GRTR? 80,STACK \?CND38
+ PRINTI "Oh, no! A lurking grue slithered into the "
+ LOC WINNER
+ FSET? STACK,VEHBIT \?PRG50
+ LOC WINNER
+ PRINTD STACK
+ JUMP ?CND45
+?PRG50: PRINTI "room"
+?CND45: CALL JIGS-UP,STR?20
+ RTRUE
+?CND38: ZERO? LIT \?CND52
+ EQUAL? WINNER,ADVENTURER \?CND52
+ PRINTI "You have moved into a dark place."
+ CRLF
+ SET 'P-CONT,FALSE-VALUE
+?CND52: GETP HERE,P?ACTION
+ CALL STACK,M-ENTER
+ CALL SCORE-OBJ,RM
+ EQUAL? HERE,RM \TRUE
+ EQUAL? ADVENTURER,WINNER /?CCL62
+ IN? ADVENTURER,OHERE \?CCL62
+ PRINTI "The "
+ PRINTD WINNER
+ PRINTR " leaves the room."
+?CCL62: ZERO? V? /TRUE
+ EQUAL? WINNER,ADVENTURER \TRUE
+ CALL DESCRIBE-ROOM
+ ZERO? LIT /TRUE
+ GRTR? VERBOSITY,0 \TRUE
+ CALL DESCRIBE-OBJECTS
+ RTRUE
+
+
+ .FUNCT ITAKE,VB=1,CNT,OBJ,?TMP1
+ FSET? PRSO,TAKEBIT /?CCL3
+ ZERO? VB /FALSE
+ CALL PICK-ONE,YUKS
+ PRINT STACK
+ CRLF
+ RFALSE
+?CCL3: EQUAL? PRSO,SPELL-VICTIM \?CCL9
+ EQUAL? SPELL-USED,W?FLOAT,W?FREEZE \?CCL9
+ EQUAL? SPELL-USED,W?FLOAT \?PRG17
+ PRINTI "You can't reach that. It's floating above your head."
+ CRLF
+ RFALSE
+?PRG17: PRINTI "It seems rooted to the spot."
+ CRLF
+ RFALSE
+?CCL9: LOC PRSO
+ FSET? STACK,CONTBIT \?CCL20
+ LOC PRSO
+ FSET? STACK,OPENBIT \FALSE
+?CCL20: LOC PRSO
+ IN? STACK,WINNER /?CCL24
+ CALL WEIGHT,PRSO >?TMP1
+ CALL WEIGHT,WINNER
+ ADD ?TMP1,STACK
+ GRTR? STACK,LOAD-ALLOWED \?CCL24
+ ZERO? VB /?PRG38
+ PRINTI "Your load is too heavy"
+ LESS? LOAD-ALLOWED,100 \?PRG36
+ PRINTI ", especially in light of your condition."
+ JUMP ?CND31
+?PRG36: PRINTC 46
+?CND31: CRLF
+?PRG38: RETURN 2
+?CCL24: EQUAL? PRSA,V?TAKE \?CCL41
+ CALL CCOUNT,WINNER >CNT
+ GRTR? CNT,FUMBLE-NUMBER \?CCL41
+ MUL CNT,FUMBLE-PROB >?TMP1
+ RANDOM 100
+ GRTR? ?TMP1,STACK \?CCL41
+ PRINTI "You're holding too many things already!"
+ CRLF
+ RFALSE
+?CCL41: MOVE PRSO,WINNER
+ FCLEAR PRSO,NDESCBIT
+ FSET PRSO,TOUCHBIT
+ CALL SCORE-OBJ,PRSO
+ RTRUE
+
+
+ .FUNCT IDROP
+ IN? PRSO,WINNER /?CCL3
+ LOC PRSO
+ IN? STACK,WINNER /?CCL3
+ PRINTI "You're not carrying the "
+ PRINTD PRSO
+ PRINT PERIOD-CR
+ RFALSE
+?CCL3: IN? PRSO,WINNER /?CCL9
+ LOC PRSO
+ FSET? STACK,OPENBIT /?CCL9
+ PRINTI "The "
+ PRINTD PRSO
+ PRINTI " is closed."
+ CRLF
+ RFALSE
+?CCL9: LOC WINNER
+ MOVE PRSO,STACK
+ RTRUE
+
+
+ .FUNCT CCOUNT,OBJ,CNT=0,X
+ FIRST? OBJ >X /?PRG3
+ RETURN CNT
+?PRG3: INC 'CNT
+ NEXT? X >X /?PRG3
+ RETURN CNT
+
+
+ .FUNCT WEIGHT,OBJ,CONT,WT=0
+ FIRST? OBJ >CONT \?CND1
+?PRG3: CALL WEIGHT,CONT
+ ADD WT,STACK >WT
+ NEXT? CONT >CONT /?PRG3
+?CND1: GETP OBJ,P?SIZE
+ ADD WT,STACK
+ RSTACK
+
+ .ENDI
diff --git a/verbs.zil b/verbs.zil
new file mode 100644
index 0000000..a0337ae
--- /dev/null
+++ b/verbs.zil
@@ -0,0 +1,1388 @@
+"VERBS for
+ Mini-Zork II: The Wizard of Frobozz
+ (c) Copyright 1988 Infocom, Inc. All Rights Reserved."
+
+"Verb Functions for Game Commands"
+
+<GLOBAL VERBOSITY 1> ;"0 = superbrief, 1 = brief, 2 = verbose"
+
+<ROUTINE V-VERBOSE ()
+ <SETG VERBOSITY 2>
+ <TELL "Maximum verbosity." CR>>
+
+<ROUTINE V-BRIEF ()
+ <SETG VERBOSITY 1>
+ <TELL "Brief descriptions." CR>>
+
+<ROUTINE V-SUPER-BRIEF ()
+ <SETG VERBOSITY 0>
+ <TELL "Superbrief descriptions." CR>>
+
+<ROUTINE V-DIAGNOSE ()
+ <TELL "You are ">
+ <COND (,DEAD
+ <TELL "dead">)
+ (<EQUAL? ,SPELL? ,S-FERMENT>
+ <TELL "drunk">)
+ (<EQUAL? ,SPELL? ,S-FEEBLE>
+ <TELL "unusually">)
+ (<EQUAL? ,SPELL? ,S-FLOAT>
+ <TELL "floating">)
+ (<EQUAL? ,SPELL? ,S-FREEZE>
+ <TELL "frozen stiff">)
+ (T
+ <TELL "in perfect health">)>
+ <COND (<NOT <0? ,DEATHS>>
+ <TELL ". You have been killed ">
+ <COND (<1? ,DEATHS>
+ <TELL "once">)
+ (<EQUAL? ,DEATHS 2>
+ <TELL "twice">)
+ (T
+ <TELL "an awful lot">)>)>
+ <TELL ,PERIOD-CR>>
+
+<ROUTINE V-INVENTORY ()
+ <COND (<FIRST? ,WINNER>
+ <PRINT-CONT ,WINNER>)
+ (T
+ <TELL "You are empty-handed." CR>)>>
+
+<ROUTINE FINISH ("AUX" WRD)
+ <V-SCORE>
+ <REPEAT ()
+ <CRLF>
+ <TELL
+"Would you like to start over, restore a saved position, or stop playing?|
+(Type RESTART, RESTORE, or QUIT):|>">
+ <READ ,P-INBUF ,P-LEXV>
+ <SET WRD <GET ,P-LEXV 1>>
+ <COND (<EQUAL? .WRD ,W?RESTART>
+ <RESTART>
+ <TELL "Failed." CR>)
+ (<EQUAL? .WRD ,W?RESTORE>
+ <RESTORE>
+ <TELL "Failed." CR>)
+ (<EQUAL? .WRD ,W?QUIT ,W?Q>
+ <QUIT>)>>>
+
+<ROUTINE V-QUIT ("AUX" SCOR)
+ <COND (<DO-YOU-WISH "leave the game">
+ <QUIT>)
+ (T
+ <TELL "Ok." CR>)>>
+
+<ROUTINE V-RESTART ()
+ <COND (<DO-YOU-WISH "restart">
+ <TELL "Restarting." CR>
+ <RESTART>
+ <TELL "Failed." CR>)>>
+
+<ROUTINE DO-YOU-WISH (STRING)
+ <V-SCORE>
+ <TELL "Do you wish to " .STRING "? (Y is affirmative): ">
+ <COND (<YES?>
+ <RTRUE>)
+ (T
+ <RFALSE>)>>
+
+<ROUTINE YES? ()
+ <PRINTI ">">
+ <READ ,P-INBUF ,P-LEXV>
+ <COND (<EQUAL? <GET ,P-LEXV 1> ,W?YES ,W?Y>
+ <RTRUE>)
+ (T
+ <RFALSE>)>>
+
+<ROUTINE V-RESTORE ()
+ <RESTORE>
+ <TELL "Failed." CR>>
+
+<ROUTINE V-SAVE ()
+ <COND (<SAVE>
+ <TELL "Ok." CR>)
+ (T
+ <TELL "Failed." CR>)>>
+
+<ROUTINE V-SCORE ()
+ <TELL
+"Your score is " N ,SCORE " (out of 400 points), in " N ,MOVES " move">
+ <COND (<NOT <1? ,MOVES>>
+ <TELL "s">)>
+ <TELL ". This score gives you the rank of ">
+ <COND (<EQUAL? ,SCORE 400>
+ <TELL "Wizard">)
+ (<G? ,SCORE 320>
+ <TELL "Master Adventurer">)
+ (<G? ,SCORE 240>
+ <TELL "Senior Adventurer">)
+ (<G? ,SCORE 160>
+ <TELL "Junior Adventurer">)
+ (<G? ,SCORE 80>
+ <TELL "Amateur Adventurer">)
+ (T
+ <TELL "Beginner">)>
+ <TELL ,PERIOD-CR>>
+
+<GLOBAL SCORE 0>
+
+<ROUTINE SCORE-OBJ (OBJ "AUX" TEMP)
+ <COND (<G? <SET TEMP <GETP .OBJ ,P?VALUE>> 0>
+ <SETG SCORE <+ ,SCORE .TEMP>>
+ <PUTP .OBJ ,P?VALUE 0>)>>
+
+<ROUTINE V-SCRIPT ()
+ <PUT 0 8 <BOR <GET 0 8> 1>>
+ <INTERACTION "begin">>
+
+<ROUTINE INTERACTION (STRING)
+ <TELL "Here " .STRING "s a transcript of interaction with" CR>
+ <V-VERSION>>
+
+<ROUTINE V-UNSCRIPT ()
+ <INTERACTION "end">
+ <PUT 0 8 <BAND <GET 0 8> -2>>
+ <RTRUE>>
+
+<ROUTINE V-VERSION ("AUX" (CNT 17))
+ <TELL
+"Mini-Zork II: The Wizard of Frobozz|
+Copyright (c) 1988, Infocom, Inc. All rights reserved.|
+ZORK is a registered trademark of Infocom, Inc.|
+Release ">
+ <PRINTN <BAND <GET 0 1> *3777*>>
+ <TELL " / Serial number ">
+ <REPEAT ()
+ <COND (<G? <SET CNT <+ .CNT 1>> 23>
+ <RETURN>)
+ (T
+ <PRINTC <GETB 0 .CNT>>)>>
+ <CRLF>>
+
+<ROUTINE V-VERIFY ()
+ <TELL "Verifying..." CR>
+ <COND (<VERIFY>
+ <TELL "Correct." CR>)
+ (T
+ <TELL CR "** Failed! **" CR>)>>
+
+<ROUTINE V-COMMAND-FILE ()
+ <DIRIN 1>
+ <RTRUE>>
+
+<ROUTINE V-RANDOM ()
+ <COND (<NOT <EQUAL? ,PRSO ,INTNUM>>
+ <TELL "Illegal call to #RND." CR>)
+ (T
+ <RANDOM <- 0 ,P-NUMBER>>
+ <RTRUE>)>>
+
+<ROUTINE V-RECORD ()
+ <DIROUT 4>
+ <RTRUE>>
+
+<ROUTINE V-UNRECORD ()
+ <DIROUT -4>
+ <RTRUE>>
+\^L
+"Real Verb Functions"
+
+<ROUTINE V-ALARM ()
+ <TELL "The " D ,PRSO " isn't sleeping." CR>>
+
+<ROUTINE V-ATTACK ()
+ <COND (<NOT <FSET? ,PRSO ,ACTORBIT>>
+ <TELL "Fight a " D ,PRSO "!?!" CR>
+ <RTRUE>)>
+ <COND (<NOT ,PRSI>
+ <COND (<IN? ,ADVENTURER ,SWORD>
+ <SETG PRSI ,SWORD>)
+ (T
+ <SETG PRSI ,HANDS>)>)>
+ <TELL "Trying to attack a " D ,PRSO " with ">
+ <COND (<PRSI? ,HANDS>
+ <TELL "your bare hands">)
+ (T
+ <TELL "a " D ,PRSI>)>
+ <TELL " is suicidal." CR>>
+
+<ROUTINE V-BLAST ()
+ <TELL "You can't blast anything by using words." CR>>
+
+<ROUTINE PRE-BURN ()
+ <COND (<NOT ,PRSI>
+ <TELL "You didn't say with what!" CR>)
+ (<FLAMING? ,PRSI>
+ <RFALSE>)
+ (T
+ <TELL "With a " D ,PRSI "??!?" CR>)>>
+
+<ROUTINE V-BURN ()
+ <COND (<EQUAL? <LOC ,PRSO> ,RECEPTACLE>
+ <BALLOON-BURN>
+ <RTRUE>)
+ (<FSET? ,PRSO ,BURNBIT>
+ <TELL "The " D ,PRSO " catches fire">
+ <REMOVE-CAREFULLY ,PRSO>
+ <COND (<OR <IN? ,PRSO ,WINNER>
+ <IN? ,WINNER ,PRSO>>
+ <TELL ". Unfortunately, you were ">
+ <COND (<IN? ,WINNER ,PRSO>
+ <TELL "in">)
+ (T
+ <TELL "holding">)>
+ <JIGS-UP " it at the time.">)
+ (T
+ <TELL " and is consumed." CR>)>)
+ (T
+ <TELL "You can't burn a " D ,PRSO ,PERIOD-CR>)>>
+
+<ROUTINE V-CLIMB-DOWN ()
+ <DO-WALK ,P?DOWN>>
+
+<ROUTINE V-CLIMB ()
+ <DO-WALK ,P?UP>>
+
+<ROUTINE V-CLIMB-ON ()
+ <COND (<FSET? ,PRSO ,VEHBIT>
+ <PERFORM ,V?ENTER ,PRSO>
+ <RTRUE>)
+ (T
+ <TELL "You can't climb onto the " D ,PRSO ,PERIOD-CR>)>>
+
+<ROUTINE V-CLOSE ()
+ <COND (<FSET? ,PRSO ,DOORBIT>
+ <COND (<FSET? ,PRSO ,OPENBIT>
+ <FCLEAR ,PRSO ,OPENBIT>
+ <TELL "Closed." CR>)
+ (T
+ <TELL ,ALREADY>)>)
+ (<OR <FSET? ,PRSO ,SURFACEBIT>
+ <NOT <FSET? ,PRSO ,CONTBIT>>>
+ <TELL "You can't close a " D ,PRSO ,PERIOD-CR>)
+ (<FSET? ,PRSO ,OPENBIT>
+ <FCLEAR ,PRSO ,OPENBIT>
+ <TELL "Closed." CR>
+ <NOW-DARK?>)
+ (T
+ <TELL ,ALREADY>)>>
+
+<ROUTINE V-COMMAND ()
+ <COND (<FSET? ,PRSO ,ACTORBIT>
+ <TELL "The " D ,PRSO " pays no attention." CR>)
+ (T
+ <TELL "You cannot talk to that!" CR>)>>
+
+<ROUTINE V-COUNT ()
+ <TELL "You have lost your mind." CR>>
+
+<ROUTINE V-CURSES ()
+ <TELL "Such language in a high-class establishment like this!" CR>>
+
+<ROUTINE V-CUT ()
+ <COND (<FSET? ,PRSO ,ACTORBIT>
+ <PERFORM ,V?ATTACK ,PRSO ,PRSI>)
+ (<NOT <FSET? ,PRSI ,WEAPONBIT>>
+ <TELL
+"The \"cutting edge\" of a " D ,PRSI " is inadequate." CR>)
+ (<FSET? ,PRSO ,BURNBIT>
+ <COND (<IN? ,WINNER ,PRSO>
+ <TELL "You're in it!" CR>)
+ (T
+ <REMOVE-CAREFULLY ,PRSO>
+ <TELL
+"You skillfully slice the " D ,PRSO " into slivers, which blow away." CR>)>)
+ (T
+ <TELL "Strange concept, cutting the " D ,PRSO "...." CR>)>>
+
+<ROUTINE V-DEFLATE ()
+ <TELL "Come on, now!" CR>>
+
+<ROUTINE V-DISEMBARK ()
+ <COND (<AND <EQUAL? ,PRSO ,ROOMS>
+ <FSET? <LOC ,WINNER> ,VEHBIT>>
+ <PERFORM ,V?DISEMBARK <LOC ,WINNER>>
+ <RTRUE>)
+ (<NOT <EQUAL? <LOC ,WINNER> ,PRSO>>
+ <TELL ,LOOK-AROUND>
+ <RFATAL>)
+ (<FSET? ,HERE ,RLANDBIT>
+ <MOVE ,WINNER ,HERE>
+ <TELL "You are on your own feet again." CR>)
+ (T
+ <TELL "Getting out here would be fatal." CR>
+ <RFATAL>)>>
+
+<ROUTINE V-DISENCHANT ()
+ <COND (<NOT <IN? ,PRSO ,HERE>>
+ <RTRUE>)
+ (<OR <EQUAL? ,SPELL-USED ,W?FEEBLE ,W?FUMBLE>
+ <EQUAL? ,SPELL-USED ,W?FREEZE ,W?FALL ,W?FERMENT>
+ <EQUAL? ,SPELL-USED ,W?FENCE ,W?FANTASIZE>>
+ <COND (<FSET? ,PRSO ,ACTORBIT>
+ <COND (<EQUAL? ,SPELL-USED ,W?FEEBLE>
+ <TELL "The " D ,PRSO " seems stronger now." CR>)
+ (<EQUAL? ,SPELL-USED ,W?FUMBLE>
+ <TELL
+"The " D ,PRSO " no longer appears clumsy." CR>)
+ (<EQUAL? ,SPELL-USED ,W?FREEZE>
+ <TELL "The " D ,PRSO " moves again." CR>)
+ (<EQUAL? ,SPELL-USED ,W?FERMENT>
+ <TELL "The " D ,PRSO " stops swaying." CR>)>)>)
+ (<EQUAL? ,SPELL-USED ,W?FLOAT>
+ <TELL "The " D ,PRSO " sinks to the ground." CR>)
+ (<EQUAL? ,SPELL-USED ,W?FUDGE>
+ <TELL "The sweet smell has dispersed." CR>)>>
+
+<ROUTINE V-DRINK ()
+ <V-EAT>>
+
+<ROUTINE V-DRINK-FROM ()
+ <TELL "How peculiar!" CR>>
+
+<ROUTINE PRE-DROP ()
+ <COND (<EQUAL? ,PRSO <LOC ,WINNER>>
+ <PERFORM ,V?DISEMBARK ,PRSO>
+ <RTRUE>)>>
+
+<ROUTINE V-DROP ()
+ <COND (<IDROP>
+ <TELL "Dropped." CR>)>>
+
+<ROUTINE V-EAT ()
+ <COND (<FSET? ,PRSO ,FOODBIT>
+ <HIT-SPOT>)
+ (<PRSO? ,GLOBAL-WATER>
+ <HIT-SPOT>)
+ (<PRSO? ,WATER>
+ <COND (<NOT <HELD? <LOC ,PRSO>>>
+ <TELL
+"You're not holding the " D <LOC ,PRSO> ,PERIOD-CR>)
+ (T
+ <HIT-SPOT>)>)
+ (T
+ <TELL
+"It's doubtful the " D ,PRSO " would agree with you." CR>)>>
+
+<ROUTINE HIT-SPOT ()
+ <COND (<NOT <PRSO? ,GLOBAL-WATER>>
+ <REMOVE-CAREFULLY ,PRSO>)>
+ <TELL "That really hit the spot." CR>>
+
+<ROUTINE V-ENCHANT ()
+ <COND (,WAND-ON
+ <SETG SPELL-VICTIM ,WAND-ON>)>
+ <COND (,SPELL-VICTIM
+ <COND (<NOT ,SPELL-USED>
+ <TELL "You must be more specific." CR>
+ <RTRUE>)>
+ <COND (<OR <EQUAL? ,SPELL-USED ,W?FEEBLE ,W?FUMBLE>
+ <EQUAL? ,SPELL-USED ,W?FREEZE ,W?FALL ,W?FERMENT>
+ <EQUAL? ,SPELL-USED ,W?FENCE ,W?FANTASIZE>>
+ <COND (<FSET? ,PRSO ,ACTORBIT>
+ <TELL ,WAND-STOPS-GLOWING>)
+ (T
+ <TELL
+"That might have done something, but it's
+hard to tell with a " D ,PRSO ,PERIOD-CR>)>)
+ (<EQUAL? ,SPELL-USED ,W?FUDGE>
+ <TELL "An odor of chocolate permeates the room." CR>)
+ (<EQUAL? ,SPELL-USED ,W?FLUORESCE>
+ <FSET ,PRSO ,LIGHTBIT>
+ <FSET ,PRSO ,ONBIT>
+ <SETG LIT T>
+ <TELL "The " D ,PRSO " begins to glow." CR>)
+ (<AND <EQUAL? ,SPELL-USED ,W?FLOAT>
+ <FSET? ,PRSO ,TAKEBIT>>
+ <COND (<AND <EQUAL? ,SPELL-VICTIM ,COLLAR>
+ <IN? ,COLLAR ,CERBERUS>>
+ <SETG SPELL-VICTIM ,CERBERUS>)>
+ <TELL "The " D ,PRSO " floats serenely in midair." CR>)
+ (<AND <EQUAL? ,SPELL-USED ,W?FRY>
+ <FSET? ,PRSO ,TAKEBIT>>
+ <SETG SPELL-HANDLED? T>
+ <REMOVE-CAREFULLY ,PRSO>
+ <TELL "The " D ,PRSO " goes up in a puff of smoke." CR>)
+ (T
+ <SETG SPELL-VICTIM <>>
+ <TELL ,WAND-STOPS-GLOWING>)>)
+ (T
+ <SETG SPELL-VICTIM <>>
+ <TELL "Nothing happens." CR>)>>
+
+<ROUTINE REMOVE-CAREFULLY (OBJ "AUX" OLIT)
+ <COND (<EQUAL? .OBJ ,P-IT-OBJECT>
+ <SETG P-IT-OBJECT <>>)>
+ <SET OLIT ,LIT>
+ <REMOVE .OBJ>
+ <NOW-DARK?>>
+
+<ROUTINE PRE-ENTER ("AUX" M)
+ <COND (<NOT ,PRSO>
+ <DO-WALK ,P?IN>)
+ (<AND <FSET? ,PRSO ,DOORBIT>
+ <SET M <OTHER-SIDE ,PRSO>>>
+ <DO-WALK .M>)
+ (<FSET? ,PRSO ,VEHBIT>
+ <COND (<FSET? <LOC ,ADVENTURER> ,VEHBIT>
+ <TELL ,LOOK-AROUND>)
+ (T
+ <RFALSE>)>)
+ (<PRSO? ,WATER ,GLOBAL-WATER>
+ <RFALSE>)
+ (T
+ <TELL
+"You hit your head against the " D ,PRSO " as you attempt this feat." CR>)>
+ <RFATAL>>
+
+<ROUTINE V-ENTER ()
+ <TELL "You are now in the " D ,PRSO ,PERIOD-CR>
+ <MOVE ,WINNER ,PRSO>
+ <APPLY <GETP ,PRSO ,P?ACTION> ,M-ENTER>
+ <RTRUE>>
+
+<ROUTINE V-EXAMINE ()
+ <COND (<GETP ,PRSO ,P?TEXT>
+ <TELL <GETP ,PRSO ,P?TEXT> CR>)
+ (<OR <FSET? ,PRSO ,CONTBIT>
+ <FSET? ,PRSO ,DOORBIT>>
+ <V-LOOK-INSIDE>)
+ (T
+ <TELL
+"There's nothing special about the " D ,PRSO ,PERIOD-CR>)>>
+
+<ROUTINE V-EXIT ()
+ <COND (<OR <AND <EQUAL? ,PRSO <> ,ROOMS>
+ <FSET? <LOC ,WINNER> ,VEHBIT>>
+ <AND ,PRSO
+ <IN? ,WINNER ,PRSO>>>
+ <PERFORM ,V?DISEMBARK <LOC ,WINNER>>
+ <RTRUE>)
+ (T
+ <DO-WALK ,P?OUT>)>>
+
+<ROUTINE PRE-FILL ("AUX" TX)
+ <COND (<NOT ,PRSI>
+ <COND (<GLOBAL-IN? ,GLOBAL-WATER ,HERE>
+ <PERFORM ,V?FILL ,PRSO ,GLOBAL-WATER>)
+ (<IN? ,WATER <LOC ,WINNER>>
+ <PERFORM ,V?FILL ,PRSO ,WATER>)
+ (T
+ <TELL "There is nothing to fill it with." CR>)>
+ <RTRUE>)
+ (<NOT <EQUAL? ,PRSI ,WATER ,GLOBAL-WATER>>
+ <PERFORM ,V?PUT ,PRSI ,PRSO>
+ <RTRUE>)>>
+
+<ROUTINE V-FILL ()
+ <TELL "Huh?" CR>>
+
+<ROUTINE V-FIND ("AUX" (L <LOC ,PRSO>))
+ <COND (<EQUAL? ,PRSO ,HANDS>
+ <TELL "Within six feet of your head, hopefully." CR>)
+ (<EQUAL? .L ,GLOBAL-OBJECTS>
+ <TELL "You find it." CR>)
+ (<IN? ,PRSO ,WINNER>
+ <TELL "You have it." CR>)
+ (<OR <IN? ,PRSO ,HERE>
+ <GLOBAL-IN? ,PRSO ,HERE>
+ <EQUAL? ,PRSO ,PSEUDO-OBJECT>>
+ <TELL "It's right here." CR>)
+ (<FSET? .L ,ACTORBIT>
+ <TELL "The " D .L " has it." CR>)
+ (<FSET? .L ,SURFACEBIT>
+ <TELL "It's on the " D .L ,PERIOD-CR>)
+ (<FSET? .L ,CONTBIT>
+ <TELL "It's in the " D .L ,PERIOD-CR>)
+ (T
+ <TELL "Beats me." CR>)>>
+
+<ROUTINE V-FOLLOW ()
+ <V-COUNT>>
+
+<ROUTINE PRE-GIVE ()
+ <COND (<NOT <HELD? ,PRSO>>
+ <TELL
+"That's easy for you to say since you don't even have the "
+D ,PRSO ,PERIOD-CR>)>>
+
+<ROUTINE V-GIVE ()
+ <COND (<NOT <FSET? ,PRSI ,ACTORBIT>>
+ <TELL "You can't give a " D ,PRSO " to a " D ,PRSI "!" CR>)
+ (T
+ <TELL "The " D ,PRSI " refuses it politely." CR>)>>
+
+<ROUTINE V-HELLO ()
+ <COND (,PRSO
+ <COND (<FSET? ,PRSO ,ACTORBIT>
+ <TELL
+"The " D ,PRSO " bows his head to you in greeting." CR>)
+ (T
+ <TELL
+"Only schizophrenics say \"Hello\" to a " D ,PRSO ,PERIOD-CR>)>)
+ (T
+ <TELL "Goodbye." CR>)>>
+
+<ROUTINE V-INCANT ()
+ <COND (,SPELL-USED
+ <TELL "Nothing happens." CR>)
+ (,WAND-ON
+ <SETG SPELL-VICTIM ,WAND-ON>
+ <SETG SPELL-USED <GET ,P-LEXV ,P-CONT>>
+ <TELL "The wand glows very brightly for a moment." CR>
+ <ENABLE <QUEUE I-SPELL <+ 10 <RANDOM 10>>>>
+ <SETG WAND-ON <>>
+ <PERFORM ,V?ENCHANT ,SPELL-VICTIM>)
+ (T
+ <TELL
+"The incantation echoes back faintly, but nothing else happens." CR>)>
+ <SETG QUOTE-FLAG <>>
+ <SETG P-CONT <>>
+ <RTRUE>>
+
+<ROUTINE I-SPELL ()
+ <COND (<AND <NOT ,SPELL-HANDLED?> ,SPELL-VICTIM>
+ <PERFORM ,V?DISENCHANT ,SPELL-VICTIM>)>
+ <SETG SPELL-HANDLED? <>>
+ <SETG WAND-ON <>>
+ <SETG SPELL-USED <>>
+ <SETG SPELL-VICTIM <>>>
+
+<ROUTINE V-INFLATE ()
+ <TELL "How can you inflate that?" CR>>
+
+<ROUTINE V-KICK ()
+ <HACK-HACK "Kicking the ">>
+
+<ROUTINE V-KISS ()
+ <TELL "I'd sooner kiss a pig." CR>>
+
+<ROUTINE V-KNOCK ()
+ <COND (<FSET? ,PRSO ,DOORBIT>
+ <TELL "Nobody's home." CR>)
+ (T
+ <TELL "Why knock on a " D ,PRSO "?" CR>)>>
+
+<ROUTINE V-LAMP-OFF ()
+ <COND (<FSET? ,PRSO ,LIGHTBIT>
+ <COND (<NOT <FSET? ,PRSO ,ONBIT>>
+ <TELL ,ALREADY>)
+ (T
+ <FCLEAR ,PRSO ,ONBIT>
+ <TELL "The " D ,PRSO " is now off." CR>
+ <NOW-DARK?>)>)
+ (T
+ <TELL "You can't turn that off." CR>)>>
+
+<ROUTINE V-LAMP-ON ()
+ <COND (<FSET? ,PRSO ,LIGHTBIT>
+ <COND (<FSET? ,PRSO ,ONBIT>
+ <TELL ,ALREADY>)
+ (T
+ <FSET ,PRSO ,ONBIT>
+ <TELL "The " D ,PRSO " is now on." CR>
+ <COND (<NOT ,LIT>
+ <SETG LIT <LIT? ,HERE>>
+ <CRLF>
+ <V-LOOK>)>)>)
+ (<FSET? ,PRSO ,BURNBIT>
+ <TELL
+"If you wish to burn the " D ,PRSO ", you should say so." CR>)
+ (T
+ <TELL "You can't turn that on." CR>)>>
+
+<ROUTINE V-LAUNCH ()
+ <TELL "You can't launch that by saying \"launch\"!" CR>>
+
+<ROUTINE V-LEAP ("AUX" TX S)
+ <COND (,PRSO
+ <TELL "That would be a good trick." CR>)
+ (<SET TX <GETPT ,HERE ,P?DOWN>>
+ <SET S <PTSIZE .TX>>
+ <COND (<OR <EQUAL? .S 2> ;NEXIT
+ <AND <EQUAL? .S 4> ;CEXIT
+ <NOT <VALUE <GETB .TX 1>>>>>
+ <JIGS-UP "You should have looked before you leaped.">)
+ (T
+ <V-SKIP>)>)
+ (T
+ <V-SKIP>)>>
+
+<ROUTINE V-LEAVE ()
+ <DO-WALK ,P?OUT>>
+
+<ROUTINE V-LISTEN ()
+ <TELL "The " D ,PRSO " makes no sound." CR>>
+
+<ROUTINE V-LOCK ()
+ <TELL "It doesn't seem to work." CR>>
+
+<ROUTINE V-LOOK ()
+ <DESCRIBE-ROOM T>
+ <COND (,LIT
+ <DESCRIBE-OBJECTS T>)>>
+
+<ROUTINE V-LOOK-BEHIND ()
+ <TELL "There is nothing behind the " D ,PRSO ,PERIOD-CR>>
+
+<ROUTINE V-LOOK-INSIDE ()
+ <COND (<FSET? ,PRSO ,DOORBIT>
+ <TELL "The " D ,PRSO>
+ <COND (<FSET? ,PRSO ,OPENBIT>
+ <TELL " is open, but you can't see beyond it." CR>)
+ (T
+ <TELL " is closed." CR>)>)
+ (<FSET? ,PRSO ,CONTBIT>
+ <COND (<FSET? ,PRSO ,ACTORBIT>
+ <TELL "There is nothing special to be seen." CR>)
+ (<SEE-INSIDE? ,PRSO>
+ <COND (<AND <FIRST? ,PRSO>
+ <PRINT-CONT ,PRSO>>
+ <RTRUE>)
+ (T
+ <TELL "The " D ,PRSO " is empty." CR>)>)
+ (T
+ <TELL "The " D ,PRSO " is closed." CR>)>)
+ (T
+ <TELL "You can't look inside a " D ,PRSO ,PERIOD-CR>)>>
+
+<ROUTINE V-LOOK-UNDER ()
+ <TELL "There is nothing but dust there." CR>>
+
+<ROUTINE V-LOWER ()
+ <HACK-HACK "Playing in this way with the ">>
+
+<ROUTINE V-MELT ()
+ <TELL "You can't melt a " D ,PRSO ,PERIOD-CR>>
+
+<ROUTINE V-MOVE ()
+ <COND (<HELD? ,PRSO>
+ <TELL "Why juggle objects?" CR>)
+ (<FSET? ,PRSO ,TAKEBIT>
+ <TELL "Moving the " D ,PRSO " reveals nothing." CR>)
+ (T
+ <TELL "You can't move the " D ,PRSO ,PERIOD-CR>)>>
+
+<ROUTINE PRE-MUNG ()
+ <COND (<OR <NOT ,PRSI>
+ <NOT <FSET? ,PRSI ,WEAPONBIT>>>
+ <TELL "Trying to destroy the " D ,PRSO " with ">
+ <COND (<NOT ,PRSI>
+ <TELL "your bare hands">)
+ (T
+ <TELL "a " D ,PRSI>)>
+ <TELL " is futile." CR>)>>
+
+<ROUTINE V-MUNG ()
+ <COND (<FSET? ,PRSO ,ACTORBIT>
+ <PERFORM ,V?ATTACK ,PRSO>
+ <RTRUE>)
+ (T
+ <TELL "Nice try." CR>)>>
+
+<ROUTINE V-OPEN ("AUX" F STR)
+ <COND (<FSET? ,PRSO ,CONTBIT>
+ <COND (<FSET? ,PRSO ,OPENBIT>
+ <TELL ,ALREADY>)
+ (T
+ <FSET ,PRSO ,OPENBIT>
+ <FSET ,PRSO ,TOUCHBIT>
+ <COND (<OR <NOT <FIRST? ,PRSO>>
+ <FSET? ,PRSO ,TRANSBIT>>
+ <TELL "Opened." CR>)
+ (<AND <SET F <FIRST? ,PRSO>>
+ <NOT <NEXT? .F>>
+ <NOT <FSET? .F ,TOUCHBIT>>
+ <SET STR <GETP .F ,P?FDESC>>>
+ <TELL "The " D ,PRSO " opens." CR>
+ <TELL .STR CR>)
+ (T
+ <TELL "Opening the " D ,PRSO " reveals ">
+ <PRINT-CONTENTS ,PRSO>
+ <TELL ,PERIOD-CR>)>)>)
+ (<FSET? ,PRSO ,DOORBIT>
+ <COND (<FSET? ,PRSO ,OPENBIT>
+ <TELL ,ALREADY>)
+ (T
+ <FSET ,PRSO ,OPENBIT>
+ <TELL "The " D ,PRSO " opens." CR>)>)
+ (T
+ <TELL "You can't open a " D ,PRSO ,PERIOD-CR>)>>
+
+<ROUTINE V-PICK ()
+ <TELL "You can't pick that." CR>>
+
+<ROUTINE V-PLAY ()
+ <TELL "That's silly!" CR>>
+
+<ROUTINE V-POUR-ON ()
+ <COND (<EQUAL? ,PRSO ,WATER>
+ <REMOVE-CAREFULLY ,PRSO>
+ <COND (<FLAMING? ,PRSI>
+ <TELL "The " D ,PRSI " is extinguished." CR>
+ <COND (<EQUAL? ,PRSI ,BALLOON-INFLATED>
+ <SETG BALLOON-INFLATED <>>)>
+ <FCLEAR ,PRSI ,ONBIT>
+ <FCLEAR ,PRSI ,FLAMEBIT>)
+ (T
+ <TELL
+"The water spills over the " D ,PRSI " and evaporates." CR>)>)
+ (T
+ <TELL "You can't pour that." CR>)>>
+
+<ROUTINE V-PUSH ()
+ <HACK-HACK "Pushing the ">>
+
+<ROUTINE PRE-PUT ()
+ <PRE-GIVE>> ;"That's easy for you to say..."
+
+<ROUTINE V-PUT ()
+ <COND (<AND <NOT <FSET? ,PRSI ,OPENBIT>>
+ <NOT <OPENABLE? ,PRSI>>
+ <NOT <FSET? ,PRSI ,VEHBIT>>>
+ <TELL "You can't do that." CR>)
+ (<NOT <FSET? ,PRSI ,OPENBIT>>
+ <SETG P-IT-OBJECT ,PRSI>
+ <TELL "The " D ,PRSI " isn't open." CR>)
+ (<EQUAL? ,PRSI ,PRSO>
+ <TELL "How can you do that?" CR>)
+ (<IN? ,PRSO ,PRSI>
+ <TELL "The " D ,PRSO " is already in the " D ,PRSI ,PERIOD-CR>)
+ (<G? <- <+ <WEIGHT ,PRSI> <WEIGHT ,PRSO>> <GETP ,PRSI ,P?SIZE>>
+ <GETP ,PRSI ,P?CAPACITY>>
+ <TELL "There's no room." CR>)
+ (<AND <NOT <HELD? ,PRSO>>
+ <NOT <ITAKE>>>
+ <RTRUE>)
+ (T
+ <MOVE ,PRSO ,PRSI>
+ <FSET ,PRSO ,TOUCHBIT>
+ <SCORE-OBJ ,PRSO>
+ <TELL "Done." CR>)>>
+
+<ROUTINE V-PUT-ON ()
+ <COND (<EQUAL? ,PRSI ,GROUND>
+ <PERFORM ,V?DROP ,PRSO>
+ <RTRUE>)
+ (<FSET? ,PRSI ,SURFACEBIT>
+ <V-PUT>)
+ (T
+ <TELL "There's no good surface on the " D ,PRSI ,PERIOD-CR>)>>
+
+<ROUTINE V-PUT-UNDER ()
+ <TELL "You can't do that." CR>>
+
+<ROUTINE V-RAISE ()
+ <V-LOWER>>
+
+<ROUTINE V-RAPE ()
+ <TELL "What a (ahem!) strange idea." CR>>
+
+<ROUTINE PRE-READ ()
+ <COND (<NOT ,LIT>
+ <TELL ,TOO-DARK CR>)>>
+
+<ROUTINE V-READ ()
+ <COND (<NOT <FSET? ,PRSO ,READBIT>>
+ <TELL "How does one read a " D ,PRSO "?" CR>)
+ (T
+ <TELL <GETP ,PRSO ,P?TEXT> CR>)>>
+
+<ROUTINE V-RUB ()
+ <HACK-HACK "Fiddling with the ">>
+
+<ROUTINE V-SAY ("AUX" V)
+ <COND (<OR ,SPELL-USED
+ ,WAND-ON>
+ <PERFORM ,V?INCANT>
+ <RTRUE>)
+ (<NOT ,P-CONT>
+ <TELL "Say what?" CR>)
+ (T
+ <SETG QUOTE-FLAG <>>
+ <SETG P-CONT <>>
+ <COND (<SET V <FIND-IN ,HERE ,ACTORBIT>>
+ <TELL "You must address the " D .V " directly." CR>)
+ (T
+ <TELL
+"Talking to yourself is a sign of impending mental collapse." CR>)>)>>
+
+<ROUTINE V-SEARCH ()
+ <TELL "You find nothing unusual." CR>>
+
+<ROUTINE V-SGIVE ()
+ <PERFORM ,V?GIVE ,PRSI ,PRSO>
+ <RTRUE>>
+
+<ROUTINE V-SHAKE ()
+ <TELL "Shaken." CR>>
+
+<ROUTINE V-SKIP ()
+ <TELL "Wheeeeeeee!!!" CR>>
+
+<ROUTINE V-SMELL ()
+ <TELL "It smells like a " D ,PRSO ,PERIOD-CR>>
+
+<ROUTINE V-STAND ()
+ <COND (<FSET? <LOC ,WINNER> ,VEHBIT>
+ <PERFORM ,V?DISEMBARK <LOC ,WINNER>>
+ <RTRUE>)
+ (T
+ <TELL ,LOOK-AROUND>)>>
+
+<ROUTINE V-STRIKE ()
+ <COND (<FSET? ,PRSO ,ACTORBIT>
+ <PERFORM ,V?ATTACK ,PRSO ,HANDS>)
+ (T
+ <PERFORM ,V?LAMP-ON ,PRSO>)>
+ <RTRUE>>
+
+<ROUTINE V-SWIM ()
+ <TELL "Swimming isn't usually allowed in the ">
+ <COND (<NOT <EQUAL? ,PRSO ,WATER ,GLOBAL-WATER>>
+ <TELL D ,PRSO ".">)
+ (T
+ <TELL "dungeon.">)>
+ <CRLF>>
+
+<ROUTINE V-SWING ()
+ <COND (<NOT ,PRSI>
+ <TELL "Whoosh!" CR>)
+ (T
+ <PERFORM ,V?ATTACK ,PRSI ,PRSO>)>>
+
+<ROUTINE PRE-TAKE ()
+ <COND (<IN? ,PRSO ,WINNER>
+ <TELL "You already have that!" CR>)
+ (<AND <FSET? <LOC ,PRSO> ,CONTBIT>
+ <NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
+ <TELL "You can't reach into a closed container." CR>)
+ (,PRSI
+ <COND (<PRSI? ,GROUND ,DOOR-KEEPER>
+ <SETG PRSI <>>
+ <RFALSE>)
+ (<NOT <EQUAL? ,PRSI <LOC ,PRSO>>>
+ <TELL
+"The " D ,PRSO " isn't in the " D ,PRSI ,PERIOD-CR>)
+ (T
+ <SETG PRSI <>>
+ <RFALSE>)>)
+ (<EQUAL? ,PRSO <LOC ,WINNER>>
+ <TELL "You're in it!" CR>)>>
+
+<ROUTINE V-TAKE ()
+ <COND (<EQUAL? <ITAKE> T>
+ <TELL "Taken." CR>)>>
+
+<ROUTINE V-TELL ()
+ <COND (<FSET? ,PRSO ,ACTORBIT>
+ <COND (,P-CONT
+ <SETG WINNER ,PRSO>
+ <SETG HERE <LOC ,WINNER>>)
+ (T
+ <TELL
+"The " D ,PRSO " pauses, thinking that you should reread the manual." CR>)>)
+ (T
+ <TELL "You can't talk to the " D ,PRSO "!" CR>
+ <SETG QUOTE-FLAG <>>
+ <SETG P-CONT <>>
+ <RFATAL>)>>
+
+<ROUTINE V-THROW ()
+ <COND (<IDROP>
+ <COND (<EQUAL? ,PRSI ,ME>
+ <SETG WINNER ,ADVENTURER>
+ <TELL "A terrific throw! The " D ,PRSO>
+ <TELL
+" hits your head. By incredible mischance, you fall trying to duck and break
+your neck, justice being swift and merciful in" ,GUE-NAME>
+ <JIGS-UP ".">)
+ (<AND ,PRSI <FSET? ,PRSI ,ACTORBIT>>
+ <TELL "The " D ,PRSI " ducks." CR>)
+ (T
+ <TELL "Thrown." CR>)>)
+ (T
+ <TELL "Huh?" CR>)>>
+
+<ROUTINE V-THROW-OFF ()
+ <TELL "You can't throw anything off of that!" CR>>
+
+<ROUTINE V-TIE ()
+ <TELL "You can't tie the " D ,PRSO " to that." CR>>
+
+<ROUTINE V-TIE-UP ()
+ <TELL "You could certainly never tie it with that!" CR>>
+
+<ROUTINE V-TURN ()
+ <TELL "You can't turn that!" CR>>
+
+<ROUTINE V-UNLOCK ()
+ <V-LOCK>>
+
+<ROUTINE V-UNTIE ()
+ <TELL "This cannot be tied, so it cannot be untied!" CR>>
+
+<ROUTINE V-WAIT ("AUX" (NUM 3))
+ <TELL "Time passes..." CR>
+ <REPEAT ()
+ <COND (<L? <SET NUM <- .NUM 1>> 0>
+ <RETURN>)
+ (<CLOCKER>
+ <RETURN>)>>
+ <SETG CLOCK-WAIT T>>
+
+<ROUTINE V-WALK ("AUX" PT PTS STR OBJ RM)
+ <COND (<NOT ,P-WALK-DIR>
+ <PERFORM ,V?WALK-TO ,PRSO>
+ <RTRUE>)
+ (<SET PT <GETPT ,HERE ,PRSO>>
+ <COND (<EQUAL? <SET PTS <PTSIZE .PT>> ,UEXIT>
+ <GOTO <GETB .PT ,REXIT>>)
+ (<EQUAL? .PTS ,NEXIT>
+ <TELL <GET .PT ,NEXITSTR> CR>
+ <RFATAL>)
+ (<EQUAL? .PTS ,FEXIT>
+ <COND (<SET RM <APPLY <GET .PT ,FEXITFCN>>>
+ <GOTO .RM>)
+ (T
+ <RFATAL>)>)
+ (<EQUAL? .PTS ,CEXIT>
+ <COND (<VALUE <GETB .PT ,CEXITFLAG>>
+ <GOTO <GETB .PT ,REXIT>>)
+ (<SET STR <GET .PT ,CEXITSTR>>
+ <TELL .STR CR>
+ <RFATAL>)
+ (T
+ <TELL ,CANT-GO>
+ <RFATAL>)>)
+ (<EQUAL? .PTS ,DEXIT>
+ <COND (<FSET? <SET OBJ <GETB .PT ,DEXITOBJ>> ,OPENBIT>
+ <GOTO <GETB .PT ,REXIT>>)
+ (<SET STR <GET .PT ,DEXITSTR>>
+ <TELL .STR CR>
+ <RFATAL>)
+ (T
+ <TELL "The " D .OBJ " is closed." CR>
+ <SETG P-IT-OBJECT .OBJ>
+ <RFATAL>)>)>)
+ (<AND <NOT ,LIT>
+ <PROB 80>
+ <EQUAL? ,WINNER ,ADVENTURER>
+ <NOT <FSET? ,HERE ,NONLANDBIT>>>
+ <JIGS-UP
+"Oh, no! You have walked into the slavering fangs of a lurking grue!">)
+ (T
+ <TELL ,CANT-GO>
+ <RFATAL>)>>
+
+<ROUTINE V-WALK-AROUND ()
+ <TELL "Use compass directions for movement." CR>>
+
+<ROUTINE V-WALK-TO ()
+ <COND (<AND ,PRSO
+ <OR <IN? ,PRS