Final Revision
authorhistoricalsource <historicalsoftware@textfiles.com>
Sun, 14 Apr 2019 17:37:43 +0000 (13:37 -0400)
committerhistoricalsource <historicalsoftware@textfiles.com>
Sun, 14 Apr 2019 17:37:43 +0000 (13:37 -0400)
42 files changed:
castle.zap [new file with mode: 0644]
castle.zil [new file with mode: 0644]
colors.zap [new file with mode: 0644]
colors.zil
global.zap [new file with mode: 0644]
global.zil [new file with mode: 0644]
goal.zap [new file with mode: 0644]
goal.zil
lumber.ozil [new file with mode: 0644]
m5.chart [new file with mode: 0644]
m5.errors
m5.record
m5.serial [new file with mode: 0644]
m5.zap [new file with mode: 0644]
m5.zil [new file with mode: 0644]
m5.zip
m5dat.zap [new file with mode: 0644]
m5freq.xzap [new file with mode: 0644]
m5pur.zap [new file with mode: 0644]
m5str.zap [new file with mode: 0644]
macros.zap [new file with mode: 0644]
misc.zap [new file with mode: 0644]
misc.zil [new file with mode: 0644]
moon.mud [new file with mode: 0644]
moonmist.man [new file with mode: 0644]
moonmist.zil [new file with mode: 0644]
parser.cmp [new file with mode: 0644]
parser.zap [new file with mode: 0644]
parser.zil
people.zap [new file with mode: 0644]
people.zil
places.zap [new file with mode: 0644]
places.zil [new file with mode: 0644]
syntax.zap [new file with mode: 0644]
syntax.zil
things.zap [new file with mode: 0644]
things.zil [new file with mode: 0644]
tower.zap [new file with mode: 0644]
tower.zil [new file with mode: 0644]
verbs.indicative [new file with mode: 0644]
verbs.zap [new file with mode: 0644]
verbs.zil

diff --git a/castle.zap b/castle.zap
new file mode 100644 (file)
index 0000000..8c295ef
--- /dev/null
@@ -0,0 +1,1795 @@
+
+
+       .FUNCT  CASTLE-F
+       EQUAL?  PRSA,V?FIND,V?EXAMINE \?CCL3
+       CALL    OUTSIDE?,HERE
+       ZERO?   STACK /?CCL6
+       EQUAL?  PRSA,V?FIND \?PRG12
+       PRINTR  "It's right here!"
+?PRG12:        PRINT   DARK-TURRETS
+       RTRUE   
+?CCL6: EQUAL?  PRSO,CASTLE /?PRG18
+       FSET?   HERE,WEARBIT /?CCL15
+?PRG18:        PRINTR  "It's all around you!"
+?CCL15:        CALL    NOT-HERE,TOWER
+       RSTACK  
+?CCL3: EQUAL?  PRSA,V?WALK-TO,V?THROUGH,V?BOARD \?CCL21
+       EQUAL?  PRSO,CASTLE \?CCL24
+       CALL    OUTSIDE?,HERE
+       ZERO?   STACK /?CCL27
+       FSET?   FRIEND,TOUCHBIT /?CCL30
+       CALL    PERFORM,PRSA,COURTYARD
+       RTRUE   
+?CCL30:        CALL    PERFORM,PRSA,FOYER
+       RTRUE   
+?CCL27:        CALL    HAR-HAR
+       RSTACK  
+?CCL24:        CALL    OUTSIDE?,HERE
+       ZERO?   STACK \?CTR32
+       FSET?   HERE,WEARBIT \?CCL33
+?CTR32:        CALL    PERFORM,PRSA,OLD-GREAT-HALL
+       RTRUE   
+?CCL33:        CALL    HAR-HAR
+       RSTACK  
+?CCL21:        EQUAL?  PRSA,V?LEAVE \FALSE
+       CALL    OUTSIDE?,HERE
+       ZERO?   STACK \?CCL40
+       CALL    PERFORM,V?WALK-TO,COURTYARD
+       RTRUE   
+?CCL40:        CALL    HAR-HAR
+       RSTACK  
+
+
+       .FUNCT  TOWER-F
+       EQUAL?  PRSA,V?LEAVE,V?WALK-TO,V?THROUGH /?CTR2
+       EQUAL?  PRSA,V?FIND,V?EXAMINE,V?BOARD \?CCL3
+?CTR2: CALL    CASTLE-F
+       RSTACK  
+?CCL3: CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       FSET?   HERE,WEARBIT \FALSE
+       CALL    NOT-HERE,TOWER
+       RTRUE   
+
+
+       .FUNCT  MOON-F
+       EQUAL?  PRSA,V?EXAMINE \?CCL3
+       PRINTI  "Strange shapes of mist dance in front of the "
+       PRINTD  MOON
+       PRINTR  "."
+?CCL3: EQUAL?  PRSA,V?SMELL,V?EAT \FALSE
+       CALL    PERFORM,V?SMELL,OCEAN
+       RTRUE   
+
+
+       .FUNCT  OCEAN-F
+       EQUAL?  PRSA,V?LISTEN \?CCL3
+       PRINTR  "The breakers seem to be warning you."
+?CCL3: EQUAL?  PRSA,V?WALK-TO,V?THROUGH \FALSE
+       PRINTR  "The cliffs are too dangerous in the dark."
+
+
+       .FUNCT  CAR-DOOR-PSEUDO
+       EQUAL?  PRSA,V?UNLOCK /?CCL3
+       EQUAL?  PRSA,V?LOCK,V?CLOSE,V?OPEN \FALSE
+?CCL3: CALL    NO-NEED
+       RSTACK  
+
+
+       .FUNCT  DRIVING?
+       ZERO?   P-PRSA-WORD /?CCL3
+       EQUAL?  P-PRSA-WORD,W?DRIVE,W?ENTER,W?STEER \FALSE
+?CCL3: EQUAL?  PRSA,V?WALK-TO,V?THROUGH,V?CLIMB-UP \?CCL7
+       EQUAL?  PRSA,V?THROUGH \?CCL10
+       EQUAL?  PRSO,CAR \?CCL10
+       ZERO?   PRSI /?CCL15
+       CALL    META-LOC,PRSI
+       EQUAL?  HERE,STACK /FALSE
+       SET     'PRSO,PRSI
+       RTRUE   
+?CCL15:        SET     'PRSO,FRONT-GATE
+       RTRUE   
+?CCL10:        CALL    META-LOC,PRSO
+       EQUAL?  HERE,STACK /FALSE
+       RTRUE   
+?CCL7: EQUAL?  PRSA,V?LEAVE \?CCL22
+       EQUAL?  PRSO,ROOMS,CAR \TRUE
+       RFALSE  
+?CCL22:        EQUAL?  PRSA,V?WALK \FALSE
+       ZERO?   P-PRSA-WORD \TRUE
+       EQUAL?  PRSO,P?OUT \TRUE
+       RFALSE  
+
+
+       .FUNCT  CAR-F,ARG=0,S
+       SET     'S,HERE
+       EQUAL?  ARG,M-BEG \?CCL3
+       CALL    DRIVING?
+       ZERO?   STACK /?CCL6
+       EQUAL?  PRSO,FRONT-GATE \?CCL9
+       EQUAL?  PRSA,V?THROUGH \?CCL12
+       FSET?   FRONT-GATE,OPENBIT /?CCL15
+       CALL    TOO-BAD-BUT,FRONT-GATE,STR?61
+       RSTACK  
+?CCL15:        EQUAL?  S,DRIVEWAY \?CCL17
+       CALL    PERFORM,V?WALK-TO,COURTYARD
+       RTRUE   
+?CCL17:        CALL    PERFORM,V?WALK-TO,DRIVEWAY
+       RTRUE   
+?CCL12:        CALL    WALK-WITHIN-ROOM
+       RSTACK  
+?CCL9: EQUAL?  S,DRIVEWAY \?CCL19
+       EQUAL?  PRSA,V?WALK-TO,V?THROUGH,V?CLIMB-UP \?CCL22
+       CALL    META-LOC,PRSO
+       EQUAL?  DRIVEWAY,STACK \?CCL25
+       CALL    WALK-WITHIN-ROOM
+       RSTACK  
+?CCL25:        FSET?   FRONT-GATE,OPENBIT /?CCL27
+       CALL    TOO-BAD-BUT,FRONT-GATE,STR?61
+       RSTACK  
+?CCL27:        CALL    CAR-TO-COURTYARD
+       RSTACK  
+?CCL22:        EQUAL?  PRSA,V?LEAVE \?CCL29
+       EQUAL?  PRSO,COURTYARD \?CCL32
+       CALL    HAR-HAR
+       RSTACK  
+?CCL32:        FSET?   FRONT-GATE,OPENBIT /?CCL34
+       CALL    TOO-BAD-BUT,FRONT-GATE,STR?61
+       RSTACK  
+?CCL34:        CALL    CAR-TO-COURTYARD
+       RSTACK  
+?CCL29:        EQUAL?  PRSO,P?IN,P?SOUTH /?CTR35
+       EQUAL?  PRSO,INTDIR \?CCL36
+       CALL    ADJ-USED?,W?SOUTH
+       ZERO?   STACK /?CCL36
+?CTR35:        FSET?   FRONT-GATE,OPENBIT /?CCL43
+       CALL    TOO-BAD-BUT,FRONT-GATE,STR?61
+       RSTACK  
+?CCL43:        CALL    CAR-TO-COURTYARD
+       RSTACK  
+?CCL36:        SET     'CLOCK-WAIT,TRUE-VALUE
+       PRINT   CASTLE-IS-SOUTH
+       RTRUE   
+?CCL19:        EQUAL?  PRSA,V?WALK-TO,V?THROUGH,V?CLIMB-UP \?CCL48
+       CALL    META-LOC,PRSO
+       EQUAL?  COURTYARD,STACK \?CCL51
+       CALL    WALK-WITHIN-ROOM
+       RSTACK  
+?CCL51:        FSET?   FRONT-GATE,OPENBIT /?CCL53
+       CALL    TOO-BAD-BUT,FRONT-GATE,STR?61
+       RSTACK  
+?CCL53:        CALL    CAR-TO-DRIVEWAY
+       RSTACK  
+?CCL48:        EQUAL?  PRSA,V?LEAVE \?CCL55
+       EQUAL?  PRSO,DRIVEWAY \?CCL58
+       CALL    HAR-HAR
+       RSTACK  
+?CCL58:        FSET?   FRONT-GATE,OPENBIT /?CCL60
+       CALL    TOO-BAD-BUT,FRONT-GATE,STR?61
+       RSTACK  
+?CCL60:        CALL    CAR-TO-DRIVEWAY
+       RSTACK  
+?CCL55:        EQUAL?  PRSO,P?NORTH /?CTR61
+       EQUAL?  PRSO,INTDIR \?CCL62
+       CALL    ADJ-USED?,W?NORTH
+       ZERO?   STACK /?CCL62
+?CTR61:        FSET?   FRONT-GATE,OPENBIT /?CCL69
+       CALL    TOO-BAD-BUT,FRONT-GATE,STR?61
+       RSTACK  
+?CCL69:        CALL    CAR-TO-DRIVEWAY
+       RSTACK  
+?CCL62:        EQUAL?  PRSO,P?OUT \?CCL71
+       EQUAL?  P-PRSA-WORD,FALSE-VALUE,W?GO /FALSE
+       FSET?   FRONT-GATE,OPENBIT /?CCL76
+       CALL    TOO-BAD-BUT,FRONT-GATE,STR?61
+       RSTACK  
+?CCL76:        CALL    CAR-TO-DRIVEWAY
+       RSTACK  
+?CCL71:        CALL    YOU-CANT,STR?41
+       RSTACK  
+?CCL6: EQUAL?  PRSA,V?WALK \?CCL78
+       EQUAL?  PRSO,P?OUT \?CCL78
+       MOVE    WINNER,HERE
+       CALL    OWN-FEET
+       RSTACK  
+?CCL78:        EQUAL?  PRSA,V?WALK,V?STAND,V?FOLLOW /?CTR81
+       EQUAL?  PRSA,V?WALK-TO,V?THROUGH,V?LEAVE \?CCL82
+       ZERO?   PRSO /?CCL82
+       EQUAL?  PRSO,LUGGAGE,ROOMS,CAR /?CCL82
+?CTR81:        CALL    FIRST-YOU,STR?224,CAR
+       MOVE    WINNER,HERE
+       EQUAL?  PRSA,V?STAND /TRUE
+       RFALSE  
+?CCL82:        EQUAL?  PRSO,ROOMS \FALSE
+       EQUAL?  PRSA,V?STOP \FALSE
+       CALL    PERFORM,PRSA,CAR
+       RTRUE   
+?CCL3: EQUAL?  ARG,M-LOOK \?CCL97
+       LOC     WINNER
+       EQUAL?  STACK,CAR \TRUE
+       PRINTI  "You are sitting in your new little "
+       PRINTD  CAR
+       PRINTR  "."
+?CCL97:        ZERO?   ARG \FALSE
+       EQUAL?  PRSA,V?EXAMINE \?CCL105
+       CALL    TELL-ABOUT-CAR
+       RTRUE   
+?CCL105:       EQUAL?  PRSA,V?UNLOCK /?CCL107
+       EQUAL?  PRSA,V?LOCK,V?LAMP-ON,V?LAMP-OFF /?CCL107
+       EQUAL?  PRSA,V?OPEN,V?CLOSE,V?CLIMB-ON \FALSE
+?CCL107:       CALL    NO-NEED,STR?225
+       RSTACK  
+
+
+       .FUNCT  CAR-TO-COURTYARD
+       MOVE    CAR,COURTYARD
+       PRINTI  "Your headlights bravely pierce the gloom as you enter the "
+       PRINTD  COURTYARD
+       PRINTI  ". You get out of your car.
+"
+       CALL    GOTO,COURTYARD
+       RSTACK  
+
+
+       .FUNCT  CAR-TO-DRIVEWAY
+       SET     'CLOCK-WAIT,TRUE-VALUE
+       PRINTR  "(You can't leave yet. There's a mystery to be solved!)"
+
+
+       .FUNCT  TELL-ABOUT-CAR,X
+       PRINTI  "Your new little "
+       CALL    PRINT-COLOR
+       ZERO?   STACK /?PRG7
+       PRINTC  32
+?PRG7: PRINTD  CAR
+       PRINTR  " is parked here."
+
+
+       .FUNCT  VOICE-F
+       EQUAL?  HERE,DRIVEWAY \?CCL3
+       ZERO?   DRAGON-EYE-COLOR /FALSE
+       EQUAL?  PRSA,V?LISTEN /?CCL6
+       CALL    SPEAKING-VERB?
+       ZERO?   STACK /FALSE
+?CCL6: CALL    VOICE-SAYS
+       RSTACK  
+?CCL3: EQUAL?  HERE,DINING-ROOM \FALSE
+       EQUAL?  PRSA,V?LISTEN \FALSE
+       CALL    BUST-F
+       RSTACK  
+
+
+       .FUNCT  HORN-F
+       EQUAL?  PRSA,V?SOUND,V?SLAP /?CCL3
+       EQUAL?  PRSA,V?RUB,V?PUSH,V?RING \FALSE
+?CCL3: GETB    LAST-NAME,0
+       ZERO?   STACK /?CCL8
+       CALL    GATE-OPENS
+       ZERO?   STACK \TRUE
+       PRINTR  """H-O-O-O-N-K!"""
+?CCL8: CALL    THIS-IS-IT,VOICE
+       MOVE    VOICE,DRIVEWAY
+       CALL    PERFORM,V?PUSH,DRAGON-EYE
+       RTRUE   
+
+
+       .FUNCT  DRIVEWAY-F,RARG=0
+       EQUAL?  RARG,M-BEG \?CCL3
+       EQUAL?  PRSA,V?YELL \?CCL6
+       CALL    PERFORM,V?KNOCK,FRONT-GATE
+       RTRUE   
+?CCL6: ZERO?   DRAGON-EYE-COLOR /FALSE
+       CALL    SPEAKING-VERB?
+       ZERO?   STACK \?CCL8
+       EQUAL?  PRSA,V?LISTEN \FALSE
+       EQUAL?  PRSO,DRAGON-EYE,DRAGON,FRONT-GATE \FALSE
+?CCL8: CALL    VOICE-SAYS
+       RTRUE   
+?CCL3: EQUAL?  RARG,M-LOOK \FALSE
+       PRINTI  "You are by the "
+       FSET?   FRONT-GATE,OPENBIT \?PRG23
+       PRINTI  "open "
+?PRG23:        PRINTD  FRONT-GATE
+       PRINTI  " of "
+       PRINTD  CASTLE
+       PRINTI  ". You can hear the ocean beating urgently against the rocks far below.
+"
+       CALL    TELL-ABOUT-DRAGON
+       RTRUE   
+
+
+       .FUNCT  DRAGON-F
+       EQUAL?  PRSA,V?LOOK-INSIDE,V?EXAMINE \?CCL3
+       CALL    TELL-ABOUT-DRAGON
+       RTRUE   
+?CCL3: CALL    DRAGON-EYE-F
+       RSTACK  
+
+
+       .FUNCT  TELL-ABOUT-DRAGON
+       PRINTI  "In the moonlit gloom, you can make out an ornament on the gate. It's a winged, two-legged dragon called a wyvern, which crests the "
+       PRINT   TRESYLLIAN
+       PRINTI  " family's coat of arms.
+The dragon appears in profile. "
+       CALL    THIS-IS-IT,DRAGON-EYE
+       CALL    TELL-ABOUT-EYE
+       RTRUE   
+
+
+       .FUNCT  I-DRAGON-EYE,GARG=0
+       GETB    LAST-NAME,0
+       ZERO?   STACK \FALSE
+       CALL    PERFORM,V?PUSH,DRAGON-EYE
+       RETURN  2
+
+
+       .FUNCT  DRAGON-EYE-F
+       EQUAL?  PRSA,V?LOOK-INSIDE,V?EXAMINE \?CCL3
+       CALL    TELL-ABOUT-EYE
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?LEAP,V?CLIMB-ON,V?BOARD \?CCL5
+       PRINT   TOO-SLIPPERY
+       RTRUE   
+?CCL5: EQUAL?  PRSA,V?TURN,V?SLAP /?CTR8
+       EQUAL?  PRSA,V?RUB,V?RING,V?PUSH /?CTR8
+       EQUAL?  PRSA,V?MUNG,V?MOVE,V?KNOCK \?CCL9
+?CTR8: LESS?   DRAGON-EYE-COLOR,0 /?CND13
+       SET     'DRAGON-EYE-COLOR,-1
+       PRINTI  "The "
+       PRINTD  DRAGON-EYE
+       PRINTI  " glows red. "
+?CND13:        EQUAL?  PRSA,V?PUSH /?PRG21
+       PRINTI  "Evidently you just pushed a button. "
+?PRG21:        PRINTI  "A voice comes from a hidden speaker. It says:
+"
+       CALL    VOICE-SAYS
+       RTRUE   
+?CCL9: EQUAL?  PRSA,V?TAKE \FALSE
+       PRINTI  "It's part of the "
+       PRINTD  FRONT-GATE
+       PRINTR  "."
+
+
+       .FUNCT  TELL-ABOUT-EYE
+       ZERO?   DRAGON-EYE-COLOR \?PRG6
+       PRINTR  "The moonlight glints on its lone visible eye."
+?PRG6: PRINTI  "The "
+       PRINTD  DRAGON-EYE
+       PRINTI  " is glowing "
+       GRTR?   DRAGON-EYE-COLOR,0 \?PRG13
+       PRINTR  "green."
+?PRG13:        PRINTR  "red."
+
+
+       .FUNCT  VOICE-SAYS
+       CALL    QUEUE,I-DRAGON-EYE,0
+       GETB    LAST-NAME,0
+       ZERO?   STACK /?CND1
+       PRINTI  """Please enter, "
+       CALL    TITLE-NAME
+       ZERO?   STACK /?PRG9
+       PRINTC  46
+?PRG9: PRINTI  """
+"
+       CALL    GATE-OPENS
+       RTRUE   
+?CND1: CALL    QUEUE,I-FRIEND-GREETS,6
+       PRINTI  """Please announce "
+       PRINTD  PLAYER
+       PRINTI  ". State your title -- such as Lord or Lady, Sir or Dame, Mr. or Ms. -- and your first and last name.""
+"
+       CALL    GET-NAME
+       PRINTI  """And what is "
+       PRINTD  YOUR-COLOR
+       PRINTI  ", "
+       CALL    TITLE-NAME
+       PRINTI  "?""
+"
+       CALL    GET-COLOR
+       PRINTI  """Jolly good! The spare bedroom is decorated in "
+       CALL    PRINT-COLOR
+       PRINTI  "! "
+       PRINTI  "Please enter."""
+       CRLF    
+       CALL    GATE-OPENS
+       RTRUE   
+
+
+       .FUNCT  GATE-OPENS
+       EQUAL?  HERE,DRIVEWAY \FALSE
+       FSET?   FRONT-GATE,OPENBIT /FALSE
+       REMOVE  VOICE
+       FSET    FRONT-GATE,OPENBIT
+       FCLEAR  FRONT-GATE,LOCKED
+       CALL    THIS-IS-IT,FRONT-GATE
+       PRINTI  "The "
+       EQUAL?  DRAGON-EYE-COLOR,1 /?PRG16
+       LESS?   DRAGON-EYE-COLOR,0 \?CND10
+       PRINTI  "red "
+?CND10:        SET     'DRAGON-EYE-COLOR,1
+       PRINTI  "eye turns green, and the "
+?PRG16:        PRINTD  FRONT-GATE
+       PRINTR  " creaks open."
+
+
+       .FUNCT  FRONT-GATE-F
+       EQUAL?  PRSA,V?KNOCK \?CCL3
+       PRINTR  "Apparently no one hears you."
+?CCL3: EQUAL?  PRSA,V?UNLOCK,V?SHAKE,V?MUNG \?CCL8
+       PRINTR  "Except for your rattling the gate, the silence remains unbroken."
+?CCL8: EQUAL?  PRSA,V?LEAP,V?CLIMB-ON,V?BOARD \?CCL12
+       PRINT   TOO-SLIPPERY
+       RTRUE   
+?CCL12:        EQUAL?  PRSA,V?WALK-TO \?CCL16
+       EQUAL?  HERE,DRIVEWAY,COURTYARD /?CCL16
+       CALL    PERFORM,PRSA,COURTYARD
+       RTRUE   
+?CCL16:        EQUAL?  PRSA,V?OPEN \?CCL20
+       FSET?   FRONT-GATE,LOCKED \FALSE
+       PRINTR  "It seems to be locked."
+?CCL20:        EQUAL?  PRSA,V?SEARCH-FOR /?CTR26
+       EQUAL?  PRSA,V?SEARCH,V?LOOK-ON,V?EXAMINE \?CCL27
+?CTR26:        EQUAL?  HERE,DRIVEWAY \FALSE
+       CALL    TELL-ABOUT-DRAGON
+       RTRUE   
+?CCL27:        IN?     VOICE,HERE \FALSE
+       CALL    VOICE-F
+       RSTACK  
+
+
+       .FUNCT  COURTYARD-F,RARG=0
+       EQUAL?  RARG,M-ENTER \?CCL3
+       IN?     FRIEND,LIMBO \?CND4
+       MOVE    FRIEND,COURTYARD
+?CND4: ZERO?   DRAGON-EYE-COLOR /?CND6
+       SET     'DRAGON-EYE-COLOR,0
+?CND6: FSET?   FRONT-GATE,LOCKED /FALSE
+       FCLEAR  FRONT-GATE,OPENBIT
+       FSET    FRONT-GATE,LOCKED
+       PRINTI  "The "
+       PRINTD  FRONT-GATE
+       PRINTR  " closes and locks behind you."
+?CCL3: EQUAL?  RARG,M-LOOK \?CCL14
+       FSET?   HERE,TOUCHBIT /?CND15
+       FSET    HERE,TOUCHBIT
+       PRINTI  "As flood lights blaze on, you look around. "
+?CND15:        CALL    TELL-LIKE-BROCHURE
+       PRINT   DARK-TURRETS
+       RTRUE   
+?CCL14:        EQUAL?  RARG,M-FLASH \FALSE
+       IN?     FRIEND,COURTYARD \FALSE
+       FSET?   FRIEND,TOUCHBIT /FALSE
+       ZERO?   CLOCK-WAIT \FALSE
+       FSET    FRIEND,TOUCHBIT
+       FCLEAR  FRIEND,NDESCBIT
+       SET     'FOLLOWER,FRIEND
+       SET     'QCONTEXT,FRIEND
+       CALL    QUEUE,I-FRIEND-GREETS,0
+       CALL    QUEUE,I-TOUR,7
+       CALL    ESTABLISH-GOAL,BUTLER,COURTYARD
+       FCLEAR  FRONT-DOOR,LOCKED
+       SET     'QCONTEXT,FRIEND
+       CALL    THIS-IS-IT,FRIEND
+       PUTP    FRIEND,P?LDESC,12
+       SET     'AWAITING-REPLY,FRIEND-C
+       CALL    QUEUE,I-REPLY,CLOCKER-RUNNING
+       PRINTI  "
+Someone comes running out of the wing to greet you. "
+       GETP    FRIEND,P?TEXT
+       PRINT   STACK
+       PRINTI  " You recognize her as your friend, "
+       PRINTD  FRIEND
+       PRINTI  " Lynd.
+"""
+       CALL    PRINT-NAME,FIRST-NAME
+       PRINTI  "!"" she cries with outflung arms. ""You sweet thing, to answer my letter in person this way! And all the people I wrote about are here tonight for Lionel's memorial birthday dinner!""
+After a warm hug, she asks anxiously, """
+       GET     QUESTIONS,AWAITING-REPLY
+       PRINT   STACK
+       PRINTI  """
+"
+       RETURN  2
+
+
+       .FUNCT  TELL-LIKE-BROCHURE,DR=0
+       PRINTI  "It looks even lovelier than it sounds in the "
+       PRINTD  BROCHURE
+       PRINTC  46
+       ZERO?   DR /?CND3
+       CALL    OPEN-DOOR?,DR
+?CND3: CRLF    
+       RTRUE   
+
+
+       .FUNCT  MAZE-EXIT,RM
+       EQUAL?  OHERE,GARDEN \?CCL3
+       SET     'RM,COURTYARD
+       JUMP    ?CND1
+?CCL3: SET     'RM,GARDEN
+?CND1: EQUAL?  WINNER,PLAYER /?PRG6
+       RETURN  RM
+?PRG6: PRINTI  "You stumble blindly through the maze and suddenly emerge in the "
+       PRINTD  RM
+       PRINTI  ".
+"
+       RETURN  RM
+
+
+       .FUNCT  MAZE-F,RARG=0
+       ZERO?   RARG \FALSE
+       EQUAL?  PRSA,V?THROUGH \FALSE
+       EQUAL?  HERE,MAZE \FALSE
+       CALL    MAZE-EXIT
+       CALL    GOTO,STACK
+       RSTACK  
+
+
+       .FUNCT  GARDEN-F,RARG=0,OBJ
+       EQUAL?  RARG,M-LOOK \?CCL3
+       PRINTI  "Here in the central garden the plants quake nervously in the mist. In the very middle is a "
+       PRINTD  POND
+       PRINTR  "."
+?CCL3: ZERO?   RARG \FALSE
+       EQUAL?  PRSA,V?SEARCH-FOR,V?SEARCH,V?EXAMINE \FALSE
+       CALL    FIND-FLAG-HERE,SECRETBIT >OBJ
+       ZERO?   OBJ /FALSE
+       CALL    DISCOVER,OBJ,HERE
+       RTRUE   
+
+
+       .FUNCT  POND-F
+       EQUAL?  PRSA,V?THROUGH /?PRG6
+       EQUAL?  PRSA,V?SWIM,V?LEAP,V?BOARD \?CCL3
+?PRG6: PRINTR  "On second thought, it looks too dark and slippery."
+?CCL3: EQUAL?  PRSA,V?LOOK-UNDER,V?LOOK-INSIDE,V?EXAMINE \FALSE
+       CALL    TELL-AS-WELL-AS,POND,STR?228
+       RTRUE   
+
+
+       .FUNCT  FRONT-DOOR-F
+       EQUAL?  PRSA,V?WALK-TO \FALSE
+       CALL    OUTSIDE?,HERE
+       ZERO?   STACK /?CCL6
+       CALL    PERFORM,V?WALK-TO,COURTYARD
+       RTRUE   
+?CCL6: CALL    PERFORM,V?WALK-TO,FOYER
+       RTRUE   
+
+
+       .FUNCT  FOYER-F,RARG=0
+       EQUAL?  RARG,M-ENTER \?CCL3
+       FSET?   FOYER,TOUCHBIT /FALSE
+       FSET    FOYER,TOUCHBIT
+       PRINTI  "As you enter the foyer, you're overwhelmed by the English past. Those barbarous times when Jack's ancestors had to shut themselves up in a fortified castle have softened into gracious country living. Yet "
+       PRINTD  FRIEND
+       PRINTR  " is clearly anxious."
+?CCL3: EQUAL?  RARG,M-LOOK \?CCL10
+       CALL    TELL-LIKE-BROCHURE
+       CALL    DESCRIBE-CONTENTS,COAT-RACK
+       RTRUE   
+?CCL10:        EQUAL?  RARG,M-FLASH \FALSE
+       FSET?   LORD,TOUCHBIT /TRUE
+       IN?     LORD,FOYER \TRUE
+       CALL    LORD-INTRO
+       RTRUE   
+
+
+       .FUNCT  DESCRIBE-CONTENTS,OBJ
+       CALL    FIND-FLAG-NOT,OBJ,NDESCBIT
+       ZERO?   STACK /FALSE
+       PRINTI  "On"
+       CALL    PRINTT,OBJ
+       PRINTI  " you see"
+       CALL    PRINT-CONTENTS,OBJ
+       PRINTI  ".
+"
+       RTRUE   
+
+
+       .FUNCT  UMBRELLA-STAND-F
+       FCLEAR  UMBRELLA-STAND,NDESCBIT
+       EQUAL?  PRSA,V?CLOSE,V?OPEN \?CCL3
+       CALL    YOU-CANT
+       RSTACK  
+?CCL3: EQUAL?  PRSA,V?TAKE \?CCL5
+       CALL    NOUN-USED?,W?UMBRELLA
+       ZERO?   STACK /FALSE
+       PRINTR  "But it's not raining!"
+?CCL5: EQUAL?  PRSA,V?SEARCH-FOR /?CCL12
+       EQUAL?  PRSA,V?SEARCH,V?LOOK-INSIDE,V?EXAMINE \FALSE
+?CCL12:        IN?     CANE,UMBRELLA-STAND \?CCL17
+       FSET?   CANE,NDESCBIT \?CCL17
+       FCLEAR  CANE,NDESCBIT
+       FCLEAR  CANE,SECRETBIT
+       FSET    CANE,SEENBIT
+       FSET    CANE,TAKEBIT
+       FSET    CANE,TOUCHBIT
+       CALL    THIS-IS-IT,CANE
+       PRINTR  "Among the umbrellas there's a cane that looks odd."
+?CCL17:        EQUAL?  PRSA,V?EXAMINE \?CCL23
+       CALL    TELL-LIKE-BROCHURE
+       RSTACK  
+?CCL23:        CALL    TELL-AS-WELL-AS,UMBRELLA-STAND,STR?229
+       RTRUE   
+
+
+       .FUNCT  DRAWING-ROOM-F,RARG=0,PER
+       EQUAL?  RARG,M-BEG \?CCL3
+       EQUAL?  PRSA,V?CLOSE,V?OPEN \?CCL6
+       EQUAL?  PRSO,SECRET-DRAWING-DOOR \?CCL6
+       CALL    YOU-CANT,FALSE-VALUE,PLAYER,STR?231
+       RTRUE   
+?CCL6: CALL    SECRET-CHECK,RARG
+       RSTACK  
+?CCL3: EQUAL?  RARG,M-LOOK \?CCL10
+       CALL    TELL-LIKE-BROCHURE,SECRET-DRAWING-DOOR
+       RSTACK  
+?CCL10:        EQUAL?  RARG,M-FLASH \FALSE
+       IN?     DEALER,DRAWING-ROOM \FALSE
+       FSET?   DEALER,TOUCHBIT /FALSE
+       FSET    DEALER,TOUCHBIT
+       LOC     PAINTER
+       EQUAL?  STACK,HERE,PSEUDO-OBJECT \FALSE
+       GETP    DEALER,P?LDESC
+       EQUAL?  STACK,2 \FALSE
+       PRINTI  "A tall graceful older couple in evening clothes are chatting and "
+       GET     LDESC-STRINGS,2
+       PRINT   STACK
+       PRINTI  ".
+"
+       SET     'QCONTEXT,PAINTER
+       LOC     LORD
+       EQUAL?  STACK,HERE,PSEUDO-OBJECT \?CCL27
+       SET     'PER,LORD
+       JUMP    ?CND25
+?CCL27:        LOC     FRIEND
+       EQUAL?  STACK,HERE,PSEUDO-OBJECT \?CND25
+       CALL    THIS-IS-IT,FRIEND
+       SET     'PER,FRIEND
+?CND25:        ZERO?   PER /FALSE
+       PRINTD  PER
+       PRINT   INTRODUCES
+       PRINTI  "them as Montague Hyde and Vivien Pentreath.
+Hyde smiles and bows stiffly. And Vivien murmurs in an attractively low voice, ""How do you do, "
+       CALL    TITLE-NAME
+       ZERO?   STACK /?PRG38
+       PRINTC  46
+?PRG38:        PRINTI  """
+""Believe it or not, this young "
+       ZERO?   GENDER-KNOWN \?CCL42
+       PRINTI  "person"
+       JUMP    ?PRG51
+?CCL42:        FSET?   PLAYER,FEMALE \?PRG49
+       PRINTI  "lady"
+       JUMP    ?PRG51
+?PRG49:        PRINTI  "man"
+?PRG51:        PRINTI  " is a famous American detective,"" "
+       PRINTD  PER
+       PRINTI  " tells them.
+"
+       LOC     FRIEND
+       EQUAL?  STACK,HERE,PSEUDO-OBJECT \FALSE
+       PRINTI  """Not a police detective, of course,"" "
+       PRINTD  FRIEND
+       PRINTI  " adds as they both stiffen, ""but a solver of all sorts of mysteries in the States. We're hoping to find out who or what is haunting "
+       PRINTD  CASTLE
+       PRINTR  "."""
+
+
+       .FUNCT  LOVER-PIC-F
+       EQUAL?  PRSA,V?EXAMINE \FALSE
+       PRINTI  "It's a portrait by "
+       PRINTD  PAINTER
+       PRINTI  " of "
+       PRINTD  LOVER
+       PRINTI  ", a lovely young woman with flowing blonde hair, standing on a grassy slope, gazing out to sea. It's painted in pastel tones, which emphasize "
+       PRINTD  LOVER
+       PRINTR  "'s violet eyes. There's something ethereal and fairylike about her. Ironically, her silvery white, sleeveless gown is the very one she was wearing at the time of her accident."
+
+
+       .FUNCT  TAPESTRY-F
+       EQUAL?  PRSA,V?SEARCH,V?EXAMINE \?CCL3
+       CALL    TELL-LIKE-BROCHURE
+       EQUAL?  VARIATION,PAINTER-C \TRUE
+       PRINTR  "Someone has added a star in red thread on the maiden's ARM."
+?CCL3: EQUAL?  PRSA,V?LOOK-UNDER,V?LOOK-BEHIND \FALSE
+       FSET    SECRET-DRAWING-DOOR,TOUCHBIT
+       CALL    THIS-IS-IT,SECRET-DRAWING-DOOR
+       PRINTI  "Hidden behind the "
+       PRINTD  TAPESTRY
+       PRINTI  " is"
+       CALL    PRINTT,SECRET-DRAWING-DOOR
+       PRINTR  "!"
+
+
+       .FUNCT  GREAT-HALL-F,RARG=0
+       EQUAL?  RARG,M-LOOK \?CCL3
+       CALL    TELL-LIKE-BROCHURE
+       CALL    GREAT-HALL-IS-FLOORED
+       RTRUE   
+?CCL3: EQUAL?  RARG,M-FLASH \FALSE
+       IN?     DEB,GREAT-HALL \FALSE
+       FSET?   DEB,TOUCHBIT /FALSE
+       ZERO?   CLOCK-WAIT \FALSE
+       FSET    DEB,TOUCHBIT
+       FCLEAR  DEB,NDESCBIT
+       LOC     OFFICER
+       EQUAL?  STACK,HERE,PSEUDO-OBJECT \?PRG18
+       GETP    DEB,P?LDESC
+       EQUAL?  STACK,1 \?PRG18
+       PRINTI  "A young couple are dancing to the faint sound of rock music from a portable radio on a table nearby.
+"
+?PRG18:        GETP    DEB,P?TEXT
+       PRINT   STACK
+       CRLF    
+       CALL    COMMON-DESC,OFFICER
+       PRINTI  "
+They stop dancing, turn off the radio, and greet you."
+       LOC     FRIEND
+       EQUAL?  STACK,HERE,PSEUDO-OBJECT \?CND22
+       PRINTC  32
+       PRINTD  FRIEND
+       PRINT   INTRODUCES
+       PRINTI  "them as the Honourable Iris Vane and Lt. Ian Fordyce of Her Majesty's Coldstream Guards.
+"
+?CND22:        PUTP    DEB,P?LDESC,0
+       CALL    THIS-IS-IT,DEB
+       PUTP    OFFICER,P?LDESC,0
+       CALL    THIS-IS-IT,OFFICER
+       CALL    QUEUE,I-TOUR,0
+       CALL    QUEUE,I-REPLY,CLOCKER-RUNNING
+       ZERO?   GENDER-KNOWN /?CTR27
+       FSET?   PLAYER,FEMALE /?CCL28
+?CTR27:        ZERO?   GENDER-KNOWN \?PRG36
+       PRINTI  """What a lark, having a Yank sleuth in our midst"
+       JUMP    ?PRG38
+?PRG36:        PRINTI  """My dear! What a handsome addition to your guest list"
+?PRG38:        PRINTI  "!"" chirps Iris. Her green eyes sparkle "
+       ZERO?   GENDER-KNOWN \?PRG45
+       PRINTI  "a trifle malic"
+       JUMP    ?PRG47
+?PRG45:        PRINTI  "flirtat"
+?PRG47:        PRINTI  "iously as she offers you her delicate hand. "
+       ZERO?   GENDER-KNOWN \?CCL51
+       SET     'QCONTEXT,OFFICER
+       PUTP    OFFICER,P?LDESC,12
+       SET     'AWAITING-REPLY,OFFICER-1-R
+       PRINTI  """I always find Americans so innocently fascinating! I'm sure you'll have loads to tell us about the baffling mysteries you've solved...""
+""Belt up, Iris, there's a good girl,"" says Ian. Flashing you an apologetic smile, he comments, ""Spoiled rotten, I'm afraid. Personally I should like nothing better than to hear all about your mystery cases. But first tell us: "
+       GET     QUESTIONS,AWAITING-REPLY
+       PRINT   STACK
+       PRINTI  """
+"
+       RETURN  2
+?CCL51:        SET     'QCONTEXT,DEB
+       PUTP    DEB,P?LDESC,12
+       SET     'AWAITING-REPLY,DEB-C
+       PRINTI  """Tell me, "
+       CALL    TITLE-NAME
+       PRINTI  " -- "
+       GET     QUESTIONS,AWAITING-REPLY
+       PRINT   STACK
+       PRINTI  """
+"
+       RETURN  2
+?CCL28:        EQUAL?  VARIATION,FRIEND-C \?CND60
+       PRINTD  DEB
+       PRINTI  " pulls Jack aside, whispers something to him, and giggles."
+       CRLF    
+?CND60:        SET     'QCONTEXT,OFFICER
+       CALL    THIS-IS-IT,OFFICER
+       PUTP    OFFICER,P?LDESC,12
+       SET     'AWAITING-REPLY,OFFICER-2-R
+       PRINTI  """I say!"" exclaims Ian, bringing your hand to his lips. His glance runs swiftly over your face and figure with an air of expert appraisal. """
+       GET     QUESTIONS,AWAITING-REPLY
+       PRINT   STACK
+       PRINTI  """
+"
+       RETURN  2
+
+
+       .FUNCT  GREAT-HALL-IS-FLOORED
+       PRINTI  "The hall is floored with black and white marble tiles. They've been worn smooth by footsteps over the centuries, especially near the archway to the "
+       PRINTD  DRAWING-ROOM
+       PRINTR  "."
+
+
+       .FUNCT  ARMOR-F
+       FCLEAR  ARMOR,NDESCBIT
+       EQUAL?  PRSA,V?EXAMINE \?CCL3
+       PRINTR  "This is a full suit of steel body armour. It creaks as you walk past."
+?CCL3: EQUAL?  PRSA,V?SEARCH-FOR /?CCL7
+       EQUAL?  PRSA,V?SEARCH,V?OPEN,V?LOOK-INSIDE \FALSE
+?CCL7: IN?     CLUE-3,ARMOR \FALSE
+       FSET?   CLUE-3,SECRETBIT \FALSE
+       FSET    ARMOR,OPENBIT
+       CALL    DISCOVER,CLUE-3
+       RSTACK  
+
+
+       .FUNCT  SECRET-SITTING-DOOR-F
+       EQUAL?  PRSA,V?OPEN,V?LOOK-INSIDE \FALSE
+       PRINTR  "It seems to be stuck closed."
+
+
+       .FUNCT  SITTING-ROOM-F,RARG=0
+       EQUAL?  RARG,M-BEG \?CCL3
+       CALL    SECRET-CHECK,RARG
+       RSTACK  
+?CCL3: EQUAL?  RARG,M-LOOK \FALSE
+       CALL    TELL-LIKE-BROCHURE
+       PRINTI  "It's a comfy place to read a book, play the piano, or just relax."
+       CRLF    
+       CALL    DESCRIBE-CONTENTS,PIANO
+       CALL    DESCRIBE-CONTENTS,WRITING-DESK
+       RTRUE   
+
+
+       .FUNCT  WYVERN-F
+       EQUAL?  PRSA,V?OPEN,V?LOOK-INSIDE \?CCL3
+       CALL    SECRET-SITTING-DOOR-F
+       RSTACK  
+?CCL3: EQUAL?  PRSA,V?SIT-AT /?CTR4
+       EQUAL?  PRSA,V?SIT,V?CLIMB-ON,V?BOARD \?CCL5
+?CTR4: MOVE    PLAYER,WYVERN
+       PRINTR  "Okay, but it's not that comfortable."
+?CCL5: EQUAL?  PRSA,V?TURN /?CCL11
+       EQUAL?  PRSA,V?SLAP,V?RUB,V?PUSH /?CCL11
+       EQUAL?  PRSA,V?MUNG,V?MOVE-DIR,V?MOVE \FALSE
+?CCL11:        CALL    OPEN-SECRET,STR?232,WYVERN,SECRET-SITTING-DOOR
+       FCLEAR  SECRET-SITTING-DOOR,OPENBIT
+       PRINTI  "Before you know it, "
+       IN?     PLAYER,WYVERN \?PRG22
+       PRINTI  "you're dumped into it.
+"
+       CALL    GOTO,SITTING-PASSAGE
+       RTRUE   
+?PRG22:        PRINTR  "it creaks upward to close again."
+
+
+       .FUNCT  WRITING-DESK-F
+       CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       IN?     LETTER-MAID,WRITING-DESK \FALSE
+       FCLEAR  LETTER-MAID,NDESCBIT
+       RFALSE  
+
+
+       .FUNCT  PIANO-F,O,N=0
+       EQUAL?  PRSA,V?LISTEN \?CCL3
+       LOC     PIANO
+       FIRST?  STACK >O /?PRG4
+?PRG4: ZERO?   O /FALSE
+       FSET?   O,PERSONBIT \?CCL10
+       GETP    O,P?LDESC
+       EQUAL?  STACK,22 \?CCL10
+       PRINTR  "The music sounds lovely."
+?CCL10:        NEXT?   O >O /?PRG4
+       JUMP    ?PRG4
+?CCL3: EQUAL?  PRSA,V?PLAY \?CCL16
+       PUTP    WINNER,P?LDESC,22
+       ZERO?   PRSI /?PRG21
+       FSET?   PRSI,PERSONBIT \?PRG21
+       PUTP    PRSI,P?LDESC,22
+?PRG21:        CALL    HE-SHE-IT,WINNER,TRUE-VALUE,STR?241
+       PRINTI  " down"
+       FIRST?  SITTING-ROOM >O /?PRG23
+?PRG23:        ZERO?   O \?CCL27
+       ZERO?   N \?REP24
+       PRINTI  " and"
+?REP24:        ZERO?   N \?CCL43
+       CALL    HE-SHE-IT,WINNER,-1,STR?242
+       JUMP    ?PRG62
+?CCL27:        GETP    O,P?LDESC
+       EQUAL?  STACK,22 \?CND25
+       EQUAL?  O,WINNER /?CND25
+       ZERO?   N \?CND35
+       PRINTI  " with"
+?CND35:        INC     'N
+       PRINTC  32
+       PRINTD  O
+       PRINTI  " and"
+?CND25:        NEXT?   O >O /?PRG23
+       JUMP    ?PRG23
+?CCL43:        GETP    PLAYER,P?LDESC
+       EQUAL?  STACK,22 \?PRG58
+       PRINTI  " you "
+       EQUAL?  N,1 \?PRG56
+       PRINTI  "both"
+       JUMP    ?PRG60
+?PRG56:        PRINTI  "all"
+       JUMP    ?PRG60
+?PRG58:        PRINTI  " they"
+?PRG60:        PRINTI  " play"
+?PRG62:        PRINTI  " a lovely "
+       GET     PIANO-PIECES,N
+       PRINT   STACK
+       GRTR?   N,2 \?PRG68
+       PRINTI  "tet"
+?PRG68:        PRINTR  "."
+?CCL16:        CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       IN?     MUSIC,PIANO \FALSE
+       FCLEAR  MUSIC,NDESCBIT
+       RFALSE  
+
+
+       .FUNCT  MUSIC-F
+       EQUAL?  PRSA,V?PLAY,V?LISTEN \?CCL3
+       IN?     PIANO,HERE \?CCL6
+       CALL    PIANO-F
+       RTRUE   
+?CCL6: CALL    NOT-HERE,PIANO
+       RTRUE   
+?CCL3: CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       FCLEAR  MUSIC,NDESCBIT
+       EQUAL?  PRSA,V?READ /?CTR9
+       EQUAL?  PRSA,V?OPEN,V?LOOK-INSIDE,V?EXAMINE \FALSE
+?CTR9: CALL    NOT-HOLDING?,PRSO
+       ZERO?   STACK \TRUE
+       PRINTI  "It's "
+       EQUAL?  VARIATION,PAINTER-C \?CCL19
+       PRINTR  "Beethoven's ""Suite No. 9."" Someone has drawn a star in red ink over the first four letters of the word ""SUITe."""
+?CCL19:        EQUAL?  VARIATION,DOCTOR-C \?PRG26
+       PRINTR  """Funeral March of a Marionette."""
+?PRG26:        PRINTR  "theme music from the American radio show, ""A Prairie Home Companion."""
+
+
+       .FUNCT  CORR-1-F,ARG=0
+       EQUAL?  ARG,M-LOOK \FALSE
+       PRINTI  "The "
+       PRINTD  CORR-1
+       PRINTI  " goes between the two great halls to east and west. Behind sliding doors, the "
+       PRINTD  DINING-ROOM
+       PRINTI  " is north and the "
+       PRINTD  SITTING-ROOM
+       PRINTR  " is south."
+
+
+       .FUNCT  DINING-ROOM-F,RARG=0,N
+       EQUAL?  RARG,M-LOOK \?CCL3
+       PRINT   DINING-DESC
+       RTRUE   
+?CCL3: EQUAL?  RARG,M-ENTER \?CCL7
+       CALL    QUEUED?,I-DINNER-SIT
+       ZERO?   STACK /?CCL10
+       IN?     LORD,DINING-ROOM \?CCL13
+       CALL    QUEUE,I-DINNER-SIT,1
+       RFALSE  
+?CCL13:        CALL    FIND-FLAG-HERE,PERSONBIT,PLAYER,BUTLER >N
+       ZERO?   N /FALSE
+       CALL    HE-SHE-IT,N,TRUE-VALUE
+       PRINTR  " says, ""Let's wait for his lordship."""
+?CCL10:        ZERO?   MISSED-DINNER /FALSE
+       IN?     FRIEND,HERE \FALSE
+       SET     'MISSED-DINNER,FALSE-VALUE
+       FSET?   DINING-ROOM,TOUCHBIT /?CND22
+       FSET    DINING-ROOM,TOUCHBIT
+       PRINT   DINING-DESC
+?CND22:        CALL    THIS-IS-IT,FRIEND
+       SET     'QCONTEXT,FRIEND
+       PRINTD  FRIEND
+       PRINTI  " says, ""We didn't know when you would come to dinner, so we started without you."
+       EQUAL?  LIONEL-SPEAKS-COUNTER,INIT-LIONEL-SPEAKS-COUNTER \?CCL30
+       PRINTR  """"
+?CCL30:        CALL    QUEUE,I-DINNER-TALK,1
+       PRINTI  " And "
+       ZERO?   LIONEL-SPEAKS-COUNTER \?PRG40
+       PRINTI  "then Lionel spoke"
+       JUMP    ?PRG42
+?PRG40:        PRINTI  "now Lionel is speaking"
+?PRG42:        PRINTR  " on tape!"""
+?CCL7: EQUAL?  RARG,M-EXIT \FALSE
+       CALL    QUEUED?,I-LIONEL-SPEAKS
+       ZERO?   STACK /FALSE
+       PRINTD  LORD
+       PRINTI  " politely but firmly vetoes any such move. """
+       EQUAL?  LIONEL-SPEAKS-COUNTER,INIT-LIONEL-SPEAKS-COUNTER \?PRG57
+       PRINTI  "It's annoying enough to have the servants abscond at dinner time,"" he points out drily. "
+       PRINT   JACK-THINKS-GLADYS
+       PRINTR  " Cigars and port will be time enough for that sort of aggro!"""
+?PRG57:        PRINTR  "Let's hear what old Lionel has to say."""
+
+
+       .FUNCT  I-DINNER-TALK,GARG=0
+       FSET    DINNER,TAKEBIT
+       FCLEAR  DINNER,TRYTAKEBIT
+       MOVE    DINNER-2,TABLE-DINING
+       CALL    QUEUED?,I-LIONEL-SPEAKS
+       CALL    DINNER-TALK,STACK
+       RETURN  2
+
+
+       .FUNCT  DINNER-TALK,N,X
+       MOVE    PLAYER,CHAIR-DINING
+       PRINTI  "Several people glance at your outfit with "
+       EQUAL?  NOW-WEARING,DINNER-OUTFIT /?CCL5
+       SET     'WRONG-OUTFIT,2
+       PRINTI  "dis"
+       JUMP    ?PRG8
+?CCL5: SET     'WRONG-OUTFIT,1
+?PRG8: PRINTI  "approval."
+       ZERO?   WASHED \?CND10
+       PRINTI  " They whisper about how dirty you still look."
+?CND10:        CRLF    
+       EQUAL?  LIONEL-SPEAKS-COUNTER,INIT-LIONEL-SPEAKS-COUNTER \?CND14
+       PRINTD  LORD
+       PRINTI  " announces his engagement to "
+       PRINTD  FRIEND
+       PRINTI  ", prompting various reactions from the guests.
+The dinner is excellent, with a flow of subdued conversation...
+"
+?CND14:        PUTP    LORD,P?LDESC,0
+       SET     'KEEP-WAITING,TRUE-VALUE
+       CALL    V-WAIT,N,FALSE-VALUE,TRUE-VALUE
+       RSTACK  
+
+
+       .FUNCT  POPULATION,RM,NOT1=0,NOT2=0,CNT=0,OBJ
+       FIRST?  RM >OBJ /?KLU19
+?KLU19:        ZERO?   OBJ /FALSE
+?PRG3: FSET?   OBJ,PERSONBIT \?CCL7
+       FSET?   OBJ,INVISIBLE /?CCL7
+       ZERO?   NOT1 /?PRD11
+       EQUAL?  OBJ,NOT1 /?CCL7
+?PRD11:        ZERO?   NOT2 /?CTR6
+       EQUAL?  OBJ,NOT2 /?CCL7
+?CTR6: INC     'CNT
+       JUMP    ?CND5
+?CCL7: FSET?   OBJ,CONTBIT \?CND5
+       CALL    POPULATION,OBJ,NOT1,NOT2
+       ADD     CNT,STACK >CNT
+?CND5: NEXT?   OBJ >OBJ /?KLU20
+?KLU20:        ZERO?   OBJ \?PRG3
+       RETURN  CNT
+
+
+       .FUNCT  BUST-D,ARG
+       CALL    THIS-IS-IT,COUSIN
+       PRINTI  "A brooding bust of "
+       PRINTD  COUSIN
+       PRINTI  " (sculpted by "
+       PRINTD  PAINTER
+       PRINTR  ") is displayed in a corner."
+
+
+       .FUNCT  BUST-F
+       EQUAL?  PRSA,V?PUSH,V?OPEN,V?MOVE-DIR /?CTR2
+       EQUAL?  PRSA,V?MOVE,V?LOOK-UNDER,V?EXAMINE /?CTR2
+       EQUAL?  PRSA,V?TAKE \?CCL3
+       EQUAL?  P-PRSA-WORD,W?RAISE,W?LIFT \?CCL3
+?CTR2: EQUAL?  PRSA,V?EXAMINE \?PRG13
+       EQUAL?  LIONEL-SPEAKS-COUNTER,INIT-LIONEL-SPEAKS-COUNTER \?PRG13
+       CALL    TELL-LIKE-BROCHURE
+       RTRUE   
+?PRG13:        PRINTI  "The "
+       PRINTD  BUST
+       PRINTI  " is hollow. When you lift it from its shelf, you discover"
+       CALL    PRINTT,RECORDER
+       PRINTI  " underneath, with an elaborate clockwork timer."
+       FSET    BUST,OPENBIT
+       FSET    RECORDER,SEENBIT
+       EQUAL?  LIONEL-SPEAKS-COUNTER,INIT-LIONEL-SPEAKS-COUNTER /?CND15
+       PRINTR  " Evidently the timer was set to play the tape during the usual dinner hour on this date."
+?CND15:        CRLF    
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?PLAY,V?LISTEN \FALSE
+       CALL    QUEUED?,I-LIONEL-SPEAKS
+       ZERO?   STACK /?PRG25
+       SET     'LIONEL-FORCED,TRUE-VALUE
+       CALL    QUEUE,I-LIONEL-SPEAKS,1
+       RTRUE   
+?PRG25:        PRINT   TIMER-PREVENTS-IT
+       RTRUE   
+
+
+       .FUNCT  RECORDER-F
+       EQUAL?  PRSA,V?PLAY,V?LISTEN,V?EXAMINE \?CCL3
+       CALL    BUST-F
+       RSTACK  
+?CCL3: EQUAL?  PRSA,V?LAMP-OFF,V?LAMP-ON \?CCL5
+       PRINT   TIMER-PREVENTS-IT
+       RTRUE   
+?CCL5: EQUAL?  PRSA,V?TAKE \?CCL9
+       PRINTR  "It's fastened tightly to the shelf."
+?CCL9: CALL    SPEAKING-VERB?,RECORDER
+       ZERO?   STACK /FALSE
+       CALL    WONT-HELP-TO-TALK-TO,RECORDER
+       RSTACK  
+
+
+       .FUNCT  TABLE-DINING-F
+       EQUAL?  PRSA,V?LOOK-ON,V?LOOK-INSIDE,V?EXAMINE \?CCL3
+       FSET?   DINNER,TAKEBIT \FALSE
+       CALL    TELL-AS-WELL-AS,TABLE-DINING,STR?245
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?SIT-AT \?CCL8
+       CALL    PERFORM,V?SIT,CHAIR-DINING
+       RTRUE   
+?CCL8: EQUAL?  PRSA,V?SIT \FALSE
+       CALL    HAR-HAR
+       RTRUE   
+
+
+       .FUNCT  PUNCHBOWL-F,OBJ
+       EQUAL?  PRSA,V?CLOSE,V?OPEN \?CCL3
+       CALL    HAR-HAR
+       RSTACK  
+?CCL3: EQUAL?  PRSA,V?PUT-UNDER \?CCL5
+       EQUAL?  PRSI,PUNCHBOWL \FALSE
+       FSET    PRSO,NDESCBIT
+       MOVE    PRSO,SIDEBOARD
+       PRINTR  "Okay."
+?CCL5: EQUAL?  PRSA,V?TAKE,V?MOVE,V?LOOK-UNDER \FALSE
+       EQUAL?  PRSO,PUNCHBOWL \FALSE
+       CALL    FIND-FLAG,SIDEBOARD,NDESCBIT >OBJ
+       ZERO?   OBJ /?PRG20
+       FSET    OBJ,TAKEBIT
+       FSET    OBJ,TOUCHBIT
+       FCLEAR  OBJ,NDESCBIT
+       MOVE    OBJ,PLAYER
+       CALL    THIS-IS-IT,OBJ
+       PRINTI  "You find"
+       CALL    PRINTT,OBJ
+       PRINTR  " underneath, so you take it."
+?PRG20:        PRINTR  "There's nothing under it."
+
+
+       .FUNCT  DINNER-D,ARG,L
+       LOC     DINNER >L
+       EQUAL?  L,KITCHEN,SIDEBOARD \FALSE
+       PRINTI  "An appetizing aroma wafts from an array of covered dishes"
+       EQUAL?  L,KITCHEN \?CCL8
+       PRINTI  " sitting about"
+       JUMP    ?PRG14
+?CCL8: EQUAL?  L,SIDEBOARD \?PRG14
+       PRINTI  " on the "
+       PRINTD  SIDEBOARD
+?PRG14:        PRINTR  "."
+
+
+       .FUNCT  DINNER-F,I,L
+       LOC     DINNER >L
+       EQUAL?  PRSA,V?DRESS \?CCL3
+       CALL    META-LOC,DINNER-OUTFIT
+       EQUAL?  HERE,STACK \?CCL6
+       CALL    PERFORM,V?WEAR,DINNER-OUTFIT
+       RTRUE   
+?CCL6: CALL    NOT-HERE,DINNER-OUTFIT
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?EAT \?CCL8
+       PRINTR  "You take a bite and find it delicious."
+?CCL8: EQUAL?  PRSA,V?EXAMINE \?CCL13
+       PRINTI  "A lovely assortment of fish, fowl, greens, and sweets fills the "
+       EQUAL?  L,KITCHEN,SIDEBOARD \?PRG21
+       PRINTR  "dishes."
+?PRG21:        PRINTR  "plate."
+?CCL13:        EQUAL?  PRSA,V?LAMP-ON,V?TAKE \?CCL24
+       FSET?   DINNER,TRYTAKEBIT \FALSE
+       EQUAL?  L,KITCHEN \?CCL30
+       PRINTR  "It's not ready yet."
+?CCL30:        EQUAL?  L,SIDEBOARD \FALSE
+       CALL    I-DINNER-SIT >L
+       ZERO?   L /?PRG38
+       RETURN  L
+?PRG38:        PRINTR  "You look around and notice that no one else is eating yet."
+?CCL24:        EQUAL?  PRSA,V?WAIT-FOR \?CCL41
+       CALL    QUEUED?,I-DINNER >I
+       ZERO?   I /FALSE
+       SUB     DINNER-TIME,PRESENT-TIME
+       CALL    V-WAIT,STACK,FALSE-VALUE,TRUE-VALUE
+       RTRUE   
+?CCL41:        EQUAL?  PRSA,V?WALK-TO \FALSE
+       EQUAL?  HERE,DINING-ROOM \?CCL49
+       CALL    META-LOC,DINNER
+       CALL    PERFORM,PRSA,STACK
+       RTRUE   
+?CCL49:        CALL    PERFORM,PRSA,DINING-ROOM
+       RTRUE   
+
+
+       .FUNCT  BACKSTAIRS-F,RARG=0
+       EQUAL?  RARG,M-BEG \?CCL3
+       CALL    SECRET-CHECK,RARG
+       RSTACK  
+?CCL3: EQUAL?  RARG,M-LOOK \FALSE
+       PRINTI  "You can go east to the "
+       PRINTD  DINING-ROOM
+       PRINTI  " or down narrow stairs to the "
+       PRINTD  KITCHEN
+       PRINTC  46
+       CALL    OPEN-DOOR?,SECRET-DINING-DOOR
+       CRLF    
+       RTRUE   
+
+
+       .FUNCT  KITCHEN-F,RARG=0
+       EQUAL?  RARG,M-LOOK \FALSE
+       PRINTI  "The "
+       PRINTD  KITCHEN
+       PRINTI  " is large yet cramped. From here, you can go west to the tower "
+       PRINTD  BASEMENT
+       PRINTR  ", east to the servants' quarters, or up the stairs."
+
+
+       .FUNCT  LANTERN
+       EQUAL?  PRSA,V?AIM \?CCL3
+       CALL    START-SENTENCE,LAMP
+       PRINTI  " shines in all "
+       PRINTD  INTDIR
+       PRINTR  "s, so you can't point it."
+?CCL3: EQUAL?  PRSA,V?USE \?CCL7
+       CALL    PERFORM,V?LAMP-ON,PRSO
+       RTRUE   
+?CCL7: EQUAL?  PRSA,V?EXAMINE \FALSE
+       PRINTI  "The lamp "
+       FSET?   LAMP,ONBIT \?PRG17
+       PRINTR  "is on."
+?PRG17:        PRINTR  "is turned off."
+
+
+       .FUNCT  GALLERY-F,RARG=0
+       EQUAL?  RARG,M-BEG \?CCL3
+       EQUAL?  PRSA,V?SEARCH-FOR,V?SEARCH /?PRD8
+       EQUAL?  PRSA,V?LOOK-UNDER,V?LOOK-BEHIND,V?EXAMINE \FALSE
+?PRD8: EQUAL?  PRSO,WALL,PAINTING-GALLERY \FALSE
+       FCLEAR  PEEPHOLE,SECRETBIT
+       PRINTI  "You discover"
+       CALL    HIM-HER-IT,PEEPHOLE
+       PRINTR  " in the eye of one ancestor."
+?CCL3: EQUAL?  RARG,M-LOOK \FALSE
+       PRINTI  "The "
+       PRINTD  GALLERY
+       PRINTI  " spans the top of the double stairways. You can go east to "
+       PRINTD  YOUR-ROOM
+       PRINTI  " or west to "
+       PRINTD  VIVIEN-ROOM
+       PRINTI  ". Hallways lead to the northeast and northwest. On the wall is a "
+       PRINTD  PAINTING-GALLERY
+       PRINTI  " of "
+       PRINTD  LORD
+       PRINTR  "'s ancestors."
+
+
+       .FUNCT  PICTURE-F,RARG=0
+       EQUAL?  PRSA,V?EXAMINE \FALSE
+       CALL    TELL-LIKE-BROCHURE
+       RSTACK  
+
+
+       .FUNCT  BATHROOM-F
+       EQUAL?  PRSA,V?WALK-TO,V?THROUGH /?CCL3
+       EQUAL?  PRSA,V?LOOK-INSIDE,V?EXAMINE,V?BOARD \FALSE
+?CCL3: EQUAL?  HERE,YOUR-ROOM \?CCL8
+       CALL    PERFORM,PRSA,YOUR-BATHROOM
+       RTRUE   
+?CCL8: CALL    RANDOM-PSEUDO
+       RSTACK  
+
+
+       .FUNCT  FIREPLACE-F
+       EQUAL?  PRSA,V?LOOK-UP,V?LOOK-INSIDE,V?EXAMINE \?CCL3
+       EQUAL?  HERE,IAN-ROOM \?PRG7
+       CALL    TELL-IAN-FIREPLACE
+       CRLF    
+       RTRUE   
+?PRG7: PRINTR  "It's empty, except for soot on the walls."
+?CCL3: EQUAL?  PRSA,V?LAMP-ON \?CCL10
+       CALL    WONT-HELP
+       RSTACK  
+?CCL10:        EQUAL?  PRSA,V?PUT-IN \FALSE
+       PRINTI  "When you think how sooty"
+       CALL    PRINTT,PRSO
+       PRINTR  " would get, you change your mind."
+
+
+       .FUNCT  BED-PSEUDO
+       EQUAL?  PRSA,V?THROUGH,V?SIT /?CCL3
+       EQUAL?  PRSA,V?LIE,V?CLIMB-ON,V?BOARD \FALSE
+?CCL3: CALL    WONT-HELP
+       RSTACK  
+
+
+       .FUNCT  NIGHTSTAND-LG-F
+       EQUAL?  HERE,JACK-ROOM \?CCL3
+       EQUAL?  PRSA,V?SEARCH-FOR,V?SEARCH /?CTR2
+       EQUAL?  PRSA,V?OPEN,V?LOOK-INSIDE,V?EXAMINE \?CCL3
+?CTR2: IN?     NECKLACE-OF-D,JACK-ROOM \?PRG11
+       CALL    DISCOVER,NECKLACE-OF-D
+       RSTACK  
+?PRG11:        PRINT   NOTHING-NEW
+       RTRUE   
+?CCL3: EQUAL?  HERE,JACK-ROOM \?CCL14
+       EQUAL?  PRSA,V?PUT-IN \?CCL14
+       EQUAL?  PRSO,NECKLACE-OF-D \?CCL14
+       MOVE    NECKLACE-OF-D,JACK-ROOM
+       FSET    NECKLACE-OF-D,NDESCBIT
+       CALL    OKAY
+       RSTACK  
+?CCL14:        CALL    RANDOM-PSEUDO
+       RSTACK  
+
+
+       .FUNCT  DRESSING-TABLE-LG-F
+       EQUAL?  PRSA,V?SEARCH-FOR /?CTR2
+       EQUAL?  PRSA,V?SEARCH,V?CLOSE,V?OPEN \?CCL3
+?CTR2: CALL    NOTHING-SPECIAL
+       RSTACK  
+?CCL3: EQUAL?  PRSA,V?LOOK-ON,V?LOOK-INSIDE,V?EXAMINE \FALSE
+       EQUAL?  HERE,WENDISH-ROOM \?CCL10
+       CALL    WENDISH-STUFF-D
+       RTRUE   
+?CCL10:        EQUAL?  HERE,TAMARA-ROOM \?CCL12
+       CALL    DRESSING-TABLE-TAM
+       CRLF    
+       RTRUE   
+?CCL12:        CALL    NOTHING-SPECIAL
+       RSTACK  
+
+
+       .FUNCT  MIRROR-GLOBAL-F
+       CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       FSET?   HERE,WORNBIT /?CCL5
+       CALL    NOT-HERE,MIRROR-GLOBAL
+       RSTACK  
+?CCL5: EQUAL?  PRSA,V?MOVE /?CTR6
+       EQUAL?  PRSA,V?LOOK-INSIDE,V?FIX,V?EXAMINE \?CCL7
+?CTR6: CALL    DRESSING-MIRROR-F
+       RSTACK  
+?CCL7: CALL    RANDOM-PSEUDO
+       RSTACK  
+
+
+       .FUNCT  OPEN-DOOR?,DR,NOSP=0
+       FSET?   DR,OPENBIT \FALSE
+       ZERO?   NOSP \?CND4
+       PRINTC  32
+?CND4: CALL    THIS-IS-IT,DR
+       CALL    DOOR-ROOM,HERE,DR >NOSP
+       ZERO?   NOSP /?PRG10
+       FSET    NOSP,SEENBIT
+?PRG10:        PRINTI  "And there's a wide-open "
+       PRINTD  DR
+       PRINTC  33
+       RTRUE   
+
+
+       .FUNCT  YOUR-ROOM-F,RARG=0
+       EQUAL?  RARG,M-BEG \?CCL3
+       EQUAL?  PRSA,V?WALK-TO \?CCL6
+       EQUAL?  PRSO,BED \?CCL6
+       CALL    PERFORM,V?LIE,BED
+       RTRUE   
+?CCL6: CALL    SECRET-CHECK,RARG
+       RSTACK  
+?CCL3: EQUAL?  RARG,P?WEST,P?OUT /?CTR9
+       EQUAL?  RARG,P?EAST,P?IN \?CCL10
+?CTR9: ZERO?   NOW-WEARING \?CCL15
+       PRINTI  "Before you even take a step, you"
+       PRINT   REMEMBER-NOT-DRESSED
+       PRINTC  46
+       CRLF    
+       RETURN  2
+?CCL15:        EQUAL?  RARG,P?EAST,P?IN \FALSE
+       CALL    ENTER-PASSAGE
+       RTRUE   
+?CCL10:        EQUAL?  RARG,M-ENTER \?CCL24
+       CALL    QUEUE,I-TOUR,0
+       RSTACK  
+?CCL24:        EQUAL?  RARG,M-LOOK \FALSE
+       CALL    START-SENTENCE,YOUR-ROOM
+       PRINTI  " is decorated in shades of "
+       CALL    PRINT-COLOR
+       PRINTI  ". You see "
+       PRINTD  YOUR-BATHROOM
+       PRINTI  " to the north and a cozy "
+       PRINTD  FIREPLACE
+       PRINTI  " in one corner. The room is furnished with a bed, a "
+       PRINTD  NIGHTSTAND
+       PRINTI  " with a lamp on it, a "
+       PRINTD  CHEST-OF-DRAWERS
+       PRINTI  ", a "
+       PRINTD  WARDROBE
+       PRINTI  ", a "
+       PRINTD  YOUR-CHAIR
+       PRINTI  ", and a "
+       PRINTD  DRESSING-TABLE
+       PRINTI  " with mirror and bench. There's also a full-length "
+       PRINTD  YOUR-MIRROR
+       PRINTC  46
+       CALL    OPEN-DOOR?,SECRET-YOUR-DOOR
+       CRLF    
+       CALL    DESCRIBE-CONTENTS,BED
+       CALL    DESCRIBE-CONTENTS,YOUR-CHAIR
+       FSET?   HERE,TOUCHBIT /TRUE
+       LOC     BUTLER
+       EQUAL?  STACK,GALLERY,YOUR-ROOM /TRUE
+       CALL    QUEUED?,I-DINNER
+       GRTR?   2,STACK /TRUE
+       CALL    IN-MOTION?,FRIEND
+       ZERO?   STACK \TRUE
+       PUTP    FRIEND,P?LINE,0
+       SET     'QCONTEXT,FRIEND
+       CALL    HE-SHE-IT,FRIEND,TRUE-VALUE
+       IN?     FRIEND,HERE /?PRG43
+       MOVE    FRIEND,HERE
+       PRINTI  " enters and"
+?PRG43:        PRINTI  " says, ""Let's chat a bit"
+       CALL    FIND-FLAG-HERE,PERSONBIT,PLAYER,FRIEND
+       ZERO?   STACK \?PRG49
+       PRINTI  ", now that we're alone"
+?PRG49:        PRINTR  "."""
+
+
+       .FUNCT  ENTER-PASSAGE
+       PRINTI  "You step down into a narrow "
+       PRINTD  PASSAGE
+       PRINTR  "."
+
+
+       .FUNCT  BED-F
+       EQUAL?  PRSA,V?THROUGH,V?BOARD \?CCL3
+       CALL    PERFORM,V?LIE,PRSO
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?CLIMB-ON \FALSE
+       CALL    PERFORM,V?SIT,PRSO
+       RTRUE   
+
+
+       .FUNCT  NIGHTSTAND-F
+       EQUAL?  PRSA,V?LOOK-ON,V?EXAMINE \FALSE
+       CALL    TELL-AS-WELL-AS,NIGHTSTAND,FALSE-VALUE,NIGHTLAMP
+       RTRUE   
+
+
+       .FUNCT  TELL-AS-WELL-AS,CONT,STR,OBJ=0,X=0
+       FSET?   CONT,SURFACEBIT \?CCL3
+       PRINTC  79
+       JUMP    ?PRG8
+?CCL3: FSET    CONT,OPENBIT
+       PRINTC  73
+?PRG8: PRINTC  110
+       CALL    PRINTT,CONT
+       PRINTI  " you see"
+       CALL    FIND-FLAG-NOT,CONT,NDESCBIT
+       ZERO?   STACK /?PRG13
+       SET     'X,TRUE-VALUE
+       JUMP    ?CND10
+?PRG13:        PRINTI  " only"
+?CND10:        ZERO?   OBJ /?PRG20
+       CALL    PRINTT,OBJ
+       JUMP    ?CND15
+?PRG20:        PRINT   STR
+?CND15:        ZERO?   X /?PRG26
+       PRINTI  ", as well as"
+       CALL    PRINT-CONTENTS,CONT
+?PRG26:        PRINTR  "."
+
+
+       .FUNCT  DRESSING-MIRROR-F
+       EQUAL?  PRSA,V?TURN,V?RUB,V?PUSH /?PRG6
+       EQUAL?  PRSA,V?MOVE-DIR,V?MOVE,V?FIX \?CCL3
+?PRG6: PRINTI  "Now you can see "
+       PRINTD  PLAYER
+       PRINTR  " perfectly."
+?CCL3: EQUAL?  PRSA,V?LOOK-INSIDE,V?EXAMINE \FALSE
+       PRINTI  "You look "
+       ZERO?   WASHED /?PRG17
+       PRINTI  "smashing"
+       JUMP    ?PRG19
+?PRG17:        PRINTI  "a trifle dirty"
+?PRG19:        PRINTI  " in your "
+       ZERO?   NOW-WEARING \?PRG26
+       PRINTI  "birthday suit"
+       JUMP    ?PRG28
+?PRG26:        PRINTD  NOW-WEARING
+?PRG28:        PRINTR  "."
+
+
+       .FUNCT  YOUR-MIRROR-F
+       EQUAL?  PRSA,V?SEARCH /?CTR2
+       EQUAL?  PRSA,V?RUB,V?LOOK-BEHIND,V?EXAMINE /?CTR2
+       EQUAL?  PRSA,V?SEARCH-FOR \?CCL3
+       EQUAL?  PRSO,YOUR-MIRROR \?CCL3
+?CTR2: IN?     PLAYER,HERE /?PRG11
+       CALL    TOO-BAD-SIT-HIDE
+?PRG11:        PRINTI  "By running your fingers around the frame, you discover"
+       CALL    PRINTT,YOUR-SWITCH
+       CALL    THIS-IS-IT,YOUR-SWITCH
+       PRINTR  "."
+?CCL3: EQUAL?  PRSA,V?CLOSE,V?OPEN \?CCL16
+       FSET?   SECRET-YOUR-DOOR,TOUCHBIT \?CCL16
+       CALL    PERFORM,PRSA,SECRET-YOUR-DOOR
+       RTRUE   
+?CCL16:        EQUAL?  PRSA,V?TURN /?PRG24
+       EQUAL?  PRSA,V?TAKE,V?RUB,V?PUSH /?PRG24
+       EQUAL?  PRSA,V?MOVE-DIR,V?MOVE,V?FIX \?CCL20
+?PRG24:        PRINTR  "It seems to be fastened to the wall."
+?CCL20:        CALL    DRESSING-MIRROR-F
+       RSTACK  
+
+
+       .FUNCT  YOUR-SWITCH-F
+       EQUAL?  PRSA,V?EXAMINE \?CCL3
+       PRINTR  "You can't tell by looking what it might do."
+?CCL3: EQUAL?  PRSA,V?OPEN \?CCL7
+       FCLEAR  YOUR-SWITCH,SECRETBIT
+       CALL    OKAY,SECRET-YOUR-DOOR,STR?66
+       RTRUE   
+?CCL7: EQUAL?  PRSA,V?CLOSE \?CCL9
+       FCLEAR  YOUR-SWITCH,SECRETBIT
+       CALL    OKAY,SECRET-YOUR-DOOR,STR?61
+       RTRUE   
+?CCL9: EQUAL?  PRSA,V?TURN,V?SLAP /?CCL11
+       EQUAL?  PRSA,V?RUB,V?PUSH,V?MOVE-DIR /?CCL11
+       EQUAL?  PRSA,V?MOVE,V?LAMP-ON,V?LAMP-OFF \FALSE
+?CCL11:        CALL    OPEN-SECRET,FALSE-VALUE,YOUR-SWITCH,SECRET-YOUR-DOOR
+       RTRUE   
+
+
+       .FUNCT  YOUR-BATHROOM-F,RARG=0
+       EQUAL?  RARG,M-BEG \?CCL3
+       EQUAL?  PRSA,V?WALK-TO \FALSE
+       EQUAL?  PRSO,YOUR-BATHROOM \FALSE
+       PRINT   AHHH
+       RTRUE   
+?CCL3: EQUAL?  RARG,M-LOOK \?CCL12
+       PRINTI  "From the look of it, "
+       PRINTD  YOUR-BATHROOM
+       PRINTR  " was added in recently. It is comfortable and inviting, especially for Cornwall."
+?CCL12:        EQUAL?  RARG,M-EXIT \?CCL16
+       ZERO?   NOW-WEARING \FALSE
+       CALL    FIND-FLAG,YOUR-ROOM,PERSONBIT >RARG
+       ZERO?   RARG /FALSE
+       PRINTI  "You peek in and see "
+       PRINTD  RARG
+       PRINTI  ", then"
+       PRINT   REMEMBER-NOT-DRESSED
+       PRINTC  46
+       CRLF    
+       RETURN  2
+?CCL16:        ZERO?   RARG \FALSE
+       EQUAL?  PRSA,V?UNLOCK /?CCL29
+       EQUAL?  PRSA,V?LOCK,V?CLOSE,V?OPEN \FALSE
+?CCL29:        CALL    PERFORM,PRSA,YOUR-BATHROOM-DOOR
+       RTRUE   
+
+
+       .FUNCT  TOILET-PSEUDO
+       EQUAL?  PRSA,V?LOOK-INSIDE \?CCL3
+       CALL    NOTHING-SPECIAL
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?USE,V?SIT \FALSE
+       PRINT   AHHH
+       RTRUE   
+
+
+       .FUNCT  BATH-PSEUDO
+       EQUAL?  PRSA,V?LAMP-ON,V?FILL,V?CLOSE \?CCL3
+       EQUAL?  WINNER,PLAYER \TRUE
+       PRINTR  "Okay, then what?"
+?CCL3: EQUAL?  PRSA,V?THROUGH /?CTR8
+       EQUAL?  PRSA,V?TAKE,V?SWIM,V?BOARD \?CCL9
+?CTR8: ZERO?   NOW-WEARING \?PRG21
+       FIRST?  PLAYER \?CND15
+       PRINTI  "First you drop everything...
+"
+       CALL    ROB,PLAYER,HERE
+?CND15:        GET     P-ITBL,P-VERBN
+       PUT     STACK,0,W?BATHE
+       CALL    V-WAIT,9,FALSE-VALUE,TRUE-VALUE
+       SET     'WASHED,TRUE-VALUE
+       PRINTI  "You're now squeaky clean. After toweling off, you feel nicely relaxed and ready to tackle the mystery of "
+       PRINTD  CASTLE
+       PRINTR  "."
+?PRG21:        PRINTI  "You almost step into the tub before you realize that your "
+       PRINTD  NOW-WEARING
+       PRINTR  " would get wet."
+?CCL9: CALL    RANDOM-PSEUDO
+       RSTACK  
+
+
+       .FUNCT  IRIS-ROOM-F,RARG=0
+       EQUAL?  RARG,M-BEG,M-EXIT \?CCL3
+       EQUAL?  PRSA,V?CLOSE,V?OPEN \?CCL6
+       EQUAL?  PRSO,SECRET-IRIS-DOOR \?CCL6
+       CALL    YOU-CANT,FALSE-VALUE,PLAYER,STR?231
+       RTRUE   
+?CCL6: CALL    SECRET-CHECK,RARG
+       RSTACK  
+?CCL3: EQUAL?  RARG,P?EAST,P?IN \?CCL10
+       CALL    ENTER-PASSAGE
+       RTRUE   
+?CCL10:        EQUAL?  RARG,M-LOOK \FALSE
+       PRINTD  IRIS-ROOM
+       PRINTI  " is furnished much like yours, but with a canopied bed and "
+       PRINTD  IRIS-CHAIR
+       PRINTC  46
+       CALL    OPEN-DOOR?,SECRET-IRIS-DOOR
+       CRLF    
+       RTRUE   
+
+
+       .FUNCT  WENDISH-ROOM-F,RARG=0
+       EQUAL?  RARG,M-BEG,M-EXIT \?CCL3
+       CALL    SECRET-CHECK,RARG
+       RSTACK  
+?CCL3: EQUAL?  RARG,P?NORTH,P?IN \?CCL6
+       CALL    ENTER-PASSAGE
+       RTRUE   
+?CCL6: EQUAL?  RARG,M-LOOK \FALSE
+       PRINTI  "The room shows the doctor's precise, scientific personality. Everything is in its place. "
+       CALL    WENDISH-STUFF-D
+       PRINTI  "His "
+       PRINTD  WENDISH-KIT
+       PRINTI  " is on a marble-topped console attached to the wall. On the north wall is"
+       CALL    PRINTT,CANDLE
+       PRINTC  46
+       CALL    OPEN-DOOR?,SECRET-WENDISH-DOOR
+       CRLF    
+       RTRUE   
+
+
+       .FUNCT  CANDLE-F
+       EQUAL?  PRSA,V?EXAMINE \?CCL3
+       PRINTR  "It seems to be fastened loosely to the wall."
+?CCL3: EQUAL?  PRSA,V?TURN,V?PUSH,V?MOVE-DIR /?CCL7
+       EQUAL?  PRSA,V?MOVE,V?LOOK-UNDER,V?LOOK-BEHIND /?CCL7
+       EQUAL?  PRSA,V?TAKE \FALSE
+       EQUAL?  P-PRSA-WORD,W?RAISE,W?LIFT \FALSE
+?CCL7: CALL    OPEN-SECRET,STR?249,CANDLE,SECRET-WENDISH-DOOR
+       RSTACK  
+
+
+       .FUNCT  WENDISH-STUFF-D,X
+       PRINTI  "Several "
+       PRINTD  WENDISH-STUFF
+       PRINTI  "s are lying on the "
+       PRINTD  DRESSING-TABLE-LG
+       PRINTR  "."
+
+
+       .FUNCT  WENDISH-STUFF-F
+       EQUAL?  PRSA,V?READ /?PRG6
+       EQUAL?  PRSA,V?OPEN,V?LOOK-INSIDE,V?EXAMINE \?CCL3
+?PRG6: PRINTR  "They are too technical to understand."
+?CCL3: CALL    RANDOM-PSEUDO
+       RSTACK  
+
+
+       .FUNCT  WENDISH-KIT-F,X
+       EQUAL?  PRSA,V?SEARCH-FOR,V?SEARCH /?CTR2
+       EQUAL?  PRSA,V?OPEN,V?LOOK-INSIDE,V?EXAMINE \?CCL3
+?CTR2: CALL    SEARCH-KIT-BOX,WENDISH-KIT,STR?250
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?TAKE \FALSE
+       EQUAL?  PRSO,WENDISH-KIT \FALSE
+       CALL    YOU-SHOULDNT
+       RSTACK  
+
+
+       .FUNCT  SEARCH-KIT-BOX,OBJ,STR,X=0
+       FSET    OBJ,OPENBIT
+       IN?     LENS-BOX,OBJ \?CCL3
+       SET     'X,LENS-BOX
+       JUMP    ?CND1
+?CCL3: IN?     VIVIEN-DIARY,OBJ \?CCL5
+       SET     'X,VIVIEN-DIARY
+       JUMP    ?CND1
+?CCL5: IN?     COSTUME,OBJ \?CCL7
+       SET     'X,COSTUME
+       JUMP    ?CND1
+?CCL7: IN?     BLOWGUN,OBJ \?CND1
+       SET     'X,BLOWGUN
+?CND1: ZERO?   X /?CCL11
+       CALL    DISCOVER,X
+       EQUAL?  PRSA,V?SEARCH-FOR,V?SEARCH /TRUE
+       PRINTC  89
+       PRINT   OU-STOP-SEARCHING
+       PRINTR  "."
+?CCL11:        CALL    TELL-AS-WELL-AS,OBJ,STR
+       RTRUE   
+
+
+       .FUNCT  VIVIEN-ROOM-F,RARG=0
+       EQUAL?  RARG,M-BEG,M-EXIT \?CCL3
+       CALL    SECRET-CHECK,RARG
+       RSTACK  
+?CCL3: EQUAL?  RARG,P?SOUTH,P?IN \?CCL5
+       CALL    ENTER-PASSAGE
+       RTRUE   
+?CCL5: EQUAL?  RARG,M-LOOK \FALSE
+       PRINTI  "The room is untidy, probably because Vivien is an artist. Sketches and garments are strewn on the canopied bed and "
+       PRINTD  VIVIEN-CHAIR
+       PRINTI  ". Leaning against the wall are stretched canvases, and a fold-up easel for her outdoor art work. On the tallboy are a sketch pad, and a paint-smeared "
+       PRINTD  VIVIEN-BOX
+       PRINTI  ". On the south wall is a cheval glass and"
+       CALL    PRINTT,FIGURINE
+       PRINTC  46
+       CALL    OPEN-DOOR?,SECRET-VIVIEN-DOOR
+       CRLF    
+       CALL    DESCRIBE-CONTENTS,VIVIEN-CHAIR
+       RTRUE   
+
+
+       .FUNCT  VIVIEN-BOX-F,X
+       EQUAL?  PRSA,V?SEARCH-FOR,V?SEARCH /?CTR2
+       EQUAL?  PRSA,V?OPEN,V?LOOK-INSIDE,V?EXAMINE \?CCL3
+?CTR2: CALL    SEARCH-KIT-BOX,VIVIEN-BOX,STR?251
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?TAKE \FALSE
+       EQUAL?  PRSO,VIVIEN-BOX \FALSE
+       CALL    YOU-SHOULDNT
+       RSTACK  
+
+
+       .FUNCT  FIGURINE-F
+       EQUAL?  PRSA,V?EXAMINE \?CCL3
+       PRINTR  "It's turned toward the wall, so you can't see its face."
+?CCL3: EQUAL?  PRSA,V?TURN /?CCL7
+       EQUAL?  PRSA,V?PUSH,V?MOVE-DIR,V?MOVE \FALSE
+?CCL7: CALL    OPEN-SECRET,STR?161,FIGURINE,SECRET-VIVIEN-DOOR
+       RSTACK  
+
+
+       .FUNCT  IAN-ROOM-F,RARG=0
+       EQUAL?  RARG,M-BEG,M-EXIT \?CCL3
+       CALL    SECRET-CHECK,RARG
+       RSTACK  
+?CCL3: EQUAL?  RARG,P?NORTH,P?IN \?CCL5
+       CALL    ENTER-PASSAGE
+       RTRUE   
+?CCL5: EQUAL?  RARG,M-LOOK \FALSE
+       PRINTD  IAN-ROOM
+       PRINTI  " has rich wood panelling, a four-poster bed, Victorian washstand, and "
+       PRINTD  IAN-CHAIR
+       PRINTI  ". "
+       CALL    TELL-IAN-FIREPLACE
+       CRLF    
+       CALL    OPEN-DOOR?,SECRET-IAN-DOOR,TRUE-VALUE
+       ZERO?   STACK /TRUE
+       CRLF    
+       RTRUE   
+
+
+       .FUNCT  TELL-IAN-FIREPLACE
+       PRINTI  "In the "
+       PRINTD  FIREPLACE
+       PRINTI  ", the fender has flashy grillwork, and the "
+       PRINTD  ANDIRON
+       PRINTI  "s have fancy carved heads."
+       RTRUE   
+
+
+       .FUNCT  ANDIRON-F
+       EQUAL?  PRSA,V?EXAMINE \?CCL3
+       PRINTR  "By looking closely, you find that the head can turn."
+?CCL3: EQUAL?  PRSA,V?TURN,V?RUB /?CCL7
+       EQUAL?  PRSA,V?PUSH,V?MOVE-DIR,V?MOVE \FALSE
+?CCL7: CALL    OPEN-SECRET,STR?161,ANDIRON,SECRET-IAN-DOOR
+       RSTACK  
+
+
+       .FUNCT  HYDE-ROOM-F,RARG=0
+       EQUAL?  RARG,M-BEG,M-EXIT \?CCL3
+       EQUAL?  PRSA,V?CLOSE,V?OPEN \?CCL6
+       EQUAL?  PRSO,SECRET-HYDE-DOOR \?CCL6
+       CALL    YOU-CANT,FALSE-VALUE,PLAYER,STR?231
+       RTRUE   
+?CCL6: CALL    SECRET-CHECK,RARG
+       RSTACK  
+?CCL3: EQUAL?  RARG,P?NORTH,P?IN \?CCL10
+       CALL    ENTER-PASSAGE
+       RTRUE   
+?CCL10:        EQUAL?  RARG,M-LOOK \FALSE
+       PRINTD  HYDE-ROOM
+       PRINTI  " has many tasteful antiques, such as "
+       CALL    PRINTA,HYDE-CHAIR
+       PRINTI  " in one corner."
+       CALL    OPEN-DOOR?,SECRET-HYDE-DOOR
+       CRLF    
+       RTRUE   
+
+       .ENDI
diff --git a/castle.zil b/castle.zil
new file mode 100644 (file)
index 0000000..e0dfd6b
--- /dev/null
@@ -0,0 +1,2804 @@
+"CASTLE for MOONMIST
+Copyright (C) 1986 Infocom, Inc.  All rights reserved."
+
+<OBJECT CASTLE
+       (IN GLOBAL-OBJECTS)
+       (DESC "Tresyllian Castle")
+       (ADJECTIVE TRESYLLIAN)
+       (SYNONYM CASTLE WING HOUSE)
+       (FLAGS NARTICLEBIT SEENBIT)
+       (ACTION CASTLE-F)>
+
+<GLOBAL DARK-TURRETS "The dark stone turrets rise toward the misty sky.|">
+
+<ROUTINE CASTLE-F ()
+ <COND (<VERB? EXAMINE FIND>
+       <COND (<OUTSIDE? ,HERE>
+              <COND (<VERB? FIND>
+                     <TELL "It's right here!" CR>)
+                    (T
+                     <TELL ,DARK-TURRETS>
+                     <RTRUE>)>)
+             (<OR <DOBJ? CASTLE>
+                  <NOT <FSET? ,HERE ,WEARBIT>>>
+              <TELL "It's all around you!" CR>)
+             (T <NOT-HERE ,TOWER>)>)
+       (<VERB? BOARD ;CLIMB-UP THROUGH WALK-TO>
+       <COND (<DOBJ? CASTLE>
+              <COND (<OUTSIDE? ,HERE>
+                     <COND (<NOT <FSET? ,FRIEND ,TOUCHBIT>>
+                            <PERFORM ,PRSA ,COURTYARD>)
+                           (T <PERFORM ,PRSA ,FOYER>)>
+                     <RTRUE>)
+                    (T <HAR-HAR>)>)
+             (T
+              <COND (<OR <OUTSIDE? ,HERE>
+                         <FSET? ,HERE ,WEARBIT>>
+                     <PERFORM ,PRSA ,OLD-GREAT-HALL>
+                     ;<OKAY>
+                     <RTRUE>)
+                    (T <HAR-HAR>)>)>)
+       (<VERB? LEAVE>
+       <COND (<NOT <OUTSIDE? ,HERE>>
+              <PERFORM ,V?WALK-TO ,COURTYARD>
+              <RTRUE>)
+             (T <HAR-HAR>)>)>>
+
+<OBJECT TOWER
+       (IN GLOBAL-OBJECTS)
+       (DESC "tower")
+       (ADJECTIVE STONE ;BATTLE TOWER)
+       (SYNONYM TOWER TURRET KEEP)
+       (FLAGS SEENBIT)
+       (ACTION TOWER-F)>
+
+<ROUTINE TOWER-F ()
+ <COND (<VERB? BOARD EXAMINE FIND THROUGH WALK-TO LEAVE>
+       <CASTLE-F>)
+       (<REMOTE-VERB?>
+       <RFALSE>)
+       (<FSET? ,HERE ,WEARBIT> ;"WING-ROOMS"
+       <NOT-HERE ,TOWER>
+       <RTRUE>)>>
+
+<OBJECT MOON
+       (IN LOCAL-GLOBALS)
+       (DESC "full moon")
+       (ADJECTIVE FULL ;"LOVELY RISING")
+       (SYNONYM MOON MIST SKY)
+       (FLAGS SEENBIT)
+       (ACTION MOON-F)>
+
+<ROUTINE MOON-F ()
+ <COND (<VERB? EXAMINE>
+       <TELL "Strange shapes of mist dance in front of the " 'MOON "." CR>)
+       (<VERB? EAT SMELL>
+       <PERFORM ,V?SMELL ,OCEAN>
+       <RTRUE>)>>
+
+<OBJECT OCEAN
+       (IN LOCAL-GLOBALS)
+       (DESC "ocean")
+       (ADJECTIVE BLUE)
+       (SYNONYM SEA OCEAN BREAKER)
+       (FLAGS SEENBIT VOWELBIT)
+       (ACTION OCEAN-F)>
+
+<ROUTINE OCEAN-F ()
+ <COND (<VERB? LISTEN>
+       <TELL "The breakers seem to be warning you."
+             ;"The shooshing breakers could lull you to sleep." CR>)
+       (<VERB? THROUGH WALK-TO>
+       <TELL "The cliffs are too dangerous in the dark." CR>)>>
+[
+<ROUTINE CAR-DOOR-PSEUDO ()
+ <COND (<VERB? OPEN CLOSE LOCK UNLOCK>
+       <NO-NEED ;"do that">)>>
+
+<OBJECT CAR
+       (IN DRIVEWAY ;ROOMS)
+       (FLAGS ;ONBIT VEHBIT SEENBIT CONTBIT OPENBIT)
+       (CAPACITY 9999)
+       (DESC "sports car" ;"Porsche")
+       (ADJECTIVE MY NEW ;SPORT SPORTS LITTLE F.C F.C)
+       (SYNONYM ;PORSCHE CAR)
+       ;(GENERIC GENERIC-CAR)
+       (DESCFCN TELL-ABOUT-CAR)
+       (ACTION CAR-F)>
+
+;<     (GLOBAL ;CAR-WINDOW FRONT-GATE CAR MOON OCEAN COURTYARD)
+       (THINGS <PSEUDO ( CAR DOOR      CAR-DOOR-PSEUDO)
+                       ( <> BLAST      NULL-F)>)
+       (LINE 1)
+       (STATION DRIVEWAY)
+       (CHARACTER 2)   ;"floor number"
+       (OUT PER DECAR-F)>
+
+<ROUTINE DRIVING? ()
+ <COND (<AND <NOT <ZERO? ,P-PRSA-WORD>>
+            <NOT <EQUAL? ,P-PRSA-WORD ,W?DRIVE ,W?ENTER ,W?STEER>>
+            ;<NOT <EQUAL? ,P-PRSA-WORD ,W?GO>>>
+       <RFALSE>)
+       (<VERB? CLIMB-UP THROUGH WALK-TO>
+       <COND (<AND <VERB? THROUGH>
+                   <DOBJ? CAR>>
+              <COND (<T? ,PRSI>        ;"DRIVE CAR THRU object"
+                     <COND (<NOT <==? ,HERE <META-LOC ,PRSI>>>
+                            <SETG PRSO ,PRSI>
+                            <RTRUE>)
+                           (T <RFALSE>)>)
+                    (T                 ;"DRIVE CAR IN"
+                     <SETG PRSO ,FRONT-GATE>
+                     <RTRUE>)>)
+             (<NOT <==? ,HERE <META-LOC ,PRSO>>>
+              <RTRUE>)
+             (T <RFALSE>)>)
+       (<VERB? LEAVE>
+       <COND (<NOT <EQUAL? ,PRSO ;<> ,ROOMS ,CAR>>
+              <RTRUE>)>)
+       (<VERB? WALK>
+       <COND (<OR <NOT <ZERO? ,P-PRSA-WORD>>
+                  <NOT <DOBJ? P?OUT>>>
+              <RTRUE>)>)>>
+
+<ROUTINE CAR-F ("OPTIONAL" (ARG <>) "AUX" S)
+ <SET S ,HERE ;<GETP ,CAR ,P?STATION>>
+ <COND (<EQUAL? .ARG ,M-BEG>
+       <COND (<DRIVING?>
+              <COND (<DOBJ? FRONT-GATE>
+                     <COND (<VERB? THROUGH>
+                            <COND (<NOT <FSET? ,FRONT-GATE ,OPENBIT>>
+                                   <TOO-BAD-BUT ,FRONT-GATE "closed">)
+                                  (<EQUAL? .S ,DRIVEWAY>
+                                   <PERFORM ,V?WALK-TO ,COURTYARD>
+                                   <RTRUE>)
+                                  (T
+                                   <PERFORM ,V?WALK-TO ,DRIVEWAY>
+                                   <RTRUE>)>)
+                           (T <WALK-WITHIN-ROOM>)>)
+                    (<EQUAL? .S ,DRIVEWAY>
+                     <COND (<VERB? CLIMB-UP THROUGH WALK-TO>
+                            <COND (<EQUAL? ,DRIVEWAY <META-LOC ,PRSO>>
+                                   <WALK-WITHIN-ROOM>)
+                                  (<NOT <FSET? ,FRONT-GATE ,OPENBIT>>
+                                   <TOO-BAD-BUT ,FRONT-GATE "closed">)
+                                  (T ;<DOBJ? COURTYARD>
+                                   <CAR-TO-COURTYARD>)>)
+                           (<VERB? LEAVE>
+                            <COND (<DOBJ? COURTYARD>
+                                   <HAR-HAR>)
+                                  (<NOT <FSET? ,FRONT-GATE ,OPENBIT>>
+                                   <TOO-BAD-BUT ,FRONT-GATE "closed">)
+                                  (T ;<DOBJ? DRIVEWAY>
+                                   <CAR-TO-COURTYARD>)>)
+                           (<OR <DOBJ? P?SOUTH P?IN>
+                                <AND <DOBJ? INTDIR> <ADJ-USED? ,W?SOUTH>>>
+                            <COND (<NOT <FSET? ,FRONT-GATE ,OPENBIT>>
+                                   <TOO-BAD-BUT ,FRONT-GATE "closed">)
+                                  (T <CAR-TO-COURTYARD>)>)
+                           (T ;<DOBJ? P?NORTH>
+                            <SETG CLOCK-WAIT T>
+                            <TELL ,CASTLE-IS-SOUTH>
+                            <RTRUE>
+                            ;<YOU-CANT "drive">)>)
+                    (T ;<EQUAL? .S ,COURTYARD>
+                     <COND (<VERB? CLIMB-UP THROUGH WALK-TO>
+                            <COND (<EQUAL? ,COURTYARD <META-LOC ,PRSO>>
+                                   ;<EQUAL? ,PRSO <> ,COURTYARD ,CASTLE>
+                                   <WALK-WITHIN-ROOM>)
+                                  (<NOT <FSET? ,FRONT-GATE ,OPENBIT>>
+                                   <TOO-BAD-BUT ,FRONT-GATE "closed">)
+                                  (T ;<DOBJ? DRIVEWAY>
+                                   <CAR-TO-DRIVEWAY>)>)
+                           (<VERB? LEAVE>
+                            <COND (<DOBJ? DRIVEWAY>
+                                   <HAR-HAR>)
+                                  (<NOT <FSET? ,FRONT-GATE ,OPENBIT>>
+                                   <TOO-BAD-BUT ,FRONT-GATE "closed">)
+                                  (T ;<DOBJ? COURTYARD>
+                                   <CAR-TO-DRIVEWAY>)>)
+                           (<OR <DOBJ? P?NORTH>
+                                <AND <DOBJ? INTDIR> <ADJ-USED? ,W?NORTH>>>
+                            <COND (<NOT <FSET? ,FRONT-GATE ,OPENBIT>>
+                                   <TOO-BAD-BUT ,FRONT-GATE "closed">)
+                                  (T <CAR-TO-DRIVEWAY>)>)
+                           (<DOBJ? P?OUT>
+                            <COND (<EQUAL? ,P-PRSA-WORD <> ,W?GO>
+                                   <RFALSE>)
+                                  (<NOT <FSET? ,FRONT-GATE ,OPENBIT>>
+                                   <TOO-BAD-BUT ,FRONT-GATE "closed">)
+                                  (T <CAR-TO-DRIVEWAY>)>)
+                           (T <YOU-CANT "drive">)>)
+                    ;(T <YOU-CANT "drive">)>)
+             (<AND <VERB? WALK> <DOBJ? P?OUT>>
+              <MOVE ,WINNER ,HERE>
+              <OWN-FEET>)
+             (<OR <VERB? FOLLOW STAND WALK>
+                  <AND <VERB? LEAVE THROUGH WALK-TO>
+                       <NOT <ZERO? ,PRSO>>
+                       <NOT <EQUAL? ,PRSO ,LUGGAGE ,ROOMS ,CAR>>>
+                  ;<AND <VERB? WALK>
+                       <NOT <DOBJ? P?OUT>>>>
+              ;<TELL "(You get out of the car first.)" CR>
+              <FIRST-YOU "leave" ,CAR>
+              ;<GOTO <GETP ,CAR ,P?STATION>>
+              <MOVE ,WINNER ,HERE>
+              <COND (<VERB? STAND> <RTRUE>)
+                    (T <RFALSE>)>)
+             (<DOBJ? ROOMS>
+              <COND ;(<VERB? RING>     ;"only if syntax allows it"
+                     <PERFORM ,PRSA ,HORN>
+                     <RTRUE>)
+                    (<VERB? STOP>
+                     <PERFORM ,PRSA ,CAR>
+                     <RTRUE>)>)>)
+       (<EQUAL? .ARG ,M-LOOK>
+       <COND (<==? <LOC ,WINNER> ;,HERE ,CAR>
+              <TELL "You are sitting in your new little " 'CAR "." CR>)>
+       <RTRUE>)
+       (.ARG <RFALSE>)
+       (<VERB? EXAMINE>
+       <TELL-ABOUT-CAR>
+       <RTRUE>)
+       ;(<VERB? LAMP-ON>
+       <COND (<FSET? ,CAR ,MUNGBIT>
+              <TELL "The starter runs, but the engine won't start."CR>)
+             (<FSET? ,CAR ,FEMALE>
+              <TELL
+"You hear gears clash! The quiet engine must be running already." CR>)
+             (T
+              <FSET ,CAR ,FEMALE>
+              <TELL "The engine starts immediately." CR>)>)
+       ;(<VERB? LOCK>
+       <SETG CLOCK-WAIT T>
+       <TELL
+"(You're out in the country. You don't need to lock the car.)" CR>)
+       (<VERB? CLIMB-ON CLOSE OPEN LAMP-OFF LAMP-ON LOCK UNLOCK>
+       <NO-NEED "do that to">)>>
+
+<ROUTINE CAR-TO-COURTYARD ()
+       <MOVE ,CAR ,COURTYARD>
+       <TELL
+"Your headlights bravely pierce the gloom as you enter the " 'COURTYARD ".
+You get out of your car.|">
+       <GOTO ,COURTYARD>>
+
+<ROUTINE CAR-TO-DRIVEWAY ()
+       <SETG CLOCK-WAIT T>
+       <TELL "(You can't leave yet. There's a mystery to be solved!)" CR>>
+
+<ROUTINE TELL-ABOUT-CAR ("OPT" X)
+       <TELL "Your new little ">
+       <COND (<PRINT-COLOR> <TELL !\ >)>
+       <TELL 'CAR " is parked here." CR>>
+
+<OBJECT VOICE
+       (DESC "voice")
+       (ADJECTIVE LOUD ;CONCEAL HIDDEN LI\'S B\'S HIS)
+       (SYNONYM VOICE SPEAKER LOUDSPEAKER)
+       (FLAGS NDESCBIT)
+       (ACTION VOICE-F)>
+
+<ROUTINE VOICE-F ()
+ <COND (<EQUAL? ,HERE ;,CAR ,DRIVEWAY>
+       <COND (<AND <NOT <ZERO? ,DRAGON-EYE-COLOR>>
+                   <OR <VERB? LISTEN>
+                       <SPEAKING-VERB?>>>
+              <COND ;(<EQUAL? ,HERE ,CAR>
+                     <TELL "You still can't make out what's being said." CR>)
+                    (T <VOICE-SAYS>)>)>)
+       (<EQUAL? ,HERE ,DINING-ROOM>
+       <COND (<VERB? LISTEN>
+              <BUST-F>)>)>>
+
+<OBJECT HORN
+       (IN CAR)
+       (DESC "horn")
+       (ADJECTIVE MY MOTOR ;CAR)
+       (SYNONYM HORN)
+       (FLAGS NDESCBIT SEENBIT)
+       (ACTION HORN-F)>
+
+<ROUTINE HORN-F ()
+ <COND (<VERB? RING PUSH RUB SLAP SOUND>
+       <COND (<NOT <ZERO? <GETB ,LAST-NAME 0>>>
+              <COND (<GATE-OPENS> <RTRUE>)
+                    (T <TELL "\"H-O-O-O-N-K!\"" CR>)>)
+             (T
+              <THIS-IS-IT ,VOICE>
+              <MOVE ,VOICE ,DRIVEWAY ;,CAR>
+              <PERFORM ,V?PUSH ,DRAGON-EYE>
+              <RTRUE>)
+             ;(T
+              <COND (<NOT <L? ,DRAGON-EYE-COLOR 0>>
+                     <TELL "A red light flickers, on the gate. ">)>
+              <SETG DRAGON-EYE-COLOR -1>
+              <THIS-IS-IT ,VOICE>
+              <MOVE ,VOICE ,DRIVEWAY ;,CAR>
+              <TELL
+"You can hear a voice indistinctly. It seems to be coming from the gate."
+CR>)>)>>
+][
+<ROOM DRIVEWAY
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT)
+       (DESC "driveway")
+       (ADJECTIVE DRIVE)
+       (SYNONYM DRIVEWAY WAY)
+       (LINE 1)
+       (STATION COURTYARD ;DRIVEWAY)
+       (CHARACTER 2)
+       (GLOBAL FRONT-GATE MOON OCEAN WINDOW CHAIR)
+       (THINGS <PSEUDO ( CAR DOOR      CAR-DOOR-PSEUDO)>)
+       (SOUTH  TO COURTYARD IF FRONT-GATE IS OPEN)
+       (IN     TO COURTYARD IF FRONT-GATE IS OPEN)
+       (ACTION DRIVEWAY-F)>
+
+<ROUTINE DRIVEWAY-F ("OPTIONAL" (RARG 0))
+ <COND (<==? .RARG ,M-BEG>
+       <COND (<VERB? YELL>
+              <PERFORM ,V?KNOCK ,FRONT-GATE>
+              <RTRUE>)
+             (<AND <NOT <ZERO? ,DRAGON-EYE-COLOR>>
+                   <OR <SPEAKING-VERB?>
+                       <AND <VERB? LISTEN>
+                            <DOBJ? FRONT-GATE DRAGON DRAGON-EYE>>>>
+              <VOICE-SAYS>
+              <RTRUE>)>)
+       (<==? .RARG ,M-LOOK>
+       <TELL
+;"This is the end of the  'DRIVEWAY" "You are by the ">
+       <COND (<FSET? ,FRONT-GATE ,OPENBIT>
+              <TELL "open ">)>
+       <TELL
+'FRONT-GATE " of " 'CASTLE ". You can hear the ocean beating urgently
+against the rocks far below.|">
+       <TELL-ABOUT-DRAGON>
+       <RTRUE>)>>
+
+<OBJECT DRAGON
+       (IN DRIVEWAY ;FRONT-GATE)
+       (DESC "dragon")
+       ;(ADJECTIVE WINGED TWO-LEGGED)
+       (ADJECTIVE DRAGON WYVERN ORNAMENT ;"for possessives")
+       (SYNONYM DRAGON WYVERN ORNAMENT)
+       (FLAGS NDESCBIT TRYTAKEBIT)
+       (ACTION DRAGON-F)>
+
+<ROUTINE DRAGON-F ()
+ <COND (<VERB? EXAMINE LOOK-INSIDE>
+       <TELL-ABOUT-DRAGON>
+       <RTRUE>)
+       (T ;<VERB? PUSH RUB TURN>
+       <DRAGON-EYE-F>)>>
+
+<ROUTINE TELL-ABOUT-DRAGON ()
+       <TELL
+"In the moonlit gloom, you can make out an ornament on the gate.
+It's a winged, two-legged dragon called a wyvern,
+which crests the " ,TRESYLLIAN " family's coat of
+arms.|
+The dragon appears in profile. ">
+       <THIS-IS-IT ,DRAGON-EYE>
+       <TELL-ABOUT-EYE>
+       <RTRUE>>
+
+<ROUTINE I-DRAGON-EYE ("OPTIONAL" (GARG <>))
+ %<DEBUG-CODE <COND (<OR ,IDEBUG <==? .GARG ,G-DEBUG>>
+                    <TELL "[I-DRAGON-EYE:">
+                    <COND (<==? .GARG ,G-DEBUG> <RFALSE>)>)>>
+ <COND (<ZERO? <GETB ,LAST-NAME 0>>
+       ;<NOT <L? ,DRAGON-EYE-COLOR 0>>
+       <PERFORM ,V?PUSH ,DRAGON-EYE>
+       <RFATAL>)>>
+
+<OBJECT DRAGON-EYE
+       (IN DRIVEWAY ;FRONT-GATE)
+       (DESC "dragon's eye")
+       (ADJECTIVE ;"WINGED TWO-LEGGED" DRAGON WYVERN WORM\'S RED GREEN DOOR)
+       (SYNONYM EYE DOORBELL ;BUTTON LIGHT BELL)
+       (GENERIC GENERIC-BELL)
+       (FLAGS NDESCBIT SEENBIT)
+       (ACTION DRAGON-EYE-F)>
+
+<ROUTINE DRAGON-EYE-F ()
+ <COND (<VERB? EXAMINE LOOK-INSIDE>
+       <TELL-ABOUT-EYE>
+       <RTRUE>)
+       (<VERB? BOARD CLIMB-ON LEAP>
+       <TELL ,TOO-SLIPPERY>
+       <RTRUE>)
+       (<VERB? KNOCK MOVE MUNG PUSH RING RUB SLAP TURN>
+       <COND (<NOT <L? ,DRAGON-EYE-COLOR 0>>
+              <SETG DRAGON-EYE-COLOR -1>
+              <TELL "The " 'DRAGON-EYE " glows red. ">)>
+       <COND (<NOT <VERB? PUSH>>
+              <TELL "Evidently you just pushed a button. ">)>
+       <TELL "A voice comes from a hidden speaker. It says:|">
+       <VOICE-SAYS>
+       <RTRUE>)
+       (<VERB? TAKE>
+       <TELL "It's part of the " 'FRONT-GATE "." CR>)>>
+
+<ROUTINE TELL-ABOUT-EYE ()
+       <COND (<ZERO? ,DRAGON-EYE-COLOR>
+              <TELL "The moonlight glints on its lone visible eye." CR>)
+             (T
+              <TELL "The " 'DRAGON-EYE " is glowing ">
+              <COND (<G? ,DRAGON-EYE-COLOR 0>
+                     <TELL "green." CR>)
+                    (T <TELL "red." CR>)>)>>
+
+<ROUTINE VOICE-SAYS ()
+       <QUEUE I-DRAGON-EYE 0>
+       <COND (<NOT <ZERO? <GETB ,LAST-NAME 0>>>
+              <TELL "\"Please enter, ">
+              <COND (<TITLE-NAME> <TELL !\.>)>
+              <TELL "\"|">
+              <GATE-OPENS>
+              <RTRUE>)>
+       <QUEUE I-FRIEND-GREETS 6 ;9>
+       <TELL
+"\"Please announce " 'PLAYER ". State your title -- such as Lord or Lady,
+Sir or Dame, Mr. or Ms. -- and your first and last name.\"|">
+       <GET-NAME>
+       <TELL "\"And what is " 'YOUR-COLOR ", "TN"?\"|">
+       <GET-COLOR>
+       <TELL "\"Jolly good! The spare bedroom is decorated in ">
+       <PRINT-COLOR>
+       <TELL "! ">
+       ;<TELL "Are you driving, "TN"?\"">
+       <COND ;(<YES?>
+              <TELL ;"return to your car and ... a blast on "
+"\"Then please sound your motor horn when you are ready to enter.\""
+CR>)
+             (T
+              ;<TELL "\"Then p">
+              <TELL "Please enter.\"" CR>
+              <GATE-OPENS>)>
+       <RTRUE>>
+
+<ROUTINE GATE-OPENS ()
+ <COND (<AND <EQUAL? ,HERE ,DRIVEWAY>
+            <NOT <FSET? ,FRONT-GATE ,OPENBIT>>>
+       ;<ESTABLISH-GOAL ,FRIEND ,COURTYARD>
+       ;<ESTABLISH-GOAL ,LORD ,COURTYARD>
+       ;<PUT <GT-O ,FRIEND>    ,GOAL-FUNCTION ,FRIEND-GREETS>
+       ;<PUT <GT-O ,LORD>      ,GOAL-FUNCTION ,NULL-F ;,LORD-GREETS>
+       <REMOVE ,VOICE>
+       <FSET ,FRONT-GATE ,OPENBIT>
+       <FCLEAR ,FRONT-GATE ,LOCKED>
+       <THIS-IS-IT ,FRONT-GATE>
+       <TELL "The ">
+       <COND (<NOT <EQUAL? ,DRAGON-EYE-COLOR +1>>
+              <COND (<L? ,DRAGON-EYE-COLOR 0> <TELL "red ">)>
+              <SETG DRAGON-EYE-COLOR +1>
+              <TELL "eye turns green, and the ">)>
+       <TELL 'FRONT-GATE " creaks open." CR>)>>
+
+<GLOBAL DRAGON-EYE-COLOR:NUMBER 0>
+]
+<GLOBAL TOO-SLIPPERY "The thickening mist has made it too slippery.|">
+
+<OBJECT FRONT-GATE
+       (IN LOCAL-GLOBALS)
+       (DESC "front gate")
+       (ADJECTIVE FRONT TALL IRON)
+       (SYNONYM GATE ;DOOR)
+       (FLAGS TRANSBIT LOCKED DOORBIT SEENBIT ;SURFACEBIT)
+       (ACTION FRONT-GATE-F)>
+
+;<GLOBAL FRONT-GATE-KNOCKED:NUMBER 0>
+<ROUTINE FRONT-GATE-F ()
+ <COND (<VERB? KNOCK>
+       ;<SETG FRONT-GATE-KNOCKED <+ 1 ,FRONT-GATE-KNOCKED>>
+       <COND (T ;<ZERO? <MOD ,FRONT-GATE-KNOCKED 2>>
+              <TELL "Apparently no one hears you." CR>)
+             ;(T <TELL
+"Some of the castle windows show light, but the " 'COURTYARD " remains
+shrouded in silence." CR>)>)
+       (<VERB? MUNG SHAKE UNLOCK>
+       <TELL
+"Except for your rattling the gate, the silence remains unbroken." CR>)
+       (<VERB? BOARD CLIMB-ON LEAP>
+       <TELL ,TOO-SLIPPERY>
+       <RTRUE>)
+       (<AND <VERB? WALK-TO>
+            <NOT <EQUAL? ,HERE ,DRIVEWAY ,COURTYARD>>>
+       <PERFORM ,PRSA ,COURTYARD>
+       <RTRUE>)
+       (<VERB? OPEN>
+       <COND (<FSET? ,FRONT-GATE ,LOCKED>
+              <TELL "It seems to be locked." CR>)>)
+       (<VERB? EXAMINE LOOK-ON SEARCH SEARCH-FOR>
+       <COND (<OR <EQUAL? ,HERE ,DRIVEWAY>
+                  ;<AND <EQUAL? ,HERE ,CAR>
+                       <EQUAL? <GETP ,HERE ,P?STATION> ,DRIVEWAY>>>
+              <TELL-ABOUT-DRAGON>
+              <RTRUE>)
+             ;(<AND <IN? ,CLUE-4 ,FRONT-GATE>
+                   <FSET? ,CLUE-4 ,SECRETBIT>>
+              <DISCOVER ,CLUE-4>)>)
+       (<IN? ,VOICE ,HERE>
+       <VOICE-F>)>>
+
+<ROOM COURTYARD
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT)
+       (DESC "courtyard")
+       (ADJECTIVE CASTLE COURT)
+       (SYNONYM COURTYARD YARD ROOM)
+       (LINE 1)
+       (STATION COURTYARD)
+       (CHARACTER 2)
+       (GLOBAL FRONT-GATE MOON FRONT-DOOR OLD-GREAT-HALL
+               OCEAN WINDOW CHAIR)
+       (THINGS <PSEUDO ( CAR DOOR      CAR-DOOR-PSEUDO)>)
+       (OUT    TO DRIVEWAY IF FRONT-GATE IS OPEN)
+       (NORTH  TO DRIVEWAY IF FRONT-GATE IS OPEN)
+       (SW     TO OLD-GREAT-HALL IF OLD-GREAT-HALL ;TOWER-DOOR IS OPEN)
+       (SOUTH  TO FOYER IF FRONT-DOOR IS OPEN)
+       (IN     TO FOYER IF FRONT-DOOR IS OPEN)
+       ;(IN    "Do you want to go south or southwest?")
+       (EAST   TO MAZE ;GARDEN)
+       (ACTION COURTYARD-F)>
+
+<ROUTINE COURTYARD-F ("OPTIONAL" (RARG 0))
+ <COND (<EQUAL? .RARG ,M-ENTER>
+       <COND (<IN? ,FRIEND ,LIMBO>
+              <MOVE ,FRIEND ,COURTYARD>)>
+       <COND (<NOT <ZERO? ,DRAGON-EYE-COLOR>>
+              <SETG DRAGON-EYE-COLOR 0>)>
+       <COND (<NOT <FSET? ,FRONT-GATE ,LOCKED>>
+              <FCLEAR ,FRONT-GATE ,OPENBIT>
+              <FSET ,FRONT-GATE ,LOCKED>
+              <TELL "The " 'FRONT-GATE " closes and locks behind you." CR>)>)
+       (<EQUAL? .RARG ,M-LOOK>
+       <COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
+              <FSET ,HERE ,TOUCHBIT>
+              <TELL "As flood lights blaze on, you look around. ">)>
+       <TELL-LIKE-BROCHURE>
+       <TELL ,DARK-TURRETS>
+       <RTRUE>)
+       (<EQUAL? .RARG ,M-FLASH>
+       <COND (<AND <IN? ,FRIEND ,COURTYARD>
+                   <NOT <FSET? ,FRIEND ,TOUCHBIT>>
+                   <ZERO? ,CLOCK-WAIT>>
+              <FSET ,FRIEND ,TOUCHBIT>
+              <FCLEAR ,FRIEND ,NDESCBIT>
+              <SETG FOLLOWER ,FRIEND>
+              <SETG QCONTEXT ,FRIEND>
+              ;<PUT <GET ,GOAL-TABLES ,FRIEND-C> ,GOAL-ENABLE 0>
+              <QUEUE I-FRIEND-GREETS 0>
+              ;<PUTP ,FRIEND ,P?LDESC 0>
+              <QUEUE I-TOUR 7 ;3>
+              <ESTABLISH-GOAL ,BUTLER ,COURTYARD>
+              ;<PUT <GT-O ,BUTLER> ,GOAL-FUNCTION ,BUTLER-APPEARS>
+              <FCLEAR ,FRONT-DOOR ,LOCKED>
+              <SETG QCONTEXT ,FRIEND>
+              <THIS-IS-IT ,FRIEND>
+              <PUTP ,FRIEND ,P?LDESC 12 ;"listening to you">
+              <SETG AWAITING-REPLY ,FRIEND-C>
+              <QUEUE I-REPLY ;2 ,CLOCKER-RUNNING>
+              <TELL "|
+Someone comes running out of the wing to greet you. " <GETP ,FRIEND ,P?TEXT>
+" You recognize her as your friend, " 'FRIEND " Lynd.|
+\""FN"!\" she cries with outflung arms. \"You sweet thing, to answer
+my letter in person this way! And all the people I wrote about are
+here tonight for Lionel's memorial birthday dinner!\"|
+After a warm hug, she asks anxiously, \""
+<GET ,QUESTIONS ,AWAITING-REPLY> "\"|">
+              <RFATAL>)>)
+       ;(<EQUAL? .RARG ,M-EXIT>
+       <COND (<T? ,AWAITING-REPLY>
+              <SETG CLOCK-WAIT T>
+              <PLEASE-ANSWER>
+              <RTRUE>)>)>>
+
+<ROUTINE TELL-LIKE-BROCHURE ("OPTIONAL" (DR <>))
+       <TELL
+"It looks even lovelier than it sounds in the " D ,BROCHURE ".">
+       <COND (<T? .DR>
+              <OPEN-DOOR? .DR>)>
+       <CRLF>>
+
+<ROOM MAZE
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT)
+       (DESC "hedge maze")
+       (ADJECTIVE HEDGE)
+       (SYNONYM MAZE ;HEDGEMAZE)
+       (LDESC
+"Tall dark hedges surround you like walls, with walkways in all directions.")
+       (LINE 1)
+       (STATION MAZE ;COURTYARD)
+       (CHARACTER 2)
+       (GLOBAL MOON OCEAN)
+       (NORTH  PER MAZE-EXIT)
+       (NE     PER MAZE-EXIT)
+       (EAST   PER MAZE-EXIT)
+       (SE     PER MAZE-EXIT)
+       (SOUTH  PER MAZE-EXIT)
+       (SW     PER MAZE-EXIT)
+       (WEST   PER MAZE-EXIT)
+       (NW     PER MAZE-EXIT)
+       (IN     TO GARDEN)
+       (OUT    TO COURTYARD)
+       (ACTION MAZE-F)>
+
+<ROUTINE MAZE-EXIT ("AUX" RM)
+       <COND (<==? ,OHERE ,GARDEN>
+              <SET RM ,COURTYARD>)
+             (T ;<==? ,OHERE ,COURTYARD>
+              <SET RM ,GARDEN>)>
+       <COND (<==? ,WINNER ,PLAYER>
+              <TELL
+"You stumble blindly through the maze and suddenly emerge in the " D .RM".|">)>
+       .RM>
+
+<ROUTINE MAZE-F ("OPT" (RARG 0))
+ <COND (<T? .RARG>
+       <RFALSE>)
+       (<VERB? THROUGH>
+       <COND (<EQUAL? ,HERE ,MAZE>
+              <GOTO <MAZE-EXIT>>)>)>>
+
+<ROOM GARDEN
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT)
+       (DESC "garden")
+       (ADJECTIVE CASTLE)
+       (SYNONYM GARDEN BOWER)
+       (LINE 1)
+       (STATION GARDEN ;COURTYARD)
+       (CHARACTER 2)
+       (GLOBAL MOON OCEAN)
+       (NORTH  TO MAZE)
+       (NE     TO MAZE)
+       (EAST   TO MAZE)
+       (SE     TO MAZE)
+       (SOUTH  TO MAZE)
+       (SW     TO MAZE)
+       (WEST   TO MAZE)
+       (NW     TO MAZE)
+       (OUT    TO MAZE)
+       (ACTION GARDEN-F)>
+
+<ROUTINE GARDEN-F ("OPTIONAL" (RARG <>) "AUX" OBJ)
+ <COND (<==? .RARG ,M-LOOK>
+       <TELL
+"Here in the central garden the plants quake nervously in
+the mist. In the very middle is a " 'POND "." CR
+;" You can go west to the courtyard or southwest to enter the castle.">)
+       (<T? .RARG>
+       <RFALSE>)
+       (<VERB? EXAMINE SEARCH SEARCH-FOR>
+       <COND (<SET OBJ <FIND-FLAG-HERE ,SECRETBIT>>
+              <DISCOVER .OBJ ,HERE>
+              <RTRUE>)>
+       ;<COND (<AND <IN? ,CLUE-4 ,GARDEN>
+                   <FSET? ,CLUE-4 ,SECRETBIT>>
+              <DISCOVER ,CLUE-4 ,GARDEN>
+              <RTRUE>)
+             ;(<AND <IN? ,NECKLACE ,GARDEN>
+                   <FSET? ,NECKLACE ,SECRETBIT>>
+              <DISCOVER ,NECKLACE ,GARDEN>
+              <RTRUE>)>)>>
+
+<OBJECT POND
+       (IN GARDEN)
+       (DESC "goldfish pond")
+       (ADJECTIVE ;GOLDFISH ;FISH STONE)
+       (SYNONYM POND WATER FOUNTAIN)
+       (FLAGS CONTBIT OPENBIT NDESCBIT SEENBIT)
+       (CAPACITY 999)
+       (ACTION POND-F)>
+
+<ROUTINE POND-F ()
+ <COND (<VERB? BOARD LEAP SWIM THROUGH>
+       <TELL "On second thought, it looks too dark and slippery." CR>
+       <RTRUE>)
+       (<VERB? EXAMINE LOOK-INSIDE LOOK-UNDER>
+       <COND ;(<AND <IN? ,NECKLACE ,POND>
+                   <FSET? ,NECKLACE ,SECRETBIT>>
+              <DISCOVER ,NECKLACE ,POND>
+              ;<TELL
+CHE ,WINNER notice " something projecting above the water. When" HE ,WINNER
+take " it, it's obviously a " D ,NECKLACE "!" CR>)
+             (T
+              <TELL-AS-WELL-AS ,POND " dark water">
+              <RTRUE>)>)>>
+
+<OBJECT FRONT-DOOR
+       (IN ROOMS ;LOCAL-GLOBALS)
+       (DESC "front door")
+       (ADJECTIVE FRONT CASTLE)
+       (SYNONYM DOOR ;DOORS ;"from COURTYARD" ;KEYHOLE)
+       (FLAGS OPENBIT DOORBIT SEENBIT LOCKED)
+       (ACTION FRONT-DOOR-F)>
+
+<ROUTINE FRONT-DOOR-F ()
+ <COND (<VERB? WALK-TO>
+       <COND (<OUTSIDE? ,HERE>
+              <PERFORM ,V?WALK-TO ,COURTYARD>
+              <RTRUE>)
+             (T
+              <PERFORM ,V?WALK-TO ,FOYER>
+              <RTRUE>)>)>>
+[
+<ROOM FOYER
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT DOORBIT WEARBIT)
+       (DESC "foyer")
+       (ADJECTIVE NEW FOYER DOUBLE BRONZE)
+       (SYNONYM FOYER ROOM DOOR ;DOORS ;"can't handle multiple doors")
+       (LINE 1)
+       (STATION FOYER)
+       (CHARACTER 2)
+       (GLOBAL FRONT-DOOR FOYER ;FOYER-DOOR CHAIR TABLE-RANDOM
+               WINDOW OIL-PAINTING)
+       (SOUTH  TO GREAT-HALL IF FOYER ;FOYER-DOOR IS OPEN)
+       (EAST   TO DRAWING-ROOM IF DRAWING-ROOM IS OPEN)
+       (IN     TO DRAWING-ROOM IF DRAWING-ROOM IS OPEN)
+       (OUT    TO COURTYARD IF FRONT-DOOR IS OPEN)
+       (NORTH  TO COURTYARD IF FRONT-DOOR IS OPEN)
+       (ACTION FOYER-F)>
+
+<ROUTINE FOYER-F ("OPTIONAL" (RARG 0))
+ <COND (<EQUAL? .RARG ,M-ENTER>
+       <COND (<NOT <FSET? ,FOYER ,TOUCHBIT>>
+              <FSET ,FOYER ,TOUCHBIT>
+              <TELL
+"As you enter the foyer, you're overwhelmed by the English
+past. Those barbarous times when
+Jack's ancestors had to shut themselves up in a fortified castle have
+softened into gracious country living. Yet " 'FRIEND " is clearly anxious." CR>
+              ;<COND (<AND <IN? ,BUTLER ,FOYER>
+                           <NOT <FSET? ,BUTLER ,TOUCHBIT>>>
+                      <FSET ,BUTLER ,TOUCHBIT>
+                      <FCLEAR ,BUTLER ,NDESCBIT>
+                      <TELL
+CHE ,BUTLER " says, \"Welcome to " D ,CASTLE ", ">
+                      <COND (<TITLE-NAME> <TELL !\.>)>
+                      <TELL " I hope you had no
+trouble with the security gate. We've all been on edge since the 'ghost'
+appeared again last night. Of course, I put no stock in ghosts. I hope you
+don't either. Please follow me.\"" CR>
+                      <ESTABLISH-GOAL ,BUTLER ,GREAT-HALL>
+                      <RTRUE>)>
+              <RTRUE>)>)
+       (<EQUAL? .RARG ,M-LOOK>
+       <TELL-LIKE-BROCHURE>
+       <DESCRIBE-CONTENTS ,COAT-RACK>
+       <RTRUE>)
+       (<EQUAL? .RARG ,M-FLASH>
+       <COND (<AND <NOT <FSET? ,LORD ,TOUCHBIT>>
+                   <IN? ,LORD ,FOYER>>
+              <LORD-INTRO>)>
+       <RTRUE>)>>
+
+<ROUTINE DESCRIBE-CONTENTS (OBJ)
+       <COND (<FIND-FLAG-NOT .OBJ ,NDESCBIT>
+              ;<FIRST? .OBJ>
+              <TELL "On" THE .OBJ " you see">
+              <PRINT-CONTENTS .OBJ>
+              <TELL ".|">)>>
+
+<OBJECT UMBRELLA-STAND
+       (IN FOYER)
+       (DESC "umbrella stand")
+       (ADJECTIVE UMBRELLA)
+       (SYNONYM STAND ;CASE UMBRELLA)
+       (FLAGS CONTBIT OPENBIT NDESCBIT VOWELBIT SEENBIT)
+       (CAPACITY 99)
+       ;(LDESC
+"In a dark corner is an umbrella stand." ;", containing various
+umbrellas.")
+       (ACTION UMBRELLA-STAND-F)>
+
+<ROUTINE UMBRELLA-STAND-F ()
+       <FCLEAR ,UMBRELLA-STAND ,NDESCBIT>
+       <COND (<VERB? OPEN CLOSE>
+              <YOU-CANT>)
+             (<VERB? TAKE>
+              <COND (<NOUN-USED? ,W?UMBRELLA>
+                     <TELL "But it's not raining!" CR>)>)
+             (<VERB? EXAMINE LOOK-INSIDE SEARCH SEARCH-FOR>
+              <COND (<AND <IN? ,CANE ,UMBRELLA-STAND>
+                          <FSET? ,CANE ,NDESCBIT>>
+                     <FCLEAR ,CANE ,NDESCBIT>
+                     <FCLEAR ,CANE ,SECRETBIT>
+                     <FSET ,CANE ,SEENBIT>
+                     <FSET ,CANE ,TAKEBIT>
+                     <FSET ,CANE ,TOUCHBIT>
+                     ;<MOVE ,CANE ,WINNER>
+                     <THIS-IS-IT ,CANE>
+                     <TELL
+"Among the umbrellas there's a cane that looks odd." CR>
+                     <RTRUE>)
+                    (<VERB? EXAMINE>
+                     <TELL-LIKE-BROCHURE>
+                     ;<TELL
+CTHE ,UMBRELLA-STAND " is made from the foot of an elephant." CR>)
+                    (T
+                     <TELL-AS-WELL-AS ,UMBRELLA-STAND
+                                      " an assortment of umbrellas">
+                     <RTRUE>)>)>>
+
+<OBJECT COAT-RACK
+       (IN FOYER)
+       (DESC "coat rack")
+       (ADJECTIVE COAT)
+       (SYNONYM RACK)
+       (FLAGS SURFACEBIT OPENBIT NDESCBIT SEENBIT)
+       (CAPACITY 999)>
+][
+<OBJECT SECRET-DRAWING-DOOR
+       (IN ROOMS ;LOCAL-GLOBALS)
+       (DESC "secret door")
+       (ADJECTIVE SECRET PASSAGE)
+       (SYNONYM DOOR)
+       (GENERIC GENERIC-BEDROOM)
+       (FLAGS SECRETBIT DOORBIT)
+       ;(GENERIC GENERIC-DRAWING-DOOR)>
+
+<ROOM DRAWING-ROOM
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT OPENBIT DOORBIT WEARBIT WORNBIT)
+       (DESC "drawing room")
+       (ADJECTIVE DRAWING ;ROOM)
+       (SYNONYM ROOM DOOR)
+       (GENERIC GENERIC-BEDROOM)
+       (LINE 1)
+       (STATION GREAT-HALL)
+       (CHARACTER 2)
+       (GLOBAL GREAT-HALL DRAWING-ROOM SECRET-DRAWING-DOOR CHAIR
+               FIREPLACE WINDOW TABLE-RANDOM OIL-PAINTING)
+       (IN     TO GREAT-HALL IF GREAT-HALL ;DRAWING-DOOR IS OPEN)
+       (WEST   TO GREAT-HALL IF GREAT-HALL ;DRAWING-DOOR IS OPEN)
+       (OUT    TO FOYER IF DRAWING-ROOM IS OPEN)
+       (NW     TO FOYER IF DRAWING-ROOM IS OPEN)
+       (NORTH  TO FOYER IF DRAWING-ROOM IS OPEN)
+       (SOUTH  TO DRAWING-CLOSET IF SECRET-DRAWING-DOOR IS OPEN)
+       (ACTION DRAWING-ROOM-F)>
+
+<GLOBAL INTRODUCES " introduces ">
+
+<ROUTINE DRAWING-ROOM-F ("OPTIONAL" (RARG 0) "AUX" PER)
+ <COND (<EQUAL? .RARG ,M-BEG ;,M-EXIT>
+       <COND (<AND <VERB? OPEN CLOSE>
+                   <DOBJ? SECRET-DRAWING-DOOR>>
+              <YOU-CANT <> ,PLAYER "in this room">
+              <RTRUE>)
+             (T <SECRET-CHECK .RARG>)>)
+       ;(<EQUAL? .RARG ,P?NORTH>
+       <ENTER-PASSAGE>
+       <RTRUE>)
+       (<EQUAL? .RARG ,M-LOOK>
+       <TELL-LIKE-BROCHURE ,SECRET-DRAWING-DOOR>)
+       (<EQUAL? .RARG ,M-FLASH>
+       <COND (<AND <IN? ,DEALER ,DRAWING-ROOM>
+                   <NOT <FSET? ,DEALER ,TOUCHBIT>>>
+              <FSET ,DEALER ,TOUCHBIT>
+              <COND (<AND <EQUAL? <LOC ,PAINTER> ,HERE ,PSEUDO-OBJECT>
+                          <=? <GETP ,DEALER ,P?LDESC> 2 ;"sipping sherry">>
+                     <TELL
+"A tall graceful older couple in evening clothes are chatting and "
+<GET ,LDESC-STRINGS 2> ;"sipping sherry" ".|">
+                     <SETG QCONTEXT ,PAINTER>
+                     <COND (<EQUAL? <LOC ,LORD> ,HERE ,PSEUDO-OBJECT>
+                            <SET PER ,LORD>)
+                           (<EQUAL? <LOC ,FRIEND> ,HERE ,PSEUDO-OBJECT>
+                            <THIS-IS-IT ,FRIEND>
+                            <SET PER ,FRIEND>)>
+                     <COND (<T? .PER>
+                            <TELL
+D .PER ,INTRODUCES "them as Montague Hyde and Vivien Pentreath.|
+Hyde smiles and bows stiffly. And Vivien murmurs in an attractively low
+voice, \"How do you do, ">
+                            <COND (<TITLE-NAME> <TELL !\.>)>
+                            <TELL "\"|
+\"Believe it or not, this young ">
+                            <COND (<ZERO? ,GENDER-KNOWN> <TELL "person">)
+                                  (<FSET? ,PLAYER ,FEMALE> <TELL "lady">)
+                                  (T <TELL "man">)>
+                            <TELL
+" is a famous American detective,\" " D .PER " tells them.|">
+                            <COND (<EQUAL? <LOC ,FRIEND>,HERE ,PSEUDO-OBJECT>
+                                   <TELL
+"\"Not a police detective, of course,\" " 'FRIEND " adds as they both
+stiffen, \"but a
+solver of all sorts of mysteries in the States. We're hoping
+to find out who or what is haunting " 'CASTLE ".\"" CR>)>)>)>)>)>>
+
+<OBJECT LOVER-PIC
+       (IN DRAWING-ROOM)
+       (DESC "Deirdre's portrait")
+       (ADJECTIVE VIV\'S DEE\'S HER ART DEIRDRE DEE;"handles PICTURE OF DEE!")
+       (SYNONYM PORTRAIT PICTURE PAINTING WATERCOLOR)
+       ;(GENERIC GENERIC-PAINTING)
+       (FLAGS NDESCBIT NARTICLEBIT)
+       (ACTION LOVER-PIC-F)>
+
+<ROUTINE LOVER-PIC-F ()
+ <COND (<VERB? EXAMINE>
+       <TELL
+"It's a portrait by " 'PAINTER " of " 'LOVER ", a lovely young woman
+with flowing blonde hair, standing on a grassy slope, gazing out to sea.
+It's painted in pastel tones, which emphasize " 'LOVER "'s violet eyes.
+There's something ethereal and fairylike about her. Ironically, her
+silvery white, sleeveless gown is the very one she was wearing at the
+time of her accident." CR>)>>
+
+<OBJECT OIL-PAINTING
+       (IN LOCAL-GLOBALS ;DRAWING-ROOM)
+       (DESC "oil painting")
+       (ADJECTIVE OIL ART)
+       (SYNONYM PORTRAIT PICTURE PAINTING)
+       ;(GENERIC GENERIC-PAINTING)
+       (FLAGS NDESCBIT VOWELBIT SEENBIT)
+       (ACTION BROCHURE-PSEUDO)>
+
+<OBJECT TAPESTRY
+       (IN DRAWING-ROOM)
+       (DESC "tapestry")
+       (SYNONYM TAPESTRY UNICORN MAIDEN ARM)
+       (FLAGS NDESCBIT SEENBIT)
+       (ACTION TAPESTRY-F)>
+
+<ROUTINE TAPESTRY-F ()
+ <COND (<VERB? EXAMINE SEARCH>
+       <TELL-LIKE-BROCHURE>
+       ;<TELL "The " 'TAPESTRY " depicts a unicorn and a maiden." CR>
+       <COND (<EQUAL? ,VARIATION ,PAINTER-C ;,FRIEND-C>
+              <TELL
+"Someone has added a star in red thread on the maiden's ARM." CR>)>
+       <RTRUE>)
+       (<VERB? LOOK-BEHIND LOOK-UNDER>
+       <FSET ,SECRET-DRAWING-DOOR ,TOUCHBIT>
+       <THIS-IS-IT ,SECRET-DRAWING-DOOR>
+       <TELL
+"Hidden behind the " 'TAPESTRY " is" THE ,SECRET-DRAWING-DOOR "!" CR>)>>
+
+<OBJECT VICTORIA-CHAIR
+       (IN DRAWING-ROOM)
+       (DESC "armchair")
+       (ADJECTIVE ARM SATIN)
+       (SYNONYM CHAIR SEAT ARMCHAIR CUSHION)
+       (FLAGS SURFACEBIT VEHBIT OPENBIT NDESCBIT VOWELBIT)
+       (CAPACITY 99)>
+][
+<ROOM GREAT-HALL
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT DOORBIT WEARBIT)
+       (DESC "new great hall")
+       (ADJECTIVE GREAT NEW ;DRAWING)
+       (SYNONYM HALL DOOR ;DOORS ROOM)
+       (GENERIC GENERIC-GREAT-HALL)
+       (LINE 1)
+       (STATION GREAT-HALL)
+       (CHARACTER 2)
+       (GLOBAL GREAT-HALL FOYER CHAIR FIREPLACE
+               WINDOW TABLE-RANDOM STAIRS DRAWING-ROOM)
+       (THINGS <PSEUDO ( <> RADIO      RANDOM-PSEUDO)
+                       ( TRESYLLIAN ARMS       BROCHURE-PSEUDO)
+                       ( TRESYLLIAN CREST      BROCHURE-PSEUDO)
+                       ( WOOD CARVING  BROCHURE-PSEUDO)>)
+       (UP     TO GALLERY)
+       ;(SOUTH TO GALLERY)
+       (OUT    TO FOYER IF FOYER ;FOYER-DOOR IS OPEN)
+       (NORTH  TO FOYER IF FOYER ;FOYER-DOOR IS OPEN)
+       (IN     TO DRAWING-ROOM IF GREAT-HALL IS OPEN)
+       (EAST   TO DRAWING-ROOM IF GREAT-HALL ;DRAWING-DOOR IS OPEN)
+       ;(SW    TO SITTING-ROOM IF SITTING-ROOM ;SITTING-DOOR IS OPEN)
+       (WEST   TO CORR-1)
+       (ACTION GREAT-HALL-F)>
+
+<ROUTINE GREAT-HALL-F ("OPTIONAL" (RARG 0))
+ <COND (<EQUAL? .RARG ,M-LOOK>
+       <TELL-LIKE-BROCHURE>
+       <GREAT-HALL-IS-FLOORED>
+       <RTRUE>)
+       (<EQUAL? .RARG ,M-FLASH>
+       <COND (<AND <IN? ,DEB ,GREAT-HALL>
+                   <NOT <FSET? ,DEB ,TOUCHBIT>>
+                   <ZERO? ,CLOCK-WAIT>>
+              <FSET ,DEB ,TOUCHBIT>
+              <FCLEAR ,DEB ,NDESCBIT>
+              <COND (<AND <EQUAL? <LOC ,OFFICER> ,HERE ,PSEUDO-OBJECT>
+                          <=? <GETP ,DEB ,P?LDESC> 1 ;"dancing">>
+                     <TELL
+"A young couple are dancing to the faint sound of rock music from
+a portable radio on a table nearby.|">)>
+              <TELL <GETP ,DEB ,P?TEXT> CR>
+              <COMMON-DESC ,OFFICER>   ;<PERFORM ,V?EXAMINE ,OFFICER>
+              <TELL "|
+They stop dancing, turn off the radio, and greet you."
+;", with affected smiles and half-hidden curiosity.">
+              <COND (<EQUAL? <LOC ,FRIEND> ,HERE ,PSEUDO-OBJECT>
+                     <TELL
+!\  'FRIEND ,INTRODUCES "them as the Honourable Iris Vane and Lt.
+Ian Fordyce of Her Majesty's Coldstream Guards.|">)>
+              <PUTP ,DEB ,P?LDESC 0>
+              <THIS-IS-IT ,DEB>
+              <PUTP ,OFFICER ,P?LDESC 0>
+              <THIS-IS-IT ,OFFICER>
+              <QUEUE I-TOUR 0>
+              <QUEUE I-REPLY ;1 ,CLOCKER-RUNNING>
+              ;<ESTABLISH-GOAL ,DOCTOR ,HERE>
+              <COND (<OR <ZERO? ,GENDER-KNOWN>
+                         <NOT <FSET? ,PLAYER ,FEMALE>>>
+                     <COND (<ZERO? ,GENDER-KNOWN>
+                            <TELL
+"\"What a lark, having a Yank sleuth in our midst">)
+                           (T <TELL
+"\"My dear! What a handsome addition to your guest list">)>
+                     <TELL "!\" chirps Iris. Her green eyes sparkle ">
+                     <COND (<ZERO? ,GENDER-KNOWN>
+                            <TELL "a trifle malic">)
+                           (T <TELL "flirtat">)>
+                     <TELL "iously as she offers you her delicate hand. ">
+                     <COND (<ZERO? ,GENDER-KNOWN>
+                            <SETG QCONTEXT ,OFFICER>
+                            ;<THIS-IS-IT ,OFFICER>
+                            <PUTP ,OFFICER ,P?LDESC 12 ;"listening to you">
+                            <SETG AWAITING-REPLY ,OFFICER-1-R>
+                            <TELL
+"\"I always find Americans so innocently fascinating! I'm sure you'll
+have loads to tell us about the baffling mysteries you've solved...\"|
+\"Belt up, Iris, there's a good girl,\" says Ian. Flashing
+you an apologetic smile, he comments, \"Spoiled rotten, I'm afraid.
+Personally I should like nothing better than to hear all about your
+mystery cases. But first tell us: " <GET ,QUESTIONS ,AWAITING-REPLY> "\"|">
+                            <RFATAL>)
+                           (T
+                            <SETG QCONTEXT ,DEB>
+                            ;<THIS-IS-IT ,DEB>
+                            <PUTP ,DEB ,P?LDESC 12 ;"listening to you">
+                            <SETG AWAITING-REPLY ,DEB-C>
+                            <TELL
+"\"Tell me, "TN" -- " <GET ,QUESTIONS ,AWAITING-REPLY> "\"|">
+                            <RFATAL>)>)
+                    (T
+                     <COND (<EQUAL? ,VARIATION ,FRIEND-C>
+                            <TELL
+'DEB " pulls Jack aside, whispers something to him, and giggles." CR>)>
+                     <SETG QCONTEXT ,OFFICER>
+                     <THIS-IS-IT ,OFFICER>
+                     <PUTP ,OFFICER ,P?LDESC 12 ;"listening to you">
+                     <SETG AWAITING-REPLY ,OFFICER-2-R>
+                     <TELL
+"\"I say!\" exclaims Ian, bringing your hand to his lips.
+His glance runs swiftly over your face and figure with an
+air of expert appraisal. \"" <GET ,QUESTIONS ,AWAITING-REPLY> "\"|">
+                     <RFATAL>)>)>)
+       ;(<EQUAL? .RARG ,M-EXIT>
+       <COND (<T? ,AWAITING-REPLY>
+              <SETG CLOCK-WAIT T>
+              <PLEASE-ANSWER>
+              <RTRUE>)>)>>
+
+<ROUTINE GREAT-HALL-IS-FLOORED ()
+       <TELL
+"The hall is floored with black and white marble tiles. They've been worn
+smooth by footsteps over the centuries, especially near
+the archway to the " 'DRAWING-ROOM "." CR>>
+
+<OBJECT ARMOR
+       (IN GREAT-HALL)
+       (DESC "suit of armour")
+       ;(ADJECTIVE ARMOR ARMOUR)
+       (SYNONYM SUIT ARMOR ARMOUR HELMET)
+       (FLAGS CONTBIT ;OPENBIT NDESCBIT SEENBIT)
+       (CAPACITY 99)
+       (ACTION ARMOR-F)>
+
+<ROUTINE ARMOR-F ()
+ <FCLEAR ,ARMOR ,NDESCBIT>
+ <COND (<VERB? EXAMINE>
+       <TELL
+"This is a full suit of steel body armour. It creaks as you walk past."
+;", from helmet down to sabbaton." CR>)
+       (<VERB? ;EXAMINE LOOK-INSIDE OPEN SEARCH SEARCH-FOR>
+       <COND (<AND <IN? ,CLUE-3 ,ARMOR>
+                   <FSET? ,CLUE-3 ,SECRETBIT>>
+              <FSET ,ARMOR ,OPENBIT>
+              <DISCOVER ,CLUE-3>)>)>>
+][
+<OBJECT SECRET-SITTING-DOOR
+       (IN ROOMS ;LOCAL-GLOBALS)
+       (DESC "secret door")
+       (ADJECTIVE SECRET ;TRAP PASSAGE SEAT)   ;"TRAP is verb?"
+       (SYNONYM DOOR)
+       (FLAGS SECRETBIT DOORBIT LOCKED)
+       ;(GENERIC GENERIC-SITTING-DOOR)
+       (ACTION SECRET-SITTING-DOOR-F)>
+
+<ROUTINE SECRET-SITTING-DOOR-F ()
+ <COND (<VERB? LOOK-INSIDE OPEN>
+       <COND (T ;<NOT <FSET? ,SECRET-SITTING-DOOR ,OPENBIT>>
+              <TELL "It seems to be stuck closed." CR>)>)>>
+
+<ROOM SITTING-ROOM
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT OPENBIT DOORBIT WEARBIT)
+       (DESC "sitting room")
+       (ADJECTIVE SITTING ;ROOM SLIDING)
+       (SYNONYM ROOM DOOR ;DOORS)
+       ;(LDESC "[N to corridor]")
+       (LINE 1)
+       (STATION CORR-1)
+       (CHARACTER 2)
+       (GLOBAL SITTING-ROOM ;SITTING-DOOR SECRET-SITTING-DOOR CHAIR FIREPLACE
+               WINDOW)
+       ;(WEST  TO SITTING-PASSAGE IF SECRET-SITTING-DOOR IS OPEN)
+       (DOWN   TO SITTING-PASSAGE IF SECRET-SITTING-DOOR IS OPEN)
+       (IN     TO SITTING-PASSAGE IF SECRET-SITTING-DOOR IS OPEN)
+       ;(EAST  TO GREAT-HALL IF SITTING-ROOM ;SITTING-DOOR IS OPEN)
+       (OUT    TO CORR-1 IF SITTING-ROOM ;SITTING-DOOR IS OPEN)
+       (NORTH  TO CORR-1 IF SITTING-ROOM ;SITTING-DOOR IS OPEN)
+       (ACTION SITTING-ROOM-F)>
+
+<ROUTINE SITTING-ROOM-F ("OPTIONAL" (RARG 0))
+ <COND (<EQUAL? .RARG ,M-BEG ;,M-EXIT>
+       <SECRET-CHECK .RARG>)
+       ;(<EQUAL? .RARG ,P?WEST ,P?IN ,P?DOWN>
+       <ENTER-PASSAGE>
+       <RTRUE>)
+       (<EQUAL? .RARG ,M-LOOK>
+       <TELL-LIKE-BROCHURE ;,SECRET-SITTING-DOOR>
+       <TELL
+"It's a comfy place to read a book, play the piano, or just relax." CR>
+       <DESCRIBE-CONTENTS ,PIANO>
+       <DESCRIBE-CONTENTS ,WRITING-DESK>
+       <RTRUE>)>>
+
+<OBJECT WYVERN
+       (IN SITTING-ROOM)
+       (DESC "window seat" ;"wyvern")
+       (ADJECTIVE WINDOW OTHER)
+       (SYNONYM SEAT WYVERN GARGOYLE DRAGON)
+       (FLAGS NDESCBIT VEHBIT SURFACEBIT SEENBIT)
+       (ACTION WYVERN-F)>
+
+<ROUTINE WYVERN-F () ;("OPT" (ARG 0))
+ <COND ;(<T? .ARG> <RFALSE>)
+       ;(<VERB? EXAMINE>
+       <TELL
+"Like a tiny gargoyle, a carved wyvern projects over each end of
+the " 'WYVERN "." CR>)
+       (<VERB? LOOK-INSIDE OPEN>
+       <SECRET-SITTING-DOOR-F>)
+       (<VERB? BOARD CLIMB-ON SIT SIT-AT>
+       ;<SETG PLAYER-SEATED ,WYVERN>
+       <MOVE ,PLAYER ,WYVERN>
+       <TELL "Okay, but it's not that comfortable." CR>)
+       (<VERB? MOVE MOVE-DIR MUNG PUSH RUB SLAP TURN>
+       <OPEN-SECRET "tug at" ,WYVERN ,SECRET-SITTING-DOOR>
+       <FCLEAR ,SECRET-SITTING-DOOR ,OPENBIT>
+       <TELL "Before you know it, ">
+       <COND (<IN? ,PLAYER ,WYVERN>
+              ;<EQUAL? ,PLAYER-SEATED ,WYVERN>
+              ;<SETG PLAYER-SEATED <>>
+              <TELL "you're dumped into it.|">
+              <GOTO ,SITTING-PASSAGE>)
+             (T
+              <TELL "it creaks upward to close again." CR>)>
+       <RTRUE>)>>
+
+<OBJECT WRITING-DESK
+       (IN SITTING-ROOM)
+       (DESC "writing desk")
+       (ADJECTIVE WRITING)
+       (SYNONYM DESK)
+       (FLAGS SURFACEBIT OPENBIT NDESCBIT SEENBIT)
+       (CAPACITY 999)
+       (ACTION WRITING-DESK-F)>
+
+<ROUTINE WRITING-DESK-F ()
+ <COND (<REMOTE-VERB?>
+       <RFALSE>)
+       (<IN? ,LETTER-MAID ,WRITING-DESK>
+       <FCLEAR ,LETTER-MAID ,NDESCBIT>
+       <RFALSE>)>>
+
+<OBJECT PIANO
+       (IN SITTING-ROOM)
+       (DESC "piano")
+       ;(ADJECTIVE DINING)
+       (SYNONYM PIANO)
+       (FLAGS NDESCBIT SURFACEBIT OPENBIT SEENBIT SEARCHBIT VEHBIT)
+       (CAPACITY 999)
+       (ACTION PIANO-F)>
+
+<GLOBAL PIANO-PIECES
+       <PTABLE "solo" "duet" "trio" "quar" "quin" "sex" "sep" "oc">>
+
+<ROUTINE PIANO-F ("AUX" O (N 0))
+ <COND (<VERB? LISTEN>
+       <SET O <FIRST? <LOC ,PIANO>>>
+       <REPEAT ()
+        <COND (<NOT .O>
+               <RFALSE>)
+              (<AND <FSET? .O ,PERSONBIT>
+                    <==? <GETP .O ,P?LDESC> 22 ;"playing the piano">>
+               <TELL "The music sounds lovely." CR>
+               <RTRUE>)
+              (T <SET O <NEXT? .O>>)>>)
+       (<VERB? PLAY>
+       <PUTP ,WINNER ,P?LDESC 22 ;"playing the piano">
+       <COND (<AND <T? ,PRSI>
+                   <FSET? ,PRSI ,PERSONBIT>>
+              <PUTP ,PRSI ,P?LDESC 22 ;"playing the piano">)>
+       <TELL CHE ,WINNER sit " down">
+       <SET O <FIRST? ,SITTING-ROOM>>
+       <REPEAT ()
+               <COND (<NOT .O>
+                      <COND (<ZERO? .N>
+                             <TELL " and">)>
+                      <RETURN>)
+                     (<AND <EQUAL? <GETP .O ,P?LDESC> 22 ;"playing the piano">
+                           ;<FSET? .O ,PERSONBIT>
+                           <NOT <==? .O ,WINNER>>>
+                      <COND (<ZERO? .N> <TELL " with">)>
+                      <INC N>
+                      <TELL !\  D .O " and">)>
+               <SET O <NEXT? .O>>>
+       <COND (<ZERO? .N>
+              <TELL V ,WINNER play>)
+             (T
+              <COND (<==? <GETP ,PLAYER ,P?LDESC> 22 ;"playing the piano">
+                     <TELL " you ">
+                     <COND (<1? .N> <TELL "both">)
+                           (T <TELL "all">)>)
+                    (T <TELL " they">)>
+              <TELL " play">)>
+       <TELL " a lovely " <GET ,PIANO-PIECES .N>>
+       <COND (<G? .N 2> <TELL "tet">)>
+       <TELL "." CR>)
+       (<REMOTE-VERB?>
+       <RFALSE>)
+       (<IN? ,MUSIC ,PIANO>
+       <FCLEAR ,MUSIC ,NDESCBIT>
+       <RFALSE>)>>
+
+<OBJECT MUSIC
+       (IN PIANO)
+       (DESC "piece of music")
+       (SYNONYM PIECE ;SHEET MUSIC SONG)
+       (FLAGS TAKEBIT READBIT NDESCBIT)
+       (SIZE 2)
+       (ACTION MUSIC-F)>
+
+<ROUTINE MUSIC-F ()
+ <COND (<VERB? LISTEN PLAY>
+       <COND (<IN? ,PIANO ,HERE>
+              <PIANO-F>)
+             (T <NOT-HERE ,PIANO>)>
+       <RTRUE>)
+       (<REMOTE-VERB?>
+       <RFALSE>)>
+ <FCLEAR ,MUSIC ,NDESCBIT>
+ <COND (<VERB? EXAMINE LOOK-INSIDE OPEN READ>
+       <COND (<NOT-HOLDING? ,PRSO>
+              <RTRUE>)>
+       <TELL "It's ">
+       <COND ;(<EQUAL? ,VARIATION ,LORD-C>
+              <TELL
+"called \"Fave Heavy Metal Songs of H.R.H. Prince Charles.\"" CR>)
+             (<EQUAL? ,VARIATION ,PAINTER-C ;,FRIEND-C>
+              <TELL
+"Beethoven's \"Suite No. 9.\" Someone has drawn a star in red ink
+over the first four letters of the word \"SUITe.\"" CR>)
+             (<EQUAL? ,VARIATION ,DOCTOR-C>
+              <TELL
+"\"Funeral March of a Marionette.\"" CR>)
+             (T ;<EQUAL? ,VARIATION ,FRIEND-C>
+              <TELL
+"theme music from the American radio show, \"A Prairie Home
+Companion.\"" CR>)>)
+       (T <RFALSE>)>>
+]
+<ROOM CORR-1
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT WEARBIT)
+       (DESC "ground-floor corridor")
+       (ADJECTIVE GROUND)
+       (SYNONYM CORRIDOR ROOM)
+       (LINE 1)
+       (STATION CORR-1)
+       (CHARACTER 2)
+       (CORRIDOR 1)
+       (GLOBAL SITTING-ROOM DINING-ROOM)
+       (EAST   TO GREAT-HALL)
+       (OUT    TO GREAT-HALL)
+       (WEST   TO JUNCTION)
+       (NORTH  TO DINING-ROOM IF DINING-ROOM IS OPEN)
+       (SOUTH  TO SITTING-ROOM IF SITTING-ROOM IS OPEN)
+       (ACTION CORR-1-F)>
+
+<ROUTINE CORR-1-F ("OPTIONAL" (ARG 0))
+ <COND (<==? .ARG ,M-LOOK>
+       <TELL
+"The " 'CORR-1 " goes between the two great halls to east and west.
+Behind sliding doors, the " 'DINING-ROOM " is north and the " 'SITTING-ROOM "
+is south." CR>)>>
+
+[
+<ROOM DINING-ROOM
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT DOORBIT WEARBIT)
+       (DESC "dining room")
+       (ADJECTIVE DINING SLIDING)
+       (SYNONYM ROOM DOOR ;DOORS)
+       (GLOBAL ;CHAIR DINING-ROOM FIREPLACE WINDOW OIL-PAINTING)
+       (THINGS <PSEUDO ( PORCEL VASE   BROCHURE-PSEUDO)
+                       ( PORCEL VASES  BROCHURE-PSEUDO)
+                       ( <> SHELF      BROCHURE-PSEUDO)
+                       ( <> SHELVES    BROCHURE-PSEUDO)>)
+       (LINE 1)
+       (STATION DINING-ROOM)
+       (CHARACTER 2)
+       (IN     TO BACKSTAIRS)
+       (WEST   TO BACKSTAIRS)
+       (OUT    TO CORR-1 IF DINING-ROOM IS OPEN)
+       (SOUTH  TO CORR-1 IF DINING-ROOM IS OPEN)
+       (ACTION DINING-ROOM-F)>
+
+<GLOBAL DINING-DESC
+"This room is impeccably furnished, but it's too formal for relaxing.|">
+
+<ROUTINE DINING-ROOM-F ("OPTIONAL" (RARG 0) "AUX" N)
+ <COND (<EQUAL? .RARG ,M-LOOK>
+       <TELL ,DINING-DESC>
+       <RTRUE>)
+       (<==? .RARG ,M-ENTER>
+       <COND (<QUEUED? ,I-DINNER-SIT>
+              ;<COND (<NOT <FSET? ,DINING-ROOM ,TOUCHBIT>>
+                     <FSET ,DINING-ROOM ,TOUCHBIT>
+                     <TELL ,DINING-DESC>)>
+              <COND (<IN? ,LORD ,DINING-ROOM>
+                     <QUEUE I-DINNER-SIT 1>
+                     <RFALSE>)
+                    (T
+                     <SET N <FIND-FLAG-HERE ,PERSONBIT ,PLAYER ,BUTLER>>
+                     <COND (<ZERO? .N> <RFALSE>)>
+                     <TELL CHE .N" says, \"Let's wait for his lordship.\""CR>
+                     <RTRUE>)>)
+             (<AND ;<FSET? ,DINNER ,TAKEBIT>
+                   <T? ,MISSED-DINNER>
+                   ;<QUEUED? ,I-LIONEL-SPEAKS>
+                   <IN? ,FRIEND ,HERE>>
+              <SETG MISSED-DINNER <>>
+              <COND (<NOT <FSET? ,DINING-ROOM ,TOUCHBIT>>
+                     <FSET ,DINING-ROOM ,TOUCHBIT>
+                     <TELL ,DINING-DESC>)>
+              <THIS-IS-IT ,FRIEND>
+              <SETG QCONTEXT ,FRIEND>
+              ;<MAKE-ALL-PEOPLE 10 ;"eating with relish" ,DINING-ROOM>
+                       ;"in I-DINNER-SIT"
+              <TELL
+'FRIEND " says, \"We didn't know when you would come to dinner, so we
+started without you.">
+              <COND (<==? ,LIONEL-SPEAKS-COUNTER ,INIT-LIONEL-SPEAKS-COUNTER>
+                     <TELL "\"" CR>)
+                    (T
+                     <QUEUE I-DINNER-TALK 1>
+                     <TELL " And ">
+                     <COND (<ZERO? ,LIONEL-SPEAKS-COUNTER>
+                            <TELL "then Lionel spoke">)
+                           (T
+                            <TELL "now Lionel is speaking">)>
+                     <TELL " on tape!\"" CR>)>)>)
+       (<==? .RARG ,M-EXIT>
+       <COND (<AND <QUEUED? ,I-LIONEL-SPEAKS>
+                   ;<NOT <==? ,LIONEL-SPEAKS-COUNTER
+                             ,INIT-LIONEL-SPEAKS-COUNTER>>
+                   ;<T? ,LIONEL-SPEAKS-COUNTER>>
+              <TELL 'LORD " politely but firmly vetoes any such move. \"">
+              <COND (<==? ,LIONEL-SPEAKS-COUNTER ,INIT-LIONEL-SPEAKS-COUNTER>
+                     <TELL
+"It's annoying enough to have the servants abscond at dinner time,\"
+he points out drily. " ,JACK-THINKS-GLADYS
+" Cigars and port will be time enough for that sort of aggro!\"" CR>)
+                    (T <TELL "Let's hear what old Lionel has to say.\"" CR>)>
+              <RTRUE>)>)>>
+
+<ROUTINE I-DINNER-TALK ("OPTIONAL" (GARG <>))
+       %<DEBUG-CODE <COND (<OR ,IDEBUG <==? .GARG ,G-DEBUG>>
+                           <TELL "[I-DINNER-TALK:">
+                           <COND (<==? .GARG ,G-DEBUG> <RFALSE>)>)>>
+       <FSET ,DINNER ,TAKEBIT>
+       <FCLEAR ,DINNER ,TRYTAKEBIT>
+       <MOVE ,DINNER-2 ,TABLE-DINING ;,GLOBAL-OBJECTS>
+       ;<MOVE ,DINNER-3 ,TABLE-DINING ;,GLOBAL-OBJECTS>
+       <DINNER-TALK <QUEUED? ,I-LIONEL-SPEAKS>>
+       <RFATAL>>
+
+<GLOBAL WRONG-OUTFIT:NUMBER 0>
+<GLOBAL WASHED:FLAG 0>
+
+<ROUTINE DINNER-TALK (N "AUX" X)
+       ;<SET X <GET ,P-ITBL ,P-VERBN>>
+       ;<COND (<T? .X>         ;"for VERB-PRINT"
+              <PUT .X 0 ,W?EAT>)>
+       <MOVE ,PLAYER ,CHAIR-DINING>
+       <TELL "Several people glance at your outfit with ">
+       <COND (<NOT <EQUAL? ,NOW-WEARING ,DINNER-OUTFIT>>
+              <SETG WRONG-OUTFIT 2>
+              <TELL "dis">)
+             (T <SETG WRONG-OUTFIT 1>)>
+       <TELL "approval.">
+       <COND (<ZERO? ,WASHED>
+              <TELL " They whisper about how dirty you still look.">)>
+       <CRLF>
+       <COND (<==? ,LIONEL-SPEAKS-COUNTER
+                   ,INIT-LIONEL-SPEAKS-COUNTER>
+              <TELL
+'LORD " announces his engagement to " 'FRIEND ", prompting various reactions
+from the guests.|
+The dinner is excellent, with a flow of subdued conversation...|">)>
+       <PUTP ,LORD ,P?LDESC 0>
+       <SETG KEEP-WAITING T>
+       <V-WAIT .N <> T>>
+
+<ROUTINE POPULATION (RM "OPTIONAL" (NOT1 <>) (NOT2 <>) "AUX" (CNT 0) OBJ)
+ <SET OBJ <FIRST? .RM>>
+ <COND (<ZERO? .OBJ> <RFALSE>)>
+ <REPEAT ()
+        <COND (<AND <FSET? .OBJ ,PERSONBIT>
+                    <NOT <FSET? .OBJ ,INVISIBLE>>
+                    <OR <ZERO? .NOT1> <NOT <EQUAL? .OBJ .NOT1>>>
+                    <OR <ZERO? .NOT2> <NOT <EQUAL? .OBJ .NOT2>>>>
+               <SET CNT <+ .CNT 1>>)
+              (<FSET? .OBJ ,CONTBIT>
+               <SET CNT <+ .CNT <POPULATION .OBJ .NOT1 .NOT2>>>)>
+        <SET OBJ <NEXT? .OBJ>>
+        <COND (<ZERO? .OBJ> <RETURN .CNT>)>>>
+
+<OBJECT BUST
+       (IN DINING-ROOM)
+       (DESC "bronze bust")
+       (DESCFCN BUST-D)
+       (ADJECTIVE BRONZE LI\'S LIONEL ;"handles BUST OF LIONEL!")
+       (SYNONYM BUST STATUE SCULPT LIONEL)
+       (FLAGS CONTBIT ;OPENBIT SEARCHBIT TRYTAKEBIT)
+       (CAPACITY 5)
+       (SIZE 13)
+       (ACTION BUST-F)>
+
+<ROUTINE BUST-D (ARG)
+       <THIS-IS-IT ,COUSIN>
+       <TELL
+"A brooding bust of " 'COUSIN " (sculpted by " 'PAINTER ") is
+displayed in a corner." CR>>
+
+<ROUTINE BUST-F ()
+ <COND (<OR <VERB? EXAMINE LOOK-UNDER MOVE MOVE-DIR OPEN PUSH ;TURN>
+           <AND <VERB? TAKE>
+                <EQUAL? ,P-PRSA-WORD ,W?RAISE ,W?LIFT>>>
+       <COND (<AND <VERB? EXAMINE>
+                   <==? ,LIONEL-SPEAKS-COUNTER ,INIT-LIONEL-SPEAKS-COUNTER>>
+              <TELL-LIKE-BROCHURE>
+              <RTRUE>)>
+       <TELL
+"The " 'BUST " is hollow. When you lift it from its shelf, you discover"
+THE ,RECORDER " underneath, with an elaborate clockwork timer.">
+       <FSET ,BUST ,OPENBIT>   ;"in I-LIONEL-SPEAKS too"
+       <FSET ,RECORDER ,SEENBIT>
+       <COND (<NOT <==? ,LIONEL-SPEAKS-COUNTER ,INIT-LIONEL-SPEAKS-COUNTER>>
+              <TELL
+" Evidently the timer was set to play the tape during the usual dinner
+hour on this date.">)>
+       <CRLF>)
+       (<VERB? LISTEN PLAY>
+       <COND (<AND <QUEUED? ,I-LIONEL-SPEAKS>
+                   ;<NOT <==? ,LIONEL-SPEAKS-COUNTER
+                             ,INIT-LIONEL-SPEAKS-COUNTER>>
+                   ;<T? ,LIONEL-SPEAKS-COUNTER>>
+              <SETG LIONEL-FORCED T>           ;"to suppress CR"
+              <QUEUE I-LIONEL-SPEAKS 1>        ;"will respond"
+              <RTRUE>)
+             (T <TELL ,TIMER-PREVENTS-IT> <RTRUE>)>)>>
+
+<GLOBAL TIMER-PREVENTS-IT "The clockwork timer prevents it.|">
+
+<OBJECT RECORDER
+       (IN BUST)
+       (DESC "small tape recorder")
+       (ADJECTIVE LI\'S HIS TAPE SMALL CLOCKWORK)
+       (SYNONYM RECORD TAPE ;LIONEL TIMER)
+       (GENERIC GENERIC-RECORDER)
+       ;(CAPACITY 2)
+       ;(SIZE 5)
+       (ACTION RECORDER-F)>
+
+<ROUTINE RECORDER-F ()
+ <COND (<VERB? EXAMINE LISTEN PLAY>
+       <BUST-F>)
+       (<VERB? LAMP-ON LAMP-OFF>
+       <TELL ,TIMER-PREVENTS-IT>
+       <RTRUE>)
+       (<VERB? TAKE>
+       <TELL "It's fastened tightly to the shelf." CR>)
+       (<SPEAKING-VERB? ,RECORDER>
+       <WONT-HELP-TO-TALK-TO ,RECORDER>)>>
+
+<OBJECT TABLE-DINING
+       (IN DINING-ROOM)
+       (DESC "dining table")
+       (ADJECTIVE DINING)
+       (SYNONYM TABLE)
+       (FLAGS SURFACEBIT OPENBIT SEENBIT SEARCHBIT ;NDESCBIT)
+       (CAPACITY 999)
+       (ACTION TABLE-DINING-F)>
+
+<ROUTINE TABLE-DINING-F ()
+ <COND (<VERB? EXAMINE LOOK-INSIDE LOOK-ON>
+       <COND (<FSET? ,DINNER ,TAKEBIT>
+              <TELL-AS-WELL-AS ,TABLE-DINING " the remains of dinner">
+              <RTRUE>)>)
+       (<VERB? SIT-AT>
+       <PERFORM ,V?SIT ,CHAIR-DINING>
+       <RTRUE>)
+       (<VERB? SIT>
+       <HAR-HAR>
+       <RTRUE>)>>
+
+<OBJECT CHAIR-DINING
+       (IN DINING-ROOM)
+       (DESC "chair")
+       (ADJECTIVE DINING MY)
+       (SYNONYM CHAIR SEAT CHAIRS BENCH)
+       (FLAGS SURFACEBIT OPENBIT SEARCHBIT VEHBIT NDESCBIT)
+       (CAPACITY 99)
+       ;(ACTION CHAIR-DINING-F)>
+
+<OBJECT SIDEBOARD
+       (IN DINING-ROOM)
+       (DESC "sideboard")
+       (ADJECTIVE DINING SIDE)
+       (SYNONYM SIDEBOARD BOARD)
+       (FLAGS SURFACEBIT OPENBIT SEENBIT SEARCHBIT)
+       (CAPACITY 99)>
+
+<OBJECT PUNCHBOWL
+       (IN SIDEBOARD)
+       (DESC "punchbowl")
+       (ADJECTIVE PUNCH)
+       (SYNONYM PUNCHBOWL BOWL)
+       (FLAGS CONTBIT OPENBIT SEARCHBIT TRYTAKEBIT)
+       (CAPACITY 9)
+       (SIZE 10)
+       (ACTION PUNCHBOWL-F)>
+
+<ROUTINE PUNCHBOWL-F ("AUX" OBJ)
+ <COND (<VERB? OPEN CLOSE>
+       <HAR-HAR>)
+       (<VERB? PUT-UNDER>
+       <COND (<IOBJ? PUNCHBOWL>
+              <FSET ,PRSO ,NDESCBIT>
+              <MOVE ,PRSO ,SIDEBOARD>
+              <TELL "Okay." CR>)>)
+       (<AND <VERB? LOOK-UNDER MOVE TAKE>
+            <DOBJ? PUNCHBOWL>>
+       <COND ;(<AND <IN? ,CLUE-1 ,SIDEBOARD>
+                   <FSET? ,CLUE-1 ,NDESCBIT>>
+              <FSET ,CLUE-1 ,TAKEBIT>
+              ;<FSET ,CLUE-1 ,SEENBIT>
+              <FCLEAR ,CLUE-1 ,NDESCBIT>
+              <THIS-IS-IT ,CLUE-1>
+              <TELL "You see" THE ,CLUE-1 ", lying face down." CR>)
+             (<SET OBJ <FIND-FLAG ,SIDEBOARD ,NDESCBIT>>
+              <FSET .OBJ ,TAKEBIT>
+              <FSET .OBJ ,TOUCHBIT>
+              <FCLEAR .OBJ ,NDESCBIT>
+              <MOVE .OBJ ,PLAYER>
+              <THIS-IS-IT .OBJ>
+              <TELL "You find" THE .OBJ " underneath, so you take it." CR>)
+             (T
+              ;<WONT-HELP>
+              <TELL "There's nothing under it." CR>)>)>>
+
+<OBJECT DINNER
+       (IN KITCHEN ;SIDEBOARD)
+       (DESC "your dinner")
+       (ADJECTIVE COVERED MY)
+       (SYNONYM DINNER FOOD ;ARRAY DISHES PLATE ;FISH)
+       (GENERIC GENERIC-DINNER)
+       (FLAGS NARTICLEBIT TRYTAKEBIT)
+       (SIZE 10)
+       (DESCFCN DINNER-D)
+       (ACTION DINNER-F)>
+
+<ROUTINE DINNER-D (ARG "AUX" (L <LOC ,DINNER>))
+ <COND (<EQUAL? .L ,KITCHEN ,SIDEBOARD>
+       <TELL "An appetizing aroma wafts from an array of covered dishes">
+       <COND (<==? .L ,KITCHEN>
+              <TELL " sitting about">)
+             (<==? .L ,SIDEBOARD>
+              <TELL " on the " 'SIDEBOARD>)>
+       <TELL "." CR>)>>
+
+<ROUTINE DINNER-F ("AUX" I (L <LOC ,DINNER>))
+ <COND (<VERB? DRESS>
+       <COND (<EQUAL? ,HERE <META-LOC ,DINNER-OUTFIT>>
+              <PERFORM ,V?WEAR ,DINNER-OUTFIT>
+              <RTRUE>)
+             (T
+              <NOT-HERE ,DINNER-OUTFIT>
+              <RTRUE>)>)
+       (<VERB? EAT>
+       <COND ;(<FSET? ,DINNER ,TRYTAKEBIT>     ;<QUEUED? ,I-DINNER-SIT>
+              <TELL
+"You look around and notice that no one else is eating yet." CR>)
+             (T <TELL "You take a bite and find it delicious." CR>)>)
+       (<VERB? EXAMINE ;SMELL>
+       <TELL
+"A lovely assortment of fish, fowl, greens, and sweets fills the ">
+       <COND (<EQUAL? .L ,KITCHEN ,SIDEBOARD>
+              <TELL "dishes." CR>)
+             (T <TELL "plate." CR>)>)
+       (<VERB? TAKE LAMP-ON ;"start">
+       <COND (<FSET? ,DINNER ,TRYTAKEBIT>
+              <COND (<==? .L ,KITCHEN>
+                     <TELL "It's not ready yet." CR>)
+                    (<==? .L ,SIDEBOARD>
+                     <SET L <I-DINNER-SIT>>
+                     <COND (<ZERO? .L>
+                            <TELL
+"You look around and notice that no one else is eating yet."
+;"Not all the guests are ready yet." CR>
+                            <RTRUE>)
+                           (T <RETURN .L>)>)>)
+             ;(<==? <ITAKE> T>
+              <COND (<EQUAL? ,HERE ,DINING-ROOM>
+                     <MOVE ,DINNER ,TABLE-DINING>
+                     <FSET ,DINNER ,NDESCBIT>
+                     <TELL
+CHE ,WINNER put " it on the " 'TABLE-DINING "." CR>)>)>)
+       (<VERB? WAIT-FOR>
+       <COND (<SET I <QUEUED? ,I-DINNER>>
+              <V-WAIT <- ,DINNER-TIME ,PRESENT-TIME> ;.I <> T>
+              <RTRUE>)>)
+       (<VERB? WALK-TO>
+       <COND (<EQUAL? ,HERE ,DINING-ROOM>
+              <PERFORM ,PRSA <META-LOC ,DINNER>>)
+             (T <PERFORM ,PRSA ,DINING-ROOM>)>
+       <RTRUE>)>>
+
+<OBJECT DINNER-2
+       ;(IN GLOBAL-OBJECTS)
+       (DESC "other dinner")
+       (ADJECTIVE OTHER JACK\'S HYDE\'S IAN\'S DOC\'S TAM\'S VIV\'S IRIS\'S)
+       (SYNONYM DINNER)
+       (FLAGS VOWELBIT NDESCBIT)
+       (GENERIC GENERIC-DINNER)>
+
+;<OBJECT DINNER-3
+       ;(IN GLOBAL-OBJECTS)
+       (DESC "her dinner")
+       (ADJECTIVE OTHER HER TAM\'S VIV\'S IRIS\'S)
+       (SYNONYM DINNER)
+       (FLAGS NARTICLEBIT NDESCBIT)
+       (GENERIC GENERIC-DINNER)>
+]
+<OBJECT SECRET-DINING-DOOR
+       (IN ROOMS ;LOCAL-GLOBALS)
+       (DESC "secret door")
+       (ADJECTIVE SECRET PASSAGE)
+       (SYNONYM DOOR)
+       (FLAGS SECRETBIT DOORBIT)>
+
+<ROOM BACKSTAIRS
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT WEARBIT NARTICLEBIT)
+       (DESC "backstairs")
+       ;(ADJECTIVE BACKST BACK)
+       (SYNONYM BACKST) ;( STAIR STAIRS AREA)
+       ;(GENERIC GENERIC-STAIRS)
+       (GLOBAL SECRET-DINING-DOOR STAIRS)
+       (LINE 1)
+       (STATION BACKSTAIRS)
+       (CHARACTER 2)
+       (WEST   TO DINING-PASSAGE IF SECRET-DINING-DOOR IS OPEN)
+       (IN     TO DINING-PASSAGE IF SECRET-DINING-DOOR IS OPEN)
+       (OUT    TO DINING-ROOM)
+       (EAST   TO DINING-ROOM)
+       (DOWN   TO KITCHEN)
+       (ACTION BACKSTAIRS-F)>
+
+<ROUTINE BACKSTAIRS-F ("OPTIONAL" (RARG 0))
+ <COND (<EQUAL? .RARG ,M-BEG ;,M-EXIT>
+       <SECRET-CHECK .RARG>)
+       ;(<EQUAL? .RARG ,P?WEST ,P?IN>
+       <ENTER-PASSAGE>
+       <RTRUE>)
+       (<EQUAL? .RARG ,M-LOOK>
+       <TELL
+"You can go east to the " 'DINING-ROOM " or down narrow stairs
+to the " 'KITCHEN ".">
+       <OPEN-DOOR? ,SECRET-DINING-DOOR>
+       <CRLF>)>>
+[
+<ROOM KITCHEN
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT WEARBIT)
+       (DESC "kitchen")
+       (SYNONYM KITCHEN)
+       (GLOBAL CHAIR BELL ;SERVANTS-QUARTERS STAIRS)
+       (THINGS <PSEUDO ( KITCHEN SINK  RANDOM-PSEUDO)>)
+       (LINE 1)
+       (STATION KITCHEN)
+       (CHARACTER 1)
+       (WEST   TO BASEMENT)
+       (IN     TO BASEMENT)
+       (EAST   "You peek in and see nothing interesting in there.")
+       ;(EAST  TO SERVANTS-QUARTERS IF SERVANTS-QUARTERS IS OPEN)
+       (UP     TO BACKSTAIRS)
+       (OUT    TO BACKSTAIRS)
+       (ACTION KITCHEN-F)>
+
+<ROUTINE KITCHEN-F ("OPTIONAL" (RARG 0))
+ <COND (<==? .RARG ,M-LOOK>
+       <TELL
+"The " 'KITCHEN " is large yet cramped. From here, you can go west to
+the tower " 'BASEMENT ", east to the servants' quarters, or up the
+stairs." CR>)>>
+
+<OBJECT LAMP
+       (IN KITCHEN)
+       (ADJECTIVE BRASS ;BATTER)
+       (SYNONYM LAMP LANTERN ;LIGHT)
+       (DESC "brass lantern")
+       (FLAGS TAKEBIT LIGHTBIT ;SEENBIT)
+       (ACTION LANTERN)
+       ;(FDESC "A dusty brass lantern is sitting in a corner.")
+       ;(LDESC "There is a brass lantern (battery-powered) here.")
+       (SIZE 15)>
+
+<ROUTINE LANTERN ()
+        <COND (<VERB? AIM>
+               <TELL
+CTHE ,LAMP " shines in all " 'INTDIR "s, so you can't point it." CR>)
+              ;(<VERB? THROW-AT ;THROW-OFF THROW-THROUGH>
+               <TELL
+"The lamp has smashed into the floor, and the light has gone out.|">
+               ;<DISABLE <INT I-LANTERN>>
+               <REMOVE-CAREFULLY ,LAMP>
+               <MOVE ,BROKEN-LAMP ,HERE>
+               <RTRUE>)
+              (<VERB? USE>
+               <PERFORM ,V?LAMP-ON ,PRSO>
+               <RTRUE>)
+              (<VERB? EXAMINE>
+               <TELL "The lamp ">
+               <COND (<FSET? ,LAMP ,ONBIT>
+                      <TELL "is on.">)
+                     (T
+                      <TELL "is turned off.">)>
+               <CRLF>)>>
+]
+;<ROOM SERVANTS-QUARTERS
+       (IN ROOMS)
+       (FLAGS ;ONBIT SEENBIT WEARBIT DOORBIT LOCKED)
+       (DESC ;"servants'" "butler's quarters")
+       (ADJECTIVE B\'S HIS ;"BUTLER BOLITHO ;SERVANT")
+       (SYNONYM QUARTERS ROOM BEDROOM DOOR ;KEYHOLE)>
+
+;<     (LDESC
+"The only exit is west to the kitchen." ;"[W/OUT to kitchen]")
+       (GLOBAL CHAIR)
+       (LINE 1)
+       (STATION KITCHEN)
+       (CHARACTER 1)
+       (WEST   TO KITCHEN)
+       (OUT    TO KITCHEN)>
+\f
+[
+<ROOM GALLERY
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT WEARBIT)
+       (DESC "gallery")
+       (ADJECTIVE GALLERY)
+       (SYNONYM GALLERY ROOM)
+       (LINE 2)
+       (STATION GALLERY)
+       (CHARACTER 3)
+       (GLOBAL YOUR-ROOM VIVIEN-ROOM FIREPLACE WINDOW
+               PEEPHOLE STAIRS)
+       (OUT    TO GREAT-HALL ;STAIRS-NEW)
+       (DOWN   TO GREAT-HALL ;STAIRS-NEW)
+       ;(SOUTH TO GREAT-HALL)
+       (EAST   TO YOUR-ROOM IF YOUR-ROOM ;YOUR-DOOR IS OPEN)
+       (IN     TO YOUR-ROOM IF YOUR-ROOM ;YOUR-DOOR IS OPEN)
+       (NE     TO EAST-HALL)
+       (WEST   TO VIVIEN-ROOM IF VIVIEN-ROOM ;VIVIEN-DOOR IS OPEN)
+       (NW     TO WEST-HALL)
+       (ACTION GALLERY-F)>
+
+<ROUTINE GALLERY-F ("OPTIONAL" (RARG 0))
+ <COND (<==? .RARG ,M-BEG>
+       <COND (<AND <VERB? EXAMINE LOOK-BEHIND LOOK-UNDER SEARCH SEARCH-FOR>
+                   <DOBJ? PAINTING-GALLERY WALL>>
+              <FCLEAR ,PEEPHOLE ,SECRETBIT>
+              <TELL
+"You discover" HIM ,PEEPHOLE " in the eye of one ancestor." CR>)>)
+       (<==? .RARG ,M-LOOK>
+       <TELL
+"The " 'GALLERY " spans the top of the double stairways. You can go east to
+" 'YOUR-ROOM " or west to " 'VIVIEN-ROOM ". Hallways lead to the northeast and
+northwest.
+On the wall is a " D ,PAINTING-GALLERY " of " 'LORD "'s ancestors." CR>)>>
+
+<OBJECT PAINTING-GALLERY
+       (IN GALLERY)
+       (DESC "series of oil paintings")
+       (ADJECTIVE OIL ART DOUBLE)
+       (SYNONYM PORTRAIT PICTURE PAINTING SERIES)
+       ;(GENERIC GENERIC-PAINTING)
+       (FLAGS NDESCBIT SEENBIT)
+       (ACTION PICTURE-F)>
+
+<ROUTINE PICTURE-F ("OPTIONAL" (RARG 0))
+ <COND (<VERB? EXAMINE>
+       <TELL-LIKE-BROCHURE>)>>
+][
+<OBJECT BATHROOM
+       (IN LOCAL-GLOBALS)
+       (DESC "bathroom")
+       (ADJECTIVE ;BATH TAM\'S JACK\'S VIV\'S HYDE\'S IAN\'S DOC\'S IRIS\'S)
+       (SYNONYM ;ROOM BATHROOM)
+       ;(GENERIC GENERIC-BEDROOM)
+       (FLAGS SEENBIT)
+       (ACTION BATHROOM-F)>
+
+<ROUTINE BATHROOM-F ()
+ <COND (<VERB? BOARD EXAMINE LOOK-INSIDE THROUGH WALK-TO>
+       <COND (<EQUAL? ,HERE ,YOUR-ROOM>
+              <PERFORM ,PRSA ,YOUR-BATHROOM>
+              <RTRUE>)
+             (T <RANDOM-PSEUDO>)>)>>
+
+<OBJECT FIREPLACE
+       (IN LOCAL-GLOBALS)
+       (DESC "fireplace")
+       (ADJECTIVE FIRE ;"TAM\'S JACK\'S VIV\'S HYDE\'S IAN\'S DOC\'S IRIS\'S")
+       (SYNONYM PLACE FIREPLACE CHIMNEY FENDER)
+       (FLAGS SEENBIT)
+       (ACTION FIREPLACE-F)>
+
+<ROUTINE FIREPLACE-F ()
+ <COND (<VERB? EXAMINE LOOK-INSIDE LOOK-UP>
+       <COND (<EQUAL? ,HERE ,IAN-ROOM>
+              <TELL-IAN-FIREPLACE>)
+             (T <TELL "It's empty, except for soot on the walls.">)>
+       <CRLF>)
+       (<VERB? LAMP-ON>        ;"LIGHT FIRE"
+       <WONT-HELP>)
+       (<VERB? PUT-IN>
+       <TELL
+"When you think how sooty" THE ,PRSO " would get, you change your mind." CR>)>>
+
+<ROUTINE BED-PSEUDO ()
+ <COND (<VERB? BOARD CLIMB-ON LIE SIT THROUGH>
+       <WONT-HELP>)>>
+
+<OBJECT NIGHTSTAND-LG
+       (IN LOCAL-GLOBALS)
+       (DESC "night table")
+       (ADJECTIVE NIGHT ;MARBLE
+               TAM\'S JACK\'S VIV\'S HYDE\'S IAN\'S DOC\'S IRIS\'S)
+       (SYNONYM ;NIGHTT TABLE ;STAND CONSOLE TALLBOY COMMODE)
+       (FLAGS SEENBIT)
+       (ACTION NIGHTSTAND-LG-F)>
+
+<ROUTINE NIGHTSTAND-LG-F ()
+ <COND (<AND <EQUAL? ,HERE ,JACK-ROOM>
+            <VERB? EXAMINE LOOK-INSIDE OPEN SEARCH SEARCH-FOR>>
+       <COND (<IN? ,NECKLACE-OF-D ,JACK-ROOM>
+              <DISCOVER ,NECKLACE-OF-D>)
+             (T <TELL ,NOTHING-NEW> <RTRUE>)>)
+       (<AND <EQUAL? ,HERE ,JACK-ROOM>
+            <VERB? PUT-IN>
+            <DOBJ? NECKLACE-OF-D>>
+       <MOVE ,NECKLACE-OF-D ,JACK-ROOM>
+       <FSET ,NECKLACE-OF-D ,NDESCBIT>
+       <OKAY>)
+       (T <RANDOM-PSEUDO>)>>
+
+<OBJECT DRESSING-TABLE-LG
+       (IN LOCAL-GLOBALS)
+       (DESC "dressing table")
+       (ADJECTIVE DRESSING ROLL-TOP WRITING)
+       (SYNONYM TABLE BENCH CHEST DRESSE ;DRAWER)
+       (FLAGS SEENBIT CONTBIT SURFACEBIT OPENBIT)
+       (ACTION DRESSING-TABLE-LG-F)>
+
+<ROUTINE DRESSING-TABLE-LG-F ()
+ <COND (<VERB? OPEN CLOSE SEARCH SEARCH-FOR>
+       <NOTHING-SPECIAL>)
+       (<VERB? EXAMINE LOOK-INSIDE LOOK-ON>
+       <COND (<EQUAL? ,HERE ,WENDISH-ROOM>
+              <WENDISH-STUFF-D>
+              <RTRUE>)
+             (<EQUAL? ,HERE ,TAMARA-ROOM>
+              <DRESSING-TABLE-TAM>
+              <CRLF>)
+             (T <NOTHING-SPECIAL>)>)>>
+
+<OBJECT WARDROBE-LG
+       (IN LOCAL-GLOBALS)
+       (DESC "wardrobe")
+       (ADJECTIVE CLOTHES)
+       (SYNONYM WARDROBE PRESS)
+       (FLAGS SEENBIT)
+       (ACTION RANDOM-PSEUDO)>
+
+<OBJECT MIRROR-GLOBAL
+       (IN GLOBAL-OBJECTS)
+       (DESC "mirror")
+       (ADJECTIVE LOOKING CHEVAL)
+       (SYNONYM MIRROR GLASS)
+       (FLAGS SEENBIT CONTBIT)
+       (ACTION MIRROR-GLOBAL-F)>
+
+<ROUTINE MIRROR-GLOBAL-F ()
+ <COND (<REMOTE-VERB?>
+       <RFALSE>)
+       (<NOT <FSET? ,HERE ,WORNBIT>>
+       <NOT-HERE ,MIRROR-GLOBAL>)
+       (<VERB? EXAMINE FIX LOOK-INSIDE MOVE>
+       <DRESSING-MIRROR-F>)
+       (T <RANDOM-PSEUDO>)>>
+
+<ROUTINE OPEN-DOOR? (DR "OPTIONAL" (NOSP <>))
+ <COND (<FSET? .DR ,OPENBIT>
+       <COND (<ZERO? .NOSP> <TELL !\ >)>
+       <THIS-IS-IT .DR>
+       <COND (<SET NOSP <DOOR-ROOM ,HERE .DR>>
+              <FSET .NOSP ,SEENBIT>)>
+       <TELL "And there's a wide-open " D .DR "!">)>>
+
+;<OBJECT FURNITURE
+       (IN LOCAL-GLOBALS)
+       (DESC "furniture")
+       (ADJECTIVE TAM\'S JACK\'S VIV\'S HYDE\'S IAN\'S DOC\'S IRIS\'S)
+       (SYNONYM FURNITURE)
+       (FLAGS SEENBIT)
+       (ACTION RANDOM-PSEUDO)>
+][
+<OBJECT SECRET-YOUR-DOOR
+       (IN ROOMS ;LOCAL-GLOBALS)
+       (DESC "secret door")
+       (ADJECTIVE MY SECRET PASSAGE)
+       (SYNONYM DOOR)
+       (GENERIC GENERIC-BEDROOM)
+       (FLAGS SECRETBIT DOORBIT)>
+
+<ADJ-SYNONYM MY MINE YOUR>
+
+<ROOM YOUR-ROOM
+       (IN ROOMS)
+       (FLAGS ONBIT NARTICLEBIT OPENBIT DOORBIT WEARBIT WORNBIT)
+       (DESC "your bedroom")
+       (ADJECTIVE MY BED ROOM BEDROOM SPARE F.C F.C)
+       (SYNONYM ROOM BEDROOM DOOR ;KEYHOLE)
+       (GENERIC GENERIC-BEDROOM)
+       (LINE 2)
+       (STATION GALLERY)
+       (CHARACTER 3)
+       (GLOBAL YOUR-ROOM ;YOUR-DOOR SECRET-YOUR-DOOR YOUR-BATHROOM FIREPLACE
+               WINDOW YOUR-BATHROOM-DOOR)
+       (OUT    TO GALLERY IF YOUR-ROOM ;YOUR-DOOR IS OPEN)
+       (WEST   TO GALLERY IF YOUR-ROOM ;YOUR-DOOR IS OPEN)
+       (NORTH  TO YOUR-BATHROOM IF YOUR-BATHROOM-DOOR IS OPEN)
+       ;(IN    TO YOUR-BATHROOM IF YOUR-BATHROOM-DOOR IS OPEN)
+       (IN     TO YOUR-CLOSET IF SECRET-YOUR-DOOR IS OPEN)
+       (EAST   TO YOUR-CLOSET IF SECRET-YOUR-DOOR IS OPEN)
+       (ACTION YOUR-ROOM-F)>
+
+<ROUTINE YOUR-ROOM-F ("OPTIONAL" (RARG <>))
+ <COND (<EQUAL? .RARG ,M-BEG>
+       <COND (<AND <VERB? WALK-TO> <DOBJ? BED>>
+              <PERFORM ,V?LIE ,BED>
+              <RTRUE>)
+             (T
+              <SECRET-CHECK .RARG>)>)
+       (<OR <EQUAL? .RARG ,P?WEST ,P?OUT>
+           <EQUAL? .RARG ,P?EAST ,P?IN>>
+       <COND (<AND ;<==? .RARG ,M-EXIT>
+                   <ZERO? ,NOW-WEARING>>
+              <TELL
+"Before you even take a step, you" ,REMEMBER-NOT-DRESSED "." CR>
+              <RFATAL>)
+             (<EQUAL? .RARG ,P?EAST ,P?IN>
+              <ENTER-PASSAGE>
+              <RTRUE>)>)
+       (<EQUAL? .RARG ,M-ENTER>
+       <QUEUE I-TOUR 0>)
+       (<EQUAL? .RARG ,M-LOOK>
+       <TELL CTHE ,YOUR-ROOM " is decorated in shades of ">
+       <PRINT-COLOR>
+       <TELL
+". You see " 'YOUR-BATHROOM " to the north and a cozy " 'FIREPLACE " in
+one corner. The room is furnished with a bed, a " 'NIGHTSTAND " with a
+lamp on it, a " 'CHEST-OF-DRAWERS ", a " 'WARDROBE ", a " 'YOUR-CHAIR ",
+and a " 'DRESSING-TABLE " with mirror and bench. There's also a
+full-length " 'YOUR-MIRROR ".">
+       <OPEN-DOOR? ,SECRET-YOUR-DOOR>
+       <CRLF>
+       <DESCRIBE-CONTENTS ,BED>
+       <DESCRIBE-CONTENTS ,YOUR-CHAIR>
+       <COND (<AND <NOT <FSET? ,HERE ,TOUCHBIT>>
+                   <NOT <EQUAL? <LOC ,BUTLER> ,GALLERY ,YOUR-ROOM>>
+                       ;"timing bug"
+                   <NOT <G? 2 <QUEUED? ,I-DINNER>>>
+                   <NOT <IN-MOTION? ,FRIEND>>>
+              <PUTP ,FRIEND ,P?LINE 0>
+              <SETG QCONTEXT ,FRIEND>
+              <TELL CHE ,FRIEND>
+              <COND (<NOT <IN? ,FRIEND ,HERE>>
+                     <MOVE ,FRIEND ,HERE>
+                     <TELL " enters and">)>
+              <TELL " says, \"Let's chat a bit">
+              <COND (<ZERO? <FIND-FLAG-HERE ,PERSONBIT ,PLAYER ,FRIEND>>
+                     <TELL ", now that we're alone">)>
+              <TELL ".\"" CR>)>
+       <RTRUE>)
+       ;(<EQUAL? .RARG ,M-EXIT>
+       <COND (<T? ,AWAITING-REPLY>
+              <SETG CLOCK-WAIT T>
+              <PLEASE-ANSWER>
+              <RTRUE>)>)
+       (T ;<T? .RARG>
+       <RFALSE>)
+       ;(<VERB? LOCK UNLOCK>
+       <TELL "It appears the lock is broken." CR>)>>
+
+<GLOBAL REMEMBER-NOT-DRESSED " remember that you're not dressed">
+
+<ROUTINE ENTER-PASSAGE ()
+       <TELL "You step down into a narrow " 'PASSAGE "." CR>
+       <RTRUE>>
+
+<OBJECT BED
+       (IN YOUR-ROOM)
+       (DESC "your bed")
+       (ADJECTIVE MY)
+       (SYNONYM BED)
+       (FLAGS SURFACEBIT OPENBIT VEHBIT NDESCBIT NARTICLEBIT)
+       (CAPACITY 999)
+       (ACTION BED-F)>
+
+<ROUTINE BED-F () ;("OPT" (ARG 0))
+ <COND ;(<T? .ARG> <RFALSE>)
+       (<VERB? BOARD THROUGH>
+       <PERFORM ,V?LIE ,PRSO>
+       <RTRUE>)
+       (<VERB? CLIMB-ON>
+       <PERFORM ,V?SIT ,PRSO>
+       <RTRUE>)>>
+
+<OBJECT NIGHTSTAND
+       (IN YOUR-ROOM)
+       (DESC "night table" ;"nightstand")
+       (ADJECTIVE MY NIGHT)
+       (SYNONYM NIGHTT TABLE STAND)
+       (FLAGS SURFACEBIT OPENBIT NDESCBIT SEENBIT SEARCHBIT)
+       (CAPACITY 99)
+       (ACTION NIGHTSTAND-F)>
+
+<ROUTINE NIGHTSTAND-F ()
+ <COND (<VERB? EXAMINE LOOK-ON>
+       <TELL-AS-WELL-AS ,NIGHTSTAND <> ,NIGHTLAMP>
+       <RTRUE>)>>
+
+<ROUTINE TELL-AS-WELL-AS (CONT STR "OPTIONAL" (OBJ <>) (X <>))
+       <COND (<FSET? .CONT ,SURFACEBIT>
+              <TELL !\O>)
+             (T
+              <FSET .CONT ,OPENBIT>
+              <TELL !\I>)>
+       <TELL !\n THE .CONT " you see">
+       <COND (<FIND-FLAG-NOT .CONT ,NDESCBIT>
+              <SET X T>)
+             (T <TELL " only">)>
+       <COND (<T? .OBJ>
+              <TELL THE .OBJ>)
+             (T <TELL .STR>)>
+       <COND (<T? .X>
+              <TELL ", as well as">
+              <PRINT-CONTENTS .CONT>)>
+       <TELL "." CR>>
+
+<OBJECT NIGHTLAMP
+       (IN NIGHTSTAND)
+       (DESC "your lamp")
+       (ADJECTIVE MY)
+       (SYNONYM LAMP)
+       (FLAGS ONBIT LIGHTBIT NDESCBIT SEENBIT NARTICLEBIT)>
+
+<OBJECT DRESSING-TABLE
+       (IN YOUR-ROOM)
+       (DESC "dressing table")
+       (ADJECTIVE MY DRESSING)
+       (SYNONYM TABLE)
+       (FLAGS SURFACEBIT OPENBIT NDESCBIT SEENBIT SEARCHBIT)
+       (CAPACITY 99)>
+
+<OBJECT DRESSING-BENCH
+       (IN YOUR-ROOM)
+       (DESC "bench")
+       (ADJECTIVE MY DRESSING)
+       (SYNONYM BENCH)
+       (FLAGS SURFACEBIT OPENBIT VEHBIT NDESCBIT SEENBIT)
+       (CAPACITY 99)>
+
+<OBJECT DRESSING-MIRROR
+       (IN DRESSING-TABLE)
+       (DESC "side mirror")
+       (ADJECTIVE MY DRESSING SIDE TABLE)
+       (SYNONYM MIRROR)
+       ;(DESCFCN DRESSING-MIRROR-D)
+       (FLAGS SEENBIT)
+       (ACTION DRESSING-MIRROR-F)>
+
+;<ROUTINE DRESSING-MIRROR-D (X)
+       <TELL
+"There's a hinged " 'DRESSING-MIRROR " on the " 'DRESSING-TABLE "." CR>>
+
+<ROUTINE DRESSING-MIRROR-F ()
+ <COND (<VERB? FIX MOVE MOVE-DIR PUSH RUB TURN>
+       <TELL "Now you can see " 'PLAYER " perfectly." CR>)
+       (<VERB? EXAMINE LOOK-INSIDE>
+       <TELL "You look ">
+       <COND (<T? ,WASHED>
+              <TELL "smashing">)
+             (T <TELL "a trifle dirty">)>
+       <TELL " in your ">
+       <COND (<ZERO? ,NOW-WEARING> <TELL "birthday suit">)
+             (T <TELL D ,NOW-WEARING>)>
+       <TELL "." CR>)>>
+
+<OBJECT YOUR-MIRROR
+       (IN YOUR-ROOM)
+       (DESC "wall mirror")
+       (ADJECTIVE MY WALL FULL-LENGTH FULL)
+       (SYNONYM MIRROR)
+       ;(LDESC
+"There's a mirror with an elaborate frame mounted on the wall.")
+       (FLAGS NDESCBIT SEENBIT TRYTAKEBIT)
+       (ACTION YOUR-MIRROR-F)>
+
+<ROUTINE YOUR-MIRROR-F ()
+ <COND (<OR <VERB? EXAMINE LOOK-BEHIND RUB SEARCH>
+           <AND <VERB? SEARCH-FOR> <DOBJ? YOUR-MIRROR>>>
+       <COND (<NOT <IN? ,PLAYER ,HERE>>
+              ;<T? ,PLAYER-SEATED>
+              <TOO-BAD-SIT-HIDE>)>
+       <TELL
+"By running your fingers around the frame, you discover" THE ,YOUR-SWITCH>
+       <THIS-IS-IT ,YOUR-SWITCH>
+       <TELL "." CR>)
+       (<AND <VERB? OPEN CLOSE>
+            <FSET? ,SECRET-YOUR-DOOR ,TOUCHBIT>>
+       <PERFORM ,PRSA ,SECRET-YOUR-DOOR>
+       <RTRUE>)
+       (<VERB? FIX MOVE MOVE-DIR PUSH RUB TAKE TURN>
+       <TELL "It seems to be fastened to the wall." CR>
+       <RTRUE>)
+       (T <DRESSING-MIRROR-F>)>>
+
+<OBJECT YOUR-SWITCH
+       (IN YOUR-ROOM)
+       (DESC "hidden switch")
+       (ADJECTIVE MY SMALL HIDDEN)
+       (SYNONYM SWITCH)
+       (FLAGS NDESCBIT ;TRYTAKEBIT SECRETBIT)
+       (ACTION YOUR-SWITCH-F)>
+
+<ROUTINE YOUR-SWITCH-F ()
+ <COND (<VERB? EXAMINE>
+       <TELL "You can't tell by looking what it might do." CR>)
+       (<VERB? OPEN>
+       <FCLEAR ,YOUR-SWITCH ,SECRETBIT>
+       <OKAY ,SECRET-YOUR-DOOR "open">
+       <RTRUE>)
+       (<VERB? CLOSE>
+       <FCLEAR ,YOUR-SWITCH ,SECRETBIT>
+       <OKAY ,SECRET-YOUR-DOOR "closed">
+       <RTRUE>)
+       (<VERB? LAMP-OFF LAMP-ON MOVE MOVE-DIR PUSH RUB SLAP ;TAKE TURN>
+       <OPEN-SECRET <> ;"push" ,YOUR-SWITCH ,SECRET-YOUR-DOOR>
+       <RTRUE>)>>
+
+<OBJECT WARDROBE
+       (IN YOUR-ROOM)
+       (DESC "wardrobe")
+       (SYNONYM WARDROBE)
+       (FLAGS CONTBIT NDESCBIT SEENBIT)
+       (CAPACITY 999)>
+
+<OBJECT CHEST-OF-DRAWERS
+       (IN YOUR-ROOM)
+       (DESC "chest of drawers")
+       (SYNONYM CHEST DRAWER DRESSE)
+       (FLAGS CONTBIT NDESCBIT SEENBIT)
+       (CAPACITY 999)>
+
+<OBJECT YOUR-CHAIR
+       (IN YOUR-ROOM)
+       (DESC "wing chair")
+       (ADJECTIVE WING MY)
+       (SYNONYM CHAIR)
+       (FLAGS SURFACEBIT OPENBIT VEHBIT NDESCBIT SEENBIT)
+       (CAPACITY 99)>
+][
+<OBJECT YOUR-BATHROOM-DOOR
+       (IN LOCAL-GLOBALS)
+       (DESC "bathroom door")
+       (ADJECTIVE MY BATH ;ROOM BATHROOM)
+       (SYNONYM DOOR)
+       (FLAGS OPENBIT DOORBIT SEENBIT)>
+
+<ROOM YOUR-BATHROOM
+       (IN ROOMS)
+       (FLAGS ONBIT NARTICLEBIT OPENBIT DOORBIT WEARBIT WORNBIT)
+       (DESC "your bathroom")
+       (ADJECTIVE MY BATH)
+       (SYNONYM ROOM BATHROOM)
+       (GENERIC GENERIC-BEDROOM)
+       (LINE 2)
+       (STATION YOUR-ROOM)
+       (CHARACTER 3)
+       (OUT    TO YOUR-ROOM IF YOUR-BATHROOM-DOOR IS OPEN)
+       (SOUTH  TO YOUR-ROOM IF YOUR-BATHROOM-DOOR IS OPEN)
+       (ACTION YOUR-BATHROOM-F)
+       (GLOBAL YOUR-BATHROOM-DOOR)
+       (THINGS <PSEUDO ( MY BATH       BATH-PSEUDO)
+                       ( BATH TUB      BATH-PSEUDO)
+                       ( MY BATHTUB    BATH-PSEUDO)
+                       ( MY TUB        BATH-PSEUDO)
+                       ( MY TOILET     TOILET-PSEUDO)
+                       ( MY SINK       RANDOM-PSEUDO)>)>
+
+<ROUTINE YOUR-BATHROOM-F ("OPTIONAL" (RARG 0))
+ <COND (<==? .RARG ,M-BEG>
+       <COND (<AND <VERB? WALK-TO> <DOBJ? YOUR-BATHROOM>>
+              <TELL ,AHHH>
+              <RTRUE>)>)
+       (<==? .RARG ,M-LOOK>
+       <TELL
+"From the look of it, " 'YOUR-BATHROOM " was added in recently. It is
+comfortable and inviting, especially for Cornwall." CR>
+       <RTRUE>)
+       (<==? .RARG ,M-EXIT>
+       <COND (<AND <ZERO? ,NOW-WEARING>
+                   <SET RARG <FIND-FLAG ,YOUR-ROOM ,PERSONBIT>>>
+              <TELL
+"You peek in and see " D .RARG ", then" ,REMEMBER-NOT-DRESSED "." CR>
+              <RFATAL>)>)
+       (<T? .RARG>
+       <RFALSE>)
+       (<VERB? OPEN CLOSE LOCK UNLOCK>
+       <PERFORM ,PRSA ,YOUR-BATHROOM-DOOR>
+       <RTRUE>)>>
+
+<ROUTINE TOILET-PSEUDO ()
+ <COND (<VERB? LOOK-INSIDE>
+       <NOTHING-SPECIAL>
+       <RTRUE>)
+       (<VERB? SIT USE>
+       <TELL ,AHHH>
+       <RTRUE>)>>
+
+<ROUTINE BATH-PSEUDO ()
+       <COND (<VERB? CLOSE ;"=DRAW" FILL LAMP-ON>
+              <COND (<EQUAL? ,WINNER ,PLAYER>
+                     <TELL "Okay, then what?" CR>)>
+              <RTRUE>)
+             (<VERB? BOARD SWIM TAKE THROUGH>
+              <COND (<ZERO? ,NOW-WEARING>
+                     <COND (<FIRST? ,PLAYER>
+                            <TELL "First you drop everything...|">
+                            <ROB ,PLAYER ,HERE>)>
+                     <PUT <GET ,P-ITBL ,P-VERBN> 0 ,W?BATHE>;"for VERB-PRINT"
+                     <V-WAIT 9 <> T>
+                     <SETG WASHED T>
+                     <TELL
+"You're now squeaky clean. After toweling off, you feel nicely relaxed
+and ready to tackle the mystery of " D ,CASTLE "." CR>)
+                    (T <TELL
+"You almost step into the tub before you realize that your " D ,NOW-WEARING
+" would get wet." CR>)>)
+             (T <RANDOM-PSEUDO>)>>
+]
+<ROOM EAST-HALL
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT WEARBIT)
+       (DESC "east hall")
+       (ADJECTIVE EAST)
+       (SYNONYM HALL HALLWAY ROOM)
+       (LDESC
+"There are bedrooms to the east and west. The gallery lies south."
+;"[W to Wendish, E to Iris, S to gallery]")
+       (LINE 2)
+       (STATION EAST-HALL)
+       (CHARACTER 3)
+       (GLOBAL WENDISH-ROOM ;WENDISH-DOOR IRIS-ROOM ;IRIS-DOOR)
+       (EAST   TO IRIS-ROOM IF IRIS-ROOM ;IRIS-DOOR IS OPEN)
+       (WEST   TO WENDISH-ROOM IF WENDISH-ROOM ;WENDISH-DOOR IS OPEN)
+       (SOUTH  TO GALLERY)
+       (SW     TO GALLERY)
+       (OUT    TO GALLERY)>
+
+[
+<OBJECT SECRET-IRIS-DOOR
+       (IN ROOMS ;LOCAL-GLOBALS)
+       (DESC "secret door")
+       (ADJECTIVE SECRET IRIS\'S HER PASSAGE)
+       (SYNONYM DOOR)
+       (GENERIC GENERIC-BEDROOM)
+       (FLAGS SECRETBIT DOORBIT)
+       ;(GENERIC GENERIC-IRIS-DOOR-F)>
+
+<ROOM IRIS-ROOM
+       (IN ROOMS)
+       (FLAGS ONBIT NARTICLEBIT OPENBIT DOORBIT WEARBIT WORNBIT)
+       (DESC "Iris's bedroom")
+       (ADJECTIVE IRIS\'S ;IRIS HER BED ROOM BEDROOM EAST)
+       (SYNONYM ROOM BEDROOM DOOR ;KEYHOLE)
+       (GENERIC GENERIC-BEDROOM)
+       (LINE 2)
+       (STATION EAST-HALL)
+       (CHARACTER 3)
+       (GLOBAL IRIS-ROOM SECRET-IRIS-DOOR BATHROOM FIREPLACE
+               NIGHTSTAND-LG DRESSING-TABLE-LG WARDROBE-LG WINDOW)
+       (THINGS <PSEUDO ( IRIS\'S BED   BED-PSEUDO)
+                       ( HER BED       BED-PSEUDO)>)
+       (OUT    TO EAST-HALL IF IRIS-ROOM ;IRIS-DOOR IS OPEN)
+       (WEST   TO EAST-HALL IF IRIS-ROOM ;IRIS-DOOR IS OPEN)
+       (IN     TO IRIS-CLOSET IF SECRET-IRIS-DOOR IS OPEN)
+       (EAST   TO IRIS-CLOSET IF SECRET-IRIS-DOOR IS OPEN)
+       (ACTION IRIS-ROOM-F)>
+
+<ROUTINE IRIS-ROOM-F ("OPTIONAL" (RARG 0))
+ <COND (<EQUAL? .RARG ,M-BEG ,M-EXIT>
+       <COND (<AND <VERB? OPEN CLOSE>
+                   <DOBJ? SECRET-IRIS-DOOR>>
+              <YOU-CANT <> ,PLAYER "in this room">
+              <RTRUE>)
+             (T <SECRET-CHECK .RARG>)>)
+       (<EQUAL? .RARG ,P?EAST ,P?IN>
+       <ENTER-PASSAGE>
+       <RTRUE>)
+       (<EQUAL? .RARG ,M-LOOK>
+       <TELL
+'IRIS-ROOM " is furnished much like yours, but with a canopied bed and
+" 'IRIS-CHAIR "." ;"[W to east hall]">
+       <OPEN-DOOR? ,SECRET-IRIS-DOOR>
+       <CRLF>)>>
+
+<OBJECT IRIS-CHAIR
+       (IN IRIS-ROOM)
+       (DESC "love seat")
+       (ADJECTIVE IRIS\'S HER LOVE)
+       (SYNONYM CHAIR SEAT)
+       (FLAGS SURFACEBIT VEHBIT OPENBIT NDESCBIT)
+       (CAPACITY 99)>
+][
+<OBJECT SECRET-WENDISH-DOOR
+       (IN ROOMS ;LOCAL-GLOBALS)
+       (DESC "secret door")
+       (ADJECTIVE SECRET DOC\'S HIS PASSAGE)
+       (SYNONYM DOOR)
+       (GENERIC GENERIC-BEDROOM)
+       (FLAGS SECRETBIT DOORBIT)
+       ;(GENERIC GENERIC-WENDISH-DOOR)>
+
+;<ROUTINE HIDING-PSEUDO ("AUX" OBJ)
+ <COND (<VERB? HIDE-BEHIND PUT-IN PUT-UNDER>
+       <COND (<DOBJ? COSTUME BLOWGUN LENS-BOX>
+              <MOVE ,PRSO ,HERE>
+              <FSET ,PRSO ,NDESCBIT>
+              <FSET ,PRSO ,SECRETBIT>
+              <TELL "Done." CR>)
+             (T <TELL CHE ,PRSO " won't fit." CR>)>)
+       (<VERB? EXAMINE LOOK-INSIDE SEARCH SEARCH-FOR>
+       <COND (<SET OBJ <FIND-FLAG-HERE ,SECRETBIT>>
+              <DISCOVER .OBJ>)
+             (T <NOTHING-SPECIAL>)>)>>
+
+<ROOM WENDISH-ROOM
+       (IN ROOMS)
+       (FLAGS ONBIT NARTICLEBIT OPENBIT DOORBIT WEARBIT WORNBIT)
+       (DESC "Wendish's bedroom")
+       (ADJECTIVE DOC\'S HIS BED ROOM BEDROOM WEST)
+       (SYNONYM ROOM BEDROOM DOOR ;KEYHOLE)
+       (GENERIC GENERIC-BEDROOM)
+       (LINE 2)
+       (STATION EAST-HALL)
+       (CHARACTER 3)
+       (GLOBAL WENDISH-ROOM SECRET-WENDISH-DOOR BATHROOM FIREPLACE
+               NIGHTSTAND-LG DRESSING-TABLE-LG WARDROBE-LG WINDOW)
+       (THINGS <PSEUDO ( DOC\'S BED    BED-PSEUDO)
+                       ( HIS BED       BED-PSEUDO)>)
+       (OUT    TO EAST-HALL IF WENDISH-ROOM ;WENDISH-DOOR IS OPEN)
+       (EAST   TO EAST-HALL IF WENDISH-ROOM ;WENDISH-DOOR IS OPEN)
+       (NORTH  TO WENDISH-CORNER IF SECRET-WENDISH-DOOR IS OPEN)
+       (IN     TO WENDISH-CORNER IF SECRET-WENDISH-DOOR IS OPEN)
+       (ACTION WENDISH-ROOM-F)>
+
+<ROUTINE WENDISH-ROOM-F ("OPTIONAL" (RARG 0))
+ <COND (<EQUAL? .RARG ,M-BEG ,M-EXIT>
+       <COND ;(<AND <VERB? OPEN CLOSE>
+                   <DOBJ? SECRET-WENDISH-DOOR>>
+              <YOU-CANT <> ,PLAYER "in this room" ;"here">
+              <RTRUE>)
+             (T <SECRET-CHECK .RARG>)>)
+       (<EQUAL? .RARG ,P?NORTH ,P?IN>
+       <ENTER-PASSAGE>
+       <RTRUE>)
+       (<EQUAL? .RARG ,M-LOOK>
+       <TELL
+"The room shows the doctor's precise, scientific personality.
+Everything is in its place. " ;"Luggage has been unpacked, and clothes
+neatly stowed in a commode (a low ' 'CHEST-OF-DRAWERS ') and a clothes press
+(recessed in the wall). ">
+       <WENDISH-STUFF-D>
+       <TELL
+"His " 'WENDISH-KIT " is on a marble-topped console
+attached to the wall. On the north wall is" THE ,CANDLE !\.>
+       <OPEN-DOOR? ,SECRET-WENDISH-DOOR>
+       <CRLF>)>>
+
+<OBJECT CANDLE
+       (IN WENDISH-ROOM)
+       (DESC "ornate candle sconce")
+       (ADJECTIVE ORNATE CANDLE DOC\'S HIS)
+       (SYNONYM CANDLE SCONCE)
+       (FLAGS NDESCBIT TRYTAKEBIT VOWELBIT)
+       (ACTION CANDLE-F)>
+
+<ROUTINE CANDLE-F ()
+ <COND (<VERB? EXAMINE>
+       <TELL "It seems to be fastened loosely to the wall." CR>)
+       (<OR <VERB? LOOK-BEHIND LOOK-UNDER MOVE MOVE-DIR PUSH TURN>
+           <AND <VERB? TAKE>
+                <EQUAL? ,P-PRSA-WORD ,W?RAISE ,W?LIFT>>>
+       <OPEN-SECRET "lift" ,CANDLE ,SECRET-WENDISH-DOOR>)>>
+
+<OBJECT WENDISH-CHAIR
+       (IN WENDISH-ROOM)
+       (DESC "armchair")
+       (ADJECTIVE ARM)
+       (SYNONYM CHAIR SEAT ARMCHAIR)
+       (FLAGS SURFACEBIT VEHBIT OPENBIT NDESCBIT VOWELBIT)
+       (CAPACITY 99)>
+
+<OBJECT WENDISH-STUFF
+       (IN WENDISH-ROOM)
+       (DESC "medical text")
+       (ADJECTIVE MEDICAL)
+       (SYNONYM TEXT TEXTS BOOK BOOKS)
+       (GENERIC GENERIC-BOOK)
+       (FLAGS NDESCBIT READBIT CONTBIT)
+       (CAPACITY 4)
+       (DESCFCN WENDISH-STUFF-D)
+       (ACTION WENDISH-STUFF-F)>
+
+<ROUTINE WENDISH-STUFF-D ("OPTIONAL" X)
+       <TELL
+"Several " 'WENDISH-STUFF "s are lying on the " 'DRESSING-TABLE-LG "."
+              ;"a roll-top writing table." CR>>
+
+<ROUTINE WENDISH-STUFF-F ()
+ <COND (<VERB? EXAMINE LOOK-INSIDE OPEN READ>
+       <TELL "They are too technical to understand." CR>)
+       (T <RANDOM-PSEUDO>)>>
+
+<OBJECT WENDISH-KIT
+       (IN WENDISH-ROOM)
+       (DESC ;"Wendish's " "medical kit")
+       (ADJECTIVE DOC\'S ;DOCTOR HIS MEDICAL)
+       (SYNONYM KIT BAG)
+       (FLAGS NDESCBIT SEENBIT ;NARTICLEBIT CONTBIT TRYTAKEBIT)
+       (SIZE 38)
+       (CAPACITY 37)   ;"for COSTUME + BLOWGUN + LENS-BOX + book"
+       (ACTION WENDISH-KIT-F)>
+
+<ROUTINE WENDISH-KIT-F ("AUX" X)
+ <COND (<VERB? EXAMINE LOOK-INSIDE OPEN SEARCH SEARCH-FOR>
+       <SEARCH-KIT-BOX ,WENDISH-KIT " a bunch of nasty-looking instruments">
+       <RTRUE>)
+       (<AND <VERB? TAKE> <EQUAL? ,PRSO ,WENDISH-KIT>>
+       <YOU-SHOULDNT>)
+       ;(<AND <VERB? TAKE> <EQUAL? ,PRSI <> ,WENDISH-KIT>>
+       <RFALSE>)
+       ;(<VERB? CLOSE FIND>
+       <RFALSE>)>>
+]
+<ROUTINE SEARCH-KIT-BOX (OBJ STR "AUX" (X <>))
+       <FSET .OBJ ,OPENBIT>
+       <COND ;(<OR <SET X <FIND-FLAG .OBJ ,SECRETBIT>>
+                  <SET X <FIND-FLAG .OBJ ,RMUNGBIT>>>
+              T)
+             (<IN? ,LENS-BOX .OBJ>
+              <SET X ,LENS-BOX>)
+             (<IN? ,VIVIEN-DIARY .OBJ>
+              <SET X ,VIVIEN-DIARY>)
+             (<IN? ,COSTUME .OBJ>
+              <SET X ,COSTUME>)
+             (<IN? ,BLOWGUN .OBJ>
+              <SET X ,BLOWGUN>)>
+       <COND (<T? .X>
+              <DISCOVER .X>
+              <COND (<NOT <VERB? SEARCH SEARCH-FOR>>
+                     <TELL !\Y ,OU-STOP-SEARCHING "." CR>)>
+              <RTRUE>)
+             (T
+              <TELL-AS-WELL-AS .OBJ .STR>
+              <RTRUE>)>>
+[
+<OBJECT SECRET-VIVIEN-DOOR
+       (IN ROOMS ;LOCAL-GLOBALS)
+       (DESC "secret door")
+       (ADJECTIVE SECRET VIV\'S HER PASSAGE)
+       (SYNONYM DOOR)
+       (GENERIC GENERIC-BEDROOM)
+       (FLAGS SECRETBIT DOORBIT)
+       ;(GENERIC GENERIC-VIVIEN-DOOR)>
+
+<ROOM VIVIEN-ROOM
+       (IN ROOMS)
+       (FLAGS ONBIT NARTICLEBIT ;OPENBIT DOORBIT ;LOCKED WEARBIT WORNBIT)
+       (DESC "Vivien's bedroom")
+       (ADJECTIVE ;VIVIEN VIV\'S HER BED ROOM BEDROOM WEST)
+       (SYNONYM ROOM BEDROOM DOOR ;KEYHOLE)
+       (GENERIC GENERIC-BEDROOM)
+       (LINE 2)
+       (STATION GALLERY)
+       (CHARACTER 3)
+       (GLOBAL VIVIEN-ROOM SECRET-VIVIEN-DOOR BATHROOM FIREPLACE
+               NIGHTSTAND-LG DRESSING-TABLE-LG WARDROBE-LG WINDOW)
+       (THINGS <PSEUDO ( <> BOOK       RANDOM-PSEUDO)
+                       ( <> BOOKS      RANDOM-PSEUDO)
+                       ( VIV\'S BED    BED-PSEUDO)
+                       ( HER BED       BED-PSEUDO)>)
+       (OUT    TO GALLERY IF VIVIEN-ROOM ;VIVIEN-DOOR IS OPEN)
+       (EAST   TO GALLERY IF VIVIEN-ROOM ;VIVIEN-DOOR IS OPEN)
+       (SOUTH  TO SECRET-VIVIEN-PASSAGE IF SECRET-VIVIEN-DOOR IS OPEN)
+       (IN     TO SECRET-VIVIEN-PASSAGE IF SECRET-VIVIEN-DOOR IS OPEN)
+       (ACTION VIVIEN-ROOM-F)>
+
+<ROUTINE VIVIEN-ROOM-F ("OPTIONAL" (RARG <>))
+ <COND (<EQUAL? .RARG ,M-BEG ,M-EXIT>
+       <SECRET-CHECK .RARG>)
+       (<EQUAL? .RARG ,P?SOUTH ,P?IN>
+       <ENTER-PASSAGE>
+       <RTRUE>)
+       (<EQUAL? .RARG ,M-LOOK>
+       <TELL
+"The room is untidy, probably because Vivien is an artist.
+Sketches and garments are strewn on the
+canopied bed and " 'VIVIEN-CHAIR ". Leaning against the wall are
+stretched canvases, and a fold-up easel
+for her outdoor art work. On the tallboy are
+a sketch pad, and a paint-smeared " 'VIVIEN-BOX ".
+On the south wall is a cheval glass and" THE ,FIGURINE "."
+;"(full-length tilting mirror in frame) [E to gallery]">
+       <OPEN-DOOR? ,SECRET-VIVIEN-DOOR>
+       <CRLF>
+       <DESCRIBE-CONTENTS ,VIVIEN-CHAIR>
+       <RTRUE>)>>
+
+<OBJECT VIVIEN-STUFF
+       (IN VIVIEN-ROOM)
+       (DESC "art supplies" ;"Vivien's stuff")
+       (ADJECTIVE VIV\'S HER WATERCOLOR SKETCH ART PICTURE)
+       (SYNONYM PAD CANVAS SUPPLIES EASEL)
+       (FLAGS NDESCBIT SEENBIT ;NARTICLEBIT)
+       (ACTION RANDOM-PSEUDO)>
+
+<OBJECT VIVIEN-BOX
+       (IN VIVIEN-ROOM)
+       (DESC ;"Vivien's " "wooden box")
+       (ADJECTIVE VIV\'S HER WOODEN PAINT)
+       (SYNONYM BOX)
+       (GENERIC GENERIC-BOX)
+       (FLAGS NDESCBIT SEENBIT ;NARTICLEBIT CONTBIT TRYTAKEBIT)
+       (SIZE 38)
+       (CAPACITY 37)   ;"for COSTUME + BLOWGUN + LENS-BOX + book"
+       (ACTION VIVIEN-BOX-F)>
+
+<ROUTINE VIVIEN-BOX-F ("AUX" X)
+ <COND (<VERB? EXAMINE LOOK-INSIDE OPEN SEARCH SEARCH-FOR>
+       <SEARCH-KIT-BOX ,VIVIEN-BOX " Vivien's brushes and thinner";" and oil">
+       <RTRUE>)
+       ;(<AND <VERB? PUT-IN> <IOBJ? VIVIEN-BOX>>
+       <MOVE ,PRSO ,PRSI>
+       <FSET ,PRSO ,TOUCHBIT>
+       <TELL "Okay." CR>)
+       (<AND <VERB? TAKE> <EQUAL? ,PRSO ,VIVIEN-BOX>>
+       <YOU-SHOULDNT>)
+       ;(<AND <VERB? TAKE> <EQUAL? ,PRSI <> ,VIVIEN-BOX>>
+       <RFALSE>)
+       ;(<VERB? CLOSE FIND>
+       <RFALSE>)>>
+
+<OBJECT FIGURINE
+       (IN VIVIEN-ROOM)
+       (DESC "sculpted figurine")
+       (ADJECTIVE SCULPT VIV\'S HER)
+       (SYNONYM FIGURINE FIGURE)
+       (FLAGS TRYTAKEBIT NDESCBIT ;SEENBIT)
+       (ACTION FIGURINE-F)>
+
+<ROUTINE FIGURINE-F ()
+ <COND (<VERB? EXAMINE>
+       <TELL "It's turned toward the wall, so you can't see its face." CR>)
+       (<VERB? MOVE MOVE-DIR PUSH TURN>
+       <OPEN-SECRET "turn" ,FIGURINE ,SECRET-VIVIEN-DOOR>)
+       ;(<VERB? LOOK-UNDER OPEN TAKE>
+       <FSET ,FIGURINE ,OPENBIT>
+       <TELL
+"The " 'FIGURINE " is hollow. Lifting it from its shelf reveals">
+       <PRINT-CONTENTS ,FIGURINE>
+       <TELL "." CR>)>>
+
+<OBJECT VIVIEN-CHAIR
+       (IN VIVIEN-ROOM)
+       (DESC "chaise longue")
+       (ADJECTIVE CHAISE)
+       (SYNONYM CHAIR CHAISE LONGUE LOUNGE)
+       (FLAGS SURFACEBIT VEHBIT OPENBIT NDESCBIT SEENBIT)
+       (CAPACITY 99)>
+]
+<ROOM WEST-HALL
+       (IN ROOMS)
+       (FLAGS ONBIT SEENBIT WEARBIT)
+       (DESC "west hall")
+       (ADJECTIVE WEST)
+       (SYNONYM HALL HALLWAY ROOM)
+       (LDESC
+"There are bedrooms to the east and west. The gallery lies south."
+;"[E to Hyde, W to Ian, S to gallery]")
+       (LINE 2)
+       (STATION WEST-HALL)
+       (CHARACTER 3)
+       (GLOBAL HYDE-ROOM ;HYDE-DOOR IAN-ROOM ;IAN-DOOR)
+       (WEST   TO IAN-ROOM IF IAN-ROOM ;IAN-DOOR IS OPEN)
+       (EAST   TO HYDE-ROOM IF HYDE-ROOM ;HYDE-DOOR IS OPEN)
+       (SOUTH  TO GALLERY)
+       (SE     TO GALLERY)
+       (OUT    TO GALLERY)>
+[
+<OBJECT SECRET-IAN-DOOR
+       (IN ROOMS ;LOCAL-GLOBALS)
+       (DESC "secret door")
+       (ADJECTIVE SECRET IAN\'S HIS PASSAGE)
+       (SYNONYM DOOR)
+       (GENERIC GENERIC-BEDROOM)
+       (FLAGS SECRETBIT DOORBIT)
+       ;(GENERIC GENERIC-IAN-DOOR)>
+
+<ROOM IAN-ROOM
+       (IN ROOMS)
+       (FLAGS ONBIT NARTICLEBIT OPENBIT DOORBIT WEARBIT WORNBIT)
+       (DESC "Ian's bedroom")
+       (ADJECTIVE IAN\'S HIS BED ROOM BEDROOM WEST)
+       (SYNONYM ROOM BEDROOM DOOR ;KEYHOLE)
+       (GENERIC GENERIC-BEDROOM)
+       (LINE 2)
+       (STATION WEST-HALL)
+       (CHARACTER 3)
+       (GLOBAL IAN-ROOM SECRET-IAN-DOOR BATHROOM FIREPLACE
+               NIGHTSTAND-LG DRESSING-TABLE-LG WARDROBE-LG WINDOW)
+       (THINGS <PSEUDO ( IAN\'S BED    BED-PSEUDO)
+                       ( HIS BED       BED-PSEUDO)>)
+       (NORTH  TO SECRET-IAN-PASSAGE IF SECRET-IAN-DOOR IS OPEN)
+       (IN     TO SECRET-IAN-PASSAGE IF SECRET-IAN-DOOR IS OPEN)
+       (OUT    TO WEST-HALL IF IAN-ROOM ;IAN-DOOR IS OPEN)
+       (EAST   TO WEST-HALL IF IAN-ROOM ;IAN-DOOR IS OPEN)
+       (ACTION IAN-ROOM-F)>
+
+<ROUTINE IAN-ROOM-F ("OPTIONAL" (RARG 0))
+ <COND (<EQUAL? .RARG ,M-BEG ,M-EXIT>
+       <SECRET-CHECK .RARG>)
+       (<EQUAL? .RARG ,P?NORTH ,P?IN>
+       <ENTER-PASSAGE>
+       <RTRUE>)
+       (<EQUAL? .RARG ,M-LOOK>
+       <TELL
+'IAN-ROOM " has rich wood panelling, a four-poster bed, Victorian
+washstand, and " 'IAN-CHAIR ". ">
+       <TELL-IAN-FIREPLACE>
+       <CRLF>
+       <COND (<OPEN-DOOR? ,SECRET-IAN-DOOR T>
+              <CRLF>)>
+       <RTRUE>)>>
+
+<ROUTINE TELL-IAN-FIREPLACE ()
+       <TELL
+"In the " 'FIREPLACE ", the fender has
+flashy grillwork, and the " 'ANDIRON "s have fancy carved heads.">>
+
+<OBJECT ANDIRON
+       (IN IAN-ROOM)
+       (DESC "andiron")
+       ;(ADJECTIVE CARVED)
+       (SYNONYM ANDIRON HEAD ;HEADS GRILLWORK)
+       (FLAGS VOWELBIT NDESCBIT)
+       (ACTION ANDIRON-F)>
+
+<ROUTINE ANDIRON-F ()
+ <COND (<VERB? EXAMINE>
+       <TELL "By looking closely, you find that the head can turn." CR>)
+       (<VERB? MOVE MOVE-DIR PUSH RUB TURN>
+       <OPEN-SECRET "turn" ,ANDIRON ,SECRET-IAN-DOOR>
+       ;<TELL "As you turn the carved head,">)>>
+
+<OBJECT IAN-CHAIR
+       (IN IAN-ROOM)
+       (DESC "reclining Morris chair")
+       (ADJECTIVE RECLINE MORRIS)
+       (SYNONYM CHAIR SEAT)
+       (FLAGS SURFACEBIT VEHBIT OPENBIT NDESCBIT)
+       (CAPACITY 99)>
+][
+<OBJECT SECRET-HYDE-DOOR
+       (IN ROOMS ;LOCAL-GLOBALS)
+       (DESC "secret door")
+       (ADJECTIVE SECRET HYDE\'S HIS PASSAGE)
+       (SYNONYM DOOR)
+       (GENERIC GENERIC-BEDROOM)
+       (FLAGS SECRETBIT DOORBIT)
+       ;(GENERIC GENERIC-HYDE-DOOR)>
+
+<ROOM HYDE-ROOM
+       (IN ROOMS)
+       (FLAGS ONBIT NARTICLEBIT OPENBIT DOORBIT WEARBIT WORNBIT)
+       (DESC "Hyde's bedroom")
+       (ADJECTIVE HYDE\'S HIS ;HYDE BED ROOM BEDROOM EAST)
+       (SYNONYM ROOM BEDROOM DOOR ;KEYHOLE)
+       (GENERIC GENERIC-BEDROOM)
+       (LINE 2)
+       (STATION WEST-HALL)
+       (CHARACTER 3)
+       (GLOBAL HYDE-ROOM SECRET-HYDE-DOOR BATHROOM FIREPLACE
+               NIGHTSTAND-LG DRESSING-TABLE-LG WARDROBE-LG WINDOW)
+       (THINGS <PSEUDO ( HYDE\'S BED   BED-PSEUDO)
+                       ( HIS BED       BED-PSEUDO)>)
+       (OUT    TO WEST-HALL IF HYDE-ROOM ;HYDE-DOOR IS OPEN)
+       (WEST   TO WEST-HALL IF HYDE-ROOM ;HYDE-DOOR IS OPEN)
+       (IN     TO HYDE-CLOSET IF SECRET-HYDE-DOOR IS OPEN)
+       (NORTH  TO HYDE-CLOSET IF SECRET-HYDE-DOOR IS OPEN)
+       (ACTION HYDE-ROOM-F)>
+
+<ROUTINE HYDE-ROOM-F ("OPTIONAL" (RARG 0))
+ <COND (<EQUAL? .RARG ,M-BEG ,M-EXIT>
+       <COND (<AND <VERB? OPEN CLOSE>
+                   <DOBJ? SECRET-HYDE-DOOR>>
+              <YOU-CANT <> ,PLAYER "in this room" ;"here">
+              <RTRUE>)
+             (T <SECRET-CHECK .RARG>)>)
+       (<EQUAL? .RARG ,P?NORTH ,P?IN>
+       <ENTER-PASSAGE>
+       <RTRUE>)
+       (<EQUAL? .RARG ,M-LOOK>
+       <TELL
+'HYDE-ROOM " has many tasteful antiques, such as " A ,HYDE-CHAIR
+" in one corner."
+;" looks like  'DOCTOR 's, but with a 'WARDROBE not a clothes press.">
+       <OPEN-DOOR? ,SECRET-HYDE-DOOR>
+       <CRLF>)>>
+
+<OBJECT HYDE-CHAIR
+       (IN HYDE-ROOM)
+       (DESC "armchair")
+       (ADJECTIVE ARM)
+       (SYNONYM CHAIR ARMCHAIR)
+       (FLAGS SURFACEBIT VEHBIT OPENBIT NDESCBIT VOWELBIT SEENBIT)
+       (CAPACITY 99)>
+]
diff --git a/colors.zap b/colors.zap
new file mode 100644 (file)
index 0000000..28de0c0
--- /dev/null
@@ -0,0 +1,754 @@
+
+
+       .FUNCT  INTRO
+       PRINTI  "
+You drove west from London all day in your new little British "
+       PRINTD  CAR
+       PRINTI  ". Now at last you've arrived in the storied land of Cornwall.
+
+Dusk has fallen as you pull up in front of "
+       PRINTD  CASTLE
+       PRINTI  ". A ghostly "
+       PRINTD  MOON
+       PRINTI  " is rising, and a tall iron gate between two pillars bars the way into the "
+       PRINTD  COURTYARD
+       PRINTI  ".
+"
+       RTRUE   
+
+
+       .FUNCT  YOUR-COLOR-F
+       CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       EQUAL?  HERE,YOUR-ROOM /?PRG11
+       CALL    VISIBLE?,CAR
+       ZERO?   STACK \?PRG11
+       CALL    VISIBLE?,EXERCISE-OUTFIT
+       ZERO?   STACK \?PRG11
+       CALL    VISIBLE?,DINNER-OUTFIT
+       ZERO?   STACK \?PRG11
+       CALL    VISIBLE?,SLEEP-OUTFIT
+       ZERO?   STACK \?PRG11
+       CALL    NOT-HERE,YOUR-COLOR
+       RSTACK  
+?PRG11:        PRINTI  "It's "
+       PRINTD  YOUR-COLOR
+       PRINTR  "!"
+
+
+       .FUNCT  GET-COLOR,NUM,N,WD,SUM=0,X,?TMP1
+       PUTB    P-INBUF,0,30
+?PRG1: PRINTC  62
+       READ    P-INBUF,P-LEXV
+       GETB    P-LEXV,P-LEXWORDS >NUM
+       ZERO?   NUM \?CND5
+       PRINTC  34
+       PRINT   BEG-PARDON
+       PRINTI  """ "
+       JUMP    ?PRG1
+?CND5: SET     'N,P-LEXSTART
+?PRG9: GET     P-LEXV,N >WD
+       CALL    ZMEMQ,WD,COLOR-WORDS >X
+       ZERO?   X /?CCL13
+       SET     'VARIATION,X
+?REP10:        GETB    P-LEXV,P-LEXWORDS
+       SUB     STACK,1
+       MUL     P-LEXELEN,STACK
+       ADD     P-LEXSTART,STACK >WD
+       GET     P-LEXV,WD
+       EQUAL?  STACK,W?PERIOD,W?!,W?? \?CND16
+       SUB     WD,P-LEXELEN >WD
+?CND16:        ADD     WD,1
+       MUL     2,STACK >N
+       GETB    P-LEXV,N >?TMP1
+       ADD     1,N
+       GETB    P-LEXV,STACK
+       ADD     ?TMP1,STACK
+       ADD     -1,STACK >WD
+       ADD     P-INBUF,1
+       CALL    NON-BLANK-STUFF,FAVE-COLOR,STACK,WD
+       PRINTI  """Did you say "
+       PRINTD  YOUR-COLOR
+       PRINTI  " is "
+       CALL    PRINT-COLOR,TRUE-VALUE
+       PRINTI  "?"""
+       CALL    YES?
+       ZERO?   STACK /?PRG32
+       ZERO?   VARIATION \?CND25
+       GETB    P-LEXV,5
+       GETB    P-INBUF,STACK >SUM
+       CALL    ZMEMQ,SUM,COLOR-LETTERS >X
+       ZERO?   X /?CCL29
+       SET     'VARIATION,X
+       JUMP    ?CND27
+?CCL13:        DLESS?  'NUM,1 /?REP10
+       ADD     N,P-LEXELEN >N
+       JUMP    ?PRG9
+?CCL29:        EQUAL?  SUM,112 \?CCL31
+       SET     'VARIATION,PAINTER-C
+       JUMP    ?CND27
+?CCL31:        MOD     SUM,MAX-VARS
+       ADD     1,STACK >VARIATION
+?CND27:        GET     COLOR-WORDS,VARIATION >COLOR-FORCED
+?CND25:        CALL    DO-VARIATION
+       PUTB    P-INBUF,0,80
+       RTRUE   
+?PRG32:        PRINTI  """What, then?"""
+       CRLF    
+       SET     'VARIATION,0
+       JUMP    ?PRG1
+
+
+       .FUNCT  FIX-COLOR-ADJ,OBJ,PT,N
+       GETPT   OBJ,P?ADJECTIVE >PT
+       ZERO?   PT /FALSE
+       PTSIZE  PT
+       SUB     STACK,1
+       CALL    ZMEMQB,A?F.C,PT,STACK >N
+       ZERO?   N /FALSE
+       GET     COLOR-ADJS,VARIATION
+       PUTB    PT,N,STACK
+       RTRUE   
+
+
+       .FUNCT  DO-VARIATION,C
+       CALL    FIX-COLOR-ADJ,YOUR-COLOR
+       CALL    FIX-COLOR-ADJ,YOUR-ROOM
+       CALL    FIX-COLOR-ADJ,CAR
+       CALL    FIX-COLOR-ADJ,SLEEP-OUTFIT
+       CALL    FIX-COLOR-ADJ,EXERCISE-OUTFIT
+       CALL    FIX-COLOR-ADJ,DINNER-OUTFIT
+       EQUAL?  VARIATION,LORD-C \?CCL3
+       LOC     LOVER >C
+       JUMP    ?CND1
+?CCL3: EQUAL?  VARIATION,FRIEND-C \?CCL5
+       SET     'C,IRIS-CLOSET
+       JUMP    ?CND1
+?CCL5: EQUAL?  VARIATION,PAINTER-C \?CCL7
+       SET     'C,VIVIEN-BOX
+       JUMP    ?CND1
+?CCL7: SET     'C,WENDISH-KIT
+?CND1: SET     'HIDING-PLACE,C
+       MOVE    COSTUME,C
+       MOVE    BLOWGUN,C
+       EQUAL?  VARIATION,LORD-C \?CCL10
+       SET     'VILLAIN-PER,LOVER
+       MOVE    NECKLACE-OF-D,JACK-ROOM
+       MOVE    JEWEL,LOCAL-GLOBALS
+       SET     'TREASURE,WAR-CLUB
+       MOVE    CLUE-2,PAINTER
+       FSET    STAINED-WINDOW,CONTBIT
+       MOVE    CLUE-3,STAINED-WINDOW
+       MOVE    CLUE-4,GARDEN
+       MOVE    CANE,UMBRELLA-STAND
+       JUMP    ?CND8
+?CCL10:        EQUAL?  VARIATION,FRIEND-C \?CCL13
+       SET     'VILLAIN-PER,FRIEND
+       MOVE    TAMARA-EVIDENCE,TAMARA-BED
+       GETPT   FRIEND,P?WEST
+       PUT     STACK,NEXITSTR,STR?212
+       MOVE    JOURNAL,TAMARA-BED
+       FSET    JOURNAL,NDESCBIT
+       MOVE    EARRING,JEWELRY-CASE
+       MOVE    JEWEL,LOCAL-GLOBALS
+       SET     'TREASURE,NECKLACE
+       MOVE    NECKLACE,SKELETON
+       MOVE    CLUE-4,COFFIN
+       FCLEAR  CLUE-4,NDESCBIT
+       FSET    CLUE-4,TAKEBIT
+       MOVE    CLUE-3,BELL
+       MOVE    BRICKS,BASEMENT
+       JUMP    ?CND8
+?CCL13:        EQUAL?  VARIATION,DOCTOR-C \?CCL15
+       SET     'VILLAIN-PER,DOCTOR
+       MOVE    WENDISH-BOOK,BOOKCASE
+       MOVE    LENS-BOX,WENDISH-KIT
+       FCLEAR  LENS-BOX,NDESCBIT
+       FSET    LENS-BOX,TAKEBIT
+       MOVE    JOURNAL,DESK
+       MOVE    LETTER-DEE,STUDY
+       SET     'TREASURE,MOONMIST
+       FSET    MOONMIST,SECRETBIT
+       MOVE    CLUE-3,RHINO-HEAD
+       MOVE    CLUE-4,GALLERY-CORNER
+       FCLEAR  CLUE-4,NDESCBIT
+       FSET    CLUE-4,TAKEBIT
+       MOVE    MOONMIST,INKWELL
+       JUMP    ?CND8
+?CCL15:        EQUAL?  VARIATION,PAINTER-C \?CND8
+       SET     'VILLAIN-PER,PAINTER
+       MOVE    VIVIEN-DIARY,VIVIEN-BOX
+       MOVE    LENS-BOX,VIVIEN-BOX
+       FCLEAR  LENS-BOX,NDESCBIT
+       FSET    LENS-BOX,TAKEBIT
+       SET     'TREASURE,SKULL
+       MOVE    SKULL,BELL
+       FSET    MUSIC,SECRETBIT
+       MOVE    CLUE-3,ARMOR
+?CND8: EQUAL?  VILLAIN-PER,LOVER \?CCL21
+       SET     'SEARCHER,LORD
+       JUMP    ?CND19
+?CCL21:        SET     'SEARCHER,VILLAIN-PER
+?CND19:        FSET?   VILLAIN-PER,FEMALE \FALSE
+       FSET    GHOST-NEW,FEMALE
+       RTRUE   
+
+
+       .FUNCT  CANE-F,P
+       CALL    ATTACK-VERB?
+       ZERO?   STACK /?CCL3
+       CALL    NO-VIOLENCE?,CANE
+       RTRUE   
+?CCL3: CALL    DISCOVER-WAR-CLUB,CANE
+       RSTACK  
+
+
+       .FUNCT  PAINT-F
+       EQUAL?  PRSA,V?EXAMINE \?CCL3
+       PRINTR  "It seems to be hiding something."
+?CCL3: EQUAL?  PRSA,V?TAKE-OFF,V?RUB /?CTR6
+       EQUAL?  PRSA,V?REMOVE,V?LOOK-UNDER,V?BRUSH /?CTR6
+       EQUAL?  PRSA,V?TAKE \?CCL7
+       ZERO?   PRSI /?CCL7
+?CTR6: CALL    DISCOVER-WAR-CLUB,CANE,TRUE-VALUE
+       RTRUE   
+?CCL7: CALL    DIVESTMENT?,PAINT
+       ZERO?   STACK /FALSE
+       CALL    HAR-HAR
+       RSTACK  
+
+
+       .FUNCT  DISCOVER-WAR-CLUB,OBJ,DO-IT=0,PER
+       EQUAL?  PRSA,V?RUB,V?BRUSH /?CTR2
+       ZERO?   DO-IT /?CCL3
+?CTR2: FSET?   WAR-CLUB,SECRETBIT \FALSE
+       CALL    DISCOVER,WAR-CLUB,PAINT
+       LOC     OBJ
+       MOVE    WAR-CLUB,STACK
+       LOC     OBJ
+       CALL    ROB,OBJ,STACK
+       MOVE    OBJ,LOCAL-GLOBALS
+       MOVE    PAINT,LOCAL-GLOBALS
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?SEARCH,V?EXAMINE \FALSE
+       FSET?   WAR-CLUB,SECRETBIT \FALSE
+       FCLEAR  PAINT,SECRETBIT
+       PRINTI  "There's something strange about this "
+       PRINTD  OBJ
+       PRINTI  ". It's shaped like a baseball bat, but with hard, faceted bumps all over it. It has a new "
+       PRINTD  PAINT
+       PRINTR  "."
+
+
+       .FUNCT  ATTACK-VERB?,SHOOT=0
+       EQUAL?  PRSA,V?SLAP,V?KILL,V?ATTACK \?CCL3
+       FSET?   PRSO,PERSONBIT /TRUE
+       RFALSE  
+?CCL3: EQUAL?  PRSA,V?SHOOT \?CCL8
+       ZERO?   SHOOT /FALSE
+       FSET?   PRSO,PERSONBIT /TRUE
+       RFALSE  
+?CCL8: EQUAL?  PRSA,V?PUT,V?RING \?CCL15
+       ZERO?   SHOOT /FALSE
+       ZERO?   PRSI /TRUE
+       FSET?   PRSI,PERSONBIT /TRUE
+       RFALSE  
+?CCL15:        EQUAL?  PRSA,V?USE \FALSE
+       ZERO?   PRSI /TRUE
+       FSET?   PRSI,PERSONBIT /TRUE
+       RFALSE  
+
+
+       .FUNCT  WAR-CLUB-F
+       EQUAL?  PRSA,V?COMPARE \?CCL3
+       EQUAL?  JEWEL,PRSO,PRSI \FALSE
+       CALL    START-SENTENCE,WAR-CLUB
+       PRINTI  " has no "
+       PRINTD  JEWEL
+       PRINTR  " like this one."
+?CCL3: EQUAL?  PRSA,V?EXAMINE \?CCL10
+       CALL    DESCRIBE-WAR-CLUB
+       RSTACK  
+?CCL10:        CALL    ATTACK-VERB?
+       ZERO?   STACK /FALSE
+       CALL    NO-VIOLENCE?,WAR-CLUB
+       RTRUE   
+
+
+       .FUNCT  DESCRIBE-WAR-CLUB
+       PRINTI  "It's a "
+       PRINTD  WAR-CLUB
+       PRINTR  " that once belonged to the Zulu king Dingaan -- and it's studded with large diamonds!"
+
+
+       .FUNCT  SKULL-F
+       EQUAL?  PRSA,V?SEARCH,V?LOOK-INSIDE,V?EXAMINE \FALSE
+       PRINTR  "This staring skull is frightfully old -- even older than the castle."
+
+
+       .FUNCT  MOONMIST-F
+       EQUAL?  PRSA,V?READ,V?PLAY /?CTR2
+       EQUAL?  PRSA,V?FIND,V?EXAMINE \?CCL3
+       IN?     MOONMIST,GLOBAL-OBJECTS \?CCL3
+?CTR2: SET     'CLOCK-WAIT,TRUE-VALUE
+       PRINTR  "[You're playing it now!]"
+?CCL3: CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       EQUAL?  PRSA,V?TAKE \?CCL13
+       IN?     MOONMIST,GLOBAL-OBJECTS /?CCL16
+       CALL    VISIBLE?,MOONMIST
+       ZERO?   STACK /?CCL16
+       LOC     MOONMIST
+       CALL    PERFORM,PRSA,STACK,PRSI
+       RTRUE   
+?CCL16:        CALL    YOU-CANT
+       RSTACK  
+?CCL13:        CALL    NOT-HOLDING?,PRSO
+       ZERO?   STACK \TRUE
+       EQUAL?  PRSA,V?PUT,V?POUR \?CCL22
+       ZERO?   PRSI /?CND23
+       FSET?   PRSI,PERSONBIT \?CND23
+       CALL    SHOOTING,MOONMIST
+       ZERO?   STACK /?CND23
+       RETURN  2
+?CND23:        MOVE    MOONMIST,LOCAL-GLOBALS
+       CALL    START-SENTENCE,MOONMIST
+       PRINTI  " dribbles "
+       ZERO?   PRSI \?CCL34
+       CALL    GROUND-DESC
+       PRINT   STACK
+       JUMP    ?PRG43
+?CCL34:        FSET?   PRSI,SURFACEBIT /?PRG41
+       PRINTI  "into"
+       CALL    PRINTT,PRSI
+       JUMP    ?PRG43
+?PRG41:        PRINTI  "on"
+       CALL    PRINTT,PRSI
+?PRG43:        PRINTR  ", sizzles, and evaporates."
+?CCL22:        CALL    DIVESTMENT?,MOONMIST
+       ZERO?   STACK /?CCL46
+       CALL    PERFORM,PRSA,INKWELL,PRSI
+       RTRUE   
+?CCL46:        EQUAL?  PRSA,V?EAT,V?DRINK \?CCL49
+       EQUAL?  WINNER,PLAYER \FALSE
+       PRINTI  "First it puts your tongue to sleep. Then your tummy. Then your brain."
+       CALL    FINISH
+       RSTACK  
+?CCL49:        EQUAL?  PRSA,V?SMELL,V?EXAMINE \?CCL56
+       PRINTR  "It's a greenish liquid with a strong odor."
+?CCL56:        CALL    SHOOTING,MOONMIST
+       RSTACK  
+
+
+       .FUNCT  CLUE-1-F
+       EQUAL?  PRSA,V?COMPARE \?CCL3
+       EQUAL?  TREASURE,PRSO,PRSI \FALSE
+       CALL    START-SENTENCE,TREASURE
+       EQUAL?  VARIATION,LORD-C \?PRG16
+       FSET?   PLAYER,FEMALE /?PRG16
+       PRINTI  " looks just like the one on"
+       JUMP    ?PRG18
+?PRG16:        PRINTI  " seems to match"
+?PRG18:        PRINTI  " the "
+       PRINTD  CLUE-1
+       PRINTR  "!"
+?CCL3: EQUAL?  PRSA,V?READ,V?EXAMINE \FALSE
+       FSET?   CLUE-1,TOUCHBIT /?CND22
+       PRINTR  "You can't see its face."
+?CND22:        CALL    NOT-HOLDING?,PRSO
+       ZERO?   STACK \TRUE
+       PRINTI  "The "
+       PRINTD  CLUE-1
+       PRINTI  " shows "
+       EQUAL?  VARIATION,LORD-C \?CCL32
+       PRINTI  "the King of "
+       FSET?   PLAYER,FEMALE \?PRG40
+       PRINTR  "Spades, holding a sceptre."
+?PRG40:        PRINTI  "Clubs in one corner, with a picture of an African chief holding a "
+       PRINTD  WAR-CLUB
+       PRINTR  "; in the other corner is the King of Diamonds, with a picture of a crowned vulture clutching a diamond."
+?CCL32:        EQUAL?  VARIATION,FRIEND-C \?CCL43
+       FSET?   PLAYER,FEMALE \?PRG49
+       PRINTR  "a Polynesian diver, holding a knife and plunging through black water."
+?PRG49:        PRINTR  "a photo of singer Pearl Bailey."
+?CCL43:        EQUAL?  VARIATION,DOCTOR-C \?CCL52
+       FSET?   PLAYER,FEMALE \?PRG58
+       PRINTD  CASTLE
+       PRINTI  ", with a cloud of mist hiding the "
+       PRINTD  MOON
+       PRINTR  "."
+?PRG58:        PRINTI  "an Amazon hunter, aiming a "
+       PRINTD  BLOWGUN
+       PRINTR  " at the tree tops."
+?CCL52:        EQUAL?  VARIATION,PAINTER-C \FALSE
+       PRINTI  "a "
+       PRINTD  SKELETON
+       PRINTR  " in Chinese mandarin costume."
+
+
+       .FUNCT  CLUE-2-F
+       EQUAL?  PRSA,V?READ,V?EXAMINE \FALSE
+       CALL    NOT-HOLDING?,PRSO
+       ZERO?   STACK \TRUE
+       FSET    CLUE-2,TOUCHBIT
+       CALL    HE-SHE-IT,CLUE-2,TRUE-VALUE
+       PRINTI  " says,"
+       CRLF    
+       EQUAL?  VARIATION,LORD-C \?CCL10
+       SET     'CLUE-LOC,CHAPEL
+       PRINTR  """Forbidden fruit tempted the very first lass.
+'Twas once in a garden but now in a glass."""
+?CCL10:        EQUAL?  VARIATION,PAINTER-C \?CCL15
+       FSET?   MUSIC,TOUCHBIT /?CCL18
+       SET     'CLUE-LOC,SITTING-ROOM
+       JUMP    ?PRG21
+?CCL18:        FSET?   BOTTLE,TOUCHBIT /?CCL20
+       SET     'CLUE-LOC,BASEMENT
+       JUMP    ?PRG21
+?CCL20:        SET     'CLUE-LOC,DRAWING-ROOM
+?PRG21:        PRINTR  """Three fellows argued about life:
+1. 'Using this motto, no chap can go wrong:
+    Leave the wench and the grape, but go with a ____!'
+2. 'On the seas of my life sails a ship that is laden
+    Not with bottles or tunes, but with innocent ______s!'
+3. 'Women and singing are both very fine,
+    But for me there is nothing to equal good ____!'"""
+?CCL15:        EQUAL?  VARIATION,DOCTOR-C \?CCL24
+       SET     'CLUE-LOC,GAME-ROOM
+       PRINTR  """My first is an 'I,' but find an 'eye' that sees not."""
+?CCL24:        SET     'CLUE-LOC,DECK
+       PRINTR  """... Yet the ear distinctly tells,...
+How the danger sinks and swells,
+By the sinking or the swelling in the anger of the ____s..."""
+
+
+       .FUNCT  CLUE-3-F
+       EQUAL?  PRSA,V?READ,V?EXAMINE \FALSE
+       CALL    NOT-HOLDING?,PRSO
+       ZERO?   STACK \TRUE
+       FSET    CLUE-3,TOUCHBIT
+       FSET    CLUE-3,TAKEBIT
+       CALL    HE-SHE-IT,CLUE-3,TRUE-VALUE
+       PRINTI  " says,
+"
+       EQUAL?  VARIATION,LORD-C \?CCL10
+       SET     'CLUE-LOC,GARDEN
+       PRINTR  """Despite its appearance, the fruit was quite sour.
+One bite of the apple drove Eve from her bower."""
+?CCL10:        EQUAL?  VARIATION,FRIEND-C \?CCL14
+       SET     'CLUE-LOC,0
+       PRINTR  """... And so, all the night-tide, I lie down by the side
+Of my darling -- my darling -- my life and my bride,...
+In her tomb by the sounding sea."""
+?CCL14:        EQUAL?  VARIATION,DOCTOR-C \?CCL18
+       SET     'CLUE-LOC,GALLERY
+       PRINTR  """My second is in never but not in ever, and lies in a hidden 'end'."""
+?CCL18:        SET     'CLUE-LOC,DECK
+       PRINTR  """My al___ has no glamour;
+Its '____e' tones do clam___.
+Can you find me?"""
+
+
+       .FUNCT  CLUE-4-F
+       EQUAL?  PRSA,V?READ,V?EXAMINE \FALSE
+       CALL    NOT-HOLDING?,PRSO
+       ZERO?   STACK \TRUE
+       FSET    CLUE-4,TOUCHBIT
+       FSET    CLUE-4,TAKEBIT
+       CALL    HE-SHE-IT,CLUE-4,TRUE-VALUE
+       PRINTI  " says,
+"
+       EQUAL?  VARIATION,LORD-C \?CCL10
+       SET     'CLUE-LOC,FOYER
+       PRINTR  """Out of the sunshine, into the rain...
+The end of the story is... Abel and CAIN.""
+The last word is underlined."
+?CCL10:        EQUAL?  VARIATION,FRIEND-C \?CCL14
+       SET     'CLUE-LOC,BASEMENT
+       PRINTR  """If you search for 'A Cask of Amontillado,' don't get trapped!"""
+?CCL14:        SET     'CLUE-LOC,OFFICE
+       PRINTR  """My third is the silent side of knight.
+All together I am what you could use for poison-pen letters."""
+
+
+       .FUNCT  PRINT-COLOR,X=0
+       ZERO?   VARIATION \?CCL3
+       ZERO?   X /FALSE
+?CCL3: GETB    FAVE-COLOR,0
+       CALL    WORD-PRINT,STACK,1,FAVE-COLOR
+       ZERO?   COLOR-FORCED /TRUE
+       PRINTI  " and "
+       PRINTB  COLOR-FORCED
+       RTRUE   
+
+
+       .FUNCT  TELL-SUFFIX,I,J=1
+       GETB    SUFFIX,0 >I
+       ZERO?   I /FALSE
+       PRINTI  ", "
+       EQUAL?  JUNIOR-C,I \?CCL7
+       PRINTI  "Junior"
+       RTRUE   
+?CCL7: EQUAL?  SENIOR-C,I \?PRG13
+       PRINTI  "Senior"
+       RTRUE   
+?PRG13:        GETB    SUFFIX,J
+       PRINTC  STACK
+       DLESS?  'I,1 /TRUE
+       INC     'J
+       JUMP    ?PRG13
+
+
+       .FUNCT  TITLE-NAME
+       CALL    TITLE
+       EQUAL?  TITLE-WORD,W?MRS,W?MS,W?MISS /?PRG7
+       EQUAL?  TITLE-WORD,W?MISTER,W?MR /?PRG7
+       EQUAL?  TITLE-WORD,W?DOCTOR,W?DR \?PRG9
+?PRG7: CALL    PRINT-NAME,LAST-NAME
+       RSTACK  
+?PRG9: CALL    PRINT-NAME,FIRST-NAME
+       RSTACK  
+
+
+       .FUNCT  TITLE
+       EQUAL?  TITLE-WORD,W?MRS \?CCL3
+       PRINTI  "Mrs. "
+       RTRUE   
+?CCL3: EQUAL?  TITLE-WORD,W?MS \?CCL7
+       PRINTI  "Ms. "
+       RTRUE   
+?CCL7: EQUAL?  TITLE-WORD,W?MISS \?CCL11
+       PRINTI  "Miss "
+       RTRUE   
+?CCL11:        EQUAL?  TITLE-WORD,W?LADY \?CCL15
+       PRINTI  "Lady "
+       RTRUE   
+?CCL15:        EQUAL?  TITLE-WORD,W?DAME \?CCL19
+       PRINTI  "Dame "
+       RTRUE   
+?CCL19:        EQUAL?  TITLE-WORD,W?MADAME,W?MADAM \?CCL23
+       PRINTI  "Madame "
+       RTRUE   
+?CCL23:        EQUAL?  TITLE-WORD,W?DOCTOR,W?DR \?CCL27
+       PRINTI  "Dr. "
+       RTRUE   
+?CCL27:        EQUAL?  TITLE-WORD,W?LORD \?CCL31
+       PRINTI  "Lord "
+       RTRUE   
+?CCL31:        EQUAL?  TITLE-WORD,W?SIR \?CCL35
+       PRINTI  "Sir "
+       RTRUE   
+?CCL35:        EQUAL?  TITLE-WORD,W?MISTER,W?MR \?CCL39
+       PRINTI  "Mr. "
+       RTRUE   
+?CCL39:        EQUAL?  TITLE-WORD,W?MASTER \FALSE
+       PRINTI  "Master "
+       RTRUE   
+
+
+       .FUNCT  NON-BLANK-STUFF,DEST,SRC,CNT,ND=1,NS=0,B,OB=32
+       DEC     'CNT
+?PRG1: GETB    SRC,NS >B
+       EQUAL?  B,32 \?CCL4
+       EQUAL?  NS,CNT /?CND3
+       EQUAL?  OB,32 /?CND3
+?CCL4: PUTB    DEST,ND,B
+       INC     'ND
+       SET     'OB,B
+?CND3: IGRTR?  'NS,CNT \?PRG1
+       SUB     ND,1
+       PUTB    DEST,0,STACK
+       RTRUE   
+
+
+       .FUNCT  FULL-NAME,NO-TELL=0
+       PUTB    SUFFIX,0,0
+       PUTB    LAST-NAME,0,0
+       SET     'MIDDLE-WORD,0
+       SET     'TITLE-WORD,0
+       ZERO?   NO-TELL \TRUE
+       PRINTR  """I said: Please state your full name."""
+
+
+       .FUNCT  GET-NAME,NUM,N,M,I,BEG,END,?TMP1
+       PUTB    P-INBUF,0,30
+?PRG1: PRINTC  62
+       READ    P-INBUF,P-LEXV
+       GETB    P-LEXV,P-LEXWORDS >NUM
+       ZERO?   NUM \?CND5
+       PRINTC  34
+       PRINT   BEG-PARDON
+       PRINTI  """ "
+       JUMP    ?PRG1
+?CND5: SET     'N,P-LEXSTART
+       GET     P-LEXV,N >BEG
+       CALL    TITLE-NOUN?,BEG
+       ZERO?   STACK /?CND9
+       DEC     'NUM
+       ADD     N,P-LEXELEN >N
+       SET     'TITLE-WORD,BEG
+       EQUAL?  BEG,W?DOCTOR,W?DR,W?DETECT /?CND11
+       SET     'GENDER-KNOWN,TRUE-VALUE
+?CND11:        EQUAL?  BEG,W?MR,W?MISTER,W?MASTER /?CCL15
+       EQUAL?  BEG,W?LORD,W?SIR \?PRG18
+?CCL15:        FCLEAR  PLAYER,FEMALE
+?PRG18:        GET     P-LEXV,N
+       EQUAL?  STACK,W?PERIOD \?CND9
+       DEC     'NUM
+       ADD     N,P-LEXELEN >N
+       JUMP    ?PRG18
+?CND9: LESS?   NUM,2 \?CND23
+       EQUAL?  BEG,W?QUIT,W?Q \?CCL27
+       CALL    V-QUIT
+       JUMP    ?CND25
+?CCL27:        EQUAL?  BEG,W?RESTART \?CCL29
+       CALL    V-RESTART
+       JUMP    ?CND25
+?CCL29:        EQUAL?  BEG,W?RESTORE \?CND25
+       CALL    V-RESTORE
+?CND25:        CALL    FULL-NAME
+       JUMP    ?PRG1
+?CND23:        SET     'BEG,N
+       SUB     NUM,1
+       MUL     P-LEXELEN,STACK
+       ADD     N,STACK >END
+?PRG31:        GET     P-LEXV,END
+       EQUAL?  STACK,W?PERIOD,W?!,W?? \?REP32
+       SUB     END,P-LEXELEN >END
+       JUMP    ?PRG31
+?REP32:        LESS?   BEG,END /?CND36
+       CALL    FULL-NAME
+       JUMP    ?PRG1
+?CND36:        GET     P-LEXV,END
+       EQUAL?  STACK,W?SR,W?SENIOR \?CCL40
+       SUB     END,P-LEXELEN >END
+       PUTB    SUFFIX,0,SENIOR-C
+       JUMP    ?PRG51
+?CCL40:        GET     P-LEXV,END
+       EQUAL?  STACK,W?JR,W?JUNIOR \?CCL42
+       SUB     END,P-LEXELEN >END
+       PUTB    SUFFIX,0,JUNIOR-C
+       JUMP    ?PRG51
+?CCL42:        ADD     END,1
+       MUL     2,STACK >N
+       GETB    P-LEXV,N >NUM
+       LESS?   NUM,6 \?PRG51
+       ADD     1,N
+       GETB    P-LEXV,STACK >M
+       SET     'I,0
+?PRG44:        DLESS?  'NUM,0 /?CCL48
+       GETB    P-INBUF,M
+       EQUAL?  STACK,105,118,120 \?PRG51
+       INC     'I
+       GETB    P-INBUF,M
+       SUB     STACK,32
+       PUTB    SUFFIX,I,STACK
+       INC     'M
+       JUMP    ?PRG44
+?CCL48:        PUTB    SUFFIX,0,I
+       SUB     END,P-LEXELEN >END
+?PRG51:        GET     P-LEXV,END
+       EQUAL?  STACK,W?PERIOD,W?COMMA,W?THE \?REP52
+       SUB     END,P-LEXELEN >END
+       JUMP    ?PRG51
+?REP52:        LESS?   BEG,END /?CND56
+       CALL    FULL-NAME
+       JUMP    ?PRG1
+?CND56:        ADD     END,1
+       MUL     2,STACK >N
+       GETB    P-LEXV,N >NUM
+       SUB     END,P-LEXELEN >END
+       GET     P-LEXV,END
+       EQUAL?  STACK,W?APOSTROPHE \?CND58
+       SUB     END,P-LEXELEN >END
+       ADD     END,1
+       MUL     2,STACK >N
+       GETB    P-LEXV,N
+       ADD     NUM,STACK >NUM
+       INC     'NUM
+?CND58:        GRTR?   BEG,END \?CND60
+       CALL    FULL-NAME
+       JUMP    ?PRG1
+?CND60:        ADD     BEG,P-LEXELEN >I
+?PRG62:        GRTR?   I,END \?CCL66
+       SET     'MIDDLE-WORD,0
+       JUMP    ?REP63
+?CCL66:        GET     P-LEXV,I >M
+       EQUAL?  M,W?THE,W?OF,W?COMMA /?CCL68
+       ADD     I,P-LEXELEN >I
+       JUMP    ?PRG62
+?CCL68:        SET     'MIDDLE-WORD,M
+       ADD     I,P-LEXELEN
+       ADD     1,STACK
+       MUL     2,STACK >M
+       ADD     1,N
+       GETB    P-LEXV,STACK >?TMP1
+       ADD     1,M
+       GETB    P-LEXV,STACK
+       SUB     ?TMP1,STACK
+       ADD     NUM,STACK >NUM
+       SET     'N,M
+?REP63:        ADD     1,N
+       GETB    P-LEXV,STACK
+       ADD     P-INBUF,STACK
+       CALL    NON-BLANK-STUFF,LAST-NAME,STACK,NUM
+       SUB     N,P-WORDLEN >N
+       ZERO?   MIDDLE-WORD /?CND69
+       SUB     N,P-WORDLEN >N
+?CND69:        MUL     2,BEG
+       ADD     3,STACK
+       GETB    P-LEXV,STACK >BEG
+       GETB    P-LEXV,N >?TMP1
+       ADD     1,N
+       GETB    P-LEXV,STACK
+       ADD     ?TMP1,STACK
+       ADD     -1,STACK >END
+       SUB     END,BEG
+       ADD     1,STACK >N
+       ADD     P-INBUF,BEG
+       CALL    NON-BLANK-STUFF,FIRST-NAME,STACK,N
+       PRINTI  """Did you say your name is "
+       CALL    TELL-FULL-NAME
+       PRINTI  "?"""
+       CALL    YES?
+       ZERO?   STACK /?PRG78
+       PUTB    P-INBUF,0,80
+       RTRUE   
+?PRG78:        PRINTI  """Then please speak up.""
+"
+       CALL    FULL-NAME,TRUE-VALUE
+       JUMP    ?PRG1
+
+
+       .FUNCT  PRINT-NAME,TBL,PTR=0,LEN,CH,OCH,SP?=1
+       GETB    TBL,0 >LEN
+?PRG1: IGRTR?  'PTR,LEN /?REP2
+       SET     'OCH,CH
+       GETB    TBL,PTR >CH
+       LESS?   CH,97 /?CTR6
+       GRTR?   CH,122 \?CCL7
+?CTR6: PRINTC  CH
+       JUMP    ?CND5
+?CCL7: ZERO?   SP? /?CCL11
+       SUB     CH,32
+       PRINTC  STACK
+       JUMP    ?CND5
+?CCL11:        EQUAL?  OCH,39 \?CTR12
+       EQUAL?  PTR,LEN /?CTR12
+       ADD     1,PTR
+       GETB    TBL,STACK
+       EQUAL?  32,STACK \?CCL13
+?CTR12:        PRINTC  CH
+       JUMP    ?CND5
+?CCL13:        SUB     CH,32
+       PRINTC  STACK
+?CND5: EQUAL?  CH,32,46 /?CTR18
+       EQUAL?  CH,45,38 \?CCL19
+?CTR18:        SET     'SP?,TRUE-VALUE
+       JUMP    ?PRG1
+?CCL19:        SET     'SP?,FALSE-VALUE
+       JUMP    ?PRG1
+?REP2: EQUAL?  CH,46 /FALSE
+       RTRUE   
+
+       .ENDI
index 23377f5eea3d0d13e2d972f60ff696fcc8ac0d07..96640748b7fae9672564d78f80f4c5fd22bfc9e8 100644 (file)
@@ -82,6 +82,8 @@ into the " 'COURTYARD ".|">>
                                 (T <SET SUM <+ .SUM <GETB ,P-INBUF .NUM>>>)>>
                      <COND (<SET X <ZMEMQ .SUM ,COLOR-LETTERS>>
                             <SETG VARIATION .X>)
+                           (<EQUAL? .SUM %<ASCII !\p>> ;"pink => blue"
+                            <SETG VARIATION ,PAINTER-C>)
                            (T <SETG VARIATION <+ 1 <MOD .SUM ,MAX-VARS>>>)>
                      <SETG COLOR-FORCED <GET ,COLOR-WORDS ,VARIATION>>)>
               <DO-VARIATION>
@@ -681,7 +683,7 @@ what you could use for poison-pen letters.\"" CR>)>)>>
 <GLOBAL FIRST-NAME <TABLE #BYTE 0 #BYTE 120
                                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>> "x"
 <GLOBAL LAST-NAME  <TABLE #BYTE 0 #BYTE 116 #BYTE 101 #BYTE 115
-                                 #BYTE 116 #BYTE 101 #BYTE 114
+                                 #BYTE 116 #BYTE 101 #BYTE 114 #BYTE 0
                                0 0 0 0 0 0 0 0 0 0 0 0>> "tester"
 
 <GLOBAL SUFFIX <TABLE #BYTE 0 #BYTE 0 0 0>>
diff --git a/global.zap b/global.zap
new file mode 100644 (file)
index 0000000..bf46824
--- /dev/null
@@ -0,0 +1,667 @@
+
+
+       .FUNCT  LOCAL-GLOBALS-F
+       CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       CALL    CREEPY?,HERE
+       ZERO?   STACK \?CTR4
+       CALL    OUTSIDE?,HERE
+       ZERO?   STACK /?CCL5
+?CTR4: CALL    RANDOM-PSEUDO
+       RSTACK  
+?CCL5: CALL    NOT-HERE,LOCAL-GLOBALS
+       RSTACK  
+
+
+       .FUNCT  UPSTAIRS-DOWNSTAIRS,N,TBL,HR,?TMP1
+       LOC     WINNER >HR
+       EQUAL?  PRSA,V?WALK-TO,V?WALK,V?THROUGH /?CCL3
+       EQUAL?  PRSA,V?CLIMB-UP,V?CLIMB-DOWN,V?BOARD \FALSE
+?CCL3: FSET?   HR,SECRETBIT /FALSE
+       FSET?   HR,WEARBIT \?CCL10
+       SET     'TBL,WING-STAIRS
+       JUMP    ?CND6
+?CCL10:        SET     'TBL,TOWER-STAIRS
+?CND6: EQUAL?  PRSA,V?CLIMB-UP,V?BOARD \?CCL13
+       GETPT   HR,P?UP
+       ZERO?   STACK /?CCL17
+       CALL    DO-WALK,P?UP
+       RTRUE   
+?CCL17:        GETP    HR,P?CHARACTER >N
+       ZERO?   N /FALSE
+       GET     TBL,0 >?TMP1
+       INC     'N
+       LESS?   ?TMP1,N /FALSE
+       GET     TBL,N >N
+       CALL    PERFORM,V?WALK-TO,N
+       RTRUE   
+?CCL13:        GETPT   HR,P?DOWN
+       ZERO?   STACK /?CCL24
+       CALL    DO-WALK,P?DOWN
+       RTRUE   
+?CCL24:        GETP    HR,P?CHARACTER >N
+       ZERO?   N /FALSE
+       DEC     'N
+       LESS?   0,N \FALSE
+       GET     TBL,N >N
+       CALL    PERFORM,V?WALK-TO,N
+       RTRUE   
+
+
+       .FUNCT  DO-INSTEAD-OF,OBJ1,OBJ2
+       EQUAL?  PRSI,OBJ2 \?CCL3
+       CALL    PERFORM,PRSA,PRSO,OBJ1
+       RTRUE   
+?CCL3: EQUAL?  PRSO,OBJ2 \?CCL5
+       CALL    PERFORM,PRSA,OBJ1,PRSI
+       RTRUE   
+?CCL5: CALL    V-FOO
+       RSTACK  
+
+
+       .FUNCT  TURN-F
+       EQUAL?  PRSA,V?USE \FALSE
+       CALL    PERFORM,V?WAIT-FOR,PRSO
+       RTRUE   
+
+
+       .FUNCT  IT-F
+       EQUAL?  PRSI,IT \?PRD5
+       EQUAL?  PRSA,V?TELL-ABOUT /?PRG12
+       EQUAL?  PRSA,V?SEARCH-FOR,V?ASK-FOR,V?ASK-ABOUT /?PRG12
+?PRD5: EQUAL?  PRSO,IT \FALSE
+       EQUAL?  PRSA,V?FIND,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT \FALSE
+?PRG12:        PRINTR  """I'm not sure what you're talking about."""
+
+
+       .FUNCT  FLOOR-F,OBJ=0,N
+       EQUAL?  PRSA,V?CLIMB-ON \?CCL3
+       CALL    ALREADY,WINNER,STR?278
+       RSTACK  
+?CCL3: EQUAL?  PRSA,V?THROW-AT,V?PUT \?CCL5
+       EQUAL?  PRSO,MOONMIST /?CCL5
+       EQUAL?  PRSI,FLOOR \?CCL5
+       MOVE    PRSO,HERE
+       PRINTR  "Okay."
+?CCL5: EQUAL?  PRSA,V?SEARCH-FOR /?CTR11
+       EQUAL?  PRSA,V?SEARCH,V?LOOK-ON,V?EXAMINE \?CCL12
+?CTR11:        EQUAL?  HERE,DRAWING-ROOM \?CCL17
+       PRINTI  "The carpet ends flush with the archway to the "
+       PRINTD  GREAT-HALL
+       PRINTI  ", where the footsteps of visitors have begun to wear it thin. It's a magnificent red Brussels carpet with deep pile and a medieval design."
+       CRLF    
+       JUMP    ?CND15
+?CCL17:        EQUAL?  HERE,GREAT-HALL \?CND15
+       CALL    GREAT-HALL-IS-FLOORED
+?CND15:        EQUAL?  HERE,GARDEN \?CCL23
+       EQUAL?  VARIATION,LORD-C \?CCL23
+       FSET?   CLUE-4,SECRETBIT \?CCL23
+       SET     'OBJ,CLUE-4
+       JUMP    ?CND21
+?CCL23:        EQUAL?  HERE,DRAWING-ROOM \?CCL28
+       EQUAL?  VARIATION,LORD-C,FRIEND-C \?CCL28
+       FSET?   JEWEL,TOUCHBIT /?CCL28
+       SET     'OBJ,JEWEL
+       JUMP    ?CND21
+?CCL28:        EQUAL?  HERE,GREAT-HALL \?CND21
+       EQUAL?  VARIATION,DOCTOR-C,PAINTER-C \?CND21
+       EQUAL?  FOUND-IT-PERM,LENS,LENS-2 /?CND21
+       SET     'OBJ,LENS
+?CND21:        CALL    START-SEARCH,OBJ
+       RTRUE   
+?CCL12:        CALL    ADJ-USED?,W?DRAWING
+       ZERO?   STACK /?CCL37
+       EQUAL?  HERE,DRAWING-ROOM /FALSE
+       CALL    DO-INSTEAD-OF,DRAWING-ROOM,FLOOR
+       RTRUE   
+?CCL37:        CALL    ADJ-USED?,W?GREAT
+       ZERO?   STACK /FALSE
+       EQUAL?  HERE,GREAT-HALL /FALSE
+       CALL    DO-INSTEAD-OF,GREAT-HALL,FLOOR
+       RTRUE   
+
+
+       .FUNCT  START-SEARCH,OBJ=0
+       PRINTI  "Nothing suspicious meets your eye after a moment's scrutiny. Do you want to continue?"
+       CALL    YES?
+       ZERO?   STACK \?CCL5
+       CALL    OKAY
+       RTRUE   
+?CCL5: SET     'FOUND-IT,OBJ
+       SET     'FOUND-LOC,HERE
+       RANDOM  7
+       CALL    QUEUE,I-FOUND-IT,STACK
+       CALL    V-WAIT,8,FALSE-VALUE,TRUE-VALUE
+       RTRUE   
+
+
+       .FUNCT  I-FOUND-IT,GARG=0,OBJ
+       EQUAL?  FOUND-LOC,HERE \FALSE
+       EQUAL?  FOUND-IT,JEWEL \?CCL5
+       MOVE    FOUND-IT,HERE
+       PRINTI  "Suddenly you notice a glittering speck. Probing for it with your fingers, you discover a "
+       PRINTD  JEWEL
+       PRINTC  46
+       CRLF    
+       JUMP    ?CND1
+?CCL5: EQUAL?  FOUND-IT,LENS \?CCL9
+       FSET?   LENS,SEENBIT /?CCL12
+       LOC     LENS
+       MOVE    LENS-2,STACK
+       JUMP    ?CND10
+?CCL12:        FSET?   LENS-2,SEENBIT /FALSE
+       SET     'FOUND-IT,LENS-2
+       LOC     LENS
+       MOVE    LENS-1,STACK
+       REMOVE  LENS
+?CND10:        MOVE    FOUND-IT,HERE
+       PRINTI  "Suddenly you find something small, smooth and slippery -- a "
+       PRINTD  FOUND-IT
+       PRINTI  "! Its transparency, of course, made it practically invisible."
+       ZERO?   BUTLER-GHOST-STORY-TOLD /?CND17
+       PRINTI  " No wonder you and the ghost had such a hard time finding it!"
+?CND17:        CRLF    
+       JUMP    ?CND1
+?CCL9: ZERO?   FOUND-IT \?CCL22
+       PRINT   NOTHING-NEW
+       RETURN  2
+?CCL22:        FSET?   FOUND-IT,SECRETBIT \?PRG29
+       CALL    DISCOVER,FOUND-IT
+       JUMP    ?CND1
+?PRG29:        PRINTC  89
+       PRINT   OU-STOP-SEARCHING
+       PRINTI  " when you find"
+       CALL    PRINTT,FOUND-IT
+       PRINTI  ".
+"
+?CND1: FSET    FOUND-IT,TOUCHBIT
+       FSET    FOUND-IT,SEENBIT
+       EQUAL?  FOUND-IT,YOUR-SWITCH /?CND32
+       FCLEAR  FOUND-IT,NDESCBIT
+?CND32:        EQUAL?  FOUND-IT,LENS,LENS-2 \?CND34
+       SET     'FOUND-IT-PERM,FOUND-IT
+?CND34:        SET     'FOUND-IT,FALSE-VALUE
+       RETURN  2
+
+
+       .FUNCT  YOU-F,X
+       EQUAL?  WINNER,PLAYER /?CCL3
+       CALL    DO-INSTEAD-OF,WINNER,YOU
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?ASK-ABOUT \?CCL5
+       EQUAL?  PRSI,YOU \?CCL5
+       CALL    PERFORM,V?ASK-ABOUT,PRSO,PRSO
+       RTRUE   
+?CCL5: EQUAL?  PRSA,V?THANKS \FALSE
+       CALL    QCONTEXT-GOOD? >X
+       ZERO?   X /FALSE
+       CALL    PERFORM,V?THANKS,X
+       RTRUE   
+
+
+       .FUNCT  WALL-F,OBJ
+       EQUAL?  VARIATION,FRIEND-C \?CCL3
+       EQUAL?  HERE,BASEMENT,CRYPT \?CCL3
+       CALL    BRICKS-F
+       RSTACK  
+?CCL3: EQUAL?  PRSA,V?CLOSE,V?OPEN \?CCL7
+       CALL    FIND-FLAG-LG,HERE,DOORBIT,SECRETBIT >OBJ
+       ZERO?   OBJ /?CCL7
+       CALL    DO-INSTEAD-OF,OBJ,WALL
+       RTRUE   
+?CCL7: EQUAL?  PRSA,V?KNOCK \FALSE
+       FSET?   HERE,WEARBIT \?PRG17
+       CALL    FIND-FLAG-LG,HERE,DOORBIT,SECRETBIT
+       ZERO?   STACK /?PRG19
+?PRG17:        PRINTR  "You hear a hollow sound."
+?PRG19:        PRINTR  "Knocking on the walls reveals nothing unusual."
+
+
+       .FUNCT  GLOBAL-HERE-F,OBJ,X=0
+       EQUAL?  PRSA,V?WALK-TO,V?SMELL /?CTR2
+       EQUAL?  PRSA,V?SIT,V?LIE,V?EXAMINE \?CCL3
+?CTR2: CALL    DO-INSTEAD-OF,HERE,GLOBAL-HERE
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?PUT-IN,V?PUT \?CCL7
+       CALL    MORE-SPECIFIC
+       RSTACK  
+?CCL7: EQUAL?  PRSA,V?SEARCH-FOR,V?SEARCH \FALSE
+       IN?     MAGAZINE,HERE \?CCL12
+       FSET?   MAGAZINE,NDESCBIT \?CCL12
+       SET     'X,MAGAZINE
+       JUMP    ?CND10
+?CCL12:        IN?     BRICKS,HERE \?CCL16
+       FSET?   BRICKS,NDESCBIT \?CCL16
+       SET     'X,BRICKS
+       JUMP    ?CND10
+?CCL16:        ZERO?   PRSI /?CCL20
+       CALL    META-LOC,PRSI
+       EQUAL?  STACK,HERE \?CCL20
+       SET     'X,PRSI
+       JUMP    ?CND10
+?CCL20:        FIRST?  HERE >OBJ /?PRG24
+?PRG24:        ZERO?   OBJ /?CND10
+       FSET?   OBJ,SECRETBIT \?CCL30
+       SET     'X,OBJ
+       JUMP    ?CND10
+?CCL30:        FSET?   OBJ,PERSONBIT /?CCL32
+       FSET?   OBJ,CONTBIT /?PRD35
+       FSET?   OBJ,SURFACEBIT \?CCL32
+?PRD35:        CALL    FIND-FLAG,OBJ,SECRETBIT >X
+       ZERO?   X \?CTR31
+       CALL    FIND-FLAG,OBJ,RMUNGBIT >X
+       ZERO?   X /?CCL32
+?CTR31:        FSET    OBJ,OPENBIT
+?CND10:        CALL    START-SEARCH,X
+       RTRUE   
+?CCL32:        NEXT?   OBJ >OBJ /?PRG24
+       JUMP    ?PRG24
+
+
+       .FUNCT  CHAIR-F
+       EQUAL?  PRSA,V?BOARD,V?CLIMB-ON,V?SIT \?CCL3
+       CALL    WONT-HELP
+       RSTACK  
+?CCL3: CALL    RANDOM-PSEUDO
+       RSTACK  
+
+
+       .FUNCT  CLOTHES-FCN
+       EQUAL?  PRSA,V?LOOK-INSIDE,V?EXAMINE \?CCL3
+       EQUAL?  PRSO,TWEED-OUTFIT \?CCL6
+       PRINTI  "These are sensible clothes for this clammy climate: your new tweed "
+       ZERO?   GENDER-KNOWN \?PRG14
+       PRINTI  "suit"
+       JUMP    ?PRG23
+?PRG14:        PRINTI  "blazer and "
+       FSET?   PLAYER,FEMALE \?PRG21
+       PRINTI  "skirt"
+       JUMP    ?PRG23
+?PRG21:        PRINTI  "pants"
+?PRG23:        PRINTR  ", with woolen sweater, should keep you warm enough."
+?CCL6: EQUAL?  PRSO,EXERCISE-OUTFIT \?CCL26
+       PRINTI  "This is your favorite outfit for workouts: a cotton sweatsuit with a sporty "
+       CALL    PRINT-COLOR
+       ZERO?   STACK /?PRG33
+       PRINTC  32
+?PRG33:        PRINTR  "stripe."
+?CCL26:        EQUAL?  PRSO,DINNER-OUTFIT \?PRG70
+       ZERO?   GENDER-KNOWN \?PRG42
+       PRINTI  "You have a decent formal ensemble, with frills in the right places"
+       JUMP    ?PRG53
+?PRG42:        PRINTI  "Your new "
+       FSET?   PLAYER,FEMALE \?PRG49
+       PRINTI  "floor-length dinner gown"
+       JUMP    ?PRG51
+?PRG49:        PRINTI  "tuxedo"
+?PRG51:        PRINTI  " is particularly good-looking"
+?PRG53:        PRINTI  " and a perfect fit"
+       ZERO?   VARIATION /?PRG68
+       PRINTI  ", "
+       FSET?   PLAYER,FEMALE \?PRG64
+       PRINTI  "not to mention that it's all"
+       JUMP    ?PRG66
+?PRG64:        PRINTI  "with shirt and accessories"
+?PRG66:        PRINTI  " in "
+       CALL    PRINT-COLOR
+?PRG68:        PRINTR  "."
+?PRG70:        PRINTI  "Your new "
+       CALL    PRINT-COLOR
+       ZERO?   STACK /?PRG76
+       PRINTC  32
+?PRG76:        PRINTD  SLEEP-OUTFIT
+       PRINTI  " is "
+       ZERO?   GENDER-KNOWN \?CCL80
+       PRINTR  "nothing to write home about, but it is so-o-o comfy for sleeping."
+?CCL80:        FSET?   PLAYER,FEMALE \?PRG87
+       PRINTR  "made of fine Chinese silk."
+?PRG87:        PRINTR  "decorated with a Union Jack flag."
+?CCL3: EQUAL?  PRSA,V?DISEMBARK \?CCL90
+       CALL    PERFORM,V?TAKE-OFF,PRSO
+       RTRUE   
+?CCL90:        EQUAL?  PRSA,V?EMPTY \FALSE
+       CALL    META-LOC,LUGGAGE
+       EQUAL?  STACK,HERE \?CCL95
+       CALL    PERFORM,V?EMPTY,LUGGAGE
+       RTRUE   
+?CCL95:        CALL    NOT-HERE,LUGGAGE
+       RSTACK  
+
+
+       .FUNCT  SLEEP-GLOBAL-F
+       EQUAL?  PRSA,V?DRESS \?CCL3
+       CALL    META-LOC,SLEEP-OUTFIT
+       EQUAL?  HERE,STACK \FALSE
+       CALL    PERFORM,V?WEAR,SLEEP-OUTFIT
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?WALK-TO \FALSE
+       CALL    PERFORM,V?FAINT
+       RTRUE   
+
+
+       .FUNCT  ROB,WHAT,THIEF,TELL?=0,N,X,TOLD?=0
+       FIRST?  WHAT >X /?PRG2
+?PRG2: ZERO?   X /TRUE
+       NEXT?   X >N /?BOGUS6
+?BOGUS6:       ZERO?   N \?CND7
+       ZERO?   TOLD? /?CND7
+       ZERO?   TELL? /?CND7
+       PRINTI  " and"
+?CND7: SET     'TOLD?,TRUE-VALUE
+       ZERO?   TELL? /?CND14
+       CALL    PRINTT,X
+       ZERO?   N /?PRG23
+       PRINTC  44
+       JUMP    ?CND14
+?PRG23:        PRINTI  ". "
+?CND14:        MOVE    X,THIEF
+       SET     'X,N
+       JUMP    ?PRG2
+
+
+       .FUNCT  LIGHT-GLOBAL-F,P
+       CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       EQUAL?  PRSA,V?LAMP-OFF,V?LAMP-ON \FALSE
+       CALL    CREEPY?,HERE
+       ZERO?   STACK /?CCL8
+       CALL    ACCESSIBLE?,LAMP
+       ZERO?   STACK /?CCL11
+       CALL    PERFORM,PRSA,LAMP
+       RTRUE   
+?CCL11:        CALL    NOT-HERE,LIGHT-GLOBAL
+       RSTACK  
+?CCL8: CALL    OUTSIDE?,HERE
+       ZERO?   STACK /?CCL13
+       PRINTR  "You can't reach it from here."
+?CCL13:        EQUAL?  PRSA,V?LAMP-ON \?CCL18
+       FSET?   HERE,ONBIT \?CCL21
+       CALL    ALREADY,LIGHT-GLOBAL,STR?64
+       RSTACK  
+?CCL21:        FSET    HERE,ONBIT
+       CALL    OKAY,LIGHT-GLOBAL,STR?64
+       RSTACK  
+?CCL18:        EQUAL?  PRSA,V?LAMP-OFF \FALSE
+       FSET?   HERE,ONBIT /?CCL26
+       CALL    ALREADY,LIGHT-GLOBAL,STR?65
+       RSTACK  
+?CCL26:        CALL    FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,PLAYER >P
+       ZERO?   P /?CCL28
+       PRINTD  P
+       PRINTR  " says, ""Please don't leave us in the dark."""
+?CCL28:        FCLEAR  HERE,ONBIT
+       CALL    OKAY,LIGHT-GLOBAL,STR?65
+       RSTACK  
+
+
+       .FUNCT  HAUNTING-F
+       EQUAL?  PRSA,V?PLAY,V?LAMP-ON \FALSE
+       CALL    PERFORM,PRSA,COMPUTER
+       RTRUE   
+
+
+       .FUNCT  KEYHOLE-F,P,RM
+       CALL    REMOTE-VERB?
+       ZERO?   STACK /?CCL3
+       EQUAL?  PRSA,V?SEARCH-FOR,V?SEARCH \FALSE
+?CCL3: CALL    ADJ-USED?,FALSE-VALUE
+       ZERO?   STACK /?CCL7
+       CALL    ZMEMQ,HERE,CHAR-ROOM-TABLE
+       ZERO?   STACK /?CCL10
+       GETPT   HERE,P?OUT
+       GETB    STACK,REXIT >RM
+       JUMP    ?CND1
+?CCL10:        EQUAL?  HERE,CORR-2 /?PRG15
+       EQUAL?  HERE,WEST-HALL,GALLERY,EAST-HALL \?CCL12
+?PRG15:        PRINT   YOU-DIDNT-SAY-W
+       PRINTI  "hose "
+       PRINTD  KEYHOLE
+       PRINTR  "!]"
+?CCL12:        CALL    NOT-HERE,KEYHOLE
+       RTRUE   
+?CCL7: CALL    ADJ-USED?
+       CALL    ZMEMQ,STACK,CHAR-POSS-TABLE >P
+       ZERO?   P /?CND1
+       GET     CHAR-ROOM-TABLE,P >RM
+       EQUAL?  HERE,RM \?CCL21
+       GETPT   HERE,P?OUT
+       GETB    STACK,REXIT >RM
+?CND1: EQUAL?  PRSA,V?SEARCH-FOR,V?SEARCH /?CCL25
+       EQUAL?  PRSA,V?LOOK-THROUGH,V?LOOK-INSIDE,V?EXAMINE \FALSE
+?CCL25:        EQUAL?  JACK-ROOM,HERE,RM \?CCL30
+       EQUAL?  VARIATION,LORD-C \?CCL30
+       PRINTI  "You see a microphone with its wires leading toward the "
+       PRINTD  CREST
+       PRINTR  "."
+?CCL21:        GETPT   RM,P?OUT
+       GETB    STACK,REXIT
+       EQUAL?  HERE,STACK /?CND1
+       CALL    NOT-HERE,KEYHOLE
+       RTRUE   
+?CCL30:        CALL    ROOM-PEEK,RM,TRUE-VALUE
+       RTRUE   
+
+
+       .FUNCT  HANDS-F,P,A
+       CALL    FIND-BODY,HANDS >P
+       ZERO?   P /TRUE
+       CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       EQUAL?  PRSA,V?KISS \?CCL7
+       FSET?   P,FEMALE \?CCL10
+       ZERO?   GENDER-KNOWN /?CCL10
+       FSET?   PLAYER,FEMALE /?CCL10
+       CALL    PERFORM,V?HELLO,P
+       RTRUE   
+?CCL10:        CALL    PERFORM,V?KISS,P
+       RTRUE   
+?CCL7: EQUAL?  PRSA,V?TAKE,V?SHAKE \FALSE
+       EQUAL?  PRSO,HANDS \FALSE
+       ZERO?   PRSI /?CND18
+       SET     'P,PRSI
+?CND18:        CALL    PERFORM,V?HELLO,P
+       RTRUE   
+
+
+       .FUNCT  HEAD-F,P,P2
+       CALL    FIND-BODY,HEAD >P
+       ZERO?   P /TRUE
+       CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       EQUAL?  PRSA,V?NOD \?CCL7
+       CALL    PERFORM,V?YES
+       RTRUE   
+?CCL7: EQUAL?  PRSA,V?SHAKE \FALSE
+       CALL    PERFORM,V?NO
+       RTRUE   
+
+
+       .FUNCT  EYE-F,P,P2
+       CALL    FIND-BODY,EYE >P
+       ZERO?   P /TRUE
+       CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       EQUAL?  PRSA,V?OPEN \?CCL7
+       SET     'WINNER,PLAYER
+       CALL    PERFORM,V?ALARM,P
+       RTRUE   
+?CCL7: EQUAL?  PRSA,V?CLOSE \?CCL9
+       SET     'WINNER,P
+       CALL    PERFORM,V?FAINT
+       RTRUE   
+?CCL9: EQUAL?  PRSA,V?LOOK-INSIDE,V?FIND,V?EXAMINE \FALSE
+       EQUAL?  P,PLAYER \?CCL14
+       FSET?   HERE,WORNBIT /?CCL14
+       CALL    NOT-HERE,MIRROR-GLOBAL
+       RSTACK  
+?CCL14:        EQUAL?  GHOST-NEW,P \?CCL18
+       CALL    PERFORM,PRSA,GHOST-NEW
+       RTRUE   
+?CCL18:        FSET?   LENS,SEENBIT /?PRG37
+       FSET?   P,MUNGBIT \?CCL24
+       CALL    HE-SHE-IT,P,TRUE-VALUE
+       PRINTR  " has closed eyes."
+?CCL24:        GETP    P,P?CHARACTER
+       EQUAL?  VARIATION,STACK \?CCL28
+       CALL    HE-SHE-IT,P,TRUE-VALUE
+       PRINTR  " turns away from you."
+?CCL28:        LESS?   BED-TIME,PRESENT-TIME \?PRG35
+       CALL    HE-SHE-IT,P,TRUE-VALUE,STR?84
+       PRINTR  " sleepy."
+?PRG35:        CALL    HE-SHE-IT,P,TRUE-VALUE,STR?218
+       PRINTR  " at you."
+?PRG37:        CALL    HE-SHE-IT,P,TRUE-VALUE,STR?1
+       EQUAL?  P,DEALER \?PRG43
+       EQUAL?  VARIATION,PAINTER-C \?PRG45
+?PRG43:        PRINTI  " not"
+?PRG45:        PRINTI  " wearing a "
+       PRINTD  LENS
+       PRINTR  "."
+
+
+       .FUNCT  OTHER-OUTFIT-F,P,P2
+       CALL    FIND-BODY,OTHER-OUTFIT >P
+       ZERO?   P /TRUE
+       CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       EQUAL?  PRSA,V?LOOK-INSIDE,V?FIND,V?EXAMINE \?CCL7
+       EQUAL?  GHOST-NEW,P \FALSE
+       CALL    PERFORM,PRSA,GHOST-NEW
+       RTRUE   
+?CCL7: EQUAL?  PRSA,V?TAKE-OFF,V?REMOVE,V?DISEMBARK \FALSE
+       CALL    YOU-SHOULDNT
+       RTRUE   
+
+
+       .FUNCT  FIND-BODY,OBJ,A,P
+       CALL    ADJ-USED? >A
+       ZERO?   A \?CCL3
+       PRINT   I-ASSUME
+       PRINTC  32
+       EQUAL?  PRSA,V?SEARCH-FOR,V?FIND,V?CLOSE /?CTR7
+       EQUAL?  PRSA,V?SLAP /?PRD12
+       EQUAL?  PRSA,V?MUNG,V?KILL,V?ATTACK \?CCL8
+?PRD12:        ZERO?   NOW-PRSI /?CCL8
+?CTR7: SET     'P,PLAYER
+       PRINTI  "your"
+       JUMP    ?CND6
+?CCL8: EQUAL?  PRSA,V?SHAKE \?PRD20
+       ZERO?   PRSI /?PRD20
+       SET     'P,PRSI
+       FSET?   P,PERSONBIT /?PRG25
+?PRD20:        CALL    QCONTEXT-GOOD? >P
+       ZERO?   P \?PRG25
+       CALL    FIND-FLAG-HERE,PERSONBIT,PLAYER >P
+       ZERO?   P /?CCL18
+?PRG25:        PRINTD  P
+       PRINTI  "'s"
+       JUMP    ?CND6
+?CCL18:        SET     'P,PLAYER
+       PRINTI  "your"
+?CND6: GETP    P,P?CHARACTER
+       ADD     1,STACK
+       GET     CHAR-POSS-TABLE,STACK
+       PUT     P-ADJW,NOW-PRSI,STACK
+       PRINTC  32
+       GET     P-NAMW,NOW-PRSI >A
+       ZERO?   A /?PRG34
+       PRINTB  A
+       JUMP    ?PRG36
+?PRG34:        PRINTD  OBJ
+?PRG36:        PRINTI  ".]"
+       CRLF    
+       JUMP    ?CND1
+?CCL3: CALL    ZMEMQ,A,CHAR-POSS-TABLE >P
+       ZERO?   P /?CCL39
+       SUB     P,1
+       GET     CHARACTER-TABLE,STACK >P
+       JUMP    ?CND1
+?CCL39:        EQUAL?  A,W?HER \?CCL41
+       SET     'P,P-HER-OBJECT
+       JUMP    ?CND1
+?CCL41:        EQUAL?  A,W?HIS \?CND1
+       SET     'P,P-HIM-OBJECT
+?CND1: ZERO?   P \?CND43
+       CALL    DONT-UNDERSTAND
+       RFALSE  
+?CND43:        CALL    THIS-IS-IT,P
+       CALL    META-LOC,P
+       EQUAL?  STACK,HERE /?CCL47
+       CALL    NOT-HERE,P
+       RFALSE  
+?CCL47:        CALL    DIVESTMENT?,OBJ
+       ZERO?   STACK /?CCL49
+       CALL    HAR-HAR
+       RFALSE  
+?CCL49:        RETURN  P
+
+
+       .FUNCT  PASSAGE-F,RM
+       CALL    FIND-FLAG-LG,HERE,DOORBIT,SECRETBIT >RM
+       EQUAL?  PRSA,V?WALK-TO,V?TAKE \?CCL3
+       CALL    PERFORM,V?THROUGH,PRSO
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?CLOSE,V?OPEN \?CCL5
+       ZERO?   RM /?CCL5
+       CALL    DO-INSTEAD-OF,RM,PASSAGE
+       RTRUE   
+?CCL5: FSET?   HERE,SECRETBIT \?CCL9
+       CALL    DO-INSTEAD-OF,HERE,PASSAGE
+       RTRUE   
+?CCL9: CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       ZERO?   RM /?CCL14
+       CALL    DOOR-ROOM,HERE,RM >RM
+       ZERO?   RM /?CCL14
+       FSET?   RM,SEENBIT \?CCL14
+       CALL    DO-INSTEAD-OF,RM,PASSAGE
+       RTRUE   
+?CCL14:        CALL    GENERIC-CLOSET,0 >RM
+       ZERO?   RM /?CCL19
+       CALL    DO-INSTEAD-OF,RM,PASSAGE
+       RTRUE   
+?CCL19:        CALL    NOT-HERE,PASSAGE
+       RSTACK  
+
+
+       .FUNCT  CORPSE-F
+       EQUAL?  PRSA,V?FIND \FALSE
+       CALL    WHO-KNOWS?,CORPSE
+       RSTACK  
+
+
+       .FUNCT  UNDRESSED-F
+       CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+       EQUAL?  PRSA,V?TAKE /FALSE
+       EQUAL?  PRSA,V?LOOK-ON /?CTR6
+       EQUAL?  PRSA,V?LOOK-INSIDE,V?EXAMINE,V?SEARCH-FOR /?CTR6
+       EQUAL?  PRSA,V?SEARCH,V?CLOSE,V?OPEN \?CCL7
+?CTR6: CALL    GLOBAL-IN?,DRESSING-TABLE-LG,HERE
+       ZERO?   STACK /?CCL13
+       CALL    DO-INSTEAD-OF,DRESSING-TABLE-LG,UNDRESSED
+       RTRUE   
+?CCL13:        CALL    NOT-HERE,DRESSING-TABLE-LG
+       RSTACK  
+?CCL7: CALL    DONT-UNDERSTAND
+       RSTACK  
+
+
+       .FUNCT  ARTIFACT-F
+       ZERO?   TREASURE-FOUND /?CCL3
+       CALL    DO-INSTEAD-OF,TREASURE,ARTIFACT
+       RTRUE   
+?CCL3: EQUAL?  PRSA,V?TAKE-TO,V?SSHOW,V?SHOW /?CCL5
+       CALL    REMOTE-VERB?
+       ZERO?   STACK \FALSE
+?CCL5: CALL    NOT-FOUND,ARTIFACT
+       RTRUE   
+
+
+       .FUNCT  TIMES-UP
+       PRINTI  "At first light, the police arrive and take over the investigation."
+       CRLF    
+       CALL    FINISH
+       RSTACK  
+
+       .ENDI
diff --git a/global.zil b/global.zil
new file mode 100644 (file)
index 0000000..23b97cc
--- /dev/null
@@ -0,0 +1,906 @@
+"GLOBALS for MOONMIST
+Copyright (C) 1986 Infocom, Inc.  All rights reserved."
+
+<OBJECT GLOBAL-OBJECTS
+       (DESC "GO")
+       ;(FDESC 0)
+       (TEXT 0)
+       (FLAGS  CONTBIT DOORBIT FEMALE
+               INVISIBLE LIGHTBIT LOCKED MUNGBIT
+               NARTICLEBIT NDESCBIT ONBIT OPENBIT
+               ;PERSONBIT READBIT RMUNGBIT
+               SEARCHBIT SECRETBIT SEENBIT SURFACEBIT
+               TAKEBIT TOOLBIT TOUCHBIT TRANSBIT TRYTAKEBIT
+               VEHBIT VOWELBIT WEAPONBIT WEARBIT WORNBIT)>
+
+<OBJECT LOCAL-GLOBALS
+       (IN GLOBAL-OBJECTS)
+       (DESC "stone" ;"LG")
+       (SYNONYM STONE ;L.G)
+       (FLAGS NARTICLEBIT)
+       (ACTION LOCAL-GLOBALS-F)>
+
+<ROUTINE LOCAL-GLOBALS-F ()
+ <COND (<REMOTE-VERB?>
+       <RFALSE>)
+       (<OR <CREEPY? ,HERE> <OUTSIDE? ,HERE>>
+       <RANDOM-PSEUDO>)
+       (T <NOT-HERE ,LOCAL-GLOBALS>)>>
+
+<OBJECT STAIRS
+       (IN LOCAL-GLOBALS)
+       (DESC "stairs")
+       (SYNONYM STAIRS STAIRW STAIR)
+       (GENERIC GENERIC-STAIRS)
+       (FLAGS SEENBIT)
+       (ACTION UPSTAIRS-DOWNSTAIRS)>
+
+<GLOBAL WING-STAIRS <PLTABLE KITCHEN GREAT-HALL GALLERY>>
+<GLOBAL TOWER-STAIRS <PLTABLE BASEMENT OLD-GREAT-HALL CORR-2 CORR-3>>
+
+<ROUTINE UPSTAIRS-DOWNSTAIRS ("AUX" N TBL (HR <LOC ,WINNER>))
+ <COND (<VERB? BOARD CLIMB-DOWN CLIMB-UP THROUGH WALK WALK-TO>
+       <COND (<FSET? .HR ,SECRETBIT>
+              <RFALSE>)
+             (<FSET? .HR ,WEARBIT> ;"WING-ROOMS"
+              <SET TBL ,WING-STAIRS>)
+             (T <SET TBL ,TOWER-STAIRS>)>
+       <COND (<OR <VERB? BOARD CLIMB-UP>
+                  ;<NOUN-USED? ,W?UPSTAIRS>>
+              <COND (<T? <GETPT .HR ,P?UP>>
+                     <DO-WALK ,P?UP>
+                     <RTRUE>)
+                    (<AND <SET N <GETP .HR ,P?CHARACTER>>
+                          <NOT <L? <GET .TBL 0> <SET N <+ .N 1>>>>>
+                     <SET N <GET .TBL .N>>
+                     ;<TELL-I-ASSUME .N " Walk to">
+                     <PERFORM ,V?WALK-TO .N>
+                     <RTRUE>)>)
+             (T ;<NOUN-USED? ,W?DOWNSTAIRS>
+              <COND (<T? <GETPT .HR ,P?DOWN>>
+                     <DO-WALK ,P?DOWN>
+                     <RTRUE>)
+                    (<AND <SET N <GETP .HR ,P?CHARACTER>>
+                          <L? 0 <SET N <- .N 1>>>>
+                     <SET N <GET .TBL .N>>
+                     ;<TELL-I-ASSUME .N " Walk to">
+                     <PERFORM ,V?WALK-TO .N>
+                     <RTRUE>)>)>)>>
+
+<ROUTINE DO-INSTEAD-OF (OBJ1 OBJ2)
+       <COND (<EQUAL? ,PRSI .OBJ2> <PERFORM ,PRSA ,PRSO .OBJ1> <RTRUE>)
+             (<EQUAL? ,PRSO .OBJ2> <PERFORM ,PRSA .OBJ1 ,PRSI> <RTRUE>)
+             ;(T                   <PERFORM ,PRSA ,PRSO ,PRSI> <RTRUE>)
+             (T <V-FOO>)>>
+
+<OBJECT TURN
+       (IN GLOBAL-OBJECTS)
+       (ADJECTIVE INT.NUM ;NUMBER FULL)
+       (SYNONYM TURN TURNS MINUTE)
+       (DESC "minute")
+       (ACTION TURN-F)>
+
+<ROUTINE TURN-F ()
+ <COND (<VERB? USE>
+       <PERFORM ,V?WAIT-FOR ,PRSO>
+       <RTRUE>)>>
+
+<OBJECT IT
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM IT THIS ;"FUCKER SUCKER")
+       (DESC "it")
+       (FLAGS VOWELBIT NARTICLEBIT)
+       (ACTION IT-F)>
+
+<ROUTINE IT-F ()
+ <COND (<OR <AND <IOBJ? IT>
+                ;<FSET? ,PRSO ,PERSONBIT>
+                <VERB? ASK-ABOUT ASK-FOR SEARCH-FOR TELL-ABOUT>>
+           <AND <DOBJ? IT>
+                <VERB? ASK-CONTEXT-ABOUT ASK-CONTEXT-FOR FIND ;WHAT>>>
+       <TELL "\"I'm not sure what you're talking about.\"" CR>)>>
+
+<OBJECT FLOOR
+       (IN GLOBAL-OBJECTS)
+       (DESC "floor")
+       (ADJECTIVE DRAWING ;ROOM GREAT ;HALL)
+       (SYNONYM FLOOR ;AREA GROUND CARPET RUG)
+       (FLAGS SEENBIT SURFACEBIT OPENBIT)
+       (ACTION FLOOR-F)>
+
+<ROUTINE FLOOR-F ("AUX" (OBJ <>) N)
+ <COND ;(<REMOTE-VERB?> <RFALSE>)
+       (<VERB? CLIMB-ON>
+       <ALREADY ,WINNER "on it">)
+       (<AND <VERB? PUT THROW-AT>
+            <NOT <DOBJ? MOONMIST>>
+            <IOBJ? FLOOR>>
+       <MOVE ,PRSO ,HERE>
+       <TELL "Okay." CR>
+       <RTRUE>)
+       (<VERB? EXAMINE LOOK-ON SEARCH SEARCH-FOR>
+       <COND (<EQUAL? ,HERE ,DRAWING-ROOM>
+              <TELL
+"The carpet ends flush with the archway to the " 'GREAT-HALL ",
+where the footsteps of visitors have begun to wear it thin.
+It's a magnificent red Brussels carpet with deep pile and a medieval
+design." CR>)
+             (<EQUAL? ,HERE ,GREAT-HALL>
+              <GREAT-HALL-IS-FLOORED>)>
+       <COND (<AND <EQUAL? ,HERE ,GARDEN>
+                   <EQUAL? ,VARIATION ,LORD-C>
+                   <FSET? ,CLUE-4 ,SECRETBIT>>
+              <SET OBJ ,CLUE-4>)
+             (<AND <EQUAL? ,HERE ,DRAWING-ROOM>
+                   <EQUAL? ,VARIATION ,LORD-C ,FRIEND-C ;,OFFICER-C>
+                   <NOT <FSET? ,JEWEL ,TOUCHBIT>>>
+              <SET OBJ ,JEWEL>)
+             (<AND <EQUAL? ,HERE ,GREAT-HALL>
+                   <EQUAL? ,VARIATION ,DOCTOR-C ;,DEALER-C ,PAINTER-C>
+                   <NOT <EQUAL? ,FOUND-IT-PERM ,LENS ;,LENS-1 ,LENS-2>>>
+              <SET OBJ ,LENS>)>
+       <START-SEARCH .OBJ>
+       <RTRUE>)
+       (<ADJ-USED? ,W?DRAWING>
+       <COND (<NOT <==? ,HERE ,DRAWING-ROOM>>
+              <DO-INSTEAD-OF ,DRAWING-ROOM ,FLOOR>
+              <RTRUE>)>)
+       (<ADJ-USED? ,W?GREAT>
+       <COND (<NOT <==? ,HERE ,GREAT-HALL>>
+              <DO-INSTEAD-OF ,GREAT-HALL ,FLOOR>
+              <RTRUE>)>)>>
+
+<ROUTINE START-SEARCH ("OPTIONAL" (OBJ <>))
+       <TELL
+"Nothing suspicious meets your eye after a moment's scrutiny. Do you want
+to continue?">
+       <COND (<NOT <YES?>>
+              <OKAY>
+              <RTRUE>)
+             (T
+              <COND (T ;<T? .OBJ>
+                     <SETG FOUND-IT .OBJ>)>
+              <SETG FOUND-LOC ,HERE>
+              <QUEUE I-FOUND-IT <RANDOM 7>>
+              <V-WAIT 8 <> T>
+              <RTRUE>)>>
+
+<GLOBAL FOUND-IT:OBJECT <>>
+<GLOBAL FOUND-IT-PERM:OBJECT <>>
+<GLOBAL FOUND-LOC:OBJECT <>>
+<GLOBAL NOTHING-NEW "You don't find anything new there.|">
+
+<ROUTINE I-FOUND-IT ("OPTIONAL" (GARG <>) "AUX" OBJ)
+       %<DEBUG-CODE <COND (<OR ,IDEBUG <==? .GARG ,G-DEBUG>>
+                           <TELL "[I-FOUND-IT:">
+                           <COND (<==? .GARG ,G-DEBUG> <RFALSE>)>)>>
+       <COND (<NOT <EQUAL? ,FOUND-LOC ,HERE>>
+              <RFALSE>)
+             (<EQUAL? ,FOUND-IT ,JEWEL>
+              <MOVE ,FOUND-IT ,HERE>
+              <TELL
+"Suddenly you notice a glittering speck. Probing for it with your fingers,
+you discover a " 'JEWEL "." ;"extract from the strands of carpet pile" CR>)
+             (<EQUAL? ,FOUND-IT ,LENS>
+              <COND (<NOT <FSET? ,LENS ,SEENBIT>>
+                     <MOVE ,LENS-2 <LOC ,LENS>>
+                     ;<REMOVE ,LENS>)
+                    (<NOT <FSET? ,LENS-2 ,SEENBIT>>
+                     <SETG FOUND-IT ,LENS-2>
+                     <MOVE ,LENS-1 <LOC ,LENS>>
+                     <REMOVE ,LENS>)
+                    (T <RFALSE>)>
+              <MOVE ,FOUND-IT ,HERE>
+              <TELL
+"Suddenly you find something small, smooth and slippery -- a "
+D ,FOUND-IT "! Its transparency, of course, made it practically invisible.">
+              <COND (<T? ,BUTLER-GHOST-STORY-TOLD>
+                     <TELL
+" No wonder you and the ghost had such a hard time finding it!">)>
+              <CRLF>)
+             (<ZERO? ,FOUND-IT>
+              <TELL ,NOTHING-NEW>
+              <RFATAL>)
+             (<FSET? ,FOUND-IT ,SECRETBIT>
+              ;<SET OBJ <FIND-FLAG ,HERE ,SECRETBIT>>
+              <DISCOVER ,FOUND-IT ;.OBJ>
+              ;<RFATAL>)
+             (T
+              <TELL
+!\Y ,OU-STOP-SEARCHING " when you find" THE ,FOUND-IT ".|">)>
+       <COND (T ;<NOT <EQUAL? ,FOUND-IT ,MOONMIST ,YOUR-SWITCH>>
+              ;<MOVE ,FOUND-IT ,PLAYER>
+              <FSET ,FOUND-IT ,TOUCHBIT>)>
+       <FSET ,FOUND-IT ,SEENBIT>
+       <COND (<NOT <EQUAL? ,FOUND-IT ,YOUR-SWITCH>>
+              <FCLEAR ,FOUND-IT ,NDESCBIT>)>
+       <COND (<EQUAL? ,FOUND-IT ,LENS ;,LENS-1 ,LENS-2>
+              <SETG FOUND-IT-PERM ,FOUND-IT>)>
+       <SETG FOUND-IT <>>
+       <RFATAL>>
+
+<OBJECT DANGER
+       (IN GLOBAL-OBJECTS)
+       (DESC "danger")
+       (SYNONYM DANGER THREAT ATTACK)>
+
+<OBJECT INTNUM
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM INT.NUM ;NUMBER)
+       (DESC "number")>
+
+<OBJECT YOU
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM YOU YOURSELF HIMSELF HERSELF)
+       (DESC "self" ;"himself or herself")
+       (FLAGS ;NARTICLEBIT)
+       (ACTION YOU-F)>
+
+<ROUTINE YOU-F ("AUX" X)
+ <COND (<NOT <==? ,WINNER ,PLAYER>>
+       <DO-INSTEAD-OF ,WINNER ,YOU>
+       <RTRUE>)
+       (<AND <VERB? ASK-ABOUT> <IOBJ? YOU>>
+       <PERFORM ,V?ASK-ABOUT ,PRSO ,PRSO>
+       <RTRUE>)
+       (<AND <VERB? THANKS>
+            <SET X <QCONTEXT-GOOD?>>>
+       <PERFORM ,V?THANKS .X>
+       <RTRUE>)>>
+
+;<OBJECT HINT
+       (DESC "hint")
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM HINT HELP)
+       (ACTION HINT-F)>
+
+;<ROUTINE HINT-F ()
+ <COND (<VERB? FIND>
+       <HELP-TEXT>)
+       (<VERB? ASK-FOR ASK-CONTEXT-FOR TAKE>
+       <MORE-SPECIFIC>)>>
+
+;<OBJECT CORRIDOR-GLOBAL
+       (IN GLOBAL-OBJECTS)
+       (DESC "corridor")
+       (SYNONYM CORRIDOR)
+       (ACTION CORRIDOR-GLOBAL-F)>
+
+;<ROUTINE CORRIDOR-GLOBAL-F ("AUX" RM)
+ <COND (<VERB? ANALYZE EXAMINE LOOK-INSIDE LOOK-DOWN LOOK-UP>
+       <COND (<SET RM <NEXT-ROOM ,HERE ,P?OUT>>
+              <ROOM-PEEK .RM T>)>)>>
+
+<OBJECT WALL
+       (IN GLOBAL-OBJECTS)
+       (DESC "wall")
+       (ADJECTIVE CASTLE TOWER BRICK)
+       (SYNONYM WALL WALLS BRICK BRICKS)
+       (FLAGS SEENBIT SURFACEBIT OPENBIT)
+       (ACTION WALL-F)>
+
+<ROUTINE WALL-F ("AUX" OBJ)
+ <COND (<AND <EQUAL? ,VARIATION ,FRIEND-C>
+            <EQUAL? ,HERE ,BASEMENT ,CRYPT>
+            ;<VERB? ;DIG EXAMINE KNOCK MUNG OPEN RUB SEARCH>>
+       <BRICKS-F>)
+       (<AND <VERB? OPEN CLOSE>
+            <T? <SET OBJ <FIND-FLAG-LG ,HERE ,DOORBIT ,SECRETBIT>>>>
+       <DO-INSTEAD-OF .OBJ ,WALL>
+       <RTRUE>)
+       (<VERB? KNOCK>
+       <COND (<OR <NOT <FSET? ,HERE ,WEARBIT> ;"WING-ROOMS">
+                  <FIND-FLAG-LG ,HERE ,DOORBIT ,SECRETBIT>>
+              <TELL "You hear a hollow sound." CR>)
+             (T <TELL
+"Knocking on the walls reveals nothing unusual." CR>)>)>>
+
+<OBJECT GLOBAL-HERE
+       (IN GLOBAL-OBJECTS)
+       (DESC "here")
+       (ADJECTIVE THIS)
+       (SYNONYM HERE AREA ROOM PLACE)
+       (GENERIC GENERIC-ROOM)
+       (FLAGS NARTICLEBIT)
+       (ACTION GLOBAL-HERE-F)>
+
+<ROUTINE GLOBAL-HERE-F ("AUX" OBJ (X <>))
+ <COND (<VERB? EXAMINE LIE SIT SMELL WALK-TO>
+       <DO-INSTEAD-OF ,HERE ,GLOBAL-HERE>
+       <RTRUE>)
+       (<VERB? PUT PUT-IN ;TIE-TO>
+       <MORE-SPECIFIC>)
+       (<VERB? SEARCH SEARCH-FOR>
+       <COND (<AND <IN? ,MAGAZINE ,HERE>
+                   ;<EQUAL? ,VARIATION ,PAINTER-C>
+                   <FSET? ,MAGAZINE ,NDESCBIT>>
+              <SET X ,MAGAZINE>)
+             (<AND <IN? ,BRICKS ,HERE>
+                   ;<EQUAL? ,VARIATION ,FRIEND-C>
+                   <FSET? ,BRICKS ,NDESCBIT>>
+              <SET X ,BRICKS>)
+             ;(<AND <EQUAL? ,HERE ,COURTYARD>
+                   <SET X <FIRST? ,FRONT-GATE>>>       ;"for CLUE-4"
+              T)
+             (<AND <T? ,PRSI>
+                   <==? <META-LOC ,PRSI> ,HERE>>
+              <SET X ,PRSI>)
+             (T
+              <SET OBJ <FIRST? ,HERE>>
+              <REPEAT ()
+                      <COND (<ZERO? .OBJ>
+                             <RETURN>)
+                            (<FSET? .OBJ ,SECRETBIT>
+                             <SET X .OBJ>
+                             <RETURN>)
+                            (<AND <NOT <FSET? .OBJ ,PERSONBIT>>
+                                  <OR <FSET? .OBJ ,CONTBIT>
+                                      <FSET? .OBJ ,SURFACEBIT>>
+                                  <OR <SET X <FIND-FLAG .OBJ ,SECRETBIT>>
+                                      <SET X <FIND-FLAG .OBJ ,RMUNGBIT>>>>
+                             <FSET .OBJ ,OPENBIT>
+                             <RETURN>)
+                            (T <SET OBJ <NEXT? .OBJ>>)>>)>
+       <START-SEARCH .X>
+       <RTRUE>)>>
+
+<OBJECT CHAIR
+       (IN LOCAL-GLOBALS)
+       (DESC "chair")
+       (ADJECTIVE WING)
+       (SYNONYM CHAIR SEAT CHAIRS BENCH)
+       (FLAGS SEENBIT SURFACEBIT ;VEHBIT)
+       (ACTION CHAIR-F)>
+
+<ROUTINE CHAIR-F () ;("OPT" (ARG 0))
+ <COND ;(<T? .ARG> <RFALSE>)
+       (<VERB? SIT ;LOOK-UNDER CLIMB-ON ;CLIMB-DOWN BOARD>
+       <WONT-HELP>
+       ;<SETG PLAYER-SEATED ,CHAIR>
+       ;<TELL "Okay." ;"That's just a waste of time." CR>)
+       (T <RANDOM-PSEUDO>)>>
+
+<OBJECT TABLE-RANDOM
+       (IN LOCAL-GLOBALS)
+       (DESC "table")
+       (ADJECTIVE BILLIARD CARD)
+       (SYNONYM TABLE DESK)
+       (FLAGS SEENBIT)
+       (ACTION RANDOM-PSEUDO)>
+\f
+[
+<OBJECT TWEED-OUTFIT
+       (IN PLAYER)
+       (DESC "tweed outfit")
+       (ADJECTIVE MY TWEED WOOLEN WOOL)
+        (SYNONYM CLOTHES OUTFIT TWEEDS SUIT ;" SWEATER CLOTHING")
+       (GENERIC GENERIC-CLOTHES)
+       (FLAGS WORNBIT WEARBIT TAKEBIT MUNGBIT SEENBIT)
+       (SIZE 20)
+       (ACTION CLOTHES-FCN)>
+
+<OBJECT SLEEP-OUTFIT
+       (IN LUGGAGE)
+       (DESC "nightshirt" ;"set of pajamas, sleeping outfit")
+       (ADJECTIVE MY NIGHT F.C F.C ;" FINE INDIAN SILK SLEEPING")
+        (SYNONYM CLOTHES OUTFIT NIGHTS SHIRT ;" PAJAMA NIGHTG")
+       (GENERIC GENERIC-CLOTHES)
+       (FLAGS WEARBIT TAKEBIT)
+       (SIZE 20)
+       (ACTION CLOTHES-FCN)>
+
+<OBJECT EXERCISE-OUTFIT
+       (IN LUGGAGE)
+       (DESC "exercise outfit")
+       (ADJECTIVE MY EXERCISE F.C F.C ;"COTTON COMFORT RUNNING")
+        (SYNONYM CLOTHES OUTFIT SWEATS SUIT ;"SHOES CLOTHING")
+       (GENERIC GENERIC-CLOTHES)
+       (FLAGS WEARBIT TAKEBIT VOWELBIT)
+       (SIZE 20)
+       (ACTION CLOTHES-FCN)>
+
+<OBJECT DINNER-OUTFIT
+       (IN LUGGAGE)
+       (DESC "dinner outfit")
+       (ADJECTIVE MY DINNER FORMAL F.C F.C ;"FRILLY PERFECT")
+        (SYNONYM CLOTHES OUTFIT ;"ENSEMBLE CLOTHING" DRESS GOWN)
+       (GENERIC GENERIC-CLOTHES)
+       (FLAGS WEARBIT TAKEBIT)
+       (SIZE 20)
+       (ACTION CLOTHES-FCN)>
+
+<ROUTINE CLOTHES-FCN ()
+ <COND (<VERB? EXAMINE LOOK-INSIDE>
+       <COND (<DOBJ? TWEED-OUTFIT>
+              <TELL
+"These are sensible clothes for this clammy climate: your new tweed ">
+              <COND (<ZERO? ,GENDER-KNOWN>
+                     <TELL "suit">)
+                    (T
+                     <TELL "blazer and ">
+                     <COND (<FSET? ,PLAYER ,FEMALE> <TELL "skirt">)
+                           (T <TELL "pants">)>)>
+              <TELL ", with woolen sweater, should keep you warm enough.">)
+             (<DOBJ? EXERCISE-OUTFIT>
+              <TELL
+"This is your favorite outfit for workouts: a cotton sweatsuit with a sporty ">
+              <COND (<PRINT-COLOR> <TELL !\ >)>
+              <TELL "stripe." ;", and comfortable running shoes.">)
+             (<DOBJ? DINNER-OUTFIT>
+              <COND (<ZERO? ,GENDER-KNOWN>
+                     <TELL
+"You have a decent formal ensemble, with frills in the right places">)
+                    (T
+                     <TELL "Your new ">
+                     <COND (<FSET? ,PLAYER ,FEMALE>
+                            <TELL "floor-length dinner gown">)
+                           (T <TELL "tuxedo">)>
+                     <TELL " is particularly good-looking">)>
+              <TELL " and a perfect fit">
+              <COND (<NOT <0? ,VARIATION>>
+                     <TELL ", ">
+                     <COND (<FSET? ,PLAYER ,FEMALE>
+                            <TELL "not to mention that it's all">)
+                           (T <TELL "with shirt and accessories">)>
+                     <TELL " in ">
+                     <PRINT-COLOR>)>
+              <TELL ".">)
+             (T ;<DOBJ? SLEEP-OUTFIT>
+              <TELL "Your new ">
+              <COND (<PRINT-COLOR> <TELL !\ >)>
+              <TELL D ,SLEEP-OUTFIT ;"nightshirt" " is ">
+              <COND (<ZERO? ,GENDER-KNOWN>
+                     <TELL
+"nothing to write home about, but it is so-o-o comfy for sleeping.">)
+                    (<FSET? ,PLAYER ,FEMALE>
+                     <TELL "made of fine Chinese silk.">)
+                    (T <TELL "decorated with a Union Jack flag.">)>)>
+       <CRLF>)
+       (<VERB? DISEMBARK ;TAKE>        ;"GET OUT OF MY CLOTHES"
+       <PERFORM ,V?TAKE-OFF ,PRSO>
+       <RTRUE>)
+       (<VERB? EMPTY>          ;"UNPACK MY CLOTHES"
+       <COND (<EQUAL? <META-LOC ,LUGGAGE> ,HERE>
+              <PERFORM ,V?EMPTY ,LUGGAGE>
+              <RTRUE>)
+             (T <NOT-HERE ,LUGGAGE>)>)>>
+]
+<OBJECT SLEEP-GLOBAL
+       (IN GLOBAL-OBJECTS)
+       ;(ADJECTIVE ;SOME MY)
+       (SYNONYM SLEEP)
+       (DESC "sleep")
+       (FLAGS NARTICLEBIT)
+       (ACTION SLEEP-GLOBAL-F)>
+
+<ROUTINE SLEEP-GLOBAL-F ()
+ <COND (<VERB? DRESS ;-FOR>
+       <COND (<EQUAL? ,HERE <META-LOC ,SLEEP-OUTFIT>>
+              <PERFORM ,V?WEAR ,SLEEP-OUTFIT>
+              <RTRUE>)>)
+       (<VERB? WALK-TO>
+       <PERFORM ,V?FAINT>
+       <RTRUE>)>>
+
+<GLOBAL NOW-WEARING:OBJECT TWEED-OUTFIT>
+
+<ROUTINE ROB (WHAT THIEF "OPTIONAL" (TELL? <>) "AUX" N X (TOLD? <>))
+        <SET X <FIRST? .WHAT>>
+        <REPEAT ()
+                <COND (<NOT .X> <RETURN>)>
+                <SET N <NEXT? .X>>
+                ;<COND (<NOT <FSET? .X ,TAKEBIT>>
+                       <SET X .N>
+                       <AGAIN>)>
+                <COND (<AND <NOT .N> .TOLD? .TELL?>
+                       <TELL " and">)>
+                <SET TOLD? T>
+                <COND (.TELL?
+                       <TELL THE .X>
+                       <COND (.N <TELL !\,>)
+                             (T <TELL ". ">)>)>
+                <MOVE .X .THIEF>
+                ;<FCLEAR .X ,TAKEBIT>
+                <SET X .N>>>
+
+<OBJECT LIGHT-GLOBAL 
+       (IN GLOBAL-OBJECTS)
+       (DESC "light")
+       (ADJECTIVE FLOOD MOON)
+       (SYNONYM LIGHT LIGHTS LAMP MOONLIGHT)
+       (FLAGS SEENBIT TRYTAKEBIT)
+       (ACTION LIGHT-GLOBAL-F)>
+
+<ROUTINE LIGHT-GLOBAL-F ("AUX" P)
+ <COND (<REMOTE-VERB?> <RFALSE>)
+       (<VERB? LAMP-ON LAMP-OFF>
+       <COND (<CREEPY? ,HERE>
+              <COND (<ACCESSIBLE? ,LAMP>
+                     <PERFORM ,PRSA ,LAMP>
+                     <RTRUE>)
+                    (T <NOT-HERE ,LIGHT-GLOBAL>)>)
+             (<AND <OUTSIDE? ,HERE> ;<NOT <EQUAL? ,HERE ,CAR>>>
+              <TELL "You can't reach it from here." CR>)
+             (<VERB? LAMP-ON>
+              <COND (<FSET? ,HERE ,ONBIT>
+                     <ALREADY ,LIGHT-GLOBAL "on">)
+                    (T
+                     <FSET ,HERE ,ONBIT>
+                     <OKAY ,LIGHT-GLOBAL "on">)>)
+             (<VERB? LAMP-OFF>
+              <COND (<NOT <FSET? ,HERE ,ONBIT>>
+                     <ALREADY ,LIGHT-GLOBAL "off">)
+                    (<SET P <FIND-FLAG-HERE-NOT ,PERSONBIT ,MUNGBIT ,PLAYER>>
+                     <TELL
+D .P " says, \"Please don't leave us in the dark.\"" CR>)
+                    (T
+                     <FCLEAR ,HERE ,ONBIT>
+                     <OKAY ,LIGHT-GLOBAL "off">)>)>)>>
+
+<OBJECT HAUNTING
+       (DESC "haunting")
+       (IN OFFICE)
+       (SYNONYM MYSTERY HAUNTING ATTEMPTS CASE)
+       (FLAGS NDESCBIT SEENBIT)
+       (ACTION HAUNTING-F)>
+
+<ROUTINE HAUNTING-F ()
+ <COND (<VERB? LAMP-ON PLAY>
+       <PERFORM ,PRSA ,COMPUTER>
+       <RTRUE>)>>
+
+<OBJECT KEYHOLE
+       (IN GLOBAL-OBJECTS)
+       (DESC "keyhole")
+       (ADJECTIVE MY TAM\'S JACK\'S VIV\'S HYDE\'S IAN\'S DOC\'S IRIS\'S)
+       (SYNONYM KEYHOLE HOLE)
+       ;(FLAGS NARTICLEBIT ;PLURALBIT)
+       (ACTION KEYHOLE-F)>
+
+<ROUTINE KEYHOLE-F ("AUX" P RM)
+ <COND (<AND <REMOTE-VERB?>
+            <NOT <VERB? SEARCH SEARCH-FOR>>>
+       <RFALSE>)
+       (<ADJ-USED? <>>
+       ;<ZERO? ,P-ADJN>
+       <COND (<ZMEMQ ,HERE ,CHAR-ROOM-TABLE>
+              <SET RM <GET-REXIT-ROOM <GETPT ,HERE ,P?OUT>>>)
+             (<OR <EQUAL? ,HERE ,CORR-2>
+                  <EQUAL? ,HERE ,WEST-HALL ,GALLERY ,EAST-HALL>>
+              <TELL ,YOU-DIDNT-SAY-W "hose " 'KEYHOLE "!]" CR>
+              <RTRUE>)
+             (T <NOT-HERE ,KEYHOLE> <RTRUE>)>)
+       (<OR <SET P <ZMEMQ <ADJ-USED?> ;,P-ADJN ,CHAR-POSS-TABLE>>
+           ;<AND <==? <ADJ-USED?> ,OTHER-POSS>
+                <SET P <GETP ,OTHER-CHAR ,P?CHARACTER>>>>
+       <SET RM <GET ,CHAR-ROOM-TABLE .P>>
+       <COND (<EQUAL? ,HERE .RM>
+              <SET RM <GET-REXIT-ROOM <GETPT ,HERE ,P?OUT>>>)
+             (<NOT <EQUAL? ,HERE <GET-REXIT-ROOM <GETPT .RM ,P?OUT>>>>
+              <NOT-HERE ,KEYHOLE>
+              <RTRUE>)>)>
+ <COND (<VERB? EXAMINE LOOK-INSIDE LOOK-THROUGH SEARCH SEARCH-FOR>
+       <COND (<AND <EQUAL? ,JACK-ROOM ,HERE .RM>
+                   <EQUAL? ,VARIATION ,LORD-C>>
+              <TELL
+"You see a microphone with its wires leading toward the " 'CREST "." CR>
+              ;<TELL
+"Total darkness greets your eye. Something is obstructing your view
+through the " 'KEYHOLE "." CR>)
+             (T <ROOM-PEEK .RM T>)>
+       <RTRUE>)>>
+[
+<OBJECT HANDS
+       (IN GLOBAL-OBJECTS)
+       (DESC "hand" ;"your hands")
+       (ADJECTIVE TAM\'S JACK\'S VIV\'S HYDE\'S IAN\'S DOC\'S IRIS\'S MY
+                  ;"ordering same as HEAD & EYE for UN/DRESS-GHOST"
+                  ;" B\'S DEE\'S")
+       (SYNONYM HANDS HAND)
+       (FLAGS TRYTAKEBIT ;NARTICLEBIT ;PLURALBIT SEENBIT)
+       (ACTION HANDS-F)>
+
+<ROUTINE HANDS-F ("AUX" P A)
+ <COND (<NOT <SET P <FIND-BODY ,HANDS>>>
+       <RTRUE>)
+       (<REMOTE-VERB?>
+       <RFALSE>)>
+ <COND ;(<EQUAL? .P ,PLAYER>
+       <COND (<VERB? BRUSH>
+              <RFALSE>)>)
+       (<VERB? KISS>
+       <COND (<AND <FSET? .P ,FEMALE>
+                   <T? ,GENDER-KNOWN>
+                   <NOT <FSET? ,PLAYER ,FEMALE>>>
+              <PERFORM ,V?HELLO .P>)
+             (T
+              <PERFORM ,V?KISS .P>)>
+       <RTRUE>)
+       (<AND <VERB? SHAKE TAKE> <DOBJ? HANDS>>
+       <COND (<T? ,PRSI> ;<ZERO? .P>
+              <SET P ,PRSI>)>
+       ;<COND (<ZERO? .P>
+              <COND ;(<ADJ-USED? ,W?HER>
+                     <SET P <FIND-FLAG-HERE-BOTH ,PERSONBIT ,FEMALE ,WINNER>>
+                     <COND (<ZERO? .P>
+                            <TELL "There's no woman here!" CR>
+                            <RTRUE>)>)
+                    ;(<ADJ-USED? ,W?HIS>
+                     <SET P <FIND-FLAG-HERE-NOT ,PERSONBIT ,FEMALE ,WINNER>>
+                     <COND (<ZERO? .P>
+                            <TELL "There's no man here!" CR>
+                            <RTRUE>)>)
+                    (T
+                     <SET P <FIND-FLAG-HERE ,PERSONBIT ,WINNER>>
+                     <COND (<ZERO? .P>
+                            <TELL "There's no one here!" CR>
+                            <RTRUE>)>)>)>
+       <PERFORM ,V?HELLO .P>
+       <RTRUE>)>>
+
+<OBJECT HEAD
+       (IN GLOBAL-OBJECTS)
+       (DESC "head" ;"your head")
+       (ADJECTIVE TAM\'S JACK\'S VIV\'S HYDE\'S IAN\'S DOC\'S IRIS\'S B\'S
+                  ;" MY DEE\'S")
+       (SYNONYM HEAD ;FACE)
+       (FLAGS ;NARTICLEBIT SEENBIT)
+       (ACTION HEAD-F)>
+
+<ROUTINE HEAD-F ("AUX" P P2)
+ <COND (<NOT <SET P <FIND-BODY ,HEAD>>>
+       <RTRUE>)
+       (<REMOTE-VERB?>
+       <RFALSE>)
+       ;(<AND <EQUAL? .P ,PLAYER>
+            <NOT <FSET? ,HERE ,WORNBIT>>>
+       <NOT-HERE ,MIRROR-GLOBAL ;,HEAD>)
+       (<VERB? NOD>
+       <PERFORM ,V?YES>
+       <RTRUE>)
+       (<VERB? SHAKE>
+       <PERFORM ,V?NO>
+       <RTRUE>)>>
+
+<OBJECT EYE
+       (IN GLOBAL-OBJECTS)
+       (DESC "eye")
+       (ADJECTIVE TAM\'S JACK\'S VIV\'S HYDE\'S IAN\'S DOC\'S IRIS\'S B\'S
+                  ;" MY DEE\'S")
+       (SYNONYM EYE EYES)
+       (FLAGS VOWELBIT ;PLURALBIT SEENBIT)
+       (ACTION EYE-F)>
+
+<ROUTINE EYE-F ("AUX" P P2)
+ <COND (<NOT <SET P <FIND-BODY ,EYE>>>
+       <RTRUE>)
+       (<REMOTE-VERB?>
+       <RFALSE>)
+       ;(<AND <EQUAL? .P ,PLAYER>
+            <NOT <FSET? ,HERE ,WORNBIT>>>
+       <COND (<VERB? OPEN>
+              <TELL "Your eyes are wide open." CR>)
+             (T <NOT-HERE ,MIRROR-GLOBAL ;,EYE>)>)
+       (<VERB? OPEN>
+       <SETG WINNER ,PLAYER>
+       <PERFORM ,V?ALARM .P>
+       <RTRUE>)
+       (<VERB? CLOSE>
+       <SETG WINNER .P>
+       <PERFORM ,V?FAINT>
+       <RTRUE>)
+       (<VERB? EXAMINE FIND LOOK-INSIDE>
+       <COND (<AND <EQUAL? .P ,PLAYER>
+                   <NOT <FSET? ,HERE ,WORNBIT>>>
+              <NOT-HERE ,MIRROR-GLOBAL ;,EYE>)
+             (<==? ,GHOST-NEW .P>
+              <PERFORM ,PRSA ,GHOST-NEW>
+              <RTRUE>)
+             (T
+              <COND (<NOT <FSET? ,LENS ;-1 ,SEENBIT>>
+                     <COND (<FSET? .P ,MUNGBIT>
+                            <TELL CHE .P " has closed eyes." CR>)
+                           (<==? ,VARIATION <GETP .P ,P?CHARACTER>>
+                            <TELL CHE .P " turns away from you." CR>)
+                           (<L? ,BED-TIME ,PRESENT-TIME>
+                            <TELL CHE .P look " sleepy." CR>)
+                           (T
+                            <TELL CHE .P smile " at you." CR>)>)
+                    (T
+                     <TELL CHE .P is>
+                     <COND (<OR <NOT <EQUAL? .P ,DEALER>>
+                                <EQUAL? ,VARIATION ,PAINTER-C>>
+                            <TELL " not">)>
+                     <TELL " wearing a " D ,LENS "." CR>)>)
+             ;(T
+              <TELL
+"Despite some initial demurrals and questioning glances, ">
+              <COND (<ZERO? <SET P2 <FIND-FLAG-HERE ,PERSONBIT ,PLAYER .P>>>
+                     <TELL D .P>)
+                    (T <TELL "everyone">)>
+              <TELL " allows your examination">
+              <COND (<OR <EQUAL? ,VARIATION ,PAINTER-C>
+                         <NOT <IN? ,DEALER ,HERE>>>
+                     <TELL ". You discover that">
+                     <COND (<ZERO? .P2>
+                            <TELL HE .P " is not">)
+                           (T <TELL " no one is">)>
+                     <TELL " wearing a " D ,LENS "." CR>)
+                    (T <TELL
+" -- except " 'DEALER ", who is wearing " D ,LENS "es
+but confesses that he hates even to admit that he needs them." CR>)>)>)>>
+
+<OBJECT OTHER-OUTFIT
+       (IN GLOBAL-OBJECTS)
+       (DESC "clothes")
+       (ADJECTIVE TAM\'S JACK\'S VIV\'S HYDE\'S IAN\'S DOC\'S IRIS\'S B\'S
+                  ;" MY DEE\'S")
+       (SYNONYM CLOTHES OUTFIT DRESS GOWN ; SUIT)
+       ;(GENERIC GENERIC-CLOTHES)
+       (FLAGS SEENBIT)
+       ;(SIZE 20)
+       (ACTION OTHER-OUTFIT-F)>
+
+<ROUTINE OTHER-OUTFIT-F ("AUX" P P2)
+ <COND (<NOT <SET P <FIND-BODY ,OTHER-OUTFIT>>>
+       <RTRUE>)
+       (<REMOTE-VERB?>
+       <RFALSE>)
+       (<VERB? EXAMINE FIND LOOK-INSIDE>
+       <COND (<==? ,GHOST-NEW .P>
+              <PERFORM ,PRSA ,GHOST-NEW>
+              <RTRUE>)>)
+       (<VERB? DISEMBARK REMOVE TAKE-OFF>
+       <YOU-SHOULDNT>
+       <RTRUE>)>>
+
+<ROUTINE FIND-BODY (OBJ "AUX" A P)
+ <SET A <ADJ-USED?> ;,P-ADJN>
+ <COND (<ZERO? .A>
+       <TELL ,I-ASSUME !\ >
+       <COND (<OR <VERB? CLOSE FIND SEARCH-FOR>
+                  <AND <VERB? ATTACK KILL MUNG SLAP>
+                       <T? ,NOW-PRSI>>>
+              <SET P ,PLAYER>
+              <TELL "your">)
+             (<OR <AND <VERB? SHAKE>   ;"SHAKE HANDS WITH JACK"
+                       <T? ,PRSI>
+                       <FSET? <SET P ,PRSI> ,PERSONBIT>>
+                  <SET P <QCONTEXT-GOOD?>>
+                  <SET P <FIND-FLAG-HERE ,PERSONBIT ,PLAYER>>>
+              <TELL D .P "'s">)
+             (T
+              <SET P ,PLAYER>
+              <TELL "your">)>
+       <PUT ,P-ADJW ,NOW-PRSI
+                    <GET ,CHAR-POSS-TABLE <+ 1 <GETP .P ,P?CHARACTER>>>>
+       <TELL !\ >
+       <COND (<SET A <GET ,P-NAMW ,NOW-PRSI>>
+              <PRINTB .A>)
+             (T <TELL D .OBJ>)>
+       <TELL ".]" CR>)
+       (<SET P <ZMEMQ .A ,CHAR-POSS-TABLE>>
+       <SET P <GET ,CHARACTER-TABLE <- .P 1>>>)
+       ;(<==? .A ,OTHER-POSS>
+       <SET P ,OTHER-CHAR>)
+       (<==? .A ,W?HER>
+       <SET P ,P-HER-OBJECT>)
+       (<==? .A ,W?HIS>
+       <SET P ,P-HIM-OBJECT>)>
+ <COND (<ZERO? .P>
+       <DONT-UNDERSTAND>
+       <RFALSE>)>
+ <THIS-IS-IT .P>
+ <COND (<NOT <==? <META-LOC .P> ,HERE>>
+       <NOT-HERE .P>
+       <RFALSE>)
+       (<DIVESTMENT? .OBJ>
+       <HAR-HAR>
+       <RFALSE>)
+       (T .P)>>
+]
+<OBJECT PASSAGE
+       (DESC "secret passage")
+       (IN GLOBAL-OBJECTS)
+       (ADJECTIVE SECRET HIDING HIDDEN)
+       (SYNONYM PASSAGE ROOM PLACE PLACES)
+       (GENERIC GENERIC-ROOM)
+       (ACTION PASSAGE-F)>
+
+<ROUTINE PASSAGE-F ("AUX" (RM <FIND-FLAG-LG ,HERE ,DOORBIT ,SECRETBIT>))
+ <COND (<VERB? TAKE WALK-TO>
+       <PERFORM ,V?THROUGH ,PRSO>
+       <RTRUE>)
+       (<AND <VERB? OPEN CLOSE>
+            <T? .RM>>
+       <DO-INSTEAD-OF .RM ,PASSAGE>
+       <RTRUE>)
+       (<FSET? ,HERE ,SECRETBIT>
+       <DO-INSTEAD-OF ,HERE ,PASSAGE>
+       <RTRUE>)
+       (<REMOTE-VERB?> ;"includes LEAVE"
+       <RFALSE>)
+       (T ;<VERB? BOARD CLOSE EXAMINE FOLLOW LOOK-INSIDE OPEN THROUGH WALK-TO>
+       <COND (<AND <T? .RM>
+                   <SET RM <DOOR-ROOM ,HERE .RM>>
+                   <FSET? .RM ,SEENBIT>>
+              <DO-INSTEAD-OF .RM ,PASSAGE>
+              <RTRUE>)
+             (<SET RM <GENERIC-CLOSET 0>>
+              <DO-INSTEAD-OF .RM ,PASSAGE>
+              <RTRUE>)
+             (T <NOT-HERE ,PASSAGE>)>)>>
+
+<OBJECT ROMANCE
+       (DESC "Tamara's romance")
+       (IN GLOBAL-OBJECTS)
+       (ADJECTIVE TAM\'S JACK\'S HER HIS)
+       (SYNONYM ROMANCE ENGAGE MARRIAGE LOVE ;AFFAIR)
+       (FLAGS NARTICLEBIT)
+       ;(ACTION ROMANCE-F)>
+
+;<ROUTINE ROMANCE-F ()
+ <COND (<AND <VERB? MAKE>
+            <FSET? ,PRSI ,PERSONBIT>>
+       <PERFORM ,V?RUB ,PRSI>
+       <RTRUE>)>>
+
+<OBJECT ACCIDENT
+       (DESC "Deirdre's accident")
+       (IN GLOBAL-OBJECTS)
+       (ADJECTIVE ;DEIRDRE DEE\'S HER)
+       (SYNONYM ACCIDENT DROWNING DEATH)
+       (FLAGS NARTICLEBIT)>
+
+<OBJECT CORPSE
+       (DESC "Deirdre's body")
+       (IN LOCAL-GLOBALS ;GLOBAL-OBJECTS ;"not really anywhere")
+       (ADJECTIVE ;DEIRDRE DEE\'S HER DEAD)
+       (SYNONYM CORPSE ;BODY ;"foo's body")
+       (FLAGS NARTICLEBIT)
+       (ACTION CORPSE-F)>
+
+<ROUTINE CORPSE-F ()
+ <COND ;(<REMOTE-VERB?> <RFALSE>)
+       (<VERB? ;EXAMINE FIND>
+       <WHO-KNOWS? ,CORPSE>)
+       ;(T <NOT-HERE ,CORPSE>)>>
+
+<OBJECT UNDRESSED
+       (DESC "undressed")
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM DRESSE UNDRESS)
+       (FLAGS NARTICLEBIT)
+       (ACTION UNDRESSED-F)>
+
+<ROUTINE UNDRESSED-F ()
+ <COND (<REMOTE-VERB?> <RFALSE>)
+       (<VERB? TAKE> <RFALSE>) ;"GET UN/DRESSED"
+       (<VERB? OPEN CLOSE SEARCH SEARCH-FOR EXAMINE LOOK-INSIDE LOOK-ON>
+       <COND (<GLOBAL-IN? ,DRESSING-TABLE-LG ,HERE>
+              <DO-INSTEAD-OF ,DRESSING-TABLE-LG ,UNDRESSED>
+              <RTRUE>)
+             (T <NOT-HERE ,DRESSING-TABLE-LG>)>)
+       (T <DONT-UNDERSTAND>)>>
+
+<OBJECT ARTIFACT
+       (IN GLOBAL-OBJECTS ;LOCAL-GLOBALS)
+       (DESC "hidden treasure" ;"artifact")
+       (ADJECTIVE VALUABLE MISSING HIDDEN)
+       (SYNONYM ARTIFACT TREASURE)
+       (FLAGS SEENBIT VOWELBIT)
+       (ACTION ARTIFACT-F)>
+
+<ROUTINE ARTIFACT-F ()
+ <COND (<T? ,TREASURE-FOUND>
+       <DO-INSTEAD-OF ,TREASURE ,ARTIFACT>
+       <RTRUE>)
+       (<OR <VERB? SHOW SSHOW TAKE-TO>
+           <NOT <REMOTE-VERB?>>>
+       <NOT-FOUND ,ARTIFACT>
+       <RTRUE>)>>
+
+<ROUTINE TIMES-UP ()
+       <TELL
+"At first light, the police arrive and take over the investigation." CR>
+       <FINISH>>
diff --git a/goal.zap b/goal.zap
new file mode 100644 (file)
index 0000000..9178e23
--- /dev/null
+++ b/goal.zap
@@ -0,0 +1,2106 @@
+
+
+       .FUNCT  FOLLOW-GOAL,PERSON,HEER,GT,GOAL,FLG,IGOAL=0,X
+       LOC     PERSON >HEER
+       IN?     HEER,ROOMS /?CND1
+       CALL    META-LOC,HEER >HEER
+       MOVE    PERSON,HEER
+?CND1: GETP    PERSON,P?CHARACTER
+       GET     GOAL-TABLES,STACK >GT
+       GET     GT,GOAL-F
+       EQUAL?  HEER,STACK \?CCL5
+       CALL    GOAL-REACHED,PERSON
+       RSTACK  
+?CCL5: GET     GT,GOAL-ENABLE
+       ZERO?   STACK /FALSE
+       GET     GT,GOAL-I >IGOAL
+       GET     TRANSFER-TABLE,IGOAL >GOAL
+       ZERO?   GOAL \?CND7
+       SET     'IGOAL,FALSE-VALUE
+       GET     GT,GOAL-S >GOAL
+?CND7: GETP    HEER,P?STATION >X
+       EQUAL?  HEER,GOAL,X /?CCL11
+       CALL    MOVE-PERSON,PERSON,X
+       RSTACK  
+?CCL11:        ZERO?   GOAL /FALSE
+       EQUAL?  HEER,GOAL \?CCL15
+       ZERO?   IGOAL /?CCL18
+       ADD     IGOAL,1
+       GET     TRANSFER-TABLE,STACK >FLG
+       CALL    MOVE-PERSON,PERSON,FLG >FLG
+       GET     GT,GOAL-F
+       CALL    ESTABLISH-GOAL,PERSON,STACK
+       RETURN  FLG
+?CCL18:        GET     GT,GOAL-F >FLG
+       EQUAL?  HEER,FLG /?CCL20
+       CALL    MOVE-PERSON,PERSON,FLG
+       RSTACK  
+?CCL20:        CALL    GOAL-REACHED,PERSON
+       RSTACK  
+?CCL15:        GETP    GOAL,P?STATION
+       EQUAL?  HEER,STACK \?CND9
+       CALL    MOVE-PERSON,PERSON,GOAL
+       RSTACK  
+?CND9: CALL    FOLLOW-GOAL-NEXT,HEER,GOAL >FLG
+       CALL    MOVE-PERSON,PERSON,FLG
+       RSTACK  
+
+
+       .FUNCT  FOLLOW-GOAL-NEXT,HEER,GOAL,LINE,CNT=1,RM,GOAL-FLAG=0,LOC,G
+       GETP    GOAL,P?LINE
+       CALL    GET-LINE,STACK >LINE
+       GETP    GOAL,P?STATION >G
+?PRG1: GET     LINE,CNT >RM
+       EQUAL?  RM,HEER \?CCL5
+       ZERO?   GOAL-FLAG /?CCL8
+       SUB     CNT,3
+       GET     LINE,STACK >LOC
+       RETURN  LOC
+?CCL8: ADD     CNT,3
+       GET     LINE,STACK >LOC
+       RETURN  LOC
+?CCL5: EQUAL?  RM,G \?CND3
+       SET     'GOAL-FLAG,TRUE-VALUE
+?CND3: ADD     CNT,3 >CNT
+       JUMP    ?PRG1
+
+
+       .FUNCT  GET-LINE,LN
+       EQUAL?  LN,MAIN-LINE-C \?CCL3
+       RETURN  MAIN-LINE
+?CCL3: EQUAL?  LN,BED-LINE-C \?CCL5
+       RETURN  BED-LINE
+?CCL5: EQUAL?  LN,TOWER-LINE-C \?CCL7
+       RETURN  TOWER-LINE
+?CCL7: EQUAL?  LN,PASS-LINE-C \FALSE
+       RETURN  PASS-LINE
+
+
+       .FUNCT  IN-MOTION?,PERSON,DISABLED-OK=0,GT,L,F,C,?TMP1
+       GETP    PERSON,P?CHARACTER >C
+       GET     GOAL-TABLES,C >GT
+       EQUAL?  PERSON,BUTLER \?CCL3
+       BTST    PRESENT-TIME,1 \?CCL3
+       ZERO?   DISABLED-OK /FALSE
+?CCL3: GET     GT,GOAL-S
+       ZERO?   STACK /FALSE
+       LOC     PERSON >L
+       GET     GT,GOAL-F >F
+       EQUAL?  L,F /FALSE
+       ZERO?   DISABLED-OK \TRUE
+       GET     GT,GOAL-ENABLE
+       ZERO?   STACK \TRUE
+       RFALSE  
+
+
+       .FUNCT  ESTABLISH-GOAL,PERSON,GOAL,SPEED=1,LOCN,GT,?TMP1
+       LOC     PERSON >LOCN
+       EQUAL?  LOCN,GOAL \?CND1
+       CALL    GOAL-REACHED,PERSON
+       RSTACK  
+?CND1: EQUAL?  PERSON,CONFESSED,CAPTOR \?CND3
+       RETURN  LOCN
+?CND3: GETP    PERSON,P?CHARACTER
+       GET     GOAL-TABLES,STACK >GT
+       GETP    LOCN,P?LINE
+       SUB     STACK,1
+       MUL     STACK,GOAL-I-MULTIPLIER >?TMP1
+       GETP    GOAL,P?LINE
+       SUB     STACK,1
+       MUL     STACK,2
+       ADD     ?TMP1,STACK
+       PUT     GT,GOAL-I,STACK
+       GETP    GOAL,P?STATION
+       PUT     GT,GOAL-S,STACK
+       PUT     GT,GOAL-F,GOAL
+       PUT     GT,GOAL-ENABLE,SPEED
+       RETURN  LOCN
+
+
+       .FUNCT  GOAL-REACHED,PERSON,GT,VAL=0
+       GETP    PERSON,P?CHARACTER
+       GET     GOAL-TABLES,STACK >GT
+       PUT     GT,GOAL-S,FALSE-VALUE
+       PUTP    PERSON,P?LDESC,0
+       CALL    META-LOC,PERSON >VAL
+       CALL    CREEPY?,VAL
+       ZERO?   STACK \?CND1
+       FSET    VAL,ONBIT
+?CND1: SET     'GOAL-PERSON,PERSON
+       GET     GT,GOAL-FUNCTION
+       CALL    D-APPLY,STR?140,STACK,G-REACHED >VAL
+       ZERO?   VAL /?CCL5
+       RETURN  VAL
+?CCL5: IN?     PERSON,HERE \FALSE
+       FSET?   PERSON,TOUCHBIT /FALSE
+       GETP    PERSON,P?DESCFCN
+       CALL    STACK,M-OBJDESC
+       RSTACK  
+
+
+       .FUNCT  ENTERS?,DIR,WHERE
+       EQUAL?  DIR,P?IN /TRUE
+       FSET?   WHERE,TOUCHBIT /TRUE
+       RFALSE  
+
+
+       .FUNCT  TELL-OPEN-DOOR
+       PRINTI  " opens the door for a moment and"
+       RTRUE   
+
+
+       .FUNCT  TELL-HIS-HER-BEDROOM,CHR,WHERE,?TMP1
+       EQUAL?  CHR,BUTLER-C \?CND1
+       CALL    PRINTT,WHERE
+       RTRUE   
+?CND1: INC     'CHR
+       GET     CHAR-ROOM-TABLE,CHR >?TMP1
+       GET     CHAR-CLOSET-TABLE,CHR
+       EQUAL?  WHERE,?TMP1,STACK /?PRG9
+       CALL    PRINTT,WHERE
+       RTRUE   
+?PRG9: PRINTI  " h"
+       SUB     CHR,1
+       GET     CHARACTER-TABLE,STACK
+       FSET?   STACK,FEMALE \?PRG16
+       PRINTI  "er "
+       JUMP    ?CND11
+?PRG16:        PRINTI  "is "
+?CND11:        FSET?   WHERE,SECRETBIT \?PRG23
+       PRINTI  "entrance"
+       RTRUE   
+?PRG23:        PRINTI  "bedroom"
+       RTRUE   
+
+
+       .FUNCT  TELL-LOCKING-THE-DOOR,DOOR
+       ZERO?   DOOR /FALSE
+       FSET?   DOOR,LOCKED \FALSE
+       PRINTI  ", locking the door"
+       RTRUE   
+
+
+       .FUNCT  MOVE-PERSON,PERSON,WHERE,DIR,EDIR,GT=0,OL,COR,PCOR,CHR,DOOR=0,VAL=0,X
+       FSET?   PERSON,MUNGBIT /FALSE
+       EQUAL?  PERSON,CONFESSED,CAPTOR,FOLLOWER /FALSE
+       EQUAL?  PERSON,BUTLER \?CND1
+       EQUAL?  AWAITING-REPLY,BUTLER-1-R,BUTLER-2-R /FALSE
+       EQUAL?  AWAITING-REPLY,BUTLER-3-R,BUTLER-4-R /FALSE
+?CND1: PUTP    PERSON,P?LDESC,6
+       EQUAL?  PERSON,BUTLER \?CND11
+       BTST    PRESENT-TIME,1 /FALSE
+?CND11:        GETP    PERSON,P?CHARACTER >CHR
+       GET     GOAL-TABLES,CHR >GT
+       LOC     PERSON >OL
+       CALL    DIR-FROM,OL,WHERE >DIR
+       CALL    COMPASS-EQV,OL,DIR >EDIR
+       SET     'GOAL-PERSON,PERSON
+       ZERO?   DIR /?CND15
+       GETPT   OL,DIR >X
+       ZERO?   X /?CND15
+       PTSIZE  X
+       EQUAL?  STACK,DEXIT \?CND15
+       GETB    X,DEXITOBJ >DOOR
+?CND15:        CALL    CORRIDOR-LOOK,PERSON >PCOR
+       GET     GT,GOAL-FUNCTION
+       CALL    D-APPLY,STR?141,STACK,G-ENROUTE
+       EQUAL?  M-FATAL,STACK \?CCL22
+       CALL    THIS-IS-IT,PERSON
+       RETURN  2
+?CCL22:        EQUAL?  PERSON,PLAYER \?CCL26
+       ZERO?   DOOR /?CND20
+       FSET    DOOR,SEENBIT
+       CALL    WALK-THRU-DOOR?,X
+       ZERO?   STACK \?CND20
+       RETURN  2
+?CCL26:        ZERO?   NOW-WEARING /?CCL34
+       ZERO?   LIT /?CND20
+       FSET?   PERSON,NDESCBIT /?CND20
+?CCL34:        EQUAL?  OL,HERE \?CCL40
+       SET     'VAL,TRUE-VALUE
+       CALL    HE-SHE-IT,PERSON,TRUE-VALUE
+       ZERO?   DOOR /?CND43
+       FSET?   DOOR,OPENBIT /?CND43
+       FSET    DOOR,TOUCHBIT
+       CALL    TELL-OPEN-DOOR
+?CND43:        EQUAL?  DIR,P?OUT \?CCL49
+       PRINTI  " leaves.
+"
+       JUMP    ?CND20
+?CCL49:        CALL    ENTERS?,DIR,WHERE
+       ZERO?   STACK /?PRG58
+       PRINTI  " enters"
+       CALL    TELL-HIS-HER-BEDROOM,CHR,WHERE
+       CALL    TELL-LOCKING-THE-DOOR,DOOR
+       PRINTI  ".
+"
+       JUMP    ?CND20
+?PRG58:        PRINTI  " walks "
+       EQUAL?  DIR,P?UP,P?DOWN \?CCL62
+       CALL    DIR-PRINT,DIR
+       JUMP    ?CND60
+?CCL62:        FSET?   WHERE,TOUCHBIT \?CCL64
+       PRINTI  "to"
+       CALL    TELL-HIS-HER-BEDROOM,CHR,WHERE
+       JUMP    ?CND60
+?CCL64:        CALL    DIR-PRINT,EDIR
+?CND60:        CALL    TELL-LOCKING-THE-DOOR,DOOR
+       PRINTI  ".
+"
+       JUMP    ?CND20
+?CCL40:        EQUAL?  WHERE,HERE \?CCL70
+       ZERO?   NOW-WEARING \?CCL73
+       PRINTI  "When you hear the door begin to open, you"
+       PRINT   REMEMBER-NOT-DRESSED
+       PRINTI  " and hop into "
+       PRINTD  YOUR-BATHROOM
+       PRINTI  ".
+"
+       CALL    GOTO,YOUR-BATHROOM
+       SET     'VAL,M-FATAL
+       JUMP    ?CND20
+?CCL73:        ZERO?   GT /?CCL76
+       GET     GT,GOAL-F
+       EQUAL?  HERE,STACK /?CND20
+?CCL76:        SET     'VAL,TRUE-VALUE
+       CALL    START-SENTENCE,PERSON
+       ZERO?   DOOR /?CND79
+       FSET?   DOOR,OPENBIT /?CND79
+       FSET    DOOR,TOUCHBIT
+       CALL    TELL-OPEN-DOOR
+?CND79:        EQUAL?  PRSA,V?WALK \?PRG90
+       EQUAL?  OL,OHERE \?PRG90
+       PRINTI  " follows you"
+       JUMP    ?PRG97
+?PRG90:        PRINTI  " walks past you from"
+       EQUAL?  DIR,P?UP,P?DOWN \?CCL94
+       PRINTC  32
+       CALL    OPP-DIR,DIR
+       CALL    DIR-PRINT,STACK
+       JUMP    ?PRG97
+?CCL94:        CALL    TELL-HIS-HER-BEDROOM,CHR,OL
+?PRG97:        PRINTI  ".
+"
+       JUMP    ?CND20
+?CCL70:        GETP    HERE,P?CORRIDOR >COR
+       ZERO?   COR /?CND20
+       ZERO?   PCOR /?CCL102
+       CALL    CORRIDOR-LOOK,WHERE
+       ZERO?   STACK \?CCL105
+       SET     'VAL,TRUE-VALUE
+       EQUAL?  PERSON,P-HER-OBJECT \?CCL108
+       FSET?   HER,TOUCHBIT \?CCL108
+       PRINTI  "She"
+       JUMP    ?CND106
+?CCL108:       EQUAL?  PERSON,P-HIM-OBJECT \?CCL114
+       FSET?   HIM,TOUCHBIT \?CCL114
+       PRINTI  "He"
+       JUMP    ?CND106
+?CCL114:       CALL    START-SENTENCE,PERSON
+       PRINTC  44
+       CALL    WHERE?,PERSON,PCOR
+       PRINTC  44
+?CND106:       ZERO?   DOOR /?CND123
+       FSET?   DOOR,OPENBIT /?CND123
+       FSET    DOOR,TOUCHBIT
+       CALL    TELL-OPEN-DOOR
+?CND123:       CALL    ENTERS?,DIR,WHERE
+       ZERO?   STACK /?PRG132
+       PRINTI  " enters"
+       CALL    TELL-HIS-HER-BEDROOM,CHR,WHERE
+       JUMP    ?CND127
+?PRG132:       PRINTI  " disappears "
+       EQUAL?  DIR,P?UP,P?DOWN /?CND134
+       PRINTI  "to the "
+?CND134:       CALL    DIR-PRINT,EDIR
+?CND127:       CALL    TELL-LOCKING-THE-DOOR,DOOR
+       PRINTI  ".
+"
+       JUMP    ?CND20
+?CCL105:       SET     'VAL,TRUE-VALUE
+       CALL    START-SENTENCE,PERSON
+       PRINTI  " is"
+       CALL    WHERE?,PERSON,PCOR
+       PRINTI  ", heading "
+       EQUAL?  PCOR,DIR \?CCL146
+       PRINTI  "away from you"
+       JUMP    ?PRG157
+?CCL146:       CALL    OPP-DIR,DIR
+       EQUAL?  PCOR,STACK \?CCL150
+       PRINTI  "toward you"
+       JUMP    ?PRG157
+?CCL150:       EQUAL?  DIR,P?UP,P?DOWN /?CND153
+       PRINTI  "toward the "
+?CND153:       CALL    DIR-PRINT,EDIR
+?PRG157:       PRINTI  ".
+"
+       JUMP    ?CND20
+?CCL102:       CALL    CORRIDOR-LOOK,WHERE >PCOR
+       ZERO?   PCOR /?CND20
+       SET     'VAL,TRUE-VALUE
+       CALL    WHERE?,PERSON,PCOR,TRUE-VALUE
+       CALL    HE-SHE-IT,PERSON,0,STR?142
+       CALL    DIR-FROM,WHERE,OL
+       CALL    COMPASS-EQV,HERE,STACK >DIR
+       EQUAL?  DIR,P?IN /?PRG166
+       PRINTI  " from"
+       CALL    TELL-HIS-HER-BEDROOM,CHR,OL
+?PRG166:       PRINTI  ".
+"
+?CND20:        ZERO?   VAL /?CND168
+       IN?     LUGGAGE,PERSON \?CND168
+       ZERO?   NOW-WEARING /?CND168
+       CALL    HE-SHE-IT,PERSON,TRUE-VALUE,STR?1
+       PRINTI  " carrying "
+       PRINTD  LUGGAGE
+       PRINTI  ".
+"
+?CND168:       ZERO?   PERSON /?CND175
+       MOVE    PERSON,WHERE
+?CND175:       ZERO?   GT /?CND177
+       GET     GT,GOAL-F
+       EQUAL?  STACK,WHERE \?CCL181
+       CALL    GOAL-REACHED,PERSON >X
+       ZERO?   X \?CCL184
+       EQUAL?  HERE,WHERE \?CCL184
+       FSET?   PERSON,NDESCBIT /?CCL184
+       SET     'VAL,TRUE-VALUE
+       CALL    HE-SHE-IT,PERSON,TRUE-VALUE
+       PRINTI  " enters and nods to you."
+       CRLF    
+       JUMP    ?CND177
+?CCL184:       ZERO?   X /?CND177
+       EQUAL?  VAL,M-FATAL /?CND177
+       SET     'VAL,X
+       JUMP    ?CND177
+?CCL181:       GET     GT,GOAL-FUNCTION
+       CALL    D-APPLY,STR?141,STACK,G-ENROUTE >X
+       ZERO?   X \?CCL195
+       IN?     PERSON,HERE \?CCL195
+       FSET?   PERSON,TOUCHBIT /?CCL195
+       GETP    PERSON,P?DESCFCN
+       CALL    STACK,M-OBJDESC >X
+       ZERO?   X /?CND177
+       SET     'VAL,TRUE-VALUE
+       JUMP    ?CND177
+?CCL195:       ZERO?   X /?CND177
+       EQUAL?  VAL,M-FATAL /?CND177
+       SET     'VAL,X
+?CND177:       ZERO?   VAL /FALSE
+       CALL    THIS-IS-IT,PERSON
+       EQUAL?  VAL,M-FATAL /?CND207
+       FSET    WHERE,SEENBIT
+       PUT     FOLLOW-LOC,CHR,WHERE
+?CND207:       RETURN  VAL
+
+
+       .FUNCT  COMPASS-EQV,RM,DIR,DIRTBL,DIRL,P,L,TBL,VAL=0,?TMP1
+       EQUAL?  DIR,P?UP,P?DOWN /?CND1
+       EQUAL?  DIR,P?IN,P?OUT /?CND1
+       RETURN  DIR
+?CND1: GETPT   RM,DIR >DIRTBL
+       PTSIZE  DIRTBL >DIRL
+       SET     'P,0
+?PRG5: ZERO?   VAL /?CCL9
+       RETURN  VAL
+?CCL9: NEXTP   RM,P >P
+       ZERO?   P /FALSE
+       LESS?   P,LOW-DIRECTION /?PRG5
+       GETPT   RM,P >TBL
+       PTSIZE  TBL >L
+       EQUAL?  L,DIRL \?PRG5
+       DEC     'L
+?PRG15:        GETB    TBL,L >?TMP1
+       GETB    DIRTBL,L
+       EQUAL?  ?TMP1,STACK \?PRG5
+       DLESS?  'L,0 \?PRG15
+       SET     'VAL,P
+       JUMP    ?PRG5
+
+
+       .FUNCT  DIR-EQV?,RM,DIR1,DIR2,DIR1TBL,DIR2TBL,L,?TMP1
+       EQUAL?  DIR1,DIR2 /TRUE
+       GETPT   RM,DIR1 >DIR1TBL
+       ZERO?   DIR1TBL /FALSE
+       GETPT   RM,DIR2 >DIR2TBL
+       ZERO?   DIR2TBL /FALSE
+       PTSIZE  DIR1TBL >L
+       PTSIZE  DIR2TBL
+       EQUAL?  L,STACK \FALSE
+       DEC     'L
+?PRG9: GETB    DIR1TBL,L >?TMP1
+       GETB    DIR2TBL,L
+       EQUAL?  ?TMP1,STACK \FALSE
+       DLESS?  'L,0 \?PRG9
+       RTRUE   
+
+
+       .FUNCT  DIR-FROM,HERE,THERE,V=0,P,D
+       CALL    DIR-FROM-TEST,HERE,THERE,P?UP
+       ZERO?   STACK /?CCL3
+       RETURN  P?UP
+?CCL3: CALL    DIR-FROM-TEST,HERE,THERE,P?DOWN
+       ZERO?   STACK /?CCL5
+       RETURN  P?DOWN
+?CCL5: CALL    DIR-FROM-TEST,HERE,THERE,P?IN
+       ZERO?   STACK /?CCL7
+       RETURN  P?IN
+?CCL7: CALL    DIR-FROM-TEST,HERE,THERE,P?OUT
+       ZERO?   STACK /?CND1
+       RETURN  P?OUT
+?CND1: SET     'P,0
+?PRG9: NEXTP   HERE,P >P
+       LESS?   P,LOW-DIRECTION \?CCL13
+       RETURN  V
+?CCL13:        CALL    DIR-FROM-TEST,HERE,THERE,P >D
+       ZERO?   D /?PRG9
+       LESS?   D,LOW-DIRECTION /?PRD19
+       RETURN  P
+?PRD19:        ZERO?   V \?CCL17
+       SET     'V,P
+       JUMP    ?PRG9
+?CCL17:        RETURN  P
+
+
+       .FUNCT  DIR-FROM-TEST,HERE,THERE,P,L,TBL
+       GETPT   HERE,P >TBL
+       ZERO?   TBL /FALSE
+       PTSIZE  TBL >L
+       EQUAL?  L,DEXIT,UEXIT,CEXIT \FALSE
+       GETB    TBL,REXIT
+       EQUAL?  STACK,THERE \FALSE
+       RETURN  P
+
+
+       .FUNCT  I-PLAYER,ARG,VAL=0
+       LOC     PLAYER >HERE
+       EQUAL?  ARG,G-REACHED \?CCL3
+       CALL    MAKE-ALL-PEOPLE,-12
+       RTRUE   
+?CCL3: EQUAL?  ARG,G-ENROUTE \FALSE
+       EQUAL?  OHERE,HERE /FALSE
+       CALL    LIT?
+       ZERO?   STACK /?PRG20
+       EQUAL?  HERE,MAZE /?PRG20
+       SET     'VAL,HERE
+       FSET?   VAL,SECRETBIT \?PRD14
+       FSET?   HERE,SEENBIT \?PRG20
+?PRD14:        RANDOM  100
+       LESS?   50,STACK /FALSE
+       CALL    FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,PLAYER >VAL
+       ZERO?   VAL /FALSE
+?PRG20:        PRINTI  "But "
+       FSET?   HERE,SURFACEBIT \?PRG27
+       PRINTI  "on"
+       JUMP    ?PRG29
+?PRG27:        PRINTI  "in"
+?PRG29:        CALL    PRINTT,HERE
+       ZERO?   VAL \?CCL33
+       PRINTI  " you get lost in the dark"
+       JUMP    ?PRG46
+?CCL33:        FSET?   VAL,SECRETBIT \?CCL37
+       PRINTI  " you realize that you don't know the way"
+       JUMP    ?PRG46
+?CCL37:        EQUAL?  VAL,GHOST-NEW \?PRG44
+       PRINTI  " the ghost blocks your way"
+       JUMP    ?PRG46
+?PRG44:        CALL    HE-SHE-IT,VAL
+       CALL    PICK-ONE-NEW,PLAYER-OBSTACLES
+       PRINT   STACK
+?PRG46:        PRINTI  ".
+"
+       CALL    MAKE-ALL-PEOPLE,-12
+       RETURN  2
+
+
+       .FUNCT  GOODNIGHT,RM,PER,CLOSET=0,DR,VAL=0
+       EQUAL?  RM,HERE \?CCL3
+       PRINTD  PER
+       CALL    THIS-IS-IT,PER
+       PRINTI  " shows you firmly to the door, saying"
+       CALL    HE-SHE-IT,PER,0,STR?1
+       PRINTI  " going to bed."
+       CRLF    
+       SET     'VAL,WINNER
+       SET     'WINNER,PLAYER
+       PUTP    PER,P?LINE,0
+       GETPT   HERE,P?OUT
+       GETB    STACK,REXIT
+       CALL    GOTO,STACK
+       SET     'WINNER,VAL
+       JUMP    ?CND1
+?CCL3: EQUAL?  CLOSET,HERE \?CND1
+       CALL    FIND-FLAG-LG,CLOSET,DOORBIT,SECRETBIT >DR
+       ZERO?   DR /?CND1
+       EQUAL?  DR,SECRET-HYDE-DOOR,SECRET-IRIS-DOOR /?CND1
+       FSET?   DR,OPENBIT \?CND1
+       FCLEAR  DR,OPENBIT
+       GETP    PER,P?CHARACTER
+       PUT     FOUND-PASSAGES,STACK,TRUE-VALUE
+       CALL    LIT? >LIT
+       PRINTD  PER
+       PRINTI  " closes the "
+       PRINTD  DR
+       PRINTI  " without noticing you."
+       CRLF    
+       SET     'VAL,TRUE-VALUE
+?CND1: FCLEAR  RM,ONBIT
+       FSET    PER,MUNGBIT
+       FCLEAR  RM,OPENBIT
+       FSET    RM,LOCKED
+       EQUAL?  PER,FOLLOWER \?CND15
+       SET     'FOLLOWER,0
+?CND15:        PUTP    PER,P?LDESC,14
+       RETURN  VAL
+
+
+       .FUNCT  GRAB-ATTENTION,PERSON,OBJ=0,N,GT,ATT
+       FSET?   PERSON,MUNGBIT \?CCL3
+       GETP    PERSON,P?LDESC
+       EQUAL?  STACK,14 \?CCL6
+       CALL    TOO-BAD-BUT,PERSON,STR?145
+       RFALSE  
+?CCL6: CALL    TOO-BAD-BUT,PERSON,STR?146
+       RFALSE  
+?CCL3: GETP    PERSON,P?CHARACTER
+       GET     GOAL-TABLES,STACK >GT
+       GET     GT,GOAL-FUNCTION
+       EQUAL?  STACK,X-RETIRES \?CCL8
+       EQUAL?  PERSON,GHOST-NEW,CONFESSED,CAPTOR /?CCL8
+       GETP    PERSON,P?CHARACTER
+       EQUAL?  VARIATION,STACK /?CCL8
+       ZERO?   OBJ /?CTR7
+       FSET?   OBJ,PERSONBIT /?CTR7
+       FSET?   OBJ,RMUNGBIT /?CCL8
+?CTR7: CALL    TOO-BAD-BUT,PERSON,STR?147
+       RFALSE  
+?CCL8: EQUAL?  PERSON,BUTLER \?CCL17
+       EQUAL?  PRSA,V?ASK-FOR /?PRD20
+       GET     GT,GOAL-S
+       ZERO?   STACK /?CCL17
+?PRD20:        EQUAL?  PRSA,V?THANKS,V?TAKE,V?SORRY /?CCL17
+       EQUAL?  PRSA,V?NO,V?YES /?CCL17
+       EQUAL?  PRSO,DINNER,LUGGAGE /?CCL17
+       CALL    BUTLER-SORRY
+       RFALSE  
+?CCL17:        CALL    ANGRY-REJECT?,PERSON,OBJ >N
+       ZERO?   N /?CND1
+       EQUAL?  N,1 \?CCL28
+       PUSH    STR?70
+       JUMP    ?CND26
+?CCL28:        PUSH    STR?69
+?CND26:        CALL    TOO-BAD-BUT,PERSON,STACK
+       RFALSE  
+?CND1: GET     GT,GOAL-S
+       ZERO?   STACK /?CND29
+       GET     GT,ATTENTION-SPAN >ATT
+       PUT     GT,ATTENTION,ATT
+       ZERO?   ATT \?CCL33
+       PUT     GT,GOAL-ENABLE,1
+       GET     LDESC-STRINGS,17
+       CALL    TOO-BAD-BUT,PERSON,STACK
+       RFALSE  
+?CCL33:        PUT     GT,GOAL-ENABLE,0
+?CND29:        SET     'QCONTEXT,PERSON
+       GETP    PERSON,P?LDESC
+       EQUAL?  STACK,21 /TRUE
+       PUTP    PERSON,P?LDESC,12
+       RTRUE   
+
+
+       .FUNCT  ANGRY-REJECT?,PERSON,OBJ,N
+       EQUAL?  PERSON,GHOST-NEW /FALSE
+       GETP    PERSON,P?LINE >N
+       ZERO?   N /FALSE
+       EQUAL?  PRSA,V?TELL,V?SORRY,V?FORGIVE /FALSE
+       EQUAL?  PRSA,V?GIVE \?CCL9
+       EQUAL?  PRSI,PERSON /FALSE
+?CCL9: CALL    EVIDENCE?,OBJ,PERSON
+       ZERO?   STACK \FALSE
+       RETURN  N
+
+
+       .FUNCT  WHERE?,PER,X=0,CAP=0,?TMP1
+       IN?     PER,HERE /FALSE
+       ZERO?   X \?CND4
+       PRINTC  44
+       CALL    CORRIDOR-LOOK,PER >X
+?CND4: ZERO?   CAP \?CND8
+       PRINTC  32
+?CND8: EQUAL?  X,P?DOWN \?CCL12
+       ZERO?   CAP \?PRG18
+       PRINTC  100
+       JUMP    ?PRG20
+?PRG18:        PRINTC  68
+?PRG20:        PRINTI  "ownstairs"
+       RTRUE   
+?CCL12:        EQUAL?  X,P?IN \?CCL23
+       ZERO?   CAP \?PRG29
+       PRINTI  "in"
+       JUMP    ?CND24
+?PRG29:        PRINTI  "In"
+?CND24:        GETP    PER,P?CHARACTER >?TMP1
+       LOC     PER
+       CALL    TELL-HIS-HER-BEDROOM,?TMP1,STACK
+       RTRUE   
+?CCL23:        EQUAL?  X,P?OUT \?CCL32
+       ZERO?   CAP \?PRG38
+       PRINTC  106
+       JUMP    ?PRG40
+?PRG38:        PRINTC  74
+?PRG40:        PRINTI  "ust outside"
+       RTRUE   
+?CCL32:        ZERO?   CAP \?PRG47
+       PRINTC  116
+       JUMP    ?PRG49
+?PRG47:        PRINTC  84
+?PRG49:        PRINTI  "o the "
+       CALL    DIR-PRINT,X
+       RTRUE   
+
+
+       .FUNCT  DIR-PRINT,DIR,CNT=0,TBL,X
+       ZERO?   DIR \?CND1
+       PRINTI  "out of view"
+       RTRUE   
+?CND1: SET     'TBL,DIR-STRINGS
+?PRG5: GET     TBL,CNT >X
+       ZERO?   X \?CCL9
+       PRINTI  "out of view"
+       RTRUE   
+?CCL9: EQUAL?  X,DIR \?CND7
+       ADD     CNT,1
+       GET     TBL,STACK
+       PRINT   STACK
+       RTRUE   
+?CND7: ADD     CNT,2 >CNT
+       JUMP    ?PRG5
+
+
+       .FUNCT  OPP-DIR,DIR,CNT=0,X
+?PRG1: GET     DIR-STRINGS,CNT >X
+       ZERO?   X /FALSE
+       EQUAL?  X,DIR \?CND3
+       MOD     CNT,4
+       ZERO?   STACK \?CCL9
+       ADD     CNT,2
+       GET     DIR-STRINGS,STACK
+       RSTACK  
+?CCL9: SUB     CNT,2
+       GET     DIR-STRINGS,STACK
+       RSTACK  
+?CND3: ADD     CNT,2 >CNT
+       JUMP    ?PRG1
+
+
+       .FUNCT  I-TOUR,GARG=0,L
+       GET     TOUR-PATH,TOUR-INDEX >L
+       ZERO?   L \?CND1
+       EQUAL?  FOLLOWER,FRIEND,LORD \FALSE
+       SET     'FOLLOWER,0
+       RFALSE  
+?CND1: EQUAL?  HERE,GREAT-HALL \?CND5
+       FSET?   DOCTOR,TOUCHBIT /?CND5
+       CALL    QUEUE,I-TOUR,3
+       MOVE    DOCTOR,HERE
+       CALL    DOCTOR-D >L
+       SET     'TOUR-FORCED,FALSE-VALUE
+       RETURN  L
+?CND5: INC     'TOUR-INDEX
+       SET     'AWAITING-REPLY,FALSE-VALUE
+       CALL    MAKE-ALL-PEOPLE,0
+       CALL    QUEUED?,I-FOUND-IT
+       ZERO?   STACK \?CND9
+       ZERO?   TOUR-FORCED \?CND9
+       CRLF    
+?CND9: SET     'FOUND-IT,FALSE-VALUE
+       CALL    QUEUE,I-FOUND-IT,0
+       EQUAL?  L,GALLERY \?PRG48
+       PRINTI  """You two will have time to chat later,"" says "
+       PRINTD  FRIEND
+       PRINTI  ", ""but you must excuse us now, "
+       EQUAL?  QCONTEXT,FALSE-VALUE,FRIEND,BUTLER /?CCL19
+       PRINTD  QCONTEXT
+       JUMP    ?PRG20
+?CCL19:        PRINTD  DOCTOR
+?PRG20:        PRINTI  ", while I show "
+       CALL    PRINT-NAME,FIRST-NAME
+       PRINTI  " up to "
+       ZERO?   GENDER-KNOWN \?CCL24
+       PRINTI  "the "
+       CALL    PRINT-COLOR
+       JUMP    ?PRG33
+?CCL24:        FSET?   PLAYER,FEMALE \?PRG31
+       PRINTI  "her"
+       JUMP    ?PRG33
+?PRG31:        PRINTI  "his"
+?PRG33:        PRINTI  " bedroom. I'm sure "
+       ZERO?   GENDER-KNOWN \?CCL37
+       PRINTI  "our guest"
+       JUMP    ?PRG46
+?CCL37:        FSET?   PLAYER,FEMALE \?PRG44
+       PRINTI  "she"
+       JUMP    ?PRG46
+?PRG44:        PRINTI  "he"
+?PRG46:        PRINTI  " wants to freshen up for dinner!"""
+       CRLF    
+?PRG48:        PRINTD  FRIEND
+       PRINTI  " guides you "
+       EQUAL?  L,GALLERY \?PRG55
+       PUTP    LORD,P?LDESC,13
+       PUTP    DEB,P?LDESC,13
+       PUTP    OFFICER,P?LDESC,13
+       PRINTI  "up to"
+       JUMP    ?PRG57
+?PRG55:        PRINTI  "into"
+?PRG57:        CALL    PRINTT,L
+       PRINTI  ".
+
+"
+       FSET    FRIEND,RMUNGBIT
+       CALL    THIS-IS-IT,FRIEND
+       MOVE    FRIEND,L
+       EQUAL?  L,GALLERY,YOUR-ROOM \?CND59
+       PUTP    FRIEND,P?LINE,0
+       PRINTI  "She says, """
+       EQUAL?  L,GALLERY \?PRG68
+       PRINTI  "I know it's confusing, but the British call this the 'first' floor. We just left the 'ground' floor."""
+       CRLF    
+       JUMP    ?CND59
+?PRG68:        PRINTI  "You'll be sleeping in the same room that Queen Victoria slept in!"""
+       CRLF    
+?CND59:        EQUAL?  L,GALLERY,YOUR-ROOM /?CND70
+       FSET?   LORD,TOUCHBIT \?CND72
+       FSET    LORD,RMUNGBIT
+?CND72:        MOVE    LORD,L
+       PUT     FOLLOW-LOC,LORD-C,L
+?CND70:        SET     'WINNER,PLAYER
+       CALL    GOTO,L,TRUE-VALUE,FALSE-VALUE
+       EQUAL?  L,YOUR-ROOM /?CCL76
+       CALL    QUEUE,I-TOUR,3
+       JUMP    ?CND74
+?CCL76:        EQUAL?  FOLLOWER,FRIEND,LORD \?CND77
+       SET     'FOLLOWER,0
+?CND77:        IN?     BUTLER,L \?CND74
+       LOC     OFFICER
+       CALL    ESTABLISH-GOAL,FRIEND,STACK
+       CALL    TAMARA-LEAVES-YOU
+?CND74:        SET     'TOUR-FORCED,FALSE-VALUE
+       RETURN  2
+
+
+       .FUNCT  I-FRIEND-GREETS,GARG=0
+       PRINTI  "When a door opens in the castle"
+       FSET?   FRONT-GATE,OPENBIT /?PRG7
+       FSET    FRONT-GATE,OPENBIT
+       PRINTI  " and the "
+       PRINTD  FRONT-GATE
+       PRINTI  " creaks open"
+?PRG7: PRINTI  ", you decide to "
+       EQUAL?  HERE,COURTYARD /?PRG13
+       MOVE    CAR,COURTYARD
+       PRINTI  "drive through the gate and "
+?PRG13:        PRINTI  "get out of the car."
+       CRLF    
+       CALL    GOTO,COURTYARD
+       RTRUE   
+
+
+       .FUNCT  BUTLER-APPEARS,GARG=0,LL,L
+       EQUAL?  GARG,G-REACHED \FALSE
+       GETP    BUTLER,P?CHARACTER
+       GET     GOAL-TABLES,STACK
+       PUT     STACK,GOAL-FUNCTION,BUTLER-FETCHES
+       PUTP    BUTLER,P?LDESC,6
+       FSET?   COURTYARD,TOUCHBIT /?CCL6
+       CALL    ESTABLISH-GOAL,BUTLER,COURTYARD
+       RFALSE  
+?CCL6: LOC     BUTLER >L
+       CALL    META-LOC,LUGGAGE >LL
+       EQUAL?  LL,YOUR-ROOM,YOUR-BATHROOM \?CCL9
+       EQUAL?  FOLLOWER,FRIEND,LORD \?CND10
+       SET     'FOLLOWER,0
+?CND10:        LOC     BUTLER
+       CALL    ESTABLISH-GOAL,BUTLER,STACK
+       RFALSE  
+?CCL9: EQUAL?  LL,L \?CCL13
+       CALL    BUTLER-FETCHES,G-REACHED
+       RFALSE  
+?CCL13:        CALL    ESTABLISH-GOAL,BUTLER,LL
+       RFALSE  
+
+
+       .FUNCT  BUTLER-FETCHES,GARG=0,L,LL,GT
+       LOC     BUTLER >L
+       CALL    META-LOC,LUGGAGE >LL
+       GETP    BUTLER,P?CHARACTER
+       GET     GOAL-TABLES,STACK >GT
+       PUTP    BUTLER,P?LDESC,6
+       EQUAL?  LL,YOUR-ROOM,YOUR-BATHROOM \?CCL3
+       EQUAL?  FOLLOWER,FRIEND,LORD \?CND4
+       SET     'FOLLOWER,0
+?CND4: PUT     GT,GOAL-FUNCTION,BUTLER-CARRIES
+       LOC     BUTLER
+       CALL    ESTABLISH-GOAL,BUTLER,STACK
+       RFALSE  
+?CCL3: EQUAL?  L,LL \?CCL7
+       IN?     LUGGAGE,BUTLER /?CCL7
+       PUT     GT,GOAL-FUNCTION,BUTLER-CARRIES
+       CALL    ESTABLISH-GOAL,BUTLER,YOUR-ROOM
+       FCLEAR  LUGGAGE,OPENBIT
+       MOVE    LUGGAGE,BUTLER
+       MOVE    CAR,COURTYARD
+       EQUAL?  L,HERE \FALSE
+       FSET?   BUTLER,NDESCBIT /FALSE
+       CALL    HE-SHE-IT,BUTLER,TRUE-VALUE
+       PRINTI  " takes "
+       PRINTD  LUGGAGE
+       PRINTI  ".
+"
+       RFALSE  
+?CCL7: EQUAL?  GARG,G-REACHED \FALSE
+       FSET?   COURTYARD,TOUCHBIT \?CCL20
+       CALL    META-LOC,LUGGAGE
+       CALL    ESTABLISH-GOAL,BUTLER,STACK
+       RFALSE  
+?CCL20:        CALL    ESTABLISH-GOAL,BUTLER,COURTYARD
+       RFALSE  
+
+
+       .FUNCT  TAMARA-LEAVES-YOU
+       CALL    HE-SHE-IT,FRIEND,TRUE-VALUE
+       PRINTI  " turns to leave, saying, ""Here's "
+       PRINTD  BUTLER
+       IN?     LUGGAGE,BUTLER \?PRG7
+       PRINTI  " with "
+       PRINTD  LUGGAGE
+?PRG7: PRINTI  ", so I'll leave you to rest or freshen up, "
+       CALL    PRINT-NAME,FIRST-NAME
+       ZERO?   STACK /?PRG13
+       PRINTC  46
+?PRG13:        PRINTR  " Dinner's at eight, by the way -- or whenever you hear the gong."""
+
+
+       .FUNCT  BUTLER-CARRIES,GARG=0,L,LL=0
+       LOC     BUTLER >L
+       EQUAL?  GARG,G-ENROUTE \?CCL3
+       EQUAL?  L,FOYER \FALSE
+       FCLEAR  FRONT-DOOR,OPENBIT
+       RFALSE  
+?CCL3: EQUAL?  GARG,G-REACHED \FALSE
+       GETP    BUTLER,P?CHARACTER
+       GET     GOAL-TABLES,STACK
+       PUT     STACK,GOAL-ENABLE,0
+       CALL    QUEUE,I-BUTLER-HINTS,7
+       CALL    QUEUE,I-BUTLER-COOKS,9
+       PUTP    BUTLER,P?LDESC,9
+       FCLEAR  BUTLER,NDESCBIT
+       IN?     LUGGAGE,BUTLER \?CND8
+       SET     'LL,TRUE-VALUE
+       MOVE    LUGGAGE,BED
+?CND8: CALL    QUEUED?,I-TOUR
+       ZERO?   STACK \?CND10
+       EQUAL?  FRIEND,FOLLOWER /?CND10
+       LOC     OFFICER
+       CALL    ESTABLISH-GOAL,FRIEND,STACK
+?CND10:        EQUAL?  L,HERE \FALSE
+       IN?     FRIEND,HERE \?PRG21
+       EQUAL?  FRIEND,FOLLOWER /?PRG21
+       CALL    TAMARA-LEAVES-YOU
+?PRG21:        PRINTI  "The butler enters"
+       ZERO?   LL /?CND23
+       PRINTI  " with "
+       PRINTD  LUGGAGE
+       PRINTI  " and lays it on the bed"
+?CND23:        SET     'QCONTEXT,BUTLER
+       CALL    THIS-IS-IT,BUTLER
+       FSET    BUTLER,TOUCHBIT
+       PUTP    BUTLER,P?LDESC,12
+       SET     'AWAITING-REPLY,BUTLER-1-R
+       CALL    QUEUE,I-REPLY,CLOCKER-RUNNING
+       PRINTI  ".
+""I regret to say, "
+       CALL    TITLE-NAME
+       PRINTI  ", that the maid will be unable to unpack for you, due to the arrangements for the late Lord Lionel's memorial birthday dinner,"" he apologizes. """
+       GET     QUESTIONS,AWAITING-REPLY
+       PRINT   STACK
+       PRINTI  """
+"
+       RETURN  2
+
+
+       .FUNCT  I-BUTLER-HINTS,GARG=0,SAID=0
+       EQUAL?  AWAITING-REPLY,BUTLER-1-R,BUTLER-2-R /?CTR2
+       EQUAL?  AWAITING-REPLY,BUTLER-3-R,BUTLER-4-R \?CCL3
+?CTR2: CALL    QUEUE,I-BUTLER-HINTS,1
+       RETURN  SAID
+?CCL3: LESS?   2,BUTLER-HINTS-COUNTER \?CCL7
+       CALL    QUEUE,I-BUTLER-HINTS,0
+       RFALSE  
+?CCL7: LOC     BUTLER
+       EQUAL?  HERE,STACK \?CCL9
+       GETP    BUTLER,P?LINE
+       ZERO?   STACK \?CCL9
+       SET     'SAID,TRUE-VALUE
+       GETP    BUTLER,P?CHARACTER
+       GET     GOAL-TABLES,STACK
+       PUT     STACK,ATTENTION,5
+       INC     'BUTLER-HINTS-COUNTER
+       CALL    QUEUE,I-BUTLER-HINTS,2
+       SET     'QCONTEXT,BUTLER
+       CALL    THIS-IS-IT,BUTLER
+       PUTP    BUTLER,P?LDESC,12
+       EQUAL?  1,BUTLER-HINTS-COUNTER \?CCL14
+       SET     'AWAITING-REPLY,BUTLER-2-R
+       CALL    QUEUE,I-REPLY,CLOCKER-RUNNING
+       PRINTD  BUTLER
+       PRINTI  " coughs diffidently and asks, """
+       CALL    TITLE-NAME
+       PRINTI  "? "
+       GET     QUESTIONS,AWAITING-REPLY
+       PRINT   STACK
+       PRINTI  """
+"
+       SET     'SAID,M-FATAL
+       RETURN  SAID
+?CCL14:        EQUAL?  2,BUTLER-HINTS-COUNTER \?CCL18
+       IN?     MACE,BUTLER \FALSE
+       SET     'AWAITING-REPLY,BUTLER-3-R
+       CALL    QUEUE,I-REPLY,CLOCKER-RUNNING
+       PRINTI  "
+"""
+       GET     QUESTIONS,AWAITING-REPLY
+       PRINT   STACK
+       PRINTI  """ adds "
+       PRINTD  BUTLER
+       PRINTI  ".
+"
+       SET     'SAID,M-FATAL
+       RETURN  SAID
+?CCL18:        EQUAL?  3,BUTLER-HINTS-COUNTER \?CND1
+       CALL    I-BUTLER-COOKS
+       FSET?   SECRET-YOUR-DOOR,OPENBIT /?PRG38
+       PRINTI  """Ah, by the way, "
+       CALL    TITLE-NAME
+       PRINTI  " -- s"
+       CALL    BUTLER-MIRROR-STORY
+       PRINTI  "Without explaining further, "
+       PRINTD  BUTLER
+       EQUAL?  HERE,YOUR-ROOM \?CCL33
+       PUT     FOLLOW-LOC,BUTLER-C,GALLERY
+       MOVE    BUTLER,GALLERY
+       PUTP    BUTLER,P?LDESC,6
+       PRINTI  " abruptly leaves the room."
+       CRLF    
+       RETURN  SAID
+?CCL33:        PUTP    BUTLER,P?LDESC,20
+       PRINTI  " turns to his work."
+       CRLF    
+       RETURN  SAID
+?PRG38:        PRINTI  """I hope you have a pleasant stay with us, "
+       CALL    TITLE-NAME
+       ZERO?   STACK /?PRG44
+       PRINTC  46
+?PRG44:        PRINTI  " Dinner is at eight."""
+       CRLF    
+       RETURN  SAID
+?CCL9: IN?     BUTLER,LOCAL-GLOBALS /?CND1
+       CALL    QUEUE,I-BUTLER-HINTS,1
+?CND1: RETURN  SAID
+
+
+       .FUNCT  I-BUTLER-COOKS,GARG=0,VAL=0
+       EQUAL?  AWAITING-REPLY,BUTLER-1-R,BUTLER-2-R /?CTR2
+       EQUAL?  AWAITING-REPLY,BUTLER-3-R,BUTLER-4-R /?CTR2
+       EQUAL?  3,BUTLER-HINTS-COUNTER /?CCL3
+       CALL    I-BUTLER-HINTS >VAL
+       ZERO?   VAL /?CCL3
+?CTR2: CALL    QUEUE,I-BUTLER-COOKS,2
+       RETURN  VAL
+?CCL3: IN?     DINNER,KITCHEN \?CCL10
+       PUTP    BUTLER,P?LDESC,17
+       GETP    BUTLER,P?CHARACTER
+       GET     GOAL-TABLES,STACK
+       PUT     STACK,GOAL-FUNCTION,BUTLER-COOKS
+       CALL    ESTABLISH-GOAL,BUTLER,KITCHEN
+       RETURN  VAL
+?CCL10:        CALL    BUTLER-COOKS,G-REACHED
+       RETURN  VAL
+
+
+       .FUNCT  BUTLER-COOKS,GARG=0,N
+       EQUAL?  GARG,G-REACHED \FALSE
+       PUTP    BUTLER,P?LDESC,11
+       SUB     472,PRESENT-TIME >N
+       GRTR?   N,0 /?CND4
+       SET     'N,1
+?CND4: IN?     DINNER,KITCHEN \?CCL8
+       CALL    QUEUE,I-BUTLER-SERVES,N
+       RFALSE  
+?CCL8: GETP    BUTLER,P?CHARACTER
+       GET     GOAL-TABLES,STACK
+       PUT     STACK,GOAL-FUNCTION,BUTLER-LEAVES
+       PUTP    BUTLER,P?LDESC,17
+       CALL    ESTABLISH-GOAL,BUTLER,KITCHEN
+       RFALSE  
+
+
+       .FUNCT  I-BUTLER-SERVES,GARG=0
+       MOVE    DINNER,BUTLER
+       PUTP    BUTLER,P?LDESC,17
+       GETP    BUTLER,P?CHARACTER
+       GET     GOAL-TABLES,STACK
+       PUT     STACK,GOAL-FUNCTION,BUTLER-SERVES
+       CALL    ESTABLISH-GOAL,BUTLER,DINING-ROOM
+       IN?     BUTLER,HERE \FALSE
+       PRINTD  BUTLER
+       PRINTR  " takes dinner."
+
+
+       .FUNCT  BUTLER-SERVES,GARG=0
+       EQUAL?  GARG,G-REACHED \FALSE
+       EQUAL?  HERE,DINING-ROOM \?CND4
+       CALL    HE-SHE-IT,BUTLER,TRUE-VALUE
+       PRINTI  " appears"
+?CND4: IN?     DINNER,BUTLER \?CND8
+       EQUAL?  HERE,DINING-ROOM \?CND10
+       PRINTI  ", puts dinner on the "
+       PRINTD  SIDEBOARD
+?CND10:        MOVE    DINNER,SIDEBOARD
+?CND8: IN?     LETTER,BUTLER \?CND14
+       EQUAL?  HERE,DINING-ROOM \?CND16
+       FCLEAR  LETTER,NDESCBIT
+       PRINTI  ", leaves a note on Jack's napkin"
+?CND16:        MOVE    LETTER,TABLE-DINING
+       FSET    LETTER,TAKEBIT
+?CND14:        FSET    CLUE-1,TAKEBIT
+       PUTP    BUTLER,P?LDESC,17
+       GETP    BUTLER,P?CHARACTER
+       GET     GOAL-TABLES,STACK
+       PUT     STACK,GOAL-FUNCTION,BUTLER-LEAVES
+       CALL    ESTABLISH-GOAL,BUTLER,KITCHEN
+       EQUAL?  HERE,DINING-ROOM \FALSE
+       PRINTR  ", and looks around the room."
+
+
+       .FUNCT  X-WAITS,GARG=0
+       EQUAL?  GARG,G-REACHED \FALSE
+       PUTP    GOAL-PERSON,P?LDESC,9
+       RFALSE  
+
+
+       .FUNCT  I-DINNER,GARG=0,N,CH,SAID=0
+       SET     'N,MASS-COUNTER
+?PRG1: IGRTR?  'N,DEB-C \?CCL5
+       SET     'MASS-SAID,FALSE-VALUE
+       SET     'MASS-COUNTER,0
+       CALL    QUEUED?,I-DINNER-SIT
+       ZERO?   STACK \FALSE
+       CALL    QUEUE,I-DINNER-SIT,5
+       RFALSE  
+?CCL5: EQUAL?  N,FRIEND-C \?CND3
+       CALL    QUEUED?,I-TOUR
+       ZERO?   STACK /?CND3
+       CALL    QUEUE,I-TOUR,1
+       RFALSE  
+?CND3: GET     CHARACTER-TABLE,N >CH
+       EQUAL?  CH,FOLLOWER \?CND11
+       SET     'FOLLOWER,0
+?CND11:        EQUAL?  CH,SHOOTER /?PRG1
+       FSET?   CH,MUNGBIT /?PRG1
+       IN?     CH,DINING-ROOM /?PRG1
+       CALL    QUEUE,I-DINNER,1
+       SET     'MASS-COUNTER,N
+       GET     GOAL-TABLES,N
+       PUT     STACK,GOAL-FUNCTION,X-WAITS
+       CALL    ESTABLISH-GOAL,CH,DINING-ROOM
+       CALL    META-LOC,CH
+       EQUAL?  STACK,HERE /?PRD21
+       RETURN  SAID
+?PRD21:        EQUAL?  HERE,DINING-ROOM /?CND18
+       ZERO?   MASS-SAID /?CCL19
+       EQUAL?  CH,FOLLOWER /?CCL19
+       RETURN  SAID
+?CCL19:        SET     'SAID,TRUE-VALUE
+       SET     'MASS-SAID,TRUE-VALUE
+       EQUAL?  CH,FOLLOWER \?PRG27
+       SET     'FOLLOWER,0
+?PRG27:        CALL    HE-SHE-IT,CH,TRUE-VALUE
+       PRINTI  " says, ""It's time for dinner now. "
+       EQUAL?  NOW-WEARING,DINNER-OUTFIT \?PRG34
+       ZERO?   WASHED \?PRG36
+?PRG34:        PRINTI  "I'll see you in"
+       JUMP    ?PRG38
+?PRG36:        PRINTI  "Let's go to"
+?PRG38:        PRINTI  " the "
+       PRINTD  DINING-ROOM
+       PRINTI  "."""
+       CRLF    
+?CND18:        RETURN  SAID
+
+
+       .FUNCT  BUTLER-RINGS-BELL?,FAKE=0,P
+       ZERO?   FAKE \?CCL3
+       ZERO?   BUTLER-RANG-BELL? \FALSE
+?CCL3: SET     'BUTLER-RANG-BELL?,TRUE-VALUE
+       CALL    QUEUE,I-DINNER,1
+       FSET    CLUE-1,TAKEBIT
+       ZERO?   FAKE \?PRG18
+       EQUAL?  HERE,KITCHEN \?PRG18
+       PRINTD  BUTLER
+       GET     FOLLOW-LOC,BUTLER-C
+       EQUAL?  HERE,STACK /?PRG16
+       PRINTI  " appears and"
+?PRG16:        PRINTI  " pushes a hidden button. "
+?PRG18:        PRINTI  "Suddenly, the dinner bell sounds"
+       PRINTR  "."
+
+
+       .FUNCT  BUTLER-LEAVES,GARG=0,L,VAL=0
+       EQUAL?  GARG,G-REACHED \FALSE
+       CALL    BUTLER-RINGS-BELL? >VAL
+       MOVE    BUTLER,LOCAL-GLOBALS
+       PUT     FOLLOW-LOC,BUTLER-C,0
+       EQUAL?  HERE,DINING-ROOM \?CCL6
+       CALL    QUEUE,I-DINNER-SIT,1
+       JUMP    ?CND4
+?CCL6: EQUAL?  HERE,KITCHEN \?CND4
+       PRINTI  "Then he "
+       IN?     MACE,BUTLER \?PRG14
+       PRINTI  "drops "
+       CALL    PRINTA,MACE
+       PRINTI  ", "
+?PRG14:        PRINTI  "bids you good night, ducks into the areaway, locks the door behind him, and leaves the castle."
+       CRLF    
+       SET     'VAL,M-FATAL
+?CND4: IN?     MACE,BUTLER \?CND16
+       FCLEAR  MACE,NDESCBIT
+       MOVE    MACE,KITCHEN
+?CND16:        RETURN  VAL
+
+
+       .FUNCT  I-DINNER-SIT,GARG=0,SAID=0
+       ZERO?   DINNER-SAT \FALSE
+       FSET?   DINNER,TAKEBIT /?CCL4
+       CALL    POPULATION,DINING-ROOM,PLAYER
+       SUB     DINNER-FOR,STACK
+       LESS?   1,STACK \?CND1
+?CCL4: LESS?   DINNER-SIT-COUNTER,20 \?CND7
+       INC     'DINNER-SIT-COUNTER
+       MOD     DINNER-SIT-COUNTER,8
+       ZERO?   STACK \?CND7
+       EQUAL?  HERE,KITCHEN /?CND7
+       CALL    BUTLER-RINGS-BELL?,TRUE-VALUE
+       RTRUE   
+?CND7: CALL    QUEUE,I-DINNER-SIT,1
+       RFALSE  
+?CND1: SET     'DINNER-SAT,TRUE-VALUE
+       SUB     LIONEL-TIME,PRESENT-TIME
+       CALL    QUEUE,I-LIONEL-SPEAKS,STACK
+       CALL    MAKE-ALL-PEOPLE,10,DINING-ROOM
+       FSET    DINNER,TAKEBIT
+       FCLEAR  DINNER,TRYTAKEBIT
+       MOVE    DINNER-2,TABLE-DINING
+       CALL    BUTLER-RINGS-BELL?
+       EQUAL?  DINING-ROOM,HERE \?CCL15
+       SET     'SAID,M-FATAL
+       MOVE    DINNER,TABLE-DINING
+       PRINTD  DEB
+       PRINTI  " playfully suggests"
+       EQUAL?  VARIATION,FRIEND-C \?PRG22
+       CALL    THIS-IS-IT,LORD
+       PRINTI  " to "
+       PRINTD  LORD
+?PRG22:        PRINTI  " that everyone form a self-serve food line at the buffet. "
+       CALL    HE-SHE-IT,LORD,TRUE-VALUE
+       PRINTI  " and the others good-naturedly accept her suggestion."
+       CRLF    
+       IN?     LETTER,TABLE-DINING \?CND24
+       PRINTI  "As "
+       PRINTD  LORD
+       PRINTI  " takes his place as host, he notices a note lying on his napkin. He picks it up and reads it with a troubled expression."
+       CRLF    
+?CND24:        CALL    DINNER-TALK,28
+       JUMP    ?CND13
+?CCL15:        SET     'MISSED-DINNER,TRUE-VALUE
+?CND13:        IN?     LETTER,TABLE-DINING /?CCL29
+       RETURN  SAID
+?CCL29:        MOVE    LETTER,LORD
+       FCLEAR  LETTER,NDESCBIT
+       RETURN  SAID
+
+
+       .FUNCT  I-LIONEL-SPEAKS,GARG=0,SAID=0,P
+       DEC     'LIONEL-SPEAKS-COUNTER
+       ZERO?   LIONEL-SPEAKS-COUNTER /?CCL3
+       CALL    QUEUE,I-LIONEL-SPEAKS,2
+       JUMP    ?CND1
+?CCL3: CALL    QUEUE,I-WITHDRAW,9
+?CND1: SET     'P,SEARCHER
+       ZERO?   P /?CND4
+       IN?     P,DINING-ROOM \?CCL5
+       IN?     CLUE-1,SIDEBOARD \?CCL5
+       FSET?   CLUE-1,TOUCHBIT \?CND4
+?CCL5: SET     'P,FALSE-VALUE
+?CND4: EQUAL?  5,LIONEL-SPEAKS-COUNTER \?CCL13
+       MOVE    VOICE,DINING-ROOM
+       CALL    MAKE-ALL-PEOPLE,16,DINING-ROOM
+       JUMP    ?CND11
+?CCL13:        EQUAL?  1,LIONEL-SPEAKS-COUNTER \?CCL15
+       FCLEAR  CLUE-2,NDESCBIT
+       FCLEAR  CLUE-2,SECRETBIT
+       FCLEAR  CLUE-1,SECRETBIT
+       JUMP    ?CND11
+?CCL15:        ZERO?   LIONEL-SPEAKS-COUNTER \?CND11
+       ZERO?   P /?CND17
+       FSET    CLUE-1,TAKEBIT
+       FCLEAR  CLUE-1,NDESCBIT
+       MOVE    CLUE-1,P
+?CND17:        MOVE    VOICE,LOCAL-GLOBALS
+       CALL    MAKE-ALL-PEOPLE,18,DINING-ROOM
+?CND11:        EQUAL?  DINING-ROOM,HERE /?CCL20
+       RETURN  SAID
+?CCL20:        SET     'SAID,M-FATAL
+       ZERO?   LIONEL-FORCED /?CCL23
+       SET     'LIONEL-FORCED,FALSE-VALUE
+       JUMP    ?CND21
+?CCL23:        CRLF    
+?CND21:        EQUAL?  5,LIONEL-SPEAKS-COUNTER \?CCL26
+       CALL    THIS-IS-IT,BUST
+       FSET    BUST,OPENBIT
+       PRINTD  LORD
+       PRINTI  " and his guests are startled as an unexpected voice suddenly speaks!
+""Good evening, all,"" it says, then breaks into a low chuckle.
+""Good Lord!"" Jack gasps. ""That's Uncle "
+       PRINT   LIONELS-VOICE
+       PRINTI  "!""
+"
+       PRINTD  DOCTOR
+       PRINTI  " points to"
+       CALL    PRINTT,BUST
+       PRINTI  ". ""There's where it's coming from!"""
+       CRLF    
+       RETURN  SAID
+?CCL26:        EQUAL?  4,LIONEL-SPEAKS-COUNTER \?CCL30
+       PRINT   LIONELS-VOICE
+       PRINTI  " continues, ""You are all here, I trust, to honor the wish expressed in my will -- that the seven of you should dine together at "
+       PRINTD  CASTLE
+       PRINTI  " on the evening of my birthday."""
+       CRLF    
+       RETURN  SAID
+?CCL30:        EQUAL?  3,LIONEL-SPEAKS-COUNTER \?CCL34
+       CALL    THIS-IS-IT,ARTIFACT
+       CALL    THIS-IS-IT,LORD
+       PRINT   LIONELS-VOICE
+       PRINTI  " continues, ""As you know, I enjoyed adventuring to remote corners of the world. And doubtless you've all heard of the loss of that valuable artifact, which I brought back from one of my expeditions, have you not?""
+The guests nod or mumble vaguely. They all glance toward Jack, as if looking for an official response."
+       CRLF    
+       RETURN  SAID
+?CCL34:        EQUAL?  2,LIONEL-SPEAKS-COUNTER \?CCL38
+       PRINT   LIONELS-VOICE
+       PRINTI  " goes on, "
+       EQUAL?  LORD-C,VARIATION \?CND41
+       CALL    THIS-IS-IT,LORD
+       PRINTI  """Jack, I'm sure, is only too eager for me to shuffle off this mortal coil so he can inherit the family title and estate. Thus he should be particularly interested in what I'm about to say..."" Once again "
+       PRINT   LIONELS-VOICE
+       PRINTI  " chuckles slyly, then continues."
+       CRLF    
+?CND41:        CALL    THIS-IS-IT,PUNCHBOWL
+       PRINTI  """The truth is that the artifact is not lost, but hidden. Although I am not yet ready to reveal what it is, I suggest you look under the "
+       PRINTD  PUNCHBOWL
+       PRINTI  "."""
+       CRLF    
+       RETURN  SAID
+?CCL38:        EQUAL?  1,LIONEL-SPEAKS-COUNTER \?CCL48
+       CALL    THIS-IS-IT,CLUE-2
+       PRINTI  """This "
+       PRINTD  CLUE-1
+       PRINTI  " is merely to sharpen your wits,"" "
+       PRINT   LIONELS-VOICE
+       PRINTI  " goes on.
+"""
+       PRINTD  LOVER
+       PRINTI  ", my dear: your one goal in life, I believe, is to become Jack's wife, heaven knows why! Not being Cupid, there is little I can do to help. Knowing the others, I suspect each one has private reasons for wanting my "
+       PRINTD  ARTIFACT
+       PRINTI  ". So, for your amusement, I have given a "
+       PRINTD  CLUE-2
+       PRINTI  " to my "
+       EQUAL?  VARIATION,LORD-C \?PRG56
+       PRINTI  "dear friend"
+       JUMP    ?PRG58
+?PRG56:        PRINTI  "heir"
+?PRG58:        PRINTI  ", which may start you down the path to finding it.""
+With another sardonic chuckle, "
+       PRINT   LIONELS-VOICE
+       PRINTI  " adds, ""Perhaps, "
+       EQUAL?  VARIATION,LORD-C \?CCL62
+       CALL    THIS-IS-IT,PAINTER
+       PRINTD  PAINTER
+       JUMP    ?PRG67
+?CCL62:        CALL    THIS-IS-IT,LORD
+       PRINTD  LORD
+?PRG67:        PRINTI  ", you would care to SHARE your clue with all the others -- eh, what?"""
+       CRLF    
+       RETURN  SAID
+?CCL48:        ZERO?   LIONEL-SPEAKS-COUNTER /?PRG70
+       RETURN  SAID
+?PRG70:        PRINT   LIONELS-VOICE
+       PRINTI  " finishes, ""So now, my friends, let the game begin!"""
+       CRLF    
+       ZERO?   P /?CND19
+       PRINTD  P
+       PRINTI  " says, ""Well, I for one want to see that "
+       PRINTD  CLUE-1
+       PRINTI  "."" "
+       CALL    THIS-IS-IT,P
+       CALL    HE-SHE-IT,P,TRUE-VALUE
+       PRINTI  " lifts the "
+       PRINTD  PUNCHBOWL
+       PRINTI  " and takes it."
+       CRLF    
+?CND19:        RETURN  SAID
+
+
+       .FUNCT  MAKE-ALL-PEOPLE,NUM,RM=0,P,NNUM
+       ZERO?   RM \?CND1
+       SET     'RM,HERE
+?CND1: LESS?   NUM,0 \?CND3
+       SUB     0,NUM >NNUM
+?CND3: FIRST?  RM >P /?PRG5
+?PRG5: ZERO?   P /TRUE
+       FSET?   P,PERSONBIT \?CND7
+       GRTR?   NUM,0 \?CCL13
+       PUTP    P,P?LDESC,NUM
+       JUMP    ?CND7
+?CCL13:        GETP    P,P?LDESC
+       EQUAL?  NNUM,STACK \?CND7
+       PUTP    P,P?LDESC,0
+?CND7: NEXT?   P >P /?PRG5
+       JUMP    ?PRG5
+
+
+       .FUNCT  I-WITHDRAW,GARG=0,OBJ,NXT,SAID=0
+       ZERO?   TREASURE-FOUND \?CND1
+       CALL    QUEUE,I-SEARCH,9
+       GETP    SEARCHER,P?CHARACTER
+       GET     GOAL-TABLES,STACK
+       PUT     STACK,GOAL-FUNCTION,X-SEARCHES
+?CND1: SUB     BED-TIME,PRESENT-TIME
+       CALL    QUEUE,I-BEDTIME,STACK
+       EQUAL?  HERE,DINING-ROOM,CORR-1,SITTING-ROOM \?CCL5
+       SET     'P-HIM-OBJECT,FALSE-VALUE
+       SET     'P-HER-OBJECT,FALSE-VALUE
+       SET     'SAID,TRUE-VALUE
+       PRINTI  "
+Normally the gentlemen would remain at the table to enjoy cigars and port, while the ladies repair to the "
+       PRINTD  DRAWING-ROOM
+       PRINTI  ". But because of tonight's mysterious developments, everyone "
+       EQUAL?  HERE,DINING-ROOM \?PRG13
+       PRINTI  "leaves the "
+       PRINTD  DINING-ROOM
+       JUMP    ?PRG15
+?PRG13:        PRINTI  "goes to the "
+       PRINTD  SITTING-ROOM
+?PRG15:        PRINTI  " by unspoken agreement."
+       CRLF    
+       JUMP    ?CND3
+?CCL5: EQUAL?  HERE,JACK-ROOM,TAMARA-ROOM,IRIS-ROOM /?CCL17
+       EQUAL?  HERE,WENDISH-ROOM,VIVIEN-ROOM,IAN-ROOM /?CCL17
+       EQUAL?  HERE,HYDE-ROOM \?CND3
+?CCL17:        CALL    ZMEMQ,HERE,CHAR-ROOM-TABLE
+       SUB     STACK,1
+       GET     CHARACTER-TABLE,STACK
+       LOC     STACK
+       EQUAL?  STACK,HERE,LOCAL-GLOBALS /?CND3
+       SET     'DISCOVERED-HERE,HERE
+       CALL    QUEUE,I-DISCOVERED,1
+?CND3: LOC     DINNER
+       FSET?   STACK,PERSONBIT \?CND23
+       MOVE    DINNER,TABLE-DINING
+?CND23:        LOC     DINNER-2
+       FSET?   STACK,PERSONBIT \?CND25
+       MOVE    DINNER-2,TABLE-DINING
+?CND25:        FIRST?  DINING-ROOM >OBJ /?KLU37
+?KLU37:        NEXT?   OBJ >NXT /?PRG27
+?PRG27:        ZERO?   NXT /?REP28
+       FSET?   OBJ,PERSONBIT \?CND29
+       EQUAL?  OBJ,PLAYER,CONFESSED,CAPTOR /?CND29
+       PUTP    OBJ,P?LDESC,18
+       GETP    OBJ,P?CHARACTER
+       PUT     FOLLOW-LOC,STACK,SITTING-ROOM
+       MOVE    OBJ,SITTING-ROOM
+?CND29:        SET     'OBJ,NXT
+       NEXT?   OBJ >NXT /?PRG27
+       JUMP    ?PRG27
+?REP28:        EQUAL?  HERE,DINING-ROOM /?CCL36
+       RETURN  SAID
+?CCL36:        SET     'WINNER,PLAYER
+       CALL    GOTO,SITTING-ROOM
+       RETURN  SAID
+
+
+       .FUNCT  I-SEARCH,GARG=0,SAID=0,GT,L,X=0
+       LOC     SEARCHER >L
+       EQUAL?  L,DISCOVERED-HERE /?CCL2
+       CALL    QUEUED?,I-LIONEL-SPEAKS
+       ZERO?   STACK /?CND1
+?CCL2: CALL    QUEUE,I-SEARCH,3
+       RFALSE  
+?CND1: CALL    QUEUE,I-SEARCH,19
+       RANDOM  6
+       ADD     1,STACK
+       GET     CHARACTER-TABLE,STACK >X
+       IN?     X,SITTING-ROOM \?CND5
+       EQUAL?  X,FOLLOWER,CONFESSED,CAPTOR /?CND5
+       GETP    X,P?LDESC
+       EQUAL?  STACK,22 /?CND5
+       PUTP    X,P?LDESC,22
+       EQUAL?  HERE,SITTING-ROOM \?CND10
+       SET     'SAID,TRUE-VALUE
+       CALL    THIS-IS-IT,X
+       PRINTD  X
+       PRINTI  " begins "
+       GET     LDESC-STRINGS,22
+       PRINT   STACK
+       PRINTC  46
+?CND10:        NEXT?   X >X /?KLU64
+?KLU64:        ZERO?   X /?CND14
+       FSET?   X,PERSONBIT \?CND14
+       EQUAL?  X,PLAYER /?CND14
+       ZERO?   SAID /?CND19
+       GETP    X,P?LDESC
+       EQUAL?  STACK,22 \?CND19
+       CALL    THIS-IS-IT,X
+       PRINTI  " And "
+       PRINTD  X
+       PRINTI  " stops."
+?CND19:        PUTP    X,P?LDESC,13
+?CND14:        ZERO?   SAID /?CND5
+       CRLF    
+?CND5: SET     'X,DEB-C
+?PRG27:        GET     CHARACTER-TABLE,X >GT
+       EQUAL?  GT,FOLLOWER /?CND29
+       CALL    META-LOC,GT
+       EQUAL?  STACK,HERE,SITTING-ROOM /?CND29
+       CALL    IN-MOTION?,GT
+       ZERO?   STACK \?CND29
+       GETP    GT,P?LDESC
+       EQUAL?  STACK,7 /?CND29
+       GET     GOAL-TABLES,X
+       GET     STACK,GOAL-FUNCTION
+       EQUAL?  STACK,X-RETIRES,X-SEARCHES /?CND29
+       GET     GOAL-TABLES,X
+       PUT     STACK,GOAL-FUNCTION,NULL-F
+       CALL    ESTABLISH-GOAL,GT,SITTING-ROOM
+?CND29:        DLESS?  'X,1 \?PRG27
+       ZERO?   CONFESSED \FALSE
+       GETP    SEARCHER,P?CHARACTER
+       GET     GOAL-TABLES,STACK >GT
+       GET     GT,GOAL-FUNCTION
+       EQUAL?  STACK,X-SEARCHES /?PRG42
+       RETURN  SAID
+?PRG42:        SET     'X,CLUE-LOC
+       ZERO?   X /?CCL46
+       CALL    ZMEMQ,X,SEARCH-ROOMS
+       ZERO?   STACK /?CCL46
+       SET     'CLUE-LOC,0
+       JUMP    ?CND44
+?CCL46:        CALL    PICK-ONE,SEARCH-ROOMS >X
+?CND44:        EQUAL?  X,L /?PRG42
+       CALL    ESTABLISH-GOAL,SEARCHER,X
+       EQUAL?  HERE,L /?CCL52
+       RETURN  SAID
+?CCL52:        SET     'SAID,TRUE-VALUE
+       PRINTI  "
+Suddenly"
+       CALL    HE-SHE-IT,SEARCHER
+       PRINTI  " heads for the "
+       EQUAL?  HERE,MAZE,GARDEN \?PRG60
+       PRINTI  "exit"
+       JUMP    ?PRG62
+?PRG60:        PRINTI  "door"
+?PRG62:        PRINTI  ", mumbling, ""Please excuse me."""
+       CRLF    
+       RETURN  SAID
+
+
+       .FUNCT  X-SEARCHES,GARG=0,VAL=0
+       EQUAL?  GARG,G-REACHED /?CCL2
+       RETURN  VAL
+?CCL2: PUTP    GOAL-PERSON,P?LDESC,21
+       RETURN  VAL
+
+
+       .FUNCT  I-DISCOVERED,GARG=0,VAL=0,L,GT
+       EQUAL?  DISCOVERED-HERE,HERE /?PRD4
+       RETURN  VAL
+?PRD4: ZERO?   LIONEL-SPEAKS-COUNTER /?CCL2
+       RETURN  VAL
+?CCL2: CALL    ZMEMQ,HERE,CHAR-ROOM-TABLE
+       SUB     STACK,1 >L
+       GET     CHARACTER-TABLE,L >VAL
+       ZERO?   GARG \?CND6
+       IN?     VAL,HERE /FALSE
+       FSET?   VAL,MUNGBIT /FALSE
+       EQUAL?  VAL,CONFESSED /FALSE
+       GETP    VAL,P?CHARACTER
+       GET     GOAL-TABLES,STACK
+       GET     STACK,GOAL-FUNCTION
+       EQUAL?  STACK,X-RETIRES /FALSE
+?CND6: PUT     FOLLOW-LOC,L,HERE
+       CALL    QUEUE,I-FOUND-IT,0
+       EQUAL?  VAL,GHOST-NEW \?PRG20
+       MOVE    GHOST-NEW,HERE
+       CALL    GHOST-LURKS
+       RETURN  2
+?PRG20:        PRINTI  "You freeze as"
+       FSET?   HERE,LOCKED \?PRG27
+       FCLEAR  HERE,LOCKED
+       PRINTI  " a key turns in the lock,"
+?PRG27:        PRINTI  " the door bursts open and"
+       FCLEAR  HERE,OPENBIT
+       GETP    VAL,P?LINE
+       ADD     1,STACK
+       PUTP    VAL,P?LINE,STACK
+       PUTP    VAL,P?LDESC,4
+       CALL    HE-SHE-IT,VAL
+       PRINTI  " appears. "
+       CALL    HE-SHE-IT,VAL,TRUE-VALUE
+       PRINTI  " stares at you with a shocked look. "
+       PRINTI  """Well! I didn't expect MY room to be searched!"""
+       CALL    HE-SHE-IT,VAL
+       PRINTI  " says angrily. "
+       LOC     VAL >L
+       MOVE    VAL,HERE
+       GETP    VAL,P?CHARACTER
+       GET     GOAL-TABLES,STACK >GT
+       GET     GT,GOAL-S
+       ZERO?   STACK \?CCL38
+       CALL    ESTABLISH-GOAL,VAL,L
+       JUMP    ?CND36
+?CCL38:        GET     GT,GOAL-F
+       CALL    ESTABLISH-GOAL,VAL,STACK
+?CND36:        PUT     GT,GOAL-ENABLE,0
+       CALL    HE-SHE-IT,VAL,TRUE-VALUE
+       PRINTI  " enters the room and closes the door behind"
+       CALL    HIM-HER-IT,VAL
+       PRINTI  ".
+"
+       IN?     BLOWGUN,VAL \?CND41
+       EQUAL?  VAL,PAINTER,DOCTOR \?CND41
+       CALL    FIND-FLAG-HERE,PERSONBIT,PLAYER,VAL
+       ZERO?   STACK \?CND41
+       CALL    SETUP-SHOT,VAL
+       PRINTI  "Then"
+       CALL    HE-SHE-IT,VAL
+       PRINTI  " pulls out"
+       CALL    PRINTT,BLOWGUN
+       PRINTC  33
+       CRLF    
+?CND41:        SET     'VAL,M-FATAL
+       RETURN  VAL
+
+
+       .FUNCT  I-FOUND-PASSAGES,GARG=0,SAID=0,X
+       FIRST?  HERE >X /?KLU12
+?KLU12:        ZERO?   X /?CND1
+       CALL    FOUND-PASSAGES-REPEAT,X,PASSAGE,FOUND-PASSAGES >SAID
+?CND1: FSET?   HERE,SECRETBIT /?PRD6
+       RETURN  SAID
+?PRD6: CALL    FIND-FLAG-LG,HERE,DOORBIT >X
+       ZERO?   X /?CND3
+       CALL    DOOR-ROOM,HERE,X >X
+       ZERO?   X /?CND3
+       FIRST?  X >X /?KLU13
+?KLU13:        ZERO?   X /?CND3
+       CALL    FOUND-PASSAGES-REPEAT,X,PASSAGE,FOUND-PASSAGES
+       ZERO?   STACK /?CND3
+       SET     'SAID,TRUE-VALUE
+?CND3: RETURN  SAID
+
+
+       .FUNCT  FOUND-PASSAGES-REPEAT,PER,OBJ,GL,C,SAID=0
+?PRG1: ZERO?   PER /?REP2
+       FSET?   PER,PERSONBIT \?CND5
+       FSET?   PER,MUNGBIT /?CND5
+       PUTP    PER,P?LDESC,3
+       GETP    PER,P?CHARACTER >C
+       GET     GL,C
+       ZERO?   STACK \?CND5
+       PUT     GL,C,TRUE-VALUE
+       EQUAL?  C,VARIATION /?CND5
+       PUTP    PER,P?LINE,0
+       ZERO?   SAID \?CND5
+       SET     'SAID,PER
+       EQUAL?  OBJ,PASSAGE \?CND5
+       CALL    GOOD-SHOW,PER,OBJ
+?CND5: NEXT?   PER >PER /?PRG1
+       JUMP    ?PRG1
+?REP2: RETURN  SAID
+
+
+       .FUNCT  I-BEDTIME,GARG=0,N,CH,VAL=0,L
+       SET     'N,MASS-COUNTER
+       IGRTR?  'N,DEB-C \?CND1
+       SET     'MASS-SAID,FALSE-VALUE
+       SET     'MASS-COUNTER,0
+       RFALSE  
+?CND1: CALL    QUEUE,I-BEDTIME,5
+       SET     'MASS-COUNTER,N
+       GET     CHARACTER-TABLE,N >CH
+       EQUAL?  CH,SEARCHER \?CND3
+       CALL    QUEUE,I-SEARCH,0
+?CND3: EQUAL?  CH,CONFESSED,CAPTOR /FALSE
+       FSET?   CH,MUNGBIT /FALSE