]> github.com/historicalsource and other repositories - arthur.git/commitdiff
May 16 1989 Edition
authorhistoricalsource <historicalsoftware@textfiles.com>
Tue, 16 Apr 2019 14:01:31 +0000 (10:01 -0400)
committerhistoricalsource <historicalsoftware@textfiles.com>
Tue, 16 Apr 2019 14:01:31 +0000 (10:01 -0400)
46 files changed:
README.md [new file with mode: 0644]
arthur.zil [new file with mode: 0644]
badger.zil [new file with mode: 0644]
basil.zil [new file with mode: 0644]
be.zil [new file with mode: 0644]
boar.zil [new file with mode: 0644]
bog.zil [new file with mode: 0644]
castle.zil [new file with mode: 0644]
cell.zil [new file with mode: 0644]
chestnut.zil [new file with mode: 0644]
church.zil [new file with mode: 0644]
defs.zil [new file with mode: 0644]
defs2.zil [new file with mode: 0644]
demon.zil [new file with mode: 0644]
dragon.zil [new file with mode: 0644]
eel.zil [new file with mode: 0644]
endgame.zil [new file with mode: 0644]
food.zil [new file with mode: 0644]
forest.zil [new file with mode: 0644]
global.zil [new file with mode: 0644]
hints.zil [new file with mode: 0644]
ice-hot.zil [new file with mode: 0644]
idiot.zil [new file with mode: 0644]
iknight.zil [new file with mode: 0644]
joust.zil [new file with mode: 0644]
kitchen.zil [new file with mode: 0644]
lady.zil [new file with mode: 0644]
leprchan.zil [new file with mode: 0644]
macros.zil [new file with mode: 0644]
merlin.zil [new file with mode: 0644]
misc.zil [new file with mode: 0644]
narthur.zil [new file with mode: 0644]
password.zil [new file with mode: 0644]
picdef.zil [new file with mode: 0644]
places.zil [new file with mode: 0644]
raven.zil [new file with mode: 0644]
rednite.zil [new file with mode: 0644]
sword.zil [new file with mode: 0644]
syntax.zil [new file with mode: 0644]
tavern.zil [new file with mode: 0644]
tower.zil [new file with mode: 0644]
town.zil [new file with mode: 0644]
transfrm.zil [new file with mode: 0644]
util.zil [new file with mode: 0644]
verbs.zil [new file with mode: 0644]
window.zil [new file with mode: 0644]

diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..26af864
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# arthur
diff --git a/arthur.zil b/arthur.zil
new file mode 100644 (file)
index 0000000..a5e1667
--- /dev/null
@@ -0,0 +1,108 @@
+;"***************************************************************************"
+; "game : Arthur"
+; "file : ARTHUR.ZIL"
+; "auth :   $Author:   DEB  $"
+; "date :     $Date:   11 May 1989  3:46:30  $"
+; "rev  : $Revision:   1.9  $"
+; "vers : 1.0"
+;"---------------------------------------------------------------------------"
+; "Compile/Load file"
+; "Copyright (C) 1989 Infocom, Inc.  All rights reserved."
+;"***************************************************************************"
+
+<SETG ZDEBUGGING? T>
+<DEFINE DEBUG-CODE ('X "OPTIONAL" ('Y T))
+       <COND
+               (,ZDEBUGGING?
+                       .X
+               )
+               (ELSE
+                       .Y
+               )
+       >
+>
+
+<PICFILE "ARTHUR.MAC.1">
+
+<SETG NEW-PARSER? T>
+<FREQUENT-WORDS?>
+<LONG-WORDS?>
+<ZIP-OPTIONS UNDO COLOR MOUSE DISPLAY>
+<ORDER-OBJECTS? ROOMS-FIRST>
+
+<VERSION YZIP>
+
+<IFFLAG
+       (IN-ZILCH
+               <PRINC "Compiling">
+       )
+       (T
+               <PRINC "Loading">
+       )
+>
+
+<PRINC ": King Arthur, by Challenge, Inc.
+">
+
+ON!-INITIAL    "for DEBUGR"
+OFF!-INITIAL
+ENABLE!-INITIAL
+DISABLE!-INITIAL
+
+<SET REDEFINE T>
+
+<COMPILATION-FLAG P-BE-VERB T>
+
+;<SETG L-SEARCH-PATH (["~PARSER" ""] !,L-SEARCH-PATH)>
+
+<INSERT-FILE "DEFS">
+
+<XFLOAD "PARSER.REST">
+
+<INSERT-FILE "PICDEF">
+<INSERT-FILE "MACROS">
+<INSERT-FILE "MISC">
+<INSERT-FILE "SYNTAX">
+<INSERT-FILE "UTIL">
+<INSERT-FILE "VERBS">
+<INSERT-FILE "TRANSFRM">
+<IF-P-BE-VERB <INSERT-FILE "BE">>
+<INSERT-FILE "FOOD">
+<INSERT-FILE "CELL">
+<INSERT-FILE "BOAR">
+<INSERT-FILE "WINDOW">
+<INSERT-FILE "SWORD">
+<INSERT-FILE "PASSWORD">
+<INSERT-FILE "ENDGAME">
+<INSERT-FILE "EEL">
+<INSERT-FILE "BADGER">
+<INSERT-FILE "BASIL">
+<INSERT-FILE "DRAGON">
+<INSERT-FILE "RAVEN">
+<INSERT-FILE "CASTLE">
+<INSERT-FILE "REDNITE">
+<INSERT-FILE "LADY">
+<INSERT-FILE "FOREST">
+<INSERT-FILE "JOUST">
+<INSERT-FILE "DEMON">
+<INSERT-FILE "ICE-HOT">
+<INSERT-FILE "CHESTNUT">
+<INSERT-FILE "TOWER">
+<INSERT-FILE "BOG">
+<INSERT-FILE "LEPRCHAN">
+<INSERT-FILE "MERLIN">
+<INSERT-FILE "TAVERN">
+<INSERT-FILE "KITCHEN">
+<INSERT-FILE "IKNIGHT">
+<INSERT-FILE "TOWN">
+<INSERT-FILE "IDIOT">
+<INSERT-FILE "CHURCH">
+<INSERT-FILE "PLACES">
+<INSERT-FILE "GLOBAL">
+<INSERT-FILE "CLUES">
+<INSERT-FILE "HINTS">
+
+;"***************************************************************************"
+; "end of file"
+;"***************************************************************************"
+
diff --git a/badger.zil b/badger.zil
new file mode 100644 (file)
index 0000000..1a5f85c
--- /dev/null
@@ -0,0 +1,451 @@
+;"***************************************************************************"
+; "game : Arthur"
+; "file : BADGER.ZIL"
+; "auth :   $Author:   DEB  $"
+; "date :     $Date:   11 May 1989  3:46:24  $"
+; "revs : $Revision:   1.70  $"
+; "vers : 1.0"
+;"---------------------------------------------------------------------------"
+; "Badger Tunnel Puzzle"
+; "Copyright (C) 1989 Infocom, Inc.  All rights reserved."
+;"***************************************************************************"
+
+;"---------------------------------------------------------------------------"
+; "RM-BADGER-TUNNEL"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-BADGER-TUNNEL
+       (LOC ROOMS)
+       (DESC "den")
+       (FLAGS FL-INDOORS FL-LIGHTED)
+       (SYNONYM DEN TUNNEL DIRT)
+       (ADJECTIVE BADGER EARTH DIRT)
+       (NORTH PER RT-WALK-TUNNEL)
+       (SOUTH PER RT-WALK-TUNNEL)
+       (EAST PER RT-WALK-TUNNEL)
+       (WEST PER RT-WALK-TUNNEL)
+       (NE PER RT-WALK-TUNNEL)
+       (SE PER RT-WALK-TUNNEL)
+       (NW PER RT-WALK-TUNNEL)
+       (SW PER RT-WALK-TUNNEL)
+       (UP PER RT-WALK-TUNNEL)
+       (DOWN PER RT-WALK-TUNNEL)
+       (OUT PER RT-WALK-TUNNEL)
+       (GLOBAL LG-WALL)
+       (ACTION RT-RM-BADGER-TUNNEL)
+>
+
+<ROUTINE RT-RM-BADGER-TUNNEL ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-B-LOOK ,M-LOOK>
+                       <TELL
+"You are in a den of twisty little passages - all alike. Tunnels exit in all
+directions. "
+                       >
+                       <RT-NUM-MARKS-MSG>
+               )
+               (<MC-CONTEXT? ,M-BEG>
+                       <COND
+                               (<AND <VERB? DIG SCRATCH>
+                                               <MC-PRSO? <> ,ROOMS ,TH-GROUND ,TH-SKY ,HERE ,GLOBAL-HERE ,LG-WALL>
+                                       >
+                                       <COND
+                                               (<G? ,GL-TUNNEL-NUM 0>
+                                                       <RT-MAKE-MARK <GETB ,K-TUNNEL-CNT-TBL ,GL-TUNNEL-NUM>>
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-HOLE>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <COND
+                               (<EQUAL? ,OHERE ,RM-HOLE>
+                                       <SETG GL-TUNNEL-NUM 1>
+                               )
+                               (<EQUAL? ,OHERE ,RM-THORNEY-ISLAND>
+                                       <SETG GL-TUNNEL-NUM 10>
+                               )
+                       >
+                       <RFALSE>
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+       >
+>
+
+<ROUTINE RT-MAKE-MARK (COUNT "OPT" (N 1))
+       <SET COUNT <+ .COUNT .N>>
+       <PUTB ,K-TUNNEL-CNT-TBL ,GL-TUNNEL-NUM .COUNT>
+       <COND
+               (<G? .COUNT 11>
+                       <TELL
+"You scratch at the dirt with your claw. A trickle starts to fall from the
+ceiling, and then suddenly the wall collapses. In a matter of seconds, you
+are buried alive, with no hope of digging your way out.|"
+                       >
+                       <RT-END-OF-GAME>
+               )
+               (<EQUAL? .COUNT 11>
+                       <TELL
+"You add an eleventh claw mark alongside the others. You have scraped
+so much dirt from the wall that another scratch might bring the entire
+warren down around your ears.|"
+                       >
+               )
+               (<EQUAL? .COUNT 1>
+                       <TELL "You make a distinct claw mark in the dirt.|">
+               )
+               (T
+                       <TELL
+"You add another claw mark next to the" wn <- .COUNT .N> " already in the dirt.|"
+                       >
+               )
+       >
+       <RETURN .COUNT>
+>
+
+<ROUTINE RT-NUM-MARKS-MSG ("AUX" COUNT)
+       <SET COUNT <GETB ,K-TUNNEL-CNT-TBL ,GL-TUNNEL-NUM>>
+       <COND
+               (<ZERO? .COUNT>
+                       <TELL "The soft earthen walls of the den are smooth and even." CR>
+               )
+               (T
+                       <TELL "In the dirt you can see">
+                       <COND
+                               (<EQUAL? .COUNT 1>
+                                       <TELL " a distinct">
+                               )
+                               (T
+                                       <TELL wn .COUNT>
+                               )
+                       >
+                       <TELL " claw mark">
+                       <COND
+                               (<NOT <EQUAL? .COUNT 1>>
+                                       <TELL "s">
+                               )
+                       >
+                       <TELL "." CR>
+               )
+       >
+>
+
+<CONSTANT K-TUNNEL-DIR-TBL
+       <TABLE (PURE)
+               <TABLE (PURE)
+P?NORTH P?SOUTH P?EAST P?WEST P?NE P?SE P?NW P?SW P?UP P?DOWN
+               >
+                                                               ; "N    S       E       W       NE      SE      NW      SW      UP      DN"
+; 1    <TABLE (PURE BYTE)      0       2       4       6       8       5       3       7       9       2>
+; 2    <TABLE (PURE BYTE)      1       7       9       5       3       6       4       8       1       9>
+; 3    <TABLE (PURE BYTE)      8       4       6       2       9       5       7       8       1       6>
+; 4    <TABLE (PURE BYTE)      8       6       7       1       2       6       3       5       9       2>
+; 5    <TABLE (PURE BYTE)      1       2       4       3       9       7       6       8       2       1>
+; 6    <TABLE (PURE BYTE)      4       8       5       9       1       3       2       5       2       7>
+; 7    <TABLE (PURE BYTE)      9       8       1       6       4       3       5       6       5       2>
+; 8    <TABLE (PURE BYTE)      1       1       1       1       9       7       2       6       5       4>
+; 9    <TABLE (PURE BYTE)      8       4       6       2       1       5       3       7       8       10>
+;10    <TABLE (PURE BYTE)      1       3       2       4       5       7       6       8       11      9>
+       >
+>
+
+<CONSTANT K-TUNNEL-CNT-TBL
+       <TABLE (BYTE) 0 0 0 0 0 0 0 0 0 0 0>
+>
+
+<GLOBAL GL-TUNNEL-NUM 0 <> BYTE>
+
+<ROUTINE RT-WALK-TUNNEL ("OPT" (QUIET <>) "AUX" TBL N)
+       <COND
+               (.QUIET
+                       <RFALSE>
+               )
+               (<EQUAL? ,P-WALK-DIR ,P?OUT>
+                       <COND
+                               (<EQUAL? ,GL-TUNNEL-NUM 10>
+                                       <SETG GL-TUNNEL-NUM 0>
+                                       <RETURN ,RM-THORNEY-ISLAND>
+                               )
+                               (T
+                                       <SETG CLOCK-WAIT T>
+                                       <TELL ,K-WHICH-DIR-MSG>
+                                       <RFALSE>
+                               )
+                       >
+               )
+               (T
+                       <SET TBL <ZGET ,K-TUNNEL-DIR-TBL 0>>
+                       <COND
+                               (<SET N <INTBL? ,P-WALK-DIR .TBL 10>>
+                                       <SET N </ <- .N .TBL> 2>>
+                               )
+                               (T
+                                       <SET N -1>
+                               )
+                       >
+                       <SET TBL <ZGET ,K-TUNNEL-DIR-TBL ,GL-TUNNEL-NUM>>
+                       <SETG GL-TUNNEL-NUM <GETB .TBL .N>>
+                       <COND
+                               (<EQUAL? ,GL-TUNNEL-NUM 0>
+                                       <SETG GL-TUNNEL-NUM 0>
+                                       <RETURN ,RM-HOLE>
+                               )
+                               (<EQUAL? ,GL-TUNNEL-NUM 11>
+                                       <SETG GL-TUNNEL-NUM 0>
+                                       <RETURN ,RM-THORNEY-ISLAND>
+                               )
+                               (T
+                                       <RT-RM-BADGER-TUNNEL ,M-V-LOOK>
+                                       <COND
+                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                                                       <RT-UPDATE-DESC-WINDOW>
+                                               )
+                                       >
+                                       <RFALSE>
+                               )
+                       >
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "RM-THORNEY-ISLAND"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-THORNEY-ISLAND
+       (LOC ROOMS)
+       (DESC "thorney island")
+       (FLAGS FL-LIGHTED)
+       (SYNONYM ISLAND TREE BUSH THORNBUSH THORN THORNS BRANCH BRANCHES)
+       (ADJECTIVE THORNEY THORNY THORN SMALL HAWTHORNE HAWTHORN)
+       (NORTH SORRY K-THORN-BUSH-MSG)
+       (SOUTH SORRY K-THORN-BUSH-MSG)
+       (EAST SORRY K-THORN-BUSH-MSG)
+       (WEST SORRY K-THORN-BUSH-MSG)
+       (IN PER RT-ENTER-TUNNEL)
+       (DOWN PER RT-ENTER-TUNNEL)
+       (UP SORRY K-THORN-BUSH-MSG)
+       (SCORE <LSH 2 ,K-QUEST-SHIFT>)
+       (GENERIC RT-GN-ISLAND)
+       (GLOBAL RM-BADGER-TUNNEL)
+       (ACTION RT-RM-THORNEY-ISLAND)
+;      (THINGS
+               (HAWTHORNE HAWTHORN THORN THORNY) (THORN THORNS BUSH) RT-PS-HAW-BUSH
+       )
+>
+
+<CONSTANT K-THORN-BUSH-MSG
+"One look at those sharp thorns convinces you that it would be suicide to try
+to pass through.">
+
+<ROUTINE RT-RM-THORNEY-ISLAND ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <TELL "You ">
+                       <COND
+                               (<MC-CONTEXT? ,M-LOOK>
+                                       <TELL "are">
+                               )
+                               (T
+                                       <TELL
+"poke your head out of the badger hole and look around. Seeing no one, you
+crawl out of the hole and find yourself"
+                                       >
+                               )
+                       >
+                       <FSET ,RM-BOG ,FL-SEEN>
+                       <TELL
+" deep within the confines of a hawthorn bush on a small, foggy island. The
+thorny branches of the bush form an impenetrable barrier on all sides.|"
+                       >
+                       <COND
+                               (<IN? ,TH-HAWTHORN ,RM-THORNEY-ISLAND>
+                                       <FSET ,TH-HAWTHORN ,FL-SEEN>
+                                       <TELL
+"|On the ground is a thorny sprig that has fallen from the bush.|"
+                                       >
+                               )
+                       >
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-BEG>
+                       <COND
+                               (<IN? ,TH-HAWTHORN ,RM-THORNEY-ISLAND>
+                                       <COND
+                                               (<MC-PRSO? ,TH-HAWTHORN ,RM-THORNEY-ISLAND ,GLOBAL-HERE>
+                                                       <COND
+                                                               (<TOUCH-VERB?>
+                                                                       <COND
+                                                                               (<MC-FORM? ,K-FORM-BADGER>
+                                                                                       <RT-DO-TAKE ,TH-HAWTHORN>
+                                                                                       <FSET ,TH-HAWTHORN ,FL-WORN>
+                                                                                       <THIS-IS-IT ,TH-HAWTHORN>
+                                                                                       <TELL
+"As you brush up against the sprig, the thorn catches on your fur.|"
+                                                                                       >
+                                                                                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC ,K-UPD-INVT>>
+                                                                                       <COND
+                                                                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                                                                                                       <RT-UPDATE-DESC-WINDOW>
+                                                                                               )
+                                                                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-INVT>
+                                                                                                       <RT-UPDATE-INVT-WINDOW>
+                                                                                               )
+                                                                                       >
+                                                                                       <RTRUE>
+                                                                               )
+                                                                               (<MC-FORM? ,K-FORM-SALAMANDER>
+                                                                                       <THIS-IS-IT ,TH-HAWTHORN>
+                                                                                       <TELL
+"The thorn scratches your bare, unprotected skin." CR
+                                                                                       >
+                                                                               )
+                                                                               (T
+                                                                                       <TELL
+"You shouldn't be able to get here as" aform "." CR
+                                                                                       >
+                                                                               )
+                                                                       >
+                                                               )
+                                                       >
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-THORNEY-ISLAND>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? EXAMINE>
+                       <COND
+                               (<NOT <MC-HERE? ,RM-THORNEY-ISLAND>>
+                                       <COND
+                                               (<NOUN-USED? ,RM-THORNEY-ISLAND ,W?ISLAND>
+                                                       <FSET ,RM-THORNEY-ISLAND ,FL-SEEN>
+                                                       <TELL
+"You peer through the fog at the island. Dimly, you see the vague outline of
+a single, large thornbush." CR
+                                                       >
+                                               )
+                                               (T
+                                                       <TELL
+"It looks like a large thornbush, but the fog is too thick to be sure." CR
+                                                       >
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<AND <VERB? ENTER WALK-TO LAND-ON>
+                               <MC-FORM? ,K-FORM-OWL>
+                       >
+                       <RT-FLY-TO-ISLAND>
+               )
+               (<VERB? LOOK-UNDER>
+                       <TELL The+verb ,WINNER "see" " a hole under the bush." CR>
+               )
+       >
+>
+
+<ROUTINE RT-GN-ISLAND (TBL FINDER)
+       <COND
+               (<MC-HERE? ,RM-COTTAGE>
+                       <RETURN ,RM-THORNEY-ISLAND>
+               )
+               (T
+                       <RETURN ,RM-ISLAND>
+               )
+       >
+>
+
+;<ROUTINE RT-PS-HAW-BUSH ("OPT" (CONTEXT <>) (ART <>) (CAP? <>))
+       <COND
+               (<MC-CONTEXT? ,M-OBJDESC>
+                       <FCLEAR ,PSEUDO-OBJECT ,FL-PLURAL>
+                       <FCLEAR ,PSEUDO-OBJECT ,FL-VOWEL>
+                       <COND
+                               (.ART
+                                       <PRINT-ARTICLE ,PSEUDO-OBJECT .ART .CAP?>
+                               )
+                       >
+                       <COND
+                               (<EQUAL? .ART <> ,K-ART-THE ,K-ART-A ,K-ART-ANY>
+                                       <COND
+                                               (.ART
+                                                       <TELL " ">
+                                               )
+                                       >
+                                       <TELL "hawthorn bush">
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? LOOK-UNDER>
+                       <TELL The+verb ,WINNER "see" " a hole under the bush." CR>
+               )
+               (<VERB? EXAMINE>
+                       <TELL "It is a dense bush covered with sharp thorns." CR>
+               )
+       >
+>
+
+
+<ROUTINE RT-ENTER-TUNNEL ("OPT" (QUIET <>))
+       <COND
+               (.QUIET
+                       <RETURN ,RM-BADGER-TUNNEL>
+               )
+               (<MC-FORM? ,K-FORM-BADGER ,K-FORM-SALAMANDER>
+                       <RT-CLEAR-PUPPY>
+                  <RETURN ,RM-BADGER-TUNNEL>
+               )
+               (T
+                       <TELL ,K-TOO-BIG-MSG>
+                       <RFALSE>
+               )
+       >
+>
+
+<ROUTINE RT-FLY-TO-ISLAND ()
+       <TELL "You swoop">
+       <COND
+               (<MC-HERE? ,RM-ABOVE-BOG>
+                       <TELL " down">
+               )
+       >
+       <TELL
+" through the fog towards the island and come upon an impenetrable barrier
+of sharp thorns. You search for a way through the thicket but find none, so
+you fly back"
+       >
+       <COND
+               (<MC-HERE? ,RM-ABOVE-BOG>
+                       <TELL " up in into the air over the bog">
+               )
+       >
+       <TELL "." CR>
+>
+
+;"***************************************************************************"
+; "end of file"
+;"***************************************************************************"
+
diff --git a/basil.zil b/basil.zil
new file mode 100644 (file)
index 0000000..676829b
--- /dev/null
+++ b/basil.zil
@@ -0,0 +1,289 @@
+;"***************************************************************************"
+; "game : Arthur"
+; "file : BASIL.ZIL"
+; "auth :   $Author:   DEB  $"
+; "date :     $Date:   15 May 1989 19:43:24  $"
+; "revs : $Revision:   1.41  $"
+; "vers : 1.0"
+;"---------------------------------------------------------------------------"
+; "Basilisk Puzzle"
+; "Copyright (C) 1989 Infocom, Inc.  All rights reserved."
+;"***************************************************************************"
+
+;"***************************************************************************"
+; "ROOMS & ROOM ACTIONS"
+;"***************************************************************************"
+
+;"---------------------------------------------------------------------------"
+; "RM-BAS-LAIR"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-BAS-LAIR
+       (LOC ROOMS)
+       (DESC "basilisk's lair")
+       (FLAGS FL-LIGHTED FL-INDOORS)
+       (SYNONYM LAIR)
+       (ADJECTIVE BASILISK)
+       (OWNER CH-BASILISK)
+       (NE PER RT-EXIT-BAS-LAIR)
+       (IN PER RT-EXIT-BAS-LAIR)
+       (SE TO RM-CAVE)
+       (OUT TO RM-CAVE)
+       (GLOBAL LG-WALL)
+       (ACTION RT-RM-BAS-LAIR)
+       (THINGS
+               STONE (STATUE STATUES KNIGHT KNIGHTS) RT-PS-STATUES
+               NE (TUNNEL TUNNELS) RT-PS-TUNNEL
+       )
+>
+
+<ROUTINE RT-RM-BAS-LAIR ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <COND
+                               (<MC-CONTEXT? ,M-LOOK>
+                                       <TELL "You are" standing " in">
+                               )
+                               (T
+                                       <TELL "The tunnel widens out into">
+                               )
+                       >
+                       <TELL
+" a chamber full of grotesque statues. Upon closer examination, you realize
+with horror that they are knights who have been turned into stone. The tunnel
+takes a turn to the "
+                       >
+                       <COND
+                               (<EQUAL? ,OHERE ,RM-HOT-ROOM>
+                                       <TELL "sou">
+                               )
+                               (T
+                                       <TELL "nor">
+                               )
+                       >
+                       <TELL "theast">
+                       <COND
+                               (<IN? ,CH-BASILISK ,RM-BAS-LAIR>
+                                       <FSET ,CH-BASILISK ,FL-SEEN>
+                                       <THIS-IS-IT ,CH-BASILISK>
+                                       <COND
+                                               (<FSET? ,CH-BASILISK ,FL-ALIVE>
+                                                       <TELL
+", but the passage into the mountain is blocked by a sleeping basilisk"
+                                                       >
+                                               )
+                                               (T
+                                                       <TELL
+", and in the middle of the room is a basilisk made of solid stone"
+                                                       >
+                                               )
+                                       >
+                               )
+                       >
+                       <TELL "." CR>
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-BASILISK-LAIR>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTERED>
+                       <COND
+                               (<AND <IN? ,CH-BASILISK ,RM-BAS-LAIR>
+                                               <FSET? ,CH-BASILISK ,FL-ALIVE>
+                                       >
+                                       <RT-QUEUE ,RT-I-BASILISK-1 <+ ,GL-MOVES 1>>
+                                       <THIS-IS-IT ,CH-BASILISK>
+                                       <TELL
+"|The noise of your entry awakens the basilisk, who begins to cast around
+bleary-eyed for the source of the sound." CR
+                                       >
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-BEG>
+                       <COND
+                               (<AND <VERB? TELL>
+                                               ,P-CONT
+                                       >
+                                       <RFALSE>
+                               )
+                               (<AND <SPEAKING-VERB?>
+                                               <FSET? ,CH-BASILISK ,FL-ALIVE>
+                                       >
+                                       <THIS-IS-IT ,CH-BASILISK>
+                                       <TELL
+"Making noise only seems to help the basilisk find you faster." CR
+                                       >
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+       >
+>
+
+<ROUTINE RT-EXIT-BAS-LAIR ("OPT" (QUIET <>))
+       <COND
+               (<AND <FSET? ,CH-BASILISK ,FL-ALIVE>
+                               <NOT .QUIET>
+                       >
+                       <TELL
+"As you try to step over" the ,CH-BASILISK ", it looks up at you and you are
+turned to stone in mid-step. You topple to the floor and shatter, although by
+the time you hit the ground you are too dead to care.|"
+                       >
+                       <RT-END-OF-GAME>
+               )
+               (T
+                       <RETURN ,RM-HOT-ROOM>
+               )
+       >
+>
+
+<ROUTINE RT-PS-STATUES ("OPT" (CONTEXT <>) (ART <>) (CAP? <>))
+        <FSET ,PSEUDO-OBJECT ,FL-PLURAL>
+        <FCLEAR ,PSEUDO-OBJECT ,FL-VOWEL>
+        <COND
+               (<MC-CONTEXT? ,M-OBJDESC>
+                       <COND
+                               (.ART
+                                       <PRINT-ARTICLE ,PSEUDO-OBJECT .ART .CAP?>
+                               )
+                       >
+                       <COND
+                               (<EQUAL? .ART <> ,K-ART-THE ,K-ART-A ,K-ART-ANY>
+                                       <COND
+                                               (.ART
+                                                       <TELL " ">
+                                               )
+                                       >
+                                       <TELL "statues">
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "CH-BASILISK"
+;"---------------------------------------------------------------------------"
+
+<OBJECT CH-BASILISK
+       (LOC RM-BAS-LAIR)
+       (DESC "basilisk")
+       (FLAGS FL-ALIVE FL-NO-DESC FL-OPEN FL-SEARCH FL-TRY-TAKE)
+       (SYNONYM BASILISK)
+       (ACTION RT-CH-BASILISK)
+>
+
+<ROUTINE RT-CH-BASILISK ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-WINNER>
+                       <COND
+                               (<FSET? ,CH-BASILISK ,FL-ALIVE>
+                                       <THIS-IS-IT ,CH-BASILISK>
+                                       <TELL
+"Making noise only seems to help the basilisk find you faster." CR
+                                       >
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<AND <VERB? TELL>
+                               ,P-CONT
+                       >
+                       <RFALSE>
+               )
+               (<AND <TOUCH-VERB?>
+                               <FSET? ,CH-BASILISK ,FL-ALIVE>
+                       >
+                       <TELL
+"As you approach" the ,CH-BASILISK ", it looks up at you and you are turned
+to stone in mid-step. You topple to the floor and shatter, although by the
+time you hit the ground you are too dead to care.|"
+                       >
+                       <RT-END-OF-GAME>
+               )
+               (<VERB? TAKE>
+                       <TELL
+The ,CH-BASILISK " is firmly rooted to the floor of the cave." CR
+                       >
+               )
+               (<VERB? EXAMINE>
+                       <FSET ,CH-BASILISK ,FL-SEEN>
+                       <TELL
+The ,CH-BASILISK " looks like either a large lizard or a small dragon."
+                       >
+                       <COND
+                               (<NOT <FSET? ,CH-BASILISK ,FL-ALIVE>>
+                                       <TELL " It has turned to solid stone.">
+                               )
+                       >
+                       <CRLF>
+               )
+       >
+>
+
+<ROUTINE RT-I-BASILISK-1 ()
+       <COND
+               (<MC-HERE? ,RM-BAS-LAIR>
+                       <RT-QUEUE ,RT-I-BASILISK-2 <+ ,GL-MOVES 1>>
+                       <TELL
+"|The basilisk turns towards you. Its glance is about to fall upon you." CR
+                       >
+               )
+       >
+>
+
+<ROUTINE RT-I-BASILISK-2 ()
+       <COND
+               (<MC-HERE? ,RM-BAS-LAIR>
+                       <TELL
+"|The basilisk's eye falls upon you and suddenly your feet feel very cold.
+Glancing down, you see with horror that they have turned to stone. The
+deadening sensation quickly works its way up your legs. A terrified cry forms
+in your throat, but it never makes it out of your mouth. In an instant, the
+petrification is complete.|"
+                       >
+                       <RT-END-OF-GAME>
+               )
+       >
+>
+
+<ROUTINE RT-KILL-BASILISK ()
+       <FCLEAR ,CH-BASILISK ,FL-ALIVE>
+       <RT-DEQUEUE ,RT-I-BASILISK-1>
+       <RT-DEQUEUE ,RT-I-BASILISK-2>
+       <THIS-IS-IT ,CH-BASILISK>
+       <TELL
+"The glint of the highly-polished shield attracts the basilisk's attention.
+Slowly it turns its head towards you, and then suddenly it catches a glimpse
+of its own reflection. The life immediately drains out of the creature, and
+you realize with fascination that it has turned itself into stone.|"
+       >
+       <RT-SCORE-MSG 0 2 5 2>
+       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC>>
+       <COND
+               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                       <RT-UPDATE-DESC-WINDOW>
+               )
+       >
+       <RTRUE>
+>
+
+;"***************************************************************************"
+; "end of file"
+;"***************************************************************************"
+
diff --git a/be.zil b/be.zil
new file mode 100644 (file)
index 0000000..5fc3b1e
--- /dev/null
+++ b/be.zil
@@ -0,0 +1,531 @@
+;"***************************************************************************"
+; "game : Arthur"
+; "file : BE.ZIL"
+; "auth :   $Author:   DEB  $"
+; "date :     $Date:   12 May 1989  0:47:36  $"
+; "revs : $Revision:   1.10  $"
+; "vers : 1.0"
+;"---------------------------------------------------------------------------"
+; "Be verbs"
+; "Copyright (C) 1989 Infocom, Inc.  All rights reserved."
+;"***************************************************************************"
+
+;"---------------------------------------------------------------------------"
+; "BE verbs"
+;"---------------------------------------------------------------------------"
+
+<SYNTAX BE OBJECT (EVERYWHERE) = V-BE>
+<SYNTAX BE OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-BE>
+
+<SYNTAX BE? OBJECT (EVERYWHERE) = V-BE?>
+<SYNTAX BE? OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-BE?>
+<SYNTAX WHO OBJECT (EVERYWHERE) = V-WHO>
+<SYNTAX WHO OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-WHO>
+<SYNTAX WHAT OBJECT (EVERYWHERE) = V-WHAT>
+<SYNTAX WHAT OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-WHAT>
+<SYNTAX WHERE OBJECT (EVERYWHERE) = V-WHERE>
+<SYNTAX WHERE OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-WHERE>
+;<SYNTAX WHEN OBJECT (EVERYWHERE) = V-WHEN>
+;<SYNTAX WHEN OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-WHEN>
+;<SYNTAX WHY OBJECT (EVERYWHERE) = V-WHY>
+;<SYNTAX WHY OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-WHY>
+;<SYNTAX HOW OBJECT (EVERYWHERE) = V-HOW>
+;<SYNTAX HOW OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-HOW>
+
+;<SYNTAX CAN OBJECT (EVERYWHERE) = V-CAN?>
+;<SYNTAX MAY OBJECT (EVERYWHERE) = V-MAY?>
+;<SYNTAX DO OBJECT (EVERYWHERE) = V-DO?>
+;<SYNTAX COULD OBJECT (EVERYWHERE) = V-COULD?>
+;<SYNTAX WOULD OBJECT (EVERYWHERE) = V-WOULD?>
+;<SYNTAX SHOULD OBJECT (EVERYWHERE) = V-SHOULD?>
+;<SYNTAX MIGHT OBJECT (EVERYWHERE) = V-MIGHT?>
+;<SYNTAX WILL OBJECT (EVERYWHERE) = V-WILL?>
+;<SYNTAX MUST OBJECT (EVERYWHERE) = V-MUST?>
+
+;"---------------------------------------------------------------------------"
+; "BE verb routines"
+;"---------------------------------------------------------------------------"
+
+<CONSTANT QACTIONS
+       <TABLE (PURE LENGTH)
+               V-BE V-BE? 0
+       >
+>
+
+<ROUTINE V-BE ("AUX" TMP NOT? ADJ? LOC? OBJ PREP)
+       <SET NOT? <ANDB ,PARSE-NOT <PARSE-FLAGS ,PARSE-RESULT>>>
+       <SET ADJ? <PARSE-ADJ ,PARSE-RESULT>>
+       <SET LOC? <PARSE-LOC ,PARSE-RESULT>>
+       <COND
+               (<VERB? BE? WHO WHAT WHERE ;WHY ;WHEN ;HOW>
+                       <COND
+                               (<MC-PRSI? ,INTADJ>
+                                       <TELL The+verb ,PRSO "are">
+                                       <COND
+                                               (<NOT <IS-PRSO-ADJ? .ADJ?>>
+                                                       <TELL "n't">
+                                               )
+                                       >
+                                       <TELL " ">
+                                       <PRINTB .ADJ?>
+                                       <TELL "." CR>
+                               )
+                               (<MC-PRSI? ,INTPP>
+                                       <COND
+                                               (<AND <SET PREP <P-PP-PREP>>
+                                                               <SET OBJ <P-PP-OBJ>>
+                                                       >
+                                                       <COND
+                                                               (<VERB? BE?>
+                                                                       <TELL The+verb ,PRSO "are">
+                                                                       <COND
+                                                                               (<NOT <RIGHT-PREP? .PREP ,PRSO .OBJ>>
+                                                                                       <TELL "n't">
+                                                                               )
+                                                                       >
+                                                                       <TELL " ">
+                                                                       <PRINTB .PREP>
+                                                                       <TELL the .OBJ "." CR>
+                                                               )
+                                                               (T
+                                                                       <TELL "You want to know ">
+                                                                       <TELL-Q-WORD>
+                                                                       <PRSO-IS .NOT?>
+                                                                       <TELL " ">
+                                                                       <PRINTB .PREP>
+                                                                       <TELL the .OBJ "." CR>
+                                                               )
+                                                       >
+                                               )
+                                               (T
+                                                       <TELL "You want to know ">
+                                                       <TELL-Q-WORD>
+                                                       <PRSO-IS .NOT?>
+                                                       <TELL " ">
+                                                       <PRINTB <PP-PREP .LOC?>>
+                                                       <TELL " ">
+                                                       <NP-PRINT <PP-NOUN .LOC?>>
+                                                       <TELL "." CR>
+                                               )
+                                       >
+                               )
+                               (<AND <NOT ,PRSI>
+                                               <VERB? WHERE>
+                                       >
+                                       <SET LOC? <LOC ,PRSO>>
+                                       <COND
+                                               (<IN? ,PRSO ,HERE>
+                                                       <PRSO-IS <> T>
+                                                       <TELL " here." CR>
+                                               )
+                                               (<EQUAL? .LOC? ,GLOBAL-OBJECTS>
+                                                       <TELL "No doubt" the ,PRSO verb ,PRSO "are" " around here somewhere." CR>
+                                               )
+                                               (<AND <EQUAL? .LOC? ,LOCAL-GLOBALS>
+                                                               <RT-GLOBAL-IN? ,PRSO ,HERE>
+                                                       >
+                                                       <TELL The+verb ,PRSO "are" " nearby." CR>
+                                               )
+                                               (<FSET? .LOC? ,FL-PERSON>
+                                                       <TELL The+verb .LOC? "have" the ,PRSO "." CR>
+                                               )
+                                               (<EQUAL? <META-LOC ,PRSO> ,HERE>
+                                                       <TELL The+verb ,PRSO "are" in .LOC? the .LOC? "." CR>
+                                               )
+                                               (<IN? .LOC? ,ROOMS>
+                                                       <TELL The ,PRSO " is probably ">
+                                                       <COND
+                                                               (<FSET? ,PRSO ,TOUCHBIT>
+                                                                       <TELL "still in" the .LOC? "." CR>
+                                                               )
+                                                               (T
+                                                                       <TELL "lying around somewhere." CR>
+                                                               )
+                                                       >
+                                               )
+                                               (T
+                                                       <SETG GL-QUESTION 1>
+                                                       <TELL "That's an excellent question. Just where" verb ,PRSO "are" the ,PRSO "?" CR>
+                                               )
+                                       >
+                               )
+                               (T
+                                       <SETG GL-QUESTION 1>
+                                       <TELL "You want to know ">
+                                       <TELL-Q-WORD>
+                                       <PRSO-IS .NOT?>
+                                       <COND
+                                               (,PRSI
+                                                       <TELL a ,PRSI>
+                                               )
+                                       >
+                                       <TELL "?" CR>
+                               )
+                       >
+               )
+               (T
+                       <COND
+                               (<MC-PRSI? ,INTADJ>
+                                       <COND
+                                               (<IS-PRSO-ADJ? .ADJ?>
+                                                       <COND
+                                                               (.NOT?
+                                                                       <TELL "Wrong,">
+                                                               )
+                                                               (T
+                                                                       <TELL "Right,">
+                                                               )
+                                                       >
+                                                       <PRSO-IS <>>
+                                               )
+                                               (T
+                                                       <COND
+                                                               (.NOT?
+                                                                       <TELL "Right,">
+                                                               )
+                                                               (T
+                                                                       <TELL "Wrong,">
+                                                               )
+                                                       >
+                                                       <PRSO-IS T>
+                                               )
+                                       >
+                                       <TELL " ">
+                                       <PRINTB .ADJ?>
+                                       <TELL "." CR>
+                               )
+                               (<MC-PRSI? ,INTPP>
+                                       <TELL "So, you say">
+                                       <PRSO-IS .NOT?>
+                                       <COND
+                                               (<AND <SET PREP <P-PP-PREP>>
+                                                               <SET OBJ <P-PP-OBJ>>
+                                                       >
+                                                       <PRINTB .PREP>
+                                                       <TELL the .OBJ>
+                                               )
+                                               (T
+                                                       <PRINTB <PP-PREP .LOC?>>
+                                                       <TELL the <NP-PRINT <PP-NOUN .LOC?>>>
+                                               )
+                                       >
+                                       <TELL "." CR>
+                               )
+                               (T
+                                       <SETG GL-QUESTION 1>
+                                       <TELL "So you think">
+                                       <PRSO-IS .NOT?>
+                                       <COND
+                                               (,PRSI
+                                                       <TELL a ,PRSI>
+                                               )
+                                       >
+                                       <TELL "?" CR>
+                               )
+                       >
+               )
+       >
+>
+
+;<ROUTINE P-NEGATIVE? ()
+       <ANDB ,PARSE-NOT <PARSE-FLAGS ,PARSE-RESULT>>
+>
+
+<ROUTINE TELL-Q-WORD ()
+       <COND
+               (<VERB? BE?>
+                       <TELL "if">
+               )
+       ;       (<VERB? WHY>
+                       <TELL "why">
+               )
+               (<VERB? WHO>
+                       <TELL "who">
+               )
+               (<VERB? WHAT>
+                       <TELL "what">
+               )
+               (<VERB? WHERE>
+                       <TELL "where">
+               )
+       ;       (<VERB? WHEN>
+                       <TELL "when">
+               )
+       ;       (<VERB? HOW>
+                       <TELL "how">
+               )
+               (T
+                       <PRINTB ,P-PRSA-WORD>
+               )
+       >
+>
+
+<ROUTINE RIGHT-PREP? (PREP OBJ CONT)
+       <COND
+               (<NOT <RT-META-IN? .OBJ .CONT>>
+                       <RFALSE>
+               )
+               (<EQUAL? .PREP ,W?IN ,W?INSIDE>
+                       <COND
+                               (<SEE-INSIDE? .CONT>
+                                       <RTRUE>
+                               )
+                               (T
+                                       <RFALSE>
+                               )
+                       >
+               )
+               (<AND <EQUAL? .PREP ,W?ON>
+                               <FSET? .CONT ,FL-SURFACE>
+                       >
+                       <RTRUE>
+               )
+       >
+>
+
+<CONSTANT ADJ-TABLE
+       <TABLE (PURE LENGTH)
+               <VOC "OUT" ;"OUTSIDE" ADJ>      ; "OUTSIDE is a synonym of OUT"
+               IS-OUTSIDE?
+       ;       <VOC "INSIDE" ADJ>
+       ;       IS-INSIDE?
+               <VOC "OPEN" ADJ>
+               IS-OPEN?
+               <VOC "CLOSED" ADJ>
+               IS-CLOSED?
+               <VOC "LOCKED" ADJ>
+               IS-LOCKED?
+               <VOC "UNLOCKED" ADJ>
+               IS-UNLOCKED?
+               <VOC "DEAD" ADJ>
+               IS-DEAD?
+               <VOC "ALIVE" ADJ>
+               IS-ALIVE?
+               <VOC "QUIET" ADJ>
+               IS-QUIET?
+               <VOC "HERE" ADJ>
+               IS-HERE?
+       >
+>
+
+<ROUTINE IS-QUIET? (OBJ)
+       <RTRUE>
+>
+
+<ROUTINE IS-OUTSIDE? (OBJ)
+       <NOT <FSET? ,HERE ,FL-INDOORS>>
+>
+
+;<ROUTINE IS-INSIDE? (OBJ)
+       <FSET? ,HERE ,FL-INDOORS>
+>
+
+<ROUTINE IS-OPEN? (OBJ)
+       <AND
+               <FSET? .OBJ ,FL-OPENABLE>
+               <FSET? .OBJ ,FL-OPEN>
+       >
+>
+
+<ROUTINE IS-CLOSED? (OBJ)
+       <AND
+               <FSET? .OBJ ,FL-OPENABLE>
+               <NOT <FSET? .OBJ ,FL-OPEN>>
+       >
+>
+
+<ROUTINE IS-LOCKED? (OBJ)
+       <AND
+               <FSET? .OBJ ,FL-OPENABLE>
+               <FSET? .OBJ ,FL-LOCKED>
+       >
+>
+
+<ROUTINE IS-UNLOCKED? (OBJ)
+       <AND
+               <FSET? .OBJ ,FL-OPENABLE>
+               <NOT <FSET? .OBJ ,FL-LOCKED>>
+       >
+>
+
+<ROUTINE IS-DEAD? (OBJ)
+       <NOT <FSET? .OBJ ,FL-ALIVE>>
+>
+
+<ROUTINE IS-ALIVE? (OBJ)
+       <FSET? .OBJ ,FL-ALIVE>
+>
+
+<ROUTINE IS-HERE? (OBJ "AUX" L)
+       <SET L <LOC .OBJ>>
+       <REPEAT ()
+               <COND
+                       (<OR    <ZERO? .L>
+                                       <EQUAL? .L ,GLOBAL-OBJECTS ,LOCAL-GLOBALS ,ROOMS>
+                               >
+                               <RFALSE>
+                       )
+                       (<EQUAL? .L ,HERE>
+                               <RTRUE>
+                       )
+                       (T
+                               <SET L <LOC .L>>
+                       )
+               >
+       >
+>
+
+<ROUTINE PRSO-IS (NOT? "OPT" (CAP? <>))
+       <COND
+               (.CAP?
+                       <TELL The ,PRSO>
+               )
+               (T
+                       <TELL the ,PRSO>
+               )
+       >
+       <TELL verb ,PRSO "are">
+       <COND
+               (.NOT?
+                       <TELL "n't">
+               )
+       >
+>
+
+<ROUTINE IS-PRSO-ADJ? (ADJ "AUX" TMP)
+       <COND
+               (<AND <SET TMP <GETPT ,PRSO ,P?ADJECTIVE>>
+                               <INTBL? .ADJ .TMP </ <PTSIZE .TMP> 2>>
+                       >
+                       <RTRUE>
+               )
+               (<AND <SET TMP <INTBL? .ADJ ,ADJ-TABLE <GET ,ADJ-TABLE 0>>>
+                               <APPLY <GET .TMP 1> ,PRSO>
+                       >
+                       <RTRUE>
+               )
+       >
+>
+
+;<ROUTINE PP? (P N "AUX" (TMP <PARSE-LOC ,PARSE-RESULT>))
+       <COND
+               (<NOT .TMP>
+                       <RFALSE>
+               )
+               (<NOT <AND
+                                       .P
+                                       <EQUAL? .P <P-PP-PREP>>
+                               >
+                       >
+                       <RFALSE>
+               )
+               (<NOT <AND
+                                       .N
+                                       <EQUAL? .N <P-PP-OBJ>>
+                               >
+                       >
+                       <RFALSE>
+               )
+               (T
+                       <RTRUE>
+               )
+       >
+>
+
+;<ROUTINE YES-BUT? (STR1 STR2)
+       <COND
+               (<NOT <PARSE-QW ,PARSE-RESULT>>
+                       <TELL The ,PRSO " " .STR1 ", but " .STR2 he ,PRSO "?" CR>
+               )
+       >
+>
+
+;<ROUTINE V-CAN? ()
+       <YES-BUT? "can" "may">
+>
+
+;<ROUTINE V-MAY? ()
+       <YES-BUT? "may" "can">
+>
+
+<ROUTINE V-STATEMENT ()
+       <V-DO?>
+>
+
+<ROUTINE V-DO? ()
+       <COND
+               (<NOT <PARSE-QW ,PARSE-RESULT>>
+                       <TELL The+verb ,PRSO "do" ", but why?" CR>
+               )
+       >
+>
+
+;<ROUTINE V-COULD? ()
+       <YES-BUT? "could" "would">
+>
+
+;<ROUTINE V-WOULD? ()
+       <YES-BUT? "would" "could">
+>
+
+;<ROUTINE V-SHOULD? ()
+       <YES-BUT? "should" "will">
+>
+
+;<ROUTINE V-MIGHT? ()
+       <YES-BUT? "might" "will">
+>
+
+;<ROUTINE V-WILL? ()
+       <YES-BUT? "will" "should">
+>
+
+;<ROUTINE V-MUST? ()
+       <YES-BUT? "must" "can">
+>
+
+<ROUTINE V-BE? ()
+       <V-BE>
+>
+
+<ROUTINE V-WHO ("AUX" ASK)
+;      <V-BE>
+       <COND
+               (<EQUAL? ,WINNER ,CH-PLAYER>
+                       <SET ASK <FIND-A-WINNER>>
+               )
+               (T
+                       <SET ASK ,WINNER>
+               )
+       >
+       <SETG WINNER ,CH-PLAYER>
+       <SETG PRSI-NP ,PRSO-NP>
+       <SETG PRSO-NP <>>
+       <PERFORM ,V?ASK-ABOUT .ASK ,PRSO>
+>
+
+<ROUTINE V-WHAT ()
+;      <V-BE>
+       <V-WHO>
+>
+
+;<ROUTINE V-WHEN ()
+       <V-BE>
+>
+
+<ROUTINE V-WHERE ()
+       <V-BE>
+>
+
+;<ROUTINE V-WHY ()
+       <V-BE>
+>
+
+;<ROUTINE V-HOW ()
+       <V-BE>
+>
+
+;"***************************************************************************"
+; "end of file"
+;"***************************************************************************"
+
diff --git a/boar.zil b/boar.zil
new file mode 100644 (file)
index 0000000..3edb2fe
--- /dev/null
+++ b/boar.zil
@@ -0,0 +1,876 @@
+;"***************************************************************************"
+; "game : Arthur"
+; "file : BOAR.ZIL"
+; "auth :   $Author:   DEB  $"
+; "date :     $Date:   15 May 1989 19:42:24  $"
+; "revs : $Revision:   1.60  $"
+; "vers : 1.0"
+;"---------------------------------------------------------------------------"
+; "Boar puzzle"
+; "Copyright (C) 1989 Infocom, Inc.  All rights reserved."
+;"***************************************************************************"
+
+;"---------------------------------------------------------------------------"
+; "RM-NORTH-OF-CHASM"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-NORTH-OF-CHASM
+       (LOC ROOMS)
+       (DESC "north of chasm")
+       (FLAGS FL-LIGHTED FL-SURFACE)
+       (SOUTH PER RT-OVER-CHASM)
+       (UP PER RT-FLY-UP)
+       (DOWN PER RT-ENTER-CHASM)
+       (ADJACENT <TABLE (LENGTH BYTE PURE) RM-SOUTH-OF-CHASM T>)
+       (GLOBAL LG-CHASM LG-ENCHANTED-TREES LG-FOREST RM-SOUTH-OF-CHASM)
+       (ACTION RT-RM-NORTH-OF-CHASM)
+>
+
+<ROUTINE RT-RM-NORTH-OF-CHASM ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <FSET ,LG-CHASM ,FL-SEEN>
+                       <FSET ,TH-BOAR ,FL-SEEN>
+                       <TELL
+"You are on the northern lip of a narrow chasm in the heart of the forest. "
+                       >
+                       <THIS-IS-IT ,TH-BOAR>
+                       <COND
+                               (<FSET? ,TH-BOAR ,FL-ALIVE>
+                                       <COND
+                                               (<MC-FORM? ,K-FORM-ARTHUR>
+                                                       <TELL The ,TH-BOAR " ">
+                                                       <COND
+                                                               (<EQUAL? ,GL-BOAR-NUM 1>
+                                                                       <TELL
+"is a short distance away, madly pawing the ground as if he is about to make
+a charge at you"
+                                                                       >
+                                                               )
+                                                               (T
+                                                                       <TELL
+"is thundering towards you. There is a mad, wild gleam in his eyes, and his
+single tusk is poised to strike your unprotected flesh"
+                                                                       >
+                                                               )
+                                                       >
+                                               )
+                                               (T
+                                                       <TELL "Nearby you see" a ,TH-BOAR ,K-PACING-MSG>
+                                               )
+                                       >
+                               )
+                               (T
+                                       <TELL A ,TH-BOAR>
+                                       <COND
+                                               (<IN? ,TH-TUSK ,TH-BOAR>
+                                                       <FSET ,TH-TUSK ,FL-SEEN>
+                                                       <TELL ,K-SINGLE-TUSK-MSG>
+                                               )
+                                       >
+                                       <TELL " lies on" the ,TH-GROUND>
+                               ;       <COND
+                                               (<IN? ,TH-SWORD ,TH-BOAR>
+                                                       <TELL "," ,K-IMPALED-MSG>
+                                               )
+                                       >
+                               )
+                       >
+                       <TELL "." CR>
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-NORTH-OF-CHASM>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-END>
+                       <COND
+                               (<AND <FSET? ,TH-BOAR ,FL-ALIVE>
+                                               <VERB? TRANSFORM>
+                                               <NOT <MC-FORM? ,GL-OLD-FORM>>
+                                       >
+                                       <CRLF>
+                                       <COND
+                                               (<MC-FORM? ,K-FORM-ARTHUR>
+                                                       <SETG GL-BOAR-NUM 1>
+                                                       <RT-QUEUE ,RT-I-BOAR <+ ,GL-MOVES 1>>
+                                                       <THIS-IS-IT ,TH-BOAR>
+                                                       <TELL
+The ,TH-BOAR " looks startled, and then starts to paw the ground like a bull
+about to charge.|"
+                                                       >
+                                               )
+                                               (T
+                                                       <SETG GL-BOAR-NUM 0>
+                                                       <RT-DEQUEUE ,RT-I-BOAR>
+                                                       <THIS-IS-IT ,TH-BOAR>
+                                                       <TELL
+"Startled," the ,TH-BOAR " stops dead in his tracks, and then resumes his
+wild pacing.|"
+                                                       >
+                                               )
+                                       >
+                                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC>>
+                                       <COND
+                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                                                       <RT-UPDATE-DESC-WINDOW>
+                                               )
+                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                                       <RT-UPDATE-PICT-WINDOW>
+                                               )
+                                       >
+                                       <RTRUE>
+                               )
+                       >
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "LG-CHASM"
+;"---------------------------------------------------------------------------"
+
+<OBJECT LG-CHASM
+       (LOC LOCAL-GLOBALS)
+       (DESC "chasm")
+       (SYNONYM CHASM CLIFF SIDE)
+       (ADJECTIVE OTHER)
+       (OWNER LG-CHASM)        ; "For OTHER SIDE OF CHASM"
+       (ACTION RT-LG-CHASM)
+>
+
+<ROUTINE RT-LG-CHASM ("OPT" (CONTEXT <>) "AUX" RM)
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<AND <NOUN-USED? ,LG-CHASM ,W?SIDE>
+                               <ADJ-USED? ,LG-CHASM ,W?OTHER>
+                       >
+                       <COND
+                               (,NOW-PRSI
+                                       <COND
+                                               (<AND <OR
+                                                                       <VERB? THROW>
+                                                                       <AND
+                                                                               <VERB? PUT PUT-IN>
+                                                                               <VERB-WORD? ,W?THROW ,W?TOSS ,W?HURL ,W?CHUCK ,W?FLING ,W?PITCH ,W?HEAVE>
+                                                                       >
+                                                               >
+                                                               <IDROP>
+                                                       >
+                                                       <RT-MOVE-OVER-CHASM ,PRSO>
+                                               )
+                                       >
+                               )
+                               (<VERB? WALK-TO ENTER CLIMB-OVER>
+                                       <COND
+                                               (<MC-HERE? ,RM-SOUTH-OF-CHASM>
+                                                       <RT-DO-WALK ,P?NORTH>
+                                               )
+                                               (<MC-HERE? ,RM-NORTH-OF-CHASM>
+                                                       <RT-DO-WALK ,P?SOUTH>
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<VERB? PUT PUT-IN THROW>
+                       <COND
+                               (<IDROP>
+                                       <REMOVE ,PRSO>
+                                       <TELL
+The+verb ,PRSO "sail" " into" the ,LG-CHASM " and quickly disappears from
+sight." CR
+                                       >
+                               )
+                       >
+               )
+               (<VERB? THROW-OVER>
+                       <COND
+                               (<IDROP>
+                                       <RT-MOVE-OVER-CHASM ,PRSO>
+                               )
+                       >
+               )
+               (<VERB? CLIMB-OVER>
+                       <COND
+                               (<MC-HERE? ,RM-SOUTH-OF-CHASM>
+                                       <RT-DO-WALK ,P?NORTH>
+                               )
+                               (<MC-HERE? ,RM-NORTH-OF-CHASM>
+                                       <RT-DO-WALK ,P?SOUTH>
+                               )
+                       >
+               )
+               (<VERB? ENTER DISMOUNT>
+                       <COND
+                               (<MC-FORM? ,K-FORM-OWL>
+                                       <TELL ,K-UPDRAFT-MSG>
+                                       <RT-GOTO <RT-FLY-UP> T>
+                                       <RTRUE>
+                               )
+                               (<VERB-WORD? ,W?JUMP ,W?DIVE ,W?LEAP>
+                                       <TELL
+"Throwing caution to the winds, you leap into the chasm. On the way down, you
+notice that the walls are gray and jagged. When you land at the bottom, you
+notice that you are squashed and dead.|"
+                                       >
+                                       <RT-END-OF-GAME>
+                               )
+                               (T
+                                       <TELL "The steep cliffs are too dangerous to climb down." CR>
+                               )
+                       >
+               )
+               (<VERB? EXAMINE LOOK-IN LOOK-DOWN>
+                       <FSET ,LG-CHASM ,FL-SEEN>
+                       <TELL "It looks like a long way down." CR>
+               )
+       >
+>
+
+<CONSTANT K-UPDRAFT-MSG "A strong updraft pushes you high into the air.||">
+
+<ROUTINE RT-ENTER-CHASM ("OPT" (QUIET <>))
+       <COND
+               (.QUIET
+                       <RETURN ,LG-CHASM>
+               )
+               (<MC-FORM? ,K-FORM-OWL>
+                       <TELL ,K-UPDRAFT-MSG>
+                       <RT-GOTO <RT-FLY-UP> T>
+                       <RFALSE>
+               )
+               (T
+                       <TELL "The steep cliffs are too dangerous to climb down.|">
+                       <RFALSE>
+               )
+       >
+>
+
+<ROUTINE RT-MOVE-OVER-CHASM (OBJ)
+       <COND
+               (<MC-HERE? ,RM-SOUTH-OF-CHASM>
+                       <COND
+                               (<EQUAL? .OBJ ,TH-APPLE>
+                                       <RT-APPLE-MSG>
+                               )
+                               (T
+                                       <MOVE .OBJ ,RM-NORTH-OF-CHASM>
+                                       <THIS-IS-IT .OBJ>
+                                       <THIS-IS-IT ,TH-BOAR>
+                                       <TELL
+The+verb .OBJ "sail" " through the air and" verb .OBJ "fall" " on the ground
+near" the ,TH-BOAR "." CR
+                                       >
+                                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-INVT ,K-UPD-DESC>>
+                                       <COND
+                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                                                       <RT-UPDATE-DESC-WINDOW>
+                                               )
+                                       >
+                                       <RTRUE>
+                               )
+                       >
+               )
+               (<MC-HERE? ,RM-NORTH-OF-CHASM>
+                       <MOVE .OBJ ,RM-SOUTH-OF-CHASM>
+                       <COND
+                               (<AND <EQUAL? .OBJ ,TH-TUSK>
+                                               <NOT <FSET? ,TH-TUSK ,FL-BROKEN>>
+                                       >
+                                       <FSET ,TH-TUSK ,FL-BROKEN>
+                                       <PUTP ,TH-TUSK ,P?SCORE %<LSH 2 ,K-WISD-SHIFT>>
+                               )
+                       >
+                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-INVT>>
+                       <THIS-IS-IT .OBJ>
+                       <TELL
+The+verb .OBJ "fall" " to the ground on the other side of" the ,LG-CHASM "." CR
+                       >
+               )
+       >
+>
+
+<ROUTINE RT-OVER-CHASM ("OPT" (QUIET <>))
+       <COND
+               (<OR    .QUIET
+                               <MC-FORM? ,K-FORM-OWL>
+                       >
+                       <COND
+                               (<EQUAL? ,P-WALK-DIR ,P?NORTH>
+                                       <RETURN ,RM-NORTH-OF-CHASM>
+                               )
+                               (T
+                                       <RETURN ,RM-SOUTH-OF-CHASM>
+                               )
+                       >
+               )
+               (T
+                       <THIS-IS-IT ,LG-CHASM>
+                       <TELL
+"You gauge the distance and decide that" the ,LG-CHASM " is just a little too
+wide to jump over.|"
+                       >
+                       <RFALSE>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "RM-SOUTH-OF-CHASM"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-SOUTH-OF-CHASM
+       (LOC ROOMS)
+       (DESC "south of chasm")
+       (SYNONYM CLEARING)
+       (FLAGS FL-LIGHTED)
+       (SOUTH TO RM-LEP-PATH)
+       (NORTH PER RT-OVER-CHASM)
+       (UP PER RT-FLY-UP)
+       (DOWN PER RT-ENTER-CHASM)
+       (ADJACENT <TABLE (LENGTH BYTE PURE) RM-NORTH-OF-CHASM T>)
+       (GLOBAL LG-CHASM LG-ENCHANTED-TREES LG-FOREST LG-PATH RM-NORTH-OF-CHASM RM-LEP-PATH)
+       (ACTION RT-RM-SOUTH-OF-CHASM)
+>
+
+<ROUTINE RT-RM-SOUTH-OF-CHASM ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <COND
+                               (<MC-CONTEXT? ,M-LOOK>
+                                       <TELL "You are" standing " in">
+                               )
+                               (T
+                                       <COND
+                                               (<EQUAL? ,OHERE ,RM-LEP-PATH>
+                                                       <TELL
+"After a while the trees begin to thin out, and soon you find yourself in"
+                                                       >
+                                               )
+                                               (T
+                                                       <TELL "You are" standing " in">
+                                               )
+                                       >
+                               )
+                       >
+                       <FSET ,LG-CHASM ,FL-SEEN>
+                       <TELL
+" a large clearing in the heart of the forest. The clearing is cleft by a
+narrow chasm which lies directly to the north. A path leading into the
+forest lies to the south. On the other side of the chasm you see"
+                       >
+                       <FSET ,TH-BOAR ,FL-LOCKED>
+               ;       <FCLEAR ,TH-BOAR ,FL-NO-DESC>
+                       <PRINT-CONTENTS ,RM-NORTH-OF-CHASM>
+                       <FCLEAR ,TH-BOAR ,FL-LOCKED>
+               ;       <FSET ,TH-BOAR ,FL-NO-DESC>
+                       <FSET ,TH-BOAR ,FL-SEEN>
+                       <TELL "." CR>
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-SOUTH-OF-CHASM>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-BOAR"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-BOAR
+       (LOC RM-NORTH-OF-CHASM)
+       (FLAGS FL-ALIVE FL-HAS-SDESC FL-NO-LIST FL-OPEN FL-SEARCH)
+       (SYNONYM BOAR ANIMAL)
+       (ADJECTIVE WILD DEAD)
+       (CONTFCN RT-TH-BOAR)
+       (ACTION RT-TH-BOAR)
+>
+
+; "TH-BOAR flags:"
+; "    FL-LOCKED - Give long desc"
+
+<CONSTANT K-PACING-MSG " pacing back and forth">
+;<CONSTANT K-IMPALED-MSG " impaled on a sword">
+<CONSTANT K-SINGLE-TUSK-MSG " with a single tusk">
+<CONSTANT K-BOAR-UNDERSTAND-MSG "The boar doesn't understand you.|">
+
+<ROUTINE RT-TH-BOAR ("OPT" (CONTEXT <>) (ART <>) (CAP? <>) "AUX" P)
+       <COND
+               (<MC-CONTEXT? ,M-OBJDESC>
+                       <COND
+                               (.ART
+                                       <PRINT-ARTICLE ,TH-BOAR .ART .CAP?>
+                               )
+                       >
+                       <COND
+                               (<EQUAL? .ART <> ,K-ART-THE ,K-ART-A ,K-ART-ANY>
+                                       <COND
+                                               (.ART
+                                                       <TELL " ">
+                                               )
+                                       >
+                                       <COND
+                                               (<NOT <FSET? ,TH-BOAR ,FL-ALIVE>>
+                                                       <TELL "dead">
+                                               )
+                                               (T
+                                                       <TELL "wild">
+                                               )
+                                       >
+                                       <TELL " boar">
+                                       <COND
+                                               (<FSET? ,TH-BOAR ,FL-LOCKED>
+                                                       <COND
+                                                               (<FSET? ,TH-BOAR ,FL-ALIVE>
+                                                                       <TELL ,K-PACING-MSG>
+                                                               )
+                                                       ;       (<IN? ,TH-SWORD ,TH-BOAR>
+                                                                       <TELL ,K-IMPALED-MSG>
+                                                               )
+                                                       >
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-WINNER>
+                       <TELL ,K-BOAR-UNDERSTAND-MSG>
+               )
+       ;       (<MC-CONTEXT? ,M-CONT>
+                       <COND
+                               (<AND <VERB? TAKE>
+                                               <NOT ,NOW-PRSI>
+                                               <MC-PRSO? ,TH-SWORD>
+                                               <RT-DO-TAKE ,PRSO>
+                                       >
+                                       <TELL
+The+verb ,PRSO "pull" " free of the boar's head with a sickening \"thwuck.\"|"
+                                       >
+                                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC>>
+                                       <COND
+                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                                                       <RT-UPDATE-DESC-WINDOW>
+                                               )
+                                       >
+                                       <RTRUE>
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (,NOW-PRSI
+                       <COND
+                               (<VERB? THROW>
+                                       <COND
+                                               (<MC-PRSO? ,TH-SWORD>
+                                                       <TELL "The sword slices through the air and ">
+                                               ;       <COND
+                                                               (<MC-HERE? ,RM-NORTH-OF-CHASM>
+                                                                       <SET P 25>
+                                                               )
+                                                               (T
+                                                                       <SET P 15>
+                                                               )
+                                                       >
+                                                       <COND
+                                                       ;       (<MC-PROB? .P>
+                                                                       <RT-DEQUEUE ,RT-I-BOAR>
+                                                                       <MOVE ,PRSO ,TH-BOAR>
+                                                                       <FSET ,PRSO ,FL-NO-DESC>
+                                                                       <TELL
+"imbeds itself right between" the ,TH-BOAR "'s eyes, killing it instantly.|"
+                                                                       >
+                                                                       <RT-SCORE-MSG 0 3 7 4>
+                                                                       <FCLEAR ,TH-BOAR ,FL-ALIVE>
+                                                                       <FSET ,TH-BOAR ,FL-CONTAINER>
+                                                                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC>>
+                                                                       <COND
+                                                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                                                                                       <RT-UPDATE-DESC-WINDOW>
+                                                                               )
+                                                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                                                                       <RT-UPDATE-PICT-WINDOW>
+                                                                               )
+                                                                       >
+                                                                       <RTRUE>
+                                                               )
+                                                               (T
+                                                                       <MOVE ,PRSO ,RM-NORTH-OF-CHASM>
+                                                                       <TELL
+"the hilt smacks" the ,TH-BOAR " right between the eyes"
+                                                                       >
+                                                                       <COND
+                                                                               (<FSET? ,TH-BOAR ,FL-ALIVE> ;"RAB 4/25"
+                                                                                       <TELL ", stunning it momentarily">
+                                                                               )
+                                                                       >
+                                                                       <TELL ".">
+                                                                       <COND
+                                                                               (<AND <MC-HERE? ,RM-NORTH-OF-CHASM>
+                                                                                               <FSET? ,TH-BOAR ,FL-ALIVE> ;"RAB 4/24/89"
+                                                                                       >
+                                                                                       <SETG GL-BOAR-NUM 1>
+                                                                                       <TELL
+" " The ,TH-BOAR " staggers around for a second, but then recovers and
+prepares to charge again."
+                                                                                       >
+                                                                               )
+                                                                       >
+                                                                       <CRLF>
+                                                               )
+                                                       >
+                                               )
+                                               (<MC-PRSO? ,TH-APPLE>
+                                                       <RT-APPLE-MSG>
+                                               )
+                                               (<IDROP>
+                                                       <MOVE ,PRSO ,RM-NORTH-OF-CHASM>
+                                                       <TELL
+The+verb ,PRSO "hit" the ,TH-BOAR " and" verb ,PRSO "fall" " to the ground."
+                                                       >
+                                                       <COND
+                                                               (<FSET? ,TH-BOAR ,FL-ALIVE>
+                                                                       <TELL " " The ,TH-BOAR " looks madder than ever.">
+                                                               )
+                                                       >
+                                                       <CRLF>
+                                               )
+                                       >
+                               )
+                               (<VERB? PUT PUT-IN>
+; "Bob - This is to prevent the player from putting things on or in the boar
+       once it is dead. When it is dead, it becomes a container so the player can
+       get to the tusk. I thought that you wouldn't want the player sticking
+       things in the boar like it was a box."
+                                       <TELL The ,WINNER " can't do that." CR>
+                               )
+                       >
+               )
+               (<AND <VERB? TELL>
+                               ,P-CONT
+                       >
+                       <RFALSE>
+               )
+               (<AND <SPEAKING-VERB?>
+                               <MC-HERE? ,RM-NORTH-OF-CHASM ,RM-SOUTH-OF-CHASM>
+                       >
+                       <TELL ,K-BOAR-UNDERSTAND-MSG>
+               )
+               (<VERB? EXAMINE>
+                       <FSET ,TH-BOAR ,FL-SEEN>
+                       <COND
+                               (<FSET? ,TH-BOAR ,FL-ALIVE>
+                                       <TELL
+The ,TH-BOAR " is several hundred angry pounds of pure visciousness. He has
+only one tusk, and a gaping hole where the other one used to be." CR
+                                       >
+                               )
+                               (T
+                                       <COND
+                                               (<NOT <IN? ,TH-TUSK ,TH-BOAR>>
+                                                       <TELL "The badly mangled boar">
+                                               )
+                                               (T
+                                                       <TELL The ,TH-BOAR>
+                                               )
+                                       >
+                                       <TELL " lies on" the ,TH-GROUND>
+                               ;       <COND
+                                               (<IN? ,TH-SWORD ,TH-BOAR>
+                                                       <TELL "," ,K-IMPALED-MSG>
+                                               )
+                                       >
+                                       <TELL "." CR>
+                               )
+                       >
+               )
+               (<VERB? TAKE MOVE RAISE LOWER THROW PUT-IN PUT>
+                       <TELL The ,TH-BOAR " is too heavy to move." CR>
+               )
+               (<VERB? ATTACK CUT>
+                       <COND
+                               (<NOT <FSET? ,TH-BOAR ,FL-ALIVE>>
+                                       <TELL "It's already dead." CR>
+                               )
+                               (<NOT <MC-FORM? ,K-FORM-ARTHUR>>
+                                       <TELL
+"Your feeble efforts fail even to attract" the ,TH-BOAR "'s attention." CR
+                                       >
+                               )
+                               (<MC-PRSI? ,TH-SWORD>
+                               ;       <MOVE ,PRSI ,TH-BOAR>
+                               ;       <FSET ,PRSI ,FL-NO-DESC>
+                               ;       <SETG GL-BOAR-NUM 0>
+                               ;       <RT-DEQUEUE ,RT-I-BOAR>
+                               ;       <FCLEAR ,TH-BOAR ,FL-ALIVE>
+                               ;       <FSET ,TH-BOAR ,FL-CONTAINER>
+                                       <TELL
+"You brace yourself, hold the sword steady, and sight down the blade at the
+onrushing boar. The wild creature charges headlong into the sword and impales
+himself on the tip. His momentum carries him halfway up the blade before he
+realizes that he is dead. Unfortunately, this still doesn't prevent him
+from crashing into you with such force that his tusk rips open your flesh and
+kills you instantly.|"
+                                       >
+                                       <RT-END-OF-GAME>
+                               ;       <RT-SCORE-MSG 0 3 7 4>
+                               ;       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC>>
+                               ;       <COND
+                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                                                       <RT-UPDATE-DESC-WINDOW>
+                                               )
+                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                                       <RT-UPDATE-PICT-WINDOW>
+                                               )
+                                       >
+                               ;       <RTRUE>
+                               )
+                               (T
+                                       <TELL The ,TH-BOAR " ignores your feeble defense">
+                                       <COND
+                                               (<G? ,GL-BOAR-NUM 1>
+                                                       <TELL " and continues his charge">
+                                               )
+                                       >
+                                       <TELL "." CR>
+                               )
+                       >
+               )
+       >
+>
+
+<GLOBAL GL-BOAR-NUM 0 <> BYTE>
+
+<ROUTINE RT-I-BOAR ("OPT" (PN? <>))
+       <COND
+               (,GL-CLK-RUN
+                       <CRLF>
+               )
+       >
+       <INC GL-BOAR-NUM>
+       <COND
+               (<EQUAL? ,GL-BOAR-NUM 2>
+                       <RT-QUEUE ,RT-I-BOAR <+ ,GL-MOVES 1>>
+                       <TELL The ,TH-BOAR " starts his charge.|">
+                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC>>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                                       <RT-UPDATE-DESC-WINDOW>
+                               )
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RTRUE>
+               )
+               (T
+                       <COND
+                               (.PN?
+                                       <TELL He ,TH-BOAR>
+                               )
+                               (T
+                                       <TELL The ,TH-BOAR>
+                               )
+                       >
+                       <TELL
+" slams into you at full speed, ripping your flesh open with his tusk and
+severing an artery. You fall to the ground and discover with dismay how
+little time it takes to bleed to death.|"
+                       >
+                       <RT-END-OF-GAME>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-TUSK"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-TUSK
+       (LOC TH-BOAR)
+       (DESC "tusk")
+       (FLAGS FL-NO-DESC FL-TRY-TAKE)
+       (SYNONYM TUSK TOOTH)
+       (ADJECTIVE BOAR PURE IVORY CURLED)
+       (OWNER TH-BOAR)
+       (SCORE <LSH 1 ,K-QUEST-SHIFT>)
+       (SIZE 5)
+       (ACTION RT-TH-TUSK)
+>
+
+; "TH-TUSK flags:"
+; "    FL-BROKEN - Player has received wisdom point for getting tusk over chasm"
+
+<ROUTINE RT-TH-TUSK ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (,NOW-PRSI
+                       <RFALSE>
+               )
+               (<VERB? EXAMINE>
+                       <FSET ,TH-TUSK ,FL-SEEN>
+                       <TELL The ,TH-TUSK " is a curled tooth of pure ivory." CR>
+               )
+               (<NOT <IN? ,TH-TUSK ,TH-BOAR>>
+                       <RFALSE>
+               )
+               (<VERB? TAKE>
+                       <TELL
+"You tug on" the ,TH-TUSK ", but it is firmly attached to" the ,TH-BOAR "." CR>
+                       <RT-AUTHOR-MSG "Of course, in Alabama the Tuscaloosa.">
+               )
+               (<AND <VERB? CUT>
+                               <MC-PRSI? ,TH-SWORD>
+                       >
+                       <COND
+                               (<FSET? ,TH-BOAR ,FL-ALIVE>
+                                       <TELL "You take a wild swing at" the ,TH-TUSK ", but miss." CR>
+                               )
+                               (T
+                                       <FSET ,TH-TUSK ,FL-TAKEABLE>
+                                       <FCLEAR ,TH-TUSK ,FL-TRY-TAKE>
+                                       <COND
+                                               (<RT-DO-TAKE ,TH-TUSK>
+                                                       <TELL
+"You grasp" the ,TH-TUSK " with one hand and hack it off at the base with"
+the ,PRSI ". You are now holding" the ,TH-TUSK "." CR
+                                                       >
+                                                       <RT-SCORE-OBJ ,TH-TUSK>
+                                               )
+                                       >
+                                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC>>
+                                       <COND
+                                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                                                       <RT-UPDATE-DESC-WINDOW>
+                                               )
+                                       >
+                                       <RTRUE>
+                               )
+                       >
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-APPLETREE"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-APPLETREE
+       (LOC RM-EAST-OF-FORD)
+       (DESC "tree")
+       (FLAGS FL-NO-DESC FL-SEARCH FL-SURFACE)
+       (SYNONYM TREE BRANCH BRANCHES)
+       (ADJECTIVE APPLE TREE WASTED GNARLED)
+       (GENERIC RT-GN-TREE)
+       (ACTION RT-TH-APPLETREE)
+>
+
+<ROUTINE RT-TH-APPLETREE ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? EXAMINE>
+                       <FSET ,TH-APPLETREE ,FL-SEEN>
+                       <TELL
+"Little remains of the tree except a shriveled-up trunk and a few branches."
+                       >
+                       <COND
+                               (<IN? ,TH-APPLE ,TH-APPLETREE>
+                                       <THIS-IS-IT ,TH-APPLE>
+                                       <TELL " A withered old apple hangs from one of the branches.">
+                               )
+                       >
+                       <CRLF>
+               )
+               (<VERB? CLIMB-UP CLIMB-ON>
+                       <RT-WASTE-OF-TIME-MSG>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-APPLE"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-APPLE
+       (LOC TH-APPLETREE)
+       (DESC "apple")
+       (FLAGS FL-BURNABLE FL-TAKEABLE FL-NO-DESC)
+       (SYNONYM APPLE FOOD FRUIT)
+       (ADJECTIVE WITHERED OLD BLACK)
+       (SIZE 1)
+       (GENERIC RT-GN-FOOD)
+       (ACTION RT-TH-APPLE)
+>
+
+<ROUTINE RT-TH-APPLE ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? EAT>
+                       <TELL
+"You take a bite from the apple. As its incredibly virulent poison courses
+through your system, you begin to think that perhaps you've made a mistake.
+Your suspicions are confirmed when, seconds later, you drop dead.|"
+                       >
+                       <RT-END-OF-GAME>
+               )
+               (<VERB? EXAMINE>
+                       <FSET ,TH-APPLE ,FL-SEEN>
+                       <TELL "The apple is shriveled and black." CR>
+               )
+       >
+>
+
+<ROUTINE RT-APPLE-MSG ()
+       <TELL
+"The apple lands near the boar, who stops pacing long enough to gobble it up
+in a couple of bites. He resumes pacing - apparently unharmed - until suddenly
+he leaps several feet straight into the air, flips over on his back, and
+crashes back to the ground, dead.|"
+       >
+       <SETG GL-BOAR-NUM 0>
+       <RT-DEQUEUE ,RT-I-BOAR>
+       <REMOVE ,TH-APPLE>
+       <FCLEAR ,TH-BOAR ,FL-ALIVE>
+       <FSET ,TH-BOAR ,FL-CONTAINER>
+       <RT-SCORE-MSG 0 3 7 4>
+       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC>>
+       <COND
+               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                       <RT-UPDATE-DESC-WINDOW>
+               )
+               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                       <RT-UPDATE-PICT-WINDOW>
+               )
+       >
+       <RTRUE>
+>
+
+;"***************************************************************************"
+; "end of file"
+;"***************************************************************************"
+
diff --git a/bog.zil b/bog.zil
new file mode 100644 (file)
index 0000000..3aafcf8
--- /dev/null
+++ b/bog.zil
@@ -0,0 +1,1784 @@
+;"***************************************************************************"
+; "game : Arthur"
+; "file : BOG.ZIL"
+; "auth :   $Author:   RAB  $"
+; "date :     $Date:   15 May 1989 17:29:10  $"
+; "revs : $Revision:   1.119  $"
+; "vers : 1.0"
+;"---------------------------------------------------------------------------"
+; "Peat Bog/Cottage"
+; "Copyright (C) 1989 Infocom, Inc.  All rights reserved."
+;"***************************************************************************"
+
+;"---------------------------------------------------------------------------"
+; "RM-MOOR"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-MOOR
+       (LOC ROOMS)
+       (DESC "moor")
+       (SYNONYM MOOR)
+       (FLAGS FL-LIGHTED)
+       (NORTH TO RM-COTTAGE IF LG-COTTAGE-DOOR IS OPEN)
+       (NE TO RM-EDGE-OF-BOG)
+       (SW TO RM-FORK-IN-ROAD)
+       (IN TO RM-COTTAGE IF LG-COTTAGE-DOOR IS OPEN)
+       (UP PER RT-FLY-UP)
+       (GLOBAL LG-THATCH LG-COTTAGE-DOOR ;LG-COTTAGE-WINDOW LG-PATH RM-COTTAGE RM-BOG)
+       (ACTION RT-RM-MOOR)
+>
+
+<ROUTINE RT-RM-MOOR ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <COND
+                               (<MC-CONTEXT? ,M-LOOK>
+                                       <TELL
+"You are" standing " in the middle of a desolate moor, just outside a lonely"
+                                       >
+                               )
+                               (T
+                                       <COND
+                                               (<EQUAL? ,OHERE ,RM-COTTAGE>
+                                                       <TELL "You leave the">
+                                               )
+                                               (<EQUAL? ,OHERE ,RM-EDGE-OF-BOG>
+                                                       <TELL "You" walk " back toward the">
+                                               )
+                                               (<EQUAL? ,OHERE ,RM-FORK-IN-ROAD>
+                                                       <TELL
+"The road leads you across a desolate moor. After a while, you come to a
+lonely"
+                                                       >
+                                               )
+                                               (T
+                                                       <TELL
+"You land in the middle of the desolate moor, just outside a lonely"
+                                                       >
+                                               )
+                                       >
+                               )
+                       >
+                       <FSET ,RM-COTTAGE ,FL-SEEN>
+                       <TELL " cottage">
+                       <COND
+                               (<EQUAL? ,OHERE ,RM-COTTAGE>
+                                       <TELL ".">
+                               )
+                               (T
+                                       <TELL ", which lies to the north.">
+                               )
+                       >
+                       <FSET ,RM-BOG ,FL-SEEN>
+                       <TELL
+" The road disappears off into the moor to the southwest, and to the
+northeast lies a large peat bog."
+                       >
+                       <COND
+                               (<MC-CONTEXT? ,M-F-LOOK>
+                                       <FSET ,TH-SLEAN ,FL-SEEN>
+                                       <FSET ,TH-CRUTCH ,FL-SEEN>
+                                       <TELL
+" A slean leans against the side of the house, and a crude crutch is lying
+on the ground nearby." CR
+                                       >
+                                       <RTRUE>
+                               )
+                               (T
+                                       <CRLF>
+                                       <RFALSE>
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-MOOR>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-SLEAN"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-SLEAN
+       (LOC RM-MOOR)
+       (DESC "slean")
+       (FLAGS FL-BURNABLE FL-KNIFE FL-TAKEABLE FL-TOOL)
+       (SYNONYM SLEAN HANDLE)
+       (SIZE 5)
+       (ACTION RT-TH-SLEAN)
+>
+
+<ROUTINE RT-TH-SLEAN ("AUX" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (,NOW-PRSI
+                       <COND
+                               (<VERB? CUT DIG>
+                                       <COND
+                                               (<FSET? ,TH-SLEAN ,FL-BROKEN>
+                                                       <TELL The ,TH-SLEAN " is broken." CR>
+                                               )
+                                               (<AND   <MC-PRSO? ,TH-GROUND ,LG-PEAT <> ,ROOMS>
+                                                               <MC-HERE? ,RM-EDGE-OF-BOG>
+                                                       >
+                                                       <FSET ,TH-SLEAN ,FL-BROKEN>
+                                                       <COND
+                                                               (<RT-DO-TAKE ,TH-PEAT-BRICK>
+                                                                       <THIS-IS-IT ,TH-PEAT-BRICK>
+                                                                       <TELL
+"You cut a brick of peat from the ground. As you pry it loose, the handle of"
+the ,TH-SLEAN " snaps, rendering it useless. You now have the peat.|"
+                                                                       >
+                                                                       <RT-SCORE-OBJ ,TH-PEAT-BRICK>
+                                                               )
+                                                       >
+                                                       <RTRUE>
+                                               )
+                                               (<VERB? DIG>
+                                                       <COND
+                                                               (<MC-PRSO? <> ,ROOMS>
+                                                                       <SETG PRSO ,TH-GROUND>
+                                                               )
+                                                       >
+                                                       <TELL
+The+verb ,WINNER "try" " to dig up" the ,PRSO " with" the ,TH-SLEAN ", but"
+verb ,WINNER "make" " little progress." CR
+                                                       >
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<VERB? EXAMINE>
+                       <FSET ,TH-SLEAN ,FL-SEEN>
+                       <TELL
+The ,TH-SLEAN " looks like a cross between a hoe and a spade"
+                       >
+                       <COND
+                               (<FSET? ,TH-SLEAN ,FL-BROKEN>
+                                       <TELL ", but it is broken">
+                               )
+                       >
+                       <TELL "." CR>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "LG-PEAT"
+;"---------------------------------------------------------------------------"
+
+<OBJECT LG-PEAT
+       (LOC LOCAL-GLOBALS)
+       (DESC "peat")
+       (SYNONYM PEAT)
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-PEAT-BRICK"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-PEAT-BRICK
+       (DESC "brick of peat")
+       (FLAGS ;FL-BURNABLE FL-TAKEABLE)
+       (SYNONYM BRICK PEAT)
+       (ADJECTIVE PEAT BRICK)
+       (OWNER TH-PEAT-BRICK)
+       (SCORE <LSH 1 ,K-QUEST-SHIFT>)
+       (SIZE 5)
+       (ACTION RT-TH-PEAT-BRICK)
+>
+
+<ROUTINE RT-TH-PEAT-BRICK ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? EXAMINE>
+                       <FSET ,TH-PEAT-BRICK ,FL-SEEN>
+                       <THIS-IS-IT ,TH-PEAT-BRICK>
+                       <TELL "The brick is dry and crumbly." CR>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "RM-COTTAGE"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-COTTAGE
+       (LOC ROOMS)
+       (DESC "cottage")
+       (FLAGS FL-INDOORS FL-LIGHTED)
+       (SYNONYM COTTAGE STONE HUT HOUSE)
+       (ADJECTIVE STONE)
+       (SOUTH TO RM-MOOR IF LG-COTTAGE-DOOR IS OPEN)
+       (OUT TO RM-MOOR IF LG-COTTAGE-DOOR IS OPEN)
+       (GLOBAL LG-COTTAGE-DOOR ;LG-COTTAGE-WINDOW LG-THATCH LG-WALL RM-MOOR)
+       (GENERIC RT-GN-STONE)
+       (ACTION RT-RM-COTTAGE)
+       (THINGS
+               <> SMOKE RT-PS-SMOKE
+               <> (WINDOW WINDOWS) RT-PS-WINDOW
+       )
+>
+
+<ROUTINE RT-RM-COTTAGE ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <TELL "You ">
+                       <COND
+                               (<MC-CONTEXT? ,M-LOOK>
+                                       <TELL "are" standing " in a ">
+                               )
+                               (T
+                                       <COND
+                                               (<NOT <FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>>
+                                                       <TELL "shiver as you ">
+                                               )
+                                       >
+                                       <TELL "enter the ">
+                               )
+                       >
+                       <FSET ,TH-PALLET ,FL-SEEN>
+                       <THIS-IS-IT ,TH-PALLET>
+                       <COND
+                               (<NOT <FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>>
+                                       <TELL "cold">
+                               )
+                               (T
+                                       <TELL "warm and cozy">
+                               )
+                       >
+                       <TELL
+" one-room cottage. On a simple pallet in the corner "
+                       >
+                       <COND
+                               (<FSET? ,CH-PEASANT ,FL-ASLEEP>
+                                       <TELL "lies an unconscious">
+                               )
+                               (T
+                                       <TELL "sits a">
+                               )
+                       >
+                       <FSET ,CH-PEASANT ,FL-SEEN>
+                       <THIS-IS-IT ,CH-PEASANT>
+                       <TELL " peasant. His leg has a crude splint on it">
+                       <COND
+                               (<IN? ,TH-CRUTCH ,RM-COTTAGE>
+                                       <TELL ", and there is a crutch next to the pallet">
+                               )
+                       >
+                       <TELL ". ">
+                       <COND
+                               (<FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>
+                                       <TELL "A">
+                               )
+                               (T
+                                       <TELL "The remains of a">
+                               )
+                       >
+                       <FSET ,TH-COTTAGE-FIRE ,FL-SEEN>
+                       <THIS-IS-IT ,TH-COTTAGE-FIRE>
+                       <TELL " small fire ">
+                       <COND
+                               (<FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>
+                                       <TELL "burns">
+                               )
+                               (T
+                                       <TELL "smoulder">
+                               )
+                       >
+                       <TELL " on the stone hearth in the middle of the room.">
+                       <COND
+                               (<NOT <FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>>
+                                       <TELL " A thin wisp of smoke rises from the ashes.">
+                               )
+                       >
+                       <CRLF>
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <COND
+                               (<FSET? ,CH-PEASANT ,FL-ASLEEP>
+                                       <SETG GL-PICTURE-NUM ,K-PIC-COTTAGE>
+                               )
+                               (T
+                                       <SETG GL-PICTURE-NUM ,K-PIC-COTTAGE-AWAKE>
+                               )
+                       >
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+               ;(<MC-CONTEXT? ,M-EXIT>
+                       <COND
+                               (<AND <MC-FORM? ,K-FORM-ARTHUR>
+                                               <NOT <FSET? ,CH-PEASANT ,FL-ASLEEP>>
+                                               <NOT <FSET? ,CH-PEASANT ,FL-LOCKED>>
+                                       >
+                                       <TELL
+The ,CH-PEASANT " calls out, \"If it's the bog you're heading for sir, I beg
+you - don't go in there without getting directions. You'll drown for
+sure.\"||"
+                                       >
+                                       <RFALSE>
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-END>
+                       <COND
+                               (<AND <VERB? TRANSFORM>
+                                               <NOT <FSET? ,CH-PEASANT ,FL-ASLEEP>>
+                                       >
+                                       <COND
+                                               (<NOT <MC-FORM? ,GL-OLD-FORM>>
+                                                       <TELL CR The ,CH-PEASANT " recoils in horror">
+                                                       <COND
+                                                               (<IN? ,TH-CRUTCH ,RM-COTTAGE>
+                                                                       <TELL ", hits you with" the ,TH-CRUTCH>
+                                                               )
+                                                       >
+                                                       <TELL " and kills you." ,K-HEEDED-WARNING-MSG>
+                                                       <RT-END-OF-GAME>
+                                               )
+                                               (,GL-FORM-ABORT
+                                                       <TELL
+"|Fortunately, it all happened so quickly that" the ,CH-PEASANT " didn't
+notice." CR
+                                                       >
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? EXAMINE>
+                       <FSET ,RM-COTTAGE ,FL-SEEN>
+                       <COND
+                               (<NOT <MC-HERE? ,RM-COTTAGE>>
+                                       <TELL "It is a simple stone cottage, covered by aging thatch." CR>
+                               )
+                       >
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "LG-COTTAGE-DOOR"
+;"---------------------------------------------------------------------------"
+
+<OBJECT LG-COTTAGE-DOOR
+       (LOC LOCAL-GLOBALS)
+       (DESC "door")
+       (FLAGS FL-AUTO-ENTER FL-DOOR FL-OPENABLE)
+       (SYNONYM DOOR)
+       (ADJECTIVE COTTAGE)
+       (ACTION RT-LG-COTTAGE-DOOR)
+>
+
+<ROUTINE RT-LG-COTTAGE-DOOR ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? KNOCK>
+                       <COND
+                               (<AND <MC-HERE? ,RM-MOOR>
+                                               <NOT <FSET? ,CH-PEASANT ,FL-ASLEEP>>
+                                       >
+                                       <TELL "\"Come in.\"" CR>
+                               )
+                       >
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "LG-COTTAGE-WINDOW"
+;"---------------------------------------------------------------------------"
+
+;<OBJECT LG-COTTAGE-WINDOW
+       (LOC LOCAL-GLOBALS)
+       (DESC "window")
+       (SYNONYM WINDOW)
+       (ADJECTIVE COTTAGE)
+       (ACTION RT-LG-COTTAGE-WINDOW)
+>
+
+;<ROUTINE RT-LG-COTTAGE-WINDOW ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? LOOK-THRU>
+                       <TELL The ,WINNER " can't see much from here." CR>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "CH-PEASANT"
+;"---------------------------------------------------------------------------"
+
+<OBJECT CH-PEASANT
+       (LOC TH-PALLET)
+       (DESC "peasant")
+       (FLAGS FL-ALIVE FL-ASLEEP FL-NO-LIST FL-OPEN FL-PERSON FL-SEARCH)
+       (SYNONYM PEASANT COTTAGER STILICHO MAN LEG LEGS ARM ARMS HAND HANDS PERSON)
+       (ADJECTIVE BROKEN LEFT RIGHT)
+       (OWNER CH-PEASANT)
+       (ACTION RT-CH-PEASANT)
+>
+
+; "CH-PEASANT flags:"
+; "    FL-LOCKED - Peasant has given directions through bog."
+
+<CONSTANT K-PEASANT-GROAN-MSG "The peasant groans in pain and you quickly withdraw.|">
+
+<ROUTINE RT-CH-PEASANT ("OPT" (CONTEXT <>) (ART <>) (CAP? <>))
+       <COND
+               (<AND <VERB? HELLO GOODBYE THANK>
+                               <MC-CONTEXT? ,M-WINNER <>>
+                       >
+                       <COND
+                               (<FSET? ,CH-PEASANT ,FL-ASLEEP>
+                                       <RFALSE>
+                               )
+                               (<VERB? HELLO>
+                                       <TELL "\"Good ">
+                                       <COND
+                                               (<RT-TIME-OF-DAY? ,K-EARLY-MORNING ,K-MORNING>
+                                                       <TELL "morning">
+                                               )
+                                               (<RT-TIME-OF-DAY? ,K-AFTERNOON>
+                                                       <TELL "afternoon">
+                                               )
+                                               (<RT-TIME-OF-DAY? ,K-EVENING ,K-NIGHT>
+                                                       <TELL "evening">
+                                               )
+                                       >
+                                       <TELL ".\"" CR>
+                               )
+                               (<VERB? GOODBYE>
+                                       <TELL "\"Farewell. And thank you.\"" CR>
+                               )
+                               (<VERB? THANK>
+                                       <TELL "\"It's you deserves the thanks, sir.\"|">
+                                       <COND
+                                               (<NOT <FSET? ,CH-PLAYER ,FL-AIR>>
+                                                       <FSET ,CH-PLAYER ,FL-AIR>
+                                                       <RT-SCORE-MSG 10 0 0 0>
+                                               )
+                                       >
+                                       <RTRUE>
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-WINNER>
+                       <COND
+                               (<FSET? ,CH-PEASANT ,FL-ASLEEP>
+                                       <RT-NO-RESPONSE-MSG ,CH-PEASANT>
+                               )
+                               (<AND <VERB? TELL-ABOUT>
+                                               <MC-PRSO? ,CH-PLAYER>
+                                       >
+                                       <RFALSE>
+                               )
+                               (<VERB? WHO WHAT>
+                                       <RFALSE>
+                               )
+                               (<OR    <AND
+                                                       <VERB? GIVE>
+                                                       <MC-PRSO? ,TH-DIRECTIONS>
+                                                       <MC-PRSI? ,CH-PLAYER>
+                                               >
+                                               <AND
+                                                       <VERB? GIVE-SWP>
+                                                       <MC-PRSO? ,CH-PLAYER>
+                                                       <MC-PRSI? ,TH-DIRECTIONS>
+                                               >
+                                       >
+                                       <RT-BOG-DIRECTIONS>
+                               )
+                               (T
+                                       <TELL
+"\"I shouldn't try to do too much. My leg won't mend for some time.\"" CR
+                                       >
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (,NOW-PRSI
+                       <COND
+                               (<AND <VERB? GIVE>
+                                               <NOT <FSET? ,CH-PEASANT ,FL-ASLEEP>>
+                                       >
+                                       <COND
+                                               (<MC-PRSO? ,TH-CRUTCH>
+                                                       <RT-GIVE-CRUTCH>
+                                               )
+                                               (T
+                                                       <TELL
+"\"No thank you, sir. You've done enough for me already.\"" CR
+                                                       >
+                                               )
+                                       >
+                               )
+                               (<AND <VERB? SHOW>
+                                               <MC-PRSO? ,TH-CRUTCH>
+                                               <NOT <FSET? ,CH-PEASANT ,FL-ASLEEP>>
+                                       >
+                                       <TELL "\"Oh! You found my crutch. God bless you, sir!\"" CR>
+                               )
+                               (<AND <TOUCH-VERB?>
+                                               <FSET? ,CH-PEASANT ,FL-ASLEEP>
+                                       >
+                                       <TELL ,K-PEASANT-GROAN-MSG>
+                               )
+                       >
+               )
+               (<AND <VERB? TELL>
+                               ,P-CONT
+                       >
+               ; "Message and RFATAL if don't want peasant to become winner"
+                       <RFALSE>
+               )
+               (<AND <VERB? ASK-FOR>
+                               <NOT <FSET? ,CH-PEASANT ,FL-ASLEEP>>
+                       >
+                       <COND
+                               (<MC-PRSI? ,RM-BOG ,TH-DIRECTIONS>
+                                       <RT-BOG-DIRECTIONS>
+                               )
+                       >
+               )
+               (<AND <VERB? ASK-ABOUT>
+                               <NOT <FSET? ,CH-PEASANT ,FL-ASLEEP>>
+                       >
+                       <COND
+                               (<MC-PRSI? ,RM-BOG ,TH-DIRECTIONS>
+                                       <RT-BOG-DIRECTIONS>
+                               )
+                               (<MC-PRSI? ,TH-CRUTCH>
+                                       <TELL
+"\"I left it outside when I carried in the last peat that I had cut. But when
+the fire went out, I didn't have the strength to crawl back outside, and
+all I could do was hope that somebody would come by and help me.\"" CR
+                                       >
+                               )
+                               (<MC-PRSI? ,TH-COTTAGE-FIRE>
+                                       <TELL "\"Oh, It'll burn fine now. Thank ye, sir.\"" CR>
+                               )
+                               (<MC-PRSI? ,CH-PEASANT ,TH-SPLINT>
+                                       <TELL "\"Oh, I'll be fine now. I just need to rest.\"" CR>
+                               )
+                               (<MC-PRSI? ,CH-MERLIN>
+                                       <TELL
+"The peasant's eyes widen. \"They say he is twice as tall as a normal man,
+and older than the earth itself.\"" CR
+                                       >
+                               )
+                               (<MC-PRSI? ,CH-LOT>
+                                       <TELL
+"\"He might as well drop this foolishness about being the High King. The
+common folk won't stand for it, and if Merlin finds out, he'll change him
+into a newt.\"" CR
+                                       >
+                               )
+                               (<MC-PRSI? ,TH-SLEAN>
+                                       <TELL "\"Once they break, they're of no use to anyone.\"" CR>
+                               )
+                               (<MC-PRSI? ,TH-PEAT-BRICK>
+                                       <TELL
+"\"It's a hard living, digging peat is. But it was my father's trade - and
+his father before him.\"" CR
+                                       >
+                               )
+                               (<MC-PRSI? ,CH-PEASANT ,RM-COTTAGE ,GLOBAL-HERE>
+                                       <TELL 
+"\"I built this cottage with me own hands. It'll win no prizes for beauty,
+but it's served me well.\"" CR
+                                       >
+                               )
+                               (<MC-PRSI? ,TH-NAME>
+                                       <TELL "\"Men call me Stilicho.\"" CR>
+                               )
+                               (<MC-PRSI? ,TH-EXCALIBUR>
+                                       <TELL
+"\"I know little about it. Swords are of no use to someone who makes his
+living in a peat bog.\"" CR
+                                       >
+                               )
+                               (T
+                                       <TELL "\"I'm afraid I can't tell you anything about">
+                                       <COND
+                                               (<FSET? ,PRSI ,FL-PERSON>
+                                                       <TELL him ,PRSI>
+                                               )
+                                               (T
+                                                       <TELL " that">
+                                               )
+                                       >
+                                       <TELL ".\"" CR>
+                               )
+                       >
+               )
+               (<VERB? EXAMINE>
+                       <FSET ,CH-PEASANT ,FL-SEEN>
+                       <COND
+                               (<NOUN-USED? ,CH-PEASANT ,W?LEG ,W?LEGS>
+                                       <TELL The ,CH-PEASANT "'s leg is broken." CR>
+                               )
+                               (<FSET? ,CH-PEASANT ,FL-ASLEEP>
+                                       <TELL
+"The peasant is huddled on his pallet, with his thin cloak pulled tightly
+around him. He is scarcely breathing and his lips are blue." CR
+                                       >
+                               )
+                               (T
+                                       <TELL
+The ,CH-PEASANT " looks happy that you have saved his life." CR
+                                       >
+                               )
+                       >
+               )
+               (<OR    <VERB? RUB>
+                               <AND
+                                       <VERB-WORD? ,W?SLAP ,W?HIT>
+                                       <MC-PRSI? ,TH-HANDS>
+                               >
+                       >
+                       <COND
+                               (<FSET? ,CH-PEASANT ,FL-ASLEEP>
+                                       <TELL
+"This seems to revive him for a moment, but then he shivers and lapses back
+into unconsciousness." CR
+                                       >
+                               )
+                       >
+               )
+               (<TOUCH-VERB?>
+                       <TELL ,K-PEASANT-GROAN-MSG>
+               )
+       >
+>
+
+<ROUTINE RT-BOG-DIRECTIONS ("AUX" (X 1) (Y 5) (MAX 5) PTR)
+       <TELL
+"\"It's a right treacherous bog, it is. There's not many can find their way
+through it without help. But what you do is go northeast from the edge of the
+bog, then "
+       >
+       <SET PTR <ZREST <ZGET ,K-MAP-TBL ,K-MAP-BOG-TBL-NUM> 1>>
+       <PUTB .PTR 0 5>
+       <PUTB .PTR 1 1>
+       <SET PTR <ZREST .PTR 2>>
+       <REPEAT ((I 0) N D1 D2)
+               <COND
+                       (<FSET? ,CH-PEASANT ,FL-LOCKED>
+                               <SET D1 <ZGET ,K-BOG-DIR-TBL .I>>
+                       )
+                       (T
+                               <SET N <RANDOM 4>>
+                               <COND
+                                       (<EQUAL? .N 1>
+                                               <DEC Y>
+                                               <SET D1 ,P?NORTH>
+                                               <SET D2 ,P?SOUTH>
+                                       )
+                                       (<EQUAL? .N 2>
+                                               <DEC Y>
+                                               <INC X>
+                                               <SET D1 ,P?NE>
+                                               <SET D2 ,P?SW>
+                                       )
+                                       (<EQUAL? .N 3>
+                                               <INC X>
+                                               <SET D1 ,P?EAST>
+                                               <SET D2 ,P?WEST>
+                                       )
+                                       (<EQUAL? .N 4>
+                                               <COND
+                                                       (<IGRTR? Y .MAX>
+                                                               <SET MAX .Y>
+                                                       )
+                                               >
+                                               <INC X>
+                                               <SET D1 ,P?SE>
+                                               <SET D2 ,P?NW>
+                                       )
+                               >
+                               <ZPUT ,K-BOG-DIR-TBL .I .D1>
+                               <PUTB .PTR 0 .Y>
+                               <PUTB .PTR 1 .X>
+                               <SET PTR <ZREST .PTR 2>>
+                               <COND
+                                       (<EQUAL? .I </ ,K-BOG-NUM 2>>
+                                               <REPEAT (ID)
+                                                       <SET N <RANDOM 8>>
+                                                       <COND
+                                                               (<EQUAL? .N 1>
+                                                                       <SET ID ,P?NORTH>
+                                                               )
+                                                               (<EQUAL? .N 2>
+                                                                       <SET ID ,P?NE>
+                                                               )
+                                                               (<EQUAL? .N 3>
+                                                                       <SET ID ,P?EAST>
+                                                               )
+                                                               (<EQUAL? .N 4>
+                                                                       <SET ID ,P?SE>
+                                                               )
+                                                               (<EQUAL? .N 5>
+                                                                       <SET ID ,P?SOUTH>
+                                                               )
+                                                               (<EQUAL? .N 6>
+                                                                       <SET ID ,P?SW>
+                                                               )
+                                                               (<EQUAL? .N 7>
+                                                                       <SET ID ,P?WEST>
+                                                               )
+                                                               (<EQUAL? .N 8>
+                                                                       <SET ID ,P?NW>
+                                                               )
+                                                       >
+                                                       <COND
+                                                               (<NOT <EQUAL? .ID .D1 .D2>>
+                                                                       <SETG GL-ISLAND-DIR .ID>
+                                                                       <RETURN>
+                                                               )
+                                                       >
+                                               >
+                                       )
+                               >
+                       )
+               >
+               <COND
+                       (<G? .I 0>
+                               <TELL ", ">
+                       )
+               >
+               <COND
+                       (<EQUAL? .D1 ,P?NORTH ,P?NE>
+                               <TELL "north">
+                       )
+                       (<EQUAL? .D1 ,P?SOUTH ,P?SE>
+                               <TELL "south">
+                       )
+               >
+               <COND
+                       (<EQUAL? .D1 ,P?EAST ,P?NE ,P?SE>
+                               <TELL "east">
+                       )
+               >
+               <COND
+                       (<IGRTR? I ,K-BOG-LAST>
+                               <TELL " and east">
+                               <COND
+                                       (<EQUAL? .D1 ,P?EAST>
+                                               <TELL " again">
+                                       )
+                               >
+                               <RETURN>
+                       )
+               >
+       >
+       <TELL ".\"|">
+       <COND
+               (<NOT <FSET? ,CH-PEASANT ,FL-LOCKED>>
+                       <COND
+                               (<G? .MAX 5>
+                                       <SET Y <- .MAX 5>>
+                                       <SET PTR <ZREST <ZGET ,K-MAP-TBL ,K-MAP-BOG-TBL-NUM> 1>>
+                                       <REPEAT ((I 0))
+                                               <PUTB .PTR 0 <- <GETB .PTR 0> .Y>>
+                                               <SET PTR <ZREST .PTR 2>>
+                                               <COND
+                                                       (<IGRTR? I ,K-BOG-NUM>
+                                                               <RETURN>
+                                                       )
+                                               >
+                                       >
+                               )
+                       >
+               )
+       >
+       <FSET ,CH-PEASANT ,FL-LOCKED>
+       <RTRUE>
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-DIRECTIONS"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-DIRECTIONS
+       (LOC CH-PEASANT)
+       (DESC "directions")
+       (FLAGS FL-NO-DESC FL-TRY-TAKE)
+       (SYNONYM DIRECTIONS)
+       (ACTION RT-TH-DIRECTIONS)
+>
+
+<ROUTINE RT-TH-DIRECTIONS ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<OR    <AND
+                                       <VERB? GIVE>
+                                       <MC-PRSI? ,CH-PLAYER>
+                               >
+                               <AND
+                                       <VERB? GIVE-SWP>
+                                       <MC-PRSO? ,CH-PLAYER>
+                               >
+                               <VERB? TAKE>
+                       >
+                       <COND
+                               (<FSET? ,CH-PEASANT ,FL-ASLEEP>
+                                       <RT-NO-RESPONSE-MSG ,CH-PEASANT>
+                               )
+                               (T
+                                       <RT-BOG-DIRECTIONS>
+                               )
+                       >
+               )
+               (<NOT <EVERYWHERE-VERB? <COND (,NOW-PRSI 2) (T 1)>>>
+                       <NP-CANT-SEE>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-SPLINT"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-SPLINT
+       (LOC CH-PEASANT)
+       (DESC "splint")
+       (FLAGS FL-NO-DESC FL-TRY-TAKE)
+       (SYNONYM SPLINT)
+       (OWNER CH-PEASANT)
+       (ACTION RT-TH-SPLINT)
+>
+
+<ROUTINE RT-TH-SPLINT ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? EXAMINE>
+                       <TELL "The splint is bound securely to the cottager's leg." CR>
+               )
+               (<TOUCH-VERB?>
+                       <TELL ,K-PEASANT-GROAN-MSG>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-PALLET"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-PALLET
+       (LOC RM-COTTAGE)
+       (DESC "pallet")
+       (FLAGS FL-NO-DESC FL-SURFACE FL-SEARCH)
+       (SYNONYM PALLET BED)
+       (CAPACITY 50)
+       (ACTION RT-TH-PALLET)
+>
+
+<ROUTINE RT-TH-PALLET ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (,NOW-PRSI
+                       <COND
+                               (<VERB? PUT>
+                                       <RT-GIVE-CRUTCH>
+                               )
+                       >
+               )
+               (<VERB? EXAMINE>
+                       <FSET ,TH-PALLET ,FL-SEEN>
+                       <FSET ,CH-PEASANT ,FL-SEEN>
+                       <TELL "You see a">
+                       <COND
+                               (<FSET? ,CH-PEASANT ,FL-ASLEEP>
+                                       <TELL "n unconscious">
+                               )
+                       >
+                       <TELL " peasant on" the ,TH-PALLET "." CR>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-CRUTCH"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-CRUTCH
+       (LOC RM-MOOR)
+       (DESC "crutch")
+       (FLAGS FL-BURNABLE FL-TAKEABLE)
+       (SYNONYM CRUTCH)
+       (OWNER CH-PEASANT)
+       (SIZE 5)
+       (ACTION RT-TH-CRUTCH)
+>
+
+; "TH-CRUTCH flags:"
+; "    FL-BROKEN - Crutch is laying by peasant's pallet."
+; "    FL-LOCKED - Player has given it to the peasant at least once."
+
+<ROUTINE RT-TH-CRUTCH ("OPT" (CONTEXT <>) "AUX" V)
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+       ;       (<VERB? TAKE>
+                       <COND
+                               (<AND <IN? ,TH-CRUTCH ,RM-COTTAGE>
+                                               <FSET? ,TH-CRUTCH ,FL-BROKEN>
+                                               <SET V <ITAKE ,TH-CRUTCH>>
+                                       >
+                                       <COND
+                                               (<EQUAL? .V ,M-FATAL>
+                                                       <SETG CLOCK-WAIT T>
+                                                       <RFATAL>
+                                               )
+                                       >
+                                       <FCLEAR ,TH-CRUTCH ,FL-BROKEN>
+                                       <RT-SCORE-MSG -10 0 0 0>
+                               )
+                       >
+               )
+       >
+>
+
+<ROUTINE RT-GIVE-CRUTCH ()
+       <COND
+               (<NOT <FSET? ,CH-PEASANT ,FL-ASLEEP>>
+                       <MOVE ,TH-CRUTCH ,RM-COTTAGE>
+                       <FSET ,TH-CRUTCH ,FL-NO-DESC>
+                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-INVT>>
+                       <TELL
+"The peasant takes the crutch. \"Thank you, sir. It's not much, but it helps
+me move around.\"|"
+                       >
+                       <COND
+                               (<NOT <FSET? ,TH-CRUTCH ,FL-LOCKED>>
+                                       <FSET ,TH-CRUTCH ,FL-LOCKED>
+                                       <FSET ,TH-CRUTCH ,FL-BROKEN>
+                                       <RT-SCORE-MSG 10 0 0 0>
+                               )
+                       >
+                       <RTRUE>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-COTTAGE-FIRE"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-COTTAGE-FIRE
+       (LOC RM-COTTAGE)
+       (FLAGS FL-BURNABLE FL-CONTAINER FL-HAS-SDESC FL-NO-ALL FL-NO-DESC FL-OPEN FL-SEARCH FL-SURFACE FL-TRY-TAKE FL-VOWEL)
+       (SYNONYM FIRE HEARTH COAL COALS ASH ASHES)
+       (CAPACITY K-CAP-MAX)
+       (CONTFCN RT-TH-COTTAGE-FIRE)
+       (ACTION RT-TH-COTTAGE-FIRE)
+>
+
+<CONSTANT K-HOT-MSG "Yeeeouch! Hot hot hot....|">
+
+<ROUTINE RT-TH-COTTAGE-FIRE ("OPT" (CONTEXT <>) (ART <>) (CAP? <>))
+       <COND
+               (<MC-CONTEXT? ,M-OBJDESC>
+                       <COND
+                               (.ART
+                                       <PRINT-ARTICLE ,TH-COTTAGE-FIRE .ART .CAP?>
+                               )
+                       >
+                       <COND
+                               (<EQUAL? .ART <> ,K-ART-THE ,K-ART-A ,K-ART-ANY>
+                                       <COND
+                                               (.ART
+                                                       <TELL " ">
+                                               )
+                                       >
+                                       <COND
+                                               (<FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>
+                                                       <TELL "fire">
+                                               )
+                                               (T
+                                                       <TELL "ashes">
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-CONT>
+                       <COND
+                               (<NOT <FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>>
+                                       <RFALSE>
+                               )
+                               (<TOUCH-VERB?>
+                                       <COND
+                                               (<MC-FORM? ,K-FORM-SALAMANDER>
+                                                       <TELL
+The+verb ,WINNER "poke" " around in" the ,TH-COTTAGE-FIRE " but find nothing
+of interest." CR
+                                                       >
+                                               )
+                                               (T
+                                                       <TELL ,K-HOT-MSG>
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (,NOW-PRSI
+                       <COND
+                               (<VERB? PUT PUT-IN>
+                                       <COND
+                                               (<MC-PRSO? ,TH-PEAT-BRICK>
+                                                       <RT-LIGHT-FIRE>
+                                               )
+                                               (<AND <MC-PRSO? ,TH-WHISKY-JUG>
+                                                               <IN? ,TH-WHISKY ,TH-WHISKY-JUG>
+                                                       >
+                                                       <RT-PUT-WHISKY-IN-FIRE-MSG ,TH-COTTAGE-FIRE>
+                                               )
+                                               (<NOT <FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>>
+                                                       <RFALSE>
+                                               )
+                                               (<OR    <MC-PRSO? ,CH-PLAYER ,TH-HANDS ,TH-LEGS ,TH-HEAD ,TH-MOUTH>
+                                                               <AND
+                                                                       <FSET? ,PRSO ,FL-BODY-PART>
+                                                                       <EQUAL? <GET-OWNER ,PRSO> ,CH-PLAYER>
+                                                               >
+                                                       >
+                                                       <TELL ,K-HOT-MSG>
+                                               )
+                                               (<FSET? ,PRSO ,FL-BURNABLE>
+                                                       <REMOVE ,PRSO>
+                                                       <TELL
+"The flames leap higher, and soon" the ,PRSO " can no longer be seen.|"
+                                                       >
+                                                       <COND
+                                                               (<MC-PRSO? ,TH-CRUTCH>
+                                                                       <RT-SCORE-MSG -10 0 0 0>
+                                                               )
+                                                       >
+                                                       <RTRUE>
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<VERB? EXAMINE LOOK-IN LOOK-ON>
+                       <FSET ,TH-COTTAGE-FIRE ,FL-SEEN>
+                       <COND
+                               (<FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>
+                                       <TELL "The fire is burning brightly.">
+                               )
+                               (<NOUN-USED? ,TH-COTTAGE-FIRE ,W?FIRE>
+                                       <TELL
+"All that is left of the fire is a few coals smouldering below the ashes."
+                                       >
+                               )
+                               (T
+                                       <TELL "A few coals smoulder below the ashes.">
+                               )
+                       >
+                       <COND
+                               (<SEE-ANYTHING-IN? ,TH-COTTAGE-FIRE>
+                                       <TELL
+" " In ,TH-COTTAGE-FIRE the ,TH-COTTAGE-FIRE the+verb ,WINNER "see"
+                                       >
+                                       <PRINT-CONTENTS ,TH-COTTAGE-FIRE>
+                                       <TELL ".">
+                               )
+                       >
+                       <CRLF>
+               )
+               (<AND <VERB? LIGHT>
+                               <NOT <FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>>
+                               <MC-PRSI? ,TH-PEAT-BRICK>
+                       >
+                       <RT-LIGHT-FIRE>
+               )
+               (<VERB? ENTER CLIMB-ON>
+                       <COND
+                               (<MC-FORM? ,K-FORM-SALAMANDER>
+                                       <TELL
+"You step" in ,TH-COTTAGE-FIRE "to" the ,TH-COTTAGE-FIRE " and look around
+for a few moments. Finding nothing of interest, you step" out ,TH-COTTAGE-FIRE
+" again." CR
+                                       >
+                               )
+                               (T
+                                       <TELL ,K-HOT-MSG>
+                               )
+                       >
+               )
+               (<VERB? BLOW>
+                       <COND
+                               (<FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>
+                                       <TELL "The flames dance around a little">
+                               )
+                               (T
+                                       <TELL "The coals glow a little more brightly">
+                               )
+                       >
+                       <TELL ", but otherwise nothing happens." CR>
+               )
+               (<TOUCH-VERB?>
+                       <COND
+                               (<AND <NOT <MC-FORM? ,K-FORM-SALAMANDER>>
+                                               <OR
+                                                       <MC-PRSI? <> ,ROOMS ,CH-PLAYER ,TH-HANDS ,TH-LEGS ,TH-HEAD ,TH-MOUTH>
+                                                       <AND
+                                                               <FSET? ,PRSI ,FL-BODY-PART>
+                                                               <EQUAL? <GET-OWNER ,PRSI> ,CH-PLAYER>
+                                                       >
+                                               >
+                                       >
+                                       <TELL ,K-HOT-MSG>
+                               )
+                               (T
+                                       <TELL
+The+verb ,WINNER "poke" " around in" the ,TH-COTTAGE-FIRE " but find nothing
+of interest." CR
+                                       >
+                               )
+                       >
+               )
+               (<AND <VERB? LISTEN>
+                               <FSET? ,TH-COTTAGE-FIRE ,FL-LIGHTED>
+                       >
+                       <TELL "The fire snaps, crackles, and pops." CR>
+               )
+       >
+>
+
+<ROUTINE RT-LIGHT-FIRE ("AUX" OBJ NXT)
+;      <REMOVE ,TH-PEAT-BRICK>
+       <FSET ,TH-COTTAGE-FIRE ,FL-LIGHTED>
+       <FCLEAR ,TH-COTTAGE-FIRE ,FL-VOWEL>
+;      <FSET ,TH-COTTAGE-FIRE ,FL-CONTAINER>
+;      <FCLEAR ,TH-COTTAGE-FIRE ,FL-SURFACE>
+       <FCLEAR ,CH-PEASANT ,FL-ASLEEP>
+       <SET OBJ <FIRST? ,TH-COTTAGE-FIRE>>
+
+       ; "Remove burnable objects on hearth."
+       <REPEAT ()
+               <COND
+                       (<NOT .OBJ>
+                               <RETURN>
+                       )
+                       (T
+                               <SET NXT <NEXT? .OBJ>>
+                               <COND
+                                       (<FSET? .OBJ ,FL-BURNABLE>
+                                               <REMOVE .OBJ>
+                                       )
+                               >
+                               <SET OBJ .NXT>
+                       )
+               >
+       >
+       <MOVE ,TH-PEAT-BRICK ,TH-COTTAGE-FIRE>
+       <FSET ,TH-PEAT-BRICK ,FL-NO-LIST>
+       <TELL
+"You put the peat on the coals. It catches fire quickly, and soon the room is
+filled with warmth." CR CR
+"After a few moments, the peasant begins to stir. When he
+is fully conscious he sits up and looks from the fire to you. \"Why, God
+bless you, sir,\" he says. \"There's not many would take pity on a poor man who makes his living in a peat bog.\"" CR
+       >
+       <RT-SCORE-MSG 10 0 0 0>
+       <SETG GL-PICTURE-NUM ,K-PIC-COTTAGE-AWAKE>
+       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC ,K-UPD-INVT>>
+       <COND
+               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                       <RT-UPDATE-DESC-WINDOW>
+               )
+               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-INVT>
+                       <RT-UPDATE-INVT-WINDOW>
+               )
+               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                       <RT-UPDATE-PICT-WINDOW>
+               )
+       >
+       <RTRUE>
+>
+
+;"---------------------------------------------------------------------------"
+; "RM-EDGE-OF-BOG"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-EDGE-OF-BOG
+       (LOC ROOMS)
+       (DESC "edge of bog")
+       (FLAGS FL-LIGHTED)
+       (NE TO RM-BOG)
+       (SW TO RM-MOOR)
+       (UP PER RT-FLY-UP)
+       (GLOBAL LG-PEAT LG-PATH RM-BOG RM-COTTAGE RM-MOOR)
+       (ACTION RT-RM-EDGE-OF-BOG)
+       (THINGS <> SIGN RT-PS-SIGN)
+>
+
+<ROUTINE RT-RM-EDGE-OF-BOG ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <COND
+                               (<MC-CONTEXT? ,M-LOOK>
+                                       <TELL "You are" standing " at">
+                               )
+                               (T
+                                       <COND
+                                               (<EQUAL? ,OHERE ,RM-BOG>
+                                                       <TELL
+"You take a few steps and suddenly emerge from the mists at"
+                                                       >
+                                               )
+                                               (T
+                                                       <TELL "You come to">
+                                               )
+                                       >
+                               )
+                       >
+                       <FSET ,RM-BOG ,FL-SEEN>
+                       <TELL
+" the edge of the peat bog. The peat below your feet here is firm and dry,
+but to the northeast, the path leads into the soggy, treacherous bog. The
+house is to the southwest. There is a sign here.|"
+                       >
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-EDGE-OF-BOG>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTERED>
+                       <SETG GL-BOG-START ,HERE>
+                       <SETG GL-BOG-POS 0>
+                       <COND
+                               (<AND <EQUAL? ,OHERE ,RM-BOG>
+                                               <FSET? ,RM-BOG ,FL-BROKEN>
+                                               <FSET? ,RM-BOG ,FL-LOCKED>
+                                       >
+                                       <FCLEAR ,RM-BOG ,FL-BROKEN>
+                                       <FCLEAR ,RM-BOG ,FL-LOCKED>
+                                       <RT-SCORE-MSG 0 2 3 2>
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+       >
+>
+
+<ROUTINE RT-PS-SIGN ("OPT" (CONTEXT <>) (ART <>) (CAP? <>) "AUX" N)
+        <FCLEAR ,PSEUDO-OBJECT ,FL-PLURAL>
+        <FCLEAR ,PSEUDO-OBJECT ,FL-VOWEL>
+       <COND
+               (<MC-CONTEXT? ,M-OBJDESC>
+                       <COND
+                               (.ART
+                                       <PRINT-ARTICLE ,PSEUDO-OBJECT .ART .CAP?>
+                               )
+                       >
+                       <COND
+                               (<EQUAL? .ART <> ,K-ART-THE ,K-ART-A ,K-ART-ANY>
+                                       <COND
+                                               (.ART
+                                                       <TELL " ">
+                                               )
+                                       >
+                                       <TELL "sign">
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? EXAMINE READ>
+                <THIS-IS-IT ,PSEUDO-OBJECT>
+                       <RT-CENTER-STRING "WARNING">
+                       <RT-CENTER-STRING "BOG">
+                       <RT-CENTER-STRING "DANGER">
+                       <RT-CENTER-STRING "PERIL">
+                       <RT-CENTER-STRING "STAY OUT">
+                       <RT-CENTER-STRING "THIS MEANS YOU!">
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "RM-BOG"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-BOG
+       (LOC ROOMS)
+       (DESC "peat bog")
+       (FLAGS FL-LIGHTED FL-LOCKED)
+       (SYNONYM BOG)
+       (ADJECTIVE PEAT)
+       (NORTH PER RT-WALK-BOG)
+       (SOUTH PER RT-WALK-BOG)
+       (EAST PER RT-WALK-BOG)
+       (WEST PER RT-WALK-BOG)
+       (NE PER RT-WALK-BOG)
+       (NW PER RT-WALK-BOG)
+       (SE PER RT-WALK-BOG)
+       (SW PER RT-WALK-BOG)
+       (UP PER RT-FLY-UP)
+       (GLOBAL LG-PEAT RM-THORNEY-ISLAND)
+       (ACTION RT-RM-BOG)
+>
+
+; "RM-BOG flags:"
+; "    FL-BROKEN - Player has gotten thru bog"
+; "    FL-LOCKED - Player hasn't gotten points for getting thru bog"
+
+<ROUTINE RT-RM-BOG ("OPT" (CONTEXT <>) "AUX" L BD1 BD2)
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <COND
+                               (<EQUAL? ,P-WALK-DIR ,P?NORTH ,P?NE ,P?EAST ,P?SE>
+                                       <SET L 1>
+                               )
+                               (T
+                                       <SET L 0>
+                               )
+                       >
+                       <COND
+                               (<MC-CONTEXT? ,M-LOOK>
+                                       <COND
+                                               (<NOT <EQUAL? ,GL-BOG-POS </ ,K-BOG-NUM 2>>>
+                                                       <TELL "The fog is so thick that you can't see a thing.|">
+                                               )
+                                       >
+                               )
+                               (<OR    <AND
+                                                       <EQUAL? .L 1>
+                                                       <EQUAL? ,GL-BOG-POS 0>
+                                               >
+                                               <AND
+                                                       <EQUAL? .L 0>
+                                                       <EQUAL? ,GL-BOG-POS ,K-BOG-NUM>
+                                               >
+                                       >
+                                       <TELL
+"You enter the swirling fog and soon lose sight of the path. Any step you
+take is likely to propel you into the treacherous bog.|"
+                                       >
+                               )
+                               (T
+                                       <TELL
+"Cautiously, you feel your way through the fog. The ground below your feet
+seems firm enough, but one false step would be fatal.|"
+                                       >
+                               )
+                       >
+                       <COND
+                               (<EQUAL? ,GL-BOG-POS </ ,K-BOG-NUM 2>>
+                                       <COND
+                                               (<NOT <MC-CONTEXT? ,M-LOOK>>
+                                                       <CRLF>
+                                               )
+                                       >
+                                       <TELL "Across the bog to the ">
+                                       <COND
+                                               (<EQUAL? ,GL-ISLAND-DIR ,P?NORTH ,P?NE ,P?NW>
+                                                       <TELL "north">
+                                               )
+                                               (<EQUAL? ,GL-ISLAND-DIR ,P?SOUTH ,P?SE ,P?SW>
+                                                       <TELL "south">
+                                               )
+                                       >
+                                       <COND
+                                               (<EQUAL? ,GL-ISLAND-DIR ,P?EAST ,P?NE ,P?SE>
+                                                       <TELL "east">
+                                               )
+                                               (<EQUAL? ,GL-ISLAND-DIR ,P?WEST ,P?NW ,P?SW>
+                                                       <TELL "west">
+                                               )
+                                       >
+                                       <FSET ,RM-THORNEY-ISLAND ,FL-SEEN>
+                                       <TELL
+", you see the vague outline of an island with what appears to be a large
+thornbush on it. Unfortunately, the ground between here and there looks too
+treacherous to walk on"
+                                       >
+                                       <COND
+                                               (<NOT <MC-FORM? ,K-FORM-ARTHUR>>
+                                                       <TELL ", even for" aform>
+                                               )
+                                       >
+                                       <TELL "." CR>
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-BEG>
+                       <COND
+                               (<OR  <VERB? DROP>
+                                               <AND
+                                                       <VERB? PUT PUT-IN THROW>
+                                                       <MC-PRSI? ,RM-BOG ,TH-GROUND ,GLOBAL-HERE>
+                                               >
+                                       >
+                                       <COND
+                                               (<OR    <PRE-PUT>       ;"Should be <PRE-DROP>?"
+                                                               <NOT <IDROP>>
+                                                       >
+                                                       <RTRUE>
+                                               )
+                                               (T
+                                                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-INVT>>
+                                                       <RT-DROP-IN-BOG ,PRSO>
+                                               )
+                                       >
+                               )
+                               (<AND <EQUAL? ,RM-THORNEY-ISLAND ,PRSO ,PRSI>
+                                               <NOT <EQUAL? ,GL-BOG-POS </ ,K-BOG-NUM 2>>>
+                                       >
+                                       <NP-CANT-SEE>
+                               )
+                               (<AND <VERB? WALK>
+                                               <EQUAL? ,GL-BOG-POS </ ,K-BOG-NUM 2>>
+                                               <EQUAL? ,P-WALK-DIR ,GL-ISLAND-DIR>
+                                               <MC-FORM? ,K-FORM-OWL>
+                                       >
+                                       <RT-FLY-TO-ISLAND>
+                               )
+                               (<OR    <VERB? JUMP>
+                                               <AND
+                                                       <VERB? ENTER>
+                                                       <MC-PRSO? ,RM-BOG>
+                                               >
+                                       >
+                                       <TELL
+"In a fit of youthful exuberance, you dive headlong into the bog. Moments
+later, as you begin to drown, you decide that youthful exuberance isn't all
+it's cracked up to be.|"
+                                       >
+                                       <RT-END-OF-GAME>
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-BOG>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTERED>
+                       <FCLEAR ,RM-BOG ,FL-BROKEN>
+               ;       <SETG GL-BOG-START ,OHERE>
+               ;       <COND
+                               (<EQUAL? ,OHERE ,RM-EDGE-OF-BOG>
+                                       <SETG GL-BOG-POS 0>
+                               )
+                               (<EQUAL? ,OHERE ,RM-WEST-OF-FORD>
+                                       <SETG GL-BOG-POS ,K-BOG-NUM>
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<AND <VERB? EXAMINE>
+                               <NOT <MC-HERE? ,RM-BOG>>
+                       >
+                       <TELL "The bog looks ominous and forbidding." CR>
+               )
+       >
+>
+
+<ROUTINE RT-DROP-IN-BOG (OBJ)
+       <REMOVE .OBJ>
+       <TELL
+"With a sickening, slurping sound," the .OBJ " slowly" verb .OBJ "sink"
+" into the mire until the bog finally closes over" him .OBJ " with a faint
+\"plop.\"" CR
+       >
+>
+
+<ROUTINE RT-WRONG-BOG-MSG ()
+       <TELL "You take a few cautious ">
+       <COND
+               (<MC-FORM? ,K-FORM-OWL>
+                       <TELL "hops">
+               )
+               (T
+                       <TELL "steps">
+               )
+       >
+       <TELL
+" onto what appears to be solid ground. Suddenly, however, it begins to sink
+beneath you. The bog sucks your body under with amazing force, and as your
+head sinks below the murky surface, your last thoughts are of Merlin and your
+inability to live up to his trust." CR
+       >
+>
+
+<CONSTANT K-BOG-NUM 4>
+<CONSTANT K-BOG-LAST <- ,K-BOG-NUM 1>>
+<GLOBAL GL-BOG-POS 0 <> BYTE>
+<GLOBAL GL-ISLAND-DIR <>>
+<CONSTANT K-BOG-DIR-TBL <ITABLE ,K-BOG-NUM 0>>
+<GLOBAL GL-BOG-START <> <> BYTE>
+
+<ROUTINE RT-WALK-BOG ("OPT" (QUIET <>) "AUX" D L)
+       <COND
+               (.QUIET
+                       <COND
+                               (<AND <EQUAL? ,GL-BOG-POS </ ,K-BOG-NUM 2>>
+                                               <EQUAL? ,P-WALK-DIR ,GL-ISLAND-DIR>
+                                       >
+                                       <RETURN ,RM-THORNEY-ISLAND>
+                               )
+                       >
+               )
+               (T
+                       <COND
+                               (<EQUAL? ,P-WALK-DIR ,P?NORTH ,P?NE ,P?EAST ,P?SE>
+                                       <SET L 1>
+                               )
+                               (T
+                                       <SET L 0>
+                                       <DEC GL-BOG-POS>
+                               )
+                       >
+                       <COND
+                               (<NOT <FSET? ,CH-PEASANT ,FL-LOCKED>>
+                                       <RT-WRONG-BOG-MSG>
+                                       <RT-END-OF-GAME>
+                               )
+                               (<AND <EQUAL? .L 0>
+                                               <L? ,GL-BOG-POS 0>
+                                       >
+                                       <COND
+                                               (<EQUAL? ,P-WALK-DIR ,P?SW>
+                                                       <COND
+                                                               (<EQUAL? ,GL-BOG-START ,RM-WEST-OF-FORD>
+                                                                       <FSET ,RM-BOG ,FL-BROKEN>
+                                                               )
+                                                       >
+                                                       <SETG GL-BOG-POS 0>
+                                                       <RETURN ,RM-EDGE-OF-BOG>
+                                               )
+                                               (T
+                                                       <RT-WRONG-BOG-MSG>
+                                                       <RT-END-OF-GAME>
+                                               )
+                                       >
+                               )
+                               (<AND <EQUAL? .L 1>
+                                               <G? ,GL-BOG-POS ,K-BOG-LAST>
+                                       >
+                                       <COND
+                                               (<EQUAL? ,P-WALK-DIR ,P?EAST>
+                                                       <COND
+                                                               (<EQUAL? ,GL-BOG-START ,RM-EDGE-OF-BOG>
+                                                                       <FSET ,RM-BOG ,FL-BROKEN>
+                                                               )
+                                                       >
+                                                       <SETG GL-BOG-POS ,K-BOG-NUM>
+                                                       <RETURN ,RM-WEST-OF-FORD>
+                                               )
+                                               (T
+                                                       <RT-WRONG-BOG-MSG>
+                                                       <RT-END-OF-GAME>
+                                               )
+                                       >
+                               )
+                               (T
+                                       <SET D <ZGET ,K-BOG-DIR-TBL ,GL-BOG-POS>>
+                                       <COND
+                                               (<EQUAL? .L 0>
+                                                       <COND
+                                                               (<EQUAL? .D ,P?NORTH>
+                                                                       <SET D ,P?SOUTH>
+                                                               )
+                                                               (<EQUAL? .D ,P?NE>
+                                                                       <SET D ,P?SW>
+                                                               )
+                                                               (<EQUAL? .D ,P?EAST>
+                                                                       <SET D ,P?WEST>
+                                                               )
+                                                               (<EQUAL? .D ,P?SE>
+                                                                       <SET D ,P?NW>
+                                                               )
+                                                       >
+                                               )
+                                       >
+                                       <COND
+                                               (<NOT <EQUAL? ,P-WALK-DIR .D>>
+                                                       <RT-WRONG-BOG-MSG>
+                                                       <RT-END-OF-GAME>
+                                               )
+                                       >
+                               )
+                       >
+                       <COND
+                               (<NOT <ZERO? .L>>
+                                       <INC GL-BOG-POS>
+                               )
+                       >
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-MAP>
+                                       <RT-UPDATE-MAP-WINDOW>
+                               )
+                       >
+                       <RT-RM-BOG ,M-V-LOOK>
+                       <SETG OHERE ,HERE>
+                       <RFALSE>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "RM-ABOVE-MOOR"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-ABOVE-MOOR
+       (LOC ROOMS)
+       (DESC "above moor")
+       (FLAGS FL-AIR FL-LIGHTED)
+       (DOWN PER RT-FLY-DOWN)
+       (EAST TO RM-ABOVE-BOG)
+       (WEST TO RM-ABOVE-EDGE-OF-WOODS)
+       (SOUTH TO RM-ABOVE-TOWN)
+       (NW TO RM-ABOVE-FOREST)
+       (SW TO RM-ABOVE-MEADOW)
+       (SE TO RM-ABOVE-CASTLE)
+       (UP SORRY K-NO-HIGHER-MSG)
+       (GLOBAL RM-MOOR RM-COTTAGE)
+       (ACTION RT-RM-ABOVE-MOOR)
+>
+
+<ROUTINE RT-RM-ABOVE-MOOR ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <FSET ,RM-BOG ,FL-SEEN>
+                       <FSET ,LG-CASTLE ,FL-SEEN>
+                       <FSET ,LG-TOWN ,FL-SEEN>
+                       <TELL
+"You are hovering over the moor. To the west lies the edge of the enchanted
+forest, and to the northwest is the forest proper. Below you to the east is
+the thick cloud of fog, and south of that you can see the castle. The roofs
+of the town lie to the south, and the meadow outside the town lies to the
+southwest.|"
+                       >
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-AIR-SCENE>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "RM-ABOVE-BOG"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-ABOVE-BOG
+       (LOC ROOMS)
+       (DESC "above bog")
+       (FLAGS FL-AIR FL-LIGHTED)
+       (DOWN PER RT-FLY-DOWN)
+       (EAST TO RM-ABOVE-FORD)
+       (WEST TO RM-ABOVE-MOOR)
+       (SOUTH TO RM-ABOVE-CASTLE)
+       (SW TO RM-ABOVE-TOWN)
+       (UP SORRY K-NO-HIGHER-MSG)
+       (GLOBAL RM-BOG RM-EDGE-OF-BOG RM-THORNEY-ISLAND)
+       (ACTION RT-RM-ABOVE-BOG)
+>
+
+<ROUTINE RT-RM-ABOVE-BOG ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <FSET ,RM-BOG ,FL-SEEN>
+                       <FSET ,RM-THORNEY-ISLAND ,FL-SEEN>
+                       <FSET ,LG-TOWN ,FL-SEEN>
+                       <FSET ,RM-BOG ,FL-SEEN>
+                       <TELL
+"You are hovering over a thick patch of fog. Below, you can make out the
+vague outline of an island with what looks like a large bush or tree on it.
+The skies are clearer to the west and southwest, where you see the moor
+and roofs of the town. The castle lies below you to the south, and to the
+east you can see a road emerge from the fog and come to a ford in the
+river.|"
+                       >
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-AIR-SCENE>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+       >
+>
+
+;"***************************************************************************"
+; "end of file"
+;"***************************************************************************"
+
diff --git a/castle.zil b/castle.zil
new file mode 100644 (file)
index 0000000..b10e946
--- /dev/null
@@ -0,0 +1,1833 @@
+;"***************************************************************************"
+; "game : Arthur"
+; "file : CASTLE.ZIL"
+; "auth :   $Author:   DEB  $"
+; "date :     $Date:   15 May 1989 19:41:50  $"
+; "revs : $Revision:   1.116  $"
+; "vers : 1.0"
+;"---------------------------------------------------------------------------"
+; "Castle Puzzle"
+; "Copyright (C) 1989 Infocom, Inc.  All rights reserved."
+;"***************************************************************************"
+
+;"---------------------------------------------------------------------------"
+; "RM-PASSAGE-1"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-PASSAGE-1
+       (LOC ROOMS)
+       (DESC "dark passage")
+       (FLAGS FL-INDOORS FL-LIGHTED)
+       (SYNONYM PASSAGE PASSAGEWAY)
+       (ADJECTIVE DARK SECRET)
+       (WEST TO RM-SMALL-CHAMBER)
+       (NORTH TO RM-PASSAGE-2)
+       (SOUTH TO RM-PASSAGE-3)
+       (OUT TO RM-SMALL-CHAMBER)
+       (UP PER RT-EXIT-PASSAGE-1)
+       (SCORE <ORB <LSH 2 ,K-WISD-SHIFT> <LSH 1 ,K-QUEST-SHIFT>>)
+       (GLOBAL LG-BADGER-TAPESTRY LG-WALL RM-SMALL-CHAMBER)
+       (ACTION RT-RM-PASSAGE-1)
+>
+
+<ROUTINE RT-RM-PASSAGE-1 ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <FSET ,LG-BADGER-TAPESTRY ,FL-SEEN>
+                       <TELL
+"You are in a dark underground passageway whose walls have been carved out of
+solid rock. You peer into the darkness and "
+                       >
+                       <COND
+                               (<MC-CONTEXT? ,M-F-LOOK>
+                                       <TELL "discover">
+                               )
+                               (T
+                                       <TELL "see">
+                               )
+                       >
+                       <TELL
+" a secret passage leading upward to both the north and south. To the west is
+the back of a tapestry.|"
+                       >
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-PASSAGE>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<NOT <EVERYWHERE-VERB? <COND (,NOW-PRSI 2) (T 1)>>>
+                       <COND
+                               (<FSET? ,LG-BADGER-TAPESTRY ,FL-LOCKED>
+                                       <NP-CANT-SEE>
+                               )
+                       >
+               )
+       >
+>
+
+<ROUTINE RT-EXIT-PASSAGE-1 ("OPT" (QUIET <>))
+       <COND
+               (<NOT .QUIET>
+                       <TELL "[Which way, north or south?]|">
+               )
+       >
+       <RFALSE>
+>
+
+;"---------------------------------------------------------------------------"
+; "RM-PASSAGE-2"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-PASSAGE-2
+       (LOC ROOMS)
+       (DESC "dark passage")
+       (FLAGS FL-INDOORS FL-LIGHTED)
+       (SYNONYM PASSAGE)
+       (ADJECTIVE DARK)
+       (NORTH TO RM-BEHIND-THRONE)
+       (SOUTH TO RM-PASSAGE-1)
+       (UP TO RM-BEHIND-THRONE)
+       (DOWN TO RM-PASSAGE-1)
+       (GLOBAL LG-WALL)
+       (ACTION RT-RM-PASSAGE-2)
+>
+
+<ROUTINE RT-RM-PASSAGE-2 ("OPT" (CONTEXT <>))
+   <COND
+      (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+         <TELL "You are in a dark passage that continues ">
+                       <COND
+                               (<EQUAL? ,OHERE ,RM-PASSAGE-1>
+                                       <TELL "up to the north and back down behind you to the south.|">
+                               )
+                               (T
+                                       <TELL "down to the south and back up behind you to the north.|">
+                               )
+                       >
+         <RFALSE>
+      )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-PASSAGE>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+      (.CONTEXT
+         <RFALSE>
+      )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "RM-PASSAGE-3"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-PASSAGE-3
+       (LOC ROOMS)
+       (DESC "dark passage")
+       (FLAGS FL-INDOORS FL-LIGHTED)
+       (SYNONYM PASSAGE)
+       (ADJECTIVE DARK)
+       (NORTH TO RM-PASSAGE-1)
+       (SOUTH TO RM-BEHIND-FIRE)
+       (UP TO RM-BEHIND-FIRE)
+       (DOWN TO RM-PASSAGE-1)
+       (GLOBAL LG-WALL)
+       (ACTION RT-RM-PASSAGE-3)
+>
+
+<ROUTINE RT-RM-PASSAGE-3 ("OPT" (CONTEXT <>))
+   <COND
+      (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+         <TELL "You are in a dark passage that continues ">
+                       <COND
+                               (<EQUAL? ,OHERE ,RM-PASSAGE-1>
+                                       <TELL
+"up to the south and back down behind you to the north.|"
+                                       >
+                               )
+                               (T
+                                       <TELL
+"down to the north and back up behind you to the south.|"
+                                       >
+                               )
+                       >
+         <RFALSE>
+      )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-PASSAGE>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <RFALSE>
+               )
+      (.CONTEXT
+         <RFALSE>
+      )
+   >
+>
+
+;"---------------------------------------------------------------------------"
+; "RM-BEHIND-FIRE"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-BEHIND-FIRE
+   (LOC ROOMS)
+   (DESC "end of passage")
+   (FLAGS FL-INDOORS FL-LIGHTED)
+       (SYNONYM PASSAGE)
+       (ADJECTIVE DARK)
+   (WEST PER RT-THRU-FIRE)
+   (OUT PER RT-THRU-FIRE)
+   (NORTH TO RM-PASSAGE-3)
+   (DOWN TO RM-PASSAGE-3)
+       (ADJACENT <TABLE (LENGTH BYTE PURE) RM-CAS-KITCHEN T>)
+       (GLOBAL LG-WALL RM-CAS-KITCHEN RM-PASSAGE-3)
+   (ACTION RT-RM-BEHIND-FIRE)
+>
+
+<ROUTINE RT-RM-BEHIND-FIRE ("OPT" (CONTEXT <>))
+   <COND
+      (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <COND
+                               (<MC-CONTEXT? ,M-LOOK>
+                                       <TELL
+"You are in a small, cramped room that is solid on three sides."
+                                       >
+                               )
+                               (T
+                                       <COND
+                                               (<EQUAL? ,OHERE ,RM-CAS-KITCHEN>
+                                                       <TELL "You" walk " back through the fire">
+                                                       <COND
+                                                               (<NOT <FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>>
+                                                                       <TELL "place">
+                                                               )
+                                                       >
+                                                       <TELL " to the small room.">
+                                               )
+                                               (T
+                                                       <TELL
+"The passage ends in a small, cramped room that is solid on three sides."
+                                                       >
+                                               )
+                                       >
+                               )
+                       >
+                       <COND
+                               (<FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>
+                                       <FSET ,TH-CASTLE-FIRE ,FL-SEEN>
+                                       <TELL
+" The fourth side is a blazing wall of fire whose bright flames leap high
+into the air.">
+                               )
+                       >
+                       <TELL " A dark passage leads down to the north. The fire">
+                       <COND
+                               (<NOT <FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>>
+                                       <TELL "place">
+                               )
+                       >
+                       <TELL " is to the west.|">
+         <RFALSE>
+      )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <SETG GL-PICTURE-NUM ,K-PIC-PASSAGE>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <MOVE ,TH-CASTLE-FIRE ,RM-BEHIND-FIRE>
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-BEG>
+                       <COND
+                               (<AND <NOT ,GL-PUPPY>
+                                               <IN? ,CH-PRISONER ,RM-BEHIND-FIRE>
+                                       >
+                                       <RT-SET-PUPPY ,CH-PRISONER>
+                               )
+                       >
+               )
+      (.CONTEXT
+         <RFALSE>
+      )
+   >
+>
+
+<ROUTINE RT-THRU-FIRE ("OPT" (QUIET <>))
+       <COND
+               (.QUIET
+                       <COND
+                               (<MC-HERE? ,RM-CAS-KITCHEN>
+                                       <RETURN ,RM-BEHIND-FIRE>
+                               )
+                               (<MC-HERE? ,RM-BEHIND-FIRE>
+                                       <RETURN ,RM-CAS-KITCHEN>
+                               )
+                       >
+               )
+               (<OR    <MC-FORM? ,K-FORM-SALAMANDER>
+                               <NOT <FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>>
+                       >
+                       <COND
+                               (<FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>
+                                       <RT-CLEAR-PUPPY>
+                               )
+                       >
+                       <COND
+                               (<MC-HERE? ,RM-CAS-KITCHEN>
+                                       <RETURN ,RM-BEHIND-FIRE>
+                               )
+                               (<MC-HERE? ,RM-BEHIND-FIRE>
+                                       <RETURN ,RM-CAS-KITCHEN>
+                               )
+                       >
+               )
+               (T
+                       <TELL The ,WINNER " would surely perish in the flames.|">
+               ;       <COND
+                               (<NOT <EQUAL? ,WINNER ,CH-PLAYER>>
+                                       <RT-AUTHOR-ON>
+                                       <TELL The+verb ,WINNER "are" "n't as stupid as you look.">
+                                       <RT-AUTHOR-OFF>
+                               )
+                       >
+                       <RFALSE>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-CASTLE-FIRE"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-CASTLE-FIRE
+       (LOC LOCAL-GLOBALS)
+       (FLAGS FL-BURNABLE FL-CONTAINER FL-HAS-SDESC FL-LIGHTED FL-NO-DESC FL-OPEN FL-SEARCH)
+       (SYNONYM FIRE FLAMES FIREPLACE PLACE)
+       (ADJECTIVE FIRE)
+       (CAPACITY K-CAP-MAX)
+       (CONTFCN RT-TH-CASTLE-FIRE)
+       (ACTION RT-TH-CASTLE-FIRE)
+>
+
+; "TH-CASTLE-FIRE flags:"
+; "    FL-LOCKED - Things in fire are cooling off"
+
+<ROUTINE RT-TH-CASTLE-FIRE ("OPT" (CONTEXT <>) (ART <>) (CAP? <>))
+       <COND
+               (<MC-CONTEXT? ,M-OBJDESC>
+                       <COND
+                               (.ART
+                                       <PRINT-ARTICLE ,TH-CASTLE-FIRE .ART .CAP?>
+                               )
+                       >
+                       <COND
+                               (<EQUAL? .ART <> ,K-ART-THE ,K-ART-A ,K-ART-ANY>
+                                       <COND
+                                               (.ART
+                                                       <TELL " ">
+                                               )
+                                       >
+                                       <TELL "fire">
+                                       <COND
+                                               (<NOT <FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>>
+                                                       <TELL "place">
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-CONT>
+                       <COND
+                               (<TOUCH-VERB?>
+                                       <COND
+                                               (<MC-FORM? ,K-FORM-SALAMANDER>
+                                                       <TELL
+The+verb ,WINNER "poke" " around in" the ,TH-CASTLE-FIRE " but find nothing
+of interest." CR
+                                                       >
+                                               )
+                                               (<FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>
+                                                       <TELL ,K-HOT-MSG>
+                                               )
+                                               (<OR    <AND ,NOW-PRSI <FSET? ,PRSI ,FL-AIR>>
+                                                               <AND <NOT ,NOW-PRSI> <FSET? ,PRSO ,FL-AIR>>
+                                                       >
+                                                       <TELL ,K-HOT-MSG>
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (,NOW-PRSI
+                       <COND
+                               (<VERB? EMPTY>
+                                       <COND
+                                               (<MC-PRSO? ,TH-BARREL ,TH-BARREL-WATER>
+                                                       <COND
+                                                               (<IN? ,TH-BARREL-WATER ,TH-BARREL>
+                                                                       <COND
+                                                                               (<MC-FORM? ,K-FORM-ARTHUR>
+                                                                                       <RT-PUT-OUT-FIRE-MSG>
+                                                                               )
+                                                                       >
+                                                               )
+                                                       >
+                                               )
+                                       >
+                               )
+                               (<VERB? PUT PUT-IN>
+                                       <COND
+                                               (<NOT <FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>>
+                                                       <RFALSE>
+                                               )
+                                               (<OR    <MC-PRSO? ,CH-PLAYER ,TH-HANDS ,TH-LEGS ,TH-HEAD ,TH-MOUTH>
+                                                               <AND
+                                                                       <FSET? ,PRSI ,FL-BODY-PART>
+                                                                       <EQUAL? <GET-OWNER ,PRSI> ,CH-PLAYER>
+                                                               >
+                                                       >
+                                                       <TELL ,K-HOT-MSG>
+                                               )
+                                               (<AND <MC-PRSO? ,TH-WHISKY-JUG>
+                                                               <IN? ,TH-WHISKY ,TH-WHISKY-JUG>
+                                                       >
+                                                       <RT-PUT-WHISKY-IN-FIRE-MSG ,TH-CASTLE-FIRE>
+                                               )
+                                               (<FSET? ,PRSO ,FL-BURNABLE>
+                                                       <REMOVE ,PRSO>
+                                                       <TELL
+"The flames leap higher, and soon" the ,PRSO " can no longer be seen." CR
+                                                       >
+                                               )
+                                       >
+                               )
+                               (<VERB? PUT-THRU>
+                                       <COND
+                                               (<MC-HERE? ,RM-BEHIND-FIRE>
+                                                       <COND
+                                                               (<IDROP>
+                                                                       <RT-THROW-INTO-ROOM-MSG ,PRSO ,RM-CAS-KITCHEN>
+                                                               )
+                                                       >
+                                               )
+                                               (<MC-HERE? ,RM-CAS-KITCHEN>
+                                                       <COND
+                                                               (<IDROP>
+                                                                       <RT-THROW-INTO-ROOM-MSG ,PRSO ,RM-BEHIND-FIRE>
+                                                               )
+                                                       >
+                                               )
+                                               (T
+                                                       <NOT-HERE ,PRSI>        ; "not close enough"
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<VERB? ENTER>
+                       <COND
+                               (<MC-HERE? ,RM-BEHIND-FIRE>
+                                       <RT-DO-WALK ,P?WEST>
+                               )
+                               (<MC-HERE? ,RM-CAS-KITCHEN>
+                                       <RT-DO-WALK ,P?EAST>
+                               )
+                       >
+               )
+               (<VERB? CLIMB-ON>
+                       <COND
+                               (<MC-FORM? ,K-FORM-SALAMANDER>
+                                       <TELL
+"You step" in ,TH-CASTLE-FIRE "to" the ,TH-CASTLE-FIRE " and look around
+for a few moments. Finding nothing of interest, you step" out ,TH-CASTLE-FIRE
+" again." CR
+                                       >
+                               )
+                               (T
+                                       <TELL ,K-HOT-MSG>
+                               )
+                       >
+               )
+               (<VERB? EXTINGUISH>
+                       <COND
+                               (<MC-PRSI? ,TH-BARREL ,TH-BARREL-WATER>
+                                       <COND
+                                               (<IN? ,TH-BARREL-WATER ,TH-BARREL>
+                                                       <COND
+                                                               (<MC-FORM? ,K-FORM-ARTHUR>
+                                                                       <RT-PUT-OUT-FIRE-MSG>
+                                                               )
+                                                               (T
+                                                                       <RT-ANIMAL-CANT-MSG "put out">
+                                                               )
+                                                       >
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<OR    <VERB? EXAMINE>
+                       ;       <AND
+                                       <VERB? LOOK-IN LOOK-ON>
+                                       <NOT <FIRST? ,TH-CASTLE-FIRE>>
+                               >
+                       >
+                       <FSET ,TH-CASTLE-FIRE ,FL-SEEN>
+                       <COND
+                               (<FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>
+                                       <TELL "It's a roaring fire that gives off intense heat." CR>
+                               )
+                               (T
+                                       <TELL "The fire has gone out." CR>
+                               )
+                       >
+               )
+               (<VERB? LOOK-THRU>
+                       <TELL The ,WINNER " can't see much from here." CR>
+               )
+               (<VERB? LISTEN>
+                       <COND
+                               (<FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>
+                                       <TELL "The fire roars like a furnace." CR>
+                               )
+                       >
+               )
+               (<TOUCH-VERB?>
+                       <COND
+                               (<FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>
+                                       <COND
+                                               (<AND <NOT <MC-FORM? ,K-FORM-SALAMANDER>>
+                                                               <OR
+                                                                       <MC-PRSI? <> ,ROOMS ,CH-PLAYER ,TH-HANDS ,TH-LEGS ,TH-HEAD ,TH-MOUTH>
+                                                                       <AND
+                                                                               <FSET? ,PRSI ,FL-BODY-PART>
+                                                                               <EQUAL? <GET-OWNER ,PRSI> ,CH-PLAYER>
+                                                                       >
+                                                               >
+                                                       >
+                                                       <TELL ,K-HOT-MSG>
+                                               )
+                                               (T
+                                                       <TELL
+The+verb ,WINNER "poke" " around in" the ,TH-CASTLE-FIRE " but find nothing
+of interest." CR
+                                                       >
+                                               )
+                                       >
+                               )
+                       >
+               )
+       >
+>
+
+<ROUTINE RT-PUT-OUT-FIRE-MSG ("AUX" OBJ)
+       <RT-QUEUE ,RT-I-COOL-FIRE <+ ,GL-MOVES 60>>
+       <FCLEAR ,TH-CASTLE-FIRE ,FL-LIGHTED>
+;      <FSET ,TH-CASTLE-FIRE ,FL-LOCKED>
+;      <FSET ,TH-CASTLE-FIRE ,FL-INVISIBLE>
+       <REMOVE ,TH-BARREL-WATER>
+       <RT-MOVE-ALL ,TH-BARREL ,HERE>
+       <SET OBJ <FIRST? ,TH-CASTLE-FIRE>>
+       <REPEAT ()
+               <COND
+                       (<NOT .OBJ>
+                               <RETURN>
+                       )
+                       (T
+                               <FSET .OBJ ,FL-AIR>
+                               <SET OBJ <NEXT? .OBJ>>
+                       )
+               >
+       >
+       <TELL
+"You strain against the barrel. It teeters for a moment, but then finally
+crashes over on its side, sending a flood of water directly onto the blaze.
+The roar of the fire disappears in a loud hiss, and a huge cloud of steam
+pours out of the fireplace. When the steam clears, you see that the fire has
+gone out."
+       >
+       <SETG GL-PICTURE-NUM ,K-PIC-CAS-FIREPLACE>
+       <COND
+               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                       <RT-UPDATE-PICT-WINDOW>
+               )
+       >
+       <COND
+               (<IN? ,CH-PRISONER ,RM-BEHIND-FIRE>
+                       <RT-SET-PUPPY ,CH-PRISONER>
+                       <MOVE ,CH-PRISONER ,HERE>
+                       <THIS-IS-IT ,CH-PRISONER>
+                       <TELL " The prisoner steps through to join you in the kitchen.">
+               )
+       >
+       <CRLF>
+       <RT-SCORE-MSG 0 2 0 1>
+>
+
+<ROUTINE RT-I-COOL-FIRE ("AUX" OBJ)
+;      <FCLEAR ,TH-CASTLE-FIRE ,FL-LOCKED>
+       <SET OBJ <FIRST? ,TH-CASTLE-FIRE>>
+       <REPEAT ()
+               <COND
+                       (<NOT .OBJ>
+                               <RETURN>
+                       )
+                       (T
+                               <FCLEAR .OBJ ,FL-AIR>
+                               <SET OBJ <NEXT? .OBJ>>
+                       )
+               >
+       >
+       <RFALSE>
+>
+
+;"---------------------------------------------------------------------------"
+; "RM-CAS-KITCHEN"
+;"---------------------------------------------------------------------------"
+
+<ROOM RM-CAS-KITCHEN
+   (LOC ROOMS)
+   (DESC "castle kitchen")
+   (FLAGS FL-INDOORS FL-LIGHTED)
+   (SYNONYM KITCHEN)
+   (ADJECTIVE CASTLE)
+   (EAST PER RT-THRU-FIRE)
+   (IN PER RT-THRU-FIRE)
+   (NW TO RM-PARADE-AREA IF LG-KITCHEN-DOOR IS OPEN)
+   (OUT TO RM-PARADE-AREA IF LG-KITCHEN-DOOR IS OPEN)
+       (ADJACENT <TABLE (LENGTH BYTE PURE) RM-BEHIND-FIRE T>)
+   (GLOBAL LG-KITCHEN-DOOR LG-WALL)
+   (ACTION RT-RM-CAS-KITCHEN)
+>
+
+<ROUTINE RT-RM-CAS-KITCHEN ("OPT" (CONTEXT <>))
+   <COND
+      (<MC-CONTEXT? ,M-F-LOOK ,M-V-LOOK ,M-LOOK>
+                       <TELL "You">
+                       <COND
+                               (<MC-CONTEXT? ,M-LOOK>
+                                       <COND
+                                               (<IN? ,CH-PLAYER ,TH-BARREL>
+                                                       <TELL " are in" a ,TH-BARREL ", in">
+                                               )
+                                               (T
+                                                       <TELL " are" standing " in">
+                                               )
+                                       >
+                               )
+                               (T
+                                       <COND
+                                               (<AND <EQUAL? ,OHERE ,RM-BEHIND-FIRE>
+                                                               <FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>
+                                                       >
+                                                       <TELL walk " through the flames unharmed and are now in">
+                                               )
+                                               (T
+                                                       <TELL " enter">
+                                               )
+                                       >
+                               )
+                       >
+                       <FSET ,LG-KITCHEN-DOOR ,FL-SEEN>
+         <TELL
+" the castle's kitchen. It is a huge stone room with a cavernous fireplace
+along the east wall. There is a door in the northwest corner of the room."
+                       >
+                       <COND
+                               (<NOT <IN? ,CH-PLAYER ,TH-BARREL>>
+                                       <FSET ,TH-BARREL ,FL-SEEN>
+                                       <TELL
+" On the floor next to a nearby table you see a barrel."
+                                       >
+                               )
+                       >
+                       <CRLF>
+                       <RFALSE>
+      )
+               (<MC-CONTEXT? ,M-ENTER>
+                       <COND
+                               (<FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>
+                                       <SETG GL-PICTURE-NUM ,K-PIC-CAS-KITCHEN>
+                               )
+                               (T
+                                       <SETG GL-PICTURE-NUM ,K-PIC-CAS-FIREPLACE>
+                               )
+                       >
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-PICT>
+                                       <RT-UPDATE-PICT-WINDOW>
+                               )
+                       >
+                       <MOVE ,TH-CASTLE-FIRE ,RM-CAS-KITCHEN>
+                       <RFALSE>
+               )
+               (<MC-CONTEXT? ,M-ENTERED>
+                       <COND
+                               (<NOT <FSET? ,RM-CAS-KITCHEN ,FL-BROKEN>>
+                                       <COND
+                                               (<EQUAL? ,OHERE ,RM-BEHIND-FIRE>
+                                                       <COND
+                                                               (<FSET? ,TH-CASTLE-FIRE ,FL-LIGHTED>
+                                                                       <FSET ,RM-CAS-KITCHEN ,FL-BROKEN>
+                                                                       <RT-SCORE-MSG 0 3 3 1>
+                                                               )
+                                                       >
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<MC-CONTEXT? ,M-EXIT>
+                       <COND
+                               (<AND <EQUAL? ,P-WALK-DIR ,P?NW ,P?OUT>
+                                               <EQUAL? ,GL-PUPPY ,CH-PRISONER>
+                                               <NOT <IN? ,TH-HELMET ,CH-PRISONER>>
+                                       ;       <FSET? ,LG-KITCHEN-DOOR ,FL-OPEN>
+                                       >
+                                       <TELL
+"Before you step through the door, the smith taps you on the shoulder and
+says, \"I can't go out there. Someone might recognize me.\"" CR
+                                       >
+                               )
+                       >
+               )
+      (.CONTEXT
+         <RFALSE>
+      )
+               (,NOW-PRSI
+                       <COND
+                               (<OR    <VERB? THROW>
+                                               <AND
+                                                       <VERB? PUT PUT-IN>
+                                                       <VERB-WORD? ,W?THROW ,W?TOSS ,W?HURL ,W?CHUCK ,W?FLING ,W?PITCH ,W?HEAVE>
+                                               >
+                                       >
+                                       <COND
+                                               (<MC-HERE? ,RM-BEHIND-FIRE>
+                                                       <COND
+                                                               (<IDROP>
+                                                                       <RT-THROW-INTO-ROOM-MSG ,PRSO ,RM-CAS-KITCHEN>
+                                                               )
+                                                               (T
+                                                                       <RTRUE>
+                                                               )
+                                                       >
+                                               )
+                                               (T
+                                                       <NOT-HERE ,PRSI>        ; "not close enough"
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<VERB? EXAMINE>
+                       <COND
+                               (<NOT <MC-HERE? ,RM-CAS-KITCHEN>>
+                                       <FSET ,RM-CAS-KITCHEN ,FL-SEEN>
+                                       <COND
+                                               (<MC-HERE? ,RM-BEHIND-FIRE>
+                                                       <TELL The ,WINNER " can't see much from here." CR>
+                                               )
+                                               (T
+                                                       <TELL "It's a small building to the south of the great hall." CR>
+                                               )
+                                       >
+                               )
+                       >
+               )
+   >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-CASTLE-TABLE"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-CASTLE-TABLE
+       (LOC RM-CAS-KITCHEN)
+       (DESC "kitchen table")
+       (FLAGS FL-NO-LIST FL-SEARCH FL-SURFACE)
+       (SYNONYM TABLE)
+       (ADJECTIVE KITCHEN WOODEN)
+       (CAPACITY 50)
+       (ACTION RT-TH-CASTLE-TABLE)
+>
+
+<ROUTINE RT-TH-CASTLE-TABLE ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? CLIMB-UP CLIMB-ON CLIMB-OVER>
+                       <RT-AUTHOR-ON>
+                       <TELL "It's not polite to " vw " on tables.">
+                       <RT-AUTHOR-OFF>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-BARREL"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-BARREL
+       (LOC RM-CAS-KITCHEN)
+       (DESC "barrel")
+       (FLAGS FL-CONTAINER FL-NO-LIST FL-OPEN FL-SEARCH FL-TRY-TAKE)
+       (SYNONYM BARREL)
+       (ADJECTIVE BIG WOODEN WATER)
+       (CAPACITY 150)
+       (ACTION RT-TH-BARREL)
+>
+
+<ROUTINE RT-TH-BARREL ("OPT" (CONTEXT <>))
+       <COND
+               (<MC-CONTEXT? ,M-BEG>
+                       <COND
+                               (<AND <VERB? EXIT>
+                                               <MC-FORM? ,K-FORM-EEL>
+                                               <MC-PRSO? ,TH-BARREL <> ,ROOMS>
+                                       >
+                                       <TELL "Eels can't live out of water." CR>
+                               )
+                               (<OR    <AND
+                                                       <VERB? EMPTY MOVE TIP>
+                                                       <MC-PRSO? ,TH-BARREL>
+                                               >
+                                               <AND
+                                                       <TOUCH-VERB?>
+                                                       <NOT <RT-META-IN? ,PRSO ,TH-CASTLE-TABLE>>
+                                                       <NOT <RT-META-IN? ,PRSO ,TH-BARREL>>
+                                                       <NOT <RT-META-IN? ,PRSO ,CH-PLAYER>>
+                                               >
+                                       >
+                                       <TELL
+The ,WINNER " would have to get out of" the ,TH-BARREL " first." CR
+                                       >
+                               )
+                       >
+               )
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (,NOW-PRSI
+                       <RFALSE>
+               )
+               (<VERB? DRINK-FROM>
+                       <COND
+                               (<IN? ,TH-BARREL-WATER ,TH-BARREL>
+                                       <PERFORM ,V?DRINK ,TH-BARREL-WATER>
+                                       <RTRUE>
+                               )
+                               (T
+                                       <TELL "There is nothing to drink in" the ,TH-BARREL "." CR>
+                               )
+                       >
+               )
+               (<VERB? TAKE RAISE>
+                       <TELL The+verb ,TH-BARREL "are" " too heavy to lift." CR>
+               )
+               (<VERB? EMPTY>
+                       <COND
+                               (<NOT <MC-FORM? ,K-FORM-ARTHUR>>
+                                       <RT-ANIMAL-CANT-MSG>
+                               )
+                               (<IN? ,TH-BARREL-WATER ,TH-BARREL>
+                                       <COND
+                                               (<MC-PRSI? <> ,ROOMS ,TH-GROUND ,TH-CASTLE-FIRE>
+                                                       <RT-PUT-OUT-FIRE-MSG>
+                                               )
+                                               (T
+                                                       <RT-WASTE-OF-TIME-MSG>
+                                               )
+                                       >
+                               )
+                       >
+               )
+               (<VERB? MOVE TIP>
+                       <COND
+                               (<NOT <MC-FORM? ,K-FORM-ARTHUR>>
+                                       <RT-ANIMAL-CANT-MSG "tip over">
+                               )
+                               (<IN? ,TH-BARREL-WATER ,TH-BARREL>
+                                       <RT-PUT-OUT-FIRE-MSG>
+                               )
+                               (T
+                                       <RT-NO-POINT-MSG "Moving">
+                               )
+                       >
+               )
+               (<VERB? ENTER>
+                       <COND
+                               (<AND <IN? ,TH-BARREL-WATER ,TH-BARREL>
+                                               <NOT <MC-FORM? ,K-FORM-ARTHUR>>
+                                       >
+                                       <COND
+                                               (<MC-FORM? ,K-FORM-OWL ,K-FORM-BADGER ,K-FORM-SALAMANDER>
+                                                       <TELL ,K-WOULD-DROWN-MSG>
+                                               )
+                                               (<MC-FORM? ,K-FORM-TURTLE>
+                                                       <RT-ANIMAL-CANT-MSG "climb into">
+                                               )
+                                       >
+                                       <RTRUE>
+                               )
+                       >
+                       <MOVE ,WINNER ,TH-BARREL>
+                       <TELL The+verb ,WINNER "get" " into" the ,TH-BARREL "." CR>
+                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC>>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                                       <RT-UPDATE-DESC-WINDOW>
+                               )
+                       >
+                       <RTRUE>
+               )
+               (<VERB? EXIT>
+                       <MOVE ,WINNER ,HERE>
+                       <TELL The+verb ,WINNER "get" " out of" the ,TH-BARREL "." CR>
+                       <SETG GL-UPDATE-WINDOW <BOR ,GL-UPDATE-WINDOW ,K-UPD-DESC>>
+                       <COND
+                               (<EQUAL? ,GL-WINDOW-TYPE ,K-WIN-DESC>
+                                       <RT-UPDATE-DESC-WINDOW>
+                               )
+                       >
+                       <RTRUE>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-BARREL-WATER"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-BARREL-WATER
+       (LOC TH-BARREL)
+       (DESC "water")
+       (FLAGS FL-COLLECTIVE FL-PLURAL FL-WATER)
+       (SYNONYM WATER)
+       (SIZE 30)
+       (ACTION RT-TH-BARREL-WATER)
+>
+
+<ROUTINE RT-TH-BARREL-WATER ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                       <RFALSE>
+               )
+               (<VERB? DRINK EAT>
+                       <TELL The+verb ,WINNER "take" " a small, refreshing sip of water." CR>
+               )
+       >
+>
+
+;"---------------------------------------------------------------------------"
+; "TH-PUMICE"
+;"---------------------------------------------------------------------------"
+
+<OBJECT TH-PUMICE
+       (LOC TH-CASTLE-TABLE)
+       (DESC "pumice stone")
+       (FLAGS FL-TAKEABLE)
+       (SYNONYM STONE PUMICE)
+       (ADJECTIVE PUMICE)
+       (SCORE <LSH 1 ,K-QUEST-SHIFT>)
+       (SIZE 5)
+       (GENERIC RT-GN-STONE)
+       (ACTION RT-TH-PUMICE)
+>
+
+<ROUTINE RT-TH-PUMICE ("OPT" (CONTEXT <>))
+       <COND
+               (.CONTEXT
+                 &n