]> github.com/historicalsource and other repositories - sorcerer.git/commitdiff
Revision 13 (Original Source)
authorhistoricalsource <historicalsoftware@textfiles.com>
Sun, 14 Apr 2019 01:14:02 +0000 (21:14 -0400)
committerhistoricalsource <historicalsoftware@textfiles.com>
Sun, 14 Apr 2019 01:14:02 +0000 (21:14 -0400)
15 files changed:
README.md [new file with mode: 0644]
belboz.zil [new file with mode: 0644]
coal.zil [new file with mode: 0644]
end.zil [new file with mode: 0644]
fort.zil [new file with mode: 0644]
globals.zil [new file with mode: 0644]
guild.zil [new file with mode: 0644]
maze.zil [new file with mode: 0644]
misc.zil [new file with mode: 0644]
park.zil [new file with mode: 0644]
parser.zil [new file with mode: 0644]
sorcerer.zil [new file with mode: 0644]
sorcerer.zip [new file with mode: 0644]
syntax.zil [new file with mode: 0644]
verbs.zil [new file with mode: 0644]

diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..c32282d
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# sorcerer
diff --git a/belboz.zil b/belboz.zil
new file mode 100644 (file)
index 0000000..78c8fc4
--- /dev/null
@@ -0,0 +1,1704 @@
+"BELBOZ for
+                           SORCERER
+       (c) Copyright 1984 by Infocom Inc.  All Rights Reserved."
+
+<ROUTINE I-WAKE-UP ()
+        <JIGS-UP
+"|
+Suddenly, seemingly from nowhere, a bolt of lightning strikes
+you in the center of your chest...">>
+
+<OBJECT TREE
+       (IN LOCAL-GLOBALS)
+       (DESC "gnarled tree")
+       (SYNONYM TREE BRANCH)
+       (ADJECTIVE LARGE GNARLE OLD TWISTE)
+       (FLAGS NDESCBIT)
+       (ACTION TREE-F)>
+
+<ROUTINE TREE-F ()
+        <COND (<VERB? CLIMB-FOO CLIMB-UP>
+               <DO-WALK ,P?UP>)
+              (<VERB? CLIMB-DOWN>
+               <DO-WALK ,P?DOWN>)
+              (<VERB? LOOK-UNDER>
+               <PERFORM ,V?EXAMINE ,GROUND>
+               <RTRUE>)
+              (<VERB? MEEF>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,V?MEEF ,FOREST>
+               <RTRUE>)>>
+
+<ROOM TWISTED-FOREST
+      (IN ROOMS)
+      (DESC "Twisted Forest")
+      (LDESC
+"You are on a path through a blighted forest. The trees are sickly,
+and there is no undergrowth at all. One tree here looks climbable.
+The path, which ends here, continues to the northeast.")
+      (UP TO TREE-BRANCH)
+      (NE TO FOREST-EDGE)
+      (FLAGS RLANDBIT ONBIT)
+      (GLOBAL ROAD FOREST TREE)>
+
+<OBJECT HELLHOUND
+       (IN TWISTED-FOREST)
+       (DESC "hellhound")
+       (SYNONYM HELLHO HOUND DOG)
+       (ADJECTIVE HELL)
+       (FLAGS NDESCBIT)
+       (ACTION HELLHOUND-F)>
+
+<ROUTINE HELLHOUND-F ()
+        <COND (<VERB? RESEARCH>
+               <PERFORM ,V?RESEARCH ,LOBBY>
+               <RTRUE>)>>
+
+<GLOBAL HELLHOUND-WARNING <>>
+
+<ROUTINE I-HELLHOUND ()
+        <COND (<EQUAL? ,HERE ,TWISTED-FOREST>
+               <COND (,HELLHOUND-WARNING
+                      <JIGS-UP
+"|
+The hellhound reaches you and tears you apart with its powerful teeth.">)
+                     (T
+                      <SETG HELLHOUND-WARNING T>
+                      <TELL CR
+"A hellhound is racing straight toward you, its open jaws displaying
+rows of razor-sharp teeth." CR>)>)
+              (<EQUAL? ,HERE ,TREE-BRANCH>
+               <TELL
+"The hellhound leaps madly about the base of the tree, gnashing its jaws." CR>)
+              (T
+               <MOVE ,HELLHOUND ,DIAL>
+               <DISABLE <INT I-HELLHOUND>>
+               <TELL
+"The hellhound stops at the edge of the forest and bellows. After a moment,
+it turns and slinks into the trees." CR>)>>
+
+<ROOM TREE-BRANCH
+      (IN ROOMS)
+      (DESC "Tree Branch")
+      (DOWN TO TWISTED-FOREST)
+      (UP PER TREE-UP-F)
+      (FLAGS NONLANDBIT ONBIT)
+      (GLOBAL FOREST TREE)
+      (ACTION TREE-BRANCH-F)>
+
+<ROUTINE TREE-BRANCH-F (RARG)
+        <COND (<EQUAL? .RARG ,M-LOOK>
+               <TELL "You are ">
+               <COND (,FLYING
+                      <TELL "flying near">)
+                     (T
+                      <TELL "on">)>
+               <TELL
+" a large gnarled branch of an old and twisted tree." CR>)
+              (<EQUAL? .RARG ,M-ENTER>
+               <ENABLE <QUEUE I-BOA -1>>
+               <RFALSE>)>>
+
+<ROUTINE TREE-UP-F ()
+        <TELL "You can't ">
+        <COND (,FLYING
+               <TELL "fly">)
+              (T
+               <TELL "climb">)>
+        <TELL " any higher." CR>
+        <RFALSE>>
+
+<OBJECT BOA
+       (IN TREE-BRANCH)
+       (DESC "boa constrictor")
+       (SYNONYM BOA CONSTR SNAKE)
+       (ADJECTIVE GIANT BOA)
+       (FLAGS NDESCBIT)
+       (ACTION BOA-F)>
+
+<ROUTINE BOA-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL
+"Your average giant carnivorous snake -- except that this one has
+three heads and an appetite to match." CR>)>>
+
+<GLOBAL BOA-WARNING <>>
+
+<ROUTINE I-BOA ()
+        <COND (<EQUAL? ,HERE ,TREE-BRANCH>
+               <COND (,FLYING
+                      <RFALSE>)
+                     (,BOA-WARNING
+                      <JIGS-UP
+"|
+The snake begins wrapping itself around your torso, squeezing
+the life out of you...">)
+                     (T
+                      <SETG BOA-WARNING T>
+                      <TELL CR
+"A giant boa constrictor is slithering along the branch toward you!" CR>)>)
+              (T
+               <SETG BOA-WARNING <>>
+               <DISABLE <INT I-BOA>>
+               <RFALSE>)>>
+
+<ROOM FOREST-EDGE
+      (IN ROOMS)
+      (SYNONYM MOUNTA)
+      (ADJECTIVE LONELY)
+      (DESC "Forest Edge")
+      (LDESC
+"To the west, a path enters the blighted woods, which stretch out of sight.
+A signpost stands beside another path leading north, and to the east is a
+wide meadow. At the base of the signpost is a slimy hole leading down.")
+      (WEST TO TWISTED-FOREST)
+      (NORTH TO MINE-FIELD)
+      (DOWN TO SNAKE-PIT)
+      (EAST TO MEADOW)
+      (SOUTH "A tall fence blocks your way.")
+      (PSEUDO "FENCE" FENCE-PSEUDO)
+      (FLAGS RLANDBIT ONBIT)
+      (GLOBAL HOLE ROAD FOREST MEADOW)>
+
+<ROUTINE FENCE-PSEUDO ()
+        <COND (<VERB? CLIMB-OVER CLIMB-FOO LEAP>
+               <TELL "It's too tall." CR>)>>
+
+<OBJECT SIGNPOST
+       (IN FOREST-EDGE)
+       (DESC "signpost")
+       (SYNONYM SIGNPO POST SIGN)
+       (ADJECTIVE SIGN)
+       (FLAGS READBIT NDESCBIT)
+       (ACTION SIGNPOST-F)>
+
+<ROUTINE SIGNPOST-F ()
+        <COND (<VERB? READ>
+               <FIXED-FONT-ON>
+               <TELL
+"|
+\"  *** !!! >>> WARNING <<< !!! ***|
+     This path is protected by a|
+          Magic Mine Field|
+          installed by the|
+   Frobozz Magic Mine Field Company" CR>
+               <FIXED-FONT-OFF>)>>
+
+<ROOM MINE-FIELD
+      (IN ROOMS)
+      (DESC "Mine Field")
+      (LDESC
+"This is a flat and featureless dirt path leading north and south.")
+      (SOUTH PER MINE-FIELD-EXIT-F)
+      (NORTH PER MINE-FIELD-EXIT-F)
+      (EAST "A tall fence blocks your way.")
+      (WEST "The forest is too dense to enter here.")
+      (FLAGS RLANDBIT ONBIT)
+      (GLOBAL FOREST)
+      (PSEUDO "FENCE" FENCE-PSEUDO)>
+
+<ROUTINE MINE-FIELD-EXIT-F ()
+        <COND (<AND <EQUAL? ,PRSO ,P?SOUTH>
+                    <PROB 50>>
+               ,FOREST-EDGE)
+              (T
+               <COND (,FLYING
+                      <TELL
+"Unfortunately, one of the properties of magic mine fields is their
+ability to blow you up even if you're floating above them. ">)>
+               <JIGS-UP "Kaboom!!!...">
+               <RFALSE>)>>
+
+<ROOM SNAKE-PIT
+      (IN ROOMS)
+      (DESC "Snake Pit")
+      (LDESC
+"You have entered a shadowy pit full of nooks and crannies. From every
+direction you hear the hissing of vipers and the irregular clicking of
+giant beetles. Light spills down from above, and a small crack leads
+further downward into darkness.")
+      (UP TO FOREST-EDGE)
+      (OUT TO FOREST-EDGE)
+      (DOWN TO SLIMY-ROOM)
+      (FLAGS RLANDBIT ONBIT)
+      (PSEUDO "PIT" SNAKE-PIT-PSEUDO "CRACK" CRACK-PSEUDO)
+      (ACTION SNAKE-PIT-F)>
+
+<ROUTINE SNAKE-PIT-PSEUDO ()
+        <COND (<VERB? THROUGH>
+               <LOOK-AROUND-YOU>)>>
+
+<ROUTINE CRACK-PSEUDO ()
+        <COND (<VERB? THROUGH>
+               <DO-WALK ,P?DOWN>)>>
+
+<OBJECT VIPERS
+       (IN SNAKE-PIT)
+       (DESC "group of unseen creatures")
+       (SYNONYM SNAKE SNAKES BEETLE CREATU)
+       (ADJECTIVE GIANT VIPER VIPERS UNSEEN GROUP)
+       (FLAGS NDESCBIT)> 
+
+<ROUTINE SNAKE-PIT-F (RARG)
+        <COND (<EQUAL? .RARG ,M-ENTER>
+               <ENABLE <QUEUE I-SNAKE-PIT <+ 1 <RANDOM 3>>>>
+               <RFALSE>)>>
+
+<ROUTINE I-SNAKE-PIT ()
+        <COND (<EQUAL? ,HERE ,SNAKE-PIT>
+               <JIGS-UP
+"|
+Suddenly, the pit comes alive as dozens of vipers strike and thousands
+of giant beetles pour from their hiding places.">)
+              (T
+               <DISABLE <INT I-SNAKE-PIT>>)>>
+
+<ROOM SLIMY-ROOM
+      (IN ROOMS)
+      (SYNONYM KRILL)
+      (ADJECTIVE EVIL WARLOC)
+      (DESC "Slimy Room")
+      (LDESC
+"This is a moist room whose walls are thick with moss and lichens. A
+small hole leads up and a rocky passage leads south.")
+      (UP TO SNAKE-PIT)
+      (SOUTH TO CRATER)
+      (DOWN TO CRATER)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (GLOBAL HOLE)
+      (PSEUDO "CRATER" CRATER-PSEUDO)>
+
+<OBJECT MOSS
+       (IN SLIMY-ROOM)
+       (DESC "moss and lichens")
+       (SYNONYM MOSS LICHEN SLIME)
+       (FLAGS NDESCBIT NARTICLEBIT)
+       (ACTION MOSS-F)>
+
+<ROUTINE MOSS-F ()
+        <COND (<VERB? MEEF>
+               <TELL
+"A few patches of the moss and lichens become brown and dry." CR>)
+              (<VERB? EAT>
+               <JIGS-UP "Uh, oh. They taste poisonous.">)>>
+
+<ROOM MEADOW
+      (IN ROOMS)
+      (DESC "Meadow")
+      (NORTH TO RIVER-BANK)
+      (NE TO RIVER-BANK)
+      (EAST TO DRAWBRIDGE)
+      (WEST TO FOREST-EDGE)
+      (SOUTH "A tall fence blocks your way.")
+      (FLAGS RLANDBIT ONBIT)
+      (PSEUDO "FENCE" FENCE-PSEUDO "TURRET" TURRET-PSEUDO)
+      (GLOBAL MEADOW-OBJECT CASTLE)
+      (ACTION MEADOW-F)>
+
+<ROUTINE MEADOW-F (RARG)
+        <COND (<EQUAL? .RARG ,M-ENTER>
+               <ENABLE <QUEUE I-LOCUSTS -1>>
+               <RFALSE>)
+              (<EQUAL? .RARG ,M-LOOK>
+               <TELL "You are in the center of a ">
+               <COND (<IN? ,MEADOW-OBJECT ,HERE>
+                      <TELL "rolling meadow of tall grass">)
+                     (T
+                      <TELL "barren field">)>
+               <TELL
+". To the east is the turret of a ruined castle, and from the northeast
+comes the sound of rushing water." CR>)>>
+
+<OBJECT MEADOW-OBJECT
+       (IN LOCAL-GLOBALS)
+       (DESC "meadow")
+       (SYNONYM MEADOW GRASS FIELD)
+       (ADJECTIVE TALL ROLLIN WIDE)
+       (FLAGS NDESCBIT)
+       (ACTION MEADOW-OBJECT-F)>
+
+<ROUTINE MEADOW-OBJECT-F ()
+        <COND (<AND <NOT <EQUAL? ,HERE ,MEADOW>>
+                    <VERB? RUB MEEF>>
+               <TELL "The meadow is too far away." CR>)
+              (<VERB? MEEF>
+               <MOVE ,MEADOW-OBJECT ,DIAL>
+               <TELL "The grass vanishes as far as the eye can see." CR>)>>
+
+<OBJECT PLAGUE-OF-LOCUSTS
+       (IN MEADOW)
+       (DESC "plague of locusts")
+       (SYNONYM PLAGUE SWARM LOCUSTS)
+       (ADJECTIVE BLOOD SUCKIN)
+       (FLAGS NDESCBIT)
+       (ACTION PLAGUE-OF-LOCUSTS-F)>
+
+<ROUTINE PLAGUE-OF-LOCUSTS-F ()
+        <COND (<VERB? LOOK-UNDER>
+               <PERFORM ,V?EXAMINE ,MEADOW-OBJECT>
+               <RTRUE>)>>
+
+<GLOBAL LOCUST-WARNING 0>
+
+<ROUTINE I-LOCUSTS ()
+        <COND (<NOT <EQUAL? ,HERE ,MEADOW>>
+               <DISABLE <INT I-LOCUSTS>>
+               <SETG LOCUST-WARNING 0>
+               <RFALSE>)
+              (<EQUAL? ,LOCUST-WARNING 0>
+               <SETG LOCUST-WARNING <+ ,LOCUST-WARNING 1>>
+               <TELL CR
+"A swarm of bloodsucking locusts appears on the horizon." CR>)
+              (<EQUAL? ,LOCUST-WARNING 1>
+               <SETG LOCUST-WARNING <+ ,LOCUST-WARNING 1>>
+               <TELL CR
+"The locusts are much closer now, blotting out the sun like
+a black storm cloud." CR>)
+              (T
+               <SETG LOCUST-WARNING 0>
+               <JIGS-UP
+"|
+The locusts swarm over you and pick you clean to the bones.">)>>
+
+<ROOM RIVER-BANK
+      (IN ROOMS)
+      (DESC "River Bank")
+      (SOUTH TO MEADOW)
+      (SW TO MEADOW)
+      (NORTH PER RIVER-ENTER-F)
+      (EAST PER RIVER-ENTER-F)
+      (NE PER RIVER-ENTER-F)
+      (DOWN PER RIVER-ENTER-F)
+      (NW "Undergrowth prevents travel along the bank.")
+      (SE TO FORT-ENTRANCE)
+      (FLAGS RLANDBIT ONBIT)
+      (GLOBAL WATER RIVER MEADOW-OBJECT BANKS RIVER-BED-OBJECT)
+      (PSEUDO "ROCK" ROCK-PSEUDO "ROCKS" ROCK-PSEUDO)
+      (ACTION RIVER-BANK-F)>
+
+<GLOBAL BANK-COUNTER 0>
+
+<ROUTINE RIVER-BANK-F (RARG)
+        <COND (<EQUAL? .RARG ,M-LOOK>
+               <TELL "You are on a muddy bank ">
+               <COND (,RIVER-EVAPORATED
+                      <TELL "above a dried-up river bed">)
+                     (T
+                      <TELL
+"of a fast-moving river, full of sharp rocks and foaming rapids,
+flowing to the southwest. The ground is soft and eroded, and
+continually threatens to dump you into the turbulent waters">)>
+               <TELL
+". A field lies to the southwest, and a trail leads southeast
+along the bank." CR>)
+              (<EQUAL? .RARG ,M-END>
+               <COND (<L? ,BANK-COUNTER 3>
+                      <SETG BANK-COUNTER <+ ,BANK-COUNTER 1>>
+                      <RFALSE>)
+                     (T
+                      <COND (<AND <NOT ,RIVER-EVAPORATED>
+                                  <NOT ,FLYING>
+                                  <PROB 75>>
+                             <JIGS-UP
+"Oops! A section of the bank gives way and you tumble into
+the river. The current dashes you against the rocks.">)>)>)>>
+
+<ROUTINE ROCK-PSEUDO ()
+        <COND (<VERB? CROSS>
+               <TELL <PICK-ONE ,YUKS> CR>)>>
+
+<GLOBAL RIVER-EVAPORATED <>>
+
+<ROUTINE RIVER-ENTER-F ()
+        <COND (,RIVER-EVAPORATED
+               ,RIVER-BED)
+              (,FLYING
+               <JIGS-UP
+"You fly across the river's surface. Suddenly, a downdraft plunges
+you into the swirling rapids!">
+               <RFALSE>)
+              (T
+               <TELL "You'd never survive the rapids." CR>
+               <RFALSE>)>>
+
+<OBJECT RIVER
+       (IN LOCAL-GLOBALS)
+       (DESC "river")
+       (SYNONYM RIVER WATERS RAPIDS)
+       (ADJECTIVE MIGHTY FAST- MOVING TURBUL FOAMIN)
+       (FLAGS NDESCBIT)
+       (ACTION RIVER-F)>       
+
+<ROUTINE RIVER-F ()
+        <COND (<EQUAL? ,HERE ,GUN-EMPLACEMENT ,TURRET>
+               <TELL "The river lies far below." CR>)
+              (,RIVER-EVAPORATED
+               <TELL "River? What river?" CR>)
+              (<VERB? DRINK DRINK-FROM>
+               <PERFORM ,V?DRINK ,WATER>
+               <RTRUE>)
+              (<VERB? PULVER>
+               <COND (<EQUAL? ,HERE ,RIVER-BANK>
+                      <SETG RIVER-EVAPORATED T>
+                      <ENABLE <QUEUE I-TRICKLE 3>>
+                      <TELL
+"The river dries up, leaving only a few puddles between the rocks! It's
+now safe to climb down into the river bed." CR>)
+                     (T
+                      <TELL
+"The water level drops several feet, but quickly surges back." CR>)>)
+              (<VERB? EXAMINE>
+               <TELL "The river flows quickly by below you." CR>)
+              (<AND <VERB? PUT>
+                    <EQUAL? ,RIVER ,PRSI>>
+               <MOVE ,PRSO ,DIAL>
+               <SPLASH>)
+              (<VERB? THROUGH>
+               <DO-WALK ,P?NORTH>)>>
+
+<ROUTINE I-TRICKLE ()
+        <ENABLE <QUEUE I-FLOOD 2>>
+        <COND (<OR <EQUAL? ,HERE ,RIVER-BANK ,RIVER-BED>
+                   <EQUAL? ,HERE ,STAGNANT-POOL ,TOP-OF-FALLS>>
+               <TELL CR
+"A trickle of water begins flowing down the center of the river bed." CR>)>>
+
+<ROUTINE I-FLOOD ()
+        <SETG RIVER-EVAPORATED <>>
+        <FLOOD-LOOP ,RIVER-BED>
+        <FLOOD-LOOP ,STAGNANT-POOL>
+        <FLOOD-LOOP ,TOP-OF-FALLS>
+        <CRLF>
+        <COND (<EQUAL? ,HERE ,STAGNANT-POOL ,RIVER-BED ,TOP-OF-FALLS>
+               <JIGS-UP
+"A wall of water comes rushing down the river bed! You are smashed into
+jelly against the rocks.">)
+              (<EQUAL? ,HERE ,RIVER-BANK>
+               <TELL
+"A wall of water rushes down the river bed as the river returns with
+a vengeance." CR>)
+              (<EQUAL? ,HERE ,HIDDEN-CAVE>
+               <TELL
+"There is a roar of water from outside the cave. The lower part
+of the cave, near the mouth, fills with a pool of swirling water!" CR>)>>
+
+<ROUTINE FLOOD-LOOP (LOC "AUX" X N)
+        <SET X <FIRST? .LOC>>
+        <COND (<NOT .X>
+               <RTRUE>)>        
+        <REPEAT ()
+                <SET N <NEXT? .X>>
+                <COND (<NOT <EQUAL? .X ,PROTAGONIST>>
+                       <MOVE .X ,DIAL>)>
+                <COND (<NOT .N>
+                       <RETURN>)
+                      (T
+                       <SET X .N>)>>>
+
+<OBJECT UNDERGROWTH
+       (IN RIVER-BANK)
+       (DESC "undergrowth")
+       (SYNONYM UNDERG)
+       (FLAGS NDESCBIT VOWELBIT NARTICLEBIT)
+       (ACTION UNDERGROWTH-F)>
+
+<ROUTINE UNDERGROWTH-F ()
+        <COND (<VERB? MEEF>
+               <TELL
+"The nearest part of the undergrowth withers away ... revealing
+more undergrowth." CR>)>>
+
+<OBJECT BANKS
+       (IN LOCAL-GLOBALS)
+       (DESC "river bank")
+       (SYNONYM BANK BANKS)
+       (ADJECTIVE RIVER MUDDY TALL STEEP HIGH)
+       (FLAGS NDESCBIT)
+       (ACTION BANKS-F)>
+
+<ROUTINE BANKS-F ()
+        <COND (<VERB? CLIMB-UP CLIMB-DOWN CLIMB-FOO>
+               <V-WALK-AROUND>)>>
+
+<OBJECT RIVER-BED-OBJECT
+       (IN LOCAL-GLOBALS)
+       (DESC "river bed")
+       (SYNONYM BED)
+       (ADJECTIVE RIVER)
+       (FLAGS NDESCBIT)
+       (ACTION RIVER-BED-OBJECT-F)>
+
+<ROUTINE RIVER-BED-OBJECT-F ()
+        <COND (<VERB? THROUGH>
+               <COND (<EQUAL? ,HERE ,RIVER-BANK>
+                      <DO-WALK ,P?DOWN>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? DROP EXIT>
+               <COND (<EQUAL? ,HERE ,RIVER-BANK>
+                      <LOOK-AROUND-YOU>)
+                     (T
+                      <DO-WALK ,P?UP>)>)>>     
+
+<ROOM RIVER-BED
+      (IN ROOMS)
+      (SYNONYM SERVAN GUILD)
+      (ADJECTIVE SERVAN)
+      (DESC "River Bed")
+      (LDESC
+"You are on the bed of an evaporated river. Fish splash helplessly in
+tiny puddles. The bed leads northwest and southeast. A climb up the
+southwest bank is possible. To the northeast is a dark cave, hollowed
+out by years of rushing water.")
+      (UP TO RIVER-BANK)
+      (SW TO RIVER-BANK)
+      (NE TO HIDDEN-CAVE)
+      (SE TO TOP-OF-FALLS)
+      (NW TO STAGNANT-POOL)
+      (FLAGS RLANDBIT ONBIT)
+      (PSEUDO "PUDDLE" PUDDLE-PSEUDO "FISH" FISH-PSEUDO)
+      (GLOBAL WATER CAVE BANKS RIVER-BED-OBJECT)
+      (ACTION RIVER-BED-F)>
+
+<ROUTINE RIVER-BED-F (RARG)
+        <COND (<EQUAL? .RARG ,M-ENTER>
+               <PUT ,VEZZAS 1 0>
+               <RFALSE>)>>
+
+<ROUTINE PUDDLE-PSEUDO ()
+        <COND (<VERB? THROUGH>
+               <TELL "The puddles are very shallow." CR>)
+              (<VERB? PULVER>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,V?PULVER ,WATER>
+               <RTRUE>)>>
+
+<ROUTINE FISH-PSEUDO ()
+        <COND (<VERB? TAKE>
+               <TELL "They squirm from your grasp." CR>)>>
+
+<ROOM STAGNANT-POOL
+      (IN ROOMS)
+      (SYNONYM TUMPER)
+      (ADJECTIVE GABBER)
+      (DESC "Near Stagnant Pool")
+      (LDESC
+"The river bed to the northwest is a pool covered with algae and other
+scum. The bed to the southeast is slightly drier. The banks are too tall
+and steep to climb here.")
+      (NW PER TENTACLE-DEATH)
+      (SE TO RIVER-BED)
+      (UP PER RIVER-EXIT-F)
+      (NE PER RIVER-EXIT-F)
+      (SW PER RIVER-EXIT-F)
+      (FLAGS RLANDBIT ONBIT)
+      (GLOBAL WATER BANKS RIVER-BED-OBJECT)>
+
+<ROUTINE TENTACLE-DEATH ()
+        <COND (,FLYING
+               <TELL "You fly over the surface of the pool.">)
+              (T
+               <TELL "You wade into the stagnant pool.">)>
+        <JIGS-UP
+" Suddenly, powerful tentacles lash out and drag you under the surface.">
+        <RFALSE>>
+
+<ROOM TOP-OF-FALLS
+        (IN ROOMS)
+        (SYNONYM BORPHE)
+        (DESC "Top of Falls")
+        (LDESC
+"The river bed ends here at a steep cliff, where the river once plunged
+over a waterfall. Below the falls, in the distance, is a large sea,
+covered with haze. The bed continues northwest, but the banks here are
+unclimbable. Atop the southwestern bank stands a proud fortress.")
+        (UP PER RIVER-EXIT-F)
+        (NE PER RIVER-EXIT-F)
+        (SW PER RIVER-EXIT-F)
+        (SE PER WATERFALL-EXIT-F)
+        (DOWN PER WATERFALL-EXIT-F)
+        (NW TO RIVER-BED)
+        (FLAGS ONBIT RLANDBIT)
+        (GLOBAL WATER FORT BANKS OCEAN WATERFALL RIVER-BED-OBJECT)
+        (PSEUDO "CLIFF" TOP-OF-CLIFF-PSEUDO "HAZE" HAZE-PSEUDO)>
+
+<ROUTINE RIVER-EXIT-F ()
+        <TELL "The banks are too ">
+        <COND (,FLYING
+               <TELL "high to fly over." CR>)
+              (T
+               <TELL "steep to climb." CR>)>
+        <RFALSE>>
+
+<ROUTINE WATERFALL-EXIT-F ()
+        <COND (,FLYING
+               <TELL
+"That would be foolhardy, as flying spells are of limited duration." CR>)
+              (T
+               <TELL "That would involve quite a plunge." CR>)>
+        <RFALSE>>
+
+<ROUTINE TOP-OF-CLIFF-PSEUDO ()
+        <COND (<VERB? CLIMB-DOWN>
+               <TELL "Impossible." CR>)
+              (<VERB? LEAP>
+               <JIGS-UP "Brilliant move.">)>>
+
+<ROUTINE HAZE-PSEUDO ()
+        <COND (<VERB? RUB>
+               <TELL "From here?" CR>)>>
+
+<OBJECT WATERFALL
+       (IN LOCAL-GLOBALS)
+       (DESC "waterfall")
+       (SYNONYM WATERF FALL FALLS)
+       (ADJECTIVE WATER TALL)
+       (FLAGS NDESCBIT)
+       (ACTION WATERFALL-F)>
+
+<ROUTINE WATERFALL-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL
+"It's no Aragain Falls, but it's pretty impressive." CR>)
+              (<AND <VERB? LEAP>
+                    <EQUAL? ,HERE ,TOP-OF-FALLS>>
+               <SETG PRSO <>>
+               <PERFORM ,V?LEAP>
+               <RTRUE>)
+              (<AND <EQUAL? ,HERE ,MOUTH-OF-RIVER ,TURRET>
+                    <VERB? LEAP RUB SMELL LISTEN>>
+               <TELL "From here?" CR>)>>
+
+<ROOM HIDDEN-CAVE
+      (IN ROOMS)
+      (DESC "Hidden Cave")
+      (SW TO RIVER-BED IF RIVER-EVAPORATED ELSE
+       "Entering that swirling, turbulent pool looks very dangerous.")
+      (OUT TO RIVER-BED IF RIVER-EVAPORATED ELSE
+       "Entering that swirling, turbulent pool looks very dangerous.")
+      (DOWN TO PIT-OF-BONES)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (GLOBAL WATER CAVE HOLE)
+      (ACTION HIDDEN-CAVE-F)>      
+
+<ROUTINE HIDDEN-CAVE-F (RARG)
+        <COND (<AND <EQUAL? .RARG ,M-ENTER>
+                    <NOT <FSET? ,HIDDEN-CAVE ,TOUCHBIT>>>
+               <SETG SCORE <+ ,SCORE 20>>)
+              (<EQUAL? .RARG ,M-LOOK>
+               <TELL
+"This is a hollow area under the northeast bank of the river. The floor
+rises away from the mouth of the cave, which is at its southwest end. ">
+               <COND (<NOT ,RIVER-EVAPORATED>
+                      <TELL
+"The mouth is filled with a pool of swirling water. ">)>
+               <TELL
+"A dark hole leads downward at the far end of the cave." CR>)>>
+
+<OBJECT BAT-GUANO
+       (IN HIDDEN-CAVE)
+       (DESC "pile of bat guano")
+       (SYNONYM PILE GUANO SHIT)
+       (ADJECTIVE BAT FECES TURDS DUNG)
+       (FLAGS TRYTAKEBIT TAKEBIT NDESCBIT)
+       (SIZE 10)
+       (ACTION BAT-GUANO-F)>
+
+<ROUTINE BAT-GUANO-F ()
+        <COND (<AND <VERB? TAKE>
+                    <NOT <FSET? ,FWEEP-SCROLL ,TOUCHBIT>>>
+               <FSET ,FWEEP-SCROLL ,TOUCHBIT>
+               <FSET ,BAT-GUANO ,TOUCHBIT>
+               <FCLEAR ,BAT-GUANO ,TRYTAKEBIT>
+               <FCLEAR ,BAT-GUANO ,NDESCBIT>
+               <MOVE ,BAT-GUANO ,PROTAGONIST>
+               <TELL
+"As you take the guano, the soiled scroll falls to the ground." CR>)>>
+
+<OBJECT BLORT-VIAL
+       (IN HIDDEN-CAVE)
+       (DESC "amber vial")
+       (SYNONYM VIAL VIALS LABEL)
+       (ADJECTIVE AMBER BLORT)
+       (FLAGS CONTBIT READBIT TRYTAKEBIT TAKEBIT VOWELBIT VIALBIT SEARCHBIT)
+       (SIZE 3)
+       (CAPACITY 1)
+       (ACTION BLORT-VIAL-F)>
+
+<ROUTINE BLORT-VIAL-F ()
+        <COND (<VERB? READ>
+               <FIXED-FONT-ON>
+               <TELL
+"|
+        \"BLORT POTION|
+(ability to see in dark places)\"" CR>
+               <FIXED-FONT-OFF>)>>
+
+<OBJECT BLORT-POTION
+       (IN BLORT-VIAL)
+       (DESC "amber potion")
+       (SYNONYM POTION)
+       (ADJECTIVE AMBER BLORT)
+       (FLAGS NARTICLEBIT VOWELBIT)
+       (ACTION BLORT-POTION-F)>
+
+<ROUTINE BLORT-POTION-F ()
+        <COND (<AND <VERB? EAT DRINK>
+                    <NOT <HELD? ,BLORT-VIAL>>>
+               <POTION-POUR ,BLORT-VIAL>)
+              (<VERB? RESEARCH>
+               <READ-ABOUT-POTIONS 1>)
+              (<VERB? EAT DRINK>
+               <MOVE ,BLORT-POTION ,DIAL>
+               <COND (,UNDER-INFLUENCE
+                      <TWO-POTIONS>
+                      <RTRUE>)>
+               <ENABLE <QUEUE I-UNBLORT 24>>
+               <SETG BLORTED T>
+               <SETG UNDER-INFLUENCE ,BLORT-POTION>
+               <TELL
+"The amber potion tasted like chives, and made your eyes tingle." CR>)
+              (<VERB? DROP>
+               <PERFORM ,V?POUR ,PRSO ,PRSI>
+               <RTRUE>)
+              (<AND <VERB? POUR>
+                    <EQUAL? ,PRSO ,BLORT-POTION>>
+               <POTION-POUR ,BLORT-VIAL>)>>
+
+<GLOBAL BLORTED <>>
+
+<ROUTINE I-UNBLORT ()
+        <SETG BLORTED <>>
+        <COND (<EQUAL? ,UNDER-INFLUENCE ,BLORT-POTION>
+               <SETG UNDER-INFLUENCE <>>)>
+        <TELL CR "Your eyes tingle for a moment.">
+        <COND (<NOT ,LIT>
+               <TELL " You can no longer see anything around you!">)>
+        <CRLF>>
+
+<OBJECT FWEEP-SCROLL
+       (IN HIDDEN-CAVE)
+       (DESC "soiled scroll")
+       (FDESC
+"Lying in the corner, in a pile of bat guano, is a scroll.")
+       (SYNONYM SCROLL)
+       (ADJECTIVE SOILED)
+       (FLAGS READBIT SCROLLBIT TRYTAKEBIT TAKEBIT CONTBIT TRANSBIT)
+       (SIZE 3)
+       (ACTION SCROLL-F)>      
+
+<OBJECT FWEEP-SPELL
+       (IN FWEEP-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE FWEEP)
+       (DESC "fweep spell")
+       (TEXT "turn caster into a bat")
+       (COUNT 0)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)
+       (ACTION SPELL-F)>
+
+<GLOBAL FWEEPED <>>
+
+<ROUTINE I-UNFWEEP ()
+        <SETG FWEEPED <>>
+        <SETG FLYING <>>
+        <TELL CR
+"After a moment of futilely flapping your arms, you realize that
+the fweep spell has worn off. ">
+        <COND (<AND <EQUAL? ,HERE ,GLASS-MAZE>
+                    <NO-FLOOR?>>
+               <JIGS-UP
+"Unfortunately, this room of the maze has no floor.">)
+              (<EQUAL? ,HERE ,TREE-BRANCH>
+               <SETTLE-ONTO-BRANCH>)
+              (<EQUAL? ,HERE ,LAGOON>
+               <SPLASH-INTO-WATER>)
+              (T
+               <TELL
+"You fall several feet to the ground." CR>)>
+        <COND (<G? ,AWAKE 8>
+                <I-TIRED>)>>
+
+;"FORT-ENTRANCE and beyond is in FORT.ZIL"
+
+<ROOM DRAWBRIDGE
+      (IN ROOMS)
+      (DESC "Drawbridge")
+      (EAST TO RUINS)
+      (WEST TO MEADOW)
+      (DOWN PER DRAWBRIDGE-EXIT-F)
+      (FLAGS RLANDBIT ONBIT)
+      (GLOBAL WATER CASTLE MEADOW-OBJECT)
+      (ACTION DRAWBRIDGE-F)>
+
+<GLOBAL DRAWBRIDGE-MOVE <>>
+
+<ROUTINE DRAWBRIDGE-F (RARG)
+        <COND (<AND <EQUAL? .RARG ,M-END>
+                    <NOT ,FLYING>>
+               <COND (,DRAWBRIDGE-MOVE
+                      <COND (<PROB 40>
+                             <TELL
+"With a scream of splintering wood, part of the drawbridge collapses and spills
+you into the moat. ">
+                             <DO-WALK ,P?DOWN>)
+                            (T
+                             <TELL "The bridge continues to creak." CR>)>)
+                     (T
+                      <SETG DRAWBRIDGE-MOVE T>
+                      <RFALSE>)>)
+              (<EQUAL? .RARG ,M-LOOK>
+               <TELL "You are ">
+               <COND (,FLYING
+                      <TELL "floating over">)
+                     (T
+                      <TELL "standing on">)>
+               <TELL
+" the drawbridge of a ruined castle which lies to your east. The wood
+of the bridge looks severely rotted">
+               <COND (,FLYING
+                      <TELL ". The moat is">)
+                     (T
+                      <TELL
+" and creaks ominously beneath you. The moat, although an easy dive
+from here, looks dangerous,">)>
+               <TELL 
+" full of sinister shapes beneath the surface of the water. To
+the west is a wide field." CR>)>>
+
+<ROUTINE DRAWBRIDGE-EXIT-F ()
+        <JIGS-UP "You are immediately set upon by alligators and piranhas.">
+        <RFALSE>>
+
+<OBJECT MOAT
+       (IN DRAWBRIDGE)
+       (DESC "moat")
+       (SYNONYM MOAT)
+       (FLAGS NDESCBIT)
+       (ACTION MOAT-F)>
+
+<ROUTINE MOAT-F ()
+        <COND (<VERB? PULVER>
+               <TELL
+"The moat dries up, leaving vicious-looking creatures flopping around
+in puddles. Immediately, the castle's automatic moat-filler turns on,
+and refills the moat." CR>)
+              (<VERB? DRINK DRINK-FROM>
+               <PERFORM ,V?DRINK ,WATER>
+               <RTRUE>)
+              (<VERB? EXAMINE>
+               <TELL
+"The water is murky, and lily pads cover most of the surface. Dark
+shapes swim about below the surface." CR>)
+              (<VERB? LEAP THROUGH>
+               <DO-WALK ,P?DOWN>)>>
+
+<OBJECT BRIDGE
+       (IN DRAWBRIDGE)
+       (DESC "wooden drawbridge")
+       (SYNONYM BRIDGE DRAWBR)
+       (ADJECTIVE ROTTED WOODEN DRAW)
+       (FLAGS NDESCBIT)
+       (ACTION BRIDGE-F)>
+
+<ROUTINE BRIDGE-F ()
+        <COND (<VERB? LOOK-UNDER>
+               <PERFORM ,V?EXAMINE ,MOAT>
+               <RTRUE>)
+              (<VERB? LISTEN>
+               <TELL "Creak, creak." CR>)>>
+
+<ROOM RUINS
+      (IN ROOMS)
+      (SYNONYM FANNUC)
+      (ADJECTIVE DOUBLE)
+      (DESC "Ruins")
+      (LDESC
+"You are amongst the ruins of an ancient castle. A winding stairway leads
+up to a crumbling turret, and a dark passage leads downward. A path heads
+through the rubble to the west.")
+      (WEST TO DRAWBRIDGE)
+      (UP TO TURRET)
+      (DOWN TO DUNGEON)
+      (FLAGS RLANDBIT ONBIT)
+      (PSEUDO "TURRET" TURRET-PSEUDO)
+      (GLOBAL STAIRS CASTLE)>
+
+<ROOM TURRET
+      (IN ROOMS)
+      (SYNONYM MAILMA MESSEN GUILD)
+      (ADJECTIVE MESSEN)
+      (DESC "Turret")
+      (LDESC
+"This is the only turret of the castle still standing. It affords a
+marvelous view of a meadow to the west, and beyond that a twisted forest.
+To the north is a mighty fortress which stands atop a cliff where a
+turbulent river pours into an ocean. The ocean stretches out of sight
+to the east. A spiralling staircase leads downward.")
+      (DOWN TO RUINS)
+      (FLAGS RLANDBIT ONBIT)
+      (PSEUDO "TURRET" TURRET-PSEUDO)
+      (GLOBAL FORT OCEAN RIVER MEADOW-OBJECT STAIRS FOREST CASTLE WATERFALL)>
+
+<ROUTINE TURRET-PSEUDO ()
+        <COND (<VERB? THROUGH>
+               <COND (<EQUAL? ,HERE ,RUINS>
+                      <DO-WALK ,P?UP>)
+                     (<EQUAL? ,HERE ,MEADOW>
+                      <CANT-ENTER ,IT>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? DROP EXIT>
+               <COND (<EQUAL? ,HERE ,TURRET>
+                      <DO-WALK ,P?DOWN>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<AND <VERB? LEAP>
+                    <EQUAL? ,HERE ,TURRET>>
+               <SETG PRSO <>>
+               <PERFORM ,V?LEAP>
+               <RTRUE>)>>
+
+<ROOM TORTURE-CHAMBER
+      (IN ROOMS)
+      (DESC "Torture Chamber")
+      (LDESC
+"This is a large and well-equipped torture chamber. These were very
+popular in castles of several centuries ago, but are somewhat out
+of fashion now. There are exits to the west and north.")
+      (WEST TO DUNGEON)
+      (NORTH TO PIT-OF-BONES)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL CASTLE)>
+
+<OBJECT TORTURE-DEVICES
+       (IN TORTURE-CHAMBER)
+       (DESC "torture devices")
+       (SYNONYM DEVICE RACK PIT PENDUL)
+       (ADJECTIVE TORTUR)
+       (FLAGS NDESCBIT)
+       (ACTION TORTURE-DEVICES-F)>
+
+<ROUTINE TORTURE-DEVICES-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL
+"All the usual torture devices are here, all quite mean and
+deadly looking." CR>)>>
+
+<OBJECT FLAXO-VIAL
+       (IN TORTURE-CHAMBER)
+       (DESC "indigo vial")
+       (FDESC
+"Sitting near one of the torture devices is an indigo vial, labelled
+in tiny letters.")
+       (SYNONYM VIAL VIALS LETTER LABEL)
+       (ADJECTIVE INDIGO FLAXO TINY)
+       (FLAGS CONTBIT READBIT TAKEBIT VOWELBIT VIALBIT SEARCHBIT)
+       (SIZE 3)
+       (CAPACITY 1)
+       (ACTION FLAXO-VIAL-F)>
+
+<ROUTINE FLAXO-VIAL-F ()
+        <COND (<VERB? READ>
+               <FIXED-FONT-ON>
+               <TELL
+"|
+   \"FLAXO POTION|
+(exquisite torture)\"" CR>
+               <FIXED-FONT-OFF>)>>
+
+<OBJECT FLAXO-POTION
+       (IN FLAXO-VIAL)
+       (DESC "indigo potion")
+       (SYNONYM POTION)
+       (ADJECTIVE FLAXO INDIGO)
+       (FLAGS NARTICLEBIT VOWELBIT)
+       (ACTION FLAXO-POTION-F)>
+
+<ROUTINE FLAXO-POTION-F ()
+        <COND (<AND <VERB? EAT DRINK>
+                    <NOT <HELD? ,FLAXO-VIAL>>>
+               <POTION-POUR ,FLAXO-VIAL>)
+              (<VERB? RESEARCH>
+               <READ-ABOUT-POTIONS 2>)
+              (<VERB? EAT DRINK>
+               <MOVE ,FLAXO-POTION ,DIAL>
+               <TELL
+"The potion tastes like a combination of anchovies, prune juice, and
+garlic powder. As you finish swallowing the potion, a well-muscled troll
+saunters in">
+               <COND (<EQUAL? ,HERE ,TORTURE-CHAMBER>
+                      <TELL " and straps you to a torture device">)>
+               <TELL
+". He whacks your head with a wooden two-by-four, grunting \"You are
+playing Sorcerer. It was written by S. Eric Meretzky. You will have
+fun and enjoy yourself.\" He repeats this action 999 more times, then
+vanishes without a trace." CR>)
+              (<VERB? DROP>
+               <PERFORM ,V?POUR ,PRSO ,PRSI>
+               <RTRUE>)
+              (<AND <VERB? POUR>
+                    <EQUAL? ,PRSO ,FLAXO-POTION>>
+               <POTION-POUR ,FLAXO-VIAL>)>>
+
+<ROOM DUNGEON
+      (IN ROOMS)
+      (SYNONYM TRAVEL)
+      (ADJECTIVE TEMPOR TIME)
+      (DESC "Dungeon")
+      (LDESC
+"This is the dark and dank dungeon of the ruined castle. There's probably
+a torture chamber nearby. You can go east, northeast, or upward. A small
+opening leads down as well.")
+      (EAST TO TORTURE-CHAMBER)
+      (UP TO RUINS)
+      (NE TO PIT-OF-BONES)
+      (DOWN TO HIGHWAY)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (GLOBAL HOLE CASTLE)>
+
+<ROOM PIT-OF-BONES
+      (IN ROOMS)
+      (DESC "Pit of Bones")
+      (LDESC
+"In the center of the room is a deep pit filled with countless bones, an
+indication of the brutality of dungeon life. There are exits south and
+southwest. High above you is a small opening in the ceiling.")
+      (UP PER PIT-OF-BONES-EXIT-F)
+      (SOUTH TO TORTURE-CHAMBER)
+      (SW TO DUNGEON)
+      (DOWN "Do you really want to add your bones to the others in the pit?")
+      (FLAGS INSIDEBIT RLANDBIT)
+      (GLOBAL HOLE CASTLE CAVE)
+      (PSEUDO "BONES" BONES-PSEUDO "PIT" PIT-PSEUDO)>
+
+<ROUTINE PIT-OF-BONES-EXIT-F ()
+        <COND (,FLYING
+               <TELL "You can't fly high enough to reach the hole." CR>)
+              (T
+               <TELL "The hole is too high to reach." CR>)>
+        <RFALSE>>
+
+<ROUTINE BONES-PSEUDO ()
+        <COND (<VERB? TAKE SEARCH DIG>
+               <TELL "They're at the bottom of the pit." CR>)
+              (<VERB? MALYON>
+               <JIGS-UP "The results are too hideous to describe.">)>>
+
+<ROUTINE PIT-PSEUDO ()
+        <COND (<VERB? LEAP THROUGH>
+               <DO-WALK ,P?DOWN>)
+              (<VERB? LOOK-INSIDE>
+               <TELL "Bones. Lots of bones." CR>)>>
+
+<ROOM HIGHWAY
+      (IN ROOMS)
+      (SYNONYM GUILD CIRCLE ENCHAN)
+      (ADJECTIVE ENCHAN)
+      (DESC "Highway")
+      (LDESC
+"This is a wide road winding away to the east and west, perhaps a relic
+of the Great Underground Empire you read about in history class. A passage
+leads up to the north.")
+      (UP TO DUNGEON)
+      (NORTH TO DUNGEON)
+      (EAST TO TOLL-GATE)
+      (WEST TO BEND)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL ROAD)>
+
+<ROOM TOLL-GATE
+      (IN ROOMS)
+      (DESC "Toll Gate")
+      (LDESC
+"You have reached a toll gate which spans the highway.")
+      (WEST TO HIGHWAY)
+      (EAST PER TOLL-GATE-CROSSING-F)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL ROAD)>
+
+<ROUTINE TOLL-GATE-CROSSING-F ()
+        <COND (<FSET? ,GATE ,OPENBIT>
+               ,OUTSIDE-STORE)
+              (,FLYING
+               <PERFORM ,V?CLIMB-OVER ,GATE>
+               <RFALSE>)
+              (T
+               <TELL "A sturdy toll gate blocks the highway." CR>
+               <RFALSE>)>>
+
+<OBJECT GATE
+       (IN TOLL-GATE)
+       (DESC "toll gate")
+       (SYNONYM GATE)
+       (ADJECTIVE TOLL STURDY)
+       (FLAGS NDESCBIT DOORBIT)
+       (ACTION GATE-F)>
+
+<ROUTINE GATE-F ()
+        <COND (<VERB? OPEN CLOSE>
+               <COND (<OPEN-CLOSE>
+                      <RTRUE>)
+                     (T
+                      <TELL "Only the gnome can do that." CR>)>)
+              (<VERB? REZROV>
+               <COND (<FSET? ,GATE ,OPENBIT>
+                      <RFALSE>)
+                     (,GNOME-SLEEPING
+                      <SETG GNOME-SLEEPING <>>
+                      <ENABLE <QUEUE I-GNOME 2>>
+                      <TELL
+"The gate flies open, waking the gnome, who leaps up and slams it closed
+again. \"Hey! This is a toll gate! Nobody gets through here without paying
+the one zorkmid toll. Not nobody, not no how.\""CR>)
+                     (T
+                      <SETG GNOME-SLEEPING T>
+                      <JIGS-UP
+"The gate flies open, but the gnome immediately slams it shut again.
+\"Trying to gate crash, huh? We have an answer for scofflaws like you.
+Hey, Tholl!\" A troll lumbers out of the toll booth. \"This is Tholl
+the Toll Troll. Tholl, remove this cheat.\" Tholl approaches and
+slices you neatly in half with his axe.">)>) 
+              (<VERB? CLIMB-OVER CLIMB-FOO>
+               <TELL
+"The gate extends to the roof of the tunnel, and there are pointed
+nasties all over it." CR>)>>
+
+<OBJECT BOOTH
+       (IN TOLL-GATE)
+       (DESC "toll booth")
+       (SYNONYM BOOTH)
+       (ADJECTIVE TOLL)
+       (FLAGS NDESCBIT)
+       (ACTION BOOTH-F)>
+
+<ROUTINE BOOTH-F ()
+        <COND (<VERB? THROUGH>
+               <COND (<FSET? ,GATE ,OPENBIT>
+                      <JIGS-UP
+"As you enter, you stumble over a sleeping troll. With stunning reflexes,
+he grabs a battle axe and minces you.">)
+                     (T
+                      <TELL
+"The booth is on the other side of the toll gate." CR>)>)
+              (<VERB? LOOK-INSIDE>
+               <COND (<FSET? ,GATE ,OPENBIT>
+                      <TELL "It's dark inside the toll booth." CR>)
+                     (T
+                      <PERFORM ,V?THROUGH ,BOOTH>
+                      <RTRUE>)>)>>
+
+<OBJECT GNOME
+       (IN TOLL-GATE)
+       (DESC "gnome")
+       (SYNONYM GNOME BEARD POCKET)
+       (ADJECTIVE FAT OLD LONG WHITE GNOME)
+       (FLAGS ACTORBIT)
+       (DESCFCN GNOME-DESCFCN)
+       (ACTION GNOME-F)>
+
+<GLOBAL GNOME-SLEEPING T>
+
+<ROUTINE GNOME-DESCFCN (RARG)
+        <COND (,GNOME-SLEEPING
+               <TELL
+"A fat old gnome with a long white beard is sleeping soundly just outside
+the toll booth. His loud snores echo around the caverns." CR>)
+              (T
+               <TELL
+"A chubby gnome stands behind the toll gate, grinning broadly." CR>)>>
+
+<ROUTINE GNOME-F ()
+        <COND (<EQUAL? ,GNOME ,WINNER>
+               <COND (,GNOME-SLEEPING
+                      <POOR-LISTENERS>
+                      <STOP>)
+                     (<AND <VERB? OPEN>
+                           <EQUAL? ,PRSO ,GATE>>
+                      <TELL
+"\"You'll have to pay the toll first,\" explains the gnome cheerfully,
+\"and the toll is one zorkmid.\"" CR>)
+                     (T
+                      <TELL
+"\"Conversing with customers is disallowed by union rules.\"" CR>
+                      <STOP>)>)
+              (<AND <VERB? SHAKE KICK>
+                    ,GNOME-SLEEPING>
+               <PERFORM ,V?ALARM ,GNOME>
+               <RTRUE>)
+              (<AND <VERB? LISTEN>
+                    ,GNOME-SLEEPING>
+               <TELL "The gnome snores loudly." CR>)
+              (<VERB? ALARM>
+               <COND (<NOT ,GNOME-SLEEPING>
+                      <TELL "He's awake!" CR>)
+                     (<FSET? ,GATE ,OPENBIT>
+                      <TELL
+"The gnome opens one eye and looks at you. \"You again! Just go through.
+Let me sleep.\" He begins snoring again." CR>)
+                     (,GNOME-ANNOYED
+                      <JIGS-UP
+"\"You again! You've interrupted my nap for the last time! THOLL!!\" A
+huge troll lumbers out of the toll booth and tears you into itsy-bitsy
+pieces.">)
+                     (T
+                      <SETG GNOME-SLEEPING <>>
+                      <ENABLE <QUEUE I-GNOME 2>>
+                      <TELL
+"The gnome stirs a bit and opens one eye, which wanders around until it
+notices you. He jumps to his feet. \"One zorkmid, please,\" he yells
+with a smile." CR>)>)
+              (<AND <VERB? GIVE ASK-ABOUT ASK-FOR>
+                    ,GNOME-SLEEPING>
+               <TELL "The gnome is asleep, remember?" CR>)
+              (<AND <FSET? ,GATE ,OPENBIT>
+                    <VERB? SEARCH LOOK-INSIDE PICK>
+                    <NOT ,COIN-STOLEN>
+                    <NOT ,FWEEPED>>
+               <SETG COIN-STOLEN T>
+               <MOVE ,ZORKMID ,PROTAGONIST>
+               <TELL
+"You carefully search the sleeping gnome, and take the zorkmid coin you
+find in his pocket!" CR>)
+              (<AND <VERB? GIVE>
+                    <EQUAL? ,PRSO ,ZORKMID>>
+               <COND (<FSET? ,ZORKMID ,ONBIT>
+                      <GNOME-REFUSES>
+                      <RTRUE>)>
+               <FSET ,GATE ,OPENBIT>
+               <SETG GNOME-SLEEPING T>
+               <MOVE ,ZORKMID ,DIAL>
+               <DISABLE <INT I-GNOME>>
+               <SETG SCORE <+ ,SCORE 20>>
+               <TELL
+"The gnome pockets the coin and opens the gate. Before you can take a
+step the gnome falls asleep again." CR>)
+              (<VERB? YOMIN>
+               <COND (,GNOME-SLEEPING
+                      <TELL
+"The thoughts of the sleeping gnome are focused on certain activities
+involving female gnomes. Embarrassed, you withdraw." CR>)
+                     (T
+                      <TELL
+"The thoughts of the gnome seem evenly divided between getting money from
+you and getting back to sleep." CR>)>)>>
+
+<GLOBAL COIN-STOLEN <>>
+
+<ROUTINE GNOME-REFUSES ()
+        <TELL
+"The gnome refuses, saying \"That coin is giving off light, and is
+therefore not legal tender.\"" CR>>
+
+<GLOBAL PATIENCE-COUNTER 0>
+
+<GLOBAL GNOME-ANNOYED <>>
+
+<ROUTINE I-GNOME ()
+        <ENABLE <QUEUE I-GNOME -1>>
+        <COND (<EQUAL? ,HERE ,TOLL-GATE>
+               <SETG PATIENCE-COUNTER <+ ,PATIENCE-COUNTER 1>>
+               <COND (<EQUAL? ,PATIENCE-COUNTER 5>
+                      <SETG GNOME-SLEEPING T>
+                      <DISABLE <INT I-GNOME>>
+                      <SETG GNOME-ANNOYED T>
+                      <TELL CR
+"\"Thanks for nothing, chum,\" growls the gnome as he resumes his nap." CR>)
+                     (T
+                      <TELL CR
+"\"Well?\" asks the gnome, tapping impatiently. \"You've interrupted
+my nap. Are you going to pay the toll, or not?\"" CR>)>)
+              (T
+               <SETG GNOME-SLEEPING T>
+                <SETG PATIENCE-COUNTER 3>
+               <DISABLE <INT I-GNOME>>
+               <RFALSE>)>>
+
+<ROOM OUTSIDE-STORE
+      (IN ROOMS)
+      (DESC "Outside Store")
+      (LDESC
+"A store lies to the south from this section of the east-west road. There is
+a sign over the entrance.")
+      (SOUTH TO STORE)
+      (IN TO STORE)
+      (WEST TO TOLL-GATE)
+      (EAST TO END-OF-HIGHWAY)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL ROAD)
+      (PSEUDO "SIGN" SIGN-PSEUDO "STORE" STORE-PSEUDO)>
+
+<ROUTINE SIGN-PSEUDO ()
+        <COND (<VERB? READ>
+               <FIXED-FONT-ON>
+               <TELL
+"|
+\"ZEKE'S APPLIANCE STORE|
+|
+ Official outlet for all|
+Frobozz Magic Appliances\"" CR>
+               <FIXED-FONT-OFF>)>>
+
+<ROUTINE STORE-PSEUDO ()
+        <COND (<VERB? THROUGH>
+               <COND (<EQUAL? ,HERE ,STORE>
+                      <LOOK-AROUND-YOU>)
+                     (T
+                      <DO-WALK ,P?SOUTH>)>)
+              (<VERB? EXIT DROP>
+               <COND (<EQUAL? ,HERE ,STORE>
+                      <DO-WALK ,P?NORTH>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? LOOK-INSIDE>
+               <COND (<EQUAL? ,HERE ,STORE>
+                      <LOOK-AROUND-YOU>)
+                     (T
+                      <MAKE-OUT>)>)>>
+
+<ROOM STORE
+      (IN ROOMS)
+      (SYNONYM GNOMES)
+      (DESC "Store")
+      (LDESC
+"This is an appliance store, apparently abandoned. The entrance
+lies to the north.")
+      (NORTH TO OUTSIDE-STORE)
+      (OUT TO OUTSIDE-STORE)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (PSEUDO "STORE" STORE-PSEUDO)>
+
+<OBJECT WAXER
+       (IN STORE)
+       (DESC "floor waxer")
+       (SYNONYM WAXER APPLIA)
+       (ADJECTIVE FLOOR)
+       (FLAGS TAKEBIT)
+       (SIZE 50)
+       (ACTION WAXER-F)>
+
+<ROUTINE WAXER-F ()
+        <COND (<VERB? LAMP-ON>
+               <COND (<HELD? ,WAXER>
+                      <TELL "Better put it down, first." CR>)
+                     (,FWEEPED
+                      <BATTY>)
+                     (<EQUAL? ,HERE ,LAGOON ,LAGOON-FLOOR>
+                      <JIGS-UP
+"The waxer short circuits in the water, electrocuting you and
+several nearby fishies.">)
+                     (<EQUAL? ,HERE ,MINE-FIELD>
+                      <SETG FLYING <>>
+                      <MOVE ,WAXER ,DIAL>
+                      <DO-WALK ,P?NORTH>)
+                     (T
+                      <TELL "The waxer whirrs about the ">
+                      <COND (<FSET? <LOC ,PROTAGONIST> ,VEHBIT>
+                             <TELL "vehicle">)
+                            (T
+                             <TELL "room">)>
+                      <TELL " for a minute, polishing the floor." CR>)>)
+              (<VERB? LAMP-OFF>
+               <TELL "It is." CR>)>> 
+
+;"END OF HIGHWAY and beyond is in MAZE.ZIL"
+
+<ROOM BEND
+      (IN ROOMS)
+      (SYNONYM DESERT)
+      (ADJECTIVE KOVALL)
+      (DESC "Bend")
+      (LDESC
+"The road curves here, heading east and southwest.")
+      (EAST TO HIGHWAY)
+      (SW TO EDGE-OF-CRATER)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (GLOBAL ROAD)>
+
+<ROOM EDGE-OF-CRATER
+      (IN ROOMS)
+      (DESC "Edge of Crater")
+      (LDESC
+"You are at the northeastern rim of a gigantic crater, the result of
+some ancient explosion. A wide underground highway, which ends
+at the crater's edge, leads northeast.")
+      (NE TO BEND)
+      (SW TO CRATER)
+      (DOWN TO CRATER)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (GLOBAL ROAD)
+      (PSEUDO "CRATER" CRATER-PSEUDO)>
+
+<ROOM CRATER
+      (IN ROOMS)
+      (SYNONYM SEA)
+      (ADJECTIVE OCEAN)
+      (DESC "Crater")
+      (NE TO EDGE-OF-CRATER)
+      (SOUTH TO WINDING-TUNNEL)
+      (WEST TO EDGE-OF-CHASM)
+      (NORTH TO SLIMY-ROOM)
+      (EAST PER CRATER-EXIT-F)
+      (NW PER CRATER-EXIT-F)
+      (SW PER CRATER-EXIT-F)
+      (SE PER CRATER-EXIT-F)
+      (OUT PER CRATER-OUT-F)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (PSEUDO "CRATER" CRATER-PSEUDO)
+      (ACTION CRATER-F)>
+
+<ROUTINE CRATER-F (RARG)
+        <COND (<EQUAL? .RARG ,M-LOOK>
+               <TELL "You are ">
+               <COND (,FLYING
+                      <TELL "floating near">)
+                     (T
+                      <TELL "standing in">)>
+               <TELL
+" the center of an enormous crater, strewn with debris.
+Several points around the perimeter look climbable." CR>)>>
+
+<ROUTINE CRATER-OUT-F ()
+        <V-WALK-AROUND>
+        <RFALSE>>
+
+<ROUTINE CRATER-EXIT-F ()
+        <COND (,FLYING
+               <TELL
+"As you try to fly over the rim here, a heavy gust of wind blows
+you back." CR>
+               <RFALSE>)
+              (T
+               <TELL
+"You attempt to climb the rim here, but the rubble is loose and you
+slide back down." CR>
+               <RFALSE>)>>
+
+<ROUTINE CRATER-PSEUDO ()
+        <COND (<VERB? THROUGH>
+               <COND (<EQUAL? ,HERE ,CRATER>
+                      <TELL "Where do you think you are?" CR>)
+                     (<EQUAL? ,HERE ,EDGE-OF-CRATER>
+                      <DO-WALK ,P?SW>)
+                     (<EQUAL? ,HERE ,EDGE-OF-CHASM>
+                      <DO-WALK ,P?EAST>)
+                     (<EQUAL? ,HERE ,SLIMY-ROOM>
+                      <DO-WALK ,P?SOUTH>)
+                     (T
+                      <DO-WALK ,P?NORTH>)>)
+              (<VERB? CLIMB-FOO>
+               <V-WALK-AROUND>)
+              (<VERB? LEAVE EXIT DISEMBARK>
+               <COND (<EQUAL? ,HERE ,CRATER>
+                      <DO-WALK ,P?UP>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)>>
+
+<ROOM EDGE-OF-CHASM
+      (IN ROOMS)
+      (SYNONYM VILLAG ACCARD)
+      (DESC "Edge of Chasm")
+      (LDESC
+"This is a strip of land to the east of a gaping chasm. You might try
+jumping across, but I'd advise against it. A wide crater lies to the east.")
+      (EAST TO CRATER)
+      (WEST PER CHASM-EXIT-F)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (PSEUDO "CHASM" CHASM-PSEUDO "CRATER" CRATER-PSEUDO)>
+
+<ROUTINE CHASM-EXIT-F ()
+        <COND (,FLYING
+               <TELL "You fly easily across the chasm..." CR CR>
+               <COND (<EQUAL? ,HERE ,BARE-PASSAGE>
+                      ,EDGE-OF-CHASM)
+                     (T
+                      ,BARE-PASSAGE)>)
+              (T
+               <TELL
+"If you really want to jump across the chasm, just say so." CR>
+               <RFALSE>)>>
+
+<ROOM BARE-PASSAGE
+      (IN ROOMS)
+      (SYNONYM AMATHR)
+      (DESC "Bare Passage")
+      (LDESC
+"This is a featureless tunnel, narrowing to the west. To the east is
+a deep gorge, probably too wide to jump across.")
+      (WEST TO ELBOW-ROOM)
+      (EAST PER CHASM-EXIT-F)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (PSEUDO "CHASM" CHASM-PSEUDO "GORGE" CHASM-PSEUDO)>
+
+<ROUTINE CHASM-PSEUDO ()
+        <COND (<VERB? LEAP>
+               <COND (<PROB 75>
+                      <JIGS-UP "Too bad. Didn't quite make it.">)
+                     (T
+                      <COND (<EQUAL? ,HERE ,EDGE-OF-CHASM>
+                             <GOTO ,BARE-PASSAGE>)
+                            (T
+                             <GOTO ,EDGE-OF-CHASM>)>)>)>> 
+
+<ROOM ELBOW-ROOM
+      (IN ROOMS)
+      (SYNONYM NYMPH NYMPHS)
+      (DESC "Elbow Room")
+      (LDESC
+"The tunnel turns a corner here. You could go either north or east.")
+      (NORTH TO TREE-ROOM)
+      (EAST TO BARE-PASSAGE)
+      (FLAGS INSIDEBIT RLANDBIT)>
+
+<ROOM TREE-ROOM
+      (IN ROOMS)
+      (SYNONYM GURTH MITHIC)
+      (DESC "Tree Room")
+      (LDESC
+"This is a tall room flooded with light from an unseen source. The only exit
+is south.")
+      (SOUTH TO ELBOW-ROOM)
+      (FLAGS INSIDEBIT RLANDBIT ONBIT)
+      (ACTION TREE-ROOM-F)>
+
+<ROUTINE TREE-ROOM-F (RARG)
+        <COND (<EQUAL? .RARG ,M-ENTER>
+               <PUT ,VEZZAS 3 0>
+               <RFALSE>)>>
+
+<OBJECT ZORKMID-TREE
+       (IN TREE-ROOM)
+       (DESC "zorkmid tree")
+       (LDESC
+"Growing in the center of the room is a tree, thick with foliage. As
+though to disprove the ancient adage, every branch, bow, and twig has
+a zorkmid coin growing on it.")
+       (SYNONYM TREE BRANCH BOW TWIG)
+       (ADJECTIVE ZORKMID)
+       (ACTION ZORKMID-TREE-F)>
+
+<ROUTINE ZORKMID-TREE-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL
+"It is laden with zorkmids, glinting in the light." CR>)
+              (<VERB? REZROV>
+               <V-SWANZO>)
+              (<VERB? CLIMB-FOO CLIMB-UP>
+               <TELL "The branches don't look sturdy enough." CR>)>>
+
+<OBJECT ZORKMID
+       (IN TREE-ROOM)
+       (DESC "zorkmid coin")
+       (SYNONYM ZORKMID COIN COINS TOLL)
+       (ADJECTIVE ZORKMID)
+       (SIZE 3)
+       (FLAGS TAKEBIT TRYTAKEBIT NDESCBIT)
+       (ACTION ZORKMID-F)>
+
+<ROUTINE ZORKMID-F ()
+        <COND (<AND <VERB? PICK>
+                    <FSET? ,PRSO ,TRYTAKEBIT>
+                    <EQUAL? ,ZORKMID ,PRSO>>
+               <PERFORM ,V?TAKE ,PRSO ,PRSI>
+               <RTRUE>)
+              (<AND <VERB? TAKE>
+                    <FSET? ,PRSO ,TRYTAKEBIT>>
+               <FCLEAR ,PRSO ,TRYTAKEBIT>
+               <FCLEAR ,PRSO ,NDESCBIT>
+               <MOVE ,ZORKMID-TREE ,DIAL>
+               <MOVE ,ZORKMID ,PROTAGONIST>
+               <SETG SCORE <+ ,SCORE 15>>
+               <TELL
+"As you pluck the first zorkmid, the tree shimmers and vanishes!
+(I guess it was just an illusion.) You are left holding a solitary
+zorkmid coin." CR>)
+              (<AND <VERB? COUNT EXAMINE>
+                    <IN? ,ZORKMID-TREE ,HERE>>
+               <TELL
+"There are countless coins, hanging from every branch of the tree." CR>)
+              (<VERB? EXAMINE>
+               <TELL
+"The coin pictures a man with an incredibly flat head, wearing a
+gaudy crown." CR>)
+              (<VERB? BITE>
+               <TELL "Yep, it's real." CR>)
+              (<VERB? RESEARCH>
+               <TELL
+"An article in the monetary section explains that the zorkmid was the
+unit of currency of the Great Underground Empire, and is still used in
+most parts of the kingdom today. A picture of a zorkmid coin is included. ">
+               <PERFORM ,V?EXAMINE ,ZORKMID>
+               <RTRUE>)>>
+
+<ROOM WINDING-TUNNEL
+      (IN ROOMS)
+      (SYNONYM INFOCO FIBBSB MAGICL SOFTSP)
+      (DESC "Winding Tunnel")
+      (LDESC
+"This is a meandering north-south tunnel. A side passage leads
+to the southwest.")
+      (NORTH TO CRATER)
+      (SOUTH TO HALL-OF-CARVINGS)
+      (SW TO PARK-ENTRANCE)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (PSEUDO "CRATER" CRATER-PSEUDO)>
+
+;"PARK-ENTRANCE and beyond is in PARK.ZIL"
+
+<ROOM HALL-OF-CARVINGS
+      (IN ROOMS)
+      (DESC "Hall of Carvings")
+      (NORTH TO WINDING-TUNNEL)
+      (SOUTH TO SOOTY-ROOM IF DRAGON-MOVED)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (ACTION HALL-OF-CARVINGS-F)>
+
+<ROUTINE HALL-OF-CARVINGS-F (RARG)
+        <COND (<EQUAL? .RARG ,M-LOOK>
+               <TELL
+"You have entered a large room whose walls are covered with intricate
+carvings. ">
+               <COND (,DRAGON-MOVED
+                      <TELL
+"A passage has been recently opened to the south, and is only partially
+blocked by a huge stone dragon, poised in the midst of an attack.">)
+                      (T
+                       <TELL
+"The largest and most striking carving, on the southern wall, is
+of a huge sleeping dragon!">)>
+               <TELL " A winding tunnel leads north." CR>)>>
+
+<GLOBAL DRAGON-MOVED <>>
+
+<GLOBAL MALYON-YONKED <>>
+
+<OBJECT DRAGON
+       (IN HALL-OF-CARVINGS)
+       (DESC "carving of a dragon")
+       (SYNONYM CARVIN DRAGON)
+       (ADJECTIVE HUGE STONE SLEEPI LARGES MOST STRIKI INTRIC)
+       (FLAGS NDESCBIT VOWELBIT)
+       (ACTION DRAGON-F)>
+
+<ROUTINE DRAGON-F ()
+        <COND (<VERB? MALYON>
+               <COND (,MALYON-YONKED
+                      <COND (,DRAGON-MOVED
+                             <JIGS-UP
+"The dragon comes to life again! He spews a tremendous gout of
+flame right at you!">)
+                            (T
+                             <SETG DRAGON-MOVED T>
+                             <TELL
+"The dragon is suddenly imbued with life and begins to move. It shakes
+itself loose from the wall, which crumbles down upon the dragon, revealing
+a southward passage! The dragon howls with pain and anger. Spotting you,
+the dragon rears back its head, smoke billowing from its nostrils. Then,
+just as it seems that you will be barbecued, the dragon reverts to
+stone!" CR>)>)
+                     (T
+                      <TELL
+"The dragon seems to shiver for a moment, but that is all." CR>)>)>>
+
+;"SOOTY-ROOM and beyond is in COAL.ZIL"
\ No newline at end of file
diff --git a/coal.zil b/coal.zil
new file mode 100644 (file)
index 0000000..cd107e9
--- /dev/null
+++ b/coal.zil
@@ -0,0 +1,1137 @@
+"COAL for
+                           SORCERER
+       (c) Copyright 1984 by Infocom Inc.  All Rights Reserved"
+
+<OBJECT COAL
+       (IN LOCAL-GLOBALS)
+       (DESC "lumps of coal")
+       (SYNONYM LUMPS COAL)
+       (FLAGS NDESCBIT NARTICLEBIT)
+       (ACTION COAL-F)>
+
+<ROUTINE COAL-F ()
+        <COND (<VERB? TAKE>
+               <TELL "Such menial tasks are best left to troglodytes." CR>)>>
+
+<ROOM SOOTY-ROOM
+      (IN ROOMS)
+      (SYNONYM RIVER)
+      (ADJECTIVE FRIGID)
+      (DESC "Sooty Room")
+      (LDESC
+"The walls and ceiling of this room are covered with soot and held up by
+timbers which don't look very sturdy. A winding tunnel leads north. From
+the east comes a sulfurous odor.")
+      (NORTH TO HALL-OF-CARVINGS)
+      (EAST PER SOOTY-ROOM-EXIT-F)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL SOOT)
+      (PSEUDO "TIMBER" TIMBER-PSEUDO)
+      (ACTION SOOTY-ROOM-F)>
+
+<ROUTINE SOOTY-ROOM-F (RARG)
+        <COND (<AND <EQUAL? .RARG ,M-ENTER>
+                    <NOT <FSET? ,SOOTY-ROOM ,TOUCHBIT>>>
+               <SETG SCORE <+ ,SCORE 20>>)>>
+
+<ROUTINE SOOTY-ROOM-EXIT-F ()
+        <COND (<FSET? ,COAL-BIN-ROOM ,TOUCHBIT>
+               <TELL
+"That passage is now completely blocked by a cave-in." CR>
+               <RFALSE>)
+              (T
+               ,COAL-BIN-ROOM)>>
+
+<ROUTINE TIMBER-PSEUDO ()
+        <COND (<VERB? MOVE>
+               <JIGS-UP "Part of the ceiling collapses onto you.">)>>
+
+<ROOM COAL-BIN-ROOM
+      (IN ROOMS)
+      (DESC "Coal Bin Room")
+      (LDESC
+"This is obviously the heart of a large coal mine, illuminated by a
+wall-mounted lamp. The bottom of a metal coal chute is visible at the
+north end of the room. Another chute continues downward at the southern
+end. A large coal bin is overflowing, and the floor is completely covered
+with lumps of coal. A passage leads east, but a western passage is blocked
+by rubble.")
+      (UP PER CHUTE-ENTER-F)
+      (NORTH PER CHUTE-ENTER-F)
+      (DOWN TO COVE)
+      (SOUTH TO COVE)
+      (EAST TO DIAL-ROOM)
+      (WEST PER SOOTY-ROOM-EXIT-F)
+      (FLAGS RLANDBIT INSIDEBIT ONBIT)
+      (GLOBAL UPPER-CHUTE LOWER-CHUTE COAL)
+      (PSEUDO "LAMP" LAMP-PSEUDO)
+      (ACTION COAL-BIN-ROOM-F)>
+
+<ROUTINE COAL-BIN-ROOM-F (RARG)
+        <COND (<EQUAL? .RARG ,M-ENTER>
+               <COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
+                      <SETG COMBO <RANDOM 873>>
+                      <PUT ,VEZZAS 5 0>
+                      <TELL
+"There is a rumbling noise behind you as the ceiling of the tunnel collapses,
+blocking your retreat! The air smells strongly of coal gas. ">
+                      <COND (,VILSTUED
+                             <ENABLE <QUEUE I-OLDER-SELF 2>>
+                             <TELL "Good thing you took that vilstu potion">)
+                            (T
+                             <ENABLE <QUEUE I-SUFFOCATE 2>>
+                             <TELL
+"You won't survive long in this atmosphere">)>
+                      <TELL "." CR CR>)
+                     (,GOLMACKED
+                      <ENABLE <QUEUE I-YOUNGER-SELF -1>>
+                      <MOVE ,YOUNGER-SELF ,HERE>
+                      <COND (,YOUNGER-HAS-SPELL-BOOK
+                             <COND (<IN? ,SPELL-BOOK ,LAGOON-FLOOR>
+                                    <SETG BOOK-BELONGS-IN-LAGOON T>)>
+                             <MOVE ,SPELL-BOOK ,YOUNGER-SELF>
+                             <FSET ,SPELL-BOOK ,TRYTAKEBIT>)>
+                      <SETG LIT <LIT? ,HERE>>)>)
+              (<AND <EQUAL? .RARG ,M-END>
+                    <PROB 35>>
+               <TELL CR
+"A few lumps of coal spill from the coal chute." CR>)>> 
+
+<GLOBAL YOUNGER-HAS-SPELL-BOOK <>>
+
+<GLOBAL BOOK-BELONGS-IN-LAGOON <>>
+
+<GLOBAL SUFFOCATE-WARNING <>>
+
+<ROUTINE I-SUFFOCATE ()
+        <CRLF>
+        <COND (,SUFFOCATE-WARNING
+               <JIGS-UP "Finally, the shortage of oxygen gets to you.">)
+              (T
+               <SETG SUFFOCATE-WARNING T>
+               <ENABLE <QUEUE I-SUFFOCATE 2>>
+               <TELL "You are about to pass out from the bad air." CR>)>>
+
+<OBJECT COAL-BIN
+       (IN COAL-BIN-ROOM)
+       (DESC "coal bin")
+       (SYNONYM BIN)
+       (ADJECTIVE LARGE COAL)
+       (FLAGS NDESCBIT)
+       (ACTION COAL-BIN-F)>
+
+<ROUTINE COAL-BIN-F ()
+        <COND (<VERB? LOOK-INSIDE>
+               <TELL "It's full of coal." CR>)
+              (<VERB? SEARCH DIG>
+               <TELL "You find nothing of interest." CR>)>>
+
+<OBJECT UPPER-CHUTE
+       (IN LOCAL-GLOBALS)
+       (DESC "upper coal chute")
+       (SYNONYM CHUTE)
+       (ADJECTIVE UPPER COAL METAL)
+       (FLAGS VOWELBIT)
+       (ACTION UPPER-CHUTE-F)>
+
+<OBJECT LOWER-CHUTE
+       (IN LOCAL-GLOBALS)
+       (DESC "lower coal chute")
+       (SYNONYM CHUTE)
+       (ADJECTIVE LOWER COAL METAL)
+       (ACTION LOWER-CHUTE-F)>
+
+<ROUTINE UPPER-CHUTE-F ()
+        <COND (<VERB? THROUGH LEAP>
+               <COND (<EQUAL? ,HERE ,TOP-OF-CHUTE ,SLANTED-ROOM>
+                      <DO-WALK ,P?DOWN>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? CLIMB-UP CLIMB-FOO>
+               <COND (<EQUAL? ,HERE ,TOP-OF-CHUTE>
+                      <BOTTOM-TOP-OF-CHUTE T>)
+                     (T
+                      <DO-WALK ,P?UP>)>)
+              (<VERB? CLIMB-DOWN>
+               <COND (<EQUAL? ,HERE ,COAL-BIN-ROOM>
+                      <BOTTOM-TOP-OF-CHUTE>)
+                     (T
+                      <DO-WALK ,P?DOWN>)>)
+              (<AND <VERB? PUT LOWER-INTO>
+                    <EQUAL? ,PRSI ,UPPER-CHUTE>>
+               <COND (<EQUAL? ,HERE ,TOP-OF-CHUTE ,SLANTED-ROOM>
+                      <COND (<AND <EQUAL? ,PRSO ,BEAM>
+                                  ,ROPE-TO-BEAM>
+                             <MOVE ,ROPE ,COAL-BIN-ROOM>
+                             <MOVE ,BEAM ,COAL-BIN-ROOM>
+                             <SETG ROPE-PLACED <>>
+                             <FCLEAR ,BEAM ,TRYTAKEBIT>
+                             <FCLEAR ,ROPE ,TRYTAKEBIT>
+                             <BEAM-AND-ROPE>)
+                            (<AND <EQUAL? ,PRSO ,ROPE>
+                                  ,ROPE-TO-BEAM>
+                             <COND (<DROP-BEAM-FIRST>
+                                    <RTRUE>)>
+                             <SETG ROPE-PLACED T>
+                             <FSET ,BEAM ,TRYTAKEBIT>
+                             <FSET ,ROPE ,TRYTAKEBIT>
+                             <MOVE ,ROPE ,HERE>
+                             <ROPE-HANGS>)
+                            (T
+                             <COND (<L? <GETP ,PRSO ,P?SIZE> 20>
+                                    <MOVE ,PRSO ,DIAL>)
+                                   (T
+                                    <MOVE ,PRSO ,COAL-BIN-ROOM>)>
+                             <DISAPPEARS-DOWN-CHUTE>)>)
+                     (<EQUAL? ,HERE ,COAL-BIN-ROOM>
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? LOOK-INSIDE>
+               <PERFORM ,V?RESEARCH ,UPPER-CHUTE>
+               <RTRUE>)>>
+
+<ROUTINE LOWER-CHUTE-F ()
+        <COND (<VERB? CLIMB-UP CLIMB-FOO>
+               <COND (<EQUAL? ,HERE ,COAL-BIN-ROOM>
+                      <BOTTOM-TOP-OF-CHUTE T>)
+                     (T
+                      <DO-WALK ,P?UP>)>)
+              (<VERB? CLIMB-DOWN THROUGH LEAP>
+               <COND (<EQUAL? ,HERE ,COVE>
+                      <BOTTOM-TOP-OF-CHUTE>)
+                     (T
+                      <DO-WALK ,P?DOWN>)>)
+              (<AND <VERB? PUT LOWER-INTO>
+                    <EQUAL? ,PRSI ,LOWER-CHUTE>>
+               <COND (<EQUAL? ,HERE ,COAL-BIN-ROOM>
+                      <COND (<AND <EQUAL? ,PRSO ,BEAM>
+                                  ,ROPE-TO-BEAM>
+                             <MOVE ,ROPE ,LAGOON-FLOOR>
+                             <MOVE ,BEAM ,LAGOON-FLOOR>
+                             <SETG ROPE-IN-LOWER-CHUTE <>>
+                             <FCLEAR ,ROPE ,TRYTAKEBIT>
+                             <BEAM-AND-ROPE>)
+                            (<AND <EQUAL? ,PRSO ,ROPE>
+                                  ,ROPE-TO-BEAM>
+                             <COND (<DROP-BEAM-FIRST>
+                                    <RTRUE>)>
+                             <SETG ROPE-IN-LOWER-CHUTE T>
+                             <FSET ,ROPE ,TRYTAKEBIT>
+                             <MOVE ,ROPE ,HERE>
+                             <ROPE-HANGS>)
+                            (T
+                             <MOVE ,PRSO ,LAGOON-FLOOR>
+                             <COND (<OR <FSET? ,PRSO ,SCROLLBIT>
+                                        <EQUAL? ,PRSO ,SPELL-BOOK>>
+                                    <FSET ,PRSO ,MUNGBIT>)>
+                             <DISAPPEARS-DOWN-CHUTE>)>)
+                     (<EQUAL? ,HERE ,COAL-BIN-ROOM>
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? LOOK-INSIDE>
+               <PERFORM ,V?RESEARCH ,LOWER-CHUTE>
+               <RTRUE>)>>
+
+<ROUTINE DROP-BEAM-FIRST ()
+        <COND (<HELD? ,BEAM>
+               <TELL "You'll have to drop the beam before doing that." CR>
+               <RTRUE>)
+              (T
+               <RFALSE>)>>
+
+<ROUTINE BEAM-AND-ROPE ()
+        <TELL "The beam and rope both slide into the chute." CR>>
+
+<ROUTINE ROPE-HANGS ()
+        <TELL "The rope hangs from the beam, into the chute." CR>>
+
+<ROUTINE DISAPPEARS-DOWN-CHUTE ()
+        <TELL "The " D ,PRSO " disappears into the chute." CR>>
+
+<OBJECT OLDER-SELF
+       (IN DIAL)
+       (DESC "your older self")
+       (SYNONYM STRANG SELF OLDER TWIN)
+       (ADJECTIVE YOUR MY OLDER)
+       (FLAGS ACTORBIT NARTICLEBIT CONTBIT OPENBIT SEARCHBIT)
+       (ACTION OLDER-SELF-F)>
+
+<ROUTINE OLDER-SELF-F ()
+        <COND (<EQUAL? ,WINNER ,OLDER-SELF>
+               <TELL "Your older self ignores your words." CR>
+               <STOP>)
+              (<VERB? EXAMINE>
+               <TELL
+,OLDER-INTRO " The stranger is carrying a smelly scroll." CR>)
+              (<AND <VERB? GIVE>
+                    <EQUAL? ,PRSO ,SPELL-BOOK>>
+               <MOVE ,SPELL-BOOK ,OLDER-SELF>
+               <FSET ,SPELL-BOOK ,TRYTAKEBIT>
+               <TELL "Your older self accepts the spell book gratefully." CR>)
+              (<AND <VERB? FOLLOW>
+                    ,TWIN-FOLLOW>
+               <DO-WALK ,P?DOWN>)
+              (<VERB? AIMFIZ>
+               <V-SWANZO>)
+              (<VERB? YOMIN>
+               <TELL
+"The thoughts of your older self center on attempting to breathe." CR>)>>
+
+;<GLOBAL MOVE-N-TABLE
+        <TABLE
+         0
+         PRSA
+         PRSO
+         PRSI
+         SPELL-BOOK IN YOUNGER-SELF?>>
+
+<GLOBAL MOVE-ONE-TABLE
+       <TABLE 0 0 0 0>>
+
+<GLOBAL MOVE-TWO-TABLE
+       <TABLE 0 0 0 0>>
+
+<GLOBAL MOVE-THREE-TABLE
+       <TABLE 0 0 0 0>>
+
+<GLOBAL OLDER-COUNTER 0>
+
+<GLOBAL COMBO-DISCOVERED <>>
+
+<GLOBAL OLDER-INTRODUCED <>>
+
+<GLOBAL OLDER-INTRO
+"Although your clothes are much cleaner and less torn, the stranger looks
+virtually like your own twin!">
+
+<ROUTINE I-OLDER-SELF ()
+        <ENABLE <QUEUE I-OLDER-SELF -1>>
+        <SETG OLDER-COUNTER <+ ,OLDER-COUNTER 1>>
+        <COND (<EQUAL? ,OLDER-COUNTER 1>
+               <MOVE ,OLDER-SELF ,COAL-BIN-ROOM>
+               <COND (<HELD? ,SPELL-BOOK>
+                      <SETG YOUNGER-HAS-SPELL-BOOK T>)>
+               <COND (<EQUAL? ,HERE ,COAL-BIN-ROOM>
+                      <TELL CR
+"Someone slides out of the coal chute, and lands near the bin. ">
+                      <TELL ,OLDER-INTRO CR>
+                      <SETG OLDER-INTRODUCED T>)
+                     (<EQUAL? ,HERE ,DIAL-ROOM>
+                      <TELL CR
+"You here a commotion from the room to the west." CR>)
+                     (T
+                      <DISABLE <INT I-OLDER-SELF>>
+                      <RFALSE>)>)
+              (<EQUAL? ,OLDER-COUNTER 2>
+               <DATA-TO-TABLE ,MOVE-ONE-TABLE>
+               <COND (<EQUAL? ,HERE ,COAL-BIN-ROOM>
+                      <CRLF>
+                      <COND (<NOT ,OLDER-INTRODUCED>
+                             <SETG OLDER-INTRODUCED T>
+                             <TELL
+"Someone is standing near the coal bin. " ,OLDER-INTRO CR CR>)>
+                      <SETG COMBO-DISCOVERED T>
+                      <OLDER-TELLS-COMBO>
+                      <COND (<NOT <IN? ,SPELL-BOOK ,OLDER-SELF>>
+                             <TELL
+" Your older self then looks at you, almost expectantly.">)>
+                      <CRLF>)
+                     (T
+                      <TELL CR
+"From the next room you glimpse someone gasping for air." CR>)>)
+              (<EQUAL? ,OLDER-COUNTER 3>
+               <DATA-TO-TABLE ,MOVE-TWO-TABLE>
+               <COND (<EQUAL? ,HERE ,COAL-BIN-ROOM>
+                      <COND (<NOT ,OLDER-INTRODUCED>
+                             <SETG OLDER-INTRODUCED T>
+                             <TELL CR
+"Someone is standing near the coal bin. " ,OLDER-INTRO CR>)>
+                      <COND (<IN? ,SPELL-BOOK ,OLDER-SELF>
+                             <MOVE ,SPELL-BOOK ,YOUNGER-SELF>
+                             <FSET ,SPELL-BOOK ,TRYTAKEBIT>
+                             <MOVE ,OLDER-SELF ,DIAL>
+                             <MOVE ,VARDIK-SCROLL ,DIAL>
+                             <SETG TWIN-FOLLOW T>
+                             <ENABLE <QUEUE I-TWIN-UNFOLLOW 1>>
+                             <TELL CR
+"Your look-alike dives into the lower chute and slides out of view." CR>)
+                            (<NOT ,COMBO-DISCOVERED>
+                             <CRLF>
+                             <OLDER-TELLS-COMBO>
+                             <CRLF>)
+                            (T
+                             <TELL CR
+"\"Give me...the spell book,\" croaks your older self." CR>)>)
+                     (T
+                      <MOVE ,OLDER-SELF ,DIAL>
+                      <MOVE ,VARDIK-SCROLL ,DIAL>
+                      <TELL CR
+"Someone in the coal bin room dives into the lower chute." CR>)>)
+              (T
+               <DATA-TO-TABLE ,MOVE-THREE-TABLE>
+               <DISABLE <INT I-OLDER-SELF>>
+               <COND (<AND <EQUAL? ,HERE ,COAL-BIN-ROOM>
+                           <IN? ,OLDER-SELF ,HERE>>
+                      <TELL CR
+"Your older self dives into the lower chute." CR>)>
+               <MOVE ,OLDER-SELF ,DIAL>
+               <MOVE ,VARDIK-SCROLL ,DIAL>)>>
+
+<ROUTINE OLDER-TELLS-COMBO ()
+        <TELL
+"Your disheveled \"twin\" is having difficulty breathing, but gasps,
+\"The combination is " N ,COMBO ".\"">>
+
+<GLOBAL TWIN-FOLLOW <>>
+
+<ROUTINE I-TWIN-UNFOLLOW ()
+        <SETG TWIN-FOLLOW <>>
+        <RFALSE>>
+
+<ROUTINE DATA-TO-TABLE (TABLE)
+        <PUT .TABLE 1 ,PRSA>
+        <PUT .TABLE 2 ,PRSO>
+        <PUT .TABLE 3 ,PRSI>>
+
+<OBJECT YOU-OBJECT
+       (IN DIAL)
+       (DESC "you")
+       (FLAGS NARTICLEBIT NDESCBIT)>
+
+<OBJECT YOUNGER-SELF
+       (IN DIAL)
+       (DESC "your younger self")
+       (SYNONYM SELF YOUNGE TWIN)
+       (ADJECTIVE YOUR YOUNGE MY)
+       (FLAGS ACTORBIT NARTICLEBIT CONTBIT OPENBIT SEARCHBIT)
+       (DESCFCN YOUNGER-SELF-DESCFCN)
+       (ACTION YOUNGER-SELF-F)>
+
+<GLOBAL COMBO-REVEALED <>>
+
+<ROUTINE YOUNGER-SELF-F ()
+        <COND (<EQUAL? ,YOUNGER-SELF ,WINNER>
+               <COND (<AND <VERB? COMBO>
+                           <EQUAL? ,PRSO ,INTNUM>>
+                      <COND (<EQUAL? ,P-NUMBER ,COMBO>
+                             <SETG COMBO-REVEALED T>)>
+                      <TELL
+"Your younger self seems surprised by your statement." CR>)
+                     (<AND <VERB? GIVE>
+                           <EQUAL? ,PRSO ,SPELL-BOOK>
+                           <EQUAL? ,PRSI ,ME>
+                           <SPELL-BOOK-PASS-OFF-CHECK>>
+                      <RTRUE>)
+                     (T
+                      <TELL
+"Your younger self seems confused, and doesn't respond." CR>
+                      <STOP>)>)
+              (<VERB? YOMIN>
+               <TELL
+"The thoughts of your younger self are confused, and seem to center on
+whether or not to perform a SAVE." CR>)
+              (<VERB? AIMFIZ>
+               <V-SWANZO>)
+              (<VERB? EXAMINE>
+               <TELL
+"It's almost like looking in a mirror. Your younger self looks confused">
+               <COND (<IN? ,SPELL-BOOK ,YOUNGER-SELF>
+                      <TELL ", and is carrying a spell book">)>
+               <TELL "." CR>)>>
+
+<ROUTINE YOUNGER-SELF-DESCFCN (TABLE)
+        <COND (<L? ,YOUNGER-COUNTER 3>
+               <SET TABLE ,MOVE-ONE-TABLE>)
+              (<EQUAL? ,YOUNGER-COUNTER 3>
+               <SET TABLE ,MOVE-TWO-TABLE>)
+              (T
+               <SET TABLE ,MOVE-THREE-TABLE>)>
+        <COND (<FSET? ,YOUNGER-SELF ,TOUCHBIT>
+               <TELL "Your younger self is here">
+               <COND (,YOUNGER-HAS-SPELL-BOOK
+                      <TELL ", holding your spell book." CR>)
+                     (T
+                      <TELL "." CR>)>)
+              (T
+               <FSET ,YOUNGER-SELF ,TOUCHBIT>
+               <TELL
+"Standing here, looking quite confused, is someone who could only be your
+younger self -- an exact duplicate of you, but cleaner and breathing with
+considerably less difficulty. You remember seeing this scene from another
+viewpoint just a short while ago.">
+               <COND (,YOUNGER-HAS-SPELL-BOOK
+                      <TELL
+" Among the items carried by your \"twin\" is your spell book.">)>
+               <CRLF>)>>
+
+<ROUTINE SPELL-BOOK-PASS-OFF-CHECK ("AUX" TABLE)
+        <COND (<EQUAL? ,YOUNGER-COUNTER 1>
+               <SET TABLE ,MOVE-ONE-TABLE>)
+              (<EQUAL? ,YOUNGER-COUNTER 2>
+               <SET TABLE ,MOVE-TWO-TABLE>)
+              (<EQUAL? ,YOUNGER-COUNTER 3>
+               <SET TABLE ,MOVE-THREE-TABLE>)
+              (T
+               <RFALSE>)>
+        <COND (<OR <AND <EQUAL? <GET .TABLE 2> ,SPELL-BOOK>
+                        <EQUAL? <GET .TABLE 3> ,OLDER-SELF>
+                        <EQUAL? <GET .TABLE 1> ,V?GIVE>>
+                   <AND <EQUAL? <GET .TABLE 2> ,OLDER-SELF>
+                        <EQUAL? <GET .TABLE 3> ,SPELL-BOOK>
+                        <EQUAL? <GET .TABLE 1> ,V?SGIVE>>>
+               <RTRUE>)
+              (T
+               <RFALSE>)>>
+
+<GLOBAL YOUNGER-COUNTER 0>
+
+<ROUTINE I-YOUNGER-SELF ()
+        <SETG YOUNGER-COUNTER <+ ,YOUNGER-COUNTER 1>>
+        <COND (<NOT <IN? ,YOUNGER-SELF ,HERE>>
+               <RFALSE>)
+              (<AND <NOT ,LIT>
+                    <NOT ,BLORTED>>
+               <RFALSE>)
+              (<EQUAL? ,YOUNGER-COUNTER 2>
+               <YOUNGER-ACTIONS ,MOVE-ONE-TABLE>)
+              (<EQUAL? ,YOUNGER-COUNTER 3>
+               <YOUNGER-ACTIONS ,MOVE-TWO-TABLE>)
+              (<EQUAL? ,YOUNGER-COUNTER 4>
+               <YOUNGER-ACTIONS ,MOVE-THREE-TABLE>)>>
+
+<ROUTINE YOUNGER-ACTIONS (TABLE)
+        <COND (<NOT <GET .TABLE 2>>
+               <PUT .TABLE 2 ,NOT-HERE-OBJECT>)>
+        <COND (<NOT <GET .TABLE 3>>
+               <PUT .TABLE 3 ,NOT-HERE-OBJECT>)>
+        <COND (<EQUAL? <GET .TABLE 2> ,OLDER-SELF>
+               <PUT .TABLE 2 ,YOU-OBJECT>)
+              (<EQUAL? <GET .TABLE 2> ,ME>
+               <PUT .TABLE 2 ,YOUNGER-SELF>)>
+        <COND (<EQUAL? <GET .TABLE 3> ,OLDER-SELF>
+               <PUT .TABLE 3 ,YOU-OBJECT>)
+              (<EQUAL? <GET .TABLE 3> ,ME>
+               <PUT .TABLE 3 ,YOUNGER-SELF>)>
+        <TELL CR "Your younger self ">
+        <COND (<OR <AND <EQUAL? <GET .TABLE 2> ,SPELL-BOOK>
+                        <EQUAL? <GET .TABLE 3> ,YOU-OBJECT>
+                        <EQUAL? <GET .TABLE 1> ,V?GIVE>>
+                   <AND <EQUAL? <GET .TABLE 2> ,YOU-OBJECT>
+                        <EQUAL? <GET .TABLE 3> ,SPELL-BOOK>
+                        <EQUAL? <GET .TABLE 1> ,V?SGIVE>>>
+               <MOVE ,SPELL-BOOK ,PROTAGONIST>
+               <FCLEAR ,SPELL-BOOK ,TRYTAKEBIT>
+               <TELL "hands you your spell book!" CR>)
+              (<OR <EQUAL? <GET .TABLE 1> ,V?VERBOSE ,V?BRIEF ,V?SUPER-BRIEF>
+                   <EQUAL? <GET .TABLE 1> ,V?SCORE ,V?SCRIPT ,V?UNSCRIPT>>
+               <TELL "is performing a spell of high technology." CR>)
+              (<OR <EQUAL? <GET .TABLE 1> ,V?ANSWER ,V?REPLY ,V?CURSE>
+                   <EQUAL? <GET .TABLE 1> ,V?HELLO ,V?TELL ,V?ASK-FOR>
+                   <EQUAL? <GET .TABLE 1> ,V?SAY ,V?THANK ,V?YELL>
+                   <EQUAL? <GET .TABLE 1> ,V?ASK-ABOUT>>
+               <TELL "is attempting to talk." CR>)
+              (<OR <EQUAL? <GET .TABLE 1> ,V?CAST ,V?GNUSTO ,V?FROTZ>
+                   <EQUAL? <GET .TABLE 1> ,V?REZROV ,V?IZYUK ,V?FWEEP>
+                   <EQUAL? <GET .TABLE 1> ,V?AIMFIZ ,V?SWANZO ,V?VARDIK>
+                   <EQUAL? <GET .TABLE 1> ,V?MEEF ,V?PULVER ,V?GOLMAC>
+                   <EQUAL? <GET .TABLE 1> ,V?YOMIN ,V?VEZZA ,V?GASPAR>
+                   <EQUAL? <GET .TABLE 1> ,V?YONK ,V?MALYON>>
+               <TELL "is casting a familiar spell." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?INVENTORY>
+               <TELL "is doing an inventory." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?DIAGNOSE>
+               <TELL "is checking for wounds." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?WAIT>
+               <TELL "is doing absolutely nothing." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?SLEEP>
+               <TELL "is trying to fall asleep!" CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?LEARN>
+               <TELL "is studying a spell book." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?SPELLS>
+               <TELL "seems lost in thought." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?LOOK>
+               <TELL "is looking around." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?LEAP ,V?SKIP>
+               <TELL "is hopping around like a crazed rabbit." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?WALK ,V?WALK-AROUND ,V?WALK-TO>
+               <TELL "is moving around." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?GIVE>
+               <TELL "is trying to give">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL " to">
+               <ARTICLE <GET .TABLE 3>>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?SHOW>
+               <TELL "is trying to show">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL " to">
+               <ARTICLE <GET .TABLE 3>>
+               <TELL "." CR>)
+              (<OR <EQUAL? <GET .TABLE 1> ,V?RAISE ,V?LOWER ,V?RUB>
+                   <EQUAL? <GET .TABLE 1> ,V?MOVE ,V?SHAKE ,V?PUSH>
+                   <EQUAL? <GET .TABLE 1> ,V?KICK ,V?PUT-ON ,V?PUSH-TO>
+                   <EQUAL? <GET .TABLE 1> ,V?PUT ,V?PUT-UNDER ,V?PUT-BEHIND>>
+               <COND (<AND <EQUAL? <GET .TABLE 1> ,V?PUT>
+                           <EQUAL? <GET .TABLE 2> ,SPELL-BOOK>
+                           <EQUAL? <GET .TABLE 3> ,LOWER-CHUTE>>
+                      <MOVE ,SPELL-BOOK ,DIAL>)>
+               <TELL "is attempting to move">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<OR <EQUAL? <GET .TABLE 1> ,V?EXAMINE ,V?LOOK-INSIDE>
+                   <EQUAL? <GET .TABLE 1> ,V?LOOK-BEHIND ,V?LOOK-UNDER>>
+               <TELL "is examining">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?BOARD ,V?ENTER ,V?THROUGH>
+               <TELL "is trying to get into">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?THROW ,V?THROW-OFF>
+               <TELL "is performing aeronautical experiments with">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?WHAT ,V?WHERE ,V?WHO>
+               <TELL "is asking about">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL ", addressing the question to no one in particular." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?ATTACK ,V?KILL ,V?MUNG>
+               <TELL "is attacking">
+               <ARTICLE <GET .TABLE 2> T>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?EAT ,V?DRINK>
+               <TELL "is attempting to ingest">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<OR
+                <EQUAL? <GET .TABLE 1> ,V?CLIMB-ON ,V?CLIMB-UP ,V?CLIMB-FOO>
+                <EQUAL? <GET .TABLE 1> ,V?CLIMB-DOWN ,V?CLIMB-OVER>>
+               <TELL "is climbing">
+               <ARTICLE <GET .TABLE 2> T>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?READ>
+               <TELL "is reading">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?SMELL>
+               <TELL "is smelling">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?LISTEN>
+               <TELL "seems to be listening to">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?KISS>
+               <TELL "tries to kiss">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)         
+              (<EQUAL? <GET .TABLE 1> ,V?OPEN>
+               <TELL "is trying to open">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?CLOSE>
+               <TELL "is closing">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?EXIT ,V?DISEMBARK>
+               <TELL "is trying to leave">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?TAKE>
+               <TELL "is reaching for">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (<EQUAL? <GET .TABLE 1> ,V?DROP>
+               <TELL "is dropping">
+               <ARTICLE <GET .TABLE 2>>
+               <TELL "." CR>)
+              (T
+               <TELL "is doing something." CR>)>>
+
+<ROOM DIAL-ROOM
+      (IN ROOMS)
+      (SYNONYM FALLS)
+      (ADJECTIVE ARAGAI)
+      (DESC "Dial Room")
+      (LDESC
+"On the eastern wall is a heavy door with a dial set into it. There is a
+sign on the door. Another exit leads west, and a wall-mounted lamp provides
+illumination. The floor is deeply covered with lumps of coal.")
+      (EAST TO SHAFT-BOTTOM IF DIAL-DOOR IS OPEN)
+      (WEST TO COAL-BIN-ROOM)
+      (FLAGS RLANDBIT INSIDEBIT ONBIT)
+      (GLOBAL DIAL-DOOR COAL)
+      (PSEUDO "LAMP" LAMP-PSEUDO)>
+
+<ROUTINE LAMP-PSEUDO ()
+        <COND (<VERB? TAKE>
+               <PERFORM ,V?TAKE ,KEROSENE-LAMP>
+               <RTRUE>)>>
+
+<OBJECT DIAL-DOOR
+       (IN LOCAL-GLOBALS)
+       (DESC "heavy door")
+       (SYNONYM DOOR DOORS SIGN)
+       (ADJECTIVE HEAVY)
+       (FLAGS DOORBIT READBIT NDESCBIT)
+       (TEXT
+"\"See the foreman for the current combination.|
+|
+(signed)|
+Ernie Flathead, Manager|
+GUE Coal Mine #502\"")
+       (ACTION DIAL-DOOR-F)>
+
+<GLOBAL COAL-DOOR-POINT 20>
+
+<ROUTINE DIAL-DOOR-F ()
+        <COND (<AND <VERB? OPEN>
+                    <NOT <FSET? ,DIAL-DOOR ,OPENBIT>>>
+               <COND (,DIAL-OPEN
+                      <FSET ,DIAL-DOOR ,OPENBIT>
+                      <SETG SCORE <+ ,SCORE ,COAL-DOOR-POINT>>
+                      <SETG COAL-DOOR-POINT 0>
+                      <TELL "The door opens easily." CR>)
+                     (T
+                      <TELL "The door won't budge." CR>)>)
+              (<VERB? EXAMINE>
+               <PERFORM ,V?EXAMINE ,DIAL>
+               <RTRUE>)
+              (<VERB? REZROV>
+               <JIGS-UP
+"The door swings open as a loud alarm sounds. Laser beams criss-cross the
+room, glinting off the blades of the thousand flying daggers. A hundred
+well-armed and vicious kobolds rush into the room, swinging battle axes.">)>>
+
+;"the object DIAL also contains all objects that have no current LOC. This
+ allows MOBY-FIND to find these LOC-less objects. Yes, this is bizarre."
+
+<OBJECT DIAL
+       (IN DIAL-ROOM)
+       (DESC "combination dial")
+       (SYNONYM DIAL)
+       (ADJECTIVE COMBIN)
+       (FLAGS NDESCBIT)
+       (ACTION DIAL-F)>
+
+<ROUTINE DIAL-F ()
+        <COND (<VERB? EXAMINE READ>
+               <TELL
+"Set in the door is a large circular dial which can be set to any number
+up to 873. It is currently set to " N ,CURRENT-SETTING "." CR>)
+              (<VERB? TURN>
+               <COND (,FWEEPED
+                      <BATTY>)
+                     (<OR <NOT ,PRSI>
+                          <NOT <EQUAL? ,PRSI ,INTNUM>>>
+                      <TELL "You must say what number to turn it to." CR>)
+                     (<EQUAL? ,CURRENT-SETTING ,P-NUMBER>
+                      <TELL
+"The dial is already set to " N ,CURRENT-SETTING "." CR>)
+                     (T
+                      <SETG CURRENT-SETTING ,P-NUMBER>
+                      <TELL "The dial is now set to " N ,CURRENT-SETTING ".">
+                      <COND (<EQUAL? ,CURRENT-SETTING ,COMBO>
+                             <TELL " You hear a click from inside the door.">
+                             <SETG DIAL-OPEN T>)>
+                      <CRLF>)>)>>
+
+<GLOBAL CURRENT-SETTING 0>
+
+<GLOBAL DIAL-OPEN <>>
+
+<GLOBAL COMBO 0> ;"set-up by COAL-BIN-ROOM's M-ENTER"
+
+<OBJECT ROPE
+       (IN SHAFT-BOTTOM)
+       (DESC "rope")
+       (FDESC "Lying in one corner is a coil of rope.")
+       (SYNONYM COIL ROPE)
+       (FLAGS TAKEBIT)
+       (SIZE 20)
+       (ACTION ROPE-F)>
+
+<GLOBAL ROPE-TO-BEAM <>>
+
+<GLOBAL ROPE-PLACED <>>
+
+<GLOBAL ROPE-IN-LOWER-CHUTE <>>
+
+<ROUTINE ROPE-F ()
+        <COND (<AND <VERB? PUT>
+                    <NOT <ACCESSIBLE? ,ROPE>>>
+               <RFALSE>)
+              (<AND <VERB? TIE>
+                    <EQUAL? ,PRSI ,BEAM>>
+               <TELL "The rope is ">
+               <COND (,ROPE-TO-BEAM
+                      <TELL "already ">)>
+               <TELL "tied securely to the center of the beam." CR>
+               <SETG ROPE-TO-BEAM T>)
+              (<AND <VERB? TIE>
+                    <EQUAL? ,PRSI ,COAL-BIN>>
+               <TELL "The bin is too large." CR>)
+              (<AND <VERB? UNTIE>
+                    ,ROPE-TO-BEAM>
+               <SETG ROPE-TO-BEAM <>>
+               <TELL "The rope is untied." CR>)
+              (<VERB? CLIMB-DOWN>
+               <COND (<AND <NOT ,ROPE-PLACED>
+                           <NOT ,ROPE-IN-LOWER-CHUTE>>
+                      <TELL
+"It would be hard to climb down the rope in its current state." CR>)
+                     (T
+                      <DO-WALK ,P?DOWN>)>)
+              (<VERB? CLIMB-UP>
+               <TELL "Do you also charm snakes?" CR>)
+              (<VERB? EXAMINE>
+               <COND (<OR ,ROPE-PLACED ,ROPE-IN-LOWER-CHUTE>
+                      <TELL
+"The rope is tied to the beam and hangs into the chute." CR>)
+                     (,ROPE-TO-BEAM
+                      <TELL
+"It is tied to the center of the timber." CR>)>)>>
+
+<ROOM SHAFT-BOTTOM
+      (IN ROOMS)
+      (SYNONYM CASTLE LARGON)
+      (ADJECTIVE CASTLE LARGON)
+      (DESC "Shaft Bottom")
+      (LDESC
+"You are at the bottom of an air shaft which looks climbable. A heavy
+door leads west.")
+      (UP TO SHAFT-TOP)
+      (WEST TO DIAL-ROOM IF DIAL-DOOR IS OPEN)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (GLOBAL DIAL-DOOR)
+      (PSEUDO "SHAFT" SHAFT-PSEUDO)
+      (ACTION SHAFT-BOTTOM-F)>
+
+<ROUTINE SHAFT-BOTTOM-F (RARG)
+        <COND (<AND <EQUAL? .RARG ,M-ENTER>
+                    <FSET? ,VARDIK-SCROLL ,TOUCHBIT>>
+               <SETG BREATH-SHORTAGE 3>
+               <I-BREATHE>)>>
+
+<ROOM SHAFT-TOP
+      (IN ROOMS)
+      (SYNONYM TROLL TROLLS THOLL)
+      (DESC "Shaft Top")
+      (LDESC
+"You are deep inside a large coal mine, at the top of an air shaft. You
+could descend into the shaft; passages in many directions lead further
+into the mine.")
+      (DOWN TO SHAFT-BOTTOM)
+      (NE TO COAL-MINE-2)
+      (NW TO COAL-MINE-1)
+      (SW TO COAL-MINE-1)
+      (EAST TO SHAFT-TOP)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (PSEUDO "SHAFT" SHAFT-PSEUDO)>
+
+<ROUTINE SHAFT-PSEUDO ()
+        <COND (<VERB? CLIMB-DOWN>
+               <COND (<EQUAL? ,HERE ,SHAFT-TOP>
+                      <DO-WALK ,P?DOWN>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? CLIMB-FOO CLIMB-UP>
+               <COND (<EQUAL? ,HERE ,SHAFT-TOP>
+                      <LOOK-AROUND-YOU>)
+                     (T
+                      <DO-WALK ,P?UP>)>)
+              (<AND <VERB? PUT-ON>
+                    <EQUAL? ,PRSO ,BEAM>>
+               <TELL "The shaft is too wide." CR>)
+              (<AND <VERB? PUT>
+                    <EQUAL? ,HERE ,SHAFT-TOP>>
+               <COND (<AND <EQUAL? ,PRSO ,ROPE>
+                           ,ROPE-TO-BEAM>
+                      <TELL "The rope now dangles into the shaft." CR>)
+                     (T
+                      <MOVE ,PRSO ,SHAFT-BOTTOM>
+                      <TELL
+"It disappears into the shaft. A moment later comes a distant thud." CR>)>)>>
+
+<OBJECT BEAM
+       (IN COAL-MINE-1)
+       (DESC "beam of wood")
+       (FDESC
+"Lying near the mouth of one passage is a wooden timber, probably left over
+from the construction of the mine.")
+       (SYNONYM BEAM WOOD TIMBER)
+       (ADJECTIVE WOODEN)
+       (SIZE 40)
+       (FLAGS TAKEBIT)
+       (ACTION BEAM-F)>
+
+<ROUTINE BEAM-F ()
+        <COND (<AND <VERB? PUT-ON>
+                    <EQUAL? ,PRSI ,UPPER-CHUTE ,LOWER-CHUTE>>
+               <MOVE ,BEAM ,HERE>
+               <TELL
+"The beam is now lying across the mouth of the chute." CR>)
+              (<AND <VERB? TAKE>
+                    ,ROPE-PLACED>
+               <TELL
+"You'd have to take the rope out of the chute first." CR>)
+              (<VERB? EXAMINE>
+               <COND (,ROPE-PLACED
+                      <TELL "A rope hangs from the beam, into the chute." CR>)
+                     (,ROPE-TO-BEAM
+                      <TELL "A rope is tied to the beam." CR>)>)>>
+
+<ROOM COAL-MINE-1
+      (IN ROOMS)
+      (SYNONYM ENTHAR)
+      (ADJECTIVE KING)
+      (DESC "Coal Mine")
+      (LDESC
+"You are in a winding tunnel in a large coal mine. Passages lead off in
+many directions.")
+      (SOUTH TO SHAFT-TOP)
+      (NE TO COAL-MINE-2)
+      (NW TO COAL-MINE-3)
+      (EAST TO SHAFT-TOP)
+      (FLAGS RLANDBIT INSIDEBIT)>
+
+<ROOM COAL-MINE-2
+      (IN ROOMS)
+      (SYNONYM DUNCAN)
+      (ADJECTIVE KING)
+      (DESC "Coal Mine")
+      (LDESC
+"You are in a winding tunnel in a large coal mine. Passages lead off in
+many directions.")
+      (UP TO COAL-MINE-3)
+      (SE TO COAL-MINE-2)
+      (WEST TO COAL-MINE-1)
+      (NORTH TO COAL-MINE-3)
+      (SOUTH TO SHAFT-TOP)
+      (FLAGS INSIDEBIT RLANDBIT)>
+
+<ROOM COAL-MINE-3
+      (IN ROOMS)
+      (SYNONYM FLATHE)
+      (ADJECTIVE LORD DIMWIT)
+      (DESC "Coal Mine")
+      (LDESC
+"You are in a winding tunnel in a large coal mine. Passages lead off in
+many directions.")
+      (SW TO COAL-MINE-1)
+      (DOWN TO COAL-MINE-2)
+      (NORTH TO COAL-MINE-3)
+      (EAST TO COAL-MINE-2)
+      (WEST TO TOP-OF-CHUTE)
+      (FLAGS INSIDEBIT RLANDBIT)>
+
+<ROOM TOP-OF-CHUTE
+      (IN ROOMS)
+      (DESC "Top of Chute")
+      (LDESC
+"You are at the western end of the coal mine. A metal chute leads downward.")
+      (DOWN PER CHUTE-EXIT-F)
+      (EAST TO COAL-MINE-3)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (GLOBAL UPPER-CHUTE)
+      (ACTION TOP-OF-CHUTE-F)>
+
+<ROUTINE TOP-OF-CHUTE-F (RARG)
+        <COND (<AND <EQUAL? .RARG ,M-END>
+                    <NOT <IN? ,TROGLODYTE ,HERE>>
+                    <OR ,LIT ,BLORTED>
+                    <PROB 30>>
+               <MOVE ,TROGLODYTE ,HERE>
+               <ENABLE <QUEUE I-TROGLODYTE 2>>
+               <TELL CR
+"A troglodyte trundles in and dumps a load of coal into the chute." CR>)>>
+
+<ROUTINE I-TROGLODYTE ()
+        <MOVE ,TROGLODYTE ,DIAL>
+        <COND (<EQUAL? ,HERE ,TOP-OF-CHUTE>
+               <SETG TROG-FOLLOW T>
+               <ENABLE <QUEUE I-TROG-UNFOLLOW 1>>
+               <TELL CR
+"The troglodyte trundles off into the coal mine." CR>)>>
+
+<GLOBAL TROG-FOLLOW <>>
+
+<ROUTINE I-TROG-UNFOLLOW ()
+        <SETG TROG-FOLLOW <>>
+        <RFALSE>>
+
+<OBJECT TROGLODYTE
+       (IN DIAL)
+       (DESC "troglodyte")
+       (SYNONYM TROGLO)
+       (FLAGS ACTORBIT)
+       (ACTION TROGLODYTE-F)>
+
+<ROUTINE TROGLODYTE-F ()
+        <COND (<EQUAL? ,WINNER ,TROGLODYTE>
+               <TELL "The troglodyte ignores you." CR>
+               <STOP>)
+              (<AND <VERB? FOLLOW>
+                    ,TROG-FOLLOW>
+               <TELL "You didn't notice which passage it took." CR>)
+              (<VERB? YOMIN>
+               <TELL
+"The troglodyte is worried about filling his coal quotas." CR>)
+              (<VERB? RESEARCH>
+               <TELL
+"Semi-intelligent subterranean beasts frequently used to dig and haul
+coal." CR>)>>
+
+<ROUTINE CHUTE-EXIT-F ()
+        <COND (,ROPE-PLACED
+               <TELL
+"You climb carefully down the rope, which is slippery with coal dust, ">
+               <COND (<G? ,AWAKE 0>
+                      <TELL
+"but because of your fatigue you lose your grip.">
+                      <ORANGE-FLASH>
+                      <CRLF> <CRLF>
+                      ,COAL-BIN-ROOM)
+                     (<NOT <NOTHING-HELD?>>
+                      <TELL
+"but because of your load you are unable to maintain your grip.">
+                      <ORANGE-FLASH>
+                      <CRLF> <CRLF>
+                      ,COAL-BIN-ROOM)
+                     (T
+                      <TELL
+"and soon reach a small opening off the chute. You clamber inside..." CR CR>
+                      <SETG SCORE <+ ,SCORE 20>>
+                      <FCLEAR ,VARDIK-SPELL ,INVISIBLE>
+                      ,SLANTED-ROOM)>)
+              (T
+               <ROPE-BEAM-CHECK T>
+               <TELL "Wheee!!! ">
+               <ORANGE-FLASH>
+               <TELL " You land beside an enormous bin of coal." CR CR>
+               ,COAL-BIN-ROOM)>>
+
+<ROUTINE ORANGE-FLASH ()
+        <TELL " As you ">
+        <COND (,FLYING
+               <TELL "float">)
+              (T
+               <TELL "whiz">)>
+        <TELL
+" down the chute, you notice a flash of orange light spilling
+from an opening onto the chute.">>
+
+<ROOM SLANTED-ROOM
+      (IN ROOMS)
+      (SYNONYM FROBOZ WIZARD)
+      (DESC "Slanted Room")
+      (LDESC
+"This small room has a slanted roof, presumably due to the coal chute
+which passes overhead. You can reenter the chute to the east.")
+      (EAST PER SLANTED-ROOM-EXIT-F)
+      (DOWN PER SLANTED-ROOM-EXIT-F)
+      (UP PER CHUTE-ENTER-F)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL UPPER-CHUTE)
+      (ACTION SLANTED-ROOM-F)>
+
+<ROUTINE SLANTED-ROOM-F (RARG)
+        <COND (<EQUAL? .RARG ,M-ENTER>
+               <PUT ,VEZZAS 6 0>)>>
+
+<ROUTINE SLANTED-ROOM-EXIT-F ()
+        <COND (<AND <NOT <IN? ,GOLMAC-SCROLL ,PROTAGONIST>>
+                    <NOT ,GOLMACKED>>
+               <POOF>
+               <RFALSE>)
+              (<AND <IN? ,GOLMAC-SCROLL ,PROTAGONIST>
+                    ,GOLMACKED>
+               <POOF>
+               <RFALSE>)
+              (T
+               <TELL "Wheeee!!!" CR CR>
+               ,COAL-BIN-ROOM)>>
+
+<OBJECT KEROSENE-LAMP
+       (IN SLANTED-ROOM)
+       (DESC "kerosene lamp")  
+       (SYNONYM LAMP DOOR COMPAR BOWL)
+       (ADJECTIVE KEROSE SMALL METAL GLASS)
+       (FLAGS ONBIT CONTBIT OPENBIT SEARCHBIT)
+       (CAPACITY 5)
+       (DESCFCN KEROSENE-LAMP-DESCFCN)
+       (ACTION KEROSENE-LAMP-F)>
+
+<ROUTINE KEROSENE-LAMP-DESCFCN (RARG)
+        <TELL
+"Mounted securely to the wall is a kerosene lamp, filling the room
+with a serene orange glow. ">
+        <COND (<FSET? ,KEROSENE-LAMP ,OPENBIT>
+               <TELL "A small compartment at its base is open.">)>
+        <CRLF>>
+
+<ROUTINE KEROSENE-LAMP-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL
+"The lamp has a glass bowl where the flame burns. Below is a small metal
+door, perhaps a compartment for storing extra wicks or kerosene." CR>)
+              (<VERB? TAKE>
+               <TELL "It's mounted securely to the wall." CR>)
+              (<VERB? LAMP-OFF>
+               <TELL "You can't spare the breath to blow out the lamp." CR>)>>
+
+<OBJECT VARDIK-SCROLL
+       (IN OLDER-SELF)
+       (DESC "smelly scroll")
+       (SYNONYM SCROLL)
+       (ADJECTIVE SMELLY)
+       (SIZE 3)
+       (FLAGS TAKEBIT TRANSBIT CONTBIT READBIT SCROLLBIT)
+       (ACTION SCROLL-F)>
+
+<OBJECT VARDIK-SPELL
+       (IN VARDIK-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE VARDIK)
+       (DESC "vardik spell")
+       (TEXT "shield a mind from an evil spirit")
+       (SIZE 1)
+       (COUNT 0)
+       (FLAGS NDESCBIT SPELLBIT INVISIBLE)
+       (ACTION SPELL-F)>
+
+<OBJECT GOLMAC-SCROLL
+       (IN SLANTED-ROOM)
+       (DESC "shimmering scroll")
+       (SYNONYM SCROLL)
+       (ADJECTIVE SHIMME)
+       (SIZE 3)
+       (FLAGS TAKEBIT TRANSBIT CONTBIT READBIT SCROLLBIT)
+       (ACTION SCROLL-F)>
+
+<OBJECT GOLMAC-SPELL
+       (IN GOLMAC-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE GOLMAC)
+       (DESC "golmac spell")
+       (TEXT "travel temporally")
+       (SIZE 1)
+       (COUNT 0)
+       (FLAGS NDESCBIT SPELLBIT)
+       (ACTION SPELL-F)>
+
+<GLOBAL GOLMACKED <>>
+
+<ROUTINE CHUTE-ENTER-F ()
+        <COND (,FLYING
+               <TELL "The chute is too narrow to fly up.">)
+              (T
+               <TELL "The chute is too steep and slippery.">)>
+        <CRLF>
+        <RFALSE>>
+
+<ROUTINE BOTTOM-TOP-OF-CHUTE ("OPTIONAL" (TOP <>))
+        <TELL "You're already at the ">
+        <COND (.TOP
+               <TELL "top">)
+              (T
+               <TELL "bottom">)>
+        <TELL " of the chute." CR>>
\ No newline at end of file
diff --git a/end.zil b/end.zil
new file mode 100644 (file)
index 0000000..e605d44
--- /dev/null
+++ b/end.zil
@@ -0,0 +1,888 @@
+"END for
+                           SORCERER
+       (c) Copyright 1984 by Infocom, Inc.  All Rights Reserved"
+
+<ROOM COVE
+      (IN ROOMS)
+      (DESC "Lagoon Shore")
+      (LDESC
+"This is a narrow beach between a small cove to the east and tall
+cliffs to the west. The shore curves to the southeast and northeast.
+A metal chute leads up into the cliff.")
+      (NORTH "There's a tall cliff there.")
+      (NE TO OCEAN-NORTH)
+      (EAST TO LAGOON)
+      (SE TO OCEAN-SOUTH)
+      (SOUTH "There's a tall cliff there.")
+      (SW "There's a tall cliff there.")
+      (WEST "There's a tall cliff there.")
+      (NW "There's a tall cliff there.")
+      (IN TO LAGOON)
+      (UP PER CHUTE-ENTER-F)
+      (FLAGS RLANDBIT ONBIT)
+      (GLOBAL LOWER-CHUTE LAGOON-OBJECT WATER BEACH)
+      (PSEUDO "CLIFF" CLIFF-PSEUDO "CLIFFS" CLIFF-PSEUDO)
+      (ACTION COVE-F)> 
+
+<GLOBAL POOFED <>>
+
+<ROUTINE COVE-F (RARG "AUX" (X <>))
+        <COND (<AND <EQUAL? .RARG ,M-ENTER>
+                    <NOT <FSET? ,COVE ,TOUCHBIT>>>
+               <COND (,BOOK-BELONGS-IN-LAGOON
+                      <MOVE ,SPELL-BOOK ,LAGOON-FLOOR>)>
+               <PUT ,VEZZAS 6 0>
+               <SETG SCORE <+ ,SCORE 20>>
+               <DISABLE <INT I-SUFFOCATE>>
+               <DISABLE <INT I-YOUNGER-SELF>>
+               <DISABLE <INT I-OLDER-SELF>>
+               <COND (<AND ,GOLMACKED
+                           <NOT ,COMBO-REVEALED>>                     
+                      <POOF>)
+                     (<NOT ,GOLMACKED>
+                      <COND (<HELD? ,ROPE>
+                             <MOVE ,ROPE ,DIAL>
+                             <SET X T>)>
+                      <COND (<HELD? ,BEAM>
+                             <MOVE ,BEAM ,DIAL>
+                             <SET X T>)>
+                      <COND (<HELD? ,VARDIK-SCROLL>
+                             <MOVE ,VARDIK-SCROLL ,DIAL>
+                             <SET X T>)>
+                      <COND (<HELD? ,GOLMAC-SCROLL>
+                             <MOVE ,GOLMAC-SCROLL ,DIAL>
+                             <SET X T>)>
+                      <COND (.X
+                             <TELL
+"As you slide down the chute, some of your possessions suddenly vanish! ">)>)>
+               <TELL
+"You fly out of the chute and land just at the edge of some water..." CR CR>)>>
+
+<ROUTINE POOF ()
+        <SETG POOFED T>
+        <TELL
+"Suddenly, without the slightest fanfare, you cease to exist!" CR>
+        <FINISH>>
+
+<ROOM OCEAN-NORTH
+      (IN ROOMS)
+      (SYNONYM DAM FCD)
+      (ADJECTIVE FLOOD CONTRO)
+      (DESC "Ocean Shore North")
+      (NORTH TO MOUTH-OF-RIVER)
+      (NE "Entering the ocean is certain death.")
+      (EAST "Entering the ocean is certain death.")
+      (SE "Entering the ocean is certain death.")
+      (SOUTH TO LAGOON)
+      (SW TO COVE)
+      (WEST "There's a tall cliff there.")
+      (NW "There's a tall cliff there.")
+      (IN TO LAGOON)
+      (FLAGS RLANDBIT ONBIT)
+      (PSEUDO "CLIFF" CLIFF-PSEUDO "CLIFFS" CLIFF-PSEUDO)
+      (GLOBAL LAGOON-OBJECT OCEAN BEACH WATER)
+      (ACTION OCEAN-SHORE-F)>
+
+<ROOM OCEAN-SOUTH
+      (IN ROOMS)
+      (SYNONYM MUSEUM)
+      (ADJECTIVE ROYAL)
+      (DESC "Ocean Shore South")
+      (NORTH TO LAGOON)
+      (NE "Entering the ocean is certain death.")
+      (EAST "Entering the ocean is certain death.")
+      (SE "Entering the ocean is certain death.")
+      (SOUTH "There's a tall cliff there.")
+      (SW "There's a tall cliff there.")
+      (WEST "There's a tall cliff there.")
+      (NW TO COVE)
+      (IN TO LAGOON)
+      (FLAGS RLANDBIT ONBIT)
+      (PSEUDO "CLIFF" CLIFF-PSEUDO "CLIFFS" CLIFF-PSEUDO)
+      (GLOBAL LAGOON-OBJECT OCEAN WATER BEACH)
+      (ACTION OCEAN-SHORE-F)>
+
+<ROUTINE OCEAN-SHORE-F (RARG)
+        <COND (<EQUAL? .RARG ,M-LOOK>
+               <TELL "You are ">
+               <COND (,FLYING
+                      <TELL "floating above">)
+                     (T
+                      <TELL "standing on">)>
+               <TELL
+" the western shore of the mighty Flathead Ocean. According to legends
+you read at the University, the eastern shore of this ocean is a strange
+land of magical beings and priceless treasures. ">
+               <COND (<EQUAL? ,HERE ,OCEAN-NORTH>
+                      <TELL
+"You could go north along the shore; the edge of a small cove lies to
+the southwest.">)
+                     (T
+                      <TELL
+"The beach to the south is blocked by a tall cliff; a lagoon shore
+lies to the northwest.">)>
+               <CRLF>)>>
+
+<OBJECT BEACH
+       (IN LOCAL-GLOBALS)
+       (DESC "beach")
+       (SYNONYM BEACH SHORE SAND)
+       (ADJECTIVE CURVED SANDY NARROW)
+       (FLAGS NDESCBIT)>
+
+<OBJECT OCEAN
+       (IN LOCAL-GLOBALS)
+       (DESC "ocean")
+       (SYNONYM OCEAN WATERS)
+        (ADJECTIVE MIGHTY FLATHE TURBUL)
+       (FLAGS VOWELBIT NDESCBIT)
+       (ACTION OCEAN-F)>
+
+<ROUTINE OCEAN-F ("AUX" (X 0))
+        <COND (<EQUAL? ,HERE ,GUN-EMPLACEMENT ,TURRET ,TOP-OF-FALLS>
+               <TELL "The ocean lies far below you." CR>)
+              (<VERB? PULVER>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,V?PULVER ,LAGOON-OBJECT>
+               <RTRUE>)
+              (<VERB? DRINK DRINK-FROM>
+               <PERFORM ,V?DRINK ,WATER>
+               <RTRUE>)
+              (<VERB? EXAMINE>
+               <TELL "It streches east as far as the eye can see." CR>)
+              (<VERB? RESEARCH>
+               <TELL
+"The Flathead Ocean, called the Great Sea by the ancients, has a very
+unusual feature -- its western shore basks in the sunlight while its
+eastern shore lies far underground." CR>)
+              (<AND <VERB? PUT>
+                    <EQUAL? ,OCEAN ,PRSI>>
+               <MOVE ,PRSO ,DIAL>
+               <SPLASH>)
+              (<VERB? THROUGH>
+               <JIGS-UP "Certain death.">)>>
+
+<ROUTINE CLIFF-PSEUDO ()
+        <COND (<VERB? CLIMB-UP CLIMB-FOO>
+               <COND (,FLYING
+                      <TELL "The cliff is too high to fly over." CR>)
+                     (T
+                      <TELL "The cliff is unclimbable." CR>)>)>>
+
+<OBJECT LAGOON-OBJECT
+       (IN LOCAL-GLOBALS)
+       (DESC "lagoon")
+       (SYNONYM LAGOON INLET COVE)
+       (ADJECTIVE SMALL CALM)
+       (FLAGS NDESCBIT)
+       (ACTION LAGOON-OBJECT-F)>
+
+<ROUTINE LAGOON-OBJECT-F ()
+        <COND (<VERB? THROUGH>
+               <COND (<EQUAL? ,HERE ,LAGOON ,LAGOON-FLOOR>
+                      <LOOK-AROUND-YOU>)
+                     (T
+                      <GOTO ,LAGOON>)>)
+              (<AND <VERB? PUT>
+                    <NOT <EQUAL? ,HERE ,LAGOON-FLOOR>>
+                    <EQUAL? ,PRSI ,LAGOON-OBJECT>>
+               <MOVE ,PRSO ,LAGOON-FLOOR>
+               <COND (<OR <FSET? ,PRSO ,SCROLLBIT>
+                          <EQUAL? ,PRSO ,SPELL-BOOK>>
+                      <FSET ,PRSO ,MUNGBIT>)>
+               <SPLASH>)
+              (<VERB? EXAMINE>
+               <TELL "The water looks calm and hospitable." CR>)
+              (<VERB? DRINK DRINK-FROM>
+               <PERFORM ,V?DRINK ,WATER>
+               <RTRUE>)
+              (<VERB? PULVER>
+               <TELL
+"The water level seems to drop an inch or two, for a moment." CR>)>>
+
+<ROOM LAGOON
+      (IN ROOMS)
+      (DESC "Surface of Lagoon")
+      (NORTH TO OCEAN-NORTH)
+      (OUT TO COVE)
+      (NW TO COVE)
+      (WEST TO COVE)
+      (SW TO COVE)
+      (SOUTH TO OCEAN-SOUTH)
+      (SE "Entering the ocean is certain death.")
+      (EAST "Entering the ocean is certain death.")
+      (NE "Entering the ocean is certain death.")
+      (DOWN PER LAGOON-FLOOR-ENTER-F)
+      (FLAGS ONBIT)
+      (GLOBAL LAGOON-OBJECT OCEAN WATER)
+      (PSEUDO "SAND" SAND-PSEUDO)
+      (ACTION LAGOON-F)>
+
+<ROUTINE LAGOON-F (RARG "AUX" X)
+        <COND (<EQUAL? .RARG ,M-ENTER>
+               <SET X <FIRST? ,PROTAGONIST>>
+               <REPEAT ()
+                       <COND (.X
+                              <COND (<OR <FSET? .X ,SCROLLBIT>
+                                         <EQUAL? .X ,SPELL-BOOK>>
+                                     <FSET .X ,MUNGBIT>)>
+                              <SET X <NEXT? .X>>)
+                             (T
+                              <RETURN>)>>)
+              (<EQUAL? .RARG ,M-LOOK>
+               <TELL "You are ">
+               <COND (,FLYING
+                      <TELL "flying over">)
+                     (T
+                      <TELL "swimming on">)>
+               <TELL
+" the surface of a calm lagoon, whose sandy floor is visible below.
+A curved beach surrounds this inlet on its western side." CR>)>>
+
+<ROUTINE LAGOON-FLOOR-ENTER-F ()
+        <COND (,FLYING
+               <WHILE-FLYING>
+               <RFALSE>)
+              (T
+               ,LAGOON-FLOOR)>>
+
+<ROUTINE SAND-PSEUDO ()
+        <COND (<EQUAL? ,PSEUDO-OBJECT ,PRSO>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,GROUND ,PRSI>
+               <RTRUE>)
+              (T
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,PRSO ,GROUND>
+               <RTRUE>)>>  
+
+<ROOM LAGOON-FLOOR
+      (IN ROOMS)
+      (DESC "Lagoon Floor")
+      (LDESC
+"This is the floor of a cove off the turbulent ocean to the east.
+The ground slopes upward to the north, west, and south. Light filters
+down from the surface of the water.")
+      (NORTH TO OCEAN-NORTH)
+      (NW TO COVE)
+      (WEST TO COVE)
+      (SW TO COVE)
+      (SOUTH TO OCEAN-SOUTH)
+      (SE "Entering the ocean is certain death.")
+      (EAST "Entering the ocean is certain death.")
+      (NE "Entering the ocean is certain death.")
+      (UP TO LAGOON)
+      (FLAGS ONBIT)
+      (GLOBAL LAGOON-OBJECT OCEAN WATER)
+      (PSEUDO "CORAL" CORAL-PSEUDO "SAND" SAND-PSEUDO)
+      (ACTION LAGOON-FLOOR-F)>
+
+<GLOBAL UNDERWATER-COUNTER 0>
+
+<ROUTINE LAGOON-FLOOR-F (RARG)
+      <COND (<EQUAL? .RARG ,M-ENTER>
+            <ENABLE <QUEUE I-DROWN -1>>
+            <RFALSE>)>>
+
+<ROUTINE I-DROWN ()
+        <COND (<EQUAL? ,HERE ,LAGOON-FLOOR>
+               <COND (,VILSTUED
+                      <RFALSE>)>
+               <SETG UNDERWATER-COUNTER <+ ,UNDERWATER-COUNTER 1>>
+               <COND (<EQUAL? ,UNDERWATER-COUNTER 3>
+                      <TELL CR
+"You won't be able to hold your breath much longer." CR>)
+                     (<EQUAL? ,UNDERWATER-COUNTER 4>
+                      <TELL CR "Better get some fresh air soon!" CR>)
+                     (<EQUAL? ,UNDERWATER-COUNTER 5>
+                      <SETG UNDERWATER-COUNTER 0>
+                      <CRLF>
+                      <JIGS-UP "You run out of air and drown.">)
+                     (T
+                      <RFALSE>)>)
+              (T
+               <SETG UNDERWATER-COUNTER 0>
+               <DISABLE <INT I-DROWN>>
+               <RFALSE>)>>
+
+<ROUTINE CORAL-PSEUDO ()
+        <COND (<AND <VERB? EXAMINE>
+                    <IN? ,HERE ,SPENSEWEEDS>>
+               <TELL "The coral is covered by swaying spenseweeds." CR>)>>
+
+<OBJECT SPENSEWEEDS
+       (IN LAGOON-FLOOR)
+       (DESC "spenseweeds")
+       (LDESC
+"Nestled among some coral is a clump of stunningly beautiful spenseweeds,
+waving slowly in the currents of the lagoon.")
+       (SYNONYM CLUMP SPENSE WEEDS WEED)
+       (ADJECTIVE SEA STUNNI BEAUTI)
+       (FLAGS NARTICLEBIT)
+       (ACTION SPENSEWEEDS-F)>
+
+<ROUTINE SPENSEWEEDS-F ()
+        <COND (<VERB? MEEF>
+               <MOVE ,SPENSEWEEDS ,DIAL>
+               <MOVE ,CRATE ,HERE>
+               <THIS-IS-IT ,CRATE>
+               <TELL
+"The spenseweeds wilt away, revealing a wooden crate labelled with
+black lettering." CR>)
+              (<VERB? LOOK-UNDER>
+               <TELL
+"That's difficult -- they're well rooted in the coral." CR>)>>
+
+<OBJECT CRATE
+       (IN DIAL)
+       (DESC "wooden crate")
+       (SYNONYM LETTER CRATE LABEL)
+       (ADJECTIVE WOOD WOODEN BLACK STENCI)
+       (SIZE 45)
+       (CAPACITY 40)
+       (FLAGS TAKEBIT CONTBIT READBIT SEARCHBIT)
+       (ACTION CRATE-F)>
+
+<ROUTINE CRATE-F ()
+        <COND (<AND <VERB? OPEN REZROV>
+                    <NOT ,CRATE-POINT>>
+               <SETG CRATE-POINT T>
+               <SETG SCORE <+ ,SCORE 15>>
+               <RFALSE>)
+              (<VERB? READ>
+                <FIXED-FONT-ON>
+               <TELL
+"Stencilled diagonally across the crate:|
+|
+    GRUE PROTECTION KIT|
+|
+Below, in much smaller letters:|
+|
+    FROM:|
+    Frobozz Magic Grue Accessories Co.|
+|
+    TO:|
+    Aragain Brothers Circus|
+    Attn: Grue Trainer" CR>
+               <FIXED-FONT-OFF>)>>
+
+<GLOBAL CRATE-POINT <>>
+
+<OBJECT GRUE-SUIT
+       (IN CRATE)
+       (DESC "grue suit")
+       (SYNONYM SUIT)
+       (ADJECTIVE GRUE)
+       (FLAGS WEARBIT TAKEBIT)
+       (SIZE 15)>
+
+<OBJECT BRASS-LANTERN
+       (IN CRATE)
+       (DESC "brass lantern")
+       (SYNONYM LANTERN LAMP)
+       (ADJECTIVE BRASS BATTER POWERE)
+       (FLAGS TAKEBIT LIGHTBIT)
+       (SIZE 15)
+       (ACTION BRASS-LANTERN-F)>
+
+<ROUTINE BRASS-LANTERN-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL
+"It is a battery-powered lantern like those used by adventurers
+and explorers. It is currently ">
+               <COND (<FSET? ,BRASS-LANTERN ,ONBIT>
+                      <TELL "on">)
+                     (T
+                      <TELL "off">)>
+               <TELL "." CR>)>>                       
+
+<OBJECT GRUE-REPELLENT
+       (IN CRATE)
+       (SYNONYM REPELLENT CAN)
+       (ADJECTIVE GRUE MAGIC)
+       (DESC "can of grue repellent")
+       (FLAGS TAKEBIT READBIT)
+       (ACTION GRUE-REPELLENT-F)
+       (TEXT
+"|
+\"!!! FROBOZZ MAGIC GRUE REPELLENT !!!|
+|
+Instructions for use: Apply liberally to creature to be protected.
+Duration of effect is unpredictable. Use only in place of death!|
+|
+(No warranty expressed or implied)\"")>
+
+<ROUTINE GRUE-REPELLENT-F ()
+        <COND (<VERB? SHAKE>
+               <COND (,SPRAY-USED?
+                      <TELL "The can seems empty." CR>)
+                     (T
+                      <TELL "There is a sloshing sound from inside." CR>)>)
+              (<AND <VERB? SPRAY PUT-ON>
+                    <EQUAL? ,PRSO ,GRUE-REPELLENT>>
+               <COND (,SPRAY-USED?
+                      <TELL "The repellent is all gone." CR>)
+                     (<NOT ,PRSI>
+                      <SETG SPRAY-USED? T>
+                      <TELL
+"The spray stinks amazingly for a few moments, then drifts away." CR>)
+                     (T
+                      <COND (<EQUAL? ,PRSI ,ME>
+                             <ENABLE <QUEUE I-SPRAY 5>>
+                             <SETG SPRAYED? T>)>
+                      <SETG SPRAY-USED? T>
+                      <TELL
+"The spray smells like a mixture of old socks and burning rubber. If
+I were a grue I'd sure stay clear!" CR>)>)>>
+
+<GLOBAL SPRAY-USED? <>>
+
+<GLOBAL SPRAYED? <>>
+
+<ROUTINE I-SPRAY ()
+        <SETG SPRAYED? <>>
+        <TELL CR "That horrible smell is much less pungent now." CR>>
+
+<ROOM MOUTH-OF-RIVER
+      (IN ROOMS)
+      (DESC "Mouth of River")
+      (NORTH "The river is too wide to cross.")
+      (NE "Entering the ocean is certain death.")
+      (EAST "Entering the ocean is certain death.")
+      (SE "Entering the ocean is certain death.")
+      (SOUTH TO OCEAN-NORTH)
+      (SW "There's a tall cliff there.")
+      (WEST PER VINES-EXIT-F)
+      (NW "There's a tall cliff there.")
+      (FLAGS RLANDBIT ONBIT)
+      (GLOBAL WATER OCEAN RIVER FORT CAVE WATERFALL)
+      (PSEUDO "CLIFF" CLIFF-PSEUDO "CLIFFS" CLIFF-PSEUDO)
+      (ACTION MOUTH-OF-RIVER-F)>
+
+<ROUTINE MOUTH-OF-RIVER-F (RARG)
+        <COND (<EQUAL? .RARG ,M-LOOK>
+               <TELL
+"A mighty river spills into the ocean here. Looking up the river valley,
+you see a tall waterfall. Atop a cliff, high above you, is the rampart
+of a fortress. A cave entrance ">
+               <COND (<IN? ,VINES ,HERE>
+                      <TELL
+"at the base of the cliff to the west is blocked by writhing green vines">)
+                     (T
+                      <TELL "lies to the west">)>
+               <TELL "." CR>)
+              (<AND <EQUAL? .RARG ,M-END>
+                    <IN? ,VINES ,HERE>
+                    <PROB 15>>
+               <CRLF>
+               <TELL
+"Suddenly you realize that, without really thinking about it, you were ">
+               <COND (,FLYING
+                      <TELL "flying">)
+                     (T
+                      <TELL "walking">)>
+               <TELL
+" toward the wriggling vines. As you stop, a feeling of annoyance
+seems to radiate from the plants." CR>)>>
+
+<OBJECT VINES
+       (IN MOUTH-OF-RIVER)
+       (DESC "mass of wriggling vines")
+       (SYNONYM MASS VINES VINE PLANTS)
+       (ADJECTIVE WRIGLI WRITHI GREEN)
+       (FLAGS NDESCBIT)
+       (ACTION VINES-F)>
+
+<ROUTINE VINES-F ()
+        <COND (<VERB? MEEF>
+               <MOVE ,VINES ,DIAL>
+               <TELL
+"You can almost feel a wave of pain from the vines as they shrivel away." CR>)
+              (<VERB? ATTACK KILL>
+               <JIGS-UP
+"Your attack is somewhat quixotic as the vines wrap around and tear
+you to pieces.">)
+              (<VERB? THROUGH KICK BITE TAKE CLIMB-UP CLIMB-FOO PUSH MOVE RUB>
+               <DO-WALK ,P?WEST>)>>
+
+<ROUTINE VINES-EXIT-F ()
+        <COND (<IN? ,VINES ,HERE>
+               <JIGS-UP
+"The vines encircle you and tear you limb from limb.">
+               <RFALSE>)
+              (T
+               ,GRUE-LAIR)>>
+
+<ROOM GRUE-LAIR
+      (IN ROOMS)
+      (DESC "Grue Lair")
+      (LDESC
+"This is a low, shadowy cave leading east to west. The rocky walls
+are scarred with deep claw marks.")
+      (EAST TO MOUTH-OF-RIVER)
+      (WEST TO MAMMOTH-CAVERN)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL CAVE)
+      (ACTION GRUE-LAIR-F)>
+
+<ROUTINE GRUE-LAIR-F (RARG)
+        <COND (<AND <NOT ,SPRAYED?>
+                    <EQUAL? .RARG ,M-END>
+                    <NOT <IN? ,GRUE-SUIT ,PROTAGONIST>>>
+               <COND (<OR ,LIT ,BLORTED>
+                      <JIGS-UP
+"The grues lurk toward you! Your last sight is a hundred slavering fangs.">)
+                     (T
+                      <JIGS-UP
+"Suddenly, you are set upon by countless slavering fangs!">)>)>>
+
+<OBJECT MUTATED-GRUES
+       (IN GRUE-LAIR)
+       (DESC "pack of mutated grues")
+       (SYNONYM PACK GRUES GRUE)
+       (ADJECTIVE MUTATE)
+       (DESCFCN MUTATED-GRUES-DESCFCN)
+       (ACTION MUTATED-GRUES-F)>
+
+<ROUTINE MUTATED-GRUES-F ()
+        <COND (<VERB? FROTZ>
+               <TELL
+"One of the grues gives off a flash of light but, strangely, it doesn't seem
+to notice or care." CR>)
+              (<VERB? RESEARCH>
+               <PERFORM ,V?RESEARCH ,GRUE>
+               <RTRUE>)>>
+
+<ROUTINE MUTATED-GRUES-DESCFCN (RARG)
+        <COND (<OR ,LIT ,BLORTED>
+               <COND (,SPRAYED?
+                      <LIT-MESSAGE>
+                      <TELL
+"They stagger about the room, covering their noses and making horrid
+gurgling noises." CR>)
+                     (<IN? ,GRUE-SUIT ,PROTAGONIST>
+                      <LIT-MESSAGE>
+                      <TELL
+"They seem to be ignoring you, aside from a few suspicious gurgles
+in your direction." CR>)
+                     (T
+                      <LIT-MESSAGE>
+                      <TELL
+"Baring tremendous fangs, they form a circle around you..." CR>)>)
+              (T
+               <TELL
+"There are terrifying gurgling noises from the darkness!" CR>)>>
+
+<ROUTINE LIT-MESSAGE ()
+        <TELL "A pack of grues fills the room! ">
+        <COND (,LIT
+               <TELL
+"The grues, contrary to all conventional wisdom, aren't bothered by your
+light in the least. They must be mutated grues, no longer fearing light! ">)>>
+
+<ROOM MAMMOTH-CAVERN
+      (IN ROOMS)
+      (DESC "Mammoth Cavern")
+      (LDESC
+"This cavern is of extraordinary size, but nevertheless crowded with
+powerful-looking machinery. You recognize a breeder for producing
+millions of the mutated grues you just passed. Other devices seem
+designed to aid the forces of evil while sapping magic powers of
+Enchanters everywhere.|
+|
+At the far end of the cavern are three closed doors: a black marble door
+leading to the northwest, a shiny silver door heading due west, and
+a door of bleached white wood to the southwest.")
+      (EAST TO GRUE-LAIR)
+      (NW TO CHAMBER-OF-LIVING-DEATH IF BLACK-DOOR IS OPEN)
+      (WEST TO HALL-OF-ETERNAL-PAIN IF SILVER-DOOR IS OPEN)
+      (SW TO BELBOZ-HIDEOUT IF WHITE-DOOR IS OPEN)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL CAVE)
+      (ACTION MAMMOTH-CAVERN-F)>
+
+<ROUTINE MAMMOTH-CAVERN-F (RARG)
+        <COND (<EQUAL? .RARG ,M-ENTER>
+               <SETG SCORE <+ ,SCORE ,CAVERN-POINT>>
+               <SETG CAVERN-POINT 0>
+               <PUT ,VEZZAS 7 0>)>>
+
+<GLOBAL CAVERN-POINT 20>
+
+<OBJECT MACHINERY
+       (IN MAMMOTH-CAVERN)
+       (DESC "diabolic machinery")
+       (SYNONYM MACHIN DEVICE BREEDER PLAQUE)
+       (ADJECTIVE DIABOL EVIL POWERF TINY)
+       (FLAGS NDESCBIT)
+       (ACTION MACHINERY-F)>
+
+<ROUTINE MACHINERY-F ()
+        <COND (<VERB? MUNG LAMP-ON>
+               <JIGS-UP
+"A field of energy leaps forth, reducing you to a pile of smoldering ash.">)
+              (<VERB? EXAMINE READ>
+               <TELL
+"You notice, on one machine, a tiny plaque which reads:|
+|
+FROBOZZ MAGIC MUTATED GRUE BREEDER CO." CR>)>>
+
+<ROOM CHAMBER-OF-LIVING-DEATH
+      (IN ROOMS)
+      (DESC "Chamber of Living Death")
+      (LDESC
+"The very walls of this room seem to soak up all light, so it seems
+as though you're floating in the center of an infinite void.")
+      (FLAGS RLANDBIT ONBIT INSIDEBIT)
+      (GLOBAL CAVE)
+      (PSEUDO "PARASI" PARASITES-PSEUDO)
+      (ACTION CHAMBER-OF-LIVING-DEATH-F)>
+
+<ROUTINE CHAMBER-OF-LIVING-DEATH-F (RARG)
+        <COND (<AND <EQUAL? .RARG ,M-BEG>
+                    <NOT <VERB? QUIT SAVE VERSION>>
+                    <NOT <VERB? RESTORE RESTART AGAIN>>
+                    <NOT <VERB? BRIEF VERBOSE SUPER-BRIEF>>
+                    <NOT <VERB? SCRIPT UNSCRIPT>>>
+               <AGONY>
+               <RTRUE>)
+              (<EQUAL? .RARG ,M-END>
+               <TELL
+"Hideous parasites descend upon you and tear the flesh from your bones,
+gnaw the eyes from your sockets, and feast upon your very brain tissue.
+Amazingly, you do not die, and your body regenerates itself as you await
+the next attack..." CR>)>>
+
+<ROUTINE PARASITES-PSEUDO ()
+        <RFALSE>>
+
+<ROOM HALL-OF-ETERNAL-PAIN
+      (IN ROOMS)
+      (DESC "Hall of Eternal Pain")
+      (LDESC
+"This room is filled with blinding light that stabs at your eyes.")
+      (FLAGS RLANDBIT ONBIT INSIDEBIT)
+      (GLOBAL CAVE)
+      (PSEUDO "FORCE" FORCE-PSEUDO "FORCES" FORCE-PSEUDO)
+      (ACTION HALL-OF-ETERNAL-DEATH-F)>
+
+<ROUTINE HALL-OF-ETERNAL-DEATH-F (RARG)
+        <COND (<AND <EQUAL? .RARG ,M-BEG>
+                    <NOT <VERB? QUIT SAVE VERSION>>
+                    <NOT <VERB? RESTORE RESTART AGAIN>>
+                    <NOT <VERB? BRIEF VERBOSE SUPER-BRIEF>>
+                    <NOT <VERB? SCRIPT UNSCRIPT>>>
+               <AGONY>
+               <RTRUE>)
+              (<EQUAL? .RARG ,M-END>
+               <TELL
+"Disembodied forces suck the very thoughts from your mind, savoring
+each moment and growing stronger. Every second is an agonizing torment,
+as though thousands of raging fires were exploding in your skull,
+filling you with a pain greater than you could ever imagine." CR>)>>
+
+<ROUTINE FORCE-PSEUDO ()
+        <RFALSE>>
+
+<ROUTINE AGONY ()
+       <TELL
+"Your agony is too great to concentrate on such an action." CR>>
+
+<ROOM BELBOZ-HIDEOUT
+      (IN ROOMS)
+      (SYNONYM JUNGLE MIZNIA)
+      (DESC "Belboz's Hideout")
+      (LDESC
+"An acrid stench fills this small room, which is obviously a
+control center for the evil experiments in the cavern outside.")
+      (EAST "An invisible force stops you.")
+      (FLAGS RLANDBIT INSIDEBIT ONBIT)
+      (GLOBAL CAVE)>
+
+<OBJECT KNIFE
+       (IN BELBOZ-HIDEOUT)
+       (DESC "diamond-studded knife")
+       (FDESC
+"Hanging on the wall is a heavy dagger, its handle encrusted with diamonds.")
+       (SYNONYM KNIFE DAGGER HANDLE)
+       (ADJECTIVE HEAVY DIAMON STUDDE ENCRUS)
+       (FLAGS TAKEBIT WEAPONBIT)
+       (SIZE 10)>
+
+<OBJECT BLACK-DOOR
+       (IN MAMMOTH-CAVERN)
+       (DESC "black marble door")
+       (SYNONYM DOOR DOORS)
+       (ADJECTIVE BLACK MARBLE)
+       (FLAGS DOORBIT NDESCBIT)
+       (ACTION BLACK-DOOR-F)>
+
+<ROUTINE BLACK-DOOR-F ()
+        <COND (<VERB? OPEN REZROV>
+               <TELL
+"As the door opens, hundreds of slime-covered tentacles stream
+out and drag you across the threshold..." CR CR>
+               <ROB ,PROTAGONIST>
+               <DISABLE <INT I-TIRED>>
+               <DISABLE <INT I-THIRST>>
+               <DISABLE <INT I-HUNGER>>
+               <WEAR-OFF-SPELLS>
+               <GOTO ,CHAMBER-OF-LIVING-DEATH>)>>
+
+<OBJECT SILVER-DOOR
+       (IN MAMMOTH-CAVERN)
+       (DESC "shiny silver door")
+       (SYNONYM DOOR DOORS)
+       (ADJECTIVE SHINY SILVER)
+       (FLAGS DOORBIT NDESCBIT)
+       (ACTION SILVER-DOOR-F)>
+
+<ROUTINE SILVER-DOOR-F ()
+        <COND (<VERB? OPEN REZROV>
+               <TELL
+"The door blows open, knocking you to the ground. You are pulled
+through the open doorway by an unseen force..." CR CR>
+               <ROB ,PROTAGONIST>
+               <DISABLE <INT I-TIRED>>
+               <DISABLE <INT I-HUNGER>>
+               <DISABLE <INT I-THIRST>>
+               <WEAR-OFF-SPELLS>
+               <GOTO ,HALL-OF-ETERNAL-PAIN>)>>
+
+<OBJECT WHITE-DOOR
+       (IN MAMMOTH-CAVERN)
+       (DESC "white wooden door")
+       (SYNONYM DOOR DOORS)
+       (ADJECTIVE WHITE WOODEN BLEACH WOOD)
+       (FLAGS DOORBIT NDESCBIT)
+       (ACTION WHITE-DOOR-F)>
+
+<GLOBAL WHITE-DOOR-SCORE 20>
+
+<ROUTINE WHITE-DOOR-F ()
+        <COND (<VERB? OPEN REZROV>
+               <COND (<EQUAL? ,HERE ,BELBOZ-HIDEOUT>
+                      <DO-WALK ,P?EAST>
+                      <RTRUE>)>
+               <SETG SCORE <+ ,SCORE ,WHITE-DOOR-SCORE>>
+               <SETG WHITE-DOOR-SCORE 0>
+               <TELL
+"The door creaks slowly open. Within, you see someone lying as though
+asleep. You feel yourself drawn into the room..." CR CR>
+               <ENABLE <QUEUE I-BELBOZ-AWAKES 8>>
+               <GOTO ,BELBOZ-HIDEOUT>)>>
+
+<GLOBAL VARDIKED <>>
+
+<ROUTINE I-UNVARDIK ()
+        <SETG VARDIKED <>>
+        <TELL CR
+"Your head feels numb for a moment, and your mind feels suddenly open and
+unprotected." CR>>
+
+<GLOBAL BELBOZ-DEAD <>>
+
+<GLOBAL BELBOZ-GASPARED <>>
+
+<ROUTINE KILL-BELBOZ ()
+        <COND (,BELBOZ-GASPARED
+               <SETG BELBOZ-GASPARED <>>
+               <TELL
+"As you stab Belboz, an apparition rises from his body. Floating above him
+like a cloud of fog, it howls with laughter. A moment later, gaspar begins
+to heal the wounds, and the spirit flows back into the body." CR>
+               <CRLF>
+               <I-BELBOZ-AWAKES>)
+              (T
+               <TELL
+"You stab the knife time and again into Belboz, who writhes in pain,
+eyes bulging outward. Sickened and dizzy, you stagger back." CR CR>
+               <SETG BELBOZ-DEAD T>
+               <SWANZO-BELBOZ>)>>
+
+<ROUTINE SWANZO-BELBOZ ()
+        <TELL "A wispy translucent shape rises from the ">
+        <COND (,BELBOZ-DEAD
+               <TELL "corpse">)
+              (T
+               <TELL "body">)>
+        <TELL
+" of Belboz. It speaks in a voice so deep that your whole body seems to
+hear it. \"Foolish Charlatan! I am forced to flee that weak, old body -- I
+shall take your own, instead! Already I have sucked all knowledge, all
+secrets from that ancient Enchanter. Now begins an epoch of evil transcending
+even your worst nightmares; a reign of terror that will last a thousand
+thousand years!\" The shape blows toward you on a cold wind." CR CR>
+        <COND (,VARDIKED
+               <TELL
+"Jeearr surrounds you like a cloud and begins to contract. Suddenly, it
+strikes your invisible protection and recoils as if burned. \"No!\" it
+cries. \"Such a guileless Enchanter developing a mind shield?\" The cloud
+is thinner, the voice fainter. \"It cannot be! I cannot survive ... without
+a host.\" The demon roils in agony, then thins and dissipates. There is a
+final scream of pain, then silence." CR CR>
+               <COND (,BELBOZ-DEAD
+                      <TELL
+"Jeearr is vanquished; the kingdom is saved. But you - you are stranded in
+a land unknown, and your closest friend, the greatest Enchanter of his
+age, lies dead by your own hand. Kneeling by his blood-soaked corpse, you
+beg for another chance..." CR>
+                      <FINISH>)
+                     (T
+                      <TELL
+"Belboz moans softly, and begins stirring. He sees you and rises, instantly
+alert. After posing a few well-chosen questions, he casts a brief but
+unfamiliar spell.|
+|
+An instant later, ">
+                      <COND (<IN? ,GRUE-SUIT ,PROTAGONIST>
+                             <TELL "your grue suit has vanished and ">)>
+                      <TELL
+"you are standing in the Chamber of the Circle. The Circle of Enchanters
+is assembled. Belboz speaks. \"Once again, this young Enchanter has done
+a matchless service to the Guild and to the entire kingdom, displaying
+resourcefulness and imagination worthy of the greatest of Enchanters. I
+grow old, and must soon step down as Head of the Circle. But let it be
+known that a successor has been found.\"" CR CR>
+                      <SETG SCORE <+ ,SCORE 25>>
+                      <SETG HERE ,CHAMBER-OF-THE-CIRCLE>
+                      <V-SCORE>
+                      <USL>
+                      <TELL CR
+"Here ends the second chapter of the Enchanter saga, in which,
+by virtue of your skills, you have been appointed as the next
+leader of the Circle of Enchanters. The final adventure awaits
+you as the Enchanter series concludes." CR>
+                      <COND (<NOT <IN? ,MORGIA-PLANT ,BELBOZ-QUARTERS>>
+                             <TELL CR
+"You hear a distant bellow. \"What happened to my morgia plant?\"" CR>)>
+                      <FINISH T>)>)
+              (T
+               <TELL
+"You feel an overwhelming sense of oppression as the demon seizes control
+of your mind and body. The monster reaches into the recesses of your mind,
+adding your hard-earned magic powers to its own. As it settles comfortably
+into your skull, the demon grants you a vision of the future. You see the
+enslaved people of the land toiling to erect great idols to Jeearr. Parents
+offer up their own children upon these altars, as the rivers of the land fill
+with blood. And YOU embody Jeearr; you are cursed by ten thousand generations
+of victims; your face adorns the idols. And worst of all, you remain awake
+and aware, a witness to horror, never sleeping, and never, ever to escape." CR>
+               <SETG SCORE -100>
+               <FINISH>)>>
+
+<ROUTINE I-BELBOZ-AWAKES ()
+        <COND (<NOT <EQUAL? ,HERE ,BELBOZ-HIDEOUT>>
+               <RFALSE>)>
+        <TELL CR
+"Suddenly, Belboz's eyes flicker and he leaps to his feet. His face is
+unrecognizable, a twisted mask of hatred. \"Meddlesome Enchanter! I should
+have killed you all before I left! But better late than never...\" Lightning
+bolts flash toward you from his fingers, but rather than dying, you find
+yourself in the..." CR CR>
+        <ROB ,PROTAGONIST>
+        <DISABLE <INT I-TIRED>>
+        <DISABLE <INT I-THIRST>>
+        <DISABLE <INT I-HUNGER>>
+        <WEAR-OFF-SPELLS>
+        <GOTO ,HALL-OF-ETERNAL-PAIN>>
\ No newline at end of file
diff --git a/fort.zil b/fort.zil
new file mode 100644 (file)
index 0000000..c7a73ea
--- /dev/null
+++ b/fort.zil
@@ -0,0 +1,382 @@
+"FORT.ZIL for
+                               SORCERER
+       (c) Copyright 1984  Infocom, Inc.  All Rights Reserved"
+
+<OBJECT FORT
+       (IN LOCAL-GLOBALS)
+       (DESC "fort")
+       (SYNONYM FORT GRIFFS RAMPAR FORTRE)
+       (ADJECTIVE FORT PROUD MIGHTY)
+       (FLAGS NDESCBIT)
+       (ACTION FORT-F)>
+
+<ROUTINE FORT-F ()
+        <COND (<VERB? THROUGH>
+               <COND (<OR <EQUAL? ,HERE ,PARADE-GROUND ,GUN-EMPLACEMENT>
+                          <EQUAL? ,HERE ,BARRACKS ,ARMORY>>
+                      <LOOK-AROUND-YOU>)
+                     (<EQUAL? ,HERE ,FORT-ENTRANCE>
+                      <DO-WALK ,P?EAST>)
+                     (T
+                      <CANT-ENTER ,FORT>)>)
+              (<VERB? DROP EXIT>
+               <COND (<EQUAL? ,HERE ,PARADE-GROUND>
+                      <DO-WALK ,P?WEST>)
+                     (<EQUAL? ,HERE ,GUN-EMPLACEMENT ,BARRACKS ,ARMORY>
+                      <CANT-ENTER ,FORT T>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? RESEARCH>
+               <TELL
+"Fort Griffspotter once guarded the lands near Egreth Castle from
+attack by sea." CR>)>>
+
+<ROOM FORT-ENTRANCE
+      (IN ROOMS)
+      (DESC "Fort Entrance")
+      (LDESC
+"You are at the entrance to Fort Griffspotter, which lies to the east.
+A trail leads along the river bank to the northwest.")
+      (EAST TO PARADE-GROUND)
+      (NW TO RIVER-BANK)
+      (FLAGS ONBIT RLANDBIT)
+      (GLOBAL FORT ROAD BANKS)>
+
+<ROOM PARADE-GROUND
+      (IN ROOMS)
+      (DESC "Parade Ground")
+      (LDESC
+"You are at the center of a level field inside the fort. Entrances to
+rooms around the perimeter lie in several directions.")
+      (WEST TO FORT-ENTRANCE)
+      (SOUTH TO ARMORY)
+      (EAST TO GUN-EMPLACEMENT)
+      (NORTH TO BARRACKS)
+      (UP "If you want to climb the flagpole, just say so.")
+      (FLAGS RLANDBIT ONBIT)
+      (PSEUDO "ROPE" ROPE-PSEUDO)
+      (GLOBAL FORT)
+      (ACTION PARADE-GROUND-F)>
+
+<ROUTINE PARADE-GROUND-F (RARG)
+        <COND (<EQUAL? .RARG ,M-ENTER>
+               <PUT ,VEZZAS 2 0>
+               <RFALSE>)
+              (<AND <EQUAL? .RARG ,M-END>
+                    ,SLEEPING>
+               <DISABLE <INT I-WAKE-UP>>
+               <I-WAKE-UP>)>>
+
+<ROUTINE ROPE-PSEUDO ()
+        <COND (<VERB? MOVE>
+               <PERFORM ,V?LOWER ,FLAG>
+               <RTRUE>)
+              (<VERB? TAKE>
+               <TELL
+"The rope is attached to the pole and can't possibly be removed." CR>)>>
+
+<OBJECT FLAG-POLE
+       (IN PARADE-GROUND)
+       (DESC "flagpole")
+       (SYNONYM POLE FLAGPO)
+       (ADJECTIVE FLAG)
+       (FLAGS NDESCBIT)
+       (ACTION FLAG-POLE-F)>
+
+<ROUTINE FLAG-POLE-F ()
+        <COND (<VERB? CLIMB-ON CLIMB-FOO CLIMB-UP>
+               <TELL
+"That sort of thing went out of fashion years ago." CR>)
+              (<VERB? EXAMINE>
+               <TELL "A rope runs up the side of the pole." CR>)>>
+
+<OBJECT FLAG
+       (IN PARADE-GROUND)
+       (DESC "flag of Quendor")
+       (SYNONYM FLAG)
+       (ADJECTIVE TATTER BROWN GOLD)
+       (FLAGS TAKEBIT TRYTAKEBIT)
+       (SIZE 8)
+       (DESCFCN FLAG-DESCFCN)
+       (ACTION FLAG-F)>
+
+<GLOBAL FLAG-RAISED T>
+
+<GLOBAL FOOBLE-FOUND <>>
+
+<ROUTINE FLAG-DESCFCN (RARG)
+        <COND (,FLAG-RAISED
+               <TELL
+"A tattered flag, apparently that of ancient Quendor, still flies atop
+a mighty flagpole in the center of the field." CR>)
+              (T
+               <TELL
+"A flag displaying the brown and gold of ancient Quendor is lying here." CR>)>>
+
+<ROUTINE FLAG-F ()
+        <COND (<VERB? FLY>
+               <PERFORM ,V?RAISE ,FLAG>
+               <RTRUE>)>
+        <COND (,FLAG-RAISED
+               <COND (<VERB? RAISE>
+                      <TELL "It's already at the top of the pole." CR>)
+                     (<VERB? LOWER>
+                      <SETG FLAG-RAISED <>>
+                      <FCLEAR ,FLAG ,TRYTAKEBIT>
+                      <FCLEAR ,FLAG-POLE ,NDESCBIT>
+                      <TELL "The flag is lowered to the ground." CR>)
+                     (<VERB? EXAMINE>
+                      <TELL
+"You can't see it very well from here -- the flagpole is very tall." CR>)
+                     (<VERB? SHAKE WAVE TAKE MOVE RUB EAT DRINK LOOK-INSIDE>
+                      <TELL "The flag is ">
+                      <COND (,FLYING
+                             <TELL "still ">)>
+                      <TELL
+"way above you at the top of the flagpole!" CR>)
+                     (<VERB? LOOK-UNDER>
+                      <PERFORM ,V?EXAMINE ,FLAG-POLE>
+                      <RTRUE>)>)
+              (T
+               <COND (<VERB? RAISE>
+                      <COND (<EQUAL? ,HERE ,PARADE-GROUND>
+                             <FSET ,FLAG ,TRYTAKEBIT>
+                             <MOVE ,FLAG ,HERE>
+                             <FSET ,FLAG-POLE ,NDESCBIT>
+                             <SETG FLAG-RAISED T>
+                             <TELL
+"The flag is raised to the top of the pole." CR>)
+                            (T
+                             <TELL "There's no flagpole in sight." CR>)>)
+                     (<VERB? LOWER>
+                      <TELL "You've already done that." CR>)
+                     (<VERB? WAVE>
+                      <TELL "How patriotic!" CR>)
+                     (<VERB? WEAR>
+                      <TELL "Who do you think you are, Abbie Hoffman?" CR>)
+                     (<AND <VERB? EXAMINE LOOK-INSIDE SHAKE RUB SEARCH>
+                           <NOT ,FOOBLE-FOUND>>
+                      <SETG FOOBLE-FOUND T>
+                      <MOVE ,FOOBLE-VIAL ,HERE>
+                      <THIS-IS-IT ,FOOBLE-VIAL>
+                      <TELL
+"As you fiddle with the flag, an aqua vial drops from a hidden pocket
+and falls to the ground." CR>)
+                     (<VERB? EXAMINE>
+                      <TELL
+"The tattered flag displays the brown and gold of ancient Quendor." CR>)>)>>
+
+<OBJECT FOOBLE-VIAL
+       (IN DIAL)
+       (DESC "aqua vial")
+       (SYNONYM VIAL VIALS LABEL)
+       (ADJECTIVE AQUA FOOBLE)
+       (FLAGS CONTBIT READBIT TAKEBIT VOWELBIT VIALBIT SEARCHBIT)
+       (SIZE 3)
+       (CAPACITY 1)
+       (ACTION FOOBLE-VIAL-F)>
+
+<ROUTINE FOOBLE-VIAL-F ()
+        <COND (<VERB? READ>
+               <FIXED-FONT-ON>
+               <TELL
+"|
+        \"FOOBLE POTION|
+(increase muscular coordination)\"" CR>
+               <FIXED-FONT-OFF>)>>
+
+<OBJECT FOOBLE-POTION
+       (IN FOOBLE-VIAL)
+       (DESC "aqua potion")
+       (SYNONYM POTION)
+       (ADJECTIVE AQUA FOOBLE)
+       (FLAGS NARTICLEBIT VOWELBIT)
+       (ACTION FOOBLE-POTION-F)>
+
+<ROUTINE FOOBLE-POTION-F ()
+        <COND (<AND <VERB? EAT DRINK>
+                    <NOT <HELD? ,FOOBLE-VIAL>>>
+               <POTION-POUR ,FOOBLE-VIAL>)
+              (<VERB? RESEARCH>
+               <READ-ABOUT-POTIONS 2>)
+              (<VERB? EAT DRINK>
+               <MOVE ,FOOBLE-POTION ,DIAL>
+               <COND (,UNDER-INFLUENCE
+                      <TWO-POTIONS>
+                      <RTRUE>)>
+               <SETG UNDER-INFLUENCE ,FOOBLE-POTION>
+               <ENABLE <QUEUE I-UNFOOBLE 17>>
+               <SETG FOOBLED T>
+               <TELL
+"The aqua potion tasted like lime jelly, and sent vibrations through
+your muscles." CR>)
+              (<VERB? DROP>
+               <PERFORM ,V?POUR ,PRSO ,PRSI>
+               <RTRUE>)
+              (<AND <VERB? POUR>
+                    <EQUAL? ,PRSO ,FOOBLE-POTION>>
+               <POTION-POUR ,FOOBLE-VIAL>)>>
+
+<GLOBAL FOOBLED <>>
+
+<ROUTINE I-UNFOOBLE ()
+        <SETG FOOBLED <>>
+        <COND (<EQUAL? ,UNDER-INFLUENCE ,FOOBLE-POTION>
+               <SETG UNDER-INFLUENCE <>>)>
+        <TELL CR "Your muscles feel limp for a moment." CR>>
+
+<ROOM ARMORY
+      (IN ROOMS)
+      (DESC "Armory")
+      (LDESC
+"Once the armory for the fort, this room has been picked clean by
+vandals and soldiers of fortune. Exit north or northeast.")
+      (NORTH TO PARADE-GROUND)
+      (NE TO GUN-EMPLACEMENT)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL FORT)>
+
+<ROOM BARRACKS
+      (IN ROOMS)
+      (DESC "Barracks")
+      (LDESC
+"This was a barracks for the battalion stationed in this fort. You
+could leave to the south, or to the southeast.")
+      (SOUTH TO PARADE-GROUND)
+      (SE TO GUN-EMPLACEMENT)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (PSEUDO "BARRAC" BARRACKS-PSEUDO)
+      (GLOBAL FORT)>
+
+<ROUTINE BARRACKS-PSEUDO ()
+        <SETG PERFORMING-SPELL T>
+        <PERFORM ,PRSA ,GLOBAL-ROOM ,PRSI>
+        <RTRUE>>
+
+<ROOM GUN-EMPLACEMENT
+      (IN ROOMS)
+      (DESC "Gun Emplacement")
+      (LDESC
+"This is a battlement with a view of a river to the north and an ocean to
+the east. Openings northwest, west, and southwest lead to other parts of
+the fort.")
+      (WEST TO PARADE-GROUND)
+      (NW TO BARRACKS)
+      (SW TO ARMORY)
+      (NORTH PER EMPLACEMENT-EXIT-F)
+      (EAST PER EMPLACEMENT-EXIT-F)
+      (FLAGS ONBIT RLANDBIT)
+      (GLOBAL RIVER OCEAN FORT)>      
+
+<ROUTINE EMPLACEMENT-EXIT-F ()
+        <COND (,FLYING
+               <TELL "The updrafts from the ">
+               <COND (<EQUAL? ,PRSO ,P?NORTH>
+                      <TELL "river">)
+                     (T
+                      <TELL "ocean">)>)
+              (T
+               <TELL "The plunge">)>
+        <TELL " would kill you." CR>
+        <RFALSE>>
+
+<OBJECT CANNON
+       (IN GUN-EMPLACEMENT)
+       (DESC "cannon")
+       (LDESC
+"A magnificent cast-iron cannon stands atop the battlement. Its wide,
+shallow barrel points toward the ocean, as though daring enemy ships
+to approach.")
+       (SYNONYM CANNON BARREL)
+       (ADJECTIVE MAGNIF CAST-IRON CAST IRON WIDE SHALLO)
+       (FLAGS CONTBIT OPENBIT SEARCHBIT)
+       (CAPACITY 80)
+       (ACTION CANNON-F)>
+
+<ROUTINE CANNON-F ()
+        <COND (<VERB? SHOOT LAMP-ON>
+               <TELL "This cannon probably hasn't worked for centuries!" CR>)
+              (<VERB? CLOSE>
+               <V-DEFLATE>)
+              (<AND <VERB? REACH-IN SEARCH>
+                    <FSET? ,YIPPLES ,INVISIBLE>>
+               <SETG BITTEN T>
+               <ENABLE <QUEUE I-BITE-HEAL 20>>
+               <TELL "Something bites your hand!" CR>)
+              (<AND <VERB? LOOK-INSIDE>
+                    <FSET? ,YIPPLES ,INVISIBLE>>
+               <FCLEAR ,YIPPLES ,INVISIBLE>
+               <TELL
+"Lying at the bottom of the barrel is a pile of identical scrolls!" CR>)
+              (<VERB? EXAMINE>
+               <TELL
+"The barrel is wide enough to hold the hugest of cannonballs, but it
+isn't very deep." CR>)
+              (<AND <VERB? REACH-IN SEARCH>
+                    <IN? ,YIPPLES ,CANNON>>
+               <PERFORM ,V?TAKE ,YIPPLES>
+               <RTRUE>)
+              (<AND <VERB? PUT>
+                    <IN? ,YIPPLES ,CANNON>
+                    <EQUAL? ,BAT-GUANO ,PRSO>>
+               <MOVE ,YIPPLES ,DIAL>
+               <MOVE ,YONK-SCROLL ,CANNON>
+               <THIS-IS-IT ,YONK-SCROLL>
+               <MOVE ,BAT-GUANO ,CANNON>
+               <TELL
+"When you drop the guano into the barrel, ">
+               <COND (<FSET? ,YIPPLES ,INVISIBLE>
+                      <TELL
+"dozens of scrolls pour out and literally run off">)
+                     (T
+                      <TELL
+"the scrolls sprout feet and spill out of the cannon, dashing away">)>
+               <TELL " in every direction! A single ordinary scroll
+is left sitting at the bottom of the barrel." CR>
+               <FCLEAR ,YIPPLES ,INVISIBLE>)
+              (<AND <VERB? THROUGH>
+                    ,FWEEPED>
+               <TELL "Your wingspan is too large." CR>)>>
+
+<OBJECT YIPPLES
+       (IN CANNON)
+       (DESC "pile of identical scrolls")
+       (SYNONYM PILE SCROLL)
+       (ADJECTIVE IDENTI)
+       (FLAGS INVISIBLE TRYTAKEBIT)
+       (ACTION YIPPLES-F)>
+
+<ROUTINE YIPPLES-F ()
+        <COND (<VERB? TAKE>
+               <SETG BITTEN T>
+               <ENABLE <QUEUE I-BITE-HEAL 20>>
+               <TELL
+"As you reach into the cannon, something bites you painfully on the hand!" CR>)
+              (<VERB? EXAMINE>
+               <TELL "Every scroll is virtually identical." CR>)>>
+
+<GLOBAL BITTEN <>>
+
+<ROUTINE I-BITE-HEAL ()
+        <SETG BITTEN <>>
+        <RFALSE>>
+
+<OBJECT YONK-SCROLL
+       (IN DIAL)
+       (DESC "ordinary scroll")
+       (SYNONYM SCROLL)
+       (ADJECTIVE SINGLE ORDINA)
+       (FLAGS READBIT SCROLLBIT TAKEBIT CONTBIT TRANSBIT VOWELBIT)
+       (SIZE 3)
+       (ACTION SCROLL-F)>      
+
+<OBJECT YONK-SPELL
+       (IN YONK-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE YONK)
+       (DESC "yonk spell")
+       (TEXT "augment the power of certain spells")
+       (COUNT 0)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)
+       (ACTION SPELL-F)>
\ No newline at end of file
diff --git a/globals.zil b/globals.zil
new file mode 100644 (file)
index 0000000..e508ecc
--- /dev/null
@@ -0,0 +1,1408 @@
+"GLOBALS for
+                           SORCERER
+       (c) Copyright 1984 Infocom, Inc.  All Rights Reserved."
+
+<DIRECTIONS ;"Do not change the order of the first eight
+             without consulting MARC!"
+           NORTH NE EAST SE SOUTH SW WEST NW UP DOWN IN OUT>
+
+<GLOBAL HERE <>>
+
+<GLOBAL LOAD-ALLOWED 100>
+
+<GLOBAL LOAD-MAX 100>
+
+<GLOBAL LIT T>
+
+<GLOBAL MOVES 0>
+
+<GLOBAL SCORE 0>
+
+<GLOBAL INDENTS
+       <PTABLE ""
+              "  "
+              "    "
+              "      "
+              "        "
+              "          ">>
+
+;"global objects and associated routines"
+
+<OBJECT GLOBAL-OBJECTS
+       (FLAGS MUNGBIT INVISIBLE TOUCHBIT SURFACEBIT TRYTAKEBIT OPENBIT
+              SEARCHBIT TRANSBIT WEARBIT VOWELBIT ONBIT RLANDBIT)>
+
+<OBJECT LOCAL-GLOBALS
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM ZZMGCK)
+       (DESCFCN 0)
+        (GLOBAL GLOBAL-OBJECTS)
+       (ADVFCN 0)
+       (FDESC "F")
+       (LDESC "F")
+       (PSEUDO "FOOBAR" V-WALK)
+       (CONTFCN 0)
+       (SIZE 0)
+       (CAPACITY 0)>
+;"Yes, this synonym for LOCAL-GLOBALS needs to exist... sigh"
+
+<OBJECT ROOMS
+       (IN TO ROOMS)>
+
+<OBJECT INTNUM
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM INTNUM)
+       (DESC "number")>
+
+<OBJECT PSEUDO-OBJECT
+       (DESC "pseudo")
+       (ACTION ME-F)>
+
+<OBJECT IT
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM IT THAT HER HIM)
+       (DESC "it")
+       (FLAGS VOWELBIT NARTICLEBIT NDESCBIT TOUCHBIT)>
+
+<OBJECT NOT-HERE-OBJECT
+       (DESC "something")
+       (FLAGS NARTICLEBIT)
+       (ACTION NOT-HERE-OBJECT-F)>
+
+<ROUTINE NOT-HERE-OBJECT-F ("AUX" TBL (PRSO? T) OBJ (X <>))
+        ;"This COND is game independent (except the TELL)"
+        <COND (<AND <EQUAL? ,PRSO ,NOT-HERE-OBJECT>
+                    <EQUAL? ,PRSI ,NOT-HERE-OBJECT>>
+               <TELL "Those things aren't here!" CR>
+               <RTRUE>)
+              (<EQUAL? ,PRSO ,NOT-HERE-OBJECT>
+               <SET TBL ,P-PRSO>)
+              (T
+               <SET TBL ,P-PRSI>
+               <SET PRSO? <>>)>
+        <COND (.PRSO?
+               <COND (<OR <EQUAL? ,PRSA ,V?FIND ,V?FOLLOW ,V?AIMFIZ>
+                          <EQUAL? ,PRSA ,V?WHAT ,V?WHERE ,V?WHO>
+                          <EQUAL? ,PRSA ,V?WAIT-FOR ,V?SEND ,V?WALK-TO>
+                          <EQUAL? ,PRSA ,V?RESEARCH>>
+                      <SET X T>
+                      <COND (<SET OBJ <FIND-NOT-HERE .TBL .PRSO?>>
+                             <COND (<NOT <EQUAL? .OBJ ,NOT-HERE-OBJECT>>
+                                    <RTRUE>)>)
+                            (T
+                             <RFALSE>)>)>)
+              (T
+               <COND (<OR <AND <EQUAL? ,PRSA ,V?AIMFIZ-TO>
+                               <EQUAL? ,PRSO ,ME>>                        
+                          <AND <EQUAL? ,PRSA ,V?CAST>
+                               <EQUAL? ,PRSO ,AIMFIZ-SPELL>>>
+                      <SET X T>
+                      <COND (<SET OBJ <FIND-NOT-HERE .TBL .PRSO?>>
+                             <COND (<NOT <EQUAL? .OBJ ,NOT-HERE-OBJECT>>
+                                    <RTRUE>)>)
+                            (T
+                             <RFALSE>)>)>)>
+        ;"Here is the default 'cant see any' printer"
+        <COND (.X
+               <TELL "You'll have to be more specific, I'm afraid." CR>)
+              (<EQUAL? ,WINNER ,PROTAGONIST>
+               <TELL "You can't see">
+               <COND (<OR <EQUAL? ,P-XNAM ,W?BELBOZ ,W?HELIST ,W?KRILL>
+                          <EQUAL? ,P-XNAM ,W?FROBAR ,W?JEEARR ,W?FLATHE>
+                          <EQUAL? ,P-XNAM ,W?DUNCAN ,W?ENTHAR ,W?THOLL>
+                          <EQUAL? ,P-XNAM ,W?GURTH ,W?MIZNIA ,W?ACCARD>
+                          <EQUAL? ,P-XNAM ,W?BORPHE ,W?ANTHAR ,W?MITHIC>
+                          <EQUAL? ,P-XNAM ,W?GALEPA ,W?MAREIL ,W?THRIFF>
+                          <EQUAL? ,P-XNAM ,W?ORKAN ,W?BARBEL ,W?CHEVAU>>
+                      T)
+                     (T
+                      <TELL " any">)> 
+               <NOT-HERE-PRINT .PRSO?>
+               <TELL " here!" CR>)
+              (T
+               <TELL "Looking confused,">
+               <ARTICLE ,WINNER T>
+               <TELL " says, \"I don't see any">
+               <NOT-HERE-PRINT .PRSO?>
+               <TELL " here!\"" CR>)>
+        <SETG P-CONT <>>
+        <SETG QUOTE-FLAG <>>
+        <RTRUE>>
+
+<ROUTINE FIND-NOT-HERE (TBL PRSO? "AUX" M-F OBJ)
+       ;"Here is where special-case code goes. <MOBY-FIND .TBL> returns
+          number of matches. If 1, then P-MOBY-FOUND is it. One may treat
+          the 0 and >1 cases alike or different. It doesn't matter. Always
+          return RFALSE (not handled) if you have resolved the problem."
+       <SET M-F <MOBY-FIND .TBL>>
+       ;<COND (,DEBUG
+              <TELL "[Found " N .M-F " obj]" CR>)>
+       ;<COND (<AND <G? .M-F 1>
+                   <SET OBJ <GETP <1 .TBL> ,P?GLOBAL>>>
+              <SET M-F 1>
+              <SETG P-MOBY-FOUND .OBJ>)>
+       <COND (<==? 1 .M-F>
+              ;<COND (,DEBUG <TELL "[Namely: " D ,P-MOBY-FOUND "]" CR>)>
+              <COND (.PRSO?
+                     <SETG PRSO ,P-MOBY-FOUND>)
+                    (T
+                     <SETG PRSI ,P-MOBY-FOUND>)>
+              <RFALSE>)
+             (<NOT .PRSO?>
+              <TELL "You wouldn't find any">
+              <NOT-HERE-PRINT .PRSO?>
+              <TELL " there." CR>
+              <RTRUE>)
+             (T ,NOT-HERE-OBJECT)>>
+
+;<ROUTINE GLOBAL-NOT-HERE-PRINT (OBJ)
+        ;<COND (,P-MULT <SETG P-NOT-HERE <+ ,P-NOT-HERE 1>>)>
+        <SETG P-CONT <>>
+        <SETG QUOTE-FLAG <>>
+        <TELL "You can't see any ">
+        <COND (<EQUAL? .OBJ ,PRSO> <PRSO-PRINT>)
+              (T <PRSI-PRINT>)>
+        <TELL " here." CR>>
+
+<ROUTINE NOT-HERE-PRINT (PRSO?)
+        <COND (<EQUAL? ,P-XNAM ,W?BELBOZ>
+               <TELL " Belboz">)
+              (<EQUAL? ,P-XNAM ,W?THOLL>
+               <TELL " Tholl">)
+              (<OR <EQUAL? ,P-XNAM ,W?GURTH ,W?MIZNIA ,W?ACCARD>
+                   <EQUAL? ,P-XNAM ,W?BORPHE ,W?ANTHAR ,W?MITHIC>
+                   <EQUAL? ,P-XNAM ,W?GALEPA ,W?MAREIL ,W?THRIFF>>
+               <TELL " that place">)
+              (<OR <EQUAL? ,P-XNAM ,W?HELIST ,W?FROBAR ,W?ORKAN>
+                   <EQUAL? ,P-XNAM ,W?BARBEL ,W?CHEVAU>>
+               <TELL " that person">)
+              (<EQUAL? ,P-XNAM ,W?JEEARR>
+               <TELL " Jeearr">)
+              (<EQUAL? ,P-XNAM ,W?KRILL>
+               <TELL " Krill">)
+              (<EQUAL? ,P-XNAM ,W?FLATHE>
+               <TELL " Flathead">)
+              (<EQUAL? ,P-XNAM ,W?DUNCAN ,W?ENTHAR>
+               <TELL " that King">)
+              (,P-OFLAG
+               <COND (,P-XADJ <TELL " "> <PRINTB ,P-XADJN>)>
+               <COND (,P-XNAM <TELL " "> <PRINTB ,P-XNAM>)>)
+               (.PRSO?
+               <BUFFER-PRINT <GET ,P-ITBL ,P-NC1> <GET ,P-ITBL ,P-NC1L> <>>)
+               (T
+               <BUFFER-PRINT <GET ,P-ITBL ,P-NC2> <GET ,P-ITBL ,P-NC2L> <>>)>>
+
+<OBJECT DEBRIS
+       (IN GLOBAL-OBJECTS)
+       (DESC "dust and debris")
+       (SYNONYM RUBBLE DEBRIS CAVE-IN DUST)
+       (FLAGS NARTICLEBIT)>
+
+<OBJECT GROUND
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM FLOOR GROUND PLATEAU FIELD)
+       (ADJECTIVE STONE SANDY TINY OUTDOO LEVEL)
+       (DESC "ground")
+       (ACTION GROUND-F)>
+
+<ROUTINE GROUND-F ()
+        <COND (<VERB? CLIMB-UP CLIMB-ON CLIMB-FOO BOARD>
+               <V-SIT>)
+              (<AND <VERB? EXAMINE>
+                    <EQUAL? ,HERE ,LAGOON>>
+               <TELL "Through the water you can see sandy ground below." CR>)
+              (<AND <VERB? LOOK-UNDER LOOK-INSIDE EXAMINE>
+                    <EQUAL? ,HERE ,GLASS-MAZE>>
+               <PERFORM ,V?EXAMINE ,MAZE>
+               <RTRUE>)
+              (<VERB? LOOK-UNDER>
+               <TELL "You've never mastered an X-ray vision spell." CR>)>>
+
+<OBJECT ROAD
+       (IN LOCAL-GLOBALS)
+       (DESC "road")
+       (SYNONYM HIGHWAY ROAD TRAIL PATH)
+       (ADJECTIVE DIRT FEATUR WIDE CURVED MAIN UNDERG)
+       (FLAGS NDESCBIT)
+       (ACTION ROAD-F)>
+
+<ROUTINE ROAD-F ()
+        <COND (<VERB? FOLLOW>
+               <V-WALK-AROUND>)>>
+
+<OBJECT CORRIDOR
+       (IN GLOBAL-OBJECTS)
+       (DESC "passage")
+       (SYNONYM PASSAG CORRID HALLWA TUNNEL)
+       (ADJECTIVE ROCKY WINDIN LONG DARK MEANDE)
+       (ACTION CORRIDOR-F)>
+
+<ROUTINE CORRIDOR-F ()
+        <COND (<VERB? THROUGH WALK-TO>
+               <V-WALK-AROUND>)>>
+
+<OBJECT WALLS
+       (IN GLOBAL-OBJECTS)
+       (FLAGS NDESCBIT TOUCHBIT)
+       (DESC "wall")
+       (SYNONYM WALL WALLS)
+       (ACTION WALLS-F)>
+
+<ROUTINE WALLS-F ()
+        <COND (<AND <VERB? READ>
+                    <EQUAL? ,HERE ,CHAMBER-OF-THE-CIRCLE>>
+               <PERFORM ,V?READ ,TENETS>
+               <RTRUE>)
+              (<AND <VERB? EXAMINE>
+                    <EQUAL? ,HERE ,HALL-OF-CARVINGS>
+                    <NOT ,DRAGON-MOVED>>
+               <TELL "A dragon carving adorns the far wall." CR>)
+              (<AND <EQUAL? ,HERE ,SLIMY-ROOM>
+                    <VERB? EXAMINE>>
+               <TELL "The walls are covered with moss and stuff." CR>)
+              (<AND <EQUAL? ,HERE ,GLASS-MAZE>
+                    <VERB? EXAMINE LOOK-INSIDE>>
+               <PERFORM ,V?EXAMINE ,MAZE>
+               <RTRUE>)>>
+
+<OBJECT CEILING
+       (IN GLOBAL-OBJECTS)
+       (FLAGS NDESCBIT TOUCHBIT)
+       (DESC "ceiling")
+       (SYNONYM CEILIN ROOF DOME)
+       (ADJECTIVE HIGH DOMED)
+       (ACTION CEILING-F)>
+
+<ROUTINE CEILING-F ()
+        <COND (<VERB? EXAMINE>
+               <COND (<EQUAL? ,HERE ,SLANTED-ROOM>
+                      <TELL
+"The ceiling is slanted, making the room trapezoidal in shape." CR>)
+                     (<EQUAL? ,HERE ,PIT-OF-BONES>
+                      <TELL "There's an opening in the ceiling." CR>)
+                     (<EQUAL? ,HERE ,CHAMBER-OF-THE-CIRCLE>
+                      <TELL
+"Other than its shape, there's nothing of interest." CR>)>)
+              (<AND <EQUAL? ,HERE ,GLASS-MAZE>
+                    <VERB? EXAMINE LOOK-INSIDE>>
+               <PERFORM ,V?EXAMINE ,MAZE>
+               <RTRUE>)
+              (<VERB? LOOK-UNDER>
+               <PERFORM ,V?LOOK>
+               <RTRUE>)>>
+
+<OBJECT STAIRS
+       (IN LOCAL-OBJECTS)
+       (DESC "stairs")
+       (SYNONYM STAIR STAIRS STAIRW STAIRC)
+       (ADJECTIVE MARBLE WIDE NARROW STEEP WINDIN SPIRAL)
+       (FLAGS NARTICLEBIT NDESCBIT CLIMBBIT)
+       (ACTION STAIRS-F)>
+
+<ROUTINE STAIRS-F ()
+        <COND (<VERB? CLIMB-UP CLIMB-FOO>
+               <DO-WALK ,P?UP>)
+              (<VERB? CLIMB-DOWN>
+               <DO-WALK ,P?DOWN>)>>
+
+<OBJECT HANDS
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM HANDS)
+       (ADJECTIVE BARE)
+       (DESC "your hand")
+       (FLAGS NDESCBIT TOOLBIT TOUCHBIT NARTICLEBIT)>
+
+<OBJECT PROTAGONIST
+       (SYNONYM PROTAG)
+       (DESC "protagonist")
+       (FLAGS NDESCBIT INVISIBLE)
+       (ACTION 0)>
+
+<OBJECT BAT
+       (IN GLOBAL-OBJECTS)
+       (DESC "yourself")
+       (SYNONYM BAT)
+       (ADJECTIVE LARGE)
+       (FLAGS ACTORBIT TOUCHBIT NARTICLEBIT)
+       (ACTION BAT-F)>
+
+<ROUTINE BAT-F ()
+        <COND (,FWEEPED
+               <COND (<EQUAL? ,PRSO ,BAT>
+                      <SETG PERFORMING-SPELL T>
+                      <PERFORM ,PRSA ,ME ,PRSI>
+                      <RTRUE>)
+                     (T
+                      <SETG PERFORMING-SPELL T>
+                      <PERFORM ,PRSA ,PRSO ,ME>
+                      <RTRUE>)>)
+              (<NOT <VERB? RESEARCH>>
+               <YOU-CANT-SEE-ANY "bat">)
+              (T
+               <TELL "The entry about bats is long and uninteresting." CR>)>>
+
+<OBJECT ME
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM ME MYSELF SELF ENCHAN)
+       (DESC "yourself")
+       (FLAGS ACTORBIT TOUCHBIT NARTICLEBIT)
+       (ACTION ME-F)> 
+       
+<ROUTINE ME-F ("AUX" OLIT) 
+        <COND (<VERB? TELL>
+               <TELL
+"Talking to yourself is said to be a sign of impending mental collapse." CR>
+               <STOP>)
+              (<VERB? LISTEN>
+               <TELL "Yes?" CR>)
+              (<VERB? ALARM>
+               <COND (,SLEEPING
+                      <TELL
+"As you wake up, Frobar sticks his head in the door and invites you
+shopping. When you return late that evening, you find the Guild Hall
+sacked, and many fellow Enchanters slaughtered. Servants of evil, teeth
+smeared with blood, fall upon you as well. A menacing voice echoes about
+the room. \"Pathetic Enchanters ... Who can save you now?\"|
+|
+Some days it just doesn't pay to wake up.">
+                      <FINISH>)
+                     (T
+                      <TELL "You are obviously awake already." CR>)>)
+              (<VERB? RESEARCH>
+               <TELL
+"You find several sentences mentioning your heroic defeat of the
+warlock Krill." CR>)
+              (<VERB? AIMFIZ>
+               <TELL "You are suddenly ">
+               <COND (,FLYING
+                      <TELL "floating">)
+                     (T
+                      <TELL "standing">)>
+               <TELL " right next to your former location! Wow!!" CR>)
+              (<VERB? VARDIK>
+               <SETG VARDIKED T>
+               <ENABLE <QUEUE I-UNVARDIK 12>>
+               <TELL
+"A feeling of warmth and protection fills your mind." CR>)
+              (<VERB? YOMIN>
+               <TELL
+"You sense a mind concentrating on casting the yomin spell." CR>) 
+              (<VERB? GASPAR>
+               <SETG RESURRECTION-ROOM ,HERE>
+               <TELL "A sense of peace of mind passes over you." CR>)
+              (<VERB? GOLMAC>
+               <COND (,GOLMACKED
+                      <POOF>)>
+               <SETG GOLMACKED T>
+               <FCLEAR ,KEROSENE-LAMP ,OPENBIT>
+               <MOVE ,VARDIK-SCROLL ,KEROSENE-LAMP>
+               <MOVE ,GOLMAC-SCROLL ,SLANTED-ROOM>
+               <FCLEAR ,GOLMAC-SCROLL ,ONBIT>
+               <MOVE ,ROPE ,SHAFT-BOTTOM>
+               <MOVE ,BEAM ,COAL-MINE-1>
+               <SETG ROPE-PLACED <>>
+               <SETG ROPE-TO-BEAM <>>
+               <SETG CURRENT-SETTING 0>
+               <FCLEAR ,ROPE ,TOUCHBIT>
+               <FCLEAR ,DIAL-DOOR ,OPENBIT>
+               <SETG DIAL-OPEN <>>
+               <TELL
+"You are surrounded by a puff of smoke, and feel disoriented for a
+moment. When the smoke clears, nothing seems to have changed">
+               <COND (<EQUAL? ,HERE ,SLANTED-ROOM>
+                      <TELL ", except that the kerosene lamp is now closed">)>
+               <TELL "." CR>)
+              (<AND <VERB? LOWER-INTO>
+                    <EQUAL? ,PRSI ,LOWER-CHUTE ,UPPER-CHUTE>>
+               <DO-WALK ,P?DOWN>)
+              (<VERB? EXAMINE>
+               <COND (,FWEEPED
+                      <TELL
+"You're batty! (And a rather large one, at that.)" CR>)
+                     (<FSET? ,PROTAGONIST ,ONBIT>
+                      <TELL
+"You seem to have been frotzed." CR>)>)
+              (<AND <VERB? FROTZ>
+                    <NOT <FSET? ,PROTAGONIST ,ONBIT>>>
+               <COND (,SLEEPING 
+                      <V-SWANZO>)
+                     (T
+                      <SET OLIT ,LIT>
+                      <SETG ALWAYS-LIT T>
+                      <FSET ,ME ,ONBIT>
+                      <FSET ,PROTAGONIST ,ONBIT>
+                      <FSET ,YOUNGER-SELF ,ONBIT>
+                      <TELL
+"You are bathed in a sickly yellow light, bright enough to read by." CR>
+                      <SETG LIT <LIT? ,HERE>>
+                      <COND (<AND <NOT .OLIT> ,LIT>
+                             <CRLF>
+                             <V-LOOK>)>
+                      <RTRUE>)>)
+              (<AND <VERB? GIVE>
+                    <EQUAL? ,PRSI ,ME>>
+               <COND (<HELD? ,PRSO>
+                      <TELL "You already have it." CR>)
+                     (T
+                      <PERFORM ,V?TAKE ,PRSO>
+                      <RTRUE>)>)
+              (<VERB? KILL MUNG ATTACK>
+               <JIGS-UP "Done.">)
+              (<VERB? FIND>
+               <TELL "You're right here!" CR>)>>
+
+<OBJECT GRUE
+       (IN GLOBAL-OBJECTS)
+       (SYNONYM GRUE)
+       (ADJECTIVE LURKIN SINIST HUNGRY SILENT LEGEND)
+       (DESC "lurking grue")
+       (ACTION GRUE-F)>
+
+<ROUTINE GRUE-F ()
+    <COND (<EQUAL? ,HERE ,GRUE-LAIR>
+          <THIS-IS-IT ,MUTATED-GRUES>)>
+    <COND (<VERB? EXAMINE RUB RAISE LOWER KICK TAKE LOOK-UNDER>
+          <TELL "You can't see any grue here (thankfully)." CR>)
+         (<VERB? WHERE>
+          <TELL
+"There is no grue here, but I'm sure there is at least one lurking
+in the darkness nearby. I'd stay near a light source if I were you!" CR>)
+         (<VERB? LISTEN>
+          <TELL
+"It makes no sound but is always lurking in the darkness nearby." CR>)
+         (<VERB? FROTZ>
+          <COND (<EQUAL? ,HERE ,GRUE-LAIR>               
+                 <TELL "There is a flash of light from nearby!" CR>
+                 <COND (<NOT ,LIT>
+                        <SETG LIT T>
+                        <V-LOOK>)>
+                 <FSET ,HERE ,ONBIT>)
+                (,LIT
+                 <TELL "There aren't any grues here -- it's light!" CR>)
+                (T
+                 <TELL
+"There's a flash of light nearby, and you glimpse a horrible, multi-fanged
+creature, a look of sheer terror on its face. It charges away, gurgling in
+agony, tearing at its glowing fur." CR>)>)
+         (<VERB? RESEARCH>
+          <PERFORM ,V?RESEARCH ,LOBBY>
+          <RTRUE>)>>
+
+<OBJECT WATER
+       (IN LOCAL-GLOBALS)
+       (SYNONYM WATER TRICKLE POOL)
+       (ADJECTIVE SWIRLI TURBUL STAGNA)
+       (DESC "water")
+       (FLAGS NARTICLEBIT)
+       (ACTION WATER-F)> 
+
+<ROUTINE WATER-F ()
+        <COND (<VERB? DRINK DRINK-FROM>
+               <TELL "It's dangerous to drink untested water!" CR>)
+              (<VERB? LOOK-INSIDE>
+               <MAKE-OUT>)
+              (<AND <VERB? FILL>
+                    <FSET? ,PRSO ,VIALBIT>>
+               <TELL
+"A vial nymph appears to warn that water can destroy the delicate magic
+properties of potion vials. It wags a finger at you before vanishing." CR>)
+              (<AND <EQUAL? ,WATER ,PRSI>
+                    <NOT <EQUAL? ,HERE ,STAGNANT-POOL ,HIDDEN-CAVE>>>
+               <WATER-IS-PRSI>)
+              (<EQUAL? ,HERE ,COVE ,LAGOON ,LAGOON-FLOOR>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,LAGOON-OBJECT ,PRSI>
+               <RTRUE>)
+              (<EQUAL? ,HERE ,OCEAN-NORTH ,OCEAN-SOUTH ,MOUTH-OF-RIVER>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,OCEAN ,PRSI>
+               <RTRUE>)
+              (<EQUAL? ,HERE ,DRAWBRIDGE>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,MOAT ,PRSI>
+               <RTRUE>)
+              (<EQUAL? ,HERE ,RIVER-BANK>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,RIVER ,PRSI>
+               <RTRUE>)
+              (<EQUAL? ,HERE ,FLUME>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,FLUME-OBJECT ,PRSI>
+               <RTRUE>)
+              (<EQUAL? ,HERE ,STAGNANT-POOL>
+               <COND (<VERB? THROUGH>
+                      <DO-WALK ,P?NW>)
+                     (<VERB? PULVER>
+                      <JIGS-UP
+"The pool evaporates, to the annoyance of a multi-tentacled denizen,
+who proceeds to take out its anger on you.">)>)
+              (<EQUAL? ,HERE ,HIDDEN-CAVE>
+               <COND (,RIVER-EVAPORATED
+                      <YOU-CANT-SEE-ANY "water">)
+                     (<VERB? PULVER>
+                      <TELL
+"The water recedes for a moment, then swirls back." CR>)
+                     (<VERB? THROUGH>
+                      <DO-WALK ,P?OUT>)>)
+              (<EQUAL? ,HERE ,RIVER-BED ,TOP-OF-FALLS ,STAGNANT-POOL>
+               <TELL
+"Hardly enough water here to get a good pulveration going." CR>)>>
+
+<ROUTINE WATER-IS-PRSI ()
+        <COND (<EQUAL? ,HERE ,COVE ,LAGOON ,LAGOON-FLOOR>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,PRSO ,LAGOON-OBJECT>
+               <RTRUE>)
+              (<EQUAL? ,HERE ,OCEAN-NORTH ,OCEAN-SOUTH ,MOUTH-OF-RIVER>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,PRSO ,OCEAN>
+               <RTRUE>)
+              (<EQUAL? ,HERE ,DRAWBRIDGE>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,PRSO ,MOAT>
+               <RTRUE>)
+              (<EQUAL? ,HERE ,RIVER-BANK>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,PRSO ,RIVER>
+               <RTRUE>)
+              (<EQUAL? ,HERE ,FLUME>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,PRSO ,FLUME-OBJECT>
+               <RTRUE>)>>
+
+<OBJECT SKY
+       (IN GLOBAL-OBJECTS)
+       (DESC "sky")
+       (SYNONYM SKY STARS)
+       (ACTION SKY-F)>
+
+<ROUTINE SKY-F ("AUX" EL)
+        <COND (<VERB? EXAMINE>
+               <COND (<FSET? ,HERE ,INSIDEBIT>
+                      <TELL "That would be difficult from here." CR>)
+                     (<EQUAL? ,HERE ,LAGOON-FLOOR>
+                      <TELL "The sky is blurry but visible." CR>)>)>>
+
+<OBJECT BELBOZ
+       (IN BELBOZ-HIDEOUT)
+       (DESC "Belboz")
+       (LDESC
+"Belboz is lying here, motionless but not asleep. He seems to be in
+some sort of trance.")
+       (SYNONYM BELBOZ NECROMANCER)
+       (FLAGS ACTORBIT NARTICLEBIT)
+       (ACTION BELBOZ-F)>
+
+<ROUTINE BELBOZ-F ()
+        <COND (<VERB? TELL ASK-ABOUT ASK-FOR GIVE>
+               <TELL "Belboz is in some sort of trance." CR>
+               <STOP>)
+              (<VERB? WHO>
+               <TELL
+"Belboz, your friend and mentor, is the head of the Circle of Enchanters.
+Recently, he has been acting oddly and seems to have been avoiding you." CR>)
+              (<VERB? ALARM>
+               <DISABLE <INT I-BELBOZ-AWAKES>>
+               <I-BELBOZ-AWAKES>)
+              (<VERB? RESEARCH>
+               <TELL
+"There is a small entry about Belboz, mentioning that he is the Guildmaster
+of the Accardi Chapter of the Guild of Enchanters, and has served three terms
+as kingdomwide Secretary of the Guild." CR>)
+              (<AND <VERB? WHERE FIND>
+                    <NOT <IN? ,BELBOZ ,HERE>>>
+               <TELL
+"You last saw Belboz a few days ago. You can't begin to
+guess where he is now." CR>)
+              (<VERB? GASPAR>
+               <SETG BELBOZ-GASPARED T>
+               <RFALSE>)
+              (<VERB? AIMFIZ>
+               <AIMFIZ-BELBOZ-JEEARR>
+               <GOTO ,TWISTED-FOREST>
+               <SETG SCORE <+ ,SCORE 20>>
+               <DISABLE <INT I-PARROT>>
+               <ENABLE <QUEUE I-HELLHOUND -1>>)
+              (<VERB? YOMIN>
+               <TELL
+"You get a horrifying glimpse of a monstrous creature intertwined
+throughout Belboz's mind. You concentrate, attempting to translate
+this image into visual terms, and imagine a giant spider with millions of
+legs, wrapped around and feasting upon the body and spirit of Belboz. The
+image fades, and you stagger backwards." CR>)
+              (<AND <VERB? KILL>
+                    <EQUAL? ,PRSI ,KNIFE>>
+               <KILL-BELBOZ>)
+              (<VERB? SWANZO>
+               <SWANZO-BELBOZ>)>>
+
+<ROUTINE AIMFIZ-BELBOZ-JEEARR ()
+        <TELL
+"After a momentary dizziness, you realize that your location has changed,
+although " D ,PRSO " is not in sight..." CR CR>>
+
+<OBJECT GLOBAL-ROOM
+       (IN GLOBAL-OBJECTS)
+       (DESC "room")
+       (SYNONYM ROOM CHAMBER PLACE HALL)
+       (ADJECTIVE AREA)
+       (ACTION GLOBAL-ROOM-F)>
+
+<ROUTINE GLOBAL-ROOM-F ()
+        <COND (<VERB? LOOK EXAMINE LOOK-INSIDE>
+               <V-LOOK>
+               <RTRUE>)
+              (<VERB? THROUGH DROP EXIT>
+               <V-WALK-AROUND>)
+              (<VERB? WALK-AROUND>
+               <TELL
+"Walking around the room reveals nothing new. If you want to move elsewhere,
+simply indicate the desired direction." CR>)>>
+
+<OBJECT ARCHWAY
+       (IN LOCAL-GLOBALS)
+       (DESC "doorway")
+       (SYNONYM ARCH ARCHWA DOORWA)
+       (ADJECTIVE LARGE WIDE MARBLE DAZZLI GLASS BREATH)
+       (FLAGS NDESCBIT VOWELBIT)
+       (ACTION ARCHWAY-F)>
+
+<ROUTINE ARCHWAY-F ()
+        <COND (<VERB? THROUGH CROSS>
+               <V-WALK-AROUND>)
+              (<VERB? LOOK-INSIDE>
+               <MAKE-OUT>)>>
+
+<OBJECT HOLE
+       (IN LOCAL-GLOBALS)
+       (DESC "opening")
+       (SYNONYM HOLE OPENIN WELL)
+       (ADJECTIVE SMALL SLIMY DARK)
+       (FLAGS NDESCBIT)
+       (ACTION HOLE-F)>
+
+<ROUTINE HOLE-F ()
+        <COND (<EQUAL? ,HERE ,HOLLOW>
+               <SETG PERFORMING-SPELL T>
+               <COND (<EQUAL? ,HOLE ,PRSO>
+                      <SETG PERFORMING-SPELL T>
+                      <PERFORM ,PRSA ,BRICK-STRUCTURE ,PRSI>
+                      <RTRUE>)
+                     (T
+                      <SETG PERFORMING-SPELL T>
+                      <PERFORM ,PRSA ,PRSO ,BRICK-STRUCTURE>
+                      <RTRUE>)>)
+              (<VERB? THROUGH CLIMB-FOO CLIMB-UP CLIMB-DOWN>
+               <COND (<EQUAL? ,HERE ,FOREST-EDGE>
+                      <DO-WALK ,P?DOWN>)
+                     (<EQUAL? ,HERE ,SLIMY-ROOM>
+                      <DO-WALK ,P?UP>)
+                     (<EQUAL? ,HERE ,HIDDEN-CAVE>
+                      <DO-WALK ,P?DOWN>)
+                     (<EQUAL? ,HERE ,PIT-OF-BONES>
+                      <DO-WALK ,P?UP>)
+                     (<EQUAL? ,HERE ,DUNGEON>
+                      <DO-WALK ,P?DOWN>)
+                     (<EQUAL? ,HERE ,LOBBY>
+                      <V-WALK-AROUND>)>)
+              (<VERB? LOOK-INSIDE>
+               <MAKE-OUT>)>>
+
+<OBJECT FOREST
+       (IN LOCAL-GLOBALS)
+       (DESC "blighted forest")
+       (SYNONYM FOREST WOODS TREES)
+       (ADJECTIVE BLIGHT DENSE SICKLY TWISTE)
+       (FLAGS NDESCBIT)
+       (ACTION FOREST-F)>
+
+<ROUTINE FOREST-F ()
+        <COND (<VERB? MEEF>
+               <TELL
+"You're too late -- this forest dried up eons ago." CR>)
+              (<VERB? THROUGH>
+               <COND (<EQUAL? ,HERE ,MINE-FIELD ,FOREST-EDGE>
+                      <DO-WALK ,P?WEST>)
+                     (<EQUAL? ,HERE ,TWISTED-FOREST ,TREE-BRANCH>
+                      <LOOK-AROUND-YOU>)
+                     (T
+                      <CANT-ENTER ,FOREST>)>)>>
+
+<OBJECT CASTLE
+       (IN LOCAL-GLOBALS)
+       (DESC "castle")
+       (SYNONYM CASTLE EGRETH RUINS)
+       (ADJECTIVE CASTLE EGRETH RUINED ANCIEN)
+       (FLAGS NDESCBIT)
+       (ACTION CASTLE-F)>
+
+<ROUTINE CASTLE-F ()
+        <COND (<VERB? RESEARCH>
+               <TELL "Egreth was the castle of King Duncanthrax." CR>)
+              (<VERB? THROUGH>
+               <COND (<EQUAL? ,HERE ,DRAWBRIDGE ,RUINS>
+                      <DO-WALK ,P?EAST>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)>>
+
+<OBJECT CAVE
+       (IN LOCAL-GLOBALS)
+       (DESC "cave")
+       (SYNONYM CAVE CAVERN)
+       (ADJECTIVE MAMMOT HIDDEN DARK)
+       (FLAGS NDESCBIT)
+       (ACTION CAVE-F)>
+
+<ROUTINE CAVE-F ()
+        <COND (<VERB? THROUGH>
+               <COND (<EQUAL? ,HERE ,MOUTH-OF-RIVER ,GRUE-LAIR>
+                      <DO-WALK ,P?WEST>)
+                     (<EQUAL? ,HERE ,RIVER-BED>
+                      <DO-WALK ,P?NE>)
+                     (<EQUAL? ,HERE ,PIT-OF-BONES>
+                      <DO-WALK ,P?UP>)
+                     (<EQUAL? ,HERE ,BELBOZ-HIDEOUT>
+                      <DO-WALK ,P?EAST>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? LOOK-INSIDE>
+               <MAKE-OUT>)>> 
+
+<OBJECT HELISTAR
+       (IN DIAL)
+       (DESC "Helistar")
+       (SYNONYM HELIST)
+       (FLAGS ACTORBIT NARTICLEBIT)
+       (ACTION HELISTAR-F)>
+
+<OBJECT FROBAR
+       (IN DIAL)
+       (DESC "Frobar")
+       (SYNONYM FROBAR)
+       (FLAGS ACTORBIT NARTICLEBIT)
+       (ACTION FROBAR-F)>
+
+<ROUTINE HELISTAR-F ()
+        <COND (<VERB? WHO>
+               <TELL
+"Helistar is an old and powerful member of the Circle. Although a
+skilled and experienced magic-user, she is humorless to the point of
+being grim. Despite this personality flaw, Helistar is the most likely
+candidate to become the next Guildmaster of the Circle." CR>)
+              (<VERB? WHERE>
+               <TELL
+"Helistar has gone on her annual two-week vacation. She usually goes
+to the southlands, Gurth and Mithicus." CR>)
+              (<VERB? AIMFIZ>
+               <AIMFIZ-LOSE>
+               <TELL <PICK-ONE ,HELISTARISMS>>
+               <JIGS-UP ".">)>>
+
+<GLOBAL HELISTARISMS
+       <PLTABLE
+"skydiving near the mountains of Gurth. Not having a parachute, your
+descent is considerably faster"
+"scuba diving in the Sea of Mithicus. Before you can drown, a ferocious
+sea lion devours you"
+"sharpening her bullfighting skills. The crowd cheers wildly as
+the bull gores you with its horns">>
+
+<ROUTINE FROBAR-F ()
+        <COND (<VERB? WHO>
+               <TELL
+"Frobar is the most loyal and hard-working member of the Guild. However,
+he is somewhat dull and lacks imagination. It is doubtful that he would
+ever succeed Belboz as head of the Circle." CR>)
+              (<VERB? WHERE>
+               <TELL
+"Perhaps he's gone into town to perform some errands." CR>) 
+              (<VERB? AIMFIZ>
+               <AIMFIZ-LOSE>
+               <TELL <PICK-ONE ,FROBARISMS>>
+               <JIGS-UP ".">)>>
+
+<GLOBAL FROBARISMS
+       <PLTABLE
+"shopping in the marketplace. A horse-drawn chariot runs you down, trampling
+you beneath dozens of hooves"
+"crossing the bridge over Razor Gorge between town and the Guild Hall.
+Unfortunately, you didn't quite make the bridge, and plummet onto nasty
+rocks below"
+"praying in the town's temple. Angered by your sacrilegious violation of
+the ceremony, the priests skewer you with several handy sacred ornaments">>
+
+<ROUTINE AIMFIZ-LOSE ()
+        <TELL
+"When you recover from a brief dizziness, you notice " D ,PRSO
+" nearby, looking surprised to see you. A moment later, you realize
+that " D ,PRSO " is ">>
+
+<OBJECT IMPLEMENTOR
+       (IN DIAL)
+       (DESC "author")
+       (SYNONYM IMPLEM MERETZ AUTHOR ORACLE)
+       (ADJECTIVE STEVE STEVEN BEARDE)
+       (FLAGS VOWELBIT ACTORBIT)
+       (ACTION IMPLEMENTOR-F)>
+
+<ROUTINE IMPLEMENTOR-F ()
+        <COND (<VERB? AIMFIZ>
+               <JIGS-UP
+"You appear on a road in a far-off province called Cambridge. As you begin
+choking on the polluted air, a mugger stabs you in the back with a knife.
+A moment later, a wild-eyed motorist plows over you.">)
+              (<VERB? RESEARCH>
+               <TELL
+"Possibly the largest entry in the volume, detailing the facts and the
+myths about the man known as the Bearded Oracle of Yonkers." CR>)>>
+
+<OBJECT JEEARR
+       (IN BELBOZ-HIDEOUT)
+       (DESC "Jeearr")
+       (SYNONYM JEEARR DEMON FORCE SPIRIT)
+       (ADJECTIVE EVIL POWERF)
+       (FLAGS ACTORBIT NDESCBIT NARTICLEBIT)
+       (ACTION JEEARR-F)>
+
+<ROUTINE JEEARR-F ()
+        <COND (<VERB? RESEARCH>
+               <TELL
+"There's a long write-up in the mythology section. The evil force called
+Jeearr once spread pestilence and terror across many lands. Only the
+combined magic of many kings and wizards stopped him, even as he was
+preparing his final assault. He was imprisoned in the void beyond our
+world, his jailors warning future generations that his exile might not
+be permanent." CR>)
+              (<VERB? SWANZO>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,BELBOZ>
+               <RTRUE>)
+              (<VERB? AIMFIZ>
+               <AIMFIZ-BELBOZ-JEEARR>
+               <GOTO ,TWISTED-FOREST>
+               <SETG SCORE <+ ,SCORE 20>>
+               <DISABLE <INT I-PARROT>>
+               <ENABLE <QUEUE I-HELLHOUND -1>>)>>
+
+^\L
+
+;"magic stuff"
+
+;"---Summary of magic spells---
+
+  --Word--     --English--
+  AIMFIZ       transport yourself to someone's location
+  FROTZ                cause an object to give off light
+  FWEEP                turn caster into a bat
+  GNUSTO       write a magic spell into your spell book
+  GOLMAC       travel temporally
+  IZYUK                fly like a bird
+  MALYON       bring life to inanimate objects
+  REZROV       open a closed or locked object
+  SWANZO       exorcise an inhabiting presence
+  VARDIK       shield a mind from an evil spirit
+  PULVER       cause liquids to dry up
+  MEEF         cause plants to wilt
+  VEZZA                view the future
+  GASPAR       resurrection
+  YOMIN                mind probe
+  YONK         augment the power of certain spells"
+
+<OBJECT SPELL-BOOK
+       (IN DIAL)
+       (SYNONYM BOOK NOTES)
+       (ADJECTIVE MY SPELL MARGIN)
+       (DESC "spell book")
+       (ACTION SPELL-BOOK-F)
+       (FLAGS TOUCHBIT TAKEBIT READBIT CONTBIT OPENBIT)>
+
+<ROUTINE SPELL-BOOK-F ("AUX" (F <FIRST? ,SPELL-BOOK>))
+        <COND (<VERB? EXAMINE>
+               <TELL
+"This is the spell book given to you by Belboz after your original book
+was lost during your battle with Krill. ">
+               <COND (<FSET? ,SPELL-BOOK ,MUNGBIT>
+                      <BOOK-DAMP>)
+                     (T
+                      <TELL
+"There are several spells written in the book, with marginal
+notes about their effects and how to cast them." CR>)>)
+              (<VERB? OPEN CLOSE>
+               <TELL
+"Thanks to its magic properties, the spell book is always open to the
+right place at the right time, but it is also always closed. This innovation
+eliminates tedious leafing and hunting for spells in tight situations. Many
+wizardly lives have been saved by this advance in magical technology." CR>)
+              (<VERB? READ LOOK-INSIDE>
+               <COND (<FSET? ,SPELL-BOOK ,MUNGBIT>
+                      <BOOK-DAMP>
+                      <RTRUE>)
+                     (<AND <NOT ,LIT>
+                           <NOT ,BLORTED>>
+                      <TELL
+"Though it is dark, the magic writing of your spells casts enough light
+that you can read them." CR>)>
+               <TELL CR "My Spell Book" CR CR>
+               <REPEAT ()
+                       <COND (<NOT .F> <RETURN>)>
+                       <TELL "The " D .F " (" <GETP .F ,P?TEXT> ")." CR>
+                       <SET F <NEXT? .F>>>)>>
+
+<OBJECT GNUSTO-SPELL 
+       (IN SPELL-BOOK)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE GNUSTO)
+       (DESC "gnusto spell")
+       (TEXT "write a magic spell into a spell book")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT FROTZ-SPELL
+       (IN SPELL-BOOK)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE FROTZ)
+       (DESC "frotz spell")
+       (TEXT "cause something to give off light")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT REZROV-SPELL
+       (IN SPELL-BOOK)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE REZROV)
+       (DESC "rezrov spell")
+       (TEXT "open even locked or enchanted objects")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>      
+
+<OBJECT YOMIN-SPELL
+       (IN SPELL-BOOK)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE YOMIN)
+       (DESC "yomin spell")
+       (TEXT "mind probe")
+       (COUNT 0)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)
+       (ACTION SPELL-F)>
+
+<OBJECT IZYUK-SPELL
+       (IN SPELL-BOOK)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE IZYUK)
+       (DESC "izyuk spell")
+       (TEXT "fly like a bird")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT VOWELBIT)>
+
+<GLOBAL FLYING <>>
+
+<ROUTINE I-FLY ()
+        <SETG FLYING <>>
+        <CRLF>
+        <COND (<AND <EQUAL? ,HERE ,GLASS-MAZE>
+                    <NO-FLOOR?>>
+               <JIGS-UP
+"The izyuk spell wears off. Unfortunately, this room of
+the maze has no floor.">)
+              (<EQUAL? ,HERE ,TREE-BRANCH>
+               <SETTLE-ONTO-BRANCH>)
+              (<EQUAL? ,HERE ,LAGOON>
+               <SPLASH-INTO-WATER>)
+              (T
+               <TELL "You settle gently to the ground." CR>)>
+        <COND (<G? ,AWAKE 8>
+                <I-TIRED>)>>
+
+<OBJECT PULVER-SPELL
+       (IN SPELL-BOOK)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE PULVER)
+       (DESC "pulver spell")
+       (TEXT "cause liquids to become dry")
+       (COUNT 0)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)
+       (ACTION SPELL-F)>
+
+<OBJECT VEZZA-SPELL
+       (IN SPELL-BOOK)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE VEZZA)
+       (DESC "vezza spell")
+       (TEXT "view the future")
+       (COUNT 0)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)
+       (ACTION SPELL-F)>
+
+<ROUTINE SCROLL-F ("AUX" SPELL)
+        <COND (<VERB? TAKE>
+               <SET SPELL <FIRST? ,PRSO>>
+               <FSET .SPELL ,TOUCHBIT>
+               <FCLEAR ,PRSO ,TRYTAKEBIT>
+               <COND (<AND <EQUAL? ,PRSO ,SWANZO-SCROLL>
+                           <NOT ,MAZE-CROSSED>>
+                      <FSET ,PRSO ,TOUCHBIT>
+                      <SETG MAZE-CROSSED T>
+                      <REARRANGE-MAZE-TABLE>
+                      <MOVE ,PRSO ,PROTAGONIST>
+                      <TELL
+"As you take the scroll, a deep and evil laugh rumbles around the hollow.
+You hear a sliding, grinding noise and turn just in time to catch a flicker
+of light from within the glass maze, indicating that its transparent panels
+have shifted around." CR>
+                      <RTRUE>)
+                     (<EQUAL? ,PRSO ,FWEEP-SCROLL>
+                      <FCLEAR ,PRSO ,TRYTAKEBIT>
+                      <FCLEAR ,BAT-GUANO ,NDESCBIT>)>
+               <RFALSE>)
+              (<AND <NOT <FIRST? ,PRSO>>
+                    <NOT <FIRST? ,PRSI>>>
+               <TELL "Bug #72" CR>)
+              (<VERB? GNUSTO>
+               <SET SPELL <FIRST? ,PRSO>>
+               <PERFORM ,V?GNUSTO .SPELL>
+               <RTRUE>)
+              (<VERB? EXAMINE READ>
+               <COND (<FSET? ,PRSO ,MUNGBIT>
+                      <TELL "The scroll is wet and the spell illegible." CR>
+                      <RTRUE>)>
+               <SET SPELL <FIRST? ,PRSO>>
+               <TELL
+"The scroll reads \"" D .SPELL ": " <GETP .SPELL ,P?TEXT> "\".">
+               <COND (<EQUAL? .SPELL ,AIMFIZ-SPELL ,YONK-SPELL>
+                      <TELL
+" The spell seems very long and extremely complicated.">)>
+               <CRLF>)>>
+
+<ROUTINE SPELL-F ("AUX" MEM? (FORGET <>))
+        <COND (<VERB? RESEARCH>
+               <TELL "A spell produced by " <PICK-ONE ,MANUFACTURERS> "." CR>)
+              (<VERB? READ>
+               <COND (<AND <NOT <IN? ,PRSO ,SPELL-BOOK>>
+                           <NOT <IN? <LOC ,PRSO> ,PROTAGONIST>>>
+                      <TELL
+"You can't do that without having the spell in your book or on
+a scroll in your hand." CR>)
+                     (<FSET? <LOC ,PRSO> ,MUNGBIT>
+                      <PERFORM ,V?READ ,SPELL-BOOK>
+                      <THIS-IS-IT ,PRSO>
+                      <RTRUE>)
+                     (T
+                      <TELL "The spell reads \"">
+                      <TELL <GETP ,PRSO ,P?TEXT>>
+                      <TELL "\"." CR>)>)
+              (<VERB? LEARN>
+               <COND (<NOT <IN? ,PRSO ,SPELL-BOOK>>
+                      <COND (<IN? <LOC ,PRSO> ,PROTAGONIST>
+                             <TELL
+"You haven't written that spell into your book yet. Until you do, you
+can't memorize the spell." CR>)
+                            (T
+                             <V-LEARN>)>)                    
+                     (<EQUAL? ,PRSO ,GNUSTO-SPELL ,FROTZ-SPELL ,REZROV-SPELL>
+                      <TELL "You already know that spell by heart." CR>)
+                     (<NOT <IN? ,SPELL-BOOK ,PROTAGONIST>>
+                      <TELL
+"You don't have your spell book. How do you expect to memorize a spell
+without a spell book?" CR>)
+                     (<AND <NOT ,LIT>
+                          <NOT ,BLORTED>>
+                      <TELL
+"It will be hard to learn that spell in the dark." CR>)
+                     (<FSET? ,SPELL-BOOK ,MUNGBIT>
+                      <PERFORM ,V?READ ,SPELL-BOOK>
+                      <THIS-IS-IT ,PRSO>
+                      <RTRUE>)
+                     (T
+                      <SET MEM? <GETP ,PRSO ,P?COUNT>>
+                      <COND (<0? ,SPELL-ROOM>
+                             <COND (<EQUAL? ,SPELL-MAX 1>
+                                    <TELL
+"You can't concentrate well enough to learn the spell." CR>
+                                    <RTRUE>)
+                                   (<EQUAL? .MEM? ,SPELL-MAX>
+                                    <TELL
+"You try and try, but you just can't memorize those complex syllables again.
+They slip playfully out of your memory as soon as you cram them in." CR>
+                                    <RTRUE>)
+                                   (T
+                                    <FORGET-SPELL ,PRSO>
+                                    <SET MEM? <+ .MEM? 1>>
+                                    <PUTP ,PRSO ,P?COUNT .MEM?>
+                                    <SET FORGET T>)>)
+                            (T
+                             <SETG SPELL-ROOM <- ,SPELL-ROOM 1>>
+                             <SET MEM? <+ .MEM? 1>>
+                             <PUTP ,PRSO ,P?COUNT .MEM?>)>
+                      <TELL
+"Using your best study habits, you learn the " D ,PRSO>
+                      <COND (<G? .MEM? 1>
+                             <TELL " yet another time">)>
+                      <TELL "." CR>
+                      <COND (.FORGET
+                             <TELL
+"You have so much buzzing around in your head, though, that it's
+likely that something may have been forgotten in the shuffle." CR>)>
+                      <RTRUE>)>)
+              (<AND <NOT <VISIBLE? ,PRSO>>
+                    <NOT <VERB? CAST>>>
+               <TELL "You can't see that spell here!" CR>)
+              (<VERB? TAKE DROP THROW>
+               <TELL <PICK-ONE ,YUKS> CR>)>>
+
+<ROUTINE FORGET-SPELL (SPL "AUX" NSPL F CNT TBL (NUM 0) (SP <>))
+        <SET F <FIRST? ,SPELL-BOOK>>
+        <SET TBL ,FORGET-TBL>
+        <REPEAT ()
+                <COND (<NOT .F> <RETURN>)
+                      (<G? <SET CNT <GETP .F ,P?COUNT>> 0>
+                       <REPEAT ()
+                               <SET SP .F>
+                               <PUT .TBL 1 .F>
+                               <SET NUM <+ .NUM 1>>
+                               <SET TBL <REST .TBL 2>>
+                               <COND (<L? <SET CNT <- .CNT 1>> 1>
+                                      <RETURN>)>>)>
+                <SET F <NEXT? .F>>>
+        <COND (<AND <G? .NUM 0>
+                    <EQUAL? <GETP .SP ,P?COUNT> .NUM>>
+               <PUTP .SP ,P?COUNT <- .NUM 1>>
+               <RTRUE>)>
+        <PUT ,FORGET-TBL 0 .NUM>
+        <COND (<0? .NUM> <RTRUE>)>
+        <REPEAT ()
+                <COND (<NOT <EQUAL? <SET NSPL
+                                         <PICK-ONE ,FORGET-TBL>>
+                                    .SPL>>
+                       <PUTP .NSPL ,P?COUNT <- <GETP .NSPL ,P?COUNT> 1>>
+                       <RTRUE>)>>>
+
+<GLOBAL FORGET-TBL <LTABLE 0 0 0 0 0 0 0 0 0 0>>
+
+<ROUTINE FORGET-ALL ("AUX" F)
+        <SETG SPELL-ROOM ,SPELL-MAX>
+        <SET F <FIRST? ,SPELL-BOOK>>
+        <REPEAT ()
+                <COND (<NOT .F> <RETURN>)
+                      (ELSE
+                       <PUTP .F ,P?COUNT 0>
+                       <SET F <NEXT? .F>>)>>>
+
+<ROUTINE WEAR-OFF-SPELLS ()
+        <SETG UNDER-INFLUENCE <>>
+        <SETG FLYING <>>
+        <SETG FWEEPED <>>
+        <SETG VARDIKED <>>
+        <SETG VILSTUED <>>
+        <SETG BLORTED <>>
+        <SETG FOOBLED <>>
+        <DISABLE <INT I-FLY>>
+        <DISABLE <INT I-UNFWEEP>>
+        <DISABLE <INT I-UNVARDIK>>
+        <DISABLE <INT I-BREATHE>>
+        <DISABLE <INT I-UNBLORT>>
+        <DISABLE <INT I-UNFOOBLE>>
+        <SETG GNOME-SLEEPING T>
+        <DISABLE <INT I-GNOME>>
+        <MOVE ,PARK-GNOME ,DIAL>
+        <DISABLE <INT I-PARK-GNOME>>>
+
+;<ROUTINE PLURAL? (N)
+        <COND (<NOT <==? .N 1>>
+               <TELL "s">)>>
+
+<GLOBAL REAL-SPELL-MAX 4>
+<GLOBAL SPELL-MAX 4>  ;"max spells memorizable"
+<GLOBAL SPELL-ROOM 3> ;"number can memorize now"
+
+<GLOBAL MANUFACTURERS
+       <PLTABLE
+        "Borphee Infotaters Incorporated"
+        "SpellBound"
+        "SoftSpel"
+        "International Business Magic"
+        "Spell Shack"
+        "United Thaumaturgy"
+        "Smoothscroll Draughtsmen"
+        "Frobozz Magic Spell Company">>
+
+^\L
+
+;"generic potion stuff"
+
+<ROUTINE READ-ABOUT-POTIONS (NUM "AUX" MAKER)
+        <SET MAKER <GET ,POTION-MAKERS .NUM>>
+        <TELL "A potion made by " .MAKER "." CR>>
+
+<GLOBAL POTION-MAKERS
+       <PTABLE
+        0
+        "Fibbsbozza"
+        "Magicland"
+        "Frobozz Magic Potion Company">>
+
+<ROUTINE POTION-POUR (VIAL)
+        <COND (<NOT <HELD? .VIAL>>
+               <THIS-IS-IT .VIAL>
+               <TELL ,YNH>
+               <ARTICLE .VIAL T>
+               <TELL "." CR>
+               <RTRUE>)>
+        <MOVE ,PRSO ,DIAL>
+        <TELL "The potion evaporates before it even reaches">
+        <COND (,PRSI
+               <ARTICLE ,PRSI T>
+               <TELL "." CR>)
+              (T
+               <TELL " the ground." CR>)>>
+
+<GLOBAL UNDER-INFLUENCE <>>
+
+<ROUTINE TWO-POTIONS ()
+        <TELL
+"Uh oh. The " D ,PRSO " seems to be having an unpleasant reaction with
+the " D ,UNDER-INFLUENCE ". " <PICK-ONE ,POTION-REACTIONS>>
+        <JIGS-UP ".">>
+
+<GLOBAL POTION-REACTIONS
+       <PLTABLE
+        "You turn into a spot of moss"
+        "Your left ear turns into a carnivorous toad and devours your brain"
+        "Your entire body, starting from the toes and moving upward, turns
+into gelatin"
+        "Certain parts of your anatomy, including your pulmonary artery and
+adrenal gland, suddenly teleport seven feet to the west">>
+
+^\L
+
+;"sleep, hunger, etc."
+
+<GLOBAL SLEEPING T>
+
+<GLOBAL AWAKE -1>
+
+<GLOBAL LAST-SLEPT 40> ;"move when you last woke-up, for purposed of V-TIME"
+
+<OBJECT GLOBAL-SLEEP
+       (IN GLOBAL-OBJECTS)
+       (DESC "sleep")
+       (SYNONYM SLEEP NAP SNOOZE WINKS)
+       (ADJECTIVE FORTY)
+       (FLAGS NARTICLEBIT)
+       (ACTION GLOBAL-SLEEP-F)>
+
+<ROUTINE GLOBAL-SLEEP-F ()
+        <COND (<VERB? WALK-TO TAKE>
+                <COND (<IN? ,PROTAGONIST ,YOUR-QUARTERS>
+                      <MOVE ,PROTAGONIST ,BED>)>
+               <PERFORM ,V?SLEEP>
+               <RTRUE>)
+              (<VERB? FIND>
+               <TELL "Sleep anywhere." CR>)>>X
+
+<ROUTINE I-TIRED ("AUX" (FORG <>))
+        <COND (<IN? ,PROTAGONIST ,BED>
+               <TELL CR
+"The bed is comfortable and you are becoming tired." CR>
+               <SETG AWAKE <+ ,AWAKE 1>>
+               <V-SLEEP T>
+               <RFATAL>)>
+        <COND (<G? ,LOAD-ALLOWED 10>
+               <SETG LOAD-ALLOWED <- ,LOAD-ALLOWED 10>>)>
+        <COND (<G? ,FUMBLE-NUMBER 1>
+               <SETG FUMBLE-NUMBER <- ,FUMBLE-NUMBER 1>>)>
+        <COND (<G? ,SPELL-MAX 1>
+               <SETG SPELL-MAX <- ,SPELL-MAX 1>>
+               <COND (<NOT <EQUAL? ,SPELL-ROOM 0>>
+                      <SETG SPELL-ROOM <- ,SPELL-ROOM 1>>)>
+               <COND (<EQUAL? ,SPELL-ROOM 0>
+                      <SET FORG T>)>)>
+        <ENABLE <QUEUE I-TIRED 8>>
+        <SETG AWAKE <+ ,AWAKE 1>>
+        <COND (<G? ,AWAKE 8>
+               <COND (,FLYING
+                      <ENABLE <QUEUE I-TIRED 14>>
+                      <RFALSE>)>
+               <TELL CR "You drop in your tracks from exhaustion." CR CR>
+               <V-SLEEP>
+               <RFATAL>)
+              (T
+               <TELL CR "You are " <GET ,TIRED-TELL ,AWAKE>>
+               <COND (.FORG
+                      <TELL
+" and the spells you've memorized are becoming confused">)>
+               <TELL "." CR>)>>
+
+<GLOBAL DREAMS
+       <PLTABLE         
+
+"You dream of being pursued through a dank cavern. Something is behind
+you, something horrible that you can't turn to face. It gets closer and
+closer, and you can feel its hot breath on your neck."
+
+"You dream of an idyllic scene in the country, a picnic of wood-sprites
+and dryads."
+
+"You dream of dancing penguins in formal dress. One has a particularly
+nice tuxedo and a cane with a gold top."
+
+"You dream of a river, slow and muddy. Great grey hippopotami sport there,
+bellowing and splashing, and twitching their ears.">>
+
+<GLOBAL HUNGER-LEVEL 0>
+
+<GLOBAL THIRST-LEVEL 0>
+
+<ROUTINE I-HUNGER ()
+        <COND (,BERZIOED
+               <SETG HUNGER-LEVEL 0>
+               <ENABLE <QUEUE I-HUNGER <+ 580 <RANDOM 80>>>>
+               <RFALSE>)
+              (<EQUAL? ,HUNGER-LEVEL 6>
+               <SETG THIRST-LEVEL 6>
+               <I-THIRST>)
+              (T
+               <ENABLE <QUEUE I-HUNGER 11>>
+               <HUNGER-THIRST-WARNING ,HUNGER-LEVEL T>
+               <SETG HUNGER-LEVEL <+ ,HUNGER-LEVEL 1>>)>>
+
+<ROUTINE I-THIRST ()
+        <COND (,BERZIOED
+               <SETG THIRST-LEVEL 0>
+               <ENABLE <QUEUE I-THIRST <+ 540 <RANDOM 100>>>>
+               <RFALSE>)
+              (<EQUAL? ,THIRST-LEVEL 6>
+               <CRLF>
+               <JIGS-UP "You pass out from lack of food and water." T>)
+              (T
+               <ENABLE <QUEUE I-THIRST 9>>
+               <HUNGER-THIRST-WARNING ,THIRST-LEVEL>           
+               <SETG THIRST-LEVEL <+ ,THIRST-LEVEL 1>>)>>
+
+<ROUTINE HUNGER-THIRST-WARNING (LEVEL "OPTIONAL" (HUNGRY <>))
+        <TELL CR "You are now " <GET ,HUNGER-THIRST-TABLE .LEVEL>>
+        <COND (.HUNGRY
+               <TELL " hungry">)
+              (T
+               <TELL " thirsty">)>
+        <TELL "." CR>>
+
+<GLOBAL HUNGER-THIRST-TABLE
+       <PTABLE
+        "a bit"
+        "somewhat"
+        "quite"
+        "very"
+        "extremely"
+        "incredibly"
+        "dangerously">>
\ No newline at end of file
diff --git a/guild.zil b/guild.zil
new file mode 100644 (file)
index 0000000..b270a6c
--- /dev/null
+++ b/guild.zil
@@ -0,0 +1,1184 @@
+"GUILD for
+                           SORCERER
+       (c) Copyright 1984 by Infocom Inc.  All Rights Reserved."
+
+<ROOM YOUR-QUARTERS
+      (IN ROOMS)
+      (SYNONYM CHEVAU)
+      (DESC "Your Quarters")
+      (LDESC
+"This is your chamber in the Hall of the Guild of Enchanters, with a
+doorway to the west. A private chamber is a great privilege, especially
+for an Enchanter as young as yourself, but how many Enchanters can say
+they defeated the infamous Krill?")
+      (OUT TO HALLWAY-1)
+      (WEST TO HALLWAY-1)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL ARCHWAY GLOBAL-BED)>
+
+<OBJECT BED
+       (IN YOUR-QUARTERS)
+       (DESC "bed")
+       (LDESC
+"Your bed occupies the far corner of the room.")
+       (SYNONYM BED)
+       (FLAGS VEHBIT SURFACEBIT OPENBIT CONTBIT SEARCHBIT)
+       (CAPACITY 60)
+       (ACTION BED-F)>
+
+<OBJECT GLOBAL-BED
+       (IN LOCAL-GLOBALS)
+       (DESC "bed")
+       (SYNONYM BED)
+       (FLAGS VEHBIT SURFACEBIT OPENBIT CONTBIT SEARCHBIT)
+       (ACTION GLOBAL-BED-F)>
+
+<ROUTINE BED-F ("OPTIONAL" (RARG <>))
+        <COND (<EQUAL? .RARG ,M-BEG>
+               <COND (<VERB? WALK>
+                      <NOT-GOING-ANYWHERE ,BED>)
+                     (<AND <VERB? TAKE>
+                           <NOT <HELD? ,PRSO>>
+                           <NOT <EQUAL? ,PRSO ,GLOBAL-SLEEP>>>
+                      <COND (<AND <NOT <EQUAL? ,PRSO ,GRUE ,ME ,BED>>
+                                  <NOT <IN? ,PRSO ,BED>>>
+                             <TELL "You can't reach it from the bed." CR>)>)>)
+              (.RARG
+               <RFALSE>)
+              (<VERB? OPEN CLOSE>
+               <TELL "Huh?" CR>)
+              (<VERB? WALK-TO>
+               <PERFORM ,V?WALK-TO ,GLOBAL-SLEEP>
+               <RTRUE>)
+              (<VERB? CLIMB-ON LIE-DOWN>
+               <PERFORM ,V?BOARD ,PRSO>
+               <RTRUE>)>>
+
+<ROUTINE GLOBAL-BED-F ()
+        <COND (<EQUAL? ,GLOBAL-BED ,PRSO>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,BED ,PRSI>
+               <RTRUE>)
+              (T
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,PRSO ,BED>
+               <RTRUE>)>>      
+
+<ROOM BELBOZ-QUARTERS
+      (IN ROOMS)
+      (DESC "Belboz's Quarters")
+      (OUT TO HALLWAY-1)
+      (EAST TO HALLWAY-1)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (PSEUDO "PERCH" PERCH-PSEUDO)
+      (ACTION BELBOZ-QUARTERS-F)>
+
+<ROUTINE BELBOZ-QUARTERS-F (RARG)
+        <COND (<EQUAL? .RARG ,M-LOOK>
+               <TELL
+"The personal chamber of Belboz, who presides over the Circle of Enchanters,
+is appointed with a beautiful woven wall hanging">
+               <COND (<IN? ,MORGIA-PLANT ,HERE>
+                      <TELL ", an exotic morgia plant,">)>
+               <TELL
+" and a wide darkwood desk crafted by the artisans of Gurth. The hallway
+lies to the east." CR>)>>
+
+<ROUTINE PERCH-PSEUDO ()
+        <COND (<VERB? CLIMB-ON>
+               <TELL
+"I'd recommend a good doctor, but we need the eggs." CR>)>>
+
+<OBJECT PARROT
+       (IN BELBOZ-QUARTERS)
+       (DESC "parrot")
+       (FDESC
+"Pacing back and forth on a perch in the corner is Belboz's prized pet
+parrot, native to the jungles of Miznia.")
+       (SYNONYM PARROT BIRD POLLIB POLLY)
+       (ADJECTIVE PRIZED PET)
+       (FLAGS TRYTAKEBIT)
+       (ACTION PARROT-F)>
+
+<ROUTINE PARROT-F ()
+        <COND (<VERB? TAKE>
+               <TELL "The parrot hops to the other end of the perch." CR>)>>
+
+<ROUTINE I-PARROT ()
+       <COND (<AND <IN? ,PARROT ,HERE>
+                  <PROB 40>>
+             <TELL CR "\"Squawk! " <PICK-ONE ,PARROTISMS> " Squawk!\"" CR>)>>
+
+<GLOBAL PARROTISMS
+       <PLTABLE
+        "Pollibar want a cracker!"
+        "Now where can I hide this key?"
+        "You should never have let down your mindshield, you
+doddering old Enchanter."
+        "This tea is cold! Get me another cup."
+        "Where did I leave my spectacles?"
+        "Belboz, the Circle is waiting for you.">>
+
+<OBJECT BELBOZ-DESK
+       (IN BELBOZ-QUARTERS)
+       (DESC "darkwood desk")
+       (SYNONYM DESK)
+       (ADJECTIVE WOOD WIDE CRAFTE DARK DARKWO)
+       (FLAGS SURFACEBIT NDESCBIT OPENBIT CONTBIT SEARCHBIT)
+       (CAPACITY 60)
+       (ACTION BELBOZ-DESK-F)>
+
+<ROUTINE BELBOZ-DESK-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL "The desk has one drawer which is ">
+               <COND (<FSET? ,DESK-DRAWER ,OPENBIT>
+                      <TELL "open">)
+                     (T
+                      <TELL "closed">)>
+               <TELL "." CR>
+               <COND (<FIRST? ,PRSO>
+                      <RFALSE>)
+                     (T
+                      <RTRUE>)>)
+              (<AND <VERB? SEARCH>
+                    <NOT <FSET? ,DESK-DRAWER ,OPENBIT>>
+                    <FIRST? ,DESK-DRAWER>>
+               <TELL "You open the desk drawer and find ">
+               <PRINT-CONTENTS ,DESK-DRAWER>
+               <FSET ,DESK-DRAWER ,OPENBIT>
+               <TELL "." CR>)
+              (<VERB? CLOSE OPEN REZROV REACH-IN LOOK-INSIDE>
+               <SETG PERFORMING-SPELL T>
+               <PERFORM ,PRSA ,DESK-DRAWER>
+               <RTRUE>)
+              (<AND <VERB? TAKE>
+                    <EQUAL? ,BELBOZ-DESK ,PRSI>
+                    <FIRST? ,DESK-DRAWER>>
+               <PERFORM ,V?TAKE ,PRSO ,DESK-DRAWER>
+               <COND (<FIRST? ,BELBOZ-DESK>
+                      <RFALSE>)
+                     (T
+                      <RTRUE>)>)
+              (<AND <VERB? PUT>
+                    <EQUAL? ,PRSI ,BELBOZ-DESK>>
+               <PERFORM ,V?PUT ,PRSO ,DESK-DRAWER>
+               <RTRUE>)>>
+
+<OBJECT DESK-DRAWER
+       (IN BELBOZ-QUARTERS)
+       (DESC "desk drawer")
+       (SYNONYM DRAWER)
+       (ADJECTIVE DESK)
+       (CAPACITY 40)
+       (FLAGS NDESCBIT CONTBIT SEARCHBIT)>
+
+<OBJECT TINY-BOX
+       (IN DESK-DRAWER)
+       (DESC "tiny box")
+       (SYNONYM BOX LID WRITIN)
+       (ADJECTIVE TINY)
+       (FLAGS CONTBIT SEARCHBIT TAKEBIT READBIT)
+       (CAPACITY 3)
+       (SIZE 4)
+       (ACTION TINY-BOX-F)>
+
+<ROUTINE TINY-BOX-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL "There is writing on the lid of the box." CR>
+               <PERFORM ,V?READ ,PRSO>
+               <RTRUE>)
+              (<VERB? READ>
+               <FIXED-FONT-ON>
+               <TELL
+"|
+\"    MAGIC AMULET|
+|
+The closer this amulet is to|
+its owner, the brighter it may|
+glow. Ideal for leaving with|
+your loved ones if you go on|
+a long and hazardous journey.|
+|
+This amulet is sensitized to|
+-> BELBOZ THE NECROMANCER|
+|
+Another fine product of the|
+Frobozz Magic Amulet Company.\"" CR>
+               <FIXED-FONT-OFF>)>>
+
+<OBJECT MAGIC-AMULET
+       (IN TINY-BOX)
+       (DESC "magic amulet")
+       (SYNONYM AMULET JEWEL AGGTHORA)
+       (ADJECTIVE MAGIC BLUE)
+       (SIZE 3)
+       (FLAGS TAKEBIT WEARBIT)
+       (DESCFCN AMULET-DESCFCN)
+       (ACTION MAGIC-AMULET-F)>
+
+<ROUTINE MAGIC-AMULET-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL
+"A blue jewel hangs from a long golden chain. The jewel is ">
+               <AMULET-GLOWS>
+               <TELL "." CR>)
+              (<VERB? RESEARCH>
+               <TELL
+"The Amulet of Aggthora was a legendary jewel renowned for
+its powers of augury." CR>)>>
+
+<ROUTINE AMULET-DESCFCN (RARG)
+        <TELL "There is an amulet here. The amulet's jewel is ">
+        <AMULET-GLOWS>
+        <TELL "." CR>>
+
+<ROUTINE AMULET-GLOWS ()
+        <COND (<IN-GUILD-HALL?>
+               <TELL "dark">)
+              (<IN-MAZE-AREA?>
+               <TELL "glowing">)
+              (<IN-CRATER-AREA?>
+               <TELL "glowing brightly">)
+              (<IN-COAL-MINE?>
+               <TELL "glowing very brightly">)
+              (<IN-END-GAME?>
+               <TELL "pulsing with flashes of brilliant light">)
+              (T
+               <TELL "glowing dimly">)>>
+
+<ROUTINE IN-GUILD-HALL? ("OPTIONAL" (X <>))
+        <COND (<NOT .X>
+               <SET X ,HERE>)>
+        <COND (<OR <EQUAL? .X ,HALLWAY-1 ,HALLWAY-2 ,CHAMBER-OF-THE-CIRCLE>
+                   <EQUAL? .X ,YOUR-QUARTERS ,BELBOZ-QUARTERS ,LOBBY>
+                   <EQUAL? .X ,FROBAR-QUARTERS ,HELISTAR-QUARTERS>
+                   <EQUAL? .X ,STORE-ROOM ,LIBRARY ,CELLAR>
+                   <EQUAL? .X ,APPRENTICE-QUARTERS ,SERVANT-QUARTERS>>
+               <RTRUE>)
+              (T
+               <RFALSE>)>>
+
+<ROUTINE IN-COAL-MINE? ()
+        <COND (<OR <EQUAL? ,HERE ,COAL-BIN-ROOM ,DIAL-ROOM ,SHAFT-BOTTOM>
+                   <EQUAL? ,HERE ,SHAFT-TOP ,TOP-OF-CHUTE ,SLANTED-ROOM>
+                   <EQUAL? ,HERE ,COAL-MINE-1 ,COAL-MINE-2 ,COAL-MINE-3>>
+               <RTRUE>)
+              (T
+               <RFALSE>)>>
+
+<ROUTINE IN-MAZE-AREA? ()
+        <COND (<OR <EQUAL? ,HERE ,TOLL-GATE ,END-OF-HIGHWAY ,HOLLOW>
+                   <EQUAL? ,HERE ,OUTSIDE-GLASS-DOOR ,GLASS-MAZE ,STORE>
+                   <EQUAL? ,HERE ,ENTRANCE-HALL ,STONE-HUT ,OUTSIDE-STORE>>
+               <RTRUE>)
+              (T
+               <RFALSE>)>>
+
+<ROUTINE IN-CRATER-AREA? ()
+        <COND (<OR <EQUAL? ,HERE ,HIGHWAY ,BEND ,EDGE-OF-CRATER>
+                   <EQUAL? ,HERE ,CRATER ,WINDING-TUNNEL ,HALL-OF-CARVINGS>
+                   <EQUAL? ,HERE ,EDGE-OF-CHASM ,BARE-PASSAGE ,SOOTY-ROOM>
+                   <EQUAL? ,HERE ,ELBOW-ROOM ,TREE-ROOM ,PARK-ENTRANCE>
+                   <EQUAL? ,HERE ,EAST-END-OF-MIDWAY ,FLUME ,HAUNTED-HOUSE>
+                   <EQUAL? ,HERE ,WEST-END-OF-MIDWAY ,ROLLER-COASTER ,ARCADE>
+                   <EQUAL? ,HERE ,CASINO>>
+               <RTRUE>)
+              (T
+               <RFALSE>)>>
+
+<ROUTINE IN-END-GAME? ()
+        <COND (<OR <EQUAL? ,HERE ,OCEAN-NORTH ,OCEAN-SOUTH ,BELBOZ-HIDEOUT>
+                   <EQUAL? ,HERE ,MOUTH-OF-RIVER ,GRUE-LAIR ,MAMMOTH-CAVERN>
+                   <EQUAL? ,HERE ,CHAMBER-OF-LIVING-DEATH ,COVE ,LAGOON-FLOOR>
+                   <EQUAL? ,HERE ,HALL-OF-ETERNAL-PAIN ,LAGOON>>
+               <RTRUE>)
+              (T
+               <RFALSE>)>>
+
+<OBJECT JOURNAL
+       (IN DESK-DRAWER)
+       (DESC "journal")
+       (LDESC
+"The personal journal of Belboz the Necromancer is lying here.")
+       (SYNONYM DIARY NOTEBO ENTRIE JOURNA)
+       (ADJECTIVE PERSON NOTE LAST THREE)
+       (FLAGS TAKEBIT READBIT)
+       (SIZE 10)
+       (ACTION JOURNAL-F)>
+
+<ROUTINE JOURNAL-F ()
+        <COND (<VERB? READ EXAMINE LOOK-INSIDE>
+               <COND (<FSET? ,JOURNAL ,OPENBIT>
+                      <TELL
+"You skim through the pages of the journal, a combination diary and notebook.
+Most of the notations, written in Belboz's familiar flowing script, deal with
+meetings of the Circle and business of the Guild.|
+|
+There is one interesting entry toward the end of the book. Belboz refers
+to an ancient and evil force known simply as Jeearr, a demon whose powers
+could endanger the Circle and possibly the entire kingdom. He has decided
+to conduct some dangerous exploratory experiments, operating alone to
+shield the Circle from the perils involved.|
+|
+The last three entries are strange and frightening -- written in a hand quite
+different from that of Belboz, and in a language totally unfamiliar to you.|
+|
+On the inside cover is an inscription, written in a light script,
+which reads \"Current code: " <GET ,CODE-TABLE ,CODE-NUMBER> "\"." CR>)
+                     (T
+                      <TELL "It's closed and sealed with a lock." CR>)>)
+              (<VERB? OPEN UNLOCK REZROV>
+               <COND (<FSET? ,JOURNAL ,OPENBIT>
+                      <TELL "The journal is already open!" CR>)
+                     (<VERB? REZROV>
+                      <TELL
+"The journal seems to bear a spell protecting it against
+the simple rezrov spell." CR>)
+                     (<NOT ,PRSI>
+                      <COND (<IN? ,KEY ,PROTAGONIST>
+                             <SETG PRSI ,KEY>
+                             <TELL "(with the key)" CR>)
+                            (T
+                             <SETG PRSI ,HANDS>)>
+                      <COND (<EQUAL? ,PRSI ,KEY>
+                             <FSET ,JOURNAL ,OPENBIT>
+                             <TELL "The journal springs open." CR>)
+                            (T
+                             <TELL "You can't unlock it with">
+                             <ARTICLE ,PRSI>
+                             <TELL "." CR>)>)>)>>
+
+<OBJECT WHEEL
+       (IN DESK-DRAWER)
+       (DESC "infotater")
+       (SYNONYM INFOTA WHEEL)
+       (ADJECTIVE LEATHE BOUND DATA)
+       (FLAGS READBIT TAKEBIT VOWELBIT)
+       (SIZE 10)
+       (ACTION WHEEL-F)>
+
+<ROUTINE WHEEL-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL
+"Like most infotaters, this one has several windows and a rotating data
+wheel. It is leather-bound and beautifully illustrated. ">
+               <INFOTATER-NOTE>)
+              (<VERB? READ>
+               <TELL
+"The infotater has entries on a dozen native beasts. ">
+               <INFOTATER-NOTE>)
+              (<VERB? TURN SPIN>
+               <TELL "Refer to the infotater in your SORCERER package." CR>)
+              (<VERB? RESEARCH>
+               <TELL
+"The infotater, which popular legends say was invented by Entharion the
+Wise, is the best way to store data ever discovered." CR>)>>
+
+<ROUTINE INFOTATER-NOTE ()
+        <TELL
+"(NOTE: This is the infotater included in your game package.)" CR>>
+
+<OBJECT WALL-HANGING
+       (IN BELBOZ-QUARTERS)
+       (DESC "wall hanging")
+       (SYNONYM HANGIN TAPEST)
+       (ADJECTIVE WALL BEAUTI WOVEN)
+       (FLAGS NDESCBIT TRYTAKEBIT)
+       (ACTION WALL-HANGING-F)>
+
+<ROUTINE WALL-HANGING-F ()
+        <COND (<VERB? MOVE LOOK-BEHIND LOOK-UNDER RUB SHAKE RAISE>
+               <COND (<NOT <FSET? ,KEY ,TOUCHBIT>>
+                      <MOVE ,KEY ,HERE>
+                      <THIS-IS-IT ,KEY>
+                      <FSET ,KEY ,TOUCHBIT>
+                      <SETG SCORE <+ ,SCORE 15>>
+                      <TELL
+"As you move the tapestry, a key falls out from behind it
+and lands on the floor." CR>)
+                     (T
+                      <TELL "Nope, no more keys." CR>)>)
+              (<VERB? TAKE UNTIE>
+               <TELL
+"It looks too well fastened to remove from the wall." CR>)
+              (<VERB? EXAMINE>
+               <TELL
+"It is a beautiful piece of local handiwork, given to Belboz by the
+grateful townspeople after his (admittedly showy) pyrotechnical
+destruction of the evil giant Amathradonis. The hanging is affixed to
+the wall at its upper corners." CR>)>> 
+
+<OBJECT KEY
+       (IN DIAL)
+       (DESC "small key")
+       (SYNONYM KEY)
+       (ADJECTIVE TINY SMALL)
+       (FLAGS TAKEBIT TOOLBIT)
+       (SIZE 3)>
+
+<OBJECT MORGIA-PLANT
+       (IN BELBOZ-QUARTERS)
+       (DESC "morgia plant")
+       (SYNONYM PLANT PLANTS)
+       (ADJECTIVE MORGIA EXOTIC)
+       (FLAGS NDESCBIT TRYTAKEBIT)
+       (ACTION MORGIA-PLANT-F)>
+
+<ROUTINE MORGIA-PLANT-F ()
+        <COND (<VERB? MEEF>
+               <MOVE ,MORGIA-PLANT ,DIAL>
+               <TELL
+"The morgia plant, particularly susceptible to the meef spell, shrivels
+up and vanishes." CR>)
+              (<VERB? TAKE>
+               <TELL
+"The plant is so heavy you succeed only in budging it a few inches." CR>)
+              (<VERB? EAT>
+               <TELL
+"Morgias taste terrible; besides, Belboz wouldn't like someone munching
+on his favorite plant." CR>)
+              (<VERB? RESEARCH>
+               <TELL
+"A beautiful and exotic plant, the morgia is well-known for
+its susceptibility to magic spells." CR>)>>
+
+<ROOM FROBAR-QUARTERS
+       (IN ROOMS)
+       (SYNONYM BARBEL ORKAN)
+       (DESC "Frobar's Quarters")
+       (LDESC
+"This is the room of Frobar the Enchanter. There isn't much here in the way
+of furnishings, Frobar being a pretty dull kind of guy.")
+       (OUT TO HALLWAY-2)
+       (WEST TO HALLWAY-2)
+       (FLAGS RLANDBIT INSIDEBIT)>
+
+<ROOM HELISTAR-QUARTERS
+       (IN ROOMS)
+       (SYNONYM THRIFF)
+       (DESC "Helistar's Quarters")
+       (LDESC
+"Helistar is one of the foremost members of the Circle, and
+this is her private chamber.")
+       (OUT TO HALLWAY-2)
+       (EAST TO HALLWAY-2)
+       (FLAGS INSIDEBIT RLANDBIT)>
+
+<OBJECT GASPAR-SCROLL
+       (IN HELISTAR-QUARTERS)
+       (DESC "shiny scroll")
+       (FDESC
+"Among Helistar's possessions is a scroll, new and shiny.")
+       (SYNONYM SCROLL)
+       (ADJECTIVE NEW SHINY)   
+       (FLAGS TAKEBIT READBIT SCROLLBIT CONTBIT TRANSBIT)
+       (SIZE 3)
+       (ACTION SCROLL-F)>      
+
+<OBJECT GASPAR-SPELL
+       (IN GASPAR-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE GASPAR)
+       (DESC "gaspar spell")
+       (TEXT "provide for your own resurrection")
+       (COUNT 0)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)
+       (ACTION SPELL-F)>
+
+<GLOBAL RESURRECTION-ROOM <>>
+
+<ROOM SERVANT-QUARTERS
+      (IN ROOMS)
+      (SYNONYM SORCER)
+      (DESC "Servants' Quarters")
+      (LDESC
+"This is a sparsely furnished living area for the servants of the Guild.
+None are in sight; presumably they are out doing their daily errands.
+You can leave to the southwest.")
+      (OUT TO LOBBY)
+      (SW TO LOBBY)
+      (FLAGS INSIDEBIT RLANDBIT)>
+
+<ROOM APPRENTICE-QUARTERS
+      (IN ROOMS)
+      (SYNONYM GORGE)
+      (ADJECTIVE RAZOR)
+      (DESC "Apprentice Quarters")
+      (LDESC
+"This is a large hall where the Guild's young apprentices live and study
+as they strive to achieve a seat on the Circle. You think back to the days
+when you occupied these quarters. The apprentices are gone, having
+accompanied Frobar into town to shop. You can leave to the southeast.")
+      (OUT TO LOBBY)
+      (SE TO LOBBY)
+      (FLAGS INSIDEBIT RLANDBIT)>
+
+<OBJECT FROBAR-NOTE
+       (IN HALLWAY-1)
+       (DESC "scribbled note")
+       (FDESC
+"Tacked to the doorframe of your room is a note, hurriedly scribbled on
+parchment.")
+       (SYNONYM NOTE MESSAG)
+       (ADJECTIVE SCRIBB PARCHM)
+       (FLAGS READBIT TAKEBIT)
+       (SIZE 3)
+       (TEXT
+"\"I have taken the apprentices into town to shop for the Guild picnic. I
+tried rousing you, but you seemed deep asleep. By the way, have you seen
+Belboz anywhere? It's not like him to leave without telling someone -- but
+then, he's been acting pretty odd of late.|
+|
+                            -- Frobar\"")>
+
+<ROOM HALLWAY-1
+      (IN ROOMS)
+      (DESC "Hallway")
+      (WEST TO BELBOZ-QUARTERS)
+      (EAST TO YOUR-QUARTERS)
+      (SOUTH TO HALLWAY-2)
+      (NORTH TO CHAMBER-OF-THE-CIRCLE IF CHAMBER-DOOR IS OPEN)
+      (FLAGS RLANDBIT ONBIT INSIDEBIT)
+      (GLOBAL CHAMBER-DOOR)
+      (ACTION HALLWAY-1-F)>
+
+<ROUTINE HALLWAY-1-F (RARG)
+        <COND (<EQUAL? .RARG ,M-LOOK>
+               <HALLWAY-DESC>
+               <TELL "A heavy wooden door, currently ">
+               <COND (<FSET? ,CHAMBER-DOOR ,OPENBIT>
+                      <TELL "open">)
+                     (T
+                      <TELL "closed">)>
+               <TELL ", leads north." CR>)>>
+
+<ROOM HALLWAY-2
+      (IN ROOMS)
+      (SYNONYM ZORK)
+      (DESC "Hallway")
+      (EAST TO FROBAR-QUARTERS)
+      (WEST TO HELISTAR-QUARTERS)
+      (NORTH TO HALLWAY-1)
+      (SOUTH TO LOBBY)
+      (FLAGS RLANDBIT ONBIT INSIDEBIT)
+      (GLOBAL ARCHWAY)
+      (ACTION HALLWAY-2-F)>
+
+<ROUTINE HALLWAY-2-F (RARG)
+        <COND (<EQUAL? .RARG ,M-LOOK>
+               <HALLWAY-DESC>
+               <TELL
+"A large marble archway to the south leads into an open area." CR>)>>
+
+<ROUTINE HALLWAY-DESC ()
+        <TELL
+"Rooms lie to the east and west from this north-south corridor. ">>
+
+<OBJECT CHAMBER-DOOR
+       (IN LOCAL-GLOBALS)
+       (DESC "heavy wooden door")
+       (SYNONYM DOOR DOORS)
+       (ADJECTIVE HEAVY WOODEN)
+       (FLAGS DOORBIT)>
+
+<ROOM CHAMBER-OF-THE-CIRCLE
+      (IN ROOMS)
+      (DESC "Chamber of the Circle")
+      (SOUTH TO HALLWAY-1 IF CHAMBER-DOOR IS OPEN)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL CHAMBER-DOOR)
+      (PSEUDO "TABLE" TABLE-PSEUDO)
+      (ACTION CHAMBER-OF-THE-CIRCLE-F)>
+
+<ROUTINE CHAMBER-OF-THE-CIRCLE-F (RARG)
+        <COND (<EQUAL? .RARG ,M-LOOK>
+               <TELL
+"The meeting place of the Circle of Enchanters is a large, round room with
+a high domed ceiling. A table occupies the center of the room. Engraved on
+the wall is a list of tenets, the Guild's code of honor. The only door, at
+the southernmost point of the perimeter, is ">
+               <COND (<FSET? ,CHAMBER-DOOR ,OPENBIT>
+                      <TELL "open">)
+                     (T
+                      <TELL "closed">)>
+               <TELL "." CR>)>>
+
+<GLOBAL TABLE-WARNING <>>
+
+<ROUTINE TABLE-PSEUDO ()
+        <COND (<VERB? PUT-ON CLIMB-ON>
+               <SETG TABLE-WARNING T>
+               <TELL
+"A warning nymph appears, floating over the table. \"The servants just
+finished waxing the table, and it's still wet.\" With a sly grin, the
+nymph vanishes." CR>)
+              (<AND ,TABLE-WARNING
+                    <VERB? PULVER>>
+               <TELL
+"That would cause the wax to dry dull and yellowish!" CR>)>> 
+
+<OBJECT TENETS
+       (IN CHAMBER-OF-THE-CIRCLE)
+       (DESC "list of tenets")
+       (SYNONYM ENGRAV LIST TENETS TENET)
+       (ADJECTIVE ANCIEN FLOWER)
+       (FLAGS READBIT NDESCBIT)
+       (TEXT
+"The first tenet states that Enchanters may never use their talents to aid
+evil. The second points out that an Enchanter's duty is to the Guild and to
+the Kingdom, not to the individual. Lesser tenets include rules for
+conducting votes at meetings, guidelines for passing dishes at Guild
+banquets, and penalties for revealing the Guild's secret handshake.")>
+
+<ROOM LOBBY
+      (SYNONYM ORC ORCS YIPPLE NABIZ)
+      (IN ROOMS)
+      (DESC "Lobby")
+      (LDESC
+"This is the entrance lobby of the Guild Hall. Befitting the status and
+wealth of the Guild, the lobby is finished with polished Antharian marble,
+inlaid with intricate patterns of silver leaf. To the north is a wide arch,
+and smaller openings flank the area on the eastern and western sides, as
+well as the northeastern and northwestern corners. A narrow stair leads
+downward. Through another arch to the south, you can see the entrance steps
+and the main road into town.")
+      (NORTH TO HALLWAY-2)
+      (EAST TO LIBRARY)
+      (WEST TO STORE-ROOM)
+      (DOWN TO CELLAR)
+      (NE TO SERVANT-QUARTERS)
+      (NW TO APPRENTICE-QUARTERS)
+      (SOUTH "A tiny warning nymph appears, floating in the air next to your
+ear. \"There's no one else here,\" it reminds you, \"so you'd better not leave
+just now. Bye!\" It winks at you before vanishing.")
+      (FLAGS RLANDBIT INSIDEBIT ONBIT)
+      (PSEUDO "MARBLE" MARBLE-PSEUDO)
+      (GLOBAL HOLE ROAD STAIRS ARCHWAY)>
+
+<ROUTINE MARBLE-PSEUDO ()
+        <RFALSE>>
+
+<OBJECT MAILBOX
+       (IN LOBBY)
+       (DESC "receptacle")
+       (LDESC
+"Affixed to the southern arch is an ornate brass receptacle, intended
+for use by messengers.")
+       (SYNONYM MAILBO RECEPT)
+       (ADJECTIVE ORNATE BRASS)
+       (FLAGS CONTBIT SEARCHBIT)
+       (CAPACITY 20)>
+
+<ROUTINE I-MAILMAN ()
+        <MOVE ,MAGAZINE ,MAILBOX>
+        <FCLEAR ,MAILBOX ,OPENBIT>
+        <COND (<IN? ,MATCHBOOK ,MAILBOX>
+               <MOVE ,VILSTU-VIAL ,MAILBOX>
+               <MOVE ,MATCHBOOK ,DIAL>)>
+        <COND (<EQUAL? ,HERE ,LOBBY>
+               <SETG MAILMAN-FOLLOW T>
+               <ENABLE <QUEUE I-MAILMAN-FOLLOW 1>>
+               <TELL CR
+"A member of the Messengers Guild walks up and puts something in the
+receptacle. He closes it, and rings the doorbell. Noticing you, he gives
+a friendly wave before departing." CR>)
+              (<IN-GUILD-HALL?>
+               <TELL CR "The Guild Hall doorbell chimes." CR>)>>
+
+<GLOBAL MAILMAN-FOLLOW <>>
+
+<ROUTINE I-MAILMAN-FOLLOW ()
+        <SETG MAILMAN-FOLLOW <>>
+        <RFALSE>>
+
+<OBJECT MAGAZINE
+       (IN DIAL)
+       (DESC "issue of Popular Enchanting")
+       (SYNONYM MAGAZI ISSUE ENCHAN LABEL)
+       (ADJECTIVE POPULA)
+       (FLAGS READBIT TAKEBIT VOWELBIT)
+       (SIZE 7)
+       (ACTION MAGAZINE-F)>
+
+<ROUTINE MAGAZINE-F ()
+        <COND (<VERB? OPEN LOOK-INSIDE READ>
+               <TELL
+"This month's cover story is about Belboz! Other stories relate the
+explosion of spell scroll manufacturers, and the coming shakedown in
+the magic potion industry. The address label on the cover reads:||">
+               <FIXED-FONT-ON>
+               <TELL"
+   \"Z5 ACCAR256 4-964|
+    Hall of the Guild of Enchanters|
+    Village of Accardi-By-The-Sea|
+    Land of Frobozz\"" CR>
+               <FIXED-FONT-OFF>)>>
+
+<OBJECT VILSTU-VIAL
+       (IN DIAL)
+       (DESC "orange vial")
+       (LDESC
+"An orange vial, labelled in tiny letters, is lying here.")
+       (SYNONYM VIAL VIALS LABEL LETTER)
+       (ADJECTIVE VIVID ORANGE VILSTU TINY)
+       (FLAGS CONTBIT SEARCHBIT READBIT TAKEBIT VOWELBIT VIALBIT)
+       (SIZE 3)
+       (CAPACITY 1)
+       (ACTION VILSTU-VIAL-F)>
+
+<ROUTINE VILSTU-VIAL-F ()
+        <COND (<VERB? READ>
+               <FIXED-FONT-ON>
+               <TELL
+"|
+       \"VILSTU POTION|
+(obviate need for breathing)\"" CR>
+               <FIXED-FONT-OFF>)>>
+
+<OBJECT VILSTU-POTION
+       (IN VILSTU-VIAL)
+       (DESC "orange potion")
+       (SYNONYM POTION)
+       (ADJECTIVE ORANGE VILSTU)
+       (FLAGS NARTICLEBIT VOWELBIT)
+       (ACTION VILSTU-POTION-F)>
+
+<ROUTINE VILSTU-POTION-F ()
+        <COND (<AND <VERB? EAT DRINK>
+                    <NOT <IN? ,VILSTU-VIAL ,PROTAGONIST>>>
+               <POTION-POUR ,VILSTU-VIAL>)
+              (<VERB? RESEARCH>
+               <READ-ABOUT-POTIONS 3>)
+              (<VERB? EAT DRINK>
+               <MOVE ,VILSTU-POTION ,DIAL>
+               <COND (,UNDER-INFLUENCE
+                      <TWO-POTIONS>
+                      <RTRUE>)>
+               <SETG UNDER-INFLUENCE ,VILSTU-POTION>
+               <ENABLE <QUEUE I-BREATHE 19>>
+               <SETG VILSTUED T>
+               <COND (<EQUAL? ,HERE ,COAL-BIN-ROOM ,DIAL-ROOM>
+                      <DISABLE <INT I-SUFFOCATE>>
+                      <ENABLE <QUEUE I-OLDER-SELF 1>>)>
+               <TELL
+"The orange potion tasted like pepper, and made your nose tingle." CR>)
+              (<VERB? DROP>
+               <PERFORM ,V?POUR ,PRSO ,PRSI>
+               <RTRUE>)
+              (<AND <VERB? POUR>
+                    <EQUAL? ,PRSO ,VILSTU-POTION>>
+               <POTION-POUR ,VILSTU-VIAL>)>>
+
+<GLOBAL VILSTUED <>>
+
+<GLOBAL BREATH-SHORTAGE 0>
+
+<ROUTINE I-BREATHE ()
+        <SETG BREATH-SHORTAGE <+ ,BREATH-SHORTAGE 1>>
+        <COND (<EQUAL? ,UNDER-INFLUENCE ,VILSTU-POTION>
+               <SETG UNDER-INFLUENCE <>>)>
+        <COND (<EQUAL? ,BREATH-SHORTAGE 1>
+               <ENABLE <QUEUE I-BREATHE 4>>
+               <TELL CR
+"You feel the vilstu potion beginning to wear off">
+               <COND (<IN-COAL-MINE?>
+                      <TELL ", and the air here seems pretty unbreathable">)>
+               <TELL "." CR>)
+              (<EQUAL? ,BREATH-SHORTAGE 2>
+               <ENABLE <QUEUE I-BREATHE 6>>
+               <TELL CR
+"The vilstu potion has almost completely worn off now">
+               <COND (<IN-COAL-MINE?>
+                      <TELL
+", and I doubt you could survive here without it">)>
+               <TELL "." CR>)
+              (T
+               <SETG VILSTUED <>>
+               <COND (<EQUAL? ,HERE ,LAGOON-FLOOR>
+                      <ENABLE <QUEUE I-DROWN -1>>)>
+               <TELL CR
+"You feel the final effects of the vilstu potion vanish">
+               <COND (<IN-COAL-MINE?>
+                      <JIGS-UP
+". Unfortunately, coal gas is a poor substitute for oxygen.">)
+                     (T
+                      <SETG AWAKE 8>
+                      <SETG LOAD-ALLOWED 20>
+                      <SETG FUMBLE-NUMBER 1>
+                      <ENABLE <QUEUE I-TIRED 8>>
+                      <TELL
+", leaving you totally exhausted (an unfortunate side effect)." CR>)>)>> 
+
+<ROOM LIBRARY
+      (IN ROOMS)
+      (DESC "Library")
+      (LDESC
+"This is a study chamber for members of the Guild. Usually, there would
+be several elder Enchanters patiently training novices, but no one is here
+at the moment. The only exit is west.|
+Lying open on a stand in one corner is a heavy volume, probably
+a copy of the Encyclopedia Frobizzica.")
+      (WEST TO LOBBY)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (PSEUDO "STAND" STAND-PSEUDO)>
+
+<ROUTINE STAND-PSEUDO ()
+        <COND (<VERB? EXAMINE>
+               <TELL "A volume lies open on the stand." CR>)>>
+
+<OBJECT ENCYCLOPEDIA
+       (IN LIBRARY)
+       (DESC "copy of Encyclopedia Frobizzica")
+       (SYNONYM ENCYCL COPY VOLUME FROBIZ)
+       (ADJECTIVE HEAVY ENCYCL)
+       (FLAGS READBIT TRYTAKEBIT NDESCBIT)
+       (TEXT
+"It would take days to read the entire encyclopedia. A better idea
+would be to read about specific persons or things.")
+       (ACTION ENCYCLOPEDIA-F)>
+
+<ROUTINE ENCYCLOPEDIA-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL "The volume lies open to ">
+               <COND (,VOLUME-USED
+                      <TELL "a random entry." CR>)
+                     (T
+                      <TELL
+"an entry about the Glass Maze of King Duncanthrax. ">
+                      <PERFORM ,V?RESEARCH ,MAZE>
+                      <CRLF>
+                      <TELL
+"You could probably read about all sorts of other interesting people,
+places, and things by looking them up in the encyclopedia." CR>)>)
+              (<VERB? OPEN>
+               <TELL "It is." CR>)
+              (<VERB? CLOSE>
+               <TELL "Why bother?" CR>)
+              (<VERB? TAKE>
+               <TELL
+"A library nymph appears, sitting on your wrist. \"Sorry, but the
+encyclopedia is never to be removed from the stand.\" Kicking you gently
+in the thumb, the nymph vanishes." CR>)
+              (<VERB? LOOK-INSIDE>
+               <PERFORM ,V?READ ,PRSO>
+               <RTRUE>)>> 
+
+<GLOBAL VOLUME-USED <>>
+
+<OBJECT MEEF-SCROLL
+       (IN LIBRARY)
+       (DESC "dusty scroll")
+       (FDESC
+"The servants have been lax lately, for a scroll is lying among the dust
+in the corner.")
+       (SYNONYM SCROLL)
+       (ADJECTIVE DUSTY)
+       (SIZE 3)
+       (FLAGS TAKEBIT READBIT SCROLLBIT CONTBIT TRANSBIT)
+       (ACTION SCROLL-F)>
+
+<OBJECT MEEF-SPELL
+       (IN MEEF-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE MEEF)
+       (DESC "meef spell")
+       (TEXT "cause plants to wilt")
+       (SIZE 1)
+       (COUNT 0)
+       (FLAGS NDESCBIT SPELLBIT)
+       (ACTION SPELL-F)> 
+
+<ROOM STORE-ROOM
+      (SYNONYM DRYAD DRYADS KOBOLD SURMIN)
+      (IN ROOMS)
+      (DESC "Store Room")
+      (LDESC
+"This is a closet for storage. The only exit is east.")
+      (EAST TO LOBBY)
+      (OUT TO LOBBY)
+      (FLAGS RLANDBIT INSIDEBIT)>
+
+<OBJECT BERZIO-VIAL
+       (IN STORE-ROOM)
+       (DESC "ochre vial")
+       (FDESC "Among the provisions here is a small ochre-colored vial,
+closed and labelled with tiny lettering.")
+       (SYNONYM VIAL VIALS LABEL LETTER)
+       (ADJECTIVE BERZIO OCHRE SMALL TINY)
+       (SIZE 3)
+       (CAPACITY 1)
+       (FLAGS CONTBIT SEARCHBIT TAKEBIT VOWELBIT READBIT VIALBIT)
+       (ACTION BERZIO-VIAL-F)>
+
+<ROUTINE BERZIO-VIAL-F ()
+        <COND (<VERB? READ>
+               <FIXED-FONT-ON>
+               <TELL
+"|
+        \"BERZIO POTION|
+(obviate need for food or drink)\"" CR>
+               <FIXED-FONT-OFF>)>>
+
+<OBJECT BERZIO-POTION
+       (IN BERZIO-VIAL)
+       (DESC "ochre potion")
+       (SYNONYM POTION)
+       (ADJECTIVE OCHRE BERZIO)
+       (FLAGS NARTICLEBIT VOWELBIT)
+       (ACTION BERZIO-POTION-F)>
+
+<GLOBAL BERZIOED <>>
+
+<ROUTINE BERZIO-POTION-F ()
+        <COND (<AND <VERB? EAT DRINK>
+                    <NOT <IN? ,BERZIO-VIAL ,PROTAGONIST>>>
+               <POTION-POUR ,BERZIO-VIAL>)
+              (<VERB? RESEARCH>
+               <READ-ABOUT-POTIONS 1>)
+              (<VERB? EAT DRINK>
+               <MOVE ,BERZIO-POTION ,DIAL>
+               <SETG BERZIOED T>
+               <ENABLE <QUEUE I-UNBERZIO 100>>
+               <SETG SCORE <+ ,SCORE 10>>
+               <TELL "The potion was completely tasteless.">
+               <COND (<OR <G? ,HUNGER-LEVEL 0>
+                          <G? ,THIRST-LEVEL 0>>
+                      <TELL
+" You no longer feel hungry and thirsty, though.">)>
+               <SETG HUNGER-LEVEL 0>
+               <SETG THIRST-LEVEL 0>
+               <CRLF>)
+              (<VERB? DROP>
+               <PERFORM ,V?POUR ,PRSO ,PRSI>
+               <RTRUE>)
+              (<AND <VERB? POUR>
+                    <EQUAL? ,PRSO ,BERZIO-POTION>>
+               <POTION-POUR ,BERZIO-VIAL>)>>
+
+<ROUTINE I-UNBERZIO ()
+        <SETG BERZIOED <>>
+        <RFALSE>>
+
+<OBJECT MATCHBOOK
+       (IN STORE-ROOM)
+       (DESC "depleted matchbook")
+       (SYNONYM MATCHE MATCHB COVER PRINTI)
+       (ADJECTIVE MATCH DEPLET INNER)
+       (FLAGS READBIT TAKEBIT)
+       (SIZE 3)
+       (ACTION MATCHBOOK-F)>
+
+<ROUTINE MATCHBOOK-F ()
+        <COND (<VERB? CLOSE>
+               <TELL "Why bother?" CR>)
+              (<VERB? OPEN EXAMINE COUNT STRIKE>
+               <TELL
+"The matches are all gone, but there is some printing on the
+inner cover." CR>)
+              (<VERB? READ>
+               <FIXED-FONT-ON>
+               <TELL
+"\"Amazing Vilstu Potion!||
+Get by without breathing! Amaze your|
+friends! Be the first person on the|
+block to own some!||
+Order today by dropping this in any|
+mailbox. Our shipping department will|
+use the latest in temporal travel|
+techniques to insure that your potion|
+arrives the same day you order it!|
+(Orders received before noon will|
+arrive the day before you order).\"" CR>
+               <FIXED-FONT-OFF>)>>
+
+<OBJECT CALENDAR
+       (IN STORE-ROOM)
+       (DESC "calendar")
+       (SYNONYM CALEND LEGEND)
+       (SIZE 8)
+       (FLAGS READBIT TAKEBIT ONBIT)
+       (TEXT
+"The calendar is for the current year, 957 GUE, and bears many stunning
+pictures: the marble mines of Antharia, the sand dunes of the Kovalli
+Desert, ancient Fort Griffspotter, and the giant infotater factories of
+Borphee. A legend reads \"Best wishes for a leak-less year, from the
+Accardi Plumbers Guild.\"")
+       (ACTION CALENDAR-F)>
+
+<ROUTINE CALENDAR-F ()
+        <COND (<VERB? OPEN LOOK-INSIDE>
+               <PERFORM ,V?READ ,CALENDAR>
+               <RTRUE>)>>
+
+<ROOM CELLAR
+      (SYNONYM ROTGRU BLOODW BROGMO)
+      (IN ROOMS)
+      (DESC "Cellar")
+      (LDESC
+"You are in the basement of the Guild Hall. A steep, narrow stair
+leads upward from the southwest corner.")
+      (UP TO LOBBY)
+      (OUT TO LOBBY)
+      (SW TO LOBBY)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (PSEUDO "COBWEB" COBWEB-PSEUDO)
+      (GLOBAL STAIRS)>
+
+<ROUTINE COBWEB-PSEUDO ()
+        <RFALSE>>
+
+<GLOBAL CODE-NUMBER 0> ;"set when you wake up from opening dream" 
+
+<GLOBAL CODE-TABLE
+       <PTABLE
+        0
+        "bloodworm"
+        "brogmoid"
+        "dorn"
+        "dryad"
+        "grue"
+        "hellhound"
+        "kobold"
+        "nabiz"
+        "orc"
+        "rotgrub"
+        "surmin"
+        "yipple">>
+
+<GLOBAL CURRENT-TLOC 0> ;"set when you wake up from opening dream"
+
+<GLOBAL NEXT-NUMBER 0> ;"set when you wake up from opening dream"
+
+<GLOBAL NEXT-CODE-TABLE
+       <PTABLE ;"1=black, 2=gray, 3=red, 4=purple, 5=white"
+        0 0 0 0 0 0
+        5 2 1 3 1 0 ;bloodworm
+        3 4 3 1 4 0 ;brogmoid
+        2 4 1 2 5 0 ;dorn
+        1 2 5 3 3 0 ;dryad
+        1 1 3 1 4 0 ;grue
+        4 5 2 3 2 0 ;hellhound
+        3 4 1 4 3 0 ;kobold
+        4 1 1 1 3 0 ;nabiz
+        3 2 4 2 3 0 ;orc
+        2 3 2 4 3 0 ;rotgrub
+        1 1 4 3 1 0 ;surmin
+        2 4 5 4 1 0 ;yipple>>
+
+<OBJECT TRUNK
+       (IN CELLAR)
+       (DESC "sturdy trunk")
+       (LDESC
+"At the far end of the cellar, draped in cobwebs, is a large trunk. At
+each corner of its lid is a button: a black button with a picture of a
+star, a gray button depicting the moon, a red button illustrated with
+a bloody knife, and a purple button engraved with a royal crown. In the
+center of the lid is a white button picturing a dove in flight.")
+       (SYNONYM TRUNK LID CHEST)
+       (ADJECTIVE LARGE STURDY)
+       (FLAGS CONTBIT SEARCHBIT TRYTAKEBIT)
+       (CAPACITY 60)
+       (ACTION TRUNK-F)>
+
+<ROUTINE TRUNK-F ()
+        <COND (<AND <VERB? TAKE>
+                    <EQUAL? ,PRSO ,TRUNK>>
+               <TELL "It's too heavy to even budge." CR>)
+              (<NOT <FSET? ,TRUNK ,OPENBIT>>
+               <COND (<VERB? OPEN>
+                      <TELL "The lid won't budge." CR>)
+                     (<VERB? UNLOCK>
+                      <TELL "Perhaps the buttons..." CR>)
+                     (<VERB? REZROV>
+                      <TELL "The lid bulges outward for a moment." CR>)>)>>
+
+<OBJECT BLACK-BUTTON
+       (IN CELLAR)
+       (DESC "black button")
+       (SYNONYM BUTTON STAR)
+       (ADJECTIVE BLACK)
+       (FLAGS NDESCBIT)
+       (ACTION BUTTON-F)>
+
+<OBJECT GRAY-BUTTON
+       (IN CELLAR)
+       (DESC "gray button")
+       (SYNONYM BUTTON MOON)
+       (ADJECTIVE GRAY GREY)
+       (FLAGS NDESCBIT)
+       (ACTION BUTTON-F)>
+
+<OBJECT RED-BUTTON
+       (IN CELLAR)
+       (DESC "red button")
+       (SYNONYM BUTTON KNIFE)
+       (ADJECTIVE BLOODY RED)
+       (FLAGS NDESCBIT)
+       (ACTION BUTTON-F)>
+
+<OBJECT PURPLE-BUTTON
+       (IN CELLAR)
+       (DESC "purple button")
+       (SYNONYM BUTTON CROWN)
+       (ADJECTIVE PURPLE ROYAL)
+       (FLAGS NDESCBIT)
+       (ACTION BUTTON-F)>
+
+<OBJECT WHITE-BUTTON
+       (IN CELLAR)
+       (DESC "white button")
+       (SYNONYM BUTTON DOVE)
+       (ADJECTIVE WHITE)
+       (FLAGS NDESCBIT)
+       (ACTION BUTTON-F)>
+
+<GLOBAL TRUNK-SCREWED <>>
+
+<ROUTINE BUTTON-F ()
+        <COND (<VERB? LOOK-UNDER>
+               <TELL <PICK-ONE ,YUKS> CR>)
+              (<VERB? PUSH>
+               <TELL "There is a click from the lid of the trunk">
+               <COND (<OR <AND <EQUAL? ,PRSO ,BLACK-BUTTON>
+                               <EQUAL? ,NEXT-NUMBER 1>>
+                          <AND <EQUAL? ,PRSO ,GRAY-BUTTON>
+                               <EQUAL? ,NEXT-NUMBER 2>>
+                          <AND <EQUAL? ,PRSO ,RED-BUTTON>
+                               <EQUAL? ,NEXT-NUMBER 3>>
+                          <AND <EQUAL? ,PRSO ,PURPLE-BUTTON>
+                               <EQUAL? ,NEXT-NUMBER 4>>
+                          <AND <EQUAL? ,PRSO ,WHITE-BUTTON>
+                               <EQUAL? ,NEXT-NUMBER 5>>>
+                      <SETG CURRENT-TLOC <+ ,CURRENT-TLOC 1>>
+                      <SETG NEXT-NUMBER <GET ,NEXT-CODE-TABLE ,CURRENT-TLOC>>
+                      <COND (<AND <EQUAL? ,NEXT-NUMBER 0>
+                                  <NOT ,TRUNK-SCREWED>>
+                             <FSET ,TRUNK ,OPENBIT>
+                             <SETG SCORE <+ ,SCORE 25>>
+                             <TELL
+". A moment later, the lid of the trunk swings slowly open, revealing ">
+                             <PRINT-CONTENTS ,TRUNK>)>)
+                     (T
+                      <SETG TRUNK-SCREWED T>)>
+               <TELL "." CR>)>>
+
+<OBJECT AIMFIZ-SCROLL
+       (IN TRUNK)
+       (DESC "moldy scroll")
+       (SYNONYM SCROLL)
+       (ADJECTIVE MOLDY)
+       (SIZE 3)
+       (FLAGS TAKEBIT TRANSBIT CONTBIT READBIT SCROLLBIT)
+       (ACTION SCROLL-F)>
+
+<OBJECT AIMFIZ-SPELL
+       (IN AIMFIZ-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AIMFIZ)
+       (DESC "aimfiz spell")
+       (TEXT "transport caster to someone else's location")
+       (SIZE 1)
+       (COUNT 0)
+       (FLAGS NDESCBIT SPELLBIT VOWELBIT)
+       (ACTION SPELL-F)>
\ No newline at end of file
diff --git a/maze.zil b/maze.zil
new file mode 100644 (file)
index 0000000..059fa6e
--- /dev/null
+++ b/maze.zil
@@ -0,0 +1,847 @@
+"MAZE for
+                           SORCERER
+       (c) Copyright 1984 by Infocom Inc.  All Rights Reserved."
+
+<OBJECT MAZE
+       (IN LOCAL-GLOBALS)
+       (DESC "glass maze")
+       (SYNONYM MAZE LABYRI)
+       (ADJECTIVE GLASS)
+       (FLAGS NDESCBIT)
+       (ACTION MAZE-F)>
+
+<ROUTINE MAZE-F ()
+        <COND (<VERB? THROUGH>
+               <COND (<EQUAL? ,HERE ,OUTSIDE-GLASS-DOOR>
+                      <DO-WALK ,P?EAST>)
+                     (<EQUAL? ,HERE ,HOLLOW>
+                      <DO-WALK ,P?WEST>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? DROP EXIT>
+               <COND (<EQUAL? ,HERE ,GLASS-MAZE>
+                      <DO-WALK ,P?OUT>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? EXAMINE LOOK-INSIDE>
+               <TELL
+"You see nothing but reflected light in all directions." CR>)
+              (<VERB? RESEARCH>
+               <TELL
+"According to the article, Duncanthrax built the Glass Maze on a whim,
+to amuse his friends and torture his enemies. A labyrinth of 27 cubicles, it
+was full of devilish pitfalls and was located near his castle, Egreth." CR>)>>
+
+<ROOM END-OF-HIGHWAY
+      (IN ROOMS)
+      (SYNONYM GALEPA MAREIL CITY)
+      (ADJECTIVE ANCIEN)
+      (DESC "End of Highway")
+      (LDESC
+"The underground road ends here. A hovel, carved into the rock, lies to the
+east. To the north, wide marble stairs lead upward.")
+      (EAST TO STONE-HUT)
+      (WEST TO OUTSIDE-STORE)
+      (UP TO ENTRANCE-HALL)
+      (NORTH TO ENTRANCE-HALL)
+      (IN TO STONE-HUT)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL ROAD HOVEL STAIRS)>
+
+<OBJECT HOVEL
+       (IN LOCAL-GLOBALS)
+       (DESC "stone hovel")
+       (SYNONYM HUT HOVEL)
+       (ADJECTIVE UNDERG STONE)
+       (FLAGS NDESCBIT)
+       (ACTION HOVEL-F)>
+
+<ROUTINE HOVEL-F ()
+        <COND (<VERB? THROUGH>
+               <COND (<EQUAL? ,HERE ,END-OF-HIGHWAY>
+                      <DO-WALK ,P?EAST>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? DROP EXIT>
+               <COND (<EQUAL? ,HERE ,STONE-HUT>
+                      <DO-WALK ,P?WEST>)
+                     (T
+                      <LOOK-AROUND-YOU>)>)
+              (<VERB? LOOK-INSIDE>
+               <COND (<EQUAL? ,HERE ,STONE-HUT>
+                      <LOOK-AROUND-YOU>)
+                     (T
+                      <MAKE-OUT>)>)>>
+                     
+
+<ROOM STONE-HUT
+      (IN ROOMS)
+      (SYNONYM QUENDO KINGDO) 
+      (DESC "Stone Hut")
+      (LDESC
+"This is a small underground hovel. On the far wall is a small
+fireplace, long unused.")
+      (OUT TO END-OF-HIGHWAY)
+      (WEST TO END-OF-HIGHWAY)
+      (UP PER CHIMNEY-EXIT-F)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL CHIMNEY HOVEL)>
+
+<ROUTINE CHIMNEY-EXIT-F ()
+        <COND (,FWEEPED
+               <TELL "Too narrow even for bats." CR>
+               <RFALSE>)
+              (T
+               <TELL
+"Where did you get the bizarre notion that you might fit up a chimney?" CR>
+               <RFALSE>)>>
+
+<OBJECT FIREPLACE
+       (IN STONE-HUT)
+       (DESC "fireplace")
+       (SYNONYM FIREPL)
+       (ADJECTIVE SMALL UNUSED)
+       (FLAGS NDESCBIT CONTBIT OPENBIT SEARCHBIT)
+       (CAPACITY 50)
+       (ACTION FIREPLACE-F)>
+
+<ROUTINE FIREPLACE-F ()
+        <COND (<VERB? OPEN CLOSE>
+               <V-DEFLATE>)>>
+
+<ROOM ENTRANCE-HALL
+      (IN ROOMS)
+      (SYNONYM EMPIRE GUE)
+      (ADJECTIVE GREAT UNDERG)
+      (DESC "Entrance Hall")
+      (LDESC
+"This is a large entrance hall, paved with polished stone. Large doorways
+lead north and south.")
+      (NORTH TO OUTSIDE-GLASS-DOOR)
+      (SOUTH TO END-OF-HIGHWAY)
+      (FLAGS INSIDEBIT RLANDBIT)
+      (GLOBAL ARCHWAY)>
+
+<OBJECT STATUE
+       (IN ENTRANCE-HALL)
+       (DESC "statue")
+       (FDESC
+"Standing in the center of the hall is a life-sized statue. An inscription
+at the base is in a familiar language.")
+       (LDESC
+"There is a marble statue here, in a strikingly life-like pose of
+pompous bellicosity.")
+       (SYNONYM STATUE INSCRI)
+       (ADJECTIVE LIFE- SIZED MARBLE)
+       (FLAGS READBIT)
+       (TEXT
+"\"I, Duncanthrax, King of Quendor and all its subjugated outlands, invite
+you to sample the delights of my Glass Labyrinth.\"")
+       (ACTION STATUE-F)>
+
+<ROUTINE STATUE-F ()
+        <COND (<VERB? MALYON>
+               <TELL
+"The statue transforms into a living figure, probably a King if the royal
+attire is any clue. The King seems angry, and quickly settles his wrathful
+gaze on you. He bellows \"Guards! Throw this trespasser into the glass
+maze! Guards! ... GUARDS!!!\" When the guards fail to respond, the King
+becomes livid, his voice rises to an incoherent squeak, and flecks of foam
+spit from the corners of his mouth. Finally, eyes bulging with rage, he
+storms out of the room." CR>
+               <FSET ,STATUE ,TOUCHBIT>
+               <SETG STATUE-FOLLOW T>
+               <ENABLE <QUEUE I-STATUE-UNFOLLOW 1>>
+               <COND (<EQUAL? ,HERE ,ENTRANCE-HALL ,OUTSIDE-STORE>
+                      <COND (<PROB 50>
+                             <MOVE ,STATUE ,HIGHWAY>)
+                            (T
+                             <MOVE ,STATUE ,BEND>)>)
+                     (T
+                      <COND (<PROB 50>
+                             <MOVE ,STATUE ,ENTRANCE-HALL>)
+                            (T
+                             <MOVE ,STATUE ,OUTSIDE-STORE>)>)>)
+              (<AND <VERB? FOLLOW>
+                    ,STATUE-FOLLOW>
+               <TELL "The King moved too quickly to follow." CR>)>>
+
+<GLOBAL STATUE-FOLLOW <>>
+
+<ROUTINE I-STATUE-UNFOLLOW ()
+        <SETG STATUE-FOLLOW <>>
+        <RFALSE>>
+
+<ROOM OUTSIDE-GLASS-DOOR
+      (IN ROOMS)
+      (SYNONYM TECH)
+      (ADJECTIVE GUE)
+      (DESC "Outside Glass Arch")
+      (LDESC
+"Through a breathtaking archway of glass to the east is an
+area glistening with reflected light. Another exit leads south.")
+      (EAST TO GLASS-MAZE)
+      (SOUTH TO ENTRANCE-HALL)
+      (FLAGS RLANDBIT INSIDEBIT)
+      (GLOBAL MAZE ARCHWAY)>
+
+<ROUTINE NO-FLOOR? ()
+        <COND (<AND ,MAZE-CROSSED
+                    <EQUAL? <GET ,POST-DOWN-EXITS ,ROOM-NUMBER> 0>>
+               <RFALSE>)
+              (<AND <NOT ,MAZE-CROSSED>
+                    <EQUAL? <GET ,PRE-DOWN-EXITS ,ROOM-NUMBER> 0>>
+               <RFALSE>)
+              (T
+               <RTRUE>)>>
+
+<ROOM GLASS-MAZE
+      (IN ROOMS)
+      (DESC "Inside the Glass Maze")
+      (UP PER MAZE-EXIT-F)
+      (DOWN PER MAZE-EXIT-F)
+      (NORTH PER MAZE-EXIT-F)
+      (SOUTH PER MAZE-EXIT-F)
+      (WEST PER MAZE-EXIT-F)
+      (EAST PER MAZE-EXIT-F)
+      (OUT "Please use compass directions here.")
+      (FLAGS INSIDEBIT RLANDBIT ONBIT)
+      (GLOBAL MAZE)
+      (ACTION GLASS-MAZE-F)>
+
+<ROUTINE GLASS-MAZE-F (RARG)
+        <COND (<EQUAL? .RARG ,M-ENTER>
+               <TABLE-TO-MAZE ,ROOM-NUMBER>
+               <FCLEAR ,GLASS-MAZE ,TOUCHBIT>
+               <PUT ,VEZZAS 5 0>)
+              (<EQUAL? .RARG ,M-LOOK>
+               <TELL
+"You are inside a huge cubical maze, shimmering with light from an unseen
+source above.">
+               <COND (<NOT ,FWEEPED>
+                      <TELL
+" It is impossible to tell if the walls and ceilings around you are
+glass surfaces or openings.">)>
+               <COND (<AND <NOT ,FLYING>
+                           <NO-FLOOR?>
+                           <EQUAL? ,ROOM-NUMBER 13>>
+                      <TELL " ">
+                      <PLUMMET>
+                      <RTRUE>)>
+               <COND (<AND <NOT ,FLYING>
+                           <NOT <NO-FLOOR?>>>
+                      <TELL
+" Since you are standing on something, the floor must be solid, but it is
+virtually invisible and you feel as though you were walking on air.">)>
+               <COND (,FWEEPED
+                      <RADAR-VIEW>)>
+               <CRLF>)>>
+
+<ROUTINE RADAR-VIEW ("AUX" X COUNT LUP LDOWN NORTH SOUTH EAST WEST)
+        <SET X <>>
+        <SET LUP <>>
+        <SET LDOWN <>>
+        <SET NORTH <>>
+        <SET SOUTH <>>
+        <SET EAST <>>
+        <SET WEST <>>
+        <SET COUNT 0> ;"number of surfaces"
+        <TELL
+" Thanks to your sonar-like bat senses, you can tell that there are surfaces ">
+        <COND (<OR <AND ,MAZE-CROSSED
+                        <EQUAL? <GET ,POST-UP-EXITS ,ROOM-NUMBER> 0>>
+                   <AND <NOT ,MAZE-CROSSED>
+                        <EQUAL? <GET ,PRE-UP-EXITS ,ROOM-NUMBER> 0>>>
+               <SET LUP T>
+               <SET COUNT <+ .COUNT 1>>)>
+        <COND (<OR <AND ,MAZE-CROSSED
+                        <EQUAL? <GET ,POST-DOWN-EXITS ,ROOM-NUMBER> 0>>
+                   <AND <NOT ,MAZE-CROSSED>
+                        <EQUAL? <GET ,PRE-DOWN-EXITS ,ROOM-NUMBER> 0>>>
+               <SET LDOWN T>
+               <SET COUNT <+ .COUNT 1>>)>
+        <COND (<OR <AND ,MAZE-CROSSED
+                        <EQUAL? <GET ,POST-NORTH-EXITS ,ROOM-NUMBER> 0>>
+                   <AND <NOT ,MAZE-CROSSED>
+                        <EQUAL? <GET ,PRE-NORTH-EXITS ,ROOM-NUMBER> 0>>>
+               <SET NORTH T>
+               <SET COUNT <+ .COUNT 1>>)>
+        <COND (<OR <AND ,MAZE-CROSSED
+                        <EQUAL? <GET ,POST-SOUTH-EXITS ,ROOM-NUMBER> 0>>
+                   <AND <NOT ,MAZE-CROSSED>
+                        <EQUAL? <GET ,PRE-SOUTH-EXITS ,ROOM-NUMBER> 0>>>
+               <SET SOUTH T>
+               <SET COUNT <+ .COUNT 1>>)>
+        <COND (<OR <AND ,MAZE-CROSSED
+                        <EQUAL? <GET ,POST-EAST-EXITS ,ROOM-NUMBER> 0>>
+                   <AND <NOT ,MAZE-CROSSED>
+                        <EQUAL? <GET ,PRE-EAST-EXITS ,ROOM-NUMBER> 0>>>
+               <SET EAST T>
+               <SET COUNT <+ .COUNT 1>>)>
+        <COND (<OR <AND ,MAZE-CROSSED
+                        <EQUAL? <GET ,POST-WEST-EXITS ,ROOM-NUMBER> 0>>
+                   <AND <NOT ,MAZE-CROSSED>
+                        <EQUAL? <GET ,PRE-WEST-EXITS ,ROOM-NUMBER> 0>>>
+               <SET WEST T>
+               <SET COUNT <+ .COUNT 1>>)>
+        <COND (.LUP
+               <COND (<EQUAL? .COUNT 1>
+                      <TELL " and ">)
+                     (.X
+                      <TELL ", ">)>
+               <SET X T>
+               <SET COUNT <- .COUNT 1>>
+               <TELL "above you">)>
+        <COND (.LDOWN
+               <COND (<EQUAL? .COUNT 1>
+                      <TELL " and ">)
+                     (.X
+                      <TELL ", ">)>
+               <SET X T>
+               <SET COUNT <- .COUNT 1>>
+               <TELL "below you">)>
+        <COND (.NORTH
+               <COND (<EQUAL? .COUNT 1>
+                      <TELL " and ">)
+                     (.X
+                      <TELL ", ">)>
+               <SET X T>
+               <SET COUNT <- .COUNT 1>>
+               <TELL "to the north">)>
+        <COND (.SOUTH
+               <COND (<EQUAL? .COUNT 1>
+                      <TELL " and ">)
+                     (.X
+                      <TELL ", ">)>
+               <SET X T>
+               <SET COUNT <- .COUNT 1>>
+               <TELL "to the south">)>
+        <COND (.EAST
+               <COND (<EQUAL? .COUNT 1>
+                      <TELL " and ">)
+                     (.X
+                      <TELL ", ">)>
+               <SET X T>
+               <SET COUNT <- .COUNT 1>>
+               <TELL "to the east">)>
+        <COND (.WEST
+               <COND (<EQUAL? .COUNT 1>
+                      <TELL " and ">)
+                     (.X
+                      <TELL ", ">)>
+               <SET X T>
+               <SET COUNT <- .COUNT 1>>
+               <TELL "to the west">)>
+        <TELL ".">>
+
+<ROUTINE MAZE-EXIT-F ()
+        <COND (,MAZE-CROSSED
+;"post-maze-exit-function"
+        <MAZE-TO-TABLE ,ROOM-NUMBER>
+        <COND (<EQUAL? ,PRSO ,P?UP>
+               <COND (<NOT ,FLYING>
+                      <CANT-JUMP>
+                      <TABLE-TO-MAZE ,ROOM-NUMBER>
+                      <RFALSE>)
+                     (T
+                      <COND (<EQUAL? <GET ,POST-UP-EXITS ,ROOM-NUMBER> 0>
+                             <HIT-WALL>
+                             <RFALSE>)
+                            (T
+                             <SETG ROOM-NUMBER
+                                   <GET ,POST-UP-EXITS ,ROOM-NUMBER>>)>)>)
+              (<EQUAL? ,PRSO ,P?DOWN>
+               <COND (<NOT ,FLYING>
+                      <SOLID-FLOOR>
+                      <TABLE-TO-MAZE ,ROOM-NUMBER>
+                      <RFALSE>)
+                     (T
+                      <COND (<EQUAL? <GET ,POST-DOWN-EXITS ,ROOM-NUMBER> 0>
+                             <HIT-WALL>
+                             <RFALSE>)
+                            (T
+                             <SETG ROOM-NUMBER
+                                   <GET ,POST-DOWN-EXITS ,ROOM-NUMBER>>)>)>)
+              (<EQUAL? ,PRSO ,P?NORTH>
+               <COND (<EQUAL? <GET ,POST-NORTH-EXITS ,ROOM-NUMBER> 0>
+                      <HIT-WALL>
+                      <RFALSE>)
+                   (T
+                    <SETG ROOM-NUMBER <GET ,POST-NORTH-EXITS ,ROOM-NUMBER>>)>)
+              (<EQUAL? ,PRSO ,P?SOUTH>
+               <COND (<EQUAL? <GET ,POST-SOUTH-EXITS ,ROOM-NUMBER> 0>
+                      <HIT-WALL>
+                      <RFALSE>)
+                   (T
+                    <SETG ROOM-NUMBER <GET ,POST-SOUTH-EXITS ,ROOM-NUMBER>>)>)
+              (<EQUAL? ,PRSO ,P?EAST>
+               <COND (<EQUAL? <GET ,POST-EAST-EXITS ,ROOM-NUMBER> 0>
+                      <HIT-WALL>
+                      <RFALSE>)
+                     (T
+                      <SETG ROOM-NUMBER <GET ,POST-EAST-EXITS ,ROOM-NUMBER>>
+                      <COND (<EQUAL? ,ROOM-NUMBER 30>
+                             <SETG ROOM-NUMBER 24>
+                             <RETURN ,HOLLOW>)>)>)
+              (<EQUAL? ,PRSO ,P?WEST>
+               <COND (<EQUAL? <GET ,POST-WEST-EXITS ,ROOM-NUMBER> 0>
+                      <HIT-WALL>
+                      <RFALSE>)
+                     (T
+                      <SETG ROOM-NUMBER <GET ,POST-WEST-EXITS ,ROOM-NUMBER>>
+                      <COND (<EQUAL? ,ROOM-NUMBER 40>
+                             <SETG ROOM-NUMBER 13>
+                             <RETURN ,OUTSIDE-GLASS-DOOR>)>)>)>
+        <TABLE-TO-MAZE ,ROOM-NUMBER>
+        <V-LOOK>
+        <PLUMMET>
+        <RFALSE>)
+              (T
+;"pre-maze-exit-funtion"
+        <MAZE-TO-TABLE ,ROOM-NUMBER>
+        <COND (<EQUAL? ,PRSO ,P?UP>
+               <COND (<NOT ,FLYING>
+                      <CANT-JUMP>
+                      <TABLE-TO-MAZE ,ROOM-NUMBER>
+                      <RFALSE>)
+                     (T
+                      <COND (<EQUAL? <GET ,PRE-UP-EXITS ,ROOM-NUMBER> 0>
+                             <HIT-WALL>
+                             <RFALSE>)
+                            (T
+                             <SETG ROOM-NUMBER
+                                   <GET ,PRE-UP-EXITS ,ROOM-NUMBER>>)>)>)
+              (<EQUAL? ,PRSO ,P?DOWN>
+               <COND (<NOT ,FLYING>
+                      <SOLID-FLOOR>
+                      <TABLE-TO-MAZE ,ROOM-NUMBER>
+                      <RFALSE>)
+                     (T
+                      <COND (<EQUAL? <GET ,PRE-DOWN-EXITS ,ROOM-NUMBER> 0>
+                             <HIT-WALL>
+                             <RFALSE>)
+                            (T
+                             <SETG ROOM-NUMBER
+                                   <GET ,PRE-DOWN-EXITS ,ROOM-NUMBER>>)>)>)
+              (<EQUAL? ,PRSO ,P?NORTH>
+               <COND (<EQUAL? <GET ,PRE-NORTH-EXITS ,ROOM-NUMBER> 0>
+                      <HIT-WALL>
+                      <RFALSE>)
+                    (T
+                     <SETG ROOM-NUMBER <GET ,PRE-NORTH-EXITS ,ROOM-NUMBER>>)>)
+              (<EQUAL? ,PRSO ,P?SOUTH>
+               <COND (<EQUAL? <GET ,PRE-SOUTH-EXITS ,ROOM-NUMBER> 0>
+                      <HIT-WALL>
+                      <RFALSE>)
+                    (T
+                     <SETG ROOM-NUMBER <GET ,PRE-SOUTH-EXITS ,ROOM-NUMBER>>)>)
+              (<EQUAL? ,PRSO ,P?EAST>
+               <COND (<EQUAL? <GET ,PRE-EAST-EXITS ,ROOM-NUMBER> 0>
+                      <HIT-WALL>
+                      <RFALSE>)
+                     (T
+                      <SETG ROOM-NUMBER <GET ,PRE-EAST-EXITS ,ROOM-NUMBER>>
+                      <COND (<EQUAL? ,ROOM-NUMBER 30>
+                             <SETG SCORE <+ ,SCORE ,HOLLOW-POINT>>
+                             <SETG HOLLOW-POINT 0>
+                             <SETG ROOM-NUMBER 24>
+                             <RETURN ,HOLLOW>)>)>)
+              (<EQUAL? ,PRSO ,P?WEST>
+               <COND (<EQUAL? <GET ,PRE-WEST-EXITS ,ROOM-NUMBER> 0>
+                      <HIT-WALL>
+                      <RFALSE>)
+                     (T
+                      <SETG ROOM-NUMBER <GET ,PRE-WEST-EXITS ,ROOM-NUMBER>>
+                      <COND (<EQUAL? ,ROOM-NUMBER 40>
+                             <SETG ROOM-NUMBER 13>
+                             <RETURN ,OUTSIDE-GLASS-DOOR>)>)>)>
+        <TABLE-TO-MAZE ,ROOM-NUMBER>
+        <V-LOOK>
+        <PLUMMET>
+        <RFALSE>)>>
+
+<GLOBAL MAZE-CROSSED <>>
+
+<GLOBAL ROOM-NUMBER 13> ;"you enter maze at room number thirteen"
+
+<ROUTINE HIT-WALL ()
+        <TELL "BONK! You ">
+        <COND (,FLYING
+               <TELL "fly">)
+              (T
+               <TELL "walk">)>
+        <TELL
+" right into an almost invisible wall of glass -- a stunning blow!" CR>>
+
+<ROUTINE CANT-JUMP ()
+        <TELL "You can't possibly jump that high." CR>>
+
+<ROUTINE SOLID-FLOOR ()
+        <TELL "Fortunately, the floor is solid." CR>> 
+
+<ROUTINE PLUMMET ()
+        <COND (<AND <NOT ,FLYING>
+                    <NO-FLOOR?>>
+               <JIGS-UP
+"Unfortunately, this section of the glass maze has no floor.">
+               <RFALSE>)>>
+
+<GLOBAL PRE-UP-EXITS
+       <PTABLE 0
+10  0 12  0  0  0 16  0  0
+ 0 20 21  0  0  0  0 26  0
+ 0  0  0  0  0  0  0  0  0>>
+
+<GLOBAL PRE-DOWN-EXITS
+       <PTABLE 0
+ 0  0  0  0  0  0  0  0  0
+ 1  0  3  0  0  0  7  0  0
+ 0 11 12  0  0  0  0 17  0>>
+
+<GLOBAL PRE-NORTH-EXITS
+       <PTABLE 0
+ 0  0  0  1  2  3  0  0  6
+ 0  0  0 10 11  0  0 14 15
+ 0  0  0  0  0 21 22  0  0>>
+
+<GLOBAL PRE-SOUTH-EXITS
+       <PTABLE 0
+ 4  5  6  0  0  9  0  0  0
+13 14  0  0 17 18  0  0  0
+ 0  0 24 25  0  0  0  0  0>>
+
+<GLOBAL PRE-EAST-EXITS
+       <PTABLE 0
+ 0  0  0  5  0  0  8  9  0
+11  0  0  0  0  0 17 18  0
+20  0  0 23  0 30 26 27  0>>
+
+<GLOBAL PRE-WEST-EXITS
+       <PTABLE 0
+ 0  0  0  0  4  0  0  7  8
+ 0 10  0 40  0  0  0 16 17
+ 0 19  0  0 22  0  0 25 26>>
+
+<GLOBAL POST-UP-EXITS
+       <PTABLE 0
+ 0  0 12 13  0  0 16  0 18
+19 20  0  0  0  0 25  0 27
+ 0  0  0  0  0  0  0  0  0>>
+
+<GLOBAL POST-DOWN-EXITS
+       <PTABLE 0
+ 0  0  0  0  0  0  0  0  0
+ 0  0  3  4  0  0  7  0  9
+10 11  0  0  0  0 16  0 18>>
+
+<GLOBAL POST-NORTH-EXITS
+       <PTABLE 0
+ 0  0  0  1  2  3  0  0  0
+ 0  0  0  0 11 12  0  0  0
+ 0  0  0 19  0  0 22 23  0>>
+
+<GLOBAL POST-SOUTH-EXITS
+       <PTABLE 0
+ 4  5  6  0  0  0  0  0  0
+ 0 14 15  0  0  0  0  0  0
+22  0  0 25 26  0  0  0  0>>
+
+<GLOBAL POST-EAST-EXITS
+       <PTABLE 0
+ 0  3  0  5  0  0  8  9  0
+11  0  0  0 15  0  0 18  0
+ 0 21  0  0 24 30  0 27  0>>
+
+<GLOBAL POST-WEST-EXITS
+       <PTABLE 0
+ 0  0  2  0  4  0  0  7  8
+ 0 10  0 40  0 14  0  0 17
+ 0  0 20  0  0 23  0  0 26>>
+
+<ROUTINE MAZE-TO-TABLE (LOC "AUX" (CNT 0) (F <FIRST? ,GLASS-MAZE>) N)
+        <REPEAT ()
+                <COND (.F
+                       <SET N <NEXT? .F>>)
+                      (T
+                       <RETURN>)>
+                <COND (<EQUAL? .F ,WINNER>
+                       T)
+                      (<OR <FSET? .F ,TAKEBIT>
+                           <EQUAL? .F ,DORN-BEAST-CORPSE>>
+                       <REPEAT ()
+                               <COND (<EQUAL? <GET ,MAZE-TABLE .CNT> 0>
+                                      <PUT ,MAZE-TABLE .CNT .LOC>
+                                      <PUT ,MAZE-TABLE <+ .CNT 1> .F>
+                                      <SET CNT <+ .CNT 2>>
+                                      <MOVE .F ,DIAL>
+                                      <RETURN>)
+                                     (T
+                                      <SET CNT <+ .CNT 2>>)>>)>
+                <SET F .N>>>
+
+<ROUTINE TABLE-TO-MAZE (LOC "AUX" (TABLE ,MAZE-TABLE) (CNT 0))
+        <REPEAT ()
+                <COND (<NOT <L? .CNT ,MAZE-TABLE-LENGTH>>
+                       <RETURN>)
+                      (<EQUAL? <GET ,MAZE-TABLE .CNT> .LOC>
+                       <PUT ,MAZE-TABLE .CNT 0>
+                       <MOVE <GET ,MAZE-TABLE <+ .CNT 1>> ,GLASS-MAZE>)>
+                <SET CNT <+ .CNT 2>>>>
+
+<ROUTINE DROP-IN-MAZE ("AUX" (CNT 0) (NEW-ROOM 0))
+        <COND (,MAZE-CROSSED
+               <COND (<EQUAL? ,ROOM-NUMBER 12>
+                      <SET NEW-ROOM 3>)
+                     (<EQUAL? ,ROOM-NUMBER 13>
+                      <SET NEW-ROOM 4>)
+                     (<EQUAL? ,ROOM-NUMBER 16>
+                      <SET NEW-ROOM 7>)
+                     (<EQUAL? ,ROOM-NUMBER 18>
+                      <SET NEW-ROOM 9>)
+                     (<EQUAL? ,ROOM-NUMBER 19>
+                      <SET NEW-ROOM 10>)
+                     (<EQUAL? ,ROOM-NUMBER 20>
+                      <SET NEW-ROOM 11>)
+                     (<EQUAL? ,ROOM-NUMBER 25>
+                      <SET NEW-ROOM 7>)
+                     (<EQUAL? ,ROOM-NUMBER 27>
+                      <SET NEW-ROOM 9>)>)
+              (T
+               <COND (<EQUAL? ,ROOM-NUMBER 10>
+                      <SET NEW-ROOM 1>)
+                     (<EQUAL? ,ROOM-NUMBER 12>
+                      <SET NEW-ROOM 3>)
+                     (<EQUAL? ,ROOM-NUMBER 16>
+                      <SET NEW-ROOM 7>)
+                     (<EQUAL? ,ROOM-NUMBER 20>
+                      <SET NEW-ROOM 11>)
+                     (<EQUAL? ,ROOM-NUMBER 21>
+                      <SET NEW-ROOM 3>)
+                     (<EQUAL? ,ROOM-NUMBER 26>
+                      <SET NEW-ROOM 17>)>)>
+        <COND (<EQUAL? .NEW-ROOM 0>
+               <TELL "Bug #14" CR>
+               <RTRUE>)>
+        <REPEAT ()
+                <COND (<EQUAL? <GET ,MAZE-TABLE .CNT> 0>
+                       <PUT ,MAZE-TABLE .CNT .NEW-ROOM>
+                       <PUT ,MAZE-TABLE <+ .CNT 1> ,PRSO>
+                       <SET CNT <+ .CNT 2>>
+                       <RETURN>)
+                      (T
+                       <SET CNT <+ .CNT 2>>)>>>
+
+<ROUTINE REARRANGE-MAZE-TABLE ("AUX" (CNT 0))
+        <REPEAT ()
+                <COND (<NOT <L? .CNT ,MAZE-TABLE-LENGTH>>
+                       <RETURN>)
+                      (<EQUAL? <GET ,MAZE-TABLE .CNT> 12>
+                       <PUT ,MAZE-TABLE .CNT 3>)
+                      (<EQUAL? <GET ,MAZE-TABLE .CNT> 13>
+                       <PUT ,MAZE-TABLE .CNT 4>)
+                      (<EQUAL? <GET ,MAZE-TABLE .CNT> 16>
+                       <PUT ,MAZE-TABLE .CNT 7>)
+                      (<EQUAL? <GET ,MAZE-TABLE .CNT> 18>
+                       <PUT ,MAZE-TABLE .CNT 9>)
+                      (<EQUAL? <GET ,MAZE-TABLE .CNT> 19>
+                       <PUT ,MAZE-TABLE .CNT 10>)
+                      (<EQUAL? <GET ,MAZE-TABLE .CNT> 20>
+                       <PUT ,MAZE-TABLE .CNT 11>)
+                      (<EQUAL? <GET ,MAZE-TABLE .CNT> 25>
+                       <PUT ,MAZE-TABLE .CNT 7>)
+                      (<EQUAL? <GET ,MAZE-TABLE .CNT> 27>
+                       <PUT ,MAZE-TABLE .CNT 9>)>
+                <SET CNT <+ .CNT 2>>>>
+
+<CONSTANT MAZE-TABLE-LENGTH 40>
+
+<GLOBAL MAZE-TABLE ;"length should be 2*number of takeable objects"
+       <TABLE 0 0 0 0 0 0 0 0 0 0
+              0 0 0 0 0 0 0 0 0 0
+              0 0 0 0 0 0 0 0 0 0
+              0 0 0 0 0 0 0 0 0 0>>
+
+<GLOBAL HOLLOW-POINT 20>
+
+<ROOM HOLLOW
+      (IN ROOMS)
+      (SYNONYM ANTHAR)
+      (DESC "Hollow")
+      (LDESC
+"The maze opens here onto a tiny outdoor plateau, completely surrounded
+by towering cliffs. The only way out is back through the dazzling archway
+of glass to the west.|
+Near the glass arch is a small rectangular brick structure. The center of
+the structure is a hole about a foot wide, leading down into darkness.")
+      (WEST TO GLASS-MAZE)
+      (UP "You couldn't even fly over these cliffs.")
+      (DOWN "The opening in the brick structure is too small for
+humans or even bats.")
+      (FLAGS RLANDBIT ONBIT)
+      (PSEUDO "CLIFF" CLIFF-PSEUDO "CLIFFS" CLIFF-PSEUDO)
+      (GLOBAL CHIMNEY HOLE SOOT MAZE ARCHWAY)
+      (ACTION HOLLOW-F)>
+
+<ROUTINE HOLLOW-F (RARG)
+        <COND (<AND <EQUAL? .RARG ,M-END>
+                    <HELD? ,SPELL-BOOK>>
+               <MOVE ,SPELL-BOOK ,DIAL>
+               <TELL
+"\"Caw! Caw!\" A giant bird of prey with a fondness for gnusto-receptive
+paper swoops down and flies off with your spell book." CR>)>>
+
+<OBJECT CHIMNEY
+       (IN LOCAL-GLOBALS)
+       (DESC "chimney")
+       (SYNONYM CHIMNE)
+       (FLAGS NDESCBIT)
+       (ACTION CHIMNEY-F)>
+
+<ROUTINE CHIMNEY-F ()
+        <COND (<EQUAL? ,HERE ,HOLLOW>
+               <COND (<EQUAL? ,PRSO ,CHIMNEY>
+                      <SETG PERFORMING-SPELL T>
+                      <PERFORM ,PRSA ,BRICK-STRUCTURE ,PRSI>
+                      <RTRUE>)
+                     (T
+                      <SETG PERFORMING-SPELL T>
+                      <PERFORM ,PRSA ,PRSO ,BRICK-STRUCTURE>
+                      <RTRUE>)>)>>
+
+<OBJECT BRICK-STRUCTURE
+       (IN HOLLOW)
+       (DESC "brick structure")
+       (SYNONYM STRUCT BRICKS SHAFT OPENIN)
+       (ADJECTIVE BRICK RECTAN SMALL)
+       (FLAGS NDESCBIT)
+       (ACTION BRICK-STRUCTURE-F)>
+
+<ROUTINE BRICK-STRUCTURE-F ()
+        <COND (<VERB? EXAMINE>
+               <TELL
+"The structure is about two feet on each side, and extends up from the
+ground about three feet. Except for a large quantity of soot around the
+opening, it looks a lot like a small, rectangular well." CR>)
+              (<VERB? LOOK-INSIDE>
+               <TELL
+"The opening is dark and you can only see a few feet into it." CR>)
+              (<VERB? ENTER CLIMB-DOWN>
+               <DO-WALK ,P?DOWN>)
+              (<AND <VERB? PUT>
+                    <EQUAL? ,PRSI ,BRICK-STRUCTURE>>
+               <MOVE ,PRSO ,FIREPLACE>
+               <COND (<EQUAL? ,PRSO ,SWANZO-SCROLL>
+                      <ENABLE <QUEUE I-DORN-BEAST 2>>)>
+               <TELL
+"The " D ,PRSO " disappears into the shaft." CR>)
+              (<VERB? REACH-IN>
+               <TELL "The shaft extends beyond your reach." CR>)
+              (<VERB? THROUGH>
+               <DO-WALK ,P?DOWN>)>>
+
+<OBJECT SOOT
+       (IN LOCAL-GLOBALS)
+       (DESC "soot")
+       (SYNONYM SOOT QUANTI)
+       (ADJECTIVE LARGE BLACK)
+       (FLAGS NDESCBIT NARTICLEBIT)>
+
+<OBJECT SWANZO-SCROLL
+       (IN HOLLOW)
+       (DESC "parchment scroll")
+       (SYNONYM SCROLL)
+       (ADJECTIVE PARCHM)
+       (SIZE 3)
+       (FLAGS TAKEBIT TRYTAKEBIT TRANSBIT CONTBIT READBIT SCROLLBIT)
+       (ACTION SCROLL-F)>
+
+<OBJECT SWANZO-SPELL
+       (IN SWANZO-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE SWANZO)
+       (DESC "swanzo spell")
+       (TEXT "exorcise an inhabiting presence")
+       (SIZE 1)
+       (COUNT 0)
+       (FLAGS NDESCBIT SPELLBIT VOWELBIT)
+       (ACTION SPELL-F)>
+
+<OBJECT DORN-BEAST
+       (IN DIAL)
+       (DESC "ferocious dorn beast")
+       (SYNONYM DORNBE DORN BEAST DORNS)
+       (ADJECTIVE FEROCI DORN)
+       (ACTION DORN-BEAST-F)>
+
+<ROUTINE DORN-BEAST-F ()
+        <COND (<VERB? RESEARCH>
+               <PERFORM ,V?RESEARCH ,LOBBY>
+               <RTRUE>)>>
+
+<OBJECT DORN-BEAST-CORPSE
+       (IN DIAL)
+       (DESC "splattered body")
+       (LDESC
+"A somewhat splattered corpse is sprawled across the floor.")
+        (SYNONYM CORPSE BODY)
+       (ADJECTIVE DEAD SPLATT)
+       (ACTION CORPSE-F)>
+
+<ROUTINE CORPSE-F ()
+        <COND (<VERB? MALYON>
+               <JIGS-UP
+"The corpse comes to life just long enough to fry you.">)>>
+
+<GLOBAL DORN-BEAST-WARNING <>>
+
+<GLOBAL DORN-BEAST-ROOM 0>
+
+<GLOBAL LAST-DORN-ROOM 0>
+
+<GLOBAL SPLATTERED <>>
+
+<ROUTINE I-DORN-BEAST ()
+        <ENABLE <QUEUE I-DORN-BEAST -1>>
+        <COND (<EQUAL? ,HERE ,HOLLOW>
+               <COND (,DORN-BEAST-WARNING
+                      <DORN-DEATH>)
+                     (T
+                      <MOVE ,DORN-BEAST ,HERE>
+                      <SETG DORN-BEAST-WARNING T>
+                      <TELL CR
+"With a loud roar, a dreadfully huge dorn beast emerges from the
+shadows at the base of the cliff and gallops toward you." CR>)>)
+              (T
+               <FSET ,DORN-BEAST ,NDESCBIT>
+               <COND (<NOT ,DORN-BEAST-WARNING>
+                      <SETG DORN-BEAST-WARNING T>
+                      <TELL CR
+"From outside the maze, you hear the bellowing of a ferocious dorn beast!" CR>)
+                     (<EQUAL? ,ROOM-NUMBER ,DORN-BEAST-ROOM ,LAST-DORN-ROOM>
+                      <CRLF>
+                      <DORN-DEATH>)
+                     (T
+                      <TELL CR
+"The dorn beast rushes after you. Its ear-splitting bellowing
+resounds throughout the glass maze.">
+                      <COND (<EQUAL? ,ROOM-NUMBER 27>
+                             <SETG SPLATTERED T>
+                             <DISABLE <INT I-DORN-BEAST>>
+                             <MOVE ,DORN-BEAST ,DIAL>
+                             <PUT ,MAZE-TABLE 38 9>
+                             <PUT ,MAZE-TABLE 39 ,DORN-BEAST-CORPSE>
+                             <TELL
+" Suddenly, the dorn-beast realizes that it is galloping through midair,
+and gives a surprisingly high-pitched squeal. It claws frantically at thin
+air, trying desperately to invent dorn beast flight. You happily notice that
+dorn beasts do not so much fly as plummet.">)
+                            (T
+                             <SETG LAST-DORN-ROOM ,DORN-BEAST-ROOM>
+                             <SETG DORN-BEAST-ROOM ,ROOM-NUMBER>
+                             <MOVE ,DORN-BEAST ,HERE>)>
+                      <CRLF>)>)>>
+
+<ROUTINE DORN-DEATH ()
+        <JIGS-UP
+"The dorn beast fries your brain with its hypnotic gaze and begins
+secreting digestive juices.">>
\ No newline at end of file
diff --git a/misc.zil b/misc.zil
new file mode 100644 (file)
index 0000000..abe4099
--- /dev/null
+++ b/misc.zil
@@ -0,0 +1,575 @@
+"MISC for
+                           SORCERER
+            (c) 1984 by Infocom, Inc.  All Rights Reserved."
+
+;"former MACROS.ZIL stuff"
+
+<SETG C-ENABLED? 0>
+<SETG C-ENABLED 1>
+<SETG C-DISABLED 0>
+
+<DEFMAC TELL ("ARGS" A)
+       <FORM PROG ()
+             !<MAPF ,LIST
+                    <FUNCTION ("AUX" E P O)
+                         <COND (<EMPTY? .A> <MAPSTOP>)
+                               (<SET E <NTH .A 1>>
+                                <SET A <REST .A>>)>
+                         <COND (<TYPE? .E ATOM>
+                                <COND (<OR <=? <SET P <SPNAME .E>>
+                                               "CRLF">
+                                           <=? .P "CR">>
+                                       <MAPRET '<CRLF>>)
+                                      (<EMPTY? .A>
+                                       <ERROR INDICATOR-AT-END? .E>)
+                                      (ELSE
+                                       <SET O <NTH .A 1>>
+                                       <SET A <REST .A>>
+                                       <COND (<OR <=? <SET P <SPNAME .E>>
+                                                      "DESC">
+                                                  <=? .P "D">
+                                                  <=? .P "OBJ">
+                                                  <=? .P "O">>
+                                              <MAPRET <FORM PRINTD .O>>)
+                                             (<OR <=? .P "NUM">
+                                                  <=? .P "N">>
+                                              <MAPRET <FORM PRINTN .O>>)
+                                             (<OR <=? .P "CHAR">
+                                                  <=? .P "CHR">
+                                                  <=? .P "C">>
+                                              <MAPRET <FORM PRINTC .O>>)
+                                             (ELSE
+                                              <MAPRET
+                                                <FORM PRINT
+                                                      <FORM GETP .O .E>>>)>)>)
+                               (<TYPE? .E STRING ZSTRING>
+                                <MAPRET <FORM PRINTI .E>>)
+                               (<TYPE? .E FORM LVAL GVAL>
+                                <MAPRET <FORM PRINT .E>>)
+                               (ELSE <ERROR UNKNOWN-TYPE .E>)>>>>>
+
+<DEFMAC VERB? ("ARGS" ATMS)
+       <MULTIFROB PRSA .ATMS>>
+
+<DEFMAC PRSO? ("ARGS" ATMS)
+       <MULTIFROB PRSO .ATMS>>
+
+<DEFMAC PRSI? ("ARGS" ATMS)
+       <MULTIFROB PRSI .ATMS>>
+
+<DEFMAC ROOM? ("ARGS" ATMS)
+       <MULTIFROB HERE .ATMS>>
+
+<DEFINE MULTIFROB (X ATMS "AUX" (OO (OR)) (O .OO) (L ()) ATM) 
+       <REPEAT ()
+               <COND (<EMPTY? .ATMS>
+                      <RETURN!- <COND (<LENGTH? .OO 1> <ERROR .X>)
+                                      (<LENGTH? .OO 2> <NTH .OO 2>)
+                                      (ELSE <CHTYPE .OO FORM>)>>)>
+               <REPEAT ()
+                       <COND (<EMPTY? .ATMS> <RETURN!->)>
+                       <SET ATM <NTH .ATMS 1>>
+                       <SET L
+                            (<COND (<TYPE? .ATM ATOM>
+                                    <CHTYPE
+                                          <COND (<==? .X PRSA>
+                                                 <PARSE
+                                                   <STRING "V?"
+                                                           <SPNAME .ATM>>>)
+                                                (ELSE .ATM)> GVAL>)
+                                   (ELSE .ATM)>
+                             !.L)>
+                       <SET ATMS <REST .ATMS>>
+                       <COND (<==? <LENGTH .L> 3> <RETURN!->)>>
+               <SET O <REST <PUTREST .O (<FORM EQUAL? <CHTYPE .X GVAL> !.L>)>>>
+               <SET L ()>>>
+
+<DEFMAC BSET ('OBJ "ARGS" BITS)
+       <MULTIBITS FSET .OBJ .BITS>>
+
+<DEFMAC BCLEAR ('OBJ "ARGS" BITS)
+       <MULTIBITS FCLEAR .OBJ .BITS>>
+
+<DEFMAC BSET? ('OBJ "ARGS" BITS)
+       <MULTIBITS FSET? .OBJ .BITS>>
+
+<DEFINE MULTIBITS (X OBJ ATMS "AUX" (O ()) ATM) 
+       <REPEAT ()
+               <COND (<EMPTY? .ATMS>
+                      <RETURN!- <COND (<LENGTH? .O 1> <NTH .O 1>)
+                                      (<==? .X FSET?> <FORM OR !.O>)
+                                      (ELSE <FORM PROG () !.O>)>>)>
+               <SET ATM <NTH .ATMS 1>>
+               <SET ATMS <REST .ATMS>>
+               <SET O
+                    (<FORM .X
+                           .OBJ
+                           <COND (<TYPE? .ATM FORM> .ATM)
+                                 (ELSE <CHTYPE .ATM GVAL>)>>
+                     !.O)>>>
+
+<DEFMAC RFATAL ()
+       '<PROG () <PUSH 2> <RSTACK>>>
+
+<DEFMAC PROB ('BASE?)
+       <FORM NOT <FORM L? .BASE? '<RANDOM 100>>>>
+
+;<DEFMAC PROB ('BASE? "OPTIONAL" 'LOSER?)
+       <COND (<ASSIGNED? LOSER?> <FORM ZPROB .BASE?>)
+             (ELSE <FORM G? .BASE? '<RANDOM 100>>)>>
+
+;<ROUTINE ZPROB (BASE)
+         <G? .BASE <RANDOM 100>>>
+
+<ROUTINE PICK-ONE (FROB)
+        <GET .FROB <RANDOM <GET .FROB 0>>>>
+
+;<ROUTINE PICK-ONE (FROB
+                  "AUX" (L <GET .FROB 0>) (CNT <GET .FROB 1>) RND MSG RFROB)
+        <SET L <- .L 1>>
+        <SET FROB <REST .FROB 2>>
+        <SET RFROB <REST .FROB <* .CNT 2>>>
+        <SET RND <RANDOM <- .L .CNT>>>
+        <SET MSG <GET .RFROB .RND>>
+        <PUT .RFROB .RND <GET .RFROB 1>>
+        <PUT .RFROB 1 .MSG>
+        <SET CNT <+ .CNT 1>>
+        <COND (<==? .CNT .L> <SET CNT 0>)>
+        <PUT .FROB 0 .CNT>
+        .MSG>
+
+<DEFMAC ENABLE ('INT) <FORM PUT .INT ,C-ENABLED? 1>>
+
+<DEFMAC DISABLE ('INT) <FORM PUT .INT ,C-ENABLED? 0>>
+
+<DEFMAC OPENABLE? ('OBJ)
+       <FORM OR <FORM FSET? .OBJ ',DOORBIT>
+                <FORM FSET? .OBJ ',CONTBIT>>> 
+
+<DEFMAC ABS ('NUM)
+       <FORM COND (<FORM L? .NUM 0> <FORM - 0 .NUM>)
+                  (T .NUM)>>
+
+<ROUTINE FIXED-FONT-ON () ;"turns off proportional spacing for the Mac"
+        <PUT 0 8 <BOR <GET 0 8> 2>>>
+
+<ROUTINE FIXED-FONT-OFF () ;"turns it back on"
+        <PUT 0 8 <BAND <GET 0 8> -3>>>
+
+;"former MAIN.ZIL stuff"
+
+<GLOBAL PLAYER <>>
+
+<GLOBAL P-WON <>>
+
+<CONSTANT M-FATAL 2>
+<CONSTANT M-HANDLED 1>   
+<CONSTANT M-NOT-HANDLED <>>   
+<CONSTANT M-OBJECT <>>
+
+<CONSTANT M-BEG 1>  
+<CONSTANT M-END 6> 
+<CONSTANT M-ENTER 2>
+<CONSTANT M-LOOK 3> 
+<CONSTANT M-FLASH 4>
+
+<CONSTANT M-OBJDESC 5>
+
+<GLOBAL LAST-USED-PRSO <>>
+
+<ROUTINE GO () 
+        <PUTB ,P-LEXV 0 59>
+;"put interrupts on clock chain"
+        <ENABLE <QUEUE I-WAKE-UP 7>>
+        <ENABLE <QUEUE I-HELLHOUND -1>>         
+;"set up and go"
+        <SETG LIT T>
+        <SETG WINNER ,PROTAGONIST>
+        <SETG PLAYER ,WINNER>
+        <SETG HERE ,TWISTED-FOREST>
+        <MOVE ,WINNER ,HERE>
+        <THIS-IS-IT ,HELLHOUND>
+        <PUTB ,P-INBUF 0 60>
+        <TELL
+"You are in a strange location, but you cannot remember how you got here.
+Everything is hazy, as though viewed through a gauze...">
+        <CRLF> <CRLF>
+        <V-LOOK>
+        <I-HELLHOUND>
+        <MAIN-LOOP>
+        <AGAIN>>    
+
+<ROUTINE MAIN-LOOP ("AUX" ICNT OCNT NUM CNT OBJ TBL V PTBL OBJ1 TMP)
+   <REPEAT ()
+     <SETG LAST-USED-PRSO <>>
+     <SET CNT 0>
+     <SET OBJ <>>
+     <SET PTBL T>
+     <COND (<SETG P-WON <PARSER>>
+           <SET ICNT <GET ,P-PRSI ,P-MATCHLEN>>
+           <SET OCNT <GET ,P-PRSO ,P-MATCHLEN>>
+           <COND (<AND ,P-IT-OBJECT <ACCESSIBLE? ,P-IT-OBJECT>>
+                  <SET TMP <>>
+                  <REPEAT ()
+                   <COND (<G? <SET CNT <+ .CNT 1>> .ICNT>
+                          <RETURN>)
+                         (T
+                          <COND (<EQUAL? <GET ,P-PRSI .CNT> ,IT>
+                                 <PUT ,P-PRSI .CNT ,P-IT-OBJECT>
+                                 <SET TMP T>
+                                 <RETURN>)>)>>
+                  <COND (<NOT .TMP>
+                         <SET CNT 0>
+                         <REPEAT ()
+                          <COND (<G? <SET CNT <+ .CNT 1>> .OCNT>
+                                 <RETURN>)
+                                (T
+                                 <COND (<EQUAL? <GET ,P-PRSO .CNT> ,IT>
+                                        <PUT ,P-PRSO .CNT ,P-IT-OBJECT>
+                                        <RETURN>)>)>>)>
+                  <SET CNT 0>)>
+           <SET NUM <COND (<0? .OCNT>
+                           .OCNT)
+                          (<G? .OCNT 1>
+                           <SET TBL ,P-PRSO>
+                           <COND (<0? .ICNT>
+                                  <SET OBJ <>>)
+                                 (T
+                                  <SET OBJ <GET ,P-PRSI 1>>)>
+                           .OCNT)
+                          (<G? .ICNT 1>
+                           <SET PTBL <>>
+                           <SET TBL ,P-PRSI>
+                           <SET OBJ <GET ,P-PRSO 1>>
+                           .ICNT)
+                          (T
+                           1)>>
+           <COND (<AND <NOT .OBJ>
+                       <1? .ICNT>>
+                  <SET OBJ <GET ,P-PRSI 1>>)>
+           <COND (<==? ,PRSA ,V?WALK>
+                  <SET V <PERFORM ,PRSA ,PRSO>>)
+                 (<0? .NUM>
+                  <COND (<0? <BAND <GETB ,P-SYNTAX ,P-SBITS> ,P-SONUMS>>
+                         <SET V <PERFORM ,PRSA>>
+                         <SETG PRSO <>>)
+                        (<AND <NOT ,LIT>
+                              <NOT ,BLORTED>>
+                         <SETG QUOTE-FLAG <>>
+                         <SETG P-CONT <>>
+                         <TOO-DARK>)
+                        (<EQUAL? ,HERE ,CHAMBER-OF-LIVING-DEATH
+                                       ,HALL-OF-ETERNAL-PAIN>
+                         <SETG QUOTE-FLAG <>>
+                         <SETG P-CONT <>>
+                         <AGONY>)
+                        (T
+                         <TELL "There isn't anything to ">
+                         <SET TMP <GET ,P-ITBL ,P-VERBN>>
+                         <COND (<VERB? TELL>
+                                <TELL "talk to">)
+                               (<OR ,P-OFLAG ,P-MERGED>
+                                <PRINTB <GET .TMP 0>>)
+                               (T
+                                <WORD-PRINT <GETB .TMP 2>
+                                            <GETB .TMP 3>>)>
+                         <TELL "!" CR>
+                         <SET V <>>)>)
+                 (T
+                  <SETG P-NOT-HERE 0>
+                  <SETG P-MULT <>>
+                  <COND (<G? .NUM 1>
+                         <SETG P-MULT T>)>
+                  <SET TMP <>>
+                  <REPEAT ()
+                   <COND (<G? <SET CNT <+ .CNT 1>> .NUM>
+                          <COND (<G? ,P-NOT-HERE 0>
+                                 <TELL "The ">
+                                 <COND (<NOT <EQUAL? ,P-NOT-HERE .NUM>>
+                                        <TELL "other ">)>
+                                 <TELL "object">
+                                 <COND (<NOT <EQUAL? ,P-NOT-HERE 1>>
+                       &nb