]> github.com/historicalsource and other repositories - spellbreaker.git/commitdiff
Final Revision
authorhistoricalsource <historicalsoftware@textfiles.com>
Sun, 14 Apr 2019 04:27:34 +0000 (00:27 -0400)
committerhistoricalsource <historicalsoftware@textfiles.com>
Sun, 14 Apr 2019 04:27:34 +0000 (00:27 -0400)
28 files changed:
actions.zil [new file with mode: 0644]
c1.zil
c2.zil
c3.zil
c4.zil
cards.txt [new file with mode: 0644]
globals.zil
guild.zil
interrupts.zil
mage.hints [new file with mode: 0644]
magic.txt [new file with mode: 0644]
magic.zil
misc.zil
parser.zil
rooms.txt [new file with mode: 0644]
spells.txt [new file with mode: 0644]
syntax.zil
verbs.zil
z6.chart [new file with mode: 0644]
z6.compare [new file with mode: 0644]
z6.index [new file with mode: 0644]
z6.pre [new file with mode: 0644]
z6.pur [new file with mode: 0644]
z6.serial [new file with mode: 0644]
z6.synopsis [new file with mode: 0644]
z6.txt [new file with mode: 0644]
z6.zip
z6manual.txt [new file with mode: 0644]

diff --git a/actions.zil b/actions.zil
new file mode 100644 (file)
index 0000000..97001e5
--- /dev/null
@@ -0,0 +1,1354 @@
+"MAGIC for
+                               MAGE
+       (c) Copyright 1985 Infocom, Inc. All Rights Reserved."
+
+"---Summary of magic spells---
+
+    -Spell-    -English-
+
+ s  AIMFIZ     transport yourself to someone's location
+e   BLORB      STRONG-BOX-SPELL
+  6 BLORPLE    explore mystic connections
+  6 CASKLY     perfect
+e   CLEESH     NEWT-SPELL
+  6 ESPNIS     SLEEP-SPELL
+e   EXEX       HASTE-SPELL
+e   FILFRE     CREDITS-SPELL
+es  FROTZ      LIGHT-SPELL
+ s  FWEEP      turn caster into a bat
+ s  GASPAR     resurrection
+  6 GIRGOL     stop time
+es  GNUSTO     WRITE-MAGIC-SPELL
+ s  GOLMAC     travel temporally
+e   GONDAR     QUENCH-SPELL
+e   GUNCHO     BANISH-SPELL
+es  IZYUK      FLY-SPELL
+  6 JINDAK     detect magic
+e   KREBF      REPAIR-SPELL
+e   KULCAD     DISPEL-SPELL
+  6 LESOCH     gust of wind
+  6 LISKON     shrink
+ s  MALYON     bring life to inanimate objects
+ s  MEEF       cause plants to wilt
+e   MELBOR     PROTECTION-SPELL
+e   NITFOL     TALK-TO-ANIMALS-SPELL
+e   OZMOO      CHEAT-DEATH-SPELL
+ s  PULVER     cause liquids to dry up
+es  REZROV     OPEN-SPELL
+  6 SNAVIG     transform into another
+ s  SWANZO     exorcise an inhabiting presence
+  6 THROCK     cause plants to grow
+  6 TINSOT     freeze
+ s  VARDIK     shield a mind from an evil spirit
+e   VAXUM      CHARM-SPELL
+ s  VEZZA      view the future
+ s  YOMIN      mind probe
+ s  YONK       augment the power of certain spells
+e   ZIFMIA     SUMMON-SPELL
+
+    -Potion-   -English-
+
+ s  BERZIO     obviate need for food and drink
+ s  BLORT      see in the dark
+ s  FLAXO      exquisite torture
+ s  FOOBLE     increase coordination
+ s  VILSTU     obviate need for breathing
+"
+
+<OBJECT SPELL-BOOK
+       (IN PLAYER)
+       (SYNONYM BOOK NOTES)
+       (ADJECTIVE MY SPELL MARGIN)
+       (DESC "spell book")
+       (ACTION SPELL-BOOK-F)
+       (FLAGS TOUCHBIT TAKEBIT READBIT CONTBIT OPENBIT MAGICBIT)>
+
+<GLOBAL SEEN-BLORPLE? <>>
+
+<ROUTINE SPELL-BOOK-F ("AUX" F)
+        <COND (<VERB? EXAMINE>
+               <TELL
+"This is your well-used old " 'SPELL-BOOK ", first given to you by Belboz
+years ago after your original book was lost. ">
+               <COND (<FSET? ,PRSO ,RMUNGBIT>
+                      <TELL
+"He would be appalled by its current ruined condition. It's
+water-soaked, and the ink has run. It's useless.">)
+                     (ELSE
+                      <TELL "There are some spells
+written in the book, those few still working of the many you once knew.
+The rest have faded away.">
+                      <COND (<AND ,CLEESHED? <NOT ,SEEN-BLORPLE?>>
+                             <SEE-BLORPLE>
+                             <TELL
+" As you look at it closely, though, you realize that the book has
+changed subtly from its previous appearance. There is a new
+entry: " 'BLORPLE-SPELL " ("
+<GETP ,BLORPLE-SPELL ,P?TEXT> ").">)>)>
+               <CRLF>)
+              (<VERB? OPEN CLOSE>
+               <TELL
+"The " 'SPELL-BOOK " is always open to the right place, but it is also
+always closed. This eliminates tedious leafing and hunting for spells.
+Many lives have been saved by this magical innovation." CR>)
+              (<VERB? READ LOOK-INSIDE>
+               <COND (<FSET? ,PRSO ,RMUNGBIT>
+                      <TELL
+CTHE ,SPELL-BOOK " is totally unreadable. The ink has run, and the pages
+are soaked. What a mess!" CR>
+                      <RTRUE>)
+                     (<NOT ,LIT>
+                      <TELL
+"The magic writing of the spells casts enough light
+that you can read them." CR>)>
+               <TELL "My Spell Book|
+|
+">
+               <MAP-CONTENTS (F ,SPELL-BOOK)
+                             <TELL CTHE .F " (" <GETP .F ,P?TEXT> ")." CR>>
+               <COND (<AND ,CLEESHED? <NOT ,SEEN-BLORPLE?>>
+                      <SEE-BLORPLE>
+                      <TELL
+"|
+Oddly enough, you have never before seen or heard of the blorple spell
+which now graces (or defaces?) your book." CR>)>
+               <RTRUE>)
+              (<VERB? WRITE>
+               <TELL
+"When you are done, the " 'SPELL-BOOK " remains unmarred." CR>)>>
+
+<OBJECT BLORPLE-SPELL 
+       (IN CASTLE) ;"so MOBY-FIND can find it"
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC BLORPLE)
+       (DESC "blorple spell")
+       (TEXT "explore an object's mystic connections")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT LESOCH-SPELL 
+       (IN SPELL-BOOK)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC LESOCH)
+       (DESC "lesoch spell")
+       (TEXT "gust of wind")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT SNAVIG-SPELL 
+       (IN CASTLE) ;"so MOBY-FIND can find it"
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC SNAVIG)
+       (DESC "snavig spell")
+       (TEXT "shape change")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT GIRGOL-SCROLL 
+       (IN CASTLE) ;"so MOBY-FIND can find it"
+       (SYNONYM SCROLL)
+       (ADJECTIVE FLIMSY)
+       (DESC "flimsy scroll")
+       (ACTION SCROLL-F)
+       (FLAGS TAKEBIT TRYTAKEBIT READBIT
+              SCROLLBIT CONTBIT TRANSBIT)>
+
+<OBJECT GIRGOL-SPELL 
+       (IN GIRGOL-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC GIRGOL)
+       (DESC "girgol spell")
+       (TEXT "stop time")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT JINDAK-SPELL 
+       (IN SPELL-BOOK)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC JINDAK)
+       (DESC "jindak spell")
+       (TEXT "detect magic")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT ESPNIS-SCROLL 
+       (IN OGRE-BEDROOM)
+       (SYNONYM SCROLL)
+       (ADJECTIVE DUSTY)
+       (DESC "dusty scroll")
+       (ACTION SCROLL-F)
+       (FLAGS TAKEBIT TRYTAKEBIT READBIT
+              SCROLLBIT CONTBIT TRANSBIT)>
+
+<OBJECT ESPNIS-SPELL
+       (IN ESPNIS-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC ESPNIS)
+       (DESC "espnis spell")
+       (TEXT "sleep")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT TINSOT-SCROLL 
+       (IN GLACIER-ROOM)
+       (SYNONYM SCROLL)
+       (ADJECTIVE WHITE)
+       (DESC "white scroll")
+       (ACTION SCROLL-F)
+       (FLAGS TAKEBIT TRYTAKEBIT READBIT
+              SCROLLBIT CONTBIT TRANSBIT)>
+
+<OBJECT TINSOT-SPELL 
+       (IN TINSOT-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC TINSOT)
+       (DESC "tinsot spell")
+       (TEXT "freeze")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT THROCK-SCROLL 
+       (IN CLIFF-MIDDLE)
+       (SYNONYM SCROLL)
+       (ADJECTIVE DIRTY)
+       (DESC "dirty scroll")
+       (ACTION SCROLL-F)
+       (FLAGS TAKEBIT TRYTAKEBIT READBIT
+              SCROLLBIT CONTBIT TRANSBIT)>
+
+<OBJECT THROCK-SPELL 
+       (IN THROCK-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC THROCK)
+       (DESC "throck spell")
+       (TEXT "cause plants to grow")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT CASKLY-SCROLL 
+       (IN ROC-NEST)
+       (SYNONYM SCROLL)
+       (ADJECTIVE STAINED)
+       (DESC "stained scroll")
+       (ACTION SCROLL-F)
+       (FLAGS TAKEBIT TRYTAKEBIT READBIT
+              SCROLLBIT CONTBIT TRANSBIT)>
+
+<OBJECT CASKLY-SPELL 
+       (IN CASKLY-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC CASKLY)
+       (DESC "caskly spell")
+       (TEXT "cause perfection")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT LISKON-SCROLL 
+       (IN BOTTLE)
+       (SYNONYM SCROLL)
+       (ADJECTIVE DAMP)
+       (DESC "damp scroll")
+       (ACTION SCROLL-F)
+       (FLAGS NDESCBIT
+              TAKEBIT TRYTAKEBIT READBIT
+              SCROLLBIT CONTBIT TRANSBIT)>
+
+<OBJECT LISKON-SPELL
+       (IN LISKON-SCROLL)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC LISKON)
+       (DESC "liskon spell")
+       (TEXT "shrink a living thing")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+"OLD SPELLS"
+
+<OBJECT MALYON-SPELL 
+       (IN SPELL-BOOK)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC MALYON)
+       (DESC "malyon spell")
+       (TEXT "animate")
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (FLAGS NDESCBIT SPELLBIT)>
+
+<OBJECT GNUSTO-SPELL 
+       (IN SPELL-BOOK)
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE AABBCC 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 AABBCC 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 AABBCC 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 AABBCC YOMIN)
+       (DESC "yomin spell")
+       (TEXT "mind probe")
+       (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>
+               <RFALSE>)
+              ;(<AND <NOT <FIRST? ,PRSO>>
+                    <NOT <FIRST? ,PRSI>>>
+               <TELL "Bug #72" CR>)
+              (<VERB? GNUSTO COPY WRITE>
+               <COND (<AND <FSET? ,PRSO ,SCROLLBIT>
+                           <NOT <IN? ,PRSO ,WINNER>>>
+                      <MUST-HOLD-SCROLL>)
+                     (<SET SPELL <FIRST? ,PRSO>>
+                      <PERFORM ,PRSA .SPELL ,PRSI>
+                      <RTRUE>)>)
+              (<VERB? EXAMINE READ>
+               <READ-SCROLL>)>>
+
+<ROUTINE SCROLL-WET ()
+        <TELL
+"The scroll is wet, and the spell cannot be read." CR>>
+
+<ROUTINE READ-SCROLL ("OPTIONAL" (SPELL <>))
+        <COND (<FSET? ,PRSO ,RMUNGBIT>
+               <SCROLL-WET>
+               <RTRUE>)>
+        <COND (<NOT .SPELL> <SET SPELL <FIRST? ,PRSO>>)>
+        <TELL "The scroll">
+        <SPELL-READS .SPELL>>
+
+<ROUTINE MUST-HOLD-SCROLL ()
+        <TELL
+"You must be holding the spell scroll you wish to copy!" CR>>
+
+<ROUTINE SPELL-F ("AUX" MEM? (FORGET <>))
+        <COND (<AND <VERB? READ LEARN>
+                    <NOT <IN? ,PRSO ,SPELL-BOOK>>
+                    <FSET? <LOC ,PRSO> ,TOUCHBIT>
+                    <NOT <IN? <LOC ,PRSO> ,WINNER>>>
+               <TELL
+,YOU-CANT "do that without having the spell in your book." CR>
+               <RFATAL>)
+              (<AND <VERB? READ LEARN>
+                    <FSET? ,SPELL-BOOK ,RMUNGBIT>>
+               <PERFORM ,V?READ ,SPELL-BOOK>
+               <THIS-IS-IT ,PRSO>
+               <RFATAL>)
+              (<AND <LOC ,PRSO>
+                    <FSET? <LOC ,PRSO> ,RMUNGBIT>>
+               <SCROLL-WET>)
+              (<VERB? READ>
+               <TELL "The spell">
+               <SPELL-READS ,PRSO>)
+              (<VERB? LEARN>
+               <COND (<NOT <IN? ,PRSO ,SPELL-BOOK>>
+                      <COND (<HELD? ,PRSO>
+                             <TELL
+"You haven't written that spell into your book yet. Until you do, you
+can't memorize the spell." CR>)
+                            (T
+                             <V-LEARN>)>
+                      <RFATAL>)
+                     (<IN? ,PRSO ,DEAD-BOOK>
+                      <TELL
+"You can learn spells only from your own " 'SPELL-BOOK>
+                      <TELL ,PERIOD>
+                      <RFATAL>)                      
+                     (<EQUAL? ,PRSO
+                              ,GNUSTO-SPELL ,FROTZ-SPELL ,REZROV-SPELL>
+                      <TELL "You already know that spell by heart." CR>)
+                     (<NOT <IN? ,SPELL-BOOK ,WINNER>>
+                      <TELL
+,YOU-DONT-HAVE "your " 'SPELL-BOOK ". You can't memorize a spell
+without a " 'SPELL-BOOK ,PERIOD>
+                      <RFATAL>)
+                     (T
+                      <SET MEM? <GETP ,PRSO ,P?COUNT>>
+                      <COND (<NOT <HELD? ,MAGIC-CUBE>>
+                             <COND (<OR <EQUAL? ,SPELL-MAX 1>
+                                        <G? ,AWAKE 6>
+                                        <AND <G? ,AWAKE 0>
+                                             <PROB <* 5 ,AWAKE>>>>
+                                    <TELL
+,YOU-CANT "concentrate well enough to learn the spell." CR>
+                                    <RTRUE>)
+                                   (<EQUAL? .MEM? ,SPELL-MAX>
+                                    <TELL
+"You try, but you just can't memorize those complex syllables again.
+They slip out of your memory as soon as you cram them in." CR>
+                                    <RTRUE>)
+                                   (<NOT <G? ,SPELL-ROOM 0>>
+                                    <FORGET-SPELL ,PRSO>
+                                    <SETG SPELL-ROOM 1>
+                                    <SET FORGET T>)>)>
+                      <SETG SPELL-ROOM <- ,SPELL-ROOM 1>>
+                      <SET MEM? <+ .MEM? 1>>
+                      <PUTP ,PRSO ,P?COUNT .MEM?>
+                      <COND (<HELD? ,MAGIC-CUBE>
+                             <TELL "You easily">)
+                            (ELSE
+                             <TELL "Using your best study habits, you">)>
+                      <TELL " learn the " 'PRSO>
+                      <COND (<G? .MEM? 1>
+                             <TELL " yet another time">)>
+                      <TELL ,PERIOD>
+                      <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-CANT-SEE "that spell here!" CR>)
+              (<VERB? TAKE DROP THROW>
+               <TELL-YUKS>)>>
+
+<ROUTINE SPELL-READS (SPELL)
+        <TELL
+" reads \"" D .SPELL ": " <GETP .SPELL ,P?TEXT> ".\"">
+        <COND (<OR <EQUAL? .SPELL ,GIRGOL-SPELL>
+                   <AND <EQUAL? .SPELL ,SPELL-COPY>
+                        <EQUAL? <GETP .SPELL ,P?WALLS> ,GIRGOL-SPELL>>>
+               <TELL
+" The spell is long and complicated.">)>
+        <CRLF>>
+
+<ROUTINE FORGET-SPELL (SPL "AUX" F CNT TBL (NUM 0) (SP <>))
+        <SET TBL ,FORGET-TBL>
+        <MAP-CONTENTS (F ,SPELL-BOOK)
+                      <DO (CNT <GETP .F ,P?COUNT> 1 -1)
+                          <SET SP .F>
+                          <PUT .TBL 1 .F>
+                          <SET NUM <+ .NUM 1>>
+                          <SET TBL <REST .TBL 2>>>>
+        <COND (<AND <G? .NUM 0>
+                    <EQUAL? <GETP .SP ,P?COUNT> .NUM>>
+               <PUTP .SP ,P?COUNT <- .NUM 1>>
+               <RTRUE>)>
+        <PUT ,FORGET-TBL 0 .NUM>
+        <COND (<ZERO? .NUM> <RTRUE>)>
+        <SET SPL <RANDOM-ELEMENT ,FORGET-TBL>>
+        <PUTP .SPL ,P?COUNT <- <GETP .SPL ,P?COUNT> 1>>>
+
+<GLOBAL FORGET-TBL <LTABLE 0 0 0 0 0 0 0 0 0 0>>
+
+<ROUTINE FORGET-ALL ("AUX" F)
+        <SETG SPELL-ROOM ,SPELL-MAX>
+        <MAP-CONTENTS (F ,SPELL-BOOK)
+                      <PUTP .F ,P?COUNT 0>>>
+
+<ROUTINE WEAR-OFF-SPELLS ("OPTIONAL" (SLEEP? T))
+        <COND (,CHANGED?
+               <COND (.SLEEP? <I-SNAVIG>)
+                     (ELSE
+                      <SETG CHANGED? <>>
+                      <DEQUEUE I-SNAVIG>)>)> ;"not changed"
+        <COND (,SHRINK-FLAG
+               <COND (.SLEEP? <I-LISKON>)
+                     (ELSE
+                      <COND (<AND <HELD? ,SHRINK-FLAG>
+                                  <EQUAL? ,SHRINK-FLAG ,WEED>>
+                             <MOVE ,WEED ,HERE>)>
+                      <SETG SHRINK-FLAG <>>
+                      <SETG SMALL-FLAG <>>
+                      <DEQUEUE I-LISKON>)>)> ;"not shrunk"
+        <COND (,TIME-STOPPED?
+               <COND (.SLEEP? <I-GIRGOL>)
+                     (ELSE
+                      <SETG TIME-STOPPED? <>>
+                      <SETG ROCK-FLAG <>>
+                      <DEQUEUE I-GIRGOL>)>)> ;"not time-stopped"
+        <COND (,ESPNIS?
+               <COND (.SLEEP? <I-ESPNIS>)
+                     (ELSE
+                      <SETG ESPNIS? <>>
+                      <DEQUEUE I-ESPNIS>)>)> ;"not sleeped">
+
+<GLOBAL REAL-SPELL-MAX 4>
+<GLOBAL SPELL-MAX 4>  ;"max spells memorizable"
+<GLOBAL SPELL-ROOM 4> ;"number can memorize now"
+
+"subtitle magic-related verbs"
+
+<ROUTINE SPELL-VERB? ()
+        <VERB? GNUSTO FROTZ REZROV TINSOT YOMIN
+               MALYON LESOCH BLORPLE SNAVIG GIRGOL
+               JINDAK ESPNIS CASKLY LISKON THROCK>> 
+
+<ROUTINE PRE-CAST ("AUX" SPELL SCROLL)
+        <COND (,SPELL-CAST <RFALSE>)>
+        <SET SPELL
+             <COND (<VERB? GNUSTO> ,GNUSTO-SPELL)
+                   (<VERB? FROTZ> ,FROTZ-SPELL)
+                   (<VERB? REZROV> ,REZROV-SPELL)
+                   (<VERB? YOMIN> ,YOMIN-SPELL)
+                   (<VERB? LESOCH> ,LESOCH-SPELL)
+                   (<VERB? BLORPLE> ,BLORPLE-SPELL)
+                   (<VERB? SNAVIG> ,SNAVIG-SPELL)
+                   (<VERB? GIRGOL> ,GIRGOL-SPELL)
+                   (<VERB? JINDAK> ,JINDAK-SPELL)
+                   (<VERB? ESPNIS> ,ESPNIS-SPELL)
+                   (<VERB? MALYON> ,MALYON-SPELL)
+                   (<VERB? CASKLY> ,CASKLY-SPELL)
+                   (<VERB? LISKON> ,LISKON-SPELL)
+                   (<VERB? THROCK> ,THROCK-SPELL)
+                   (<VERB? TINSOT> ,TINSOT-SPELL)
+                   (<VERB? $XEROX> ,SPELL-COPY)>>
+        <COND (<AND <IN? .SPELL ,BLANK-SCROLL>
+                    <IN? <LOC ,SPELL-COPY> ,WINNER>
+                    <NOT <IN? ,BLANK-SCROLL ,WINNER>>>
+               <SET SPELL ,SPELL-COPY>)>
+        <COND (<EQUAL? ,CHANGED? ,GROUPER ,SNAKE ,GRUE>
+               <TELL
+"Your mouth cannot form the words of spells while you are changed into a "
+'CHANGED? ,PERIOD>
+               <RTRUE>)
+              (<EQUAL? ,HERE ,OCEAN-FLOOR>
+               <TELL
+"You can't cast a spell while underwater!" CR>
+               <RTRUE>)>
+        <SET SCROLL <LOC .SPELL>>
+        <COND (<OR <EQUAL? .SPELL ,PRSO>
+                   <AND <EQUAL? .SCROLL ,PRSO>
+                        <NOT <EQUAL? .SCROLL ,SPELL-BOOK>>>>
+               <TELL
+"As you must remember from Thaumaturgy 101, you cannot cast a spell upon
+itself, or upon the scroll it is written on." CR>
+               <RTRUE>)
+              (<AND .SCROLL
+                    <NOT <EQUAL? .SCROLL ,SPELL-BOOK>>
+                    <OR <FSET? .SCROLL ,SCROLLBIT>
+                        <EQUAL? .SCROLL ,DEAD-BOOK>>>
+               <COND (<FSET? .SCROLL ,RMUNGBIT>
+                      <TELL CTHE .SCROLL " is unreadable." CR>
+                      <RTRUE>)
+                     (<IN? .SCROLL ,WINNER>
+                      <REMOVE .SCROLL>
+                      <TELL
+"As you cast the spell, " THE .SCROLL " vanishes!" CR>
+                      <PUTP .SPELL ,P?COUNT 1>)
+                     (T
+                      <TELL
+CTHE .SPELL " is not memorized, and you aren't holding a scroll
+on which it is written." CR>
+                      <RTRUE>)>)>
+        <COND (<EQUAL? .SPELL ,SPELL-COPY>
+               <SETG PRSA <GETP ,SPELL-COPY ,P?EXITS>>)>
+        <COND (<AND <VERB? BLORPLE> <NOT <IN? ,PRSO ,WINNER>>>
+               <NOT-HOLDING ,PRSO>
+               <RTRUE>)>
+        <COND (<OR <NOT <ZERO? <GETP .SPELL ,P?COUNT>>>
+                   <EQUAL? .SPELL ,GNUSTO-SPELL ,REZROV-SPELL ,FROTZ-SPELL>>
+               <SETG SPELL-CAST .SPELL>
+               <COND (<EQUAL? ,HERE ,SCALES-ROOM>
+                      <COND (<AND <VERB? REZROV MALYON>
+                                  <EQUAL? ,PRSO ,IRON-DOOR ,VAULT-DOOR>>
+                             <SETG SPELLS-USED 2>)>
+                      <USE-SPELL>)>
+               <COND (<EQUAL? ,HERE ,PLAIN-ROOM>
+                      <PLAIN-SPELL-FAIL>)
+                     (<NOT <SPELL-PROB? .SPELL>>
+                      <TELL
+"The casting feels wrong, and sure enough, " <PICK-ONE ,FIZZLES> CR>
+                      <RTRUE>)
+                     (ELSE
+                      <RFALSE>)>)
+              (ELSE
+               <TELL
+,YOU-DONT-HAVE THE .SPELL " memorized!" CR>
+               <THIS-IS-IT .SPELL>
+               <RTRUE>)>>
+
+<GLOBAL USED-JINDAK? <>>
+
+<ROUTINE USE-SPELL ()
+        <COND (<VERB? JINDAK> <SETG USED-JINDAK? T>)>
+        <SETG SPELLS-USED <+ ,SPELLS-USED 1>>
+        <COND (<AND <G? ,SPELLS-USED 2>
+                    <ZERO? ,GUARDS-FLAG>
+                    <NOT <QUEUED? I-ALARM>>>
+               <QUEUE I-ALARM -1>
+               <QUEUE I-GUARDS 2>)>
+        <RFALSE>>
+
+<GLOBAL SPELL-CAST <>>
+
+<GLOBAL FIZZLES
+       <LTABLE 0
+"nothing happens."
+"a huge ball of green light appears, then dissipates."
+"your fingers grow numb."
+"you are momentarily blinded."
+"there is a distant rumble of thunder."
+"your whole body feels as if your funny bone has been struck.">>
+
+<ROUTINE SPELL-PROB? (SPELL? "AUX" (P 50) N1 N2)
+        <COND (<AND <GOT? ,MAGIC-CUBE>
+                    <NOT <EQUAL? .SPELL? ,GIRGOL-SPELL>>>
+               <RTRUE>)
+              (<AND <EQUAL? .SPELL? ,FROTZ-SPELL>
+                    <OR <EQUAL? ,HERE ,DARK-CAVE ,GRUE-CAVE ,LIGHT-POOL>
+                        <EQUAL? ,HERE ,PILLAR-ROOM>>>
+               <RFALSE>)
+              (<AND <EQUAL? .SPELL? ,BLORPLE-SPELL>
+                    <EQUAL? ,HERE ,CASTLE>
+                    <G? ,SHADOW-COUNT 8>>
+               <RFALSE>)>
+        <COND (<EQUAL? .SPELL? ,GNUSTO-SPELL>
+               <SET P 75>
+               <SET N1 ,CHANGE-CUBE> <SET N2 ,EARTH-CUBE>)
+              (<EQUAL? .SPELL? ,FROTZ-SPELL>
+               <SET P 75>
+               <SET N1 ,CHANGE-CUBE> <SET N2 ,LIGHT-CUBE>)
+              (<EQUAL? .SPELL? ,REZROV-SPELL>
+               <SET N1 ,CHANGE-CUBE> <SET N2 ,EARTH-CUBE>)
+              (<EQUAL? .SPELL? ,YOMIN-SPELL>
+               <SET N1 ,MIND-CUBE> <SET N2 ,LIGHT-CUBE>)
+              (<EQUAL? .SPELL? ,LESOCH-SPELL>
+               <SET N1 ,AIR-CUBE> <SET N2 ,FIRE-CUBE>)
+              (<EQUAL? .SPELL? ,BLORPLE-SPELL>
+               <RTRUE>)
+              (<EQUAL? .SPELL? ,SNAVIG-SPELL>
+               <SET N1 ,CHANGE-CUBE> <SET N2 ,DARK-CUBE>)
+              (<EQUAL? .SPELL? ,GIRGOL-SPELL>
+               <COND (<IN? ,GIRGOL-SPELL ,GIRGOL-SCROLL>
+                      <COND (<AND <EQUAL? .SPELL? ,GIRGOL-SPELL>
+                                  <EQUAL? ,HERE ,COUNCIL-CHAMBER>>
+                             <RFALSE>)
+                            (ELSE <RTRUE>)>)
+                     (<EQUAL? ,HERE ,CASTLE ,PAST-RUINS-ROOM ,PAST-CELL-EAST>
+                      <RTRUE>)
+                     (<EQUAL? ,HERE ,MAGIC-ROOM ,TIME-ROOM>
+                      <RTRUE>)
+                     (ELSE
+                      <RFALSE>)>)
+              (<EQUAL? .SPELL? ,JINDAK-SPELL>
+               <SET N1 ,LIGHT-CUBE> <SET N2 ,CONNECTIVITY-CUBE>)
+              (<EQUAL? .SPELL? ,ESPNIS-SPELL>
+               <SET N1 ,MIND-CUBE> <SET N2 ,DEATH-CUBE>)
+              (<EQUAL? .SPELL? ,MALYON-SPELL>
+               <SET N1 ,FIRE-CUBE> <SET N2 ,LIFE-CUBE>)
+              (<EQUAL? .SPELL? ,CASKLY-SPELL>
+               <SET N1 ,CHANGE-CUBE> <SET N2 ,CONNECTIVITY-CUBE>)
+              (<EQUAL? .SPELL? ,LISKON-SPELL>
+               <SET N1 ,CHANGE-CUBE> <SET N2 ,EARTH-CUBE>)
+              (<EQUAL? .SPELL? ,THROCK-SPELL>
+               <SET N1 ,LIFE-CUBE> <SET N2 ,WATER-CUBE>)
+              (<EQUAL? .SPELL? ,TINSOT-SPELL>
+               <SET N1 ,WATER-CUBE> <SET N2 ,FIRE-CUBE>)>
+        <SET P <+ .P <* <COUNT-CUBES> 5>>>
+        <COND (<GOT? .N1> <SET P <+ .P 20>>)>
+        <COND (<GOT? .N2> <SET P <+ .P 20>>)>
+        %<DEBUG-CODE
+           <COND (,ZDEBUG
+                  <TELL "[Prob=" N .P "]" CR>)>>
+        <COND (<OR <NOT <L? .P 100>> <PROB .P>>
+               <RTRUE>)
+              (ELSE
+               <RFALSE>)>>
+
+<ROUTINE V-CAST ("AUX" VRB)
+        <COND (<NOT <FSET? ,PRSO ,SPELLBIT>>
+               <TELL
+"You can't cast "> <A-PRSO>)
+              (T
+               <SET VRB <SPELL-TO-VERB>>
+               <COND (<AND <NOT ,PRSI>
+                           <NOT <EQUAL? .VRB
+                                        ,V?JINDAK ,V?GIRGOL ,V?LESOCH>>
+                           <NOT <EQUAL? .VRB ,V?$XEROX>>>
+                      <TELL
+"You must cast that on something." CR>)
+                     (T
+                      <PERFORM .VRB ,PRSI>)>
+               <RTRUE>)>>
+
+<ROUTINE V-$XEROX ("AUX" VRB)
+        <COND (<SET VRB <GETP ,SPELL-COPY ,P?EXITS>>
+               <PERFORM .VRB ,PRSO>)>
+        <RTRUE>>
+
+<ROUTINE SPELL-TO-VERB ()
+        <COND (<EQUAL? ,PRSO ,GNUSTO-SPELL> ,V?GNUSTO)
+              (<EQUAL? ,PRSO ,FROTZ-SPELL> ,V?FROTZ)
+              (<EQUAL? ,PRSO ,REZROV-SPELL> ,V?REZROV)
+              (<EQUAL? ,PRSO ,YOMIN-SPELL> ,V?YOMIN)
+              (<EQUAL? ,PRSO ,LESOCH-SPELL> ,V?LESOCH)
+              (<EQUAL? ,PRSO ,BLORPLE-SPELL> ,V?BLORPLE)
+              (<EQUAL? ,PRSO ,SNAVIG-SPELL> ,V?SNAVIG)
+              (<EQUAL? ,PRSO ,GIRGOL-SPELL> ,V?GIRGOL)
+              (<EQUAL? ,PRSO ,JINDAK-SPELL> ,V?JINDAK)
+              (<EQUAL? ,PRSO ,ESPNIS-SPELL> ,V?ESPNIS)
+              (<EQUAL? ,PRSO ,MALYON-SPELL> ,V?MALYON)
+              (<EQUAL? ,PRSO ,CASKLY-SPELL> ,V?CASKLY)
+              (<EQUAL? ,PRSO ,LISKON-SPELL> ,V?LISKON)
+              (<EQUAL? ,PRSO ,THROCK-SPELL> ,V?THROCK)
+              (<EQUAL? ,PRSO ,TINSOT-SPELL> ,V?TINSOT)
+              (<EQUAL? ,PRSO ,SPELL-COPY> ,V?$XEROX ;<GETP ,PRSO ,P?EXITS>)>>
+
+<GLOBAL ALL-SPELLS
+       <PLTABLE
+         GNUSTO-SPELL
+         FROTZ-SPELL
+         REZROV-SPELL
+         YOMIN-SPELL
+         LESOCH-SPELL
+         BLORPLE-SPELL
+         SNAVIG-SPELL
+         GIRGOL-SPELL
+         JINDAK-SPELL
+         MALYON-SPELL
+         ESPNIS-SPELL
+         CASKLY-SPELL
+         LISKON-SPELL
+         THROCK-SPELL
+         TINSOT-SPELL>>
+
+;"These spells no longer exist"
+         ;IZYUK-SPELL
+         ;AIMFIZ-SPELL
+         ;SWANZO-SPELL
+         ;GOLMAC-SPELL
+         ;VARDIK-SPELL
+         ;PULVER-SPELL
+         ;MEEF-SPELL
+         ;VEZZA-SPELL
+         ;GASPAR-SPELL
+         ;YONK-SPELL
+
+<ROUTINE V-SPELLS ("AUX" CNT S (ANY <>) (OS <>) TMP)
+        <TELL
+"The gnusto, rezrov, and frotz spells are yours forever. Other than that,
+you have ">
+        <DO (CNT <GET ,ALL-SPELLS 0> 1 -1)
+            <COND (<SET TMP <SPELL-TIMES <GET ,ALL-SPELLS .CNT>>>
+                   <COND (.OS
+                          <SPELL-PRINT .OS .ANY>
+                          <SET ANY T>)>
+                   <SET OS .TMP>)>>
+        <COND (.OS
+               <SPELL-PRINT .OS .ANY T>
+               <SET ANY T>)>
+        <COND (<NOT .ANY>
+               <TELL "no spells memorized.">)
+              (T
+               <TELL " committed to memory.">)>
+        <CRLF>
+        <RTRUE>>
+
+<ROUTINE SPELL-PRINT (S ANY "OPTIONAL" (PAND? <>) "AUX" X)
+        <COND (.ANY
+               <COND (.PAND?
+                      <TELL " and ">)
+                     (T
+                      <TELL ", ">)>)>
+        <TELL THE .S " ">
+        <SET X <- <GETP .S ,P?COUNT> 1>>
+        <COND (<G? .X 4>
+               <SET X 4>)> ;"prevents ,COUNTERS table overflow"
+        <TELL <GET ,COUNTERS .X>>
+        .S>
+
+<ROUTINE SPELL-TIMES (S)
+        <COND (<AND <G? <GETP .S ,P?COUNT> 0>
+                    <IN? .S ,SPELL-BOOK>>
+               .S)>>
+
+<GLOBAL COUNTERS       ;"should be as many entries as ,SPELL-MAX"
+       <PTABLE "once"
+              "twice"
+              "thrice"
+              "four times"
+              "many times">>
+
+<ROUTINE V-LEARN ()
+        <TELL ,YOU-DONT-HAVE "that spell, if indeed that is a spell." CR>>
+
+<ROUTINE SEE-BLORPLE ()
+        <COND (<NOT ,SEEN-BLORPLE?>
+               <SETG SEEN-BLORPLE? T>
+               <SETG SCORE <+ ,SCORE 15>>)>>
+
+<ROUTINE V-BLORPLE ("AUX" RM)
+        <SEE-BLORPLE>
+        <COND (<OR <GETP ,HERE ,P?CUBE> <EQUAL? ,HERE ,DULL-ROOM>>
+               <TELL ,NOTHING-HAPPENS>)
+              (ELSE
+               <COND (<AND <EQUAL? ,PRSO ,TIME-CUBE>
+                           <NOT ,USED-JINDAK?>>
+                      <SETG BLORPLE-OBJECT <>>
+                      <SET RM <>>)
+                     (ELSE
+                      <SETG BLORPLE-OBJECT ,PRSO>
+                      <SET RM <GETP ,PRSO ,P?CUBE>>)>
+               <COND (<NOT .RM>
+                      <SETG DULL-ROOM-RETURN ,HERE>
+                      <SET RM ,DULL-ROOM>)>
+               <TELL
+"Abruptly, your surroundings shift.">
+               <COND (<FSET? <LOC ,PLAYER> ,VEHBIT>
+                      <SETG SITTING? <>>
+                      <COND (<EQUAL? ,HERE ,MIDAIR>
+                             <MOVE <LOC ,PLAYER> ,LOST-ON-LAND>)>
+                      <TELL
+" The spell leaves " THE <LOC ,PLAYER> " behind.">)>
+               <MOVE ,PLAYER ,HERE>
+               <REMOVE ,PRSO>
+               <CRLF>
+               <CRLF>
+               <GOTO .RM>)>>
+
+<GLOBAL BLORPLE-OBJECT <>>
+
+<ROUTINE RECOVER-CUBE ()
+        <COND (<AND ,BLORPLE-OBJECT
+                    <NOT <EQUAL? ,HERE ,OHERE>>>
+               <TELL
+"As you leave, " THE ,BLORPLE-OBJECT " reappears in your hand." CR CR>
+               <MOVE ,BLORPLE-OBJECT ,WINNER>
+               <FCLEAR ,BLORPLE-OBJECT ,NDESCBIT>
+               <SETG BLORPLE-OBJECT <>>
+               <RTRUE>)>>
+
+<ROUTINE V-LESOCH ()
+        <COND (<AND <EQUAL? ,HERE ,BELWIT-SQUARE>
+                    <OR <EQUAL? ,PRSO ,CLOUD>
+                        <AND <NOT ,PRSO>
+                             <NOT <FSET? ,CLOUD ,INVISIBLE>>>>>
+               <FSET ,CLOUD ,INVISIBLE>
+               <DEQUEUE I-CLOUD-GONE>
+               <TELL
+"A small gust of wind begins to roil the cloud. The cloud is unimpressed.
+The wind builds, slowly but inexorably, to hurricane force. The cloud starts
+to unravel at the edges, and then gives up and dissipates">
+               <COND (<IN? ,EARTH-CUBE ,HERE>
+                      <THIS-IS-IT ,EARTH-CUBE>
+                      <FCLEAR ,EARTH-CUBE ,INVISIBLE>
+                      <TELL
+". Left behind on the ground is a small " ,WHITE-CUBE ".">)>
+               <CLEVER-CONTENTS ,HERE " Also revealed" ,EARTH-CUBE>
+               <CRLF>
+               <RTRUE>)
+              (ELSE
+               <TELL
+"Slowly, teasingly, a small puff of wind begins to blow. It quickly builds
+to gale force, then hurricane force, and just as you feel you are about to
+be swept away, it subsides." CR>)>>
+
+<GLOBAL CHANGED? <>>
+
+<ROUTINE V-SNAVIG ()
+        <COND (<NOT ,PRSO>
+               <TELL
+"You have to transform into something, and it has to be something nearby." CR>)
+              (<EQUAL? ,CHANGED? ,PRSO>
+               <TELL ,NOTHING-HAPPENS>)
+              (<AND <EQUAL? ,PRSO ,PSEUDO-OBJECT>
+                    <EQUAL? ,P-PNAM ,W?MOSS ,W?CORAL>>
+               <TELL "You're too large." CR>)
+              (ELSE
+               <YOU-CANT-X-PRSO "change into">)>>
+
+<GLOBAL TIME-STOPPED? <>>
+
+<ROUTINE TOO-PRECISE (STR)
+        <COND (<NOT <EQUAL? ,PRSO <> ,GLOBAL-ROOM>>
+               <TELL
+"This spell " .STR " in a large area, so directing it at ">
+               <COND (<HELD? ,PRSO>
+                      <TELL "an object
+you are holding won't work very well">)
+                     (ELSE
+                      <TELL "a specific
+object is unnecessarily precise">)>
+               <TELL ,PERIOD CR>)>>
+
+<ROUTINE V-GIRGOL ()
+        <COND (,TIME-STOPPED?
+               <TELL ,NOTHING-HAPPENS>)
+              (<EQUAL? ,HERE ,EMPORIUM>
+               <PERFORM ,V?ESPNIS ,MERCHANT>
+               <RTRUE>)
+              (ELSE
+               <TOO-PRECISE "stops time">
+               <SETG TIME-STOPPED? ,HERE>
+               <QUEUE I-GIRGOL 12>
+               <COND (<AND <EQUAL? ,HERE ,CLIFF-TOP>
+                           <QUEUED? I-AVALANCHE>
+                           <G? ,ROCK-SLIDE-COUNT 0>>
+                      <STOP-AVALANCHE>)
+                     (<EQUAL? ,HERE ,OGRE-CAVE>
+                      <TELL
+"The ogre, who was gesticulating wildly, freezes in place. He looks like
+a particularly bad statue of himself. Even his lice aren't moving." CR>)
+                     (<EQUAL? ,HERE ,SOUTH-SNAKE-ROOM ,NORTH-SNAKE-ROOM>
+                      <TELL
+"The snake freezes in place, as though a particularly good statue of itself
+had been put in its place. However, it still completely blocks the passage." CR>)
+                     (<EQUAL? ,HERE ,PAST-RUINS-ROOM>
+                      <DEQUEUE I-WATER-RISING>
+                      <TELL "The water stops rising." CR>)
+                     (<AND <EQUAL? ,HERE ,CASTLE>
+                           <IN? ,SHADOW ,CASTLE>>
+                      <COND (<L? ,SHADOW-COUNT 8>
+                             <SETG TIME-STOPPED? <>>
+                             <DEQUEUE I-GIRGOL>
+                             <TELL
+"The shadow turns and silences you with a word of power, cancelling
+the spell." CR>)
+                            (<EQUAL? ,SHADOW-COUNT 8>
+                             <QUEUE I-GIRGOL 3>
+                             <TELL
+"All around you freezes in place! The shadow is caught in
+a particularly evil posture. You can tell the spell won't hold for
+long!" CR>)
+                            (<EQUAL? ,SHADOW-COUNT 9>
+                             <QUEUE I-GIRGOL 3>
+                             <TELL
+"The shadow freezes in mid-leap! You can tell the spell won't hold for
+long in this magically charged atmosphere!" CR>)>)
+                     (ELSE
+                      <TELL
+,AT-FIRST "subtle changes in your
+surroundings. Nothing is moving. You can see dust motes hanging
+in midair, and a tiny gnat, its wings motionless, unknowingly defying
+gravity." CR>)>)>>
+
+<GLOBAL AT-FIRST "At first, nothing happens. Then you notice ">
+
+<ROUTINE V-JINDAK ("AUX" F (1ST? T) P1 P2)
+        <TOO-PRECISE "detects magic">
+        <COND (<EQUAL? ,HERE ,SCALES-ROOM>
+               <SET P1 <MEASURE ,PILE-1>>
+               <SET P2 <MEASURE ,PILE-2>>
+               <COND (<AND <G? .P1 0> <G? .P2 0>>
+                      <TELL
+"Both piles of cubes glow with a faint blue glow. ">
+                      <COND (<EQUAL? .P1 .P2>
+                             <TELL "Both piles seem to glow
+with identical brightness.">)
+                            (ELSE
+                             <TELL
+"However, the ">
+                             <COND (<G? .P1 .P2> <TELL 'PILE-1>)
+                                   (ELSE <TELL 'PILE-2>)>
+                             <TELL " is glowing more brightly.">)>)
+                     (<G? .P1 0>
+                      <TELL CTHE ,PILE-1 ,IS-GLOWING>)
+                     (<G? .P2 0>
+                      <TELL CTHE ,PILE-2 ,IS-GLOWING>)
+                     (<AND <FIRST? ,PILE-1> <FIRST? ,PILE-2>>
+                      <TELL "Neither pile is glowing at all.">)>
+               <CRLF>
+               <COND (<NOT <DETECT-MAGIC ,HERE>>
+                      <TELL "Nothing else is glowing." CR>)>)
+              (<NOT <DETECT-MAGIC ,HERE>>
+               <TELL
+"Nothing in the vicinity glows. Apparently there is no magic
+nearby." CR>)>>
+
+<ROUTINE DETECT-MAGIC (OBJ "OPTIONAL" (1ST? T) "AUX" F)
+        <MAP-CONTENTS (F .OBJ)
+                      (END <RETURN <NOT .1ST?>>)
+                      <COND (<NOT <EQUAL? .F ,PLAYER ,PILE-1 ,PILE-2>>
+                             <COND (<AND <VISIBLE? .F>
+                                         <MAGIC? .F>>
+                                    <SET 1ST? <>>
+                                    <TELL CTHE .F ,IS-GLOWING CR>)
+                                   (<AND <SEE-INSIDE? .F>
+                                         <FIRST? .F>>
+                                    <COND (<DETECT-MAGIC .F .1ST?>
+                                           <SET 1ST? <>>)>)>)>>>
+
+<ROUTINE MAGIC? (OBJ)
+        <COND (<FSET? .OBJ ,MAGICBIT> <RTRUE>)
+              (<FSET? .OBJ ,SCROLLBIT> <RTRUE>)
+              (<GETPT .OBJ ,P?NAME> <RTRUE>)>>
+
+<GLOBAL ESPNIS? <>>
+
+<ROUTINE V-ESPNIS ()
+        <COND (<EQUAL? ,PRSO ,ME ,WINNER>
+               <V-SLEEP T>)
+              (<TIME-FROZEN?>
+               <TELL ,NOTHING-HAPPENS>)
+              (<FSET? ,PRSO ,PERSON>
+               <QUEUE I-ESPNIS 20>
+               <COND (<EQUAL? ,ESPNIS? ,PRSO>
+                      <TELL
+CTHE ,PRSO " continues to sleep." CR>)
+                     (ELSE
+                      <COND (,ESPNIS? <I-ESPNIS>)>
+                      <SETG ESPNIS? ,PRSO>
+                      <TELL
+CTHE ,PRSO " falls asleep, yawning lazily." CR>)>)
+              (ELSE
+               <TELL
+"I suppose you expect to hear " THE ,PRSO " snoring?" CR>)>>
+
+<ROUTINE V-CASKLY ()
+        <TELL CTHE ,PRSO>
+        <COND (<AND <FSET? ,PRSO ,RMUNGBIT>
+                    <FSET? ,PRSO ,TAKEBIT>>
+               <FCLEAR ,PRSO ,RMUNGBIT>
+               <TELL
+" is returned to its original perfection." CR>)
+              (ELSE
+               <TELL
+" looks pretty perfect as is." CR>)>>
+
+<ROUTINE V-THROCK ()
+        <TELL 
+"I guess you have a black thumb. " ,NOTHING-HAPPENS>>
+
+<ROUTINE V-TINSOT ()
+        <SETG ICED-OBJECT ,PRSO>
+        <COND (<AND <EQUAL? ,HERE ,OUBLIETTE>
+                    <OR <EQUAL? ,PRSO ,INFLOW ,OUTFLOW ,OUBLIETTE-CHANNEL>
+                        <EQUAL? ,PRSO ,WATER>>>
+               <COND (<AND <G? ,WATER-FLAG 0>
+                           <NOT <EQUAL? ,PRSO ,WATER>>>
+                      <TELL ,YOU-CANT-SEE "that anymore" ,PERIOD>)
+                     (<EQUAL? ,PRSO ,INFLOW>
+                      <PARTIAL-BLOCKAGE ,INFLOW>)
+                     (<EQUAL? ,WATER-FLAG 0>
+                      <QUEUE I-TINSOT 30>
+                      <SETG ICED-OBJECT ,OUTFLOW>
+                      <SETG FREEZE-FLAG <+ ,FREEZE-FLAG 1>>
+                      <COND (<EQUAL? ,FREEZE-FLAG 1>
+                             <PARTIAL-BLOCKAGE ,OUTFLOW>)
+                            (<EQUAL? ,FREEZE-FLAG 2>
+                             <QUEUE I-OUBLIETTE-FILLS -1>
+                             <TELL
+"In a dazzling purple flash, more water freezes, forming a large icy cap over
+the outflow pipe in the channel. Water continues to pour in the inflow, and
+it spills over the edge of the channel and begins to fill the room." CR>)>)
+                     (<NOT <IN? ,ICEBERG ,HERE>>
+                      <MOVE ,ICEBERG ,HERE>
+                      <SETG ICED-OBJECT ,ICEBERG>
+                      <TELL
+"The purple flash freezes a small ice floe in the frigid water. It has a nice
+flat top." CR>)
+                     (ELSE
+                      <TELL ,NOTHING-HAPPENS>)>)
+              ;(<AND <EQUAL? ,HERE ,RUINS-ROOM>
+                    <EQUAL? ,PRSO ,WATER ,RUINS-OUTFLOW ,RUINS-CHANNEL>>
+               )
+              (<EQUAL? ,PRSO ,AIR>
+               <V-SQUEEZE>)
+              (<AND <EQUAL? ,PRSO ,BOTTLE ,WATER ,LOCAL-WATER>
+                    <IN? ,LOCAL-WATER ,BOTTLE>>
+               <REMOVE ,LOCAL-WATER>
+               <REMOVE ,BOTTLE>
+               <TELL
+"The water and bottle freeze and shatter into a million pieces!" CR>)
+              (ELSE
+               <TELL
+CTHE ,PRSO " is covered with a thin film of ice.">
+               <COND (<FSET? ,PRSO ,PERSON>
+                      <TELL
+" " CTHE ,PRSO " shakes and shivers, and the ice cracks and peels away.">)>
+               <CRLF>)>>
+
+<ROUTINE PARTIAL-BLOCKAGE (OBJ)
+        <TELL
+"There is a purple flash, and in a burst of snow and freezing spray, the
+water in the channel freezes. But the water flow is so hard that " THE .OBJ
+" is only partially blocked." CR>>
+
+<ROUTINE PRE-LISKON ()
+        <COND (<OR <EQUAL? ,SHRINK-FLAG ,PRSO>
+                   <AND <EQUAL? ,SHRINK-FLAG ,PLAYER>
+                        <EQUAL? ,PRSO ,ME>>>
+               <TELL ,NOTHING-HAPPENS>
+               <RTRUE>)
+              (,SHRINK-FLAG
+               <COND (<I-LISKON T>
+                      <CRLF>)>
+               <RFALSE>)>>
+
+<ROUTINE V-LISKON ()
+        <COND (<FSET? ,PRSO ,PERSON>
+               <COND (<PRE-LISKON> <RTRUE>)
+                     (ELSE
+                      <QUEUE I-LISKON 15>
+                      <COND (<AND ,PRSO <NOT <EQUAL? ,PRSO ,ME>>>
+                             <SETG SHRINK-FLAG ,PRSO>
+                             <TELL
+CTHE ,PRSO " shrinks to about a tenth of its former size.">
+                             <COND (<EQUAL? ,PRSO ,OGRE>
+                                    <TELL " He still looks mean.">)>
+                             <CRLF>)
+                            (ELSE
+                             <SETG SHRINK-FLAG ,PLAYER>
+                             <SETG SMALL-FLAG T>
+                             <TELL
+"You feel very funny, sort of squashed and pushed and squeezed. Your
+surroundings are wavering, then growing, then wavering again. The feeling
+vanishes, but your surroundings are ten times their former size... or is
+it that you are one-tenth your former size?" CR>)>)>)
+              (ELSE
+               <TELL
+"Nothing happens, which is unsurprising, as this spell works only on
+living things." CR>)>>
+
+<GLOBAL SHRINK-FLAG <>> ;"object shrunk"
+<GLOBAL SMALL-FLAG <>> ;"T if player shrunk"
+
+<ROUTINE V-GNUSTO ("AUX" SCROLL)
+        <COND (<NOT <IN? ,SPELL-BOOK ,WINNER>>
+               <TELL
+"The spell quests around in your hands, looking for your " 'SPELL-BOOK ", and
+not finding it, fades reluctantly." CR>)
+              (<NOT <FSET? ,PRSO ,SPELLBIT>>
+               <TELL
+,YOU-CANT "inscribe " A ,PRSO " in your " 'SPELL-BOOK "!" CR>)
+              (<IN? ,PRSO ,SPELL-BOOK>
+               <TELL
+,YOU-HAVE "that spell inscribed in your " 'SPELL-BOOK "!" CR>)
+              (<AND <LOC ,PRSO>
+                    <NOT <IN? <LOC ,PRSO> ,WINNER>>>
+               <MUST-HOLD-SCROLL>)
+              (<FSET? ,PRSO ,RMUNGBIT>
+               <TELL "The spell is unreadable." CR>)
+              (T
+               <SET SCROLL <LOC ,PRSO>>
+               <COND (<FSET? .SCROLL ,RMUNGBIT>
+                      <SCROLL-WET>)
+                     (<AND <FSET? .SCROLL ,SCROLLBIT>
+                           <HELD? .SCROLL>> 
+                      <TELL "Your " 'SPELL-BOOK " begins to glow softly. ">
+                      <COND (<EQUAL? ,PRSO ,GIRGOL-SPELL>
+                             <TELL "In a spectacular effort of magic,
+the powers of the gnusto spell attempt to copy the " 'PRSO " into your
+book, but the spell is too long, too complicated, and too powerful. The
+glow fades, but fortunately " THE .SCROLL " remains intact." CR>
+                             <RTRUE>)
+                            (T
+                             <REMOVE .SCROLL>
+                             <MOVE ,PRSO ,SPELL-BOOK>
+                             <PUTP ,PRSO ,P?COUNT 0>
+                             <TELL "Slowly, ornately, the words of the "
+'PRSO " are inscribed, glowing even more brightly than
+the book itself. The book's brightness fades, but the spell remains!">
+                             <COND (<EQUAL? .SCROLL ,DEAD-BOOK>
+                                    <TELL
+" The old book in which it was written crumbles to dust">)
+                                   (ELSE
+                                    <TELL
+" However, the scroll on which it was written vanishes">)>
+                             <TELL " as the last word is copied." CR>)>
+                      T)
+                     (T
+                      <TELL
+"You must have the object from which you are copying in your hands before
+the gnusto spell will work on it." CR>)>)>>
+
+<ROUTINE V-FROTZ ("AUX" OLIT) ;"light"
+        <SET OLIT ,LIT>
+        <COND (<FSET? ,PRSO ,ONBIT>
+               <TELL
+"Have you forgotten that you already frotzed " THE ,PRSO "?" CR>)
+              (<OR <FSET? ,PRSO ,TAKEBIT>
+                   <FSET? ,PRSO ,PERSON>>
+               <FSET ,PRSO ,ONBIT>
+               <FSET ,PRSO ,TOUCHBIT>
+               <TELL "There is an almost blinding flash of light as ">
+               <COND (<EQUAL? ,PRSO ,ME>
+                      <FSET ,WINNER ,ONBIT>
+                      <TELL "you begin">)
+                     (ELSE
+                      <TELL THE ,PRSO " begins">)>
+               <TELL
+" to glow! It slowly fades to a less painful level, but ">
+               <COND (<EQUAL? ,PRSO ,ME>
+                      <TELL "you are">)
+                     (ELSE <TELL THE ,PRSO " is">)>
+               <TELL
+" now a serviceable light source.">
+               <CRLF>
+               <SETG LIT <LIT? ,HERE>>
+               <COND (<AND <NOT .OLIT> ,LIT>
+                      <CRLF>
+                      <V-LOOK>)>
+               <RTRUE>)
+              (T
+               <V-NO-OP>)>>
+
+<ROUTINE V-MALYON ()
+        <COND (<EQUAL? ,TIME-STOPPED? ,HERE>
+               <TELL ,NOTHING-HAPPENS>)
+              (<FSET? ,PRSO ,PERSON>
+               <TELL
+"Wow! " ,IT-LOOKS-LIKE THE ,PRSO " is now alive! What a magician you are!" CR>)
+              (<FSET? ,PRSO ,TAKEBIT>
+               <TELL
+"As you complete the spell, " THE ,PRSO " comes alive! It blinks, dances a
+little jig, and a moment later returns to normal." CR>)
+              (T
+               <V-NO-OP>)>>
+
+<ROUTINE V-REZROV () ;"open"
+        <COND (<FSET? ,PRSO ,PERSON>
+               <TELL
+"It might be a boon to surgeons if it worked, but it doesn't." CR>)
+              (<AND <FSET? ,PRSO ,VEHBIT>
+                    <NOT <EQUAL? ,PRSO ,ZIPPER>>>
+               <TELL
+"It doesn't need opening." CR>)
+              (<OR <FSET? ,PRSO ,CONTBIT>
+                   <FSET? ,PRSO ,DOORBIT>>
+               <COND (<FSET? ,PRSO ,OPENBIT>
+                      <ALREADY-OPEN>)
+                     (<EQUAL? ,TIME-STOPPED? ,HERE>
+                      <TELL ,NOTHING-HAPPENS>)
+                     (<NOT <FSET? ,PRSO ,SCROLLBIT>>
+                      <TELL "Silently, ">
+                      <TELL THE ,PRSO " swings open">
+                      <COND (<FIRST? ,PRSO>
+                             <TELL ", revealing ">
+                             <PRINT-CONTENTS ,PRSO>)>
+                      <COND (<NOT <EQUAL? ,PRSO ,IRON-DOOR>>
+                             <TELL
+". Like swatting a fly with a sledge hammer, if you ask me">)>
+                      <TELL ,PERIOD>
+                      <FSET ,PRSO ,OPENBIT>)
+                     (T
+                      <V-NO-OP>)>)
+              (T
+               <V-NO-OP>)>>
+
+<ROUTINE V-NO-OP () ;"exorcise"
+        <TELL
+"Although you complete the spell, nothing has happened." CR>>
+
+<ROUTINE V-YOMIN ()
+        <TELL "I'm afraid ">
+        <TELL THE ,PRSO " doesn't have much of a mind for you to read." CR>>
+
+<OBJECT SPELL-COPY 
+       (SYNONYM SPELLS SPELL)
+       (ADJECTIVE DUPLICATE ;"PLACE HOLDER" ORIGINAL)
+       (DESC "original")
+       (TEXT 0)
+       (COUNT 0)
+       (ACTION SPELL-F)
+       (SIZE 1)
+       (EXITS 0) ;"will hold verb of spell this is a copy of"
+       (WALLS 0) ;"will hold spell this is a copy of"
+       (FLAGS NDESCBIT SPELLBIT AN)>
+
+<OBJECT BLANK-SCROLL 
+       (IN PAST-CABINET)
+       (SYNONYM SCROLL)
+       (ADJECTIVE NEW VELLUM BLANK)
+       (DESC "vellum scroll")
+       (ACTION BLANK-SCROLL-F)
+       (FLAGS TAKEBIT TRYTAKEBIT READBIT
+              SCROLLBIT CONTBIT TRANSBIT)>
+
+<ROUTINE BLANK-SCROLL-F ("AUX" OT DT)
+        <COND (<VERB? COPY>
+               <COND (<NOT <IN? ,BURIN ,WINNER>>
+                      <NO-BURIN>)
+                     (<NOT <EQUAL? ,PRSI ,BLANK-SCROLL>>
+                      <RFALSE>)
+                     (<FSET? ,PRSI ,RMUNGBIT>
+                      <TELL CTHE ,PRSI " is too wet." CR>)
+                     (<FIRST? ,PRSI>
+                      <ALREADY-USED>)
+                     (<NOT <FSET? ,PRSO ,SPELLBIT>>
+                      <RFALSE>)
+                     (<EQUAL? <LOC ,PRSO> ,SPELL-BOOK ,DEAD-BOOK>
+                      <TELL
+"Spell books are copy-protected to prevent spell thieves from making
+spell scrolls from another mage's spell book." CR>)
+                     (<AND <EQUAL? ,PRSO ,GIRGOL-SPELL>
+                           <NOT <HELD? ,MAGIC-CUBE>>>
+                      <TELL
+"You try hard to copy the obscure runes and ideographs of the spell, but
+your mind just can't comprehend them, and your fingers just can't
+follow the curves and strokes." CR>)
+                     (ELSE
+                      <SET DT <GETPT ,PRSO ,P?ADJECTIVE>>
+                      <SET OT <GETPT ,SPELL-COPY ,P?ADJECTIVE>>
+                      <PUTB .DT 0 <GETB .OT 0>>
+                      <PUTB .OT 0 <GETB .DT 1>>
+                      <PUTP ,SPELL-COPY
+                            ,P?TEXT
+                            <GETP ,PRSO ,P?TEXT>>
+                      <MOVE ,SPELL-COPY <LOC ,PRSO>>
+                      <FSET ,PRSO ,RWATERBIT>
+                      <MOVE ,PRSO ,PRSI>
+                      <PUTP ,SPELL-COPY ,P?WALLS ,PRSO>
+                      <PUTP ,SPELL-COPY ,P?EXITS <SPELL-TO-VERB>>
+                      <TELL
+                       "Copied." CR>)>)
+              (<NOT <FIRST? ,PRSO>>
+               <COND (<VERB? EXAMINE>
+                      <TELL
+,IT-LOOKS-LIKE "a blank piece of vellum scroll paper." CR>)
+                     (<VERB? READ>
+                      <TELL "This scroll is blank." CR>)
+                     (<AND <VERB? WRITE>
+                           <EQUAL? ,PRSO ,QWORD>>
+                      <TELL
+"You should write spells, not random words, on spell paper." CR>)
+                     (<AND <VERB? WRITE>
+                           <NOT <FSET? ,PRSO ,SPELLBIT>>>
+                      <TELL
+"That's not a spell! You'll waste good spell paper!" CR>)>)
+              (ELSE <SCROLL-F>)>>
diff --git a/c1.zil b/c1.zil
index c9def433079fa052d52717cf9d6f155389d3016c..30d5ef3b051a6e5a552efe5f7352f969f06b4ddd 100644 (file)
--- a/c1.zil
+++ b/c1.zil
@@ -40,7 +40,7 @@ spell scrolls." CR>)
                <MAGIC-DOOR-EXIT>)
               (ELSE ,DULL-ROOM-RETURN)>>
 
-<GLOBAL DULL-ROOM-RETURN <>>
+<GLOBAL DULL-ROOM-RETURN:OBJECT <>>
 
 "EARTH"
 
@@ -646,7 +646,7 @@ see a fat, pointed tongue.">
 "There's no hinge there; it's not a door!" CR>)>)>>
 
 <ROUTINE WONT-FIT ()
-        <TELL "It won't fit." CR>>
+        <TELL "Your hand won't fit in." CR>>
 
 <ROUTINE MOUTH-CONTENTS ("AUX" STR)
         <SET STR " Sitting on the tongue">
@@ -739,7 +739,7 @@ ruin." CR>)>)>>
 <OBJECT ZIPPER
        (IN RUINS-ROOM)
        (DESC "zipper")
-       (SYNONYM ZIPPER HOLE POCKET POUCH)
+       (SYNONYM ZIPPER AABBCC ;"HOLE" POCKET POUCH)
        (ADJECTIVE SILVER DIMLY LIT)
        (ACTION ZIPPER-F)
        (CONTFCN ZIPPER-F)
@@ -769,9 +769,8 @@ ruin." CR>)>)>>
                       <MAKE-OUT>)>)
               (<EQUAL? .RARG ,M-BEG>
                <COND (<AND <NOT-IN-VEHICLE?>
-                           <OR <VERB? TAKE>
-                               <NOT <FSET? ,ZIPPER ,OPENBIT>>>>
-                      <TELL "That's outside." CR>)
+                           <NOT <VERB? FIND WHAT WHERE WHO>>>
+                      <TELL "That's not in here." CR>)
                      (<AND <VERB? LOOK-INSIDE> <EQUAL? ,PRSO ,ZIPPER>>
                       <PERFORM ,V?LOOK>
                       <RTRUE>)
@@ -788,12 +787,14 @@ ruin." CR>)>)>>
                      (<AND <VERB? OPEN REZROV>
                            <EQUAL? ,PRSO ,ZIPPER>
                            <NOT <FSET? ,ZIPPER ,OPENBIT>>>
+                      <PUT <GETPT ,ZIPPER ,P?SYNONYM> 1 ,W?HOLE>
                       <FSET ,ZIPPER ,OPENBIT>
-                      <TELL
-"Opening the zipper reveals the outside world." CR>)
+                      <TELL "Opened. ">
+                      <CANT-SEE-OUTSIDE>)
                      (<AND <VERB? CLOSE>
                            <EQUAL? ,PRSO ,ZIPPER>
                            <FSET? ,ZIPPER ,OPENBIT>>
+                      <PUT <GETPT ,ZIPPER ,P?SYNONYM> 1 ,W?ZIPPER>
                       <FCLEAR ,ZIPPER ,OPENBIT>
                       <TELL
 ,YOU-ARE-NOW "in a private little world of your own." CR>)
@@ -803,11 +804,17 @@ ruin." CR>)>)>>
                      (<OR <VERB? DISEMBARK>
                           <AND <VERB? DROP> <EQUAL? ,PRSO ,ZIPPER>>>
                       <COND (<FSET? ,ZIPPER ,OPENBIT>
-                             <SETG LIT <LIT? ,HERE>>
-                             <MOVE ,PLAYER <LOC ,ZIPPER>>
-                             <MOVE ,ZIPPER ,PLAYER>
-                             <TELL
-"You get out of the hole." CR>)
+                             <COND (<NOT <LOC ,ZIPPER>>
+                                    <EMERGE-AND-DROWN>)
+                                   (ELSE
+                                    <SETG LIT <LIT? ,HERE>>
+                                    <MOVE ,PLAYER <LOC ,ZIPPER>>
+                                    <MOVE ,ZIPPER ,PLAYER>
+                                    <TELL
+"You get out of the hole." CR>
+                                    <COND (,OGRE-MURDEROUS?
+                                           <I-OGRE-KILLS-YOU>)>
+                                    <RTRUE>)>)
                             (ELSE
                              <TELL
 ,YOU-HAVE-TO " open the " 'ZIPPER " first." CR>)>)>)
@@ -819,6 +826,7 @@ ruin." CR>)>)>>
                       <TELL-OPEN-CLOSED ,ZIPPER>)
                      (<AND <VERB? OPEN REZROV>
                            <NOT <FSET? ,ZIPPER ,OPENBIT>>>
+                      <PUT <GETPT ,ZIPPER ,P?SYNONYM> 1 ,W?HOLE>
                       <FSET ,ZIPPER ,OPENBIT>
                       <COND (<NOT ,LIT> <SETG LIT <LIT? ,HERE>>)>
                       <TELL
@@ -831,6 +839,7 @@ ruin." CR>)>)>>
 the area.">)>
                       <CRLF>)
                      (<AND <VERB? CLOSE> <FSET? ,ZIPPER ,OPENBIT>>
+                      <PUT <GETPT ,ZIPPER ,P?SYNONYM> 1 ,W?ZIPPER>
                       <FCLEAR ,ZIPPER ,OPENBIT>
                       <SETG LIT <LIT? ,HERE>>
                       <TELL
@@ -869,7 +878,7 @@ the area.">)>
 though something was thrust into your hand, there's something there. Oops,
 it slipped away again." CR>)>)
                      (<VERB? BOARD>
-                      <COND (<NOT <HELD? ,ZIPPER>>
+                      <COND (<NOT <IN? ,ZIPPER ,PLAYER>>
                              <DONT-HAVE-THAT>)
                             (<FSET? ,ZIPPER ,OPENBIT>
                              <COND (<OR <EQUAL? ,HERE
@@ -879,9 +888,10 @@ it slipped away again." CR>)>)
                                                 ,IN-PIPE-2>
                                         <EQUAL? ,HERE ,IN-SEWER ,RUINED-PIPE
                                                 ,PAST-CABINET>
-                                        <EQUAL? ,HERE ,CABINET>>
-                                    <TELL
-"An impossible maneuver under the circumstances." CR>
+                                        <EQUAL? ,HERE ,CABINET>
+                                        <AND <EQUAL? ,HERE ,OUBLIETTE>
+                                             <G? ,WATER-FLAG 0>>>
+                                    <IMPOSSIBLE-MANEUVER>
                                     <RTRUE>)>
                              <COND (<NOT ,ZIPPER-SCROLL?>
                                     <SETG ZIPPER-SCROLL? T>
@@ -1366,6 +1376,8 @@ hermit looks glum." CR>>
 "\"I like avalanches. They keep people away. Usually.\"" CR>)
               (<EQUAL? .OBJ ,ZORKMID>
                <MATERIALISM>)
+              (<EQUAL? .OBJ ,FISH ,BREAD>
+               <TELL "He perks up at the mention of food." CR>)
               (<EQUAL? .OBJ ,LIFE-CUBE ,HUT ,HERMIT>
                <TELL
 "\"I've been living up here for many years. Wanted to get
@@ -1423,7 +1435,7 @@ of a rock not five minutes' walk from here. It was perfect.\"" CR>)>>
                              <ROCKS-TUMBLING>)
                             (ELSE
                              <TELL ,ROCKS-PRECARIOUS ,PERIOD>)>)>)
-              (<VERB? CLIMB-FOO CLIMB-UP CLIMB-ON>
+              (<VERB? CLIMB-FOO CLIMB-UP CLIMB-ON CLIMB-OVER>
                <DO-WALK ,P?UP>)
               (<VERB? RUB MOVE PUSH LESOCH KICK MALYON>
                <COND (<EQUAL? ,HERE ,VOLCANO-BASE
@@ -1539,7 +1551,7 @@ trail heads west." CR>)>>
       (EAST TO CLIFF-BOTTOM)
       (IN TO OGRE-CAVE)
       (NORTH TO OGRE-CAVE)
-      (UP "There's no path that way.")
+      (UP "There's no way up here.")
       (ACTION CAVE-ENTRANCE-F)
       (FLAGS RLANDBIT OUTSIDE ONBIT)
       (GLOBAL GLOBAL-CLIFF GLOBAL-CAVE GLOBAL-ROCKS)
@@ -1664,6 +1676,9 @@ credit." CR>>
 "This small but cozy hole is the ogre's lair. Moldy, filthy furs piled
 in one corner make a crude bed. There is a rocky crawl up to the main
 part of the cave." CR>)
+              (<EQUAL? .RARG ,M-ENTER>
+               <COND (<EQUAL? ,OHERE ,DULL-ROOM>
+                      <I-OGRE-KILLS-YOU T>)>)
               (<EQUAL? .RARG ,M-BEG>
                <COND (<AND <VERB? LISTEN> <NOT ,PRSO>>
                       <OGRE-NOISES>)
@@ -1686,6 +1701,7 @@ part of the cave." CR>)
         <SET L <LOC ,MAGIC-BOX>>
         <COND (<AND .L
                     <IN? .L ,ROOMS>
+                    <NOT <EQUAL? .L ,EMPORIUM>>
                     <NOT <GETP .L ,P?CUBE>>
                     <EQUAL? <GETP ,HERE ,P?CUBE> ,MAGIC-BOX-CUBE>>
                <COND (<EQUAL? .L ,CASTLE>
@@ -1818,7 +1834,7 @@ bear.">
                              <TELL
 " He is currently six inches of concentrated ugliness.">)>
                       <CRLF>)
-                     (<AND <VERB? GIVE WAVE-AT> <EQUAL? ,PRSI ,OGRE>>
+                     (<AND <VERB? GIVE SHOW WAVE-AT> <EQUAL? ,PRSI ,OGRE>>
                       <GIVE-TO-OGRE>)
                      (<VERB? LISTEN>
                       <TELL CTHE ,OGRE " sounds ">
diff --git a/c2.zil b/c2.zil
index c3dec034ba6bdc184da2e2a13e3b3099f1bb65c6..fdb60cf33bc9ea1987b3dc97f1678571b7424808 100644 (file)
--- a/c2.zil
+++ b/c2.zil
@@ -169,16 +169,19 @@ to reach the bottom." CR>>
       (FLAGS RWATERBIT ONBIT)
       (GLOBAL WATER)>
 
+<ROUTINE EMERGE-AND-DROWN ()
+        <COND (<NOT <EQUAL? ,CHANGED? ,GROUPER>>
+               <JIGS-UP
+"You have reemerged beneath the water. There is no air here.
+You drown.">)>>
+
 <ROUTINE OCEAN-FLOOR-F (RARG)
         <COND (<EQUAL? .RARG ,M-LOOK>
                <TELL
 "You are deep beneath the waves, near a small pile of rocks and broken
 coral that make up the nest of a grouper." CR>)
               (<EQUAL? .RARG ,M-ENTER>
-               <COND (<NOT <EQUAL? ,CHANGED? ,GROUPER>>
-                      <JIGS-UP
-"You have reemerged beneath the ocean. There is no air here.
-You drown.">)>)
+               <EMERGE-AND-DROWN>)
               (<EQUAL? .RARG ,M-BEG>
                <COND (<VERB? WALK SWIM>
                       <COND (<EQUAL? ,CHANGED? ,GROUPER>
@@ -207,7 +210,7 @@ surface." CR CR>
                      (<EQUAL? ,CHANGED? ,GROUPER>
                       <FUN-IN-OCEAN>)>)>>
 
-<GLOBAL ATE-AS-GROUPER? <>>
+<GLOBAL ATE-AS-GROUPER?:FLAG <>>
 
 <OBJECT GROUPER-NEST
        (IN OCEAN-FLOOR)
@@ -346,9 +349,9 @@ a few moments, its curiosity unsated." CR>)>>
       (FLAGS RLANDBIT)
       (GLOBAL TRAP-DOOR WATER)>
 
-<GLOBAL WATER-FLAG 0> ;"how full is oubliette?"
-<GLOBAL FREEZE-FLAG 0> ;"how much ice is there?"
-<GLOBAL FREEZE-COUNT 0> ;"how near death from hypothermia?"
+<GLOBAL WATER-FLAG:NUMBER 0> ;"how full is oubliette?"
+<GLOBAL FREEZE-FLAG:NUMBER 0> ;"how much ice is there?"
+<GLOBAL FREEZE-COUNT:NUMBER 0> ;"how near death from hypothermia?"
 
 <ROUTINE OUBLIETTE-DOWN-EXIT ()
         <COND (,SMALL-FLAG 
@@ -517,7 +520,7 @@ hypothermia.">>
                      (<VERB? RUB>
                       <TELL "It's cold." CR>)>)>>
 
-<GLOBAL WATER-HEIGHTS
+<GLOBAL WATER-HEIGHTS:TABLE
        <PLTABLE "one-quarter" "half" "three-quarters" "completely">>
 
 <OBJECT INFLOW
@@ -735,12 +738,12 @@ and even as a ruin, its essence is still perfect." CR>)>>
       (THINGS <PSEUDO (MOSSY SLIME MOSS-PSEUDO)
                      (<> MOSS MOSS-PSEUDO)>)>
 
-<GLOBAL LONG-PIPE-DESC
+<GLOBAL LONG-PIPE-DESC:STRING
 "You are inside a small ceramic pipe nearly filled with fast-flowing cold
 water. The walls of the pipe are slippery and overgrown with mossy slime
 wherever an irregularity shields the growth from the force of the water. ">
 
-<GLOBAL LONG-PIPE-DESC-2
+<GLOBAL LONG-PIPE-DESC-2:STRING
 "Going east (against the current) would be nearly impossible. Going west
 is almost unavoidable.">
 
@@ -851,7 +854,7 @@ confused, you are dashed against the rocks at the bottom of the cistern.">)>>
       (EAST TO CELL-HALL-EAST)
       (ACTION PRISON-F)
       (FLAGS RLANDBIT)
-      (GLOBAL TRAP-DOOR STAIRS EAST-WALL)
+      (GLOBAL TRAP-DOOR EAST-WALL)
       (THINGS <PSEUDO (<> SLIME MOSS-PSEUDO)
                      (<> MOSS MOSS-PSEUDO)
                      (<> FUNGUS MOSS-PSEUDO)>)>
@@ -966,6 +969,7 @@ spell.")
                            <NOT <FSET? .L ,OPENBIT>>>
                       <TELL-OPEN-CLOSED .L>)
                      (<AND <VERB? OPEN>
+                           <EQUAL? ,PRSO ,CABINET ,PAST-CABINET>
                            <NOT <FSET? ,PRSO ,OPENBIT>>>
                       <FSET ,PRSO ,OPENBIT>
                       <TELL "Opened." CR>)>)
@@ -1025,6 +1029,7 @@ materializes before you!" CR>
                       <TELL
 "The cabinet bursts open">
                       <COND (<AND <NOT <IN? ,PLAYER ,CABINET>>
+                                  <NOT <IN? ,PLAYER ,PAST-CABINET>>
                                   <FIRST? ,PRSO>>
                              <TELL ", revealing ">
                              <PRINT-CONTENTS ,PRSO>)>
@@ -1084,7 +1089,7 @@ as you watch. While not good as new, the book looks much better">)>
                       <TELL "There's no spell in ">
                       <THE-PRSO>)>)>>
 
-<GLOBAL DEAD-BOOK-SCORE 15>
+<GLOBAL DEAD-BOOK-SCORE:NUMBER 15>
 
 <ROUTINE CELL-PSEUDO ()
         <COND (<VERB? EXAMINE LOOK-INSIDE>
@@ -1124,7 +1129,7 @@ bright red and yellow coruscations. The only exit is down." CR>)
                <SETG ROC-COUNT 0>
                <QUEUE I-ROC -1>)>>
 
-<GLOBAL SEEN-TOWER? <>>
+<GLOBAL SEEN-TOWER?:FLAG <>>
 
 <ROUTINE ROC-GRABS-PLAYER ("OPTIONAL" (FALL? <>))
         <MOVE ,ROC ,HERE>
@@ -1338,7 +1343,7 @@ ravenous like all young birds, gobbles you down.">)>)>>
                      (ELSE
                       <TELL "a " 'CONNECTIVITY-CUBE>)>
                <TELL " there." CR>)
-              (<OR <HOSTILE-VERB?> <VERB? OPEN>>
+              (<OR <HOSTILE-VERB?> <VERB? OPEN RAISE>>
                <COND (<IMMOBILIZED?> <RTRUE>)
                      (<IN? ,ROC ,HERE>
                       <TELL
diff --git a/c3.zil b/c3.zil
index a71f2a7c0b6f69f5addf5255752df9cecf0208a4..7ca232a196bb32ec5c19feb953928ca2fecb9d33 100644 (file)
--- a/c3.zil
+++ b/c3.zil
@@ -42,7 +42,7 @@ floor opens into thin air which goes a long way down before anything
 solid is reached." CR>
                <RFALSE>)>>
 
-<GLOBAL FALL-WARNING? <>>
+<GLOBAL FALL-WARNING?:FLAG <>>
 
 <ROUTINE AIR-ROOM-F (RARG)
         <COND (<EQUAL? .RARG ,M-LOOK>
@@ -233,7 +233,7 @@ of carpets">
 'RANDOM-CARPET " that's shabby and badly made">)>)>
         <TELL ,PERIOD>>
 
-<GLOBAL MERCHANT-FLAG <>>
+<GLOBAL MERCHANT-FLAG:FLAG <>>
 
 <ROUTINE MERCHANT-F ("OPTIONAL" (RARG <>) "AUX" PREV)
         <SETG MERCHANT-FLAG T>
@@ -445,7 +445,7 @@ thief!\"">
                <KICKED-OUT>
                <RTRUE>)>>
 
-<GLOBAL ASKED-FOR <>>
+<GLOBAL ASKED-FOR:FLAG <>>
 
 <ROUTINE KICKED-OUT ("AUX" (L <LOC ,PLAYER>))
         <COND (<FSET? .L ,VEHBIT>
@@ -462,10 +462,10 @@ thief!\"">
 "The merchant says, \"Time is money, and you've wasted too much of mine!\"">
                <KICKED-OUT>)>>
 
-<GLOBAL YOUR-OFFER 0>
-<GLOBAL MERCHANT-WANTS 900>
-<GLOBAL MERCHANT-COUNT 0>
-<GLOBAL MERCHANT-SAYS
+<GLOBAL YOUR-OFFER:NUMBER 0>
+<GLOBAL MERCHANT-WANTS:NUMBER 900>
+<GLOBAL MERCHANT-COUNT:NUMBER 0>
+<GLOBAL MERCHANT-SAYS:TABLE
        <PLTABLE
 "\"These carpets are the epitome of the weaver's art, woven
 by skilled native craftsmen with pride in their work. The Flatheads themselves
@@ -615,15 +615,18 @@ to fall apart.">
                            <EQUAL? ,PRSI ,SHEARS ,KNIFE>>
                       <CARPET-CRUMBLES>)>)>>
 
-<GLOBAL SITTING? <>>
+<GLOBAL SITTING?:FLAG <>>
+
+<ROUTINE IMPOSSIBLE-MANEUVER ()
+        <TELL
+"An impossible maneuver under the circumstances." CR>>
 
 <ROUTINE CANT-GET-ON? ()
         <COND (<FSET? ,HERE ,RAIRBIT>
                <TELL
 "A good thought, but a little too late to save you, I'm afraid." CR>)
               (<FSET? ,HERE ,RWATERBIT>
-               <TELL
-"Impossible under the circumstances." CR>)
+               <IMPOSSIBLE-MANEUVER>)
               (<HELD? ,PRSO>
                <TELL
 ,YOU-HAVE-TO " put it down first." CR>)>>
@@ -848,13 +851,15 @@ fringe of the carpet starts to ruffle expectantly." CR>)
                <TELL ,PERIOD>)>
         <RTRUE>>
 
-<GLOBAL RIPPLES "The carpet ripples excitedly">
+<GLOBAL RIPPLES:STRING "The carpet ripples excitedly">
 
 <ROUTINE GET-OFF-FIRST ()
         <TELL
 ,YOU-HAVE-TO " get off the carpet first." CR>>
 
 <ROUTINE CARPET-CRUMBLES ()
+        <COND (<IN? ,PLAYER ,PRSO>
+               <MOVE ,PLAYER ,HERE>)>
         <REMOVE ,PRSO>
         <TELL
 "As the first thread is cut, the " 'PRSO " crumbles to dust." CR>>
@@ -911,7 +916,10 @@ Abdul el-Flathead|
               (<AND <VERB? CASKLY>
                     <NOT <IN? ,CARPET-LABEL ,MAGIC-CARPET>>>
                <TELL ,NOTHING-HAPPENS>)
-              (<VERB? TAKE MUNG>
+              (<OR <VERB? TAKE MUNG>
+                   <AND <VERB? CUT>
+                        ,PRSI
+                        <FSET? ,PRSI ,WEAPONBIT>>> 
                <FSET ,PRSO ,RMUNGBIT>
                <COND (<AND <IN? ,PLAYER ,MAGIC-CARPET>
                            <FSET? ,HERE ,RAIRBIT>>
@@ -1014,9 +1022,9 @@ CR>)>)>>
 CTHE ,PRSO " falls, dwindling below you, never to be seen again." CR>)
               (ELSE <RTRUE>)>>
 
-<GLOBAL NS-COUNT 0>
-<GLOBAL EW-COUNT 0>
-<GLOBAL UD-COUNT 0>
+<GLOBAL NS-COUNT:NUMBER 0>
+<GLOBAL EW-COUNT:NUMBER 0>
+<GLOBAL UD-COUNT:NUMBER 0>
 
 <ROOM LOST-IN-CLOUDS
       (IN ROOMS)
@@ -1116,7 +1124,7 @@ is undisturbed by the heat." CR>)
         <TELL
 "A small patch of lava cools, but it is swept away." CR>>
 
-<GLOBAL SMELL-LAVA "It smells like boiling brimstone.|">
+<GLOBAL SMELL-LAVA:STRING "It smells like boiling brimstone.|">
 
 <ROUTINE LAVA-PSEUDO ()
         <COND (<VERB? EXAMINE TAKE SWIM THROUGH>
@@ -1166,7 +1174,7 @@ the flow." CR>)
                       <SETG ROCK-ARRIVED? T>
                       <QUEUE I-ROCK-ARRIVES 2>)>)>>
 
-<GLOBAL ROCK-ARRIVED? <>>
+<GLOBAL ROCK-ARRIVED?:FLAG <>>
 
 <OBJECT LAVA-ROCK
        (DESC "lava fragment")
@@ -1225,7 +1233,7 @@ CTHE ,PRSI " hisses and sizzles when you touch the lava with it." CR>)>)
               (MOLTEN LAVA LAVA-PSEUDO)
               (<> MOUNTAIN VOLCANO-PSEUDO)>)>
 
-<GLOBAL GOT-MAGIC-CUBE? <>>
+<GLOBAL GOT-MAGIC-CUBE?:FLAG <>>
 
 <ROUTINE OUTCROPPING-ROOM-F (RARG)
         <COND (<EQUAL? .RARG ,M-LOOK>
@@ -1288,7 +1296,7 @@ flat top about four feet across which is roughly square.">
 and cubical.">)>
                       <CLEVER-CONTENTS ,OUTCROPPING-ROOM
                                        " On the top of the outcropping"
-                                        ,MAGIC-CUBE>
+                                       ,MAGIC-CUBE>
                       <CRLF>)
                      (<AND <VERB? PUT PUT-ON>
                            <EQUAL? ,PRSI ,OUTCROPPING>>
@@ -1380,7 +1388,11 @@ light coming from ">
                       <TELL " has been reduced
 to a thin, barely glowing stream of tiny blobs that drips, spurts
 and sputters uselessly to the ground. There it collects into a small pile
-which is slowly disappearing, perhaps by evaporation." CR>)>)>>
+which is slowly disappearing, perhaps by evaporation." CR>)>)
+              (<EQUAL? .RARG ,M-ENTER>
+               <PUT <GETPT ,LIGHT ,P?SYNONYM> 2 ,W?PILE>)
+              (<EQUAL? .RARG ,M-LEAVE>
+               <PUT <GETPT ,LIGHT ,P?SYNONYM> 2 ,W?LIGHTS>)>>
 
 <ROUTINE TELL-LIGHT-SOURCE ()
         <COND (<EQUAL? ,LIT ,WINNER>
@@ -1402,7 +1414,7 @@ which is slowly disappearing, perhaps by evaporation." CR>)>)>>
       (THINGS <PSEUDO (LIGHT POOL POOL-PSEUDO)>)>
 
 <ROUTINE POOL-PSEUDO ()
-        <COND (<VERB? THROUGH> <DO-WALK ,P?DOWN>)
+        <COND (<VERB? THROUGH BOARD> <DO-WALK ,P?DOWN>)
               (<VERB? EXAMINE> <PERFORM ,V?LOOK> <RTRUE>)
               (<AND <VERB? THROW DROP>
                     <EQUAL? ,PRSI ,PSEUDO-OBJECT>>
@@ -1441,6 +1453,7 @@ center of the room." CR>)>)
                       <I-GRUES-NOTICE T>
                       <RTRUE>)>)
               (<EQUAL? .RARG ,M-ENTER>
+               <PUT <GETPT ,LIGHT ,P?SYNONYM> 2 ,W?PILE>
                <COND (<NOT <EQUAL? ,CHANGED? ,GRUE>>
                       <COND (<NOT <EQUAL? ,OHERE ,DARK-CAVE>>
                              <QUEUE I-GRUES-NOTICE 1>
@@ -1455,7 +1468,9 @@ a larger area." CR CR>)
 "You make your way carefully in the almost non-existent light down to an
 area filled with dim shapes. They move about purposefully, making horrible
 gurgling noises. The floor is rough and jumbled near the walls, so you
-haven't been noticed yet." CR CR>)>)>)>>
+haven't been noticed yet." CR CR>)>)>)
+              (<EQUAL? .RARG ,M-LEAVE>
+               <PUT <GETPT ,LIGHT ,P?SYNONYM> 2 ,W?LIGHTS>)>>
 
 <ROOM LIGHT-POOL
       (IN ROOMS)
@@ -1478,6 +1493,7 @@ which sticks up out of the light." CR>)
                            <EQUAL? ,PRSO <> ,ROOMS ,PSEUDO-OBJECT>>
                       <DO-WALK ,P?OUT>)>)
               (<EQUAL? .RARG ,M-ENTER>
+               <PUT <GETPT ,LIGHT ,P?SYNONYM> 2 ,W?PILE>
                <QUEUE I-FRIED-GRUE 2>
                <TELL
 "You enter the pool, which is composed of the accumulated dribbles of light
@@ -1486,7 +1502,9 @@ light tickles">
                <COND (<EQUAL? ,CHANGED? ,GRUE>
                       <TELL " at first, but then it begins to burn and your eyes are
 hurting severely">)>
-               <TELL ,PERIOD CR>)>>
+               <TELL ,PERIOD CR>)
+              (<EQUAL? .RARG ,M-LEAVE>
+               <PUT <GETPT ,LIGHT ,P?SYNONYM> 2 ,W?LIGHTS>)>>
 
 <ROOM PILLAR-ROOM
       (IN ROOMS)
@@ -1509,13 +1527,17 @@ fear." CR>)
                      (ELSE
                       <TELL
 "almost imperceptible light. You can barely see dim shapes capering in
-the dark." CR>)>)>>
+the dark." CR>)>)
+              (<EQUAL? .RARG ,M-ENTER>
+               <PUT <GETPT ,LIGHT ,P?SYNONYM> 2 ,W?PILE>)
+              (<EQUAL? .RARG ,M-LEAVE>
+               <PUT <GETPT ,LIGHT ,P?SYNONYM> 2 ,W?LIGHTS>)>>
 
 <OBJECT PILLAR
        (IN LOCAL-GLOBALS)
        (DESC "pillar")
        (SYNONYM PILLAR GLYPHS)
-       (ADJECTIVE MARBLE SHORT ERODED)
+       (ADJECTIVE MARBLE ERODED STUMP)
        (FLAGS NDESCBIT SURFACEBIT READBIT)
        (ACTION PILLAR-F)
        (TEXT "The only readable ones say \"D.L. 1985.\"")>
@@ -1523,20 +1545,24 @@ the dark." CR>)>)>>
 <ROUTINE PILLAR-F ("AUX" (IGNORE? <>))
         <COND (<VERB? EXAMINE LOOK-INSIDE>
                <TELL
-"This is a short, squat marble pillar covered with eroded glyphs. It
+"This is the stump of a marble pillar covered with eroded glyphs. It
 barely projects out of the pool of light. The grues seem awed by it.">
                <COND (<AND <IN? ,FIRE-CUBE ,PILLAR-ROOM>
                            <NOT <EQUAL? ,HERE ,PILLAR-ROOM>>>
                       <SET IGNORE? ,FIRE-CUBE>
-                      <TELL
-" There is something small and white on the pillar.">)>
-               <CLEVER-CONTENTS ,PILLAR-ROOM
-                                " On top of the pillar"
-                                .IGNORE?>
+                      <COND (<EQUAL? ,HERE ,LIGHT-POOL>
+                             <TELL
+" You can't see the top of the pillar from here.">)
+                            (ELSE
+                             <TELL
+" There is something small and white on the pillar.">
+                             <CLEVER-CONTENTS ,PILLAR-ROOM
+                                              " On top of the pillar"
+                                              .IGNORE?>)>)>
                <CRLF>)
               (<THROW-ONTO ,PILLAR ,PILLAR-ROOM>
                <RTRUE>)
-              (<VERB? CLIMB-ON CLIMB-FOO BOARD>
+              (<VERB? CLIMB-ON CLIMB-UP CLIMB-FOO BOARD>
                <COND (<EQUAL? ,HERE ,GRUE-CAVE>
                       <TELL
 "It's in the pool, out of reach from here." CR>)
@@ -1645,7 +1671,7 @@ glassware are carelessly stacked in corners.">)>
 north side of the room whose lock mechanism is visible. ">
                <DESCRIBE-VAULT-DOOR>)
               (<EQUAL? .RARG ,M-LEAVE>
-               <MAKE-JUNK>)>>
+               <COND (<VERB? BLORPLE> <MAKE-JUNK>)>)>>
 
 <OBJECT VAULT-DOOR
        (IN LOCAL-GLOBALS)
@@ -1758,7 +1784,7 @@ five burly guards are coming." CR>)>)
        (IN LOCAL-GLOBALS)
        (DESC "iron door")
        (SYNONYM DOOR)
-       (ADJECTIVE IRON NORTH N)
+       (ADJECTIVE IRON NORTH)
        (FLAGS DOORBIT LOCKED)
        (ACTION IRON-DOOR-F)>
 
@@ -1770,7 +1796,7 @@ five burly guards are coming." CR>)>)
               (<VERB? THROUGH>
                <DO-WALK ,P?NORTH>)>>
 
-<GLOBAL SPELLS-USED 0>
+<GLOBAL SPELLS-USED:FLAG 0>
 
 <ROUTINE SCALES-ROOM-F (RARG "AUX" P1 P2)
         <COND (<EQUAL? .RARG ,M-LOOK>
@@ -1795,7 +1821,7 @@ five burly guards are coming." CR>)>)
                       <TELL "a closed">)>
                <TELL " iron door. To the south is the inner vault. Its
 steel door is ">
-               <COND (<FSET? ,IRON-DOOR ,OPENBIT>
+               <COND (<FSET? ,VAULT-DOOR ,OPENBIT>
                       <TELL "open">)
                      (ELSE
                       <TELL "closed">)>
@@ -1831,9 +1857,10 @@ that they are.">)
                <CUBES-TO-PILES>
                <COND (,TIME-CUBE-SCORE?
                       <SETG TREASURY-GUARDED? T>)>
-               <MAKE-JUNK>)>>
+               <COND (<VERB? BLORPLE>
+                      <MAKE-JUNK>)>)>>
 
-<GLOBAL FAKE-CUBE-LIST
+<GLOBAL FAKE-CUBE-LIST:TABLE
        <LTABLE 0
                CUBE-1 CUBE-2 CUBE-3 CUBE-4 CUBE-5 CUBE-6
                CUBE-7 CUBE-8 CUBE-9 CUBE-10 CUBE-11 TIME-CUBE>>
@@ -1848,11 +1875,10 @@ that they are.">)
         <PUT .BUF 0 0>
         <SETG P-QNEXT .BUF>>
 
-<ROUTINE CUBES-TO-PILES ("AUX" (CNT 1) L)
+<ROUTINE CUBES-TO-PILES ("AUX" L)
         <SET L ,FAKE-CUBE-LIST>
-        <REPEAT ()
-                <COND (<IGRTR? CNT 13> <RETURN>)>
-                <MOVE <GET .L .CNT> ,PILE-1>>
+        <DO (CNT 2 13)
+            <MOVE <GET .L .CNT> ,PILE-1>>
         <COND (<EQUAL? ,TIME-CUBE ,BLORPLE-OBJECT>
                <REMOVE ,TIME-CUBE>
                <COND (<NOT ,TIME-CUBE-SCORE?>
@@ -1863,37 +1889,31 @@ that they are.">)
                     <LOC ,BLORPLE-OBJECT>>
                <SETG BLORPLE-OBJECT <>>)>>
 
-<GLOBAL TIME-CUBE-SCORE? <>>
+<GLOBAL TIME-CUBE-SCORE?:FLAG <>>
 
-<ROUTINE JUGGLE-CUBES ("AUX" (CNT 1) BUF (P1 0) (P2 0) Q)
+<ROUTINE JUGGLE-CUBES ("AUX" BUF (P1 0) (P2 0) Q)
         <ROB ,PILE-1 ,SCALES-ROOM>
         <ROB ,PILE-2 ,SCALES-ROOM>
-        <REPEAT ()
-                <COND (<IGRTR? CNT 13> <RETURN>)>
-                <SET Q <PICK-ONE ,FAKE-CUBE-LIST>>
-                <FSET .Q ,NDESCBIT>
-                <COND (<OR <EQUAL? .P2 6>
-                           <AND <L? .P1 6> <PROB 50>>>
-                       <SET P1 <+ .P1 1>>
-                       <MOVE .Q ,PILE-1>)
-                      (ELSE
-                       <MOVE .Q ,PILE-2>
-                       <SET P2 <+ .P2 1>>)>>
+        <DO (CNT 2 13)
+            <SET Q <PICK-ONE ,FAKE-CUBE-LIST>>
+            <FSET .Q ,NDESCBIT>
+            <COND (<OR <EQUAL? .P2 6>
+                       <AND <L? .P1 6> <PROB 50>>>
+                   <SET P1 <+ .P1 1>>
+                   <MOVE .Q ,PILE-1>)
+                  (ELSE
+                   <MOVE .Q ,PILE-2>
+                   <SET P2 <+ .P2 1>>)>>
         <SET BUF ,P-QBUF>
-        <SET Q <FIRST? ,PILE-1>>
-        <REPEAT ()
-                <COND (<NOT .Q> <RETURN>)>
-                <PUTP .Q ,P?NAME .BUF>
-                <PUT .BUF 0 <CUBE-ADJ .Q>>
-                <SET BUF <REST .BUF 10>>
-                <SET Q <NEXT? .Q>>>
-        <SET Q <FIRST? ,PILE-2>>
-        <REPEAT ()
-                <COND (<NOT .Q> <RETURN>)>
-                <PUTP .Q ,P?NAME .BUF>
-                <PUT .BUF 0 <CUBE-ADJ .Q>>
-                <SET BUF <REST .BUF 10>>
-                <SET Q <NEXT? .Q>>>>
+        <MAP-CONTENTS (Q ,PILE-1)
+                      <PUTP .Q ,P?NAME .BUF>
+                      <PUT .BUF 0 <CUBE-ADJ .Q>>
+                      <SET BUF <REST .BUF 10>>>
+        <MAP-CONTENTS (Q ,PILE-2)
+                      <PUTP .Q ,P?NAME .BUF>
+                      <PUT .BUF 0 <CUBE-ADJ .Q>>
+                      <SET BUF <REST .BUF 10>>>
+        <RTRUE>>
 
 <ROUTINE TELL-PILE (PILE OTHER)
         <TELL
@@ -1920,12 +1940,11 @@ that they are.">)
                <RFALSE>)>>
 
 <ROUTINE MAKE-JUNK ()
-        <COND (<VERB? BLORPLE>
-               <FCLEAR ,VAULT-DOOR ,OPENBIT>
-               <COND (<HELD? ,TREASURE>
-                      <MOVE ,JUNK <LOC ,TREASURE>>
-                      <FSET ,TREASURE ,NDESCBIT>
-                      <MOVE ,TREASURE ,INNER-VAULT>)>)>>
+        <FCLEAR ,VAULT-DOOR ,OPENBIT>
+        <COND (<HELD? ,TREASURE>
+               <MOVE ,JUNK <LOC ,TREASURE>>
+               <FSET ,TREASURE ,NDESCBIT>
+               <MOVE ,TREASURE ,INNER-VAULT>)>>
 
 <OBJECT JUNK
        (SYNONYM JUNK PASTE GILT LEAD)
@@ -1947,22 +1966,21 @@ lead coins." CR>)
                       <TELL "The junk looks valuable again." CR>)
                      (ELSE <RTRUE>)>)>>
 
-<GLOBAL IS-GLOWING " is glowing with a faint blue glow.">
+<GLOBAL IS-GLOWING:STRING " is glowing with a faint blue glow.">
 
-<ROUTINE MEASURE (OBJ "AUX" (F <FIRST? .OBJ>) (CNT 0))
-        <REPEAT ()
-                <COND (<NOT .F> <RETURN .CNT>)
-                      (<GETP .F ,P?CUBE> ;"REAL CUBE"
-                       <SET CNT <+ .CNT ,REAL-VALUE>>)
-                      (<GETPT .F ,P?NAME> ;"FAKE CUBE"
-                       <SET CNT <+ .CNT ,FAKE-VALUE>>)
-                      (<OR <FSET? .F ,MAGICBIT>
-                           <FSET? .F ,SCROLLBIT>>
-                       <SET CNT <+ .CNT 1>>)>
-                <SET F <NEXT? .F>>>>
-
-<GLOBAL REAL-VALUE 3>
-<GLOBAL FAKE-VALUE 2>
+<ROUTINE MEASURE (OBJ "AUX" F (CNT 0))
+        <MAP-CONTENTS (F .OBJ)
+                      (<RETURN .CNT>)
+                      <COND (<GETP .F ,P?CUBE> ;"REAL CUBE"
+                             <SET CNT <+ .CNT ,REAL-VALUE>>)
+                            (<GETPT .F ,P?NAME> ;"FAKE CUBE"
+                             <SET CNT <+ .CNT ,FAKE-VALUE>>)
+                            (<OR <FSET? .F ,MAGICBIT>
+                                 <FSET? .F ,SCROLLBIT>>
+                             <SET CNT <+ .CNT 1>>)>>>
+
+<GLOBAL REAL-VALUE:NUMBER 3>
+<GLOBAL FAKE-VALUE:NUMBER 2>
 
 <OBJECT ALARM-FAIRY
        (DESC "alarm fairy")
@@ -1993,8 +2011,8 @@ ceiling, out of reach, and jeers at you." CR>)
 "\"Missed me! Missed me! Now you have to kiss me!\" It plants a smooch
 on your cheek." CR>)>>
 
-<GLOBAL GUARDS-FLAG 0>
-<GLOBAL TREASURY-GUARDED? <>>
+<GLOBAL GUARDS-FLAG:NUMBER 0>
+<GLOBAL TREASURY-GUARDED?:FLAG <>>
 
 <OBJECT PILE-1
        (IN SCALES-ROOM)
@@ -2016,32 +2034,29 @@ on your cheek." CR>)>>
        (GENERIC GENERIC-RANDOM-F)
        (ACTION PILE-F)>
 
-<GLOBAL WHITE-CUBE "featureless white cube">
-
-<ROUTINE PILE-LOOP (OBJ "AUX" (F <FIRST? .OBJ>) (1ST? T) (CNT 0) N CUBE?)
-        <REPEAT ()
-                <COND (<NOT .F>
-                       <COND (<G? .CNT 0>
-                              <COND (<NOT .1ST?>
-                                     <TELL " and ">)>
-                              <TELL N .CNT " " ,WHITE-CUBE>
-                              <COND (<G? .CNT 1> <TELL "s">)>)>
-                       <RETURN>)>
-                <SET N <NEXT? .F>>
-                <SET CUBE? <GETPT .F ,P?NAME>>
-                <COND (<OR <NOT .CUBE?> ;"not a cube?"
-                           <NOT <ZERO? <GETP .F ,P?NAME>>>>
-                       <COND (<NOT .1ST?>
-                              <COND (<AND <NOT .N> <ZERO? .CNT>>
-                                     <TELL " and ">)
-                                    (ELSE <TELL ", ">)>)
-                             (T <SET 1ST? <>>)>
-                       <COND (<NOT <GETPT .F ,P?NAME>>
-                              <TELL A .F>)
-                             (ELSE
-                              <TELL THE .F>)>)
-                      (ELSE <SET CNT <+ .CNT 1>>)>
-                <SET F .N>>>
+<GLOBAL WHITE-CUBE:STRING "featureless white cube">
+
+<ROUTINE PILE-LOOP (OBJ "AUX" F N (1ST? T) (CNT 0) CUBE?)
+        <MAP-CONTENTS (F N .OBJ)
+                      (END <COND (<G? .CNT 0>
+                                  <COND (<NOT .1ST?>
+                                         <TELL " and ">)>
+                                  <TELL N .CNT " " ,WHITE-CUBE>
+                                  <COND (<G? .CNT 1> <TELL "s">)>)>)
+                      <SET CUBE? <GETPT .F ,P?NAME>>
+                      <COND (<OR <NOT .CUBE?> ;"not a cube?"
+                                 <NOT <ZERO? <GETP .F ,P?NAME>>>>
+                             <COND (<NOT .1ST?>
+                                    <COND (<AND <NOT .N> <ZERO? .CNT>>
+                                           <TELL " and ">)
+                                          (ELSE <TELL ", ">)>)
+                                   (T <SET 1ST? <>>)>
+                             <COND (<NOT <GETPT .F ,P?NAME>>
+                                    <TELL A .F>)
+                                   (ELSE
+                                    <TELL THE .F>)>)
+                            (ELSE <SET CNT <+ .CNT 1>>)>>
+        >
 
 <ROUTINE PILE-F ()
         <COND (<VERB? EXAMINE>
@@ -2066,6 +2081,11 @@ etc." CR>)
                       <COND (<AND <NOT <HELD? ,PRSO>>
                                   <EQUAL? <ITAKE> ,M-FATAL <>>>
                              <RTRUE>)
+                            (<EQUAL? ,PRSO
+                                     ,MAGIC-CARPET ,RANDOM-CARPET ,ZIPPER>
+                             <MOVE ,PRSO ,HERE>
+                             <TELL
+"You put it on the floor near " THE ,PRSI ,PERIOD>)
                             (ELSE
                              <MOVE ,PRSO ,PRSI>
                              <FSET ,PRSO ,TOUCHBIT>
@@ -2273,12 +2293,10 @@ on it." CR>)
                <TELL "s">)>
         <TELL "." CR>>
 
-<ROUTINE CUBE-COUNT (OBJ "AUX" (CNT 0) (CONT <FIRST? .OBJ>))
-        <REPEAT ()
-                <COND (<NOT .CONT> <RETURN>)
-                      (<NOT <ZERO? <GETPT .CONT ,P?NAME>>>
-                       <SET CNT <+ .CNT 1>>)
-                      (<FIRST? .CONT>
-                       <SET CNT <+ .CNT <CUBE-COUNT .CONT>>>)>
-                <SET CONT <NEXT? .CONT>>>
-        .CNT>
+<ROUTINE CUBE-COUNT (OBJ "AUX" (CNT 0))
+        <MAP-CONTENTS (CONT .OBJ)
+                      (END <RETURN .CNT>)
+                      <COND (<NOT <ZERO? <GETPT .CONT ,P?NAME>>>
+                             <SET CNT <+ .CNT 1>>)
+                            (<FIRST? .CONT>
+                             <SET CNT <+ .CNT <CUBE-COUNT .CONT>>>)>>>
diff --git a/c4.zil b/c4.zil
index b75b3b073a6b545f7ee6b6ed02b5e178cb7dea66..c2b7a8e694a01b3b46279a1e306411a4b19131b5 100644 (file)
--- a/c4.zil
+++ b/c4.zil
@@ -69,11 +69,11 @@ like a deflated balloon on the ground.">
 ones can do here.\"">)>
         <CRLF>>
 
-<GLOBAL ROCK-MOVED? <>>
+<GLOBAL ROCK-MOVED?:FLAG <>>
 
-<GLOBAL YOU-LOC 5>
-<GLOBAL ROCK-LOC 5>
-<GLOBAL OTHER-ROCK-LOC 7>
+<GLOBAL YOU-LOC:NUMBER 5>
+<GLOBAL ROCK-LOC:NUMBER 5>
+<GLOBAL OTHER-ROCK-LOC:NUMBER 7>
 
 <ROUTINE DESCRIBE-PLAIN ("OPTIONAL" (ROCKS? T))
         <COND (<HELD? ,PLAYER ,ROCK>
@@ -105,7 +105,7 @@ ones can do here.\"">)>
                       <ROCK-DIRECTION ,OTHER-ROCK-LOC>)>
                <TELL ".">)>>
 
-<GLOBAL PLAIN-WALLS
+<GLOBAL PLAIN-WALLS:TABLE
        <TABLE #BYTE 0
               #BYTE %<+ 2 8 128>       ;"1 -- E, S, SW"
               #BYTE %<+ 2 4 8>         ;"2 -- E, W, S"
@@ -208,9 +208,9 @@ carefully before answering. ">
 one, though not as odd as the last. It was
 as unprepossessing as you. Of course, I am the most handsome.\"" CR>)>>
 
-<GLOBAL ROCK-TALKED? <>>
-<GLOBAL ROCK-BRIBED? <>>
-<GLOBAL TRIED-BOARDING? <>>
+<GLOBAL ROCK-TALKED?:FLAG <>>
+<GLOBAL ROCK-BRIBED?:FLAG <>>
+<GLOBAL TRIED-BOARDING?:FLAG <>>
 
 <ROUTINE ROCK-F ("OPTIONAL" (RARG <>))
         <COND (<EQUAL? ,WINNER ,ROCK>
@@ -329,7 +329,7 @@ rock says, \"Hey! What is this? What about my privacy?\"">
 nice. Then you could ride on top and admire me from that angle. It's a
 rare privilege.\"" CR>>
 
-<GLOBAL IT-TICKLES "The rock bobs in place. \"That tickles!\"|">
+<GLOBAL IT-TICKLES:STRING "The rock bobs in place. \"That tickles!\"|">
 
 <ROUTINE ROCK-WALK (DIR "AUX" ROW COL)
         <QUEUE I-OTHER-ROCK -1>
@@ -437,10 +437,10 @@ settle yourself carefully on top. ">
                      (<NOT <EQUAL? ,OTHER-ROCK-LOC ,YOU-LOC>>
                       <TELL ,TOO-FAR>)>)>>
 
-<GLOBAL ROCK-IRRITATION 
+<GLOBAL ROCK-IRRITATION:STRING 
 "The rock grumbles in irritation. \"Go away,\" it says.|">
 
-<GLOBAL TOO-FAR "It's too far away.|">
+<GLOBAL TOO-FAR:STRING "It's too far away.|">
 
 "LIGHT"
 
@@ -578,7 +578,7 @@ the bright blue background." CR>)
 "A rabbit hops across the meadow, twitches its nose at you, and
 then scampers away." CR>)>)>>
 
-<GLOBAL RABBIT-FLAG <>>
+<GLOBAL RABBIT-FLAG:FLAG <>>
 
 <OBJECT SHEARS
        (IN MEADOW-ROOM)
@@ -593,7 +593,7 @@ then scampers away." CR>)>)>>
                <TELL
 "This is a very nice pair of pruning shears, such as a gardener
 would own." CR>)
-              (<AND <VERB? CUT>
+              ;(<AND <VERB? CUT>
                     <NOT <HELD? ,SHEARS>>>
                <NOT-HOLDING ,SHEARS>)>>
 
@@ -629,7 +629,7 @@ would own." CR>)
 in the meadow. It's like a well-kept garden.">)>
         <CRLF>>
 
-<GLOBAL WEED-PLANTED? 2>
+<GLOBAL WEED-PLANTED?:NUMBER 2>
 
 <ROUTINE WEED-F ()
         <COND (<VERB? EXAMINE>
@@ -667,7 +667,12 @@ earth with it." CR>)>
                       <TELL
 "You now have a weed cutting." CR>)>)
               (<AND <VERB? PLANT>
-                    <EQUAL? ,PRSI <> ,GROUND>>
+                    <OR <EQUAL? ,PRSI ,GROUND ,GLOBAL-CAVE>
+                        <AND <EQUAL? ,PRSI ,PSEUDO-OBJECT>
+                             <EQUAL? ,P-PNAM ,W?DIRT>>
+                        <AND <NOT ,PRSI>
+                             <OR <FSET? ,HERE ,OUTSIDE>
+                                 <EQUAL? ,HERE ,OGRE-CAVE ,OGRE-BEDROOM>>>>>
                <COND (<AND <FSET? ,HERE ,RLANDBIT>
                            <NOT <GETP ,HERE ,P?CUBE>>
                            <IN? ,WINNER ,HERE>>
@@ -828,7 +833,7 @@ fluid." CR>)
       (FLAGS RLANDBIT)
       (THINGS <PSEUDO (BLACK MARBLE MARBLE-PSEUDO)>)>
 
-<GLOBAL MAZE-EXIT-FLAG <>>
+<GLOBAL MAZE-EXIT-FLAG:FLAG <>>
 
 <ROUTINE MAZE-ANTEROOM-F (RARG)
         <COND (<EQUAL? .RARG ,M-LOOK>
@@ -845,10 +850,11 @@ rose.">)>
               (<AND <EQUAL? .RARG ,M-LEAVE>
                     <NOT <VERB? BLORPLE>>>
                <SETG MAZE-EXIT-FLAG <>>
-               <PUT ,MAZE-ANTEROOM ,P?EXITS 0>
+               <PUTP ,MAZE-ANTEROOM ,P?EXITS 0>
                <OCT-HOLE-DISAPPEARS>)>>
 
 <ROUTINE OCT-HOLE-DISAPPEARS ()
+        <REMOVE ,OCTAGONAL-HOLE>
         <TELL
 "You slide through the " ,OCT-HOLE ", which constricts and disappears as
 soon as you are through it." CR CR>>
@@ -873,7 +879,7 @@ every particular." CR>)
 delicate filigree one might expect on a real but ornamental counterpart is
 here. As though that challenge was not enough, the artist set the carving deep
 in the stone of the wall." CR>)>)
-              (<VERB? OPEN>
+              (<VERB? OPEN REZROV>
                <YOU-CANT-X-PRSO "open">)
               (<VERB? CLOSE>
                <YOU-CANT-X-PRSO "close">)
@@ -916,17 +922,13 @@ through. You notice that the arm pointing north is now dull pot-metal.">
                <TELL "There is a " 'COMPASS-ROSE " here">)>
         <TELL ,PERIOD>>
 
-<GLOBAL COMPASS-ROSE-STATE 0>
-<GLOBAL COMPASS-ROSE-ARMS 0>
+<GLOBAL COMPASS-ROSE-STATE:NUMBER 0>
+<GLOBAL COMPASS-ROSE-ARMS:NUMBER 0>
 
-<ROUTINE ARM-DIRECTION (N "AUX" (CNT 1) (L <GET ,DIR-TABLE 0>))
-        <REPEAT ()
-                <COND (<G? .CNT .L>
-                       <RETURN>)
-                      (<EQUAL? <GET ,DIR-TABLE .CNT> .N>
-                       <RETURN <GET ,DIR-TABLE <+ .CNT 2>>>)
-                      (ELSE
-                       <SET CNT <+ .CNT 3>>)>>>
+<ROUTINE ARM-DIRECTION (N "AUX" (L <GET ,DIR-TABLE 0>))
+        <DO (CNT 1 .L 3)
+            <COND (<EQUAL? <GET ,DIR-TABLE .CNT> .N>
+                   <RETURN <GET ,DIR-TABLE <+ .CNT 2>>>)>>>
 
 <ROUTINE COMPASS-ROSE-F ("AUX" (N 1) (1ST? T))
         <COND (<VERB? EXAMINE>
@@ -986,7 +988,7 @@ the north wall of the room.">)>
        (IN LOCAL-GLOBALS)
        (DESC "north rune")
        (SYNONYM RUNE RUNES)
-       (ADJECTIVE NORTH SILVER LEAD)
+       (ADJECTIVE NORTH SILVER LEAD)
        (FLAGS NDESCBIT READBIT)
        (EXITS %,C-NORTH)
        (GENERIC GENERIC-RANDOM-F)
@@ -996,7 +998,7 @@ the north wall of the room.">)>
        (IN LOCAL-GLOBALS)
        (DESC "east rune")
        (SYNONYM RUNE RUNES)
-       (ADJECTIVE EAST SILVER LEAD)
+       (ADJECTIVE EAST SILVER LEAD)
        (FLAGS NDESCBIT READBIT)
        (EXITS %,C-EAST)
        (GENERIC GENERIC-RANDOM-F)
@@ -1006,7 +1008,7 @@ the north wall of the room.">)>
        (IN LOCAL-GLOBALS)
        (DESC "west rune")
        (SYNONYM RUNE RUNES)
-       (ADJECTIVE WEST SILVER LEAD GOLD)
+       (ADJECTIVE WEST SILVER LEAD GOLD)
        (FLAGS NDESCBIT READBIT)
        (EXITS %,C-WEST)
        (GENERIC GENERIC-RANDOM-F)
@@ -1016,7 +1018,7 @@ the north wall of the room.">)>
        (IN LOCAL-GLOBALS)
        (DESC "south rune")
        (SYNONYM RUNE RUNES)
-       (ADJECTIVE SOUTH S SILVER LEAD)
+       (ADJECTIVE SOUTH SILVER LEAD)
        (FLAGS NDESCBIT READBIT)
        (EXITS %,C-SOUTH)
        (GENERIC GENERIC-RANDOM-F)
@@ -1026,7 +1028,7 @@ the north wall of the room.">)>
        (IN LOCAL-GLOBALS)
        (DESC "northeast rune")
        (SYNONYM RUNE RUNES)
-       (ADJECTIVE NORTHEAST NE SILVER LEAD)
+       (ADJECTIVE NE SILVER LEAD)
        (FLAGS NDESCBIT READBIT)
        (EXITS %,C-NE)
        (GENERIC GENERIC-RANDOM-F)
@@ -1036,7 +1038,7 @@ the north wall of the room.">)>
        (IN LOCAL-GLOBALS)
        (DESC "northwest rune")
        (SYNONYM RUNE RUNES)
-       (ADJECTIVE NORTHWEST NW SILVER LEAD)
+       (ADJECTIVE NW SILVER LEAD)
        (FLAGS NDESCBIT READBIT)
        (EXITS %,C-NW)
        (GENERIC GENERIC-RANDOM-F)
@@ -1046,7 +1048,7 @@ the north wall of the room.">)>
        (IN LOCAL-GLOBALS)
        (DESC "southeast rune")
        (SYNONYM RUNE RUNES)
-       (ADJECTIVE SOUTHEAST SE SILVER LEAD)
+       (ADJECTIVE SE SILVER LEAD)
        (FLAGS NDESCBIT READBIT)
        (EXITS %,C-SE)
        (GENERIC GENERIC-RANDOM-F)
@@ -1056,7 +1058,7 @@ the north wall of the room.">)>
        (IN LOCAL-GLOBALS)
        (DESC "southwest rune")
        (SYNONYM RUNE RUNES)
-       (ADJECTIVE SOUTHWEST SW SILVER LEAD)
+       (ADJECTIVE SW SILVER LEAD)
        (FLAGS NDESCBIT READBIT)
        (EXITS %,C-SW)
        (GENERIC GENERIC-RANDOM-F)
@@ -1096,19 +1098,35 @@ of inlaid ">
        (SYNONYM HOLE DOOR)
        (ADJECTIVE OCTAGONAL)
        (DESC "octagonal hole")
-       (FLAGS DOORBIT NDESCBIT AN CONTBIT OPENBIT)
+       (FLAGS DOORBIT NDESCBIT AN CONTBIT OPENBIT VEHBIT)
        (GENERIC GENERIC-HOLE-F)
        (ACTION OCTAGONAL-HOLE-F)>
 
-<ROUTINE OCTAGONAL-HOLE-F ("AUX" E)
+<ROUTINE OCTAGONAL-HOLE-F ("AUX" E PT PTS)
         <COND (<AND <EQUAL? ,HERE ,MAZE-2>
-                    <NOT <IN? ,MAZE-2-DOOR ,HERE>>>
+                    <IN? ,MAZE-2-DOOR ,HERE>>
                <MAZE-2-DOOR-F>)
+              (<VERB? REZROV>
+               <TELL ,IT-IS-ALREADY "open." CR>)
               (<VERB? LOOK-INSIDE>
                <TELL ,NOW-BLACK CR>)
               (<VERB? EXAMINE>
                <TELL "It looks like an " ,OCT-HOLE ,PERIOD>)
-              (<VERB? THROUGH>
+              (<AND <VERB? PUT THROW DROP>
+                    <HELD? ,PRSO>
+                    <EQUAL? ,PRSI ,OCTAGONAL-HOLE>>
+               <SET E <GETP ,HERE ,P?EXITS>>
+               <SET E <DIR-BASE .E ,DIR-BIT ,DIR-DIR>>
+               <SET PT <GETPT ,HERE .E>>
+               <SET PTS <PTSIZE .PT>>
+               <COND (<OR <EQUAL? .PTS ,UEXIT>
+                          <AND <EQUAL? .PTS ,CEXIT>
+                               <VALUE <GETB .PT ,CEXITFLAG>>>>
+                      <MOVE ,PRSO <GETB .PT ,REXIT>>
+                      <TELL CTHE ,PRSO " disappears into the hole." CR>)
+                     (ELSE
+                      <TELL "It won't go." CR>)>)
+              (<VERB? THROUGH BOARD>
                <SET E <GETP ,HERE ,P?EXITS>>
                <COND (<L? .E 256>
                       <DO-WALK <DIR-BASE .E ,DIR-BIT ,DIR-DIR>>)>)>>
@@ -1121,7 +1139,7 @@ of inlaid ">
        (FLAGS AN NDESCBIT TAKEBIT TRYTAKEBIT)
        (ACTION MAZE-2-DOOR-F)>
 
-<GLOBAL OCT-HOLE "octagonal hole">
+<GLOBAL OCT-HOLE:STRING "octagonal hole">
 
 <ROUTINE DESCRIBE-PLUG ()
         <TELL
@@ -1389,20 +1407,17 @@ appears in the wall below the rune.">
                             (ELSE
                              <TELL ,NOTHING-HAPPENS>)>)>)>>
 
-<ROUTINE TELL-WALLS ("OPTIONAL" (N <>) "AUX" (CNT 1)
-                    (L <GET ,DIR-TABLE 0>) (1ST? T) (OLD <>))
+<ROUTINE TELL-WALLS ("OPTIONAL" (N <>)
+                    "AUX" (L <GET ,DIR-TABLE 0>) (1ST? T) (OLD <>))
         <COND (<NOT .N> <SET N <GETP ,HERE ,P?WALLS>>)>
-        <REPEAT ()
-                <COND (<G? .CNT .L>
-                       <TELL " and " .OLD>
-                       <RETURN>)
-                      (<NOT <ZERO? <BAND <GET ,DIR-TABLE .CNT> .N>>>
-                       <COND (.OLD
-                              <COND (.1ST? <SET 1ST? <>>)
-                                    (ELSE <TELL ", ">)>
-                              <TELL .OLD>)>
-                       <SET OLD <GET ,DIR-TABLE <+ .CNT 2>>>)>
-                <SET CNT <+ .CNT 3>>>>
+        <DO (CNT 1 .L 3)
+            (<TELL " and " .OLD>)
+            <COND (<NOT <ZERO? <BAND <GET ,DIR-TABLE .CNT> .N>>>
+                   <COND (.OLD
+                          <COND (.1ST? <SET 1ST? <>>)
+                                (ELSE <TELL ", ">)>
+                          <TELL .OLD>)>
+                   <SET OLD <GET ,DIR-TABLE <+ .CNT 2>>>)>>>
 
 "MAGIC"
 
@@ -1468,11 +1483,11 @@ black emptiness to the east." CR>)
         <COND (<EQUAL? <COUNT-CUBES> 13> <RTRUE>)
               (ELSE <RFALSE>)>>
 
-<ROUTINE COUNT-CUBES ("AUX" (CNT 0) (N 0))
-        <REPEAT ()
-                <COND (<GOT? <GET ,CUBE-LIST <* .CNT 2>>>
-                       <SET N <+ .N 1>>)>
-                <COND (<IGRTR? CNT 12> <RETURN .N>)>>>
+<ROUTINE COUNT-CUBES ("AUX" (N 0))
+        <DO (CNT 0 12)
+            <COND (<GOT? <GET ,CUBE-LIST <* .CNT 2>>>
+                   <SET N <+ .N 1>>)>>
+        .N>
 
 <ROUTINE MAGIC-DOOR-EXIT ()
         <COND (<HAS-ALL-CUBES?>
@@ -1571,6 +1586,7 @@ You drown as well.">)
                       <QUEUE I-WATER-RISING 3>)>)
               (<EQUAL? .RARG ,M-LEAVE>
                <REMOVE ,PLAYER>
+               <DEQUEUE I-WATER-RISING>
                <COND (<AND <NOT ,DEAD?>
                            <ONLY? ,ZIPPER ,HERE>
                            <ONLY? ,GIRGOL-SCROLL ,ZIPPER>
@@ -1589,9 +1605,9 @@ rocks and boulders">
                       <JIGS-UP
 ", again and again. Finally, you succumb.">)>)>>
 
-<GLOBAL RUINS-SCORE 25>
+<GLOBAL RUINS-SCORE:NUMBER 25>
 
-<GLOBAL TIME-SICK
+<GLOBAL TIME-SICK:STRING
 "As you leave, your consciousness is wrenched as though your memories
 were being torn apart. ">
 
@@ -1633,7 +1649,7 @@ were being torn apart. ">
                       <TELL "closed.">)>
                <CRLF>)>>
 
-<GLOBAL WATER-TABLE
+<GLOBAL WATER-TABLE:TABLE
        <PTABLE
 "You are in a small area not yet flooded."
 "The water has left only a tiny area dry."
@@ -1664,6 +1680,7 @@ imprisonment. A massive oak cabinet dominates one wall. ">
                <TELL-OPEN-CLOSED ,PAST-CABINET>
                <TELL-OPEN-CLOSED ,CELL-DOOR>)
               (<EQUAL? .RARG ,M-LEAVE>
+               <DEQUEUE I-PRISON-GUARDS>
                <REMOVE ,PLAYER>
                <COND (<AND <NOT ,DEAD?>
                            <NOT <FSET? ,PAST-CABINET ,RMUNGBIT>>
@@ -1725,11 +1742,11 @@ the shouts of guards and the rattle of weapons." CR>)
                <TELL ,PERIOD>
                <RFALSE>)>>
 
-<GLOBAL PAST-CELL-GUARDS-KILL-YOU
+<GLOBAL PAST-CELL-GUARDS-KILL-YOU:STRING
 "You exit into a tangle of guards, who promptly dispatch you for escaping
 and resisting arrest.">
 
-<GLOBAL DOOR-LOCKED "The door is closed and locked">
+<GLOBAL DOOR-LOCKED:STRING "The door is closed and locked">
 
 "CONNECTIVITY CUBE"
 
@@ -1790,7 +1807,7 @@ a similar gap." CR>)
        (SYNONYM QWORD)
        (FLAGS NDESCBIT)>
 
-<GLOBAL CUBE-LIST
+<GLOBAL CUBE-LIST:TABLE
        <PTABLE EARTH-CUBE <VOC "AQ" ADJECTIVE>
                WATER-CUBE <VOC "BQ" ADJECTIVE>
                AIR-CUBE <VOC "CQ" ADJECTIVE>
diff --git a/cards.txt b/cards.txt
new file mode 100644 (file)
index 0000000..703f68c
--- /dev/null
+++ b/cards.txt
@@ -0,0 +1,89 @@
+              SPELLBREAKER "ENCHANTER CARDS"
+------------------------------------------------------------
+                          Barsap
+                      Royal Magician
+                (Turned into a newt, 972)
+
+"The hardest trick is making it look easy."
+
+First performed before royalty, 850
+Appointed Royal Magician, 875
+Greatest skills: juggling, creative accounting 
+Guild membership revoked for dues evasion, 960 
+Last book read: "Magic with Mirrors"
+Double Fanucci handicap: 19
+------------------------------------------------------------
+                     Barbel of Gurth
+                    Arbiter, Diplomat
+
+"When I was a boy, I was told that any Enchanter could
+become a Guildmaster.  Now I'm beginning to believe it."
+
+Son of Delbor, advisor to Lord Dimwit Flathead
+Inventor of the golmac spell
+Guildmaster of Gurth City chapter since 933
+President of GAC (Gurth Arbiters Congress) 
+Greatest skills: arbitrating, speaking in toungues
+Responsible for restoration of high enchantmant dues
+Double Fanucci handicap: 42 
+------------------------------------------------------------
+                      Gustar Woomax
+                   Chronicler of Magic
+
+"If history can teach us the difference between good and bad
+magic, it can teach us anything."
+
+Author of "A Brief History of Magic," "Bizboz at Galepath,"
+       "Mage versus Archmage," "Revenge of the Dornbeasts,"
+       "The Granola Riots" (co-authored by Wilbar Memboob),
+       and "The Coconut of Quendor: Reality or Illusion?"
+Born in Greater Borphee, 880 
+Attended GUE Tech, 907-911
+Favorite author: Bizboz
+Greatest skill: none known
+Double Fanucci handicap: 620 
+------------------------------------------------------------
+                   Dimithio of Borphee
+                 "The Cheerful Sorcerer"
+        (Founder of the Borphee Enchanter's Guild)
+
+"Magic doesn't have to be great to be useful, nor does magic
+have to be useful to be great."
+
+Studied under Yooman, the Musican Mage
+Animal lover (adapted nitfol spell for egg-laying mammals)
+Tremendously well read and good natured
+Greatest skill:  fireworks displays
+Despised by Holnac the Cynic
+Double Fanucci handicap: 127 
+------------------------------------------------------------
+                     Forburn the Wily
+                 Double Fanucci Champion
+
+"The Encyclopedia Frobozzica calls Double Fanucci a 'game
+played with cards.'  I don't play games; I don't play
+anything."
+
+Never formally studied magic
+First won a spell book from an unsuspecting G.U.E. Tech
+       student in a 902 Fanucci match
+Raised the level of play in Double Fanucci championships
+Brought new meaning to the word "chiseler"
+Greatest skill: drawing Trebled Fromps
+Double Fanucci handicap: 0.01 
+------------------------------------------------------------
+                         Berknip
+                Oldest Active Necromancer
+                  (662-750, 841-present)
+
+"No one weeps for a necromancer."
+
+Survived by 7 children and 39 grandchildren in 750 G.U.E.
+       (he has since out-relived them)
+Greatest skill: assisting historical biographers
+Hobby: antiques (making and collecting)
+Inexplicably afraid of swords and powdered milk
+Vegetarian (adapted nitfol spell for raw oysters and crispy
+       whole fish)
+Double Fanucci handicap: unmeasurable
+------------------------------------------------------------
index 72ef08be448c5f32d5a2b9e5a4eeb22746031d53..9d580c2133d08593c777dc32aa178b0f90f8c670 100644 (file)
@@ -5,6 +5,17 @@
 <DIRECTIONS ;"Do not change the order of the first 8 without consulting MARC!"
            NORTH NE EAST SE SOUTH SW WEST NW UP DOWN IN OUT>
 
+<SYNONYM NORTH N>
+<SYNONYM SOUTH S>
+<SYNONYM EAST E>
+<SYNONYM WEST W>
+<SYNONYM DOWN D>
+<SYNONYM UP U>
+<SYNONYM NE NORTHEAST>
+<SYNONYM NW NORTHWEST>
+<SYNONYM SE SOUTHEAST>
+<SYNONYM SW SOUTHWEST>
+
 <GLOBAL HERE <>>
 
 <GLOBAL LIT <>>
 <CONSTANT DIR-DIR 2>
 <CONSTANT DIR-NAME 3>
 
-<ROUTINE DIR-BASE (DIR I O "AUX" (CNT 0) (L <GET ,DIR-TABLE 0>))
-        <REPEAT ()
-                <COND (<G? .CNT .L> <RFALSE>)
-                      (<EQUAL? <GET ,DIR-TABLE <+ .CNT .I>> .DIR>
-                       <RETURN <GET ,DIR-TABLE <+ .CNT .O>>>)
-                      (ELSE
-                       <SET CNT <+ .CNT 3>>)>>>
+<ROUTINE DIR-BASE (DIR I O "AUX" (L <GET ,DIR-TABLE 0>))
+        <DO (CNT 0 .L 3)
+            <COND (<EQUAL? <GET ,DIR-TABLE <+ .CNT .I>> .DIR>
+                   <RETURN <GET ,DIR-TABLE <+ .CNT .O>>>)>>>
 
 "global objects and associated routines"
 
@@ -188,7 +196,7 @@ Always return RFALSE (not handled) if you have resolved the problem."
 <OBJECT LIGHT
        (IN GLOBAL-OBJECTS)
        (DESC "light")
-       (SYNONYM LIGHT LIGHTS PILE)
+       (SYNONYM LIGHT LIGHTS PHOTONS)
        (ADJECTIVE PILE)
         (ACTION LIGHT-F)>
 
@@ -423,7 +431,7 @@ the desired direction." CR>)
        (IN GLOBAL-OBJECTS)
        (DESC "north wall")
        (SYNONYM WALL)
-       (ADJECTIVE NORTH N)
+       (ADJECTIVE NORTH)
        (ACTION WALL-F)
        (EXITS %,C-NORTH)
        (GENERIC GENERIC-RANDOM-F)>
@@ -432,7 +440,7 @@ the desired direction." CR>)
        (IN GLOBAL-OBJECTS)
        (DESC "east wall")
        (SYNONYM WALL)
-       (ADJECTIVE EAST BLANK)
+       (ADJECTIVE EAST BLANK)
        (ACTION WALL-F)
        (EXITS %,C-EAST)
        (GENERIC GENERIC-RANDOM-F)>
@@ -441,7 +449,7 @@ the desired direction." CR>)
        (IN GLOBAL-OBJECTS)
        (DESC "west wall")
        (SYNONYM WALL)
-       (ADJECTIVE WEST W)
+       (ADJECTIVE WEST)
        (ACTION WALL-F)
        (EXITS %,C-WEST)
        (GENERIC GENERIC-RANDOM-F)>
@@ -450,7 +458,7 @@ the desired direction." CR>)
        (IN GLOBAL-OBJECTS)
        (DESC "south wall")
        (SYNONYM WALL)
-       (ADJECTIVE SOUTH S)
+       (ADJECTIVE SOUTH)
        (ACTION WALL-F)
        (EXITS %,C-SOUTH)
        (GENERIC GENERIC-RANDOM-F)>
@@ -459,7 +467,7 @@ the desired direction." CR>)
        (IN GLOBAL-OBJECTS)
        (DESC "northeast wall")
        (SYNONYM WALL)
-       (ADJECTIVE NORTHEAST NE)
+       (ADJECTIVE NE)
        (ACTION WALL-F)
        (EXITS %,C-NE)
        (GENERIC GENERIC-RANDOM-F)>
@@ -468,7 +476,7 @@ the desired direction." CR>)
        (IN GLOBAL-OBJECTS)
        (DESC "northwest wall")
        (SYNONYM WALL)
-       (ADJECTIVE NORTHWEST NW)
+       (ADJECTIVE NW)
        (ACTION WALL-F)
        (EXITS %,C-NW)
        (GENERIC GENERIC-RANDOM-F)>
@@ -477,7 +485,7 @@ the desired direction." CR>)
        (IN GLOBAL-OBJECTS)
        (DESC "southeast wall")
        (SYNONYM WALL)
-       (ADJECTIVE SOUTHEAST SE)
+       (ADJECTIVE SE)
        (ACTION WALL-F)
        (EXITS %,C-SE)
        (GENERIC GENERIC-RANDOM-F)>
@@ -486,7 +494,7 @@ the desired direction." CR>)
        (IN GLOBAL-OBJECTS)
        (DESC "southwest wall")
        (SYNONYM WALL)
-       (ADJECTIVE SOUTHWEST SW)
+       (ADJECTIVE SW)
        (ACTION WALL-F)
        (EXITS %,C-SW)
        (GENERIC GENERIC-RANDOM-F)>
@@ -530,8 +538,12 @@ the desired direction." CR>)
                      (ELSE
                       <TELL
 "It's still there." CR>)>)
-              (<AND <VERB? PUT> <EQUAL? ,GROUND ,PRSI>>
-               <PERFORM ,V?PLANT ,PRSO>
+              (<AND <VERB? PUT>
+                    <EQUAL? ,GROUND ,PRSI>>
+               <COND (<EQUAL? ,PRSO ,WEED>
+                      <PERFORM ,V?PLANT ,WEED>)
+                     (ELSE
+                      <PERFORM ,V?DROP ,PRSO>)>
                <RTRUE>)
               (<VERB? CLIMB-UP CLIMB-ON CLIMB-FOO BOARD>
                <TELL ,WASTE-OF-TIME>)
@@ -551,9 +563,14 @@ the desired direction." CR>)
 
 <OBJECT WALLS
        (IN GLOBAL-OBJECTS)
-       (FLAGS NDESCBIT TOUCHBIT)
        (DESC "wall")
-       (SYNONYM WALL WALLS)>
+       (SYNONYM WALL WALLS)
+       (FLAGS NDESCBIT TOUCHBIT)
+       (ACTION WALLS-F)>
+
+<ROUTINE WALLS-F ()
+        <COND (<FSET? ,HERE ,RAIRBIT>
+               <TELL "What wall?" CR>)>>
 
 <OBJECT GLOBAL-GRUE
        (IN GLOBAL-OBJECTS)
index f0c87a738c50a8329cfebbcf99a7d46364a811c6..ba894bd808513a70a85cd649f9a288ce97e85c81 100644 (file)
--- a/guild.zil
+++ b/guild.zil
@@ -158,7 +158,7 @@ the south is the entry of the Guild Hall. ">
 efts, and salamanders. Toads and frogs hop excitedly about.">)
                      (ELSE
                       <TELL
-"There is a meeting of the Guildmasters going on. You are standing among
+"There is a meeting of the guildmasters going on. You are standing among
 a group of about ten sorcerers, each the master of an Enchanters Guild chapter
 somewhere in the land.">
                       <COND (<G? ,OCOUNT 0>
@@ -174,6 +174,7 @@ somewhere in the land.">
 'ORKAN ", one of your colleagues, says, \"Stay. Be quiet. Don't
 embarrass us.\"" CR>)
                             (<AND <VERB? SAY> <NOT ,PRSO>>
+                             <END-QUOTE>
                              <TELL
 'ORKAN " quiets you. \"Interruptions will only annoy them.\"" CR>)
                             (<AND <VERB? LISTEN>
@@ -528,10 +529,13 @@ CTHE ,SHADOW " snatches it greedily." CR>)
 "The frozen shadow is impervious to harm." CR>)
                             (ELSE <FREEZES-YOU>)>)
                      (<VERB? ESPNIS>
-                      <TELL
+                      <COND (<EQUAL? ,HERE ,TIME-STOPPED?>
+                             <TELL ,NOTHING-HAPPENS>)
+                            (ELSE
+                             <TELL
 "The shadow begins to nod off but with great effort resists and
 awakens. ">
-                      <FREEZES-YOU>)
+                             <FREEZES-YOU>)>)
                      (<VERB? YOMIN>
                       <TELL
 "You feel your own innermost desires, petty jealousies, and unworthy
@@ -544,6 +548,8 @@ the background in a disturbing way." CR>)
                      (<AND <VERB? TELL> ,FROZEN?>
                       <TELL "You cannot speak." CR>
                       <END-QUOTE>)
+                     (<VERB? EMPATHIZE>
+                      <TELL "You sense in return a blast of cold." CR>)
                      (<AND <NOT ,FROZEN?>
                            <G? ,SHADOW-COUNT 4>
                            <L? ,SHADOW-COUNT 8>>
@@ -648,7 +654,10 @@ you free it!" CR>)
                              <FREEZES-YOU>)>)
                      (<AND <VERB? PUT>
                            <EQUAL? ,PRSI ,HYPERCUBE>>
-                      <COND (<EQUAL? ,TIME-STOPPED? ,HERE>
+                      <COND (<EQUAL? ,PRSO ,ME>
+                             <PERFORM ,V?BOARD ,PRSI>
+                             <RTRUE>)
+                            (<EQUAL? ,TIME-STOPPED? ,HERE>
                              <COND (<SET F <FIRST? ,HYPERCUBE>>
                                     <TELL
 CTHE .F " is already there." CR>)
index 9eff25a1079183aea14a55b704ea10e2dfea02e2..1f09a43419cb22bba24b3ba3dce92bf2858bd84f 100644 (file)
@@ -5,7 +5,7 @@
 ;"GENERICS"
 
 <ROUTINE GENERIC-CUBE-F (TBL LEN
-                        "AUX" F (CNT 1) (LAST? <>) (CONT <>) CUBE?)
+                        "AUX" F (CNT 1) (CONT <>) CUBE?)
         <COND (<VERB? ASK-ABOUT TELL-ME-ABOUT COUNT>
                <GET .TBL .CNT>)
               (ELSE
@@ -50,7 +50,9 @@
               (ELSE ,RANDOM-CARPET)>>
 
 <ROUTINE GENERIC-HOLE-F (TBL LEN)
-        <COND (<EQUAL? ,HERE ,MAZE-2> ,OCTAGONAL-HOLE)
+        <COND (<OR <IN? ,OCTAGONAL-HOLE ,HERE>
+                   <EQUAL? ,HERE ,MAZE-2>>
+               ,OCTAGONAL-HOLE)
               (ELSE ,GLOBAL-HOLE)>>
 
 <ROUTINE GENERIC-RANDOM-F (TBL LEN)
@@ -338,7 +340,7 @@ construction it made, the figure approaches the center. ">
 "It grows smaller and smaller, and just before it disappears, the hypercube
 vanishes with a pop, and " THE ,MAGIC-CUBE " melts in your hand like an
 ice cube." CR CR
-"You find yourself back in Belwit Square, all the Guildmasters and even
+"You find yourself back in Belwit Square, all the guildmasters and even
 Belboz crowding around you. \"A new age begins today,\" says Belboz after
 hearing your story. \"The age of magic is ended, as it must, for as magic
 can confer absolute power, so it can also produce absolute evil. We may
@@ -449,6 +451,8 @@ head." CR>)
 <GLOBAL AWAKE -1>
 
 <ROUTINE I-TIRED ("AUX" (FORG <>))
+        <QUEUE I-TIRED 8>
+        <COND (<HELD? ,MAGIC-CUBE> <RTRUE>)>
         <COND (<G? ,LOAD-ALLOWED 10>
                <SETG LOAD-ALLOWED <- ,LOAD-ALLOWED 10>>)>
         <COND (<G? ,FUMBLE-NUMBER 1>
@@ -459,8 +463,6 @@ head." CR>)
                       <SETG SPELL-ROOM <- ,SPELL-ROOM 1>>)>
                <COND (<EQUAL? ,SPELL-ROOM 0>
                       <SET FORG T>)>)>
-        <QUEUE I-TIRED 8>
-        <COND (<HELD? ,MAGIC-CUBE> <RTRUE>)>
         <SETG AWAKE <+ ,AWAKE 1>>
         <COND (<G? ,AWAKE 8>
                <TELL
@@ -538,18 +540,23 @@ their appointment.">)
                       <QUEUE I-AVALANCHE -1>
                       <TELL CR
 "Tons of rock and dirt continue their downward plunge." CR>)>)>
-        <COND (<EQUAL? .TF? ,OGRE-BEDROOM ,OGRE-CAVE>
+        <COND (<AND <EQUAL? .TF? ,OGRE-BEDROOM ,OGRE-CAVE>
+                    <EQUAL? ,HERE ,OGRE-BEDROOM ,OGRE-CAVE>>
                <I-OGRE-KILLS-YOU T>)>
-        <COND (<EQUAL? .TF? ,PAST-RUINS-ROOM>
+        <COND (<AND <EQUAL? .TF? ,PAST-RUINS-ROOM>
+                    <EQUAL? ,HERE ,PAST-RUINS-ROOM>>
                <QUEUE I-WATER-RISING 3>
                <TELL CR
 "The water begins to rise again." CR>)>
-        <COND (<EQUAL? .TF? ,CASTLE>
+        <COND (<AND <EQUAL? .TF? ,CASTLE>
+                    <EQUAL? ,HERE ,CASTLE>>
                <COND (<EQUAL? ,SHADOW-COUNT 8>
                       <TELL CR
 "\"Fool!\" chortles the shadow." CR>)>
                <RTRUE>)>>
 
+<GLOBAL OGRE-MURDEROUS? <>>
+
 <ROUTINE I-OGRE-KILLS-YOU ("OPTIONAL" (GIRGOL? <>))
         <COND (<OR <TIME-FROZEN?>
                    ,SNEEZY?
@@ -557,6 +564,9 @@ their appointment.">)
                <QUEUE I-OGRE-KILLS-YOU 2>
                <RFALSE>)>
         <COND (<EQUAL? ,HERE ,OGRE-CAVE ,OGRE-BEDROOM>
+               <COND (<IN? ,PLAYER ,ZIPPER>
+                      <SETG OGRE-MURDEROUS? T>
+                      <RTRUE>)>
                <COND (<NOT .GIRGOL?> <CRLF>)>
                <TELL
 "The ogre, impatient with your presence and your impudent intrusion, ">
@@ -566,7 +576,7 @@ their appointment.">)
                <JIGS-UP>)>>
 
 <ROUTINE I-ESPNIS ()
-        <COND (<EQUAL? ,TIME-STOPPED? ,HERE>
+        <COND (<TIME-FROZEN?>
                <QUEUE I-ESPNIS 2>)
               (<NOT ,ESPNIS?> <RFALSE>)>
         <COND (<IN? ,ESPNIS? ,HERE>
@@ -596,12 +606,21 @@ tail again in the process." CR>)
                              <TELL
 "With a rather unsettling lack of uniformity, " THE .SF " returns
 to its former size.">
-                             <COND (<AND <IN? .SF ,WINNER>
-                                         <EQUAL? .SF ,WEED>
+                             <COND (<AND <EQUAL? .SF ,WEED>
                                          <FSET? ,WEED ,RMUNGBIT>>
-                                    <MOVE .SF ,HERE>
-                                    <TELL
-" It's too heavy to carry.">)>
+                                    <COND (<IN? .SF ,WINNER>
+                                           <MOVE .SF ,HERE>
+                                           <TELL
+" It's too heavy to carry.">)
+                                          (<EQUAL? <LOC .SF> ,BOTTLE>
+                                           <MOVE .SF <META-LOC ,BOTTLE>>
+                                           <REMOVE ,BOTTLE>
+                                           <TELL
+" It bursts the bottle!">)
+                                          (<EQUAL? <LOC .SF>
+                                                   ,MAGIC-CARPET
+                                                   ,RANDOM-CARPET>
+                                           <MOVE .SF <META-LOC .SF>>)>)>
                              <CRLF>)>)>)
               (ELSE
                <SETG SMALL-FLAG <>>
@@ -762,8 +781,12 @@ curtain above you. If you don't do something soon, you will die!" CR>)
                                <G? ,ROCK-SLIDE-COUNT 3>>>
                       <DEQUEUE I-AVALANCHE>
                       <SETG ROCK-SLIDE-COUNT 0>
+                      <COND (<IN? ,PLAYER ,ZIPPER>
+                             <TELL
+"Although you can't see or feel it, y">)
+                            (ELSE <TELL "Y">)>
                       <JIGS-UP
-"You are swept away down the cliff face by thousands of tons of rock.
+"ou are swept away down the cliff face by thousands of tons of rock.
 A huge cloud of dust blowing away down the valley is your only memorial.">)
                      (<EQUAL? ,HERE ,CLIFF-TOP ,CLIFF-MIDDLE ,CLIFF-BOTTOM>
                       <ROCKS-TUMBLING>)>)>>
@@ -816,11 +839,15 @@ A huge cloud of dust blowing away down the valley is your only memorial.">)
         <REPEAT ()
                 <COND (<NOT .F> <RETURN>)>
                 <SET N <NEXT? .F>>
-                <COND (<EQUAL? .F ,WATER-CUBE ,PLAYER ,GROUPER> T)
-                      (<OR <NOT <FSET? .F ,CONTBIT>>
+                <COND (<EQUAL? .F ,PLAYER ,GROUPER> T)
+                      (<AND <EQUAL? .F ,WATER-CUBE>
+                            <QUEUED? I-CUBE-SINKS>>
+                       T)
+                      (<OR <EQUAL? .F ,ZIPPER>
+                           <NOT <FSET? .F ,CONTBIT>>
                            <AND <FSET? .F ,OPENBIT>
                                 <PROB 75>>>
-                       <MOVE .F ,OCEAN-FLOOR>
+                               <MOVE .F ,OCEAN-FLOOR>
                        <FCLEAR .F ,NDESCBIT>
                        <COND (<EQUAL? ,HERE .RM>
                               <TELL
@@ -954,7 +981,9 @@ are open again." CR>)>)>)>>
 <ROUTINE I-ROC ()
         <COND (<EQUAL? ,HERE ,GUARD-TOWER>
                <SETG ROC-COUNT <+ ,ROC-COUNT 1>>
-               <COND (<G? ,ROC-COUNT 4>
+               <COND (<IN? ,PLAYER ,ZIPPER>
+                      <RFALSE>)
+                     (<G? ,ROC-COUNT 4>
                       <DEQUEUE I-ROC>
                       <ROC-GRABS-PLAYER>
                       <CRLF>
diff --git a/mage.hints b/mage.hints
new file mode 100644 (file)
index 0000000..efe92aa
--- /dev/null
@@ -0,0 +1,2187 @@
+@Style[Spacing 2 line, TabWidth 8 chars]
+@center{[Final Version - 9/30/85]
+
+InvisiClues (TM)
+
+The Hint Booklet for
+Spellbreaker}
+
+
+
+This booklet is copyrighted and all rights are reserved by
+Infocom, Inc. This document may not, in whole or in part,
+be copied, photocopied, reproduced, or reduced to any
+electronic medium or machine-readable form without prior
+consent, in writing, from Infocom, Inc. Willful violations
+of the Copyright Law of the United States can result in
+civil damages of up to $50,000 in addition to actual
+damages, plus criminal penalties of up to one year
+imprisonment and/or a $10,000 fine.
+
+@u[Spellbreaker] and @u[InvisiClues] are trademarks of Infocom, Inc.
+
+Copyright (c) 1985 Infocom, Inc.  All rights reserved.  Printed in USA.
+
+
+@MajorHeading(INTRODUCTION)
+
+What are @u[InvisiClues]?
+
+@u[Spellbreaker] is an expert-level interactive story. Although
+it is designed to allow players who are relatively
+inexperienced to see many of the puzzles, even expert
+players may find some of them difficult to solve without
+help. Even the best players playing the "easiest" games
+sometimes get stuck or just don't know what to do next. The
+purpose of @u[InvisiClues] is to help get you past such
+bottlenecks.
+
+The invisible hints are designed to progress from a gentle
+(or sometimes silly) nudge in the right direction to a full
+answer. The questions and section headings attempt to give
+away as little as possible. Usually the section heading is
+a relatively innocuous geographical marker, and some
+questions and answers for the puzzles will appear in two
+sections in slightly altered form. You should not assume
+that a question on a certain topic indicates that the topic
+even exists in the story. Also, the length of the responses
+may or may not mean anything. This booklet includes dummy
+questions and dummy clues to help confuse that issue.
+
+How to use this booklet.
+
+If you are stuck at some point in @u[Spellbreaker], find the
+question that most pertains to your problem. Uncap the
+marker and run it @u[once] over the first hint. The writing
+will appear in a second or two. If you're still stumped, go
+on to the next hint. (Remember to recap the marker when
+you're done to prevent it from drying out. By the way,
+these booklets are not immortal. @u[InvisiClues] that have been
+developed will start to fade after about six months.)
+
+For example:
+
+How can I get into the secret conference room?
+@enumerate{
+Perhaps you don't need to get in at all.
+
+Some magic spells work over a distance.
+
+If you use GILCH (astral travel) on yourself,
+you can pass through the walls taking only your
+mind, and listen to the meeting within.}
+
+Your marker contains more than enough fluid to develop the
+entire booklet. However, if your marker gets lost or dries
+out, you can order a replacement marker for a nominal fee.
+
+Once you've finished the story, try the things in the "For
+Your Amusement" section. Don't look at them before you've
+finished, though -- they may reveal too much about certain
+puzzles.
+
+@MajorHeading(TABLE OF CONTENTS)
+@Verbatim{
+The Council Chamber                            Page 0
+The Packed Earth Room                          Page 0
+The Temple                                     Page 0
+The Soft Room                                  Page 0
+The Water Room                                 Page 0
+The Air Room                                   Page 0
+The Dungeon                                    Page 0
+The Light Room                                 Page 0
+The String Room                                        Page 0
+The Changing Room                              Page 0
+The Good Room                                  Page 0
+The Plain                                      Page 0
+The Dark Room                                  Page 0
+The Volcano                                    Page 0
+The Vault                                      Page 0
+The Sand Room                                  Page 0
+The Magic Room                                 Page 0
+
+Stuff and Things                               Page 0
+Cube Details                                   Page 0
+Magic Details                                  Page 0
+Spells and Their Locations                     Page 0
+How the Points Are Scored                      Page 0
+For Your Amusement                             Page 0
+}
+
+@MajorHeading(The Council Chamber)
+
+
+Why are the guildmasters so angry at me?
+@enumerate{
+Listen and find out.
+
+They seem to think you and your fellow mages are
+responsible for the deterioration of magic.
+}
+
+Who is this "shadowy figure" who turned all of the other
+guildmasters into amphibians?
+@enumerate{
+The "shadowy figure" left the cloud in Belwit
+Square when it teleported away.
+
+The word "shadowy" is an indication of the
+figure's persona.
+
+You'll find out more about this "shadowy figure"
+as the story progresses...}
+
+
+Belwit Square is filled with orange smoke. How do I get rid
+of it?
+@enumerate{
+There are two ways you can do it.
+
+You can use a spell in your spell book that
+will do the trick.
+
+Try LESOCH.
+
+Or you can wait for the smoke to dissipate.}
+
+How do I get into the storied Manse?
+@enumerate{
+The guard at the door seems remarkably surly, no?
+
+Actually, you can't get into the Manse.}
+
+
+What's this cube I found?
+@enumerate{
+The story tells you that it's just a white
+featureless cube.
+
+Actually, it is completely featureless, but you
+can do more than use your normal senses.
+
+JINDAK before you pick up the cube and you'll see
+one feature of the cube.
+
+Then see the next question.
+}
+
+How do I get out of Belwit Square to get to the rest of the
+story?
+@enumerate{
+Have you examined all of the items you're
+carrying?
+
+Your spell book in particular.
+
+Did you notice anything that wasn't there before?
+
+The BLORPLE spell will "explore an object's
+mystic connections."
+
+If you haven't gotten the orange smoke in Belwit
+Square to dissipate then don't continue
+developing this question.
+
+JINDAK may indicate an object of interest.
+
+CAST BLORPLE on some of your items and see
+what happens.
+
+One item in particular has lots of "mystic
+connections" that need to be explored.
+
+That item is the featureless cube that remains
+after the orange smoke dissipates. BLORPLE THE
+FEATURELESS CUBE.
+}
+
+@MajorHeading(The Packed Earth Room)
+
+
+I just arrived in Packed Earth, and it's pitch black! What
+do I do?
+@enumerate{
+If you can't get light somehow, you're in big
+trouble!
+
+FROTZ any item you're carrying, or yourself.
+}
+I just arrived in Packed Earth; where did the cube go?
+@enumerate{
+Actually, the cube didn't go anywhere.
+
+You are, in a magical sense, within the cube.
+
+Don't worry, you'll get it back when you leave
+the room.
+}
+
+Why can't I force my way through the north exit?
+@enumerate{
+Because it is a magic exit.
+
+It's very strong magic, so you need very special
+conditions to  be able to get through this exit.
+
+More on this later...
+}
+
+I went west from Packed Earth to get to Cave Entrance, but
+going east from Cave Entrance doesn't get me back to Packed
+Earth. What happened? How do I get back to Packed Earth?
+@enumerate{
+Packed Earth is a "magic" room. It is not
+connected to other rooms in a physical way.
+
+To get back to Packed Earth, go there the same
+way you got there in the first place.
+
+BLORPLE THE CUBE.
+}
+
+I've gotten past the ogre, but I can't take anything from
+his lair.
+@enumerate{
+You must have used GIRGOL to pass the ogre.
+
+Bad idea. Everything is frozen in place and the
+ogre kills you as soon as the time stop wears
+off. There's another solution to the puzzle. See
+the next question.
+}
+How do I get past the ogre?
+@enumerate{
+Have you listened to the sounds the ogre makes?
+
+Have you YOMINed the ogre?
+
+The ogre has a bad case of hay fever.
+
+If there was a drugstore nearby you could help
+the ogre out.
+
+But since there's no such thing in this story,
+you'll have to take advantage of this weakness.
+
+Do you have anything that could aggravate his
+allergy?
+
+If not, then you'll have to solve another puzzle
+first.
+
+What about the weed in the Meadow (south from the
+Soft Room)?
+
+What? Shaking the weed at the ogre didn't affect
+the ogre very much? Perhaps if the weed was
+bigger.
+
+Must this one be spelled out for you?
+
+THROCK the weed.
+
+Make sure to plant the weed first, though.
+
+PLANT THE WEED THEN THROCK IT (in Ogre Cave or at
+Cave Entrance).
+}
+
+What is the significance of the box?
+@enumerate{
+JINDAK before you pick it up. It's magic.
+
+You can identify any cube by putting it into the
+box and looking at the design that appears on the
+box.
+
+The box has another feature. More on this later
+if you can't figure it out by then.
+}
+
+Help! I have all these featureless white cubes and I'm
+having trouble keeping them straight. What can I do?
+@enumerate{
+You can use the box to identify the cubes. See
+above.
+
+You probably could find a way to label the
+cubes.
+
+If you have the burin, you can WRITE "WORD" ON
+THE CUBE. From then on you can refer to the
+"word" cube.
+}
+What is the significance of the avalanche?
+@enumerate{
+It keeps people like you from reaching the hut at
+the top of the mountain.
+
+It kills people not smart enough to get out of
+its way.
+}
+
+How do I get to the small building at the top of the
+mountain?
+@enumerate{
+You can't go up without starting an avalanche...
+
+...but you don't have to die if the rocks are
+frozen in place.
+
+If you haven't found the GIRGOL scroll,
+don't continue developing clues in this question.
+
+If you've already used up the GIRGOL scroll in
+another place, you won't be able to get up the
+mountain. Bad move.
+
+CAST GIRGOL.
+
+If you still can't go up, try casting GIRGOL when
+the rocks are more spread out.
+
+Try starting an avalanche before casting GIRGOL.
+
+Start the avalanche, then GIRGOL when the rocks
+form almost a continuous curtain. Then go up.
+}
+
+Where can I find some mountaineering equipment?
+@enumerate{
+If you haven't GIRGOLed the cliff, don't
+continue.
+
+There is no mountaineering equipment. There's a
+way to freeze the rocks in place when they're not
+so jumbled. See the previous question.
+}
+
+How do I start an avalanche at Cliff Top?
+@enumerate{
+You must be crazy!! Why would you want to do a
+thing like that???
+
+Well, if you really want to, type MOVE A ROCK or
+PUSH A ROCK.
+}
+
+Why won't the hermit let me take his cube?
+@enumerate{
+ASK THE HERMIT ABOUT THE CUBE.
+}
+
+How do I get the hermit to give me the cube?
+@enumerate{
+You can't bribe the hermit with food or buy the
+cube from him with the coin, so you'll have to
+find another way to get the hermit to let you
+have the cube.
+
+Have you noticed how poorly built the hut is? It
+needs the cube as a keystone to hold it up.
+
+You could fix up the hut a little.
+
+A spell could help here.
+
+If you haven't been to the roc's nest, you don't
+have that spell.
+
+If you've found the CASKLY spell, now is the time
+to use it.
+
+CASKLY THE HUT THEN TAKE THE CUBE.
+}
+
+What can I do to get by the serpent?
+@enumerate{
+The serpent is huge, and makes a complete loop
+(having swallowed its own tail). It fills the
+corridor. You probably can't force or sneak your
+way by it.
+
+If you haven't gotten past the ogre, don't go any
+further.
+
+You'll have to find a way to shrink the serpent.
+
+Have you found the LISKON spell yet?
+
+LISKON THE SERPENT.
+}
+
+What is the zipper?
+@enumerate{
+Have you tried opening and closing it?
+
+Or JINDAKing it?
+
+The zipper is really a huge container...
+
+...which safely stores anything in a different
+dimension.
+
+It's bigger on the inside than on the outside.
+}
+
+Is there anything else interesting about the zipper?
+@enumerate{
+It's hard to tell. It's dark inside the zipper.
+
+There are three ways to find out if anything's in
+there.
+
+Try putting a FROTZed item into the zipper for
+light, then looking.
+
+Or REACH INTO THE ZIPPER.
+
+Or CLIMB INTO THE ZIPPER THEN LOOK. You can fit.
+}
+
+Why can't I go down through the muddy hole?
+@enumerate{
+Well, the story tells you that "you pull back"
+when you realize that there isn't solid ground
+down there.
+
+But, if you're persistent (or foolhardy)...
+
+...why not try going down again?
+}
+
+How do I get down off a roc?
+@enumerate{
+You can't. You get down off a goose.
+
+You can't. Relax and enjoy the ride.
+}
+
+How do I get the cube from In Roc Nest?
+@enumerate{
+The mother roc is very protective of her egg. You
+won't be able to get near the cube while she's in
+the nest.
+
+There is a way to get to the roc's nest without
+being taken there by the mother roc.
+
+If you haven't been to the Air Room, leave the
+nest and work on another puzzle for now. Don't
+forget to take the stained scroll while you are
+here; it's useful.
+
+Have you managed to get the magic carpet in the
+bazaar? If not, get it.
+
+You can fly to the roc's nest on the magic carpet.
+
+Is the mother roc still there? There's a time
+when you can get to the roc's nest without the
+mother roc being home.
+
+Have you been to the Guard Tower above the
+Dungeon? If not, don't continue.
+
+The speck on the horizon is the mother roc.
+
+If you fly on the magic carpet to the roc's nest
+(four turns to the west from the tower) the
+mother roc will be away from the nest, searching
+for food. Now's your chance to get the cube.
+}
+
+Holy farmer's breakfast! The roc's egg hatched! What do I
+do????
+@enumerate{
+This time, you're really outmatched. Don't fight
+the baby roc.
+
+All you can do is run away.
+
+You have one turn to get away, so if you don't
+have any means of immediate escape, you might as
+well type KILL ME.
+}
+
+How do I get out of the roc's nest?
+@enumerate{
+It's a long way down.
+
+You can BLORPLE out.
+
+You can fly back on your magic carpet, but only
+if you know the location of the Guard Tower.
+}
+
+@MajorHeading(The Temple)
+
+
+What do I do with the idol?
+@enumerate{
+Have you examined it?
+
+It's kind of difficult from down here.
+
+Try climbing the idol.
+
+Then try examining its features...
+
+...such as its eye or mouth.
+}
+
+How do I get the eye?
+@enumerate{
+Why not use a tool to help you out?
+
+Try PRY THE OPAL WITH THE BURIN or PRY THE EYE
+WITH THE KNIFE.
+}
+
+I've found a cube here, but I can't take it.
+@enumerate{
+It's because your hand is too big or, if you
+LISKONed yourself, your arm is too short to fit
+between the fangs and reach the cube.
+
+The idol is solid basalt, so you can't break into
+its mouth or REZROV it open.
+
+Maybe you can get the rodent idol to open its
+mouth.
+
+You'll probably have to MALYON THE IDOL.
+
+At what time is your mouth open widest?
+
+Right. When you're yawning.
+
+Try to CAST ESPNIS ON THE IDOL to make it yawn.
+
+Basalt idols can't yawn, so you'll need to MALYON
+THE IDOL before you CAST ESPNIS ON IT. This will
+get it to yawn.
+}
+
+I've gotten the idol to "open up" to me, but it "closed"
+again. What do I do?
+@enumerate{
+He who hesitates isn't always lost.
+
+Wait for one turn after casting MALYON before
+casting ESPNIS. This will catch the idol in a
+full cheek-stretching yawn.
+}
+
+@MajorHeading(The Soft Room)
+
+
+How can I get through the west exit?
+@enumerate{
+See the north exit question for Packed Earth.
+}
+
+What is the significance of the rabbit?
+@enumerate{
+The author of the story is fond of rabbits, so he
+put one in the meadow.
+
+He is fond of various other creatures as well.
+}
+I followed the rabbit down into the rabbit hole. What do I
+do with the cakes I found?
+@enumerate{
+Wait a minute. This isn't @u[Alice in Wonderland]...
+
+...or even @u[Zork II].
+
+Phony questions deserve phony answers!
+}
+How do I get the weed out of the ground? It's stuck.
+@enumerate{
+You can cut it with the shears.
+
+If you do that you won't be able to use the weed
+later. The shears are a trap. There is another
+way to get the weed.
+
+Just PULL THE WEED again. It will come out the
+second time with its roots intact.
+}
+Why doesn't the weed grow?
+@enumerate{
+Perhaps conditions in the vicinity aren't
+optimal, even when a THROCK is cast.
+
+Plants need water, light, and nutrients to grow.
+
+Have you tried planting the weed?
+}
+
+@MajorHeading(The Water Room)
+
+
+Oh no!! Some of my possessions got damaged when I went
+south! What can I do??
+@enumerate{
+There are two ways to prevent your spell book and
+scrolls from being ruined by water and one way to
+fix them after the fact.
+
+If you have CASKLY and BLORPLE memorized, you can
+BLORPLE out of the wet area, then CASKLY your
+book or scroll back to perfection. If you don't
+have them learned, you have to RESTORE.
+
+You can leave your items behind and come back to
+pick them up later. Don't forget to learn BLORPLE
+so you can come back to them.
+
+Or you can put your spell book and any scrolls
+into the zipper, then close it before you enter
+the water. You still need to learn BLORPLE
+because you can't get your spell book in order to learn
+spells without ruining your spell book.
+}
+
+How can I stop the grouper from eating my cube?
+@enumerate{
+You could TAKE THE CUBE before the grouper can eat it...
+
+...but then the grouper eats the bottle...
+
+...and you need the bottle to finish the story.
+
+Can you think of anything of yours that it might
+rather eat?
+
+Did you pick up the fish or bread when you were
+in the Guild Hall?  If so, skip the next clue.
+
+You can get back there if you die and then go
+north from the Boneyard. Type KILL ME.
+
+If you have fish or bread, drop it when you first
+arrive in mid-ocean...
+
+... then you can get the bottle and the cube.
+
+Take the cube first. It's sinking while the
+bottle is floating.
+}
+
+What's so special about the bottle, anyhow?
+@enumerate{
+Ever heard of a message in a bottle?
+
+Well, that phrase applies here. OPEN THE BOTTLE.
+
+But make sure you're on dry land! Otherwise
+you'll ruin the contents!
+}
+
+Can I do anything useful with the grouper?
+@enumerate{
+Yes.
+
+Unless you haven't found the Dungeon Cell.
+
+Have you found the moldy book? If so, you
+might have a spell to cast on the grouper.
+
+SNAVIG THE GROUPER and go DOWN.
+}
+
+I found another cube! But I can't get it. What should I do?
+@enumerate{
+Wait until you "become yourself" again...
+
+...then get the cube and swim upward. Don't
+forget the stuff you dropped when you turned into
+a grouper.
+
+But don't hesitate or you'll drown!
+}
+How do I get up through the trap door in the Oubliette?
+@enumerate{
+You can REZROV it open. But you still can't reach
+it.
+
+Maybe you could reach it if the water level were
+higher?
+
+Then again, the pipes are too big to block with
+anything. You need magic to reach the top.
+
+Unless you've been to the Air Room, don't
+continue.
+
+There is an item off the Air Room that will help
+you go up.
+
+It's a spell, not the carpet.
+
+You should protect your spell book since you're
+going to be swimming in water again. This is
+becoming a habit.
+
+TINSOT WATER to freeze the channel to raise the
+water level.
+
+AGAIN. The first time didn't completely freeze it
+since the water is running so quickly.
+
+You can't quite reach the top. If you only had a
+platform to float on?
+
+All your items sink, but ice doesn't.
+
+TINSOT THE WATER to create an ice floe.
+
+Now climb on the ice floe, then go up through the
+trap door.
+}
+
+Is there anything to do with the narrow channel?
+@enumerate{
+You can do something with it to reach the trap
+door. See the previous question.
+
+Have you tried to reach into either pipe?
+
+If so, you'll know that the pipes extend quite a
+ways in.
+
+It would be nice to be able to find out what goes
+on in there.
+
+A spell will help.
+
+If you haven't gotten the bottle from mid-ocean,
+don't go on.
+
+LISKON ME. ENTER OUTFLOW PIPE.
+
+Did you remember to keep your spell book
+protected again?
+}
+
+I've found a moss-covered cube. How do I get it?
+@enumerate{
+Type GET CUBE.
+}
+
+@MajorHeading(The Air Room)
+
+
+How can I get off the Glacier without dying?
+@enumerate{
+There is no direction that is safe.
+
+But you can BLORPLE off.
+}
+
+Can I get a carpet from the merchant?
+@enumerate{
+What do you think?
+
+Yes.
+}
+
+How do I get a carpet?
+@enumerate{
+There's no such thing as a free carpet.
+
+Perhaps you can get an idea of the going price
+for a carpet by consulting your Frobozz Magic
+Magic Equipment Company catalog.
+
+You can bargain by offering increasing numbers of
+zorkmids until he agrees on a price.
+
+If you don't start at 100 zorkmids or more and
+increase by at least 50 zorkmids per offer, the
+merchant will think you're trying to cheat him.
+
+If you agree on a price above 500 zorkmids, you
+will have to offer him the opal instead of the
+coin, as the coin is only worth 500 zorkmids.
+
+If you agree on a price of 500 zorkmids, you can
+give him the coin.
+}
+
+Hey! I didn't get the carpet I wanted!
+@enumerate{
+Did you indicate your interest in the blue carpet
+before he sold it to you, by ASKing MERCHANT
+ABOUT BLUE CARPET, or offering something to the
+merchant for the blue carpet?
+
+If you didn't, go back and try that.
+
+Even so, you can see that the merchant is a very
+slippery fellow.
+
+If you GET BLUE CARPET or ASK MERCHANT FOR BLUE
+CARPET or GIVE RED CARPET TO MERCHANT after he
+gives the wrong one to you, he'll give you the
+right one.
+}
+
+What does the red carpet do?
+@enumerate{
+Nothing, it's shabby and nonmagical.
+
+[This space intentionally left blank.]
+
+[This space intentionally left blank.]
+}
+
+What does the blue carpet do?
+@enumerate{
+Have you looked under it?
+
+Have you JINDAKed it?
+
+If so, you'll know that it's a magic carpet.
+
+If you SIT ON THE BLUE CARPET and then FLY UP,
+you'll see how it works.
+}
+
+@MajorHeading(The Dungeon)
+
+
+How do I open the cabinet?
+@enumerate{
+You could try unlocking it, if you have a key.
+
+No luck, eh? You could try smashing it.
+
+You're a thinker, not a brute-force, smelly-armored
+adventurer.
+
+Try a spell.
+
+REZROV THE CABINET.
+}
+What use is a moldy book?
+@enumerate{
+You could try to sell it to a used book dealer.
+
+You could wait a while and hope it dries out.
+
+Perhaps there's a spell to improve its imperfect
+condition.
+
+CASKLY THE MOLDY BOOK.
+}
+What is the speck on the horizon?
+@enumerate{
+What speck? Perhaps your glasses are dirty.
+
+No glasses, huh?
+
+Just wait, you'll find out.
+
+It won't even hurt.
+
+Much.
+}
+I'm in the Boneyard and I didn't die. What happened?
+@enumerate{
+Maybe you died and didn't notice.
+
+No, you BLORPLEd the cube that leads to the
+Boneyard. There's more than one way to skin a
+cat.
+}
+
+@MajorHeading(The Light Room)
+
+
+I don't see anything of value here. Is there?
+@enumerate{
+There's a volcano erupting. The scientific interest
+alone should keep you excited.
+
+Oops! What was that?
+}
+Yipes! That lava fragment almost hit me. How do I keep
+from getting hit by another flying fragment?
+@enumerate{
+Don't worry, there'll only be one.
+}
+How do I get the fragment?
+@enumerate{
+You could take it.
+
+Didn't work? Too hot? Maybe it'll cool in time.
+
+Didn't cool? You could try cooling it.
+
+There are two ways to do that. One is mundane,
+the other magical.
+
+The mundane way is to pour some water on the
+fragment. Of course, you should have a bottle
+full of water if you expect to do that.
+
+The magical way is to TINSOT THE FRAGMENT. Of
+course, you must have the TINSOT spell first.
+}
+
+@MajorHeading(The String Room)
+
+
+Who is Belboz?
+@enumerate{
+Type WHO IS BELBOZ.
+}
+I don't see anything of value at the Enchanter's Retreat. Is
+there?
+@enumerate{
+Perhaps you can get answers to some of your
+questions.
+
+Perhaps Belboz will be willing to help you if you
+can convince him you are in need.
+}
+How do I know the answer to the question?
+@enumerate{
+Look it up on your Enchanters Cards that came
+with your package.
+
+If you don't have them, you can order a new set
+from Infocom with your proof of purchase.
+
+If you bought the hint booklet and not the game,
+that's a shame. We're not going to tell you the
+answer in the hint booklet.
+}
+
+@MajorHeading(The Changing Room)
+
+
+Of what significance is the filigreed carving of a compass
+rose?
+@enumerate{
+We are a computer software company, not art
+critics.
+
+The carving is a decorative hint of things to
+come.
+
+Have you found a real compass rose yet?
+
+You can find the real compass rose in the Bare
+Room, north of the Changing Room.
+
+The carving is so well crafted, it might almost
+be a mold for the real compass.
+
+PUT THE ROSE IN THE CARVING. Then see what
+happens.
+}
+How do I get out of the Octagonal Room?
+@enumerate{
+You shouldn't leave anything important behind.
+
+You should have brought the compass rose with you.
+
+If not, you can still BLORPLE out, go back to the
+Carving Room, and retrieve the compass rose.
+
+Putting the compass rose in the carving again
+"recharges" it.
+}
+Why are some of the runes silver and some lead?
+@enumerate{
+As silver is a precious metal, there is probably
+something special about the walls with silver
+runes.
+
+Have you tried fiddling with the runes, or
+touching them?
+
+Did you bring the compass rose with you from the
+Carving Room?
+
+TOUCH THE ROSE TO a silver runed wall (other
+than the north wall) such as THE WEST WALL.
+}
+
+Why are some of the arms of the compass rose silver and some
+lead?
+@enumerate{
+The north arm of the rose turned to lead when
+the hole appeared in the north wall of the
+Carving Room.
+
+If you haven't done anything successful (gotten
+anything to happen/change) in the Octagonal
+Room, don't read on.
+
+Have you noticed that whenever you open a hole
+in the wall, the corresponding arm of your
+compass rose changes to lead?
+
+Q: What is better than a compass that tells you
+where to go?
+
+A: A compass that tells you where you've been!
+}
+
+
+Something's changed in the Octagonal Room, but I still don't
+know WHAT THE *#(?$)@@ IS GOING ON?!!
+@enumerate{
+Each time you squeeze through an octagonal hole,
+you go to a new room, NOT to the same room with
+changed runes.
+
+This puzzle is a symmetrical maze; each room has
+a slightly different description. See the next
+question for a full explanation.
+}
+
+I don't know, I don't know, I just don't know.
+@enumerate{
+This is it. Read the following ONLY if you are
+completely defeated.
+
+The Octagonal Maze is a three by three
+"square" of adjoining Octagonal Rooms.
+
+You can go only through walls with silver runes,
+and only if the corresponding arm of the compass
+rose is silver. In other words, you can go in
+any direction only once. (See question
+"arms/silver/lead", clue 3, above.)
+
+Within each room, any wall that borders another
+interior wall has a silver rune; each wall that
+faces out of the "square" has a lead rune. There
+are three exceptions: in the Central room, only
+the north, east, south and west runes are silver;
+in the Southeast room, the south wall is silver
+(since it leads back to the Carving Room); in the
+North room, the west rune is gold.
+
+The Carving Room (or Maze Antechamber) leads you
+north to the Southeast room of the maze,
+transmutating the north arm of the compass rose.
+Therefore, you cannot go north again (see 3,
+above). The cube you seek is in the Northwest
+room of the maze. You can enter this room only
+from the North room (work out the logic for
+yourself). See the next question for how to cross
+that bridge.
+
+There are four possible routes to the north room
+of the maze, all using the compass rose, of
+course:
+
+@enumerate{
+W, then NW, then NE.
+
+NW, then W, then NE.
+
+W, then NE, then NW.
+
+Actually, there are only three.
+}}
+I've found a gold rune! What do I do now?
+@enumerate{
+You can't do anything to the gold rune.
+
+Maybe you can open the plug.
+
+REZROV THE PLUG.
+}
+@MajorHeading(Good Room)
+
+I've done everything I can think of, and I still can't get
+to the Dragon cube!
+@enumerate{
+Don't read the following if you are not
+completely stumped. This is the complete
+unabridged unexpurgated solution and explanation
+to the whole puzzle.
+
+In fact, some question has been raised whether
+we should tell you at all.
+
+Our censors say not to.
+
+On the other hand, you did pay good money for this,
+so you are entitled to an answer.
+
+On the third hand, there isn't even a Dragon
+cube in this story, so if you are looking for an
+answer for it, you've got the wrong hint booklet.
+}
+
+@MajorHeading(The Plain)
+
+How can I get the green eyed rock to help me?
+@enumerate{
+Have you tried getting on it and then ordering
+it around?
+
+What is the green eyed rock most interested in
+... besides itself?
+
+Food.
+
+ASK THE GREEN EYED ROCK ABOUT FOOD.
+}
+How do I get what the rock wants?
+@enumerate{
+You may have something in your possession that
+contains phosphorus.
+
+Igneous rock.
+
+If you haven't got anything that fits that description,
+you might try checking out the grouper.
+
+Find a lava fragment.
+
+Give the fragment to the rock and then climb onto
+it.
+}
+How do I get to the brown eyed rock?
+@enumerate{
+Your first step is to map the plain.
+
+The northwest corner, or lack of it, is the only
+irregularity.
+
+It's the key to the puzzle.
+
+Once you maneuver the green eyed rock through the
+diagonal, you can trap the brown eyed rock. In chess,
+this is called "gaining a tempo."
+
+If you get close enough, the brown eyed rock will
+become mesmerized by the presence of the green
+eyed rock.
+}
+How do I get the cube from the brown eyed rock?
+@enumerate{
+If you aren't right next to the brown eyed rock,
+go no further.
+
+It's easier than you think.
+
+Just jump onto the brown eyed rock and take the
+cube.
+}
+
+@MajorHeading(The Dark Room)
+
+
+I'm in a dark room. How do I get out?
+@enumerate{
+Have you looked for an exit?
+
+It's too dark to see an exit. Maybe you should
+try going in various directions.
+
+Remember, there are ten possible directions.
+
+Going up will reveal one of those exits that "you
+can't seem to force your way through."
+
+Going down is the normal way out.
+}
+Okay, I'm out of the dark room, but it's still dark. What's
+wrong?
+@enumerate{
+Light doesn't behave normally here.
+
+Your FROTZ spell won't behave normally here
+either.
+
+Have you gone down from the Dark Cave yet?
+
+This is "grue heaven," a place ideally suited for
+grues, as all light is subdued at best and stays out
+of the way of the creatures.
+}
+I can't get past the grues. Help!
+@enumerate{
+Perhaps you would have better luck if you were
+less conspicuous.
+
+When in Rome...
+
+In the Grue Cave, SNAVIG A GRUE.
+
+Of course, carrying a light when you do this will
+have bad consequences.
+
+If you are a light source, you will have to
+extinguish yourself first.
+
+But you should leave a light source in the Dark Cave
+to prevent the grues from getting you as you blunder
+around in the dark.
+}
+How do I keep from waking the baby grue?
+@enumerate{
+Did you get the blanket from the jail cell?
+
+Did you get the bottle of grue's milk from the
+refrigerator?
+
+What blanket? What bottle? What refrigerator?
+
+What baby grue? You're in the wrong grue lair.
+
+You're even in the wrong hint booklet!
+}
+I keep dying in the light pool!
+@enumerate{
+This is not a very safe place for a grue to be.
+
+A prudent grue would get out of there pretty
+quickly.
+
+There's a way out of the pool other than back up
+to the cave.
+
+There's a nice pillar in front of you.
+
+CLIMB THE PILLAR.
+}
+
+@MajorHeading(The Volcano)
+
+
+How do I get back to the Volcano Base from the Volcano?
+@enumerate{
+The same way you got there before.
+
+This is the same volcano, but you can't get there
+from here directly.
+}
+What is that outcropping?
+@enumerate{
+It's an outcropping.
+
+It's made of something that has a very high
+melting point.
+
+Isn't it frustrating that you can't get to it?
+
+If you LOOK AT OUTCROPPING, you might want to get
+there even more.
+}
+How do I get to the outcropping?
+@enumerate{
+You do have a magic carpet; you could try to fly
+there.
+
+But be sure to SAVE before you try it.
+
+You could try to TINSOT THE CARPET to protect it
+from the extreme heat.
+
+The magic carpet isn't the answer.
+
+Have you tried to build a bridge from all the
+cubes you've collected? You might be able to
+freeze them together...
+
+It won't work! You're a magician, not an
+engineer! Bridges aren't the answer!
+}
+How do I avoid the heat of the lava?
+@enumerate{
+Any sufficiently arcane magic is
+indistinguishable from technology.
+
+There must be a magic item or spell that would
+help.
+
+Have you ever wondered about those exits from the
+cube rooms that don't seem to be open?
+
+You should figure out how you can use the gold
+box. It does have an interesting property that
+you might be able to use. Try leaving it behind.
+
+Try this sequence:  Get your favorite cube. Put
+it into the box. Remove the cube from the box.
+
+Toss the box onto the outcropping. Now BLORPLE the
+cube you just removed from the box. Try
+something different: go through the cube room
+exit that you couldn't go through before. (For
+example, the East exit is the magical exit from
+the Water Room.)
+
+Surprise! If you did everything right, you
+should have been able to get through the magical
+exit, and you now should be standing on the
+outcropping!
+
+Don't forget to take the cube once you get there.
+}
+How can I get off the outcropping now?
+@enumerate{
+How about a BLORPLE?
+}
+
+@MajorHeading(The Vault)
+
+What use is the treasure?
+@enumerate{
+[This space intentionally left blank.]
+
+None.
+}
+How do I get the vault door open?
+@enumerate{
+Try REZROVing it.
+
+If this doesn't work, then your REZROV spell
+isn't strong enough. You have to find some way of
+augmenting it.
+
+There's no YONK spell in this story.
+
+You can't augment your REZROV spell unless you've
+found the outcropping and gotten to it. Don't read
+any further if you haven't gotten there yet.
+
+Did you notice the feeling of power when you
+picked up the cube from the outcropping?
+
+If you have that cube in your possession, then
+REZROV will open the vault door.
+}
+
+I have a pile of junk in my inventory. How did that get there?
+@enumerate{
+Do you notice what's missing in your inventory?
+
+The "treasure" turned into junk when you left the
+Inner Vault by BLORPLing.
+
+Why are you collecting treasure anyway? You're
+supposed to be collecting cubes in order to save
+the world.
+}
+What happens to all the cubes I took from the Outer Vault?
+@enumerate{
+You can never leave the Outer Vault with a
+BLORPLE spell without losing all the cubes you
+picked up there.
+
+However, if you BLORPLE one of the Outer Vault
+cubes and don't end up in the Nondescript Room,
+you'll get back the cube you BLORPLEd when you
+leave that room as you normally do.
+}
+
+What's going on in here?
+@enumerate{
+Only one of the cubes is the "real cube," and
+the rest are magical fakes.
+
+You're supposed to get the real cube and BLORPLE
+out of the Outer Vault with it.
+
+If you BLORPLE a fake cube you end up in a
+Nondescript Room.
+
+The real cube changes position each time you
+enter the Outer Vault.
+
+You can't SAVE and RESTORE to solve this puzzle
+by brute force. Isn't that nasty?
+}
+
+How do I prevent the alarm fairy and guards from showing up?
+@enumerate{
+You can't.
+
+If you cast a REZROV spell in the Outer Vault
+they will show up immediately.
+
+Otherwise they will show up after a predetermined
+number of spells cast.
+
+The number is three, unless you brought the
+treasure into the Outer Vault with you, in which
+case it is two. It can take three spells to
+determine the right cube, so it's best to leave
+the treasure behind, since you don't need it. No
+doubt it was placed there to trip up thieves.
+
+Also, putting a cube into the gold box counts as
+a spell, as the box works by magic.
+}
+How do I get past the guards and down the hallway out of the
+Bank?
+@enumerate{
+You can't get past the guards.
+
+Don't even try spells. Well, try some, just for
+fun.
+}
+How do I find out which cube I want?
+@enumerate{
+A spell will help you identify the correct cube.
+But you only have three spells (maximum) to do
+it. Then the alarm fairy and the guards show up.
+
+The spell isn't BLORPLE, it's JINDAK!
+
+JINDAK when you first enter the room. You'll
+notice something unusual about the two piles.
+
+The "real cube" doesn't glow at the same
+intensity as the fake cubes. But...
+
+...it could be brighter or dimmer.
+
+You have enough time for only two more JINDAKs
+(three in all) before you have to grab the
+correct cube and BLORPLE it out of here.
+
+This is a variation of a classic coin-weighing
+puzzle.
+
+To get the correct cube from the Outer Vault,
+enter the Outer Vault without the treasure. Have
+all your items in the zipper so you can easily
+move cubes around. Have JINDAK memorized thrice
+and BLORPLE memorized once. Develop clue 9 and
+follow the directions.
+
+The first JINDAK should be done with four cubes
+on each pile. TAKE X1, X2, X7, X8. JINDAK. (X3,
+X4, X5, X6 on the first pile. X9, X10, X11, X12
+on the second pile.) If the piles are even then
+develop clue 10. If the piles are uneven, notice 
+which pile is brighter, then develop clue 13.
+
+TAKE X3, X4. PUT X1, X2 IN THE FIRST PILE.
+JINDAK. (X1, X2, X5, X6 on the first pile. The
+second pile remains the same.) If the piles are
+even then develop clue 11. If the piles are uneven,
+then develop clue 12.
+
+TAKE X1. PUT X7 ON THE FIRST PILE. JINDAK. (X7,
+X2, X5, X6 on the first pile. The second pile
+remains the same.) If the piles are even then
+BLORPLE X8. If the piles are uneven then TAKE X7.
+BLORPLE IT. Now develop clue 17.
+
+TAKE X1. PUT X7 ON THE FIRST PILE. JINDAK. (X7,
+X2, X5, X6 on the first pile. The second pile
+remains unchanged.) If the piles are even then
+BLORPLE X1. If the piles are uneven then TAKE X2.
+BLORPLE IT. Now develop clue 17.
+
+PUT X1, X2, X7 ON THE SECOND PILE. GET X9, X10,
+X11, X12. PUT X9 ON THE FIRST PILE. GET X6. PUT
+X6 ON THE SECOND PILE. JINDAK. (X3, X4, X5, X9 on
+the first pile. X6, X1, X2, X7 on the second
+pile.) If both piles are equal, then develop clue 14.
+If the piles are uneven the same way they were in
+clue 9, then develop clue 15. If the piles are uneven in the
+opposite way they were in clue 9, then develop clue 16.
+
+Take all of the cubes off of both piles. PUT X10
+ON THE FIRST PILE. PUT X11 ON THE SECOND PILE.
+JINDAK. If the piles are even then GET X12.
+BLORPLE IT. If the piles are uneven the same way
+they were in clue 9, then GET X11. BLORPLE IT. If the
+piles are uneven in the opposite way they were in
+clue 9, then GET X10. BLORPLE IT. Now develop clue 17.
+
+Take all of the cubes off of both piles. PUT X3
+ON THE FIRST PILE. PUT X4 ON THE SECOND PILE.
+JINDAK. If the piles are even, then TAKE X5.
+BLORPLE IT. If the piles are uneven the same way
+they were in clue 9, then GET X3. BLORPLE IT. If the
+piles are uneven in the opposite way they were
+in clue 9, then GET X4. BLORPLE IT. Now develop clue 17.
+
+Take all of the cubes off of both piles. PUT X6
+ON THE FIRST PILE. PUT X1 ON THE SECOND PILE.
+JINDAK. If the piles are even then GET X9.
+BLORPLE IT. If the piles are uneven, then GET X6.
+BLORPLE IT. Now develop clue 17.
+
+If you've ended up in the Sand Room:
+congratulations! If you've ended up in the
+Nondescript Room: too bad, you didn't follow the
+directions accurately.
+}
+
+@MajorHeading(The Sand Room)
+
+Like wow, man, deja vu! Haven't I been here before?
+@enumerate{
+Yes, you have. So to speak.
+
+But when you were here before, you were
+hereafter. Or you will be if you try to BLORPLE
+out of here without solving the puzzle.
+
+Does the description of the Sand Room remind you
+of anything?
+
+Marilyn Monroe? The Wicked Witch of the West?
+An hour glass?
+
+Do the room descriptions seem slightly different
+from the time you were here before?
+
+Time is the key word here.
+
+The Sand Room, going UP or DOWN, sends you back
+in time, to long before you became an Enchanter.
+Or even to before you started the story.
+
+You must leave each room, the Dungeon Cell
+(past) and the Ruins Room (past), exactly as you
+(will) find them in the present. We call this
+"establishing the past."  Otherwise you create a
+paradox, and since nature abhors a paradox
+almost as much as a vacuum, you die.
+}
+
+I went UP from the Sand Room, and I keep dying when I try to
+leave!
+@enumerate{
+If you haven't been DOWN from the Sand Room, and
+survived, don't read any further.
+
+If you have been, you have the right idea.
+Leave things as they were. (Or is it, as they
+will be?)
+
+You want to BLORPLE out of the room, having
+dropped the closed zipper, which contains ONLY
+the flimsy scroll. EMPTY THE ZIPPER INTO THE
+SACK is a helpful command. Leave nothing else
+behind. Oh, and one more thing ...
+
+Well, you'll figure it out.
+}
+
+I went DOWN from the Sand Room, and I keep dying when I try
+to leave!
+@enumerate{
+If opening the cabinet with the key is killing
+you, you're reading the wrong hint.
+
+Have you read all the clues to the first
+question in this section?
+
+Since you are back in time, you must leave
+everything the way you (will) find it when you
+enter the Cell from the Dungeon East End. That
+is, off the Water Room cube.
+
+Thus, you must leave ONLY a spell book in the
+cabinet. (It will get moldy on its own.) And, of
+course, don't forget to take the vellum scroll.
+Leave the cabinet locked. (The lock will get
+rusty on its own.)
+
+Remember, there should be no door left on the
+Cell when you have established the past, either.
+REZROV proves very handy in such cases. You need
+the Magic Room cube in your possession for your
+REZROV spell to be powerful enough, though.
+}
+
+GAK! I finally found a use for the key, but it's
+booby-trapped!
+@enumerate{
+If you die when you use the key, then you
+answered Belboz incorrectly.
+
+Crafty little devil, isn't he? He would
+revolutionize the modern public school system.
+
+You need your Enchanter Cards to
+answer Belboz correctly.
+
+If you haven't got Enchanter Cards, see
+the last question in the section entitled
+"The String Room."
+}
+
+@MajorHeading(The Magic Room)
+
+
+How do I get through the east exit?
+@enumerate{
+You can't unless you have all of the cubes in
+your possession (except the cube you used to
+BLORPLE to this room).
+
+There are twelve cubes besides the Magic Room
+cube.
+}
+How can I save the world?
+@enumerate{
+By winning the game.
+
+Stop the shadow from remaking the universe to its
+own liking.
+}
+What is the significance of the hypercube?
+@enumerate{
+A hypercube (or tesseract) is the
+four-dimensional analogue of a cube.
+
+A hypercube has sixteen vertices. Your thirteen
+cubes and the shadow's four make seventeen,
+enough to build a hypercube with one left over.
+
+This hypercube is a construct in which the
+relationships of the elements represented by the
+cubes are used to reconstruct the universe.
+}
+Why do I get frozen at the ending? I'm not doing anything to
+deserve this.
+@enumerate{
+Your presence is threatening enough. The shadow
+isn't stupid; it's taking precautions to prevent
+you from interfering.
+}
+I get frozen at the end and I never thaw. How can I thaw?
+@enumerate{
+One of the cubes helps you thaw.
+
+If you have the Magic Cube in your possession you
+will thaw in five turns.
+}
+Time runs out before I can do anything. Help!
+@enumerate{
+If the shadow froze you a little earlier, you
+would thaw out earlier.
+
+Provoke the shadow before it decides on its own
+to freeze you. You will thaw out that many moves
+sooner and have extra time.
+}
+When can I do something without getting noticed and frozen?
+@enumerate{
+Read the descriptions carefully.
+
+Once you are frozen, the shadow doesn't think
+you'll thaw until it is too late to stop its
+plan.
+
+When you thaw, wait until the shadow ignores you
+before doing anything. Don't do anything that
+might get its attention, or it'll just freeze you
+again. Spells should work.
+}
+Okay, now I have some time. What do I do?
+@enumerate{
+You have to cast a spell to stop the shadow.
+
+None of the spells you memorized from your spell
+book will help.
+
+You would be well off to have written something
+on the vellum scroll that you found, and brought
+it along.
+
+Though you could have written almost any spell,
+GIRGOL is the most powerful one available, and
+GIRGOL will "time stop" the shadow.
+
+Timing is important.
+
+GIRGOL the shadow as it prepares to jump into the
+hypercube.
+
+Then rearrange the restructuring of the universe
+to thwart the shadow.
+
+You have to take the Magic Room cube out of the
+hypercube...
+
+... and put in something else, or the universe
+will be created around nothing; in other words,
+destroyed.
+
+Don't put in a magic item, or it won't change the
+structure of the universe, and everything will
+return to as it was.
+
+Put in a non-magical item. The favorite of Boston
+area college students is the smoked fish.
+}
+Why do I get the final ranking that I do at 600 points?
+@enumerate{
+Because magic is no more.
+
+The profession of magician is no longer very
+useful. Perhaps as a scientist you can pursue a
+rewarding career.
+}
+Why isn't there an alternative ending?
+@enumerate{
+The inevitable result of magicians wielding such
+unchecked power as existed before the end of the
+story would be the creation of another shadow. It
+too might be defeated, but eventually one would
+arise who would be victorious over its original.
+The outcome of such a victory is too terrible to
+contemplate.
+}
+@MajorHeading(Stuff and Things)
+
+What good is ...
+
+... the burin?
+@enumerate{
+Did you look at it?
+
+Try JINDAKing it.
+
+It's used to inscribe words or spells.
+
+Can you think of any things that might be easier
+to tell apart if they had names?
+
+Use the burin to write words on the cubes. WRITE
+"EARTH" ON CUBE, for example.
+
+It's also useful for writing new spell scrolls.
+}
+... the gold box?
+@enumerate{
+You might try JINDAKing it.
+
+Notice how the decorations on the box change when
+a cube is placed inside it.
+
+Have you noticed that most cube rooms have an exit
+that you can't use?
+
+When you place a cube in the box, it opens the
+"impassable" exit in the cube room for that cube.
+
+That exit then leads to the location of the box,
+as long as it's sitting on the ground (not being
+carried or in a container).
+}
+... the zipper?
+@enumerate{
+Have you tried JINDAKing it?
+
+Have you tried opening it?
+
+Have you looked inside it once it's open?
+
+Have you reached inside it?
+
+Have you gotten inside it?
+
+The zipper is a gateway to another dimension, and
+it can contain an amazingly large number of things,
+including yourself. It is also watertight when
+zipped.
+}
+
+... the brass lantern?
+@enumerate{
+Have you filled it with oil?
+
+Have you rubbed it until it's shiny?
+
+Have you noticed that it doesn't exist?
+}
+
+... the compass rose?
+@enumerate{
+Have you tried JINDAKing it?
+
+Have you been west of the Changing Room? If not,
+stop here.
+
+Does the carving in the Carving Room look familiar?
+
+Perhaps the compass rose would fit in the carving.
+
+Pay attention to what happens to the compass rose
+when you put it in the carving.
+
+Don't forget to take it again!
+}
+
+... the moldy book?
+@enumerate{
+It sure is moldy and disgusting, isn't it?
+
+Can you think of anything that might improve it?
+
+CASKLY the moldy book.
+}
+... the wrought iron key?
+@enumerate{
+Have you tried unlocking anything with it?
+
+It's too bad that the oak cabinet is so deteriorated.
+
+Of course, it wasn't always.
+
+Oh dear, did the key blow up in your face? It didn't?
+Good, go on to the next clue. It did? Then skip the
+next clue.
+
+Congratulations.
+
+Too bad.
+}
+... the ogre's club?
+@enumerate{
+You could try attacking the ogre with it.
+
+You could try hitting the lava fragment with it.
+
+You could try examining your head, since there is
+no ogre's club!
+}
+
+... the vellum scroll?
+@enumerate{
+A blank spell scroll is a fairly valuable object.
+
+But then, you're not hunting treasures, are you?
+
+You might try writing on it.
+
+You could copy a spell onto it. Of course, you
+have all your spells in your spell book, don't
+you?
+
+Well, there was one spell that you had only on a
+scroll. Too bad you didn't have this blank scroll
+then.
+
+Of course, you probably aren't powerful enough to
+copy a really powerful spell.
+
+If you have the Magic Room cube, you can copy a
+GIRGOL scroll if you can find one.
+}
+
+... the carpet?
+@enumerate{
+If your carpet is red, stop here.
+
+Have you looked under the rug?
+
+You could try sitting on the rug.
+
+You could try going UP while sitting on the rug.
+
+But don't remove the label!
+
+And don't get lost!
+}
+What things can I ask Belboz about?
+@enumerate{
+The cubes.
+
+The shadow.
+
+The snake.
+
+Magic.
+
+The key.
+}
+What things can I ask the hermit about?
+@enumerate{
+The cube.
+
+The hut.
+
+The avalanche.
+
+The coin.
+}
+
+@MajorHeading(Cube Details)
+
+@Verbatim{
+Found in...    Decoration      Property        BLORPLE to...
+
+Belwit Square  Moles           Earth           Packed Earth
+
+Ogre Lair      Dolphins        Water           Water Room
+
+Temple         Eagles          Air             Air Room
+
+On Pillar      Salamanders     Fire            Fire Room
+
+Plain          Grues           Dark            Dark Room
+
+Hut            Spiders         Connectivity    String Room
+
+Ocean Floor    Fireflies       Light           Light Room
+
+Dungeon Cell   Worms           Death           Boneyard
+
+Roc Nest       Rabbits         Life            Soft Room
+
+Octagonal Room Owls            Mind            No Place
+
+In Pipe                Butterflies     Change          Changing Room
+
+Outer Vault    Turtles         Time            Sand Room
+
+Outcropping    Unicorns        Magic           Magic Room
+}
+
+@MajorHeading(Magic Details)
+
+
+My spells don't always work. Why?
+@enumerate{
+Magic is deteriorating. If you look at your spell book, you
+will see that only a remnant of your repertoire of spells
+remains. Doing something about this is the main goal of the
+story.
+
+As you get further in the story, spells work better and better.
+
+Each cube you have increases the probability of your spells
+working. Each spell is also influenced strongly by two
+different cubes, and having those cubes makes it much more
+likely that the spell will work.
+}
+Details of cubes' effects on spells:
+@Verbatim{
+Spell          Cubes that increase chance of success
+
+BLORPLE                (always works)
+
+FROTZ          Change, Light (75% base chance)
+
+GNUSTO         Change, Earth (75% base chance)
+
+LESOCH         Air, Fire
+
+MALYON         Fire, Life
+
+REZROV         Change, Earth
+
+YOMIN          Mind, Light
+
+SNAVIG         Change, Dark
+
+GIRGOL         (special, as spell is so powerful)
+
+LISKON         Change, Earth
+
+TINSOT         Water, Fire
+
+JINDAK         Light, Connectivity
+
+ESPNIS         Mind, Death
+
+CASKLY         Change, Connectivity
+
+THROCK         Life, Water
+}
+If you have the cube that BLORPLEs you to the
+Magic Room, it gives an extra-strong power boost
+to all spells. With this cube in your
+possession, only the GIRGOL spell can ever fail
+under normal circumstances.
+
+When I use a spell on a scroll, the scroll disappears and
+I can't use the spell again. Help!
+@enumerate{
+You should GNUSTO the spell into your spell book.
+
+Then you can memorize the spell from your book and
+use it repeatedly.
+}
+
+@MajorHeading(Spells and Their Locations)
+
+@Verbatim{
+GNUSTO Your spell book.
+
+REZROV Your spell book.
+
+FROTZ  Your spell book.
+
+YOMIN  Your spell book.
+
+JINDAK Your spell book.
+
+MALYON Your spell book.
+
+LESOCH Your spell book.
+
+BLORPLE        Your spell book after the shadow leaves the Council Chamber.
+
+THROCK At Cliff Middle.
+
+CASKLY In Roc Nest.
+
+GIRGOL In the zipper in Ruins Room.
+
+ESPNIS At Ogre's Lair.
+
+LISKON In the bottle in mid-ocean.
+
+TINSOT At the Glacier.
+
+SNAVIG In the moldy book after you CASKLY it.
+}
+
+@MajorHeading(How the Points Are Scored)
+
+
+25 points for each of 13 cubes, for a total of 325.
+
+15 points for reading or using BLORPLE the first time.
+
+10 points for getting the zipper.
+
+10 points for getting the flimsy scroll.
+
+10 points for getting the dirty scroll.
+
+10 points for getting the stained scroll.
+
+10 points for getting the dusty scroll.
+
+10 points for getting the box.
+
+10 points for getting the damp scroll.
+
+10 points for getting the white scroll.
+
+10 points for getting the blue carpet.
+
+10 points for getting the moldy book.
+
+15 points for CASKLYing the moldy book.
+
+10 points for getting the compass rose.
+
+25 points for answering Belboz and getting the key.
+
+10 points for getting the vellum scroll.
+
+25 points for establishing the past at Dungeon Cell.
+
+25 points for establishing the past at Ruins Room.
+
+50 points for saving the world (but destroying magic).
+
+
+@MajorHeading(For Your Amusement)
+@center{(after you've finished the story)}
+
+What did we name the cubes here at Infocom?
+@enumerate{
+Dave gave them boring names like "Earth" or "Air."
+
+Gary gave them all incomprehensible (to others)
+single-letter names, because he hates typing.
+
+Max named one "Ohio" because he was looking for a
+4-letter synonym for No Place. (Max has never
+visited Ohio, either.)
+
+Spike named them "cube1" through "cube13" because,
+while he isn't wildly imaginative, he is very smart.
+
+Liz named the Fire Room cube "Bob" after her husband.
+
+Amy named the Dark Room cube "Inky."
+}
+Have you tried...
+@itemize{
+...flying on the magic carpet to the Outcropping?
+
+...TINSOTing the magic carpet, then flying to the
+Outcropping?
+
+...reading the carpet label during flight?
+
+...FROTZ GRUE in a dark room (not in the Dark Room
+area)?
+
+...reading the pillar?
+
+...SNAVIG SERPENT or YOMIN SNAKE (before and after
+shrinking it)?
+
+...sleeping on the green eyed rock? Petting it?
+
+...giving fish or bread to the green eyed rock?
+
+...showing the lava fragment to the rock?
+
+...swallowing things when you're a grouper?
+
+...smelling the ogre, or smelling the ogre when
+you're an ogre?
+
+...trying to convince the merchant to sell you a
+carpet for less than 500 zorkmids?
+
+...hitting the alarm fairy?
+
+...YOMINing the shadow in the Castle?
+
+...slavering while a grue?
+
+...following the rabbit in the Meadow?
+
+...landing the magic carpet other than In Roc
+Nest or Guard Tower?
+
+...MALYONing the idol while you are on it?
+
+...casting a spell (other than BLORPLE) at the
+Plain?
+
+...following the shadow from Belwit Square?
+
+...CASKLYing the red carpet?
+
+...YOMINing any enchanter after he's been turned into
+an amphibian?
+
+...MALYONing the cube in the hermit's hut?
+
+...looking at a grue when you are a grue?
+
+...attacking a grue when you are a grue?
+
+...YOMIN GRUE?
+
+...examining the orange smoke or smelling it?
+
+...TINSOTing the glacier?
+
+...smelling the lava?
+
+...trying to sleep in the ogre's cave?
+}
\ No newline at end of file
diff --git a/magic.txt b/magic.txt
new file mode 100644 (file)
index 0000000..39c048a
--- /dev/null
+++ b/magic.txt
@@ -0,0 +1,39 @@
+    -Spell-    -English-
+
+ s  AIMFIZ     transport yourself to someone's location
+e   BLORB      STRONG-BOX-SPELL
+e   CLEESH     NEWT-SPELL
+e   EXEX       HASTE-SPELL
+e   FILFRE     CREDITS-SPELL
+es  FROTZ      LIGHT-SPELL
+ s  FWEEP      turn caster into a bat
+ s  GASPAR     resurrection
+es  GNUSTO     WRITE-MAGIC-SPELL
+ s  GOLMAC     travel temporally
+e   GONDAR     QUENCH-SPELL
+e   GUNCHO     BANISH-SPELL
+es  IZYUK      FLY-SPELL
+e   KREBF      REPAIR-SPELL
+e   KULCAD     DISPEL-SPELL
+ s  MALYON     bring life to inanimate objects
+ s  MEEF       cause plants to wilt
+e   MELBOR     PROTECTION-SPELL
+e   NITFOL     TALK-TO-ANIMALS-SPELL
+e   OZMOO      CHEAT-DEATH-SPELL
+ s  PULVER     cause liquids to dry up
+es  REZROV     OPEN-SPELL
+ s  SWANZO     exorcise an inhabiting presence
+ s  VARDIK     shield a mind from an evil spirit
+e   VAXUM      CHARM-SPELL
+ s  VEZZA      view the future
+ s  YOMIN      mind probe
+ s  YONK       augment the power of certain spells
+e   ZIFMIA     SUMMON-SPELL
+
+    -Potion-   -English-
+
+ s  BERZIO     obviate need for food and drink
+ s  BLORT      see in the dark
+ s  FLAXO      exquisite torture
+ s  FOOBLE     increase coordination
+ s  VILSTU     obviate need for breathing
index e9e9ad9c8d8937f005dd75f72949f709a5aae502..d9999dbb9fc73f3d46a37119cef4bc6e9e08b9e2 100644 (file)
--- a/magic.zil
+++ b/magic.zil
@@ -65,7 +65,7 @@ e   ZIFMIA    SUMMON-SPELL
 
 <GLOBAL SEEN-BLORPLE? <>>
 
-<ROUTINE SPELL-BOOK-F ("AUX" (F <FIRST? ,SPELL-BOOK>))
+<ROUTINE SPELL-BOOK-F ("AUX" F)
         <COND (<VERB? EXAMINE>
                <TELL
 "This is your well-used old " 'SPELL-BOOK ", first given to you by Belboz
@@ -104,10 +104,8 @@ that you can read them." CR>)>
                <TELL "My Spell Book|
 |
 ">
-               <REPEAT ()
-                       <COND (<NOT .F> <RETURN>)>
-                       <TELL CTHE .F " (" <GETP .F ,P?TEXT> ")." CR>
-                       <SET F <NEXT? .F>>>
+               <MAP-CONTENTS (F ,SPELL-BOOK)
+                             <TELL CTHE .F " (" <GETP .F ,P?TEXT> ")." CR>>
                <COND (<AND ,CLEESHED? <NOT ,SEEN-BLORPLE?>>
                       <SEE-BLORPLE>
                       <TELL
@@ -433,7 +431,7 @@ without a " 'SPELL-BOOK ,PERIOD>
 They slip out of your memory as soon as you cram them in." CR>
                                     <RTRUE>)
                                    (<NOT <G? ,SPELL-ROOM 0>>
-                                    <FORGET-SPELL ,PRSO>
+                                    <FORGET-SPELL>
                                     <SETG SPELL-ROOM 1>
                                     <SET FORGET T>)>)>
                       <SETG SPELL-ROOM <- ,SPELL-ROOM 1>>
@@ -468,39 +466,29 @@ likely that something may have been forgotten in the shuffle." CR>)>
 " The spell is long and complicated.">)>
         <CRLF>>
 
-<ROUTINE FORGET-SPELL (SPL "AUX" F CNT TBL (NUM 0) (SP <>))
+<ROUTINE FORGET-SPELL ("AUX" F 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>)>>)>
+                      (<G? <GETP .F ,P?COUNT> 0>
+                       <SET SP .F>
+                       <PUT .TBL 1 .F>
+                       <SET NUM <+ .NUM 1>>
+                       <SET TBL <REST .TBL 2>>)>
                 <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 (<ZERO? .NUM> <RTRUE>)>
-        <SET SPL <RANDOM-ELEMENT ,FORGET-TBL>>
-        <PUTP .SPL ,P?COUNT <- <GETP .SPL ,P?COUNT> 1>>>
+        <COND (<G? .NUM 1>
+               <PUT ,FORGET-TBL 0 .NUM>
+               <SET SP <RANDOM-ELEMENT ,FORGET-TBL>>)>
+        <PUTP .SP ,P?COUNT <- <GETP .SP ,P?COUNT> 1>>>
 
-<GLOBAL FORGET-TBL <LTABLE 0 0 0 0 0 0 0 0 0 0>>
+<GLOBAL FORGET-TBL <LTABLE 0 0 0 0 0 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>>)>>>
+        <MAP-CONTENTS (F ,SPELL-BOOK)
+                      <PUTP .F ,P?COUNT 0>>>
 
 <ROUTINE WEAR-OFF-SPELLS ("OPTIONAL" (SLEEP? T))
         <COND (,CHANGED?
@@ -781,27 +769,25 @@ on which it is written." CR>
          ;GASPAR-SPELL
          ;YONK-SPELL
 
-<ROUTINE V-SPELLS ("AUX" (CNT <GET ,ALL-SPELLS 0>) S (ANY <>) (OS <>) TMP)
+<ROUTINE V-SPELLS ("AUX" S (ANY <>) (OS <>) TMP)
         <TELL
 "The gnusto, rezrov, and frotz spells are yours forever. Other than that,
 you have ">
-        <REPEAT ()
-                <COND (<EQUAL? .CNT 0>
-                       <COND (.OS
-                              <SPELL-PRINT .OS .ANY T>
-                              <SET ANY T>)>
-                       <COND (<NOT .ANY>
-                              <TELL "no spells memorized.">)
-                             (T
-                              <TELL " committed to memory.">)>
-                       <CRLF>
-                       <RTRUE>)>
-                <COND (<SET TMP <SPELL-TIMES <GET ,ALL-SPELLS .CNT>>>
-                       <COND (.OS
-                              <SPELL-PRINT .OS .ANY>
-                              <SET ANY T>)>
-                       <SET OS .TMP>)>
-                <SET CNT <- .CNT 1>>>>
+        <DO (CNT <GET ,ALL-SPELLS 0> 1 -1)
+            <COND (<SET TMP <SPELL-TIMES <GET ,ALL-SPELLS .CNT>>>
+                   <COND (.OS
+                          <SPELL-PRINT .OS .ANY>
+                          <SET ANY T>)>
+                   <SET OS .TMP>)>>
+        <COND (.OS
+               <SPELL-PRINT .OS .ANY T>
+               <SET ANY T>)>
+        <COND (<NOT .ANY>
+               <TELL "no spells memorized.">)
+              (T
+               <TELL " committed to memory.">)>
+        <CRLF>
+        <RTRUE>>
 
 <ROUTINE SPELL-PRINT (S ANY "OPTIONAL" (PAND? <>) "AUX" X)
         <COND (.ANY
@@ -854,6 +840,9 @@ you have ">
                <TELL
 "Abruptly, your surroundings shift.">
                <COND (<FSET? <LOC ,PLAYER> ,VEHBIT>
+                      <SETG SITTING? <>>
+                      <COND (<EQUAL? ,HERE ,MIDAIR>
+                             <MOVE <LOC ,PLAYER> ,LOST-ON-LAND>)>
                       <TELL
 " The spell leaves " THE <LOC ,PLAYER> " behind.">)>
                <MOVE ,PLAYER ,HERE>
@@ -1012,20 +1001,17 @@ with identical brightness.">)
 nearby." CR>)>>
 
 <ROUTINE DETECT-MAGIC (OBJ "OPTIONAL" (1ST? T) "AUX" F)
-        <SET F <FIRST? .OBJ>>
-        <REPEAT ()
-                <COND (<NOT .F> <RETURN <NOT .1ST?>>)
-                      (<NOT <EQUAL? .F ,PLAYER ,PILE-1 ,PILE-2>>
-                       <COND (<AND <VISIBLE? .F>
-                                   <MAGIC? .F>>
-                              <SET 1ST? <>>
-                              <TELL
-                               CTHE .F ,IS-GLOWING CR>)
-                             (<AND <SEE-INSIDE? .F>
-                                   <FIRST? .F>>
-                              <COND (<DETECT-MAGIC .F .1ST?>
-                                     <SET 1ST? <>>)>)>)>
-                <SET F <NEXT? .F>>>>
+        <MAP-CONTENTS (F .OBJ)
+                      (END <RETURN <NOT .1ST?>>)
+                      <COND (<NOT <EQUAL? .F ,PLAYER ,PILE-1 ,PILE-2>>
+                             <COND (<AND <VISIBLE? .F>
+                                         <MAGIC? .F>>
+                                    <SET 1ST? <>>
+                                    <TELL CTHE .F ,IS-GLOWING CR>)
+                                   (<AND <SEE-INSIDE? .F>
+                                         <FIRST? .F>>
+                                    <COND (<DETECT-MAGIC .F .1ST?>
+                                           <SET 1ST? <>>)>)>)>>>
 
 <ROUTINE MAGIC? (OBJ)
         <COND (<FSET? .OBJ ,MAGICBIT> <RTRUE>)
@@ -1243,7 +1229,9 @@ the gnusto spell will work on it." CR>)>)>>
                <V-NO-OP>)>>
 
 <ROUTINE V-MALYON ()
-        <COND (<FSET? ,PRSO ,PERSON>
+        <COND (<TIME-FROZEN?>
+               <TELL ,NOTHING-HAPPENS>)
+              (<FSET? ,PRSO ,PERSON>
                <TELL
 "Wow! " ,IT-LOOKS-LIKE THE ,PRSO " is now alive! What a magician you are!" CR>)
               (<FSET? ,PRSO ,TAKEBIT>
@@ -1265,6 +1253,8 @@ little jig, and a moment later returns to normal." CR>)
                    <FSET? ,PRSO ,DOORBIT>>
                <COND (<FSET? ,PRSO ,OPENBIT>
                       <ALREADY-OPEN>)
+                     (<TIME-FROZEN?>
+                      <TELL ,NOTHING-HAPPENS>)
                      (<NOT <FSET? ,PRSO ,SCROLLBIT>>
                       <TELL "Silently, ">
                       <TELL THE ,PRSO " swings open">
index 7d91e8850da6f0ef978391faef840dd1853b4431..3613481665b6869cf73dee5b8a2e4948e0e98ff4 100644 (file)
--- a/misc.zil
+++ b/misc.zil
 
 ;"SUSPECT tell macro and friends"
 
-<COND (<GASSIGNED? ZILCH> ;"version for when compiling"
-       <DEFMAC TELL ("ARGS" A)
-              <FORM PROG ()
-                    !<MAPF ,LIST
-                           <FUNCTION ("AUX" E P O)
-                                <COND (<EMPTY? .A> <MAPSTOP>)
-                                      (<SET E <NTH .A 1>>
-                                       <SET A <REST .A>>)>
-                                <COND (<TYPE? .E ATOM>
-                                       <COND (<OR <=? <SET P <SPNAME .E>>
-                                                      "CRLF">
-                                                  <=? .P "CR">>
-                                              <MAPRET '<CRLF>>)
-                                             ;(<=? .P "V">
-                                               <MAPRET '<VPRINT>>)
-                                             (<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
-                                                      <PFORM DPRINT .O>>)
-                                                    (<=? .P "CD">
-                                                     <MAPRET
-                                                      <PFORM CDPRINT .O>>)
-                                                    (<=? .P "THE">
-                                                     <MAPRET
-                                                      <PFORM THE-PRINT .O>>)
-                                                    (<=? .P "CTHE">
-                                                     <MAPRET
-                                                      <PFORM CTHE-PRINT .O>>)
-                                                    (<OR <=? .P "A">
-                                                         <=? .P "AN">>
-                                                     <MAPRET
-                                                      <PFORM PRINTA .O>>)
-                                                    (<OR <=? .P "NUM">
-                                                         <=? .P "N">>
-                                                     <MAPRET
-                                                      <FORM PRINTN .O>>)
-                                                    (<OR <=? .P "CHAR">
-                                                         <=? .P "CHR">
-                                                         <=? .P "C">>
-                                                     <MAPRET
-                                                      <FORM PRINTC
-                                                            <CHTYPE .O FIX>>>)
-                                                    (ELSE
-                                                     <MAPRET
-                                                      <FORM PRINT
-                                                            <FORM GETP .O .E>>>)>)>)
-                                      (<TYPE? .E STRING ZSTRING>
-                                       <MAPRET
-                                        <COND (<==? <LENGTH .E> 1>
-                                               <FORM PRINTC
-                                                     <CHTYPE <1 .E> FIX>>)
-                                              (ELSE
-                                               <FORM PRINTI .E>)>>)
-                                      (<AND <TYPE? .E FORM>
-                                            <==? <NTH .E 1> QUOTE>>
-                                       <MAPRET
-                                        <FORM PRINTD
-                                              <MAKE-GVAL <NTH .E 2>>>>)
-                                      (<TYPE? .E FORM LVAL GVAL>
-                                       <MAPRET <FORM PRINT .E>>)
-                                      (ELSE <ERROR UNKNOWN-TYPE .E>)>>>>>)
-      (ELSE ;"version for when interpreting"
-       <DEFINE TELL ("TUPLE" A)
-              <MAPR <>
-                    <FUNCTION ("AUX" E P O)
-                         <COND (<EMPTY? .A> <MAPLEAVE>)
-                               (<SET E <NTH .A 1>>
-                                <SET A <REST .A>>)>
-                         <COND (<TYPE? .E ATOM>
-                                <COND (<OR <=? <SET P <SPNAME .E>>
-                                               "CRLF">
-                                           <=? .P "CR">>
-                                       <CRLF>)
-                                      ;(<=? .P "V"> <VPRINT>)
-                                      (<AND <GASSIGNED? .E>
-                                            <TYPE? ,.E OBJECT>>
-                                       <PRINTD ,.E>)
-                                      (<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">>
-                                              <DPRINT .O>)
-                                             (<=? .P "CD">
-                                              <DPRINT .O T>)
-                                             ;(<=? .P "HE/SHE">
-                                               <HE/SHE-PRINT .O>)
-                                             ;(<=? .P "HIM/HER">
-                                               <HIM/HER-PRINT .O>)
-                                             ;(<=? .P "HIS/HER">
-                                               <HIM/HER-PRINT .O T>)
-                                             (<=? .P "THE">
-                                              <THE-PRINT .O>)
-                                             (<=? .P "CTHE">
-                                              <CTHE-PRINT .O>)
-                                             (<OR <=? .P "A">
-                                                  <=? .P "AN">>
-                                              <PRINTA .O>)
-                                             (<OR <=? .P "NUM">
-                                                  <=? .P "N">>
-                                              <PRINTN .O>)
-                                             (<OR <=? .P "CHAR">
-                                                  <=? .P "CHR">
-                                                  <=? .P "C">>
-                                              <PRINTC .O>)
-                                             (ELSE
-                                              <PRINT <GETP .O .E>>)>)>)
-                               (<TYPE? .E STRING ZSTRING>
-                                <PRINTI .E>)
-                               (<AND <TYPE? .E FORM>
-                                     <==? <NTH .E 1> QUOTE>>
-                                <PRINTD <GVAL <NTH .E 2>>>)
-                               (<TYPE? .E FORM LVAL GVAL>
-                                <PRINT .E>)
-                               (ELSE <ERROR UNKNOWN-TYPE .E>)>>>>
-)>
-
-<DEFINE PFORM (APP OBJ "AUX" A)
-       <COND (<AND <TYPE? .OBJ LVAL GVAL>
-                   <MEMQ <SET A <CHTYPE .OBJ ATOM>> '[PRSO PRSI]>>
-              <COND (<==? .APP DPRINT>
-                     <COND (<==? .A PRSO> <FORM DPRINT-PRSO>)
-                           (ELSE <FORM DPRINT-PRSI>)>)
-                    (<==? .APP CDPRINT>
-                     <COND (<==? .A PRSO> <FORM CDPRINT-PRSO>)
-                           (ELSE <FORM CDPRINT-PRSI>)>)
-                    (<==? .APP THE-PRINT>
-                     <COND (<==? .A PRSO> <FORM THE-PRINT-PRSO>)
-                           (ELSE <FORM THE-PRINT-PRSI>)>)
-                    (<==? .APP CTHE-PRINT>
-                     <COND (<==? .A PRSO> <FORM CTHE-PRINT-PRSO>)
-                           (ELSE <FORM CTHE-PRINT-PRSI>)>)
-                    (<==? .APP PRINTA>
-                     <COND (<==? .A PRSO> <FORM PRINTA-PRSO>)
-                           (ELSE <FORM PRINTA-PRSI>)>)
-                    (ELSE <ERROR .APP .OBJ>)>)
-             (<ASSIGNED? EXT>
-              <FORM .APP .OBJ .EXT>)
-             (ELSE
-              <FORM .APP .OBJ>)>>
-
-<DEFINE MAKE-GVAL (E)
-       <COND (<OR <GASSIGNED? MUDDLE>
-                  <NOT <TYPE? .E ATOM>>>
-              <FORM GVAL .E>)
-             (ELSE
-              <CHTYPE .E GVAL>)>>
+<TELL-TOKENS (CRLF CR)         <CRLF>
+            (NUM N) *          <PRINTN .X>
+            (CHAR CHR C) *     <PRINTC .X>
+            D ,PRSO            <DPRINT-PRSO>
+            D ,PRSI            <DPRINT-PRSI>   
+            D *                <DPRINT .X>
+            CD ,PRSO           <CDPRINT-PRSO>
+            CD ,PRSI           <CDPRINT-PRSI>
+            CD *               <CDPRINT .X>
+            THE ,PRSO          <THE-PRINT-PRSO>
+            THE ,PRSI          <THE-PRINT-PRSI>
+            THE *              <THE-PRINT .X>
+            CTHE ,PRSO         <CTHE-PRINT-PRSO>
+            CTHE ,PRSI         <CTHE-PRINT-PRSI>
+            CTHE *             <CTHE-PRINT .X>
+            (A AN) ,PRSO       <PRINTA-PRSO>
+            (A AN) ,PRSI       <PRINTA-PRSI>
+            (A AN) *           <PRINTA .X>>
+
+;<TELL-TOKENS (CRLF CR) <CRLF>
+            (DESC D OBJ O) <DPRINT .X>
+            CD <CDPRINT .X>
+            THE <THE-PRINT .X>
+            CTHE <CTHE-PRINT .X>
+            (A AN) <PRINTA .X>
+            (NUM N) <PRINTN .X>
+            (CHAR CHR C) <PRINTC .X>
+            <DPRINT ,PRSO> <DPRINT-PRSO>
+            <DPRINT ,PRSI> <DPRINT-PRSI>
+            <CDPRINT ,PRSO> <CDPRINT-PRSO>
+            <CDPRINT ,PRSI> <CDPRINT-PRSI>
+            <THE-PRINT ,PRSO> <THE-PRINT-PRSO>
+            <THE-PRINT ,PRSI> <THE-PRINT-PRSI>
+            <CTHE-PRINT ,PRSO> <CTHE-PRINT-PRSO>
+            <CTHE-PRINT ,PRSI> <CTHE-PRINT-PRSI>
+            <PRINTA ,PRSO> <PRINTA-PRSO>
+            <PRINTA ,PRSI> <PRINTA-PRSI>>
 
 <ROUTINE CTHE-PRINT-PRSO ()
         <THE-PRINT ,PRSO T>>
@@ -830,18 +707,15 @@ be include when the crunch comes."
 
 <GLOBAL CLOCK-WAIT <>>
 
-<GLOBAL C-TABLE %<COND (<GASSIGNED? ZILCH>
-                       '<ITABLE NONE 26>)
-                      (T
-                       '<ITABLE NONE 52>)>>
+<GLOBAL C-TABLE <ITABLE 13 <> <>>>
 
-<CONSTANT C-TABLELEN 52>
-<GLOBAL C-INTS 52>
-%<DEBUG-CODE <GLOBAL C-MAXINTS 52>>
+<CONSTANT C-INTLEN 4>  ;"length of an interrupt entry in bytes"
+<CONSTANT C-RTN 0>     ;"word offset of routine name"
+<CONSTANT C-TICK 1>    ;"word offset of count"
 
-<CONSTANT C-INTLEN 4>  ;"length of an interrupt entry"
-<CONSTANT C-RTN 0>     ;"offset of routine name"
-<CONSTANT C-TICK 1>    ;"offset of count"
+<CONSTANT C-TABLELEN 52>       ;"length of interrupt table in bytes"
+<GLOBAL C-INTS 52>             ;"start of queued interrupts in bytes"
+%<DEBUG-CODE <GLOBAL C-MAXINTS 52>>
 
 <ROUTINE DEQUEUE (RTN)
         <COND (<SET RTN <QUEUED? .RTN>>
@@ -888,7 +762,7 @@ be include when the crunch comes."
         <COND (%<COND (<GASSIGNED? ZILCH>
                        '<G? .INT ,CLOCK-HAND>)
                       (ELSE
-                       '<L=? <LENGTH .INT> <LENGTH ,CLOCK-HAND>>)>
+                       '<L? <LENGTH .INT> <LENGTH ,CLOCK-HAND>>)>
                <SET TICK <- <+ .TICK 3>>>)>
         <PUT .INT ,C-TICK .TICK>
         .INT>
@@ -950,7 +824,7 @@ be include when the crunch comes."
                   <COND (<N==? <LENGTH .OBJ> 3>
                          <ERROR BAD-THING .OBJ>)>
                   <MAPRET <COND (<NTH .OBJ 2>
-                                 <VOC <SPNAME <NTH .OBJ 2>>>)>
+                                 <VOC <SPNAME <NTH .OBJ 2>> NOUN>)>
                           <COND (<NTH .OBJ 1>
                                  <VOC <SPNAME <NTH .OBJ 1>> ADJECTIVE>)>
                           <3 .OBJ>>>
index 93a110c72cccbae604b6dd0735bb6b3e75e0ae23..1c723a761abcc0326800344c00eed730fc890e05 100644 (file)
@@ -33,13 +33,20 @@ with 'P-'. Local variables are not restricted in any way."
 
 <GLOBAL WINNER 0>
 
-<GLOBAL P-LEXV <ITABLE BYTE 120>>
-<GLOBAL AGAIN-LEXV <ITABLE BYTE 120>>
-<GLOBAL RESERVE-LEXV <ITABLE BYTE 120>>
+<GLOBAL P-LEXV
+       <ITABLE 59 (LEXV) 0 #BYTE 0 #BYTE 0> ;<ITABLE BYTE 120>>
+<GLOBAL AGAIN-LEXV
+       <ITABLE 59 (LEXV) 0 #BYTE 0 #BYTE 0> ;<ITABLE BYTE 120>>
+<GLOBAL RESERVE-LEXV
+       <ITABLE 59 (LEXV) 0 #BYTE 0 #BYTE 0> ;<ITABLE BYTE 120>>
 <GLOBAL RESERVE-PTR <>>
 
-<GLOBAL P-INBUF <ITABLE BYTE 60>> ;"INBUF - Input buffer for READ"
-<GLOBAL OOPS-INBUF <ITABLE BYTE 60>>
+<GLOBAL P-INBUF
+       <ITABLE 120 (BYTE LENGTH) 0>
+       ;<ITABLE BYTE 60>> ;"INBUF - Input buffer for READ"
+<GLOBAL OOPS-INBUF
+       <ITABLE 120 (BYTE LENGTH) 0>
+       ;<ITABLE BYTE 60>>
 <GLOBAL OOPS-TABLE <TABLE <> <> <> <>>>
 <CONSTANT O-PTR 0>     "word pointer to unknown token in P-LEXV"
 <CONSTANT O-START 1>   "word pointer to sentence start in P-LEXV"
@@ -82,10 +89,10 @@ with 'P-'. Local variables are not restricted in any way."
        <TABLE 0 0 0 0 0 0 0 0 0 0>>
 
 <GLOBAL P-VTBL
-       <TABLE 0 0 0 0>>
+       <TABLE 0 #BYTE 0 #BYTE 0>>
 
 <GLOBAL P-OVTBL
-       <TABLE 0 0 0 0>>
+       <TABLE 0 #BYTE 0 #BYTE 0>>
 
 <GLOBAL P-NCN 0>
 
@@ -262,13 +269,14 @@ with 'P-'. Local variables are not restricted in any way."
                       <SETG QUOTE-FLAG <>>
                       <RETURN>)
                      (<SET WRD <KNOWN-WORD? .PTR .VERB>>
+                      <COND (<ZERO? ,P-LEN> <SET NW 0>)
+                            (T <SET NW <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>>)>
                       <COND (<AND <EQUAL? .WRD ,W?TO>
                                   <EQUAL? .VERB ,ACT?TELL ,ACT?ASK>
                                   ;"next clause added 8/20/84 by JW to
                                     enable TELL MY NAME TO BEAST"
                                   <NOT <ZERO?
-                                        <WT? <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>
-                                             ,PS?VERB ,P1?VERB>>>>
+                                        <WT? .NW ,PS?VERB ,P1?VERB>>>>
                              <PUT ,P-ITBL ,P-VERB ,ACT?TELL>
                              <SET WRD ,W?QUOTE>)
                             (<AND <EQUAL? .WRD ,W?THEN>
@@ -315,9 +323,7 @@ with 'P-'. Local variables are not restricted in any way."
                                   <OR <EQUAL? .LEN 1>
                                       <AND <EQUAL? .LEN 2>
                                            <EQUAL? .VERB ,ACT?WALK ;,ACT?FLY>>
-                                      <AND <EQUAL? <SET NW
-                                                    <GET ,P-LEXV
-                                                         <+ .PTR ,P-LEXELEN>>>
+                                      <AND <EQUAL? .NW
                                                    ,W?THEN
                                                    ,W?PERIOD
                                                    ,W?QUOTE>
@@ -353,9 +359,7 @@ with 'P-'. Local variables are not restricted in any way."
                                           <NOT <ZERO? <WT? .WRD ,PS?OBJECT>>>>
                                       <SET VAL 0>>>
                              <COND (<AND <G? ,P-LEN 1>
-                                         <EQUAL? <GET ,P-LEXV
-                                                      <+ .PTR ,P-LEXELEN>>
-                                                 ,W?OF>
+                                         <EQUAL? .NW ,W?OF>
                                          <ZERO? .VAL>
                                          <NOT <EQUAL? .WRD
                                                       ,W?ALL ,W?ONE ,W?A>>
@@ -364,8 +368,7 @@ with 'P-'. Local variables are not restricted in any way."
                                     <SET OF-FLAG T>)
                                    (<AND <NOT <ZERO? .VAL>>
                                          <OR <ZERO? ,P-LEN>
-                                             <EQUAL? <GET ,P-LEXV <+ .PTR 2>>
-                                                     ,W?THEN ,W?PERIOD>>>
+                                             <EQUAL? .NW ,W?THEN ,W?PERIOD>>>
                                     <SETG P-END-ON-PREP T>
                                     <COND (<L? ,P-NCN 2>
                                            <PUT ,P-ITBL ,P-PREP1 .VAL>
@@ -384,9 +387,7 @@ with 'P-'. Local variables are not restricted in any way."
                                            <RETURN>)>)>)
                             (<EQUAL? .WRD ,W?OF>
                              <COND (<OR <NOT .OF-FLAG>
-                                        <EQUAL?
-                                         <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>
-                                         ,W?PERIOD ,W?THEN>>
+                                        <EQUAL? .NW ,W?PERIOD ,W?THEN>>
                                     <CANT-USE .PTR>
                                     <RFALSE>)
                                    (T
@@ -1207,15 +1208,15 @@ OOPS-INBUF, leaving the appropriate pointers in AGAIN-LEXV"
 
 <GLOBAL P-ADJN <>>
 
-<GLOBAL P-PRSO <ITABLE NONE 80>>
+<GLOBAL P-PRSO <ITABLE 80 <>>>
 
-<GLOBAL P-PRSI <ITABLE NONE 80>>
+<GLOBAL P-PRSI <ITABLE 80 <>>>
 
-<GLOBAL P-BUTS <ITABLE NONE 80>>
+<GLOBAL P-BUTS <ITABLE 80 <>>>
 
-<GLOBAL P-MERGE <ITABLE NONE 80>>
+<GLOBAL P-MERGE <ITABLE 80 <>>>
 
-<GLOBAL P-OCLAUSE <ITABLE NONE 80>>
+<GLOBAL P-OCLAUSE <ITABLE 80 <>>>
 
 <GLOBAL P-MATCHLEN 0>
 
@@ -1241,7 +1242,9 @@ OOPS-INBUF, leaving the appropriate pointers in AGAIN-LEXV"
                  <COND (.WAS-ALL <SETG P-GETFLAGS ,P-ALL>)>
                  <RETURN .WV>)
                 (T
-                 <SET NW <GET .PTR ,P-LEXELEN>>
+                 <COND (<==? .EPTR <REST .PTR ,P-WORDLEN>>
+                        <SET NW 0>)
+                       (T <SET NW <GET .PTR ,P-LEXELEN>>)>
                  <COND (<EQUAL? .WRD ,W?ALL ,W?BOTH>
                         <SETG P-GETFLAGS ,P-ALL>
                         <COND (<EQUAL? .NW ,W?OF>
diff --git a/rooms.txt b/rooms.txt
new file mode 100644 (file)
index 0000000..973aeda
--- /dev/null
+++ b/rooms.txt
@@ -0,0 +1,900 @@
+<OBJECT BURIN
+       (IN PLAYER)
+       (DESC "magic burin")
+<ROOM DULL-ROOM
+      (IN ROOMS)
+      (DESC "Nondescript Room")
+      (OUT PER DULL-ROOM-EXIT)
+      (SOUTH PER DULL-ROOM-EXIT)
+<OBJECT EARTH-CUBE
+       (DESC "cube")
+<ROOM EARTH-ROOM
+      (IN ROOMS)
+      (DESC "Packed Earth")
+      (NORTH PER MAGIC-BOX-EXIT)
+      (EAST TO HALL-OF-STONE)
+      (WEST TO CAVE-ENTRANCE)
+      (SOUTH TO CLIFF-MIDDLE)
+      (DOWN PER MIDAIR-EXIT)
+<ROOM HALL-OF-STONE
+      (IN ROOMS)
+      (DESC "Hall of Stone")
+      (NORTH TO SOUTH-SNAKE-ROOM)
+      (SOUTH TO RUINS-ROOM)
+<ROOM NORTH-SNAKE-ROOM
+      (IN ROOMS)
+      (DESC "North of Serpent")
+      (SOUTH PER SNAKE-ROOM-EXIT)
+      (NORTH TO TEMPLE-ROOM)
+      (EAST PER SNAKE-ROOM-EXIT)
+      (WEST PER SNAKE-ROOM-EXIT)
+<ROOM SOUTH-SNAKE-ROOM
+      (IN ROOMS)
+      (DESC "Smooth Room")
+      (NORTH PER SNAKE-ROOM-EXIT)
+      (SOUTH TO HALL-OF-STONE)
+      (EAST PER SNAKE-ROOM-EXIT)
+      (WEST PER SNAKE-ROOM-EXIT)
+<OBJECT SNAKE
+       (IN LOCAL-GLOBALS)
+       (DESC "serpent")
+<ROOM TEMPLE-ROOM
+      (IN ROOMS)
+      (DESC "Temple")
+      (SOUTH TO NORTH-SNAKE-ROOM)
+<OBJECT IDOL
+       (IN TEMPLE-ROOM)
+       (DESC "rodent idol")
+<OBJECT TEETH
+       (IN IDOL)
+       (DESC "fangs")
+<OBJECT MOUTH
+       (IN IDOL)
+       (DESC "mouth")
+<OBJECT OPAL
+       (IN IDOL)
+       (DESC "opal eye")
+<OBJECT OPAL-SHARD
+       (DESC "opal shard")
+<OBJECT ZIPPER
+       (IN RUINS-ROOM)
+       (DESC "zipper")
+<ROOM RUINS-ROOM
+      (IN ROOMS)
+      (DESC "Ruins Room")
+      (NORTH TO HALL-OF-STONE)
+      (SOUTH "The ruins end here.")
+      (DOWN TO RUINED-PIPE IF SMALL-FLAG)
+<OBJECT RUINS-CHANNEL
+       (IN RUINS-ROOM)
+       (DESC "channel")
+<OBJECT RUINS-INFLOW
+       (IN RUINS-ROOM)
+       (DESC "inflow pipe")
+<OBJECT RUINS-OUTFLOW
+       (IN RUINS-ROOM)
+       (DESC "outflow pipe")
+<ROOM CLIFF-TOP
+      (IN ROOMS)
+      (DESC "Cliff Top")
+      (DOWN TO CLIFF-MIDDLE)
+      (UP PER CLIFF-TOP-EXIT) ;"BOULDER-1"
+<ROOM BOULDER-1
+      (IN ROOMS)
+      (DESC "Boulder")
+      (UP TO BOULDER-2)
+      (DOWN TO CLIFF-TOP)
+<ROOM BOULDER-2
+      (IN ROOMS)
+      (DESC "Boulder")
+      (UP TO BOULDER-3)
+      (DOWN TO BOULDER-1)
+<ROOM BOULDER-3
+      (IN ROOMS)
+      (DESC "Boulder")
+      (UP TO MOUNTAIN-TOP)
+      (DOWN TO BOULDER-2)
+<ROOM MOUNTAIN-TOP
+      (IN ROOMS)
+      (DESC "Mountain Top")
+      (IN PER HUT-ROOM-EXIT)
+      (WEST PER HUT-ROOM-EXIT)
+      (DOWN PER CLIFF-TOP-EXIT ;CLIFF-TOP)
+<ROOM HUT-ROOM
+      (IN ROOMS)
+      (DESC "Stone Hut")
+      (OUT PER HUT-ROOM-EXIT ;MOUNTAIN-TOP)
+      (EAST PER HUT-ROOM-EXIT ;MOUNTAIN-TOP)
+<OBJECT HUT
+       (IN LOCAL-GLOBALS)
+       (DESC "stone hut")
+<OBJECT HERMIT
+       (IN HUT-ROOM)
+       (DESC "hermit")
+<OBJECT GLOBAL-CLIFF
+       (IN LOCAL-GLOBALS)
+       (DESC "cliff")
+<OBJECT GLOBAL-ROCKS
+       (IN LOCAL-GLOBALS)
+       (DESC "rock")
+<ROOM CLIFF-MIDDLE
+      (IN ROOMS)
+      (DESC "Cliff Middle")
+      (UP TO CLIFF-TOP)
+      (DOWN TO CLIFF-BOTTOM)
+<ROOM CLIFF-BOTTOM
+      (IN ROOMS)
+      (DESC "Cliff Bottom")
+      (UP TO CLIFF-MIDDLE)
+      (DOWN "You're at the bottom already.")
+      (WEST TO CAVE-ENTRANCE)
+      (EAST "There's no path that way.")
+      (SOUTH "There's no path that way.")
+<OBJECT GLOBAL-CAVE
+       (IN LOCAL-GLOBALS)
+       (DESC "cave")
+<ROOM CAVE-ENTRANCE
+      (IN ROOMS)
+      (DESC "Cave Entrance")
+      (EAST TO CLIFF-BOTTOM)
+      (IN TO OGRE-CAVE)
+      (NORTH TO OGRE-CAVE)
+      (UP "There's no path that way.")
+<ROOM OGRE-CAVE
+      (IN ROOMS)
+      (DESC "Cave")
+      (OUT TO CAVE-ENTRANCE)
+      (SOUTH TO CAVE-ENTRANCE)
+      (DOWN PER OGRE-BEDROOM-EXIT)
+<ROOM OGRE-BEDROOM
+      (IN ROOMS)
+      (DESC "Ogre Lair")
+      (UP TO OGRE-CAVE)
+      (OUT TO OGRE-CAVE)
+<OBJECT MAGIC-BOX
+       (IN OGRE-BEDROOM)
+       (DESC "gold box")
+<OBJECT OGRE
+       (IN OGRE-CAVE)
+       (DESC "ogre")
+;<OBJECT CLUB
+       (IN OGRE)
+       (DESC "club")
+<OBJECT WATER-CUBE
+       (IN MAGIC-BOX)
+       (DESC "cube")
+<ROOM WATER-ROOM
+      (IN ROOMS)
+      (DESC "Water Room")
+      (NORTH TO OUBLIETTE)
+      (EAST PER MAGIC-BOX-EXIT)
+      (SOUTH TO OCEAN-ROOM)
+<ROOM OCEAN-ROOM
+      (IN ROOMS)
+      (DESC "Mid-Ocean")
+<ROOM LOST-IN-OCEAN
+      (IN ROOMS)
+      (DESC "Open Ocean")
+<ROOM OCEAN-FLOOR
+      (IN ROOMS)
+      (DESC "Ocean Floor")
+      (UP TO OCEAN-ROOM)
+<OBJECT GROUPER-NEST
+       (IN OCEAN-FLOOR)
+       (DESC "grouper nest")
+<OBJECT BOTTLE
+       (IN OCEAN-ROOM)
+       (DESC "bottle")
+<OBJECT GROUPER
+       (IN OCEAN-ROOM)
+       (DESC "grouper")
+<ROOM OUBLIETTE
+      (IN ROOMS)
+      (DESC "Oubliette")
+      (DOWN PER OUBLIETTE-DOWN-EXIT)
+      (UP PER OUBLIETTE-UP-EXIT) ;"PRISON"
+<OBJECT ICEBERG
+       (DESC "ice floe")
+<OBJECT INFLOW
+       (IN OUBLIETTE)
+       (DESC "inflow pipe")
+<OBJECT OUTFLOW
+       (IN OUBLIETTE)
+       (DESC "outflow pipe")
+<ROOM IN-CHANNEL
+      (IN ROOMS)
+      (DESC "In Channel")
+      (UP TO OUBLIETTE)
+      (WEST TO IN-PIPE)
+      (EAST "The current is too strong." ;IN-PIPE-2)
+<OBJECT WATER-PIPE
+       (IN LOCAL-GLOBALS)
+       (DESC "pipe")
+<OBJECT OUBLIETTE-CHANNEL
+       (IN OUBLIETTE)
+       (DESC "channel")
+<ROOM IN-PIPE
+      (IN ROOMS)
+      (DESC "In Pipe")
+      (EAST "The current is too strong." ;IN-CHANNEL)
+      (WEST TO IN-PIPE-2)
+<ROOM IN-PIPE-2
+      (IN ROOMS)
+      (DESC "In Pipe")
+      (EAST "The current is too strong." ;IN-PIPE)
+      (WEST TO RUINED-PIPE)
+<OBJECT CHUNK
+       (IN IN-PIPE-2)
+       (DESC "crack")
+<ROOM RUINED-PIPE
+      (IN ROOMS)
+      (DESC "Ruined Pipe")
+      (EAST "The current is too strong." ;IN-PIPE-2)
+      (WEST TO IN-SEWER)
+      (UP TO RUINS-ROOM)
+      (OUT TO RUINS-ROOM)
+<ROOM IN-SEWER
+      (IN ROOMS)
+      (DESC "In Pipe")
+      (EAST "The current is too strong." ;RUINED-PIPE)
+<ROOM PRISON
+      (IN ROOMS)
+      (DESC "Dungeon")
+      (DOWN PER PRISON-DOWN-EXIT ;OUBLIETTE)
+      (UP TO GUARD-TOWER)
+      (EAST TO CELL-HALL-EAST)
+<OBJECT TRAP-DOOR
+       (IN LOCAL-GLOBALS)
+       (DESC "trap door")
+<ROOM CELL-HALL-EAST
+      (IN ROOMS)
+      (DESC "Dungeon East End")
+      (WEST TO PRISON)
+      (NORTH TO CELL-EAST)
+<ROOM CELL-EAST
+      (IN ROOMS)
+      (DESC "Dungeon Cell")
+      (SOUTH TO CELL-HALL-EAST)
+<OBJECT CABINET
+       (IN CELL-EAST)
+       (DESC "massive cabinet")
+<OBJECT PAST-CABINET
+       (IN PAST-CELL-EAST)
+       (DESC "massive cabinet")
+<OBJECT KEY
+       (IN BELBOZ)
+       (DESC "wrought iron key")
+<OBJECT DEAD-BOOK
+       (IN CABINET)
+       (DESC "moldy book")
+<ROOM GUARD-TOWER
+      (IN ROOMS)
+      (DESC "Guard Tower")
+      (DOWN TO PRISON)
+      (UP "You'll need to flap your wings harder than that.")
+<OBJECT ROC
+       (DESC "roc")
+<ROOM ROC-NEST
+      (IN ROOMS)
+      (DESC "In Roc Nest")
+      (OUT "The nest is perched on a pinnacle of rock. It's a long way down.")
+<OBJECT EGG
+       (IN ROC-NEST)
+       (DESC "roc egg")
+<OBJECT BABY-ROC
+       (DESC "roc chick")
+<OBJECT AIR-CUBE
+       (IN MOUTH)
+       (DESC "cube")
+<ROOM AIR-ROOM
+      (IN ROOMS)
+      (DESC "Air Room")
+      (NORTH TO GLACIER-ROOM)
+      (WEST TO BAZAAR)
+      (SOUTH PER MIDAIR-EXIT) ;"EITHER WARNING OR MIDAIR"
+      (DOWN PER MAGIC-BOX-EXIT)
+<ROOM GLACIER-ROOM
+      (IN ROOMS)
+      (DESC "Glacier")
+<ROOM EMPORIUM
+      (IN ROOMS)
+      (DESC "Emporium")
+      (WEST TO BAZAAR IF EMPORIUM-DOOR IS OPEN)
+      (OUT TO BAZAAR IF EMPORIUM-DOOR IS OPEN)
+<OBJECT EMPORIUM-DOOR
+       (IN LOCAL-GLOBALS)
+       (DESC "shop door")
+<OBJECT ZORKMID
+       (IN MOUNTAIN-TOP)
+       (DESC "gold coin")
+<OBJECT MERCHANT
+       (IN EMPORIUM)
+       (DESC "merchant")
+<ROOM BAZAAR
+      (IN ROOMS)
+      (DESC "Bazaar")
+      (EAST PER EMPORIUM-EXIT)
+      (IN PER EMPORIUM-EXIT)
+<OBJECT RANDOM-CARPET
+       (DESC "scruffy red carpet")
+<OBJECT MAGIC-CARPET
+       (DESC "beautiful blue carpet")
+<OBJECT CARPET-LABEL
+       (IN MAGIC-CARPET)
+       (DESC "label")
+<ROOM MIDAIR
+      (IN ROOMS)
+      (DESC "Midair")
+<ROOM LOST-IN-CLOUDS
+      (IN ROOMS)
+      (DESC "In Thick Clouds")
+<ROOM LOST-ON-LAND
+      (IN ROOMS)
+      (DESC "Wilderness")
+<OBJECT FIRE-CUBE
+       (IN PILLAR-ROOM)
+       (DESC "cube")
+<ROOM FIRE-ROOM
+      (IN ROOMS)
+      (DESC "Fire Room")
+      (SOUTH TO CLIFF-TOP)
+      (NORTH TO VOLCANO-ROOM)
+      (EAST PER MAGIC-BOX-EXIT)
+<ROOM VOLCANO-ROOM
+      (IN ROOMS)
+      (DESC "Volcano")
+<ROOM VOLCANO-BASE
+      (IN ROOMS)
+      (DESC "Volcano Base")
+<OBJECT LAVA-ROCK
+       (DESC "lava fragment")
+<ROOM OUTCROPPING-ROOM
+      (IN ROOMS)
+      (DESC "Outcropping")
+<OBJECT OUTCROPPING
+       (IN LOCAL-GLOBALS)
+       (DESC "outcropping")
+<OBJECT DARK-CUBE
+       (IN OTHER-ROCK)
+       (DESC "cube")
+<ROOM DARK-ROOM
+      (IN ROOMS)
+      (DESC "Dark Room")
+      (DOWN TO DARK-CAVE)
+      (UP PER MAGIC-BOX-EXIT)
+<ROOM DARK-CAVE
+      (IN ROOMS)
+      (DESC "Dark Cave")
+      (DOWN TO GRUE-CAVE)
+<ROOM GRUE-CAVE
+      (IN ROOMS)
+      (DESC "Grue Cave")
+      (UP TO DARK-CAVE)
+      (IN TO LIGHT-POOL)
+      (DOWN TO LIGHT-POOL)
+<ROOM LIGHT-POOL
+      (IN ROOMS)
+      (DESC "Light Pool")
+      (OUT TO GRUE-CAVE)
+      (UP TO GRUE-CAVE)
+<ROOM PILLAR-ROOM
+      (IN ROOMS)
+      (DESC "On Pillar")
+      (DOWN TO LIGHT-POOL)
+<OBJECT PILLAR
+       (IN LOCAL-GLOBALS)
+       (DESC "pillar")
+<OBJECT MIND-CUBE
+       (IN MAZE-1)
+       (DESC "cube")
+<ROOM MIND-ROOM
+      (IN ROOMS)
+      (DESC "No Place")
+      (EAST PER SCALES-ROOM-EXIT)
+      (SOUTH PER PLAIN-ROOM-EXIT)
+      (WEST PER MIND-BOX-EXIT)
+<ROOM INNER-VAULT
+      (IN ROOMS)
+      (DESC "Inner Vault")
+      (OUT TO SCALES-ROOM IF VAULT-DOOR IS OPEN)
+      (NORTH TO SCALES-ROOM IF VAULT-DOOR IS OPEN)
+<OBJECT VAULT-DOOR
+       (IN LOCAL-GLOBALS)
+       (DESC "vault door")
+<ROOM SCALES-ROOM
+      (IN ROOMS)
+      (DESC "Outer Vault")
+      (OUT PER IRON-DOOR-EXIT)
+      (NORTH PER IRON-DOOR-EXIT)
+      (SOUTH TO INNER-VAULT IF VAULT-DOOR IS OPEN)
+<OBJECT IRON-DOOR
+       (IN LOCAL-GLOBALS)
+       (DESC "iron door")
+<OBJECT TREASURE
+       (IN INNER-VAULT)
+       (DESC "treasure")
+<OBJECT JUNK
+       (DESC "pile of junk")
+<OBJECT ALARM-FAIRY
+       (DESC "alarm fairy")
+<OBJECT PILE-1
+       (IN SCALES-ROOM)
+       (DESC "first pile")
+<OBJECT PILE-2
+       (IN SCALES-ROOM)
+       (DESC "second pile")
+<OBJECT CUBE-1
+       (IN PILE-1)
+       (DESC "cube")
+<OBJECT CUBE-2
+       (IN PILE-1)
+       (DESC "cube")
+<OBJECT CUBE-3
+       (IN PILE-1)
+       (DESC "cube")
+<OBJECT CUBE-4
+       (IN PILE-1)
+       (DESC "cube")
+<OBJECT CUBE-5
+       (IN PILE-1)
+       (DESC "cube")
+<OBJECT CUBE-6
+       (IN PILE-1)
+       (DESC "cube")
+<OBJECT CUBE-7
+       (IN PILE-2)
+       (DESC "cube")
+<OBJECT CUBE-8
+       (IN PILE-2)
+       (DESC "cube")
+<OBJECT CUBE-9
+       (IN PILE-2)
+       (DESC "cube")
+<OBJECT CUBE-10
+       (IN PILE-2)
+       (DESC "cube")
+<OBJECT CUBE-11
+       (IN PILE-2)
+       (DESC "cube")
+<ROOM PLAIN-ROOM
+      (IN ROOMS)
+      (DESC "Plain")
+<OBJECT LINES
+       (IN LOCAL-GLOBALS)
+       (DESC "lines")
+<OBJECT ROCK
+       (IN PLAIN-ROOM)
+       (DESC "green eyed rock")
+<OBJECT OTHER-ROCK
+       (IN PLAIN-ROOM)
+       (DESC "brown eyed rock")
+<OBJECT LIGHT-CUBE
+       (IN GROUPER-NEST)
+       (DESC "cube")
+<ROOM LIGHT-ROOM
+      (IN ROOMS)
+      (DESC "Light Room")
+      (SOUTH PER MAGIC-BOX-EXIT)
+      (WEST TO VOLCANO-BASE)
+<OBJECT LIFE-CUBE
+       (IN HUT-ROOM)
+       (DESC "cube")
+<ROOM LIFE-ROOM
+      (IN ROOMS)
+      (DESC "Soft Room")
+      (EAST PER MAGIC-BOX-EXIT)
+      (SOUTH TO MEADOW-ROOM)
+<ROOM MEADOW-ROOM
+      (IN ROOMS)
+      (DESC "Meadow")
+<OBJECT SHEARS
+       (IN MEADOW-ROOM)
+       (DESC "pair of pruning shears")
+<OBJECT WEED
+       (IN MEADOW-ROOM)
+       (DESC "weed")
+<OBJECT DEATH-CUBE
+       (IN PRISON)
+       (DESC "cube")
+<ROOM DEATH-ROOM
+      (IN ROOMS)
+      (DESC "Boneyard")
+      (OUT TO BELWIT-SQUARE)
+      (NORTH TO BELWIT-SQUARE)
+      (WEST PER MAGIC-BOX-EXIT)
+<OBJECT CHANGE-CUBE
+       (IN CHUNK)
+       (DESC "cube")
+<ROOM CHANGE-ROOM
+      (IN ROOMS)
+      (DESC "Changing Room")
+      (NORTH TO BARE-ROOM)
+      (WEST TO MAZE-ANTEROOM)
+      (EAST PER MAGIC-BOX-EXIT)
+<ROOM BARE-ROOM
+      (IN ROOMS)
+      (DESC "Bare Room")
+<ROOM MAZE-ANTEROOM
+      (IN ROOMS)
+      (DESC "Carving Room")
+      (NORTH TO MAZE-9 IF MAZE-EXIT-FLAG)
+<OBJECT COMPASS-CARVING
+       (IN MAZE-ANTEROOM)
+       (DESC "carving")
+<OBJECT COMPASS-ROSE
+       (IN BARE-ROOM)
+       (DESC "compass rose")
+<OBJECT NORTH-RUNE
+       (IN LOCAL-GLOBALS)
+       (DESC "north rune")
+<OBJECT EAST-RUNE
+       (IN LOCAL-GLOBALS)
+       (DESC "east rune")
+<OBJECT WEST-RUNE
+       (IN LOCAL-GLOBALS)
+       (DESC "west rune")
+<OBJECT SOUTH-RUNE
+       (IN LOCAL-GLOBALS)
+       (DESC "south rune")
+<OBJECT NE-RUNE
+       (IN LOCAL-GLOBALS)
+       (DESC "northeast rune")
+<OBJECT NW-RUNE
+       (IN LOCAL-GLOBALS)
+       (DESC "northwest rune")
+<OBJECT SE-RUNE
+       (IN LOCAL-GLOBALS)
+       (DESC "southeast rune")
+<OBJECT SW-RUNE
+       (IN LOCAL-GLOBALS)
+       (DESC "southwest rune")
+<ROOM MAZE-1
+      (IN ROOMS)
+      (DESC "Octagonal Room")
+      (SOUTH TO MAZE-4)
+      (SE TO MAZE-5)
+      (EAST TO MAZE-2)
+<OBJECT OCTAGONAL-HOLE
+       (IN MAZE-2)
+       (DESC "octagonal hole")
+<OBJECT MAZE-2-DOOR
+       (IN MAZE-2)
+       (DESC "alabaster plug")
+<ROOM MAZE-2
+      (IN ROOMS)
+      (DESC "Octagonal Room")
+      (WEST TO MAZE-1 IF OCTAGONAL-HOLE IS OPEN)
+      (SW TO MAZE-4)
+      (SOUTH TO MAZE-5)
+      (SE TO MAZE-6)
+      (EAST TO MAZE-3)
+<ROOM MAZE-3
+      (IN ROOMS)
+      (DESC "Octagonal Room")
+      (WEST TO MAZE-2)
+      (SW TO MAZE-5)
+      (SOUTH TO MAZE-6)
+<ROOM MAZE-4
+      (IN ROOMS)
+      (DESC "Octagonal Room")
+      (NORTH TO MAZE-1)
+      (NE TO MAZE-2)
+      (EAST TO MAZE-5)
+      (SE TO MAZE-8)
+      (SOUTH TO MAZE-7)
+<ROOM MAZE-5
+      (IN ROOMS)
+      (DESC "Octagonal Room")
+      (NORTH TO MAZE-2)
+      (EAST TO MAZE-6)
+      (SOUTH TO MAZE-8)
+      (WEST TO MAZE-4)
+<ROOM MAZE-6
+      (IN ROOMS)
+      (DESC "Octagonal Room")
+      (NORTH TO MAZE-3)
+      (SOUTH TO MAZE-9)
+      (SW TO MAZE-8)
+      (WEST TO MAZE-5)
+      (NW TO MAZE-2)
+<ROOM MAZE-7
+      (IN ROOMS)
+      (DESC "Octagonal Room")
+      (NORTH TO MAZE-4)
+      (NE TO MAZE-5)
+      (EAST TO MAZE-8)
+<ROOM MAZE-8
+      (IN ROOMS)
+      (DESC "Octagonal Room")
+      (WEST TO MAZE-7)
+      (NW TO MAZE-4)
+      (NORTH TO MAZE-5)
+      (NE TO MAZE-6)
+      (EAST TO MAZE-9)
+<ROOM MAZE-9
+      (IN ROOMS)
+      (DESC "Octagonal Room")
+      (WEST TO MAZE-8)
+      (NW TO MAZE-5)
+      (NORTH TO MAZE-6)
+      (SOUTH TO MAZE-ANTEROOM)
+<OBJECT MAGIC-CUBE
+       (IN OUTCROPPING-ROOM)
+       (DESC "cube")
+<ROOM MAGIC-ROOM
+      (IN ROOMS)
+      (DESC "Magic Room")
+      (NORTH TO MEADOW-ROOM)
+      (EAST PER MAGIC-DOOR-EXIT)
+      (SOUTH PER MAGIC-BOX-EXIT)
+<OBJECT TIME-CUBE
+       (DESC "cube")
+<ROOM TIME-ROOM
+      (IN ROOMS)
+      (DESC "Sand Room")
+      (UP TO PAST-RUINS-ROOM)
+      (DOWN TO PAST-CELL-EAST)
+<ROOM PAST-RUINS-ROOM
+      (IN ROOMS)
+      (DESC "Ruins Room")
+      (NORTH "The water is too deep and cold.")
+      (SOUTH "The water is too deep and cold.")
+<OBJECT SACK
+       (IN PAST-RUINS-ROOM)
+       (DESC "sack")
+<ROOM PAST-CELL-EAST
+      (IN ROOMS)
+      (DESC "Dungeon Cell")
+      (SOUTH PER PAST-CELL-EAST-EXIT)
+<OBJECT CELL-DOOR
+       (IN LOCAL-GLOBALS)
+       (DESC "cell door")
+<OBJECT CONNECTIVITY-CUBE
+       (IN ROC-NEST)
+       (DESC "cube")
+<ROOM CONNECTIVITY-ROOM
+      (IN ROOMS)
+      (DESC "String Room")
+      (EAST PER MAGIC-BOX-EXIT)
+      (SOUTH TO RETREAT)
+<OBJECT QWORD
+       (IN GLOBAL-OBJECTS)
+       (DESC "handwritten word")
+<OBJECT GLOBAL-OBJECTS
+<OBJECT LOCAL-GLOBALS
+       (IN GLOBAL-OBJECTS)
+<OBJECT ROOMS
+       (IN TO ROOMS)>
+<OBJECT INTNUM
+       (IN GLOBAL-OBJECTS)
+       (DESC "number")
+<OBJECT PSEUDO-OBJECT
+       (IN GLOBAL-OBJECTS)
+       (DESC "pseudo")
+<OBJECT IT
+       (IN GLOBAL-OBJECTS)
+       (DESC "it")
+<OBJECT NOT-HERE-OBJECT
+       (DESC "it")
+<OBJECT LIGHT
+       (IN GLOBAL-OBJECTS)
+       (DESC "light")
+<OBJECT GLOBAL-HOLE
+       (IN LOCAL-GLOBALS)
+       (DESC "hole")
+<OBJECT CEILING
+       (IN GLOBAL-OBJECTS)
+       (DESC "ceiling")
+<OBJECT ICE
+       (IN GLOBAL-OBJECTS)
+       (DESC "ice")
+<OBJECT AIR
+       (IN GLOBAL-OBJECTS)
+       (DESC "air")
+<OBJECT HANDS
+       (IN GLOBAL-OBJECTS)
+       (DESC "your hand")
+<OBJECT HEAD
+       (IN GLOBAL-OBJECTS)
+       (DESC "your head")
+<OBJECT EYES
+       (IN GLOBAL-OBJECTS)
+       (DESC "your eyes")
+<OBJECT PLAYER
+       (IN COUNCIL-CHAMBER)
+       (DESC "it")
+<OBJECT ME
+       (IN GLOBAL-OBJECTS)
+       (DESC "yourself")
+<OBJECT GLOBAL-ROOM
+       (IN GLOBAL-OBJECTS)
+       (DESC "room")
+<OBJECT NORTH-WALL
+       (IN GLOBAL-OBJECTS)
+       (DESC "north wall")
+<OBJECT EAST-WALL
+       (IN GLOBAL-OBJECTS)
+       (DESC "east wall")
+<OBJECT WEST-WALL
+       (IN GLOBAL-OBJECTS)
+       (DESC "west wall")
+<OBJECT SOUTH-WALL
+       (IN GLOBAL-OBJECTS)
+       (DESC "south wall")
+<OBJECT NE-WALL
+       (IN GLOBAL-OBJECTS)
+       (DESC "northeast wall")
+<OBJECT NW-WALL
+       (IN GLOBAL-OBJECTS)
+       (DESC "northwest wall")
+<OBJECT SE-WALL
+       (IN GLOBAL-OBJECTS)
+       (DESC "southeast wall")
+<OBJECT SW-WALL
+       (IN GLOBAL-OBJECTS)
+       (DESC "southwest wall")
+<OBJECT DIRT
+       (IN GLOBAL-OBJECTS)
+       (DESC "dirt")
+<OBJECT GROUND
+       (IN GLOBAL-OBJECTS)
+       (DESC "ground")
+<OBJECT CORRIDOR
+       (IN GLOBAL-OBJECTS)
+       (DESC "passage")
+<OBJECT WALLS
+       (IN GLOBAL-OBJECTS)
+       (DESC "wall")
+<OBJECT GLOBAL-GRUE
+       (IN GLOBAL-OBJECTS)
+       (DESC "lurking grue")
+<OBJECT GRUE
+       (IN LOCAL-GLOBALS)
+       (DESC "grue")
+<OBJECT LOCAL-WATER
+       (DESC "water")
+<OBJECT WATER
+       (IN LOCAL-GLOBALS)
+       (DESC "water")
+<ROOM RETREAT
+      (IN ROOMS)
+      (DESC "Enchanters' Retreat")
+<OBJECT BELBOZ
+       (IN RETREAT)
+       (DESC "Belboz")
+<OBJECT GLOBAL-SLEEP
+       (IN GLOBAL-OBJECTS)
+       (DESC "sleep")
+<OBJECT MAGIC
+       (IN GLOBAL-OBJECTS)
+       (DESC "magic")
+<OBJECT KNIFE
+       (IN PLAYER)
+       (DESC "knife")
+<ROOM GUILD-HALL
+      (IN ROOMS)
+      (DESC "Guild Hall")
+      (NORTH TO COUNCIL-CHAMBER)
+      (SOUTH TO BELWIT-SQUARE)
+      (OUT TO BELWIT-SQUARE)
+<OBJECT BREAD
+       (IN GUILD-HALL)
+       (DESC "chunk of rye bread")
+<OBJECT FISH
+       (IN GUILD-HALL)
+       (DESC "smoked fish")
+<ROOM COUNCIL-CHAMBER
+      (IN ROOMS)
+      (DESC "Council Chamber")
+      (SOUTH TO GUILD-HALL)
+      (OUT TO GUILD-HALL)
+<OBJECT SORCERER
+       (IN COUNCIL-CHAMBER)
+       (DESC "sorcerer")
+<OBJECT SPEAKER
+       (IN COUNCIL-CHAMBER)
+       (DESC "speaker")
+<OBJECT ORKAN
+       (IN COUNCIL-CHAMBER)
+       (DESC "Orkan of Thriff")
+<OBJECT SNEFFLE
+       (IN COUNCIL-CHAMBER)
+       (DESC "Sneffle")
+<OBJECT HOOBLY
+       (IN COUNCIL-CHAMBER)
+       (DESC "Hoobly")
+<OBJECT GZORNENPLATZ
+       (IN COUNCIL-CHAMBER)
+       (DESC "Gzornenplatz")
+<OBJECT ARDIS
+       (IN COUNCIL-CHAMBER)
+       (DESC "Ardis")
+<ROOM BELWIT-SQUARE
+      (IN ROOMS)
+      (DESC "Belwit Square")
+      (NORTH TO GUILD-HALL)
+      (EAST "You wander around for a while and end up back in the square.")
+      (WEST "You wander around for a while and end up back in the square.")
+      (SOUTH "A remarkably surly guard blocks your way.")
+<OBJECT SHADOW
+       (IN COUNCIL-CHAMBER)
+       (DESC "shadowy figure")
+<OBJECT CLOUD
+       (IN BELWIT-SQUARE)
+       (DESC "cloud of orange smoke")
+<ROOM CASTLE
+      (IN ROOMS)
+      (DESC "Castle")
+<OBJECT HYPERCUBE
+       (DESC "construction")
+<OBJECT SPELL-BOOK
+       (IN PLAYER)
+       (DESC "spell book")
+<OBJECT BLORPLE-SPELL 
+       (IN CASTLE) ;"so MOBY-FIND can find it"
+       (DESC "blorple spell")
+<OBJECT LESOCH-SPELL 
+       (IN SPELL-BOOK)
+       (DESC "lesoch spell")
+<OBJECT SNAVIG-SPELL 
+       (IN CASTLE) ;"so MOBY-FIND can find it"
+       (DESC "snavig spell")
+<OBJECT GIRGOL-SCROLL 
+       (IN CASTLE) ;"so MOBY-FIND can find it"
+       (DESC "flimsy scroll")
+<OBJECT GIRGOL-SPELL 
+       (IN GIRGOL-SCROLL)
+       (DESC "girgol spell")
+<OBJECT JINDAK-SPELL 
+       (IN SPELL-BOOK)
+       (DESC "jindak spell")
+<OBJECT ESPNIS-SCROLL 
+       (IN OGRE-BEDROOM)
+       (DESC "dusty scroll")
+<OBJECT ESPNIS-SPELL
+       (IN ESPNIS-SCROLL)
+       (DESC "espnis spell")
+<OBJECT TINSOT-SCROLL 
+       (IN GLACIER-ROOM)
+       (DESC "white scroll")
+<OBJECT TINSOT-SPELL 
+       (IN TINSOT-SCROLL)
+       (DESC "tinsot spell")
+<OBJECT THROCK-SCROLL 
+       (IN CLIFF-MIDDLE)
+       (DESC "dirty scroll")
+<OBJECT THROCK-SPELL 
+       (IN THROCK-SCROLL)
+       (DESC "throck spell")
+<OBJECT CASKLY-SCROLL 
+       (IN ROC-NEST)
+       (DESC "stained scroll")
+<OBJECT CASKLY-SPELL 
+       (IN CASKLY-SCROLL)
+       (DESC "caskly spell")
+<OBJECT LISKON-SCROLL 
+       (IN BOTTLE)
+       (DESC "damp scroll")
+<OBJECT LISKON-SPELL
+       (IN LISKON-SCROLL)
+       (DESC "liskon spell")
+<OBJECT MALYON-SPELL 
+       (IN SPELL-BOOK)
+       (DESC "malyon spell")
+<OBJECT GNUSTO-SPELL 
+       (IN SPELL-BOOK)
+       (DESC "gnusto spell")
+<OBJECT FROTZ-SPELL
+       (IN SPELL-BOOK)
+       (DESC "frotz spell")
+<OBJECT REZROV-SPELL
+       (IN SPELL-BOOK)
+       (DESC "rezrov spell")
+<OBJECT YOMIN-SPELL
+       (IN SPELL-BOOK)
+       (DESC "yomin spell")
+<OBJECT SPELL-COPY 
+       (DESC "original")
+<OBJECT BLANK-SCROLL 
+       (IN PAST-CABINET)
+       (DESC "vellum scroll")
diff --git a/spells.txt b/spells.txt
new file mode 100644 (file)
index 0000000..3ba9dd5
--- /dev/null
@@ -0,0 +1,51 @@
+---Summary of magic spells---
+                          Earth
+                             Air
+                               Fire
+                                 Water
+                                  Dark/Light
+                                    Mind
+                                      Death/Life
+                                        Change
+                                          Magic
+                                            Time
+                                              Connectivity
+-------------------------|-----------------------
+    Spell   English      | E A F W D I X C M T =
+-------------------------|-----------------------
+ s *AIMFIZ  go to person |           I         =
+e   BLORB   strong box   | E               M
+  6 BLORPLE connections  |                 M   =
+e   CLEESH  newt         |       W       C
+e   EXEX    haste        |     F             T
+e  *FILFRE  fireworks    |     F   D
+es  FROTZ   light        |         D     C
+ s  FWEEP   bat          |   A           C
+ s  GASPAR  resurrect    |   A         X
+  6 GIRGOL  stop time    |               C   T
+es  GNUSTO  write magic  |               C M
+ s  GOLMAC  time travel  |                 M T
+e   GONDAR  quench       |     F       X
+e  *GUNCHO  banish       |             X       =
+es  IZYUK   fly          |   A           C
+e   KREBF   repair       |               C     =
+e  *KULCAD  dispel       |           I     M
+  6 LESOCH  wind         |   A F
+ s  MALYON  animate      |     F       X
+ s  MEEF    wilt         |       W     X
+e   MELBOR  protection   | E               M
+e   NITFOL  animal talk  |           I   C
+e   OZMOO   cheat death  |             X     T
+ s  PULVER  dry up       |     F W
+es  REZROV  open         | E             C
+  6 SNAVIG  grue         | E             C
+ s  SWANZO  exorcise     |             X   M
+ s  VARDIK  mind shield  | E         I
+e   VAXUM   charm        |   A       I
+ s  VEZZA   view future  |           I       T
+ s  YOMIN   mind probe   |         D I
+ s *YONK    augment      |                 M T
+e   ZIFMIA  summon       |           I         =
+-------------------------|-----------------------
+                           E A F W D I X C M T =
+\f
\ No newline at end of file
index 6b87847076ecdfcffb85573dec2b364477d01a22..86a0a81784f13f7aa9bf71f241ddcf3d50ae3817 100644 (file)
@@ -5,20 +5,14 @@
 <BUZZ $BUZZ A AN THE IS ARE AM AND OF THEN ALL ONE BUT EXCEPT \. \, \"
       PLEASE HERE SOME G AGAIN OOPS>
 
-<SYNONYM WITH USING>
-;<SYNONYM THROUGH THRU>
-<SYNONYM ON ONTO>
-<SYNONYM IN INSIDE INTO>
-<SYNONYM UNDER BELOW BENEATH UNDERNEATH>
-<SYNONYM AROUND ALONG>
-<SYNONYM ALL BOTH>
+<PREP-SYNONYM WITH USING>
+;<PREP-SYNONYM THROUGH THRU>
+<PREP-SYNONYM ON ONTO>
+<PREP-SYNONYM IN INSIDE INTO>
+<PREP-SYNONYM UNDER BELOW BENEATH UNDERNEATH>
+<PREP-SYNONYM AROUND ALONG>
 
-<SYNONYM NORTH N>
-<SYNONYM SOUTH S>
-<SYNONYM EAST E>
-<SYNONYM WEST W>
-<SYNONYM DOWN D>
-<SYNONYM UP U>
+<SYNONYM ALL BOTH>
 
 \\f
 
 <SYNTAX BRIEF = V-BRIEF>
 
 <SYNTAX SUPER = V-SUPER-BRIEF>
-<SYNONYM SUPER SUPERBRIEF>
+<VERB-SYNONYM SUPER SUPERBRIEF>
 
 <SYNTAX DIAGNOSE = V-DIAGNOSE>
 
 <SYNTAX I = V-INVENTORY>
-<SYNONYM I INVENTORY>
+<VERB-SYNONYM I INVENTORY>
 
 <SYNTAX QUIT = V-QUIT>
-<SYNONYM QUIT Q>
+<VERB-SYNONYM QUIT Q>
 
 <SYNTAX RESTAR = V-RESTART>
 
@@ -62,7 +56,7 @@
 
 <SYNTAX ANSWER = V-ANSWER>
 <SYNTAX ANSWER OBJECT = V-REPLY>
-<SYNONYM ANSWER REPLY RESPOND>
+<VERB-SYNONYM ANSWER REPLY RESPOND>
 
 <SYNTAX APPLY OBJECT (HELD MANY HAVE) TO OBJECT = V-PUT PRE-PUT>
 
 <SYNTAX ASK OBJECT (FIND PERSON) FOR OBJECT = V-ASK-FOR PRE-ASK-FOR>
 <SYNTAX ASK ABOUT OBJECT = V-ASK-ABOUT PRE-ASK-ABOUT>
 <SYNTAX ASK OBJECT (FIND PERSON) ABOUT OBJECT = V-ASK-ABOUT PRE-ASK-ABOUT>
-<SYNONYM ASK QUERY QUIZ>
+<VERB-SYNONYM ASK QUERY QUIZ>
 
 <SYNTAX ATTACK OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-ATTACK>
 <SYNTAX ATTACK OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
        WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-ATTACK>
-<SYNONYM ATTACK ASSAULT FIGHT HIT STRIKE>
+<VERB-SYNONYM ATTACK ASSAULT FIGHT HIT STRIKE>
 
 <SYNTAX BITE OBJECT = V-BITE>
 
 <SYNTAX BLOW OUT OBJECT = V-LAMP-OFF>
 
 <SYNTAX BOARD OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
-<SYNONYM BOARD EMBARK RIDE>
+<VERB-SYNONYM BOARD EMBARK RIDE>
 
 <SYNTAX BURN OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
         WITH OBJECT (HELD CARRIED ON-GROUND IN-ROOM HAVE) = V-BURN>
 <SYNTAX BURN DOWN OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
        WITH OBJECT (HELD CARRIED ON-GROUND IN-ROOM HAVE) = V-BURN>
-<SYNONYM BURN IGNITE>
+<VERB-SYNONYM BURN IGNITE>
 
 <SYNTAX CLIMB OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-FOO>
 <SYNTAX CLIMB ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
 <SYNTAX CLIMB IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
 <SYNTAX CLIMB OFF OBJECT (FIND RLANDBIT) (ON-GROUND IN-ROOM) = V-DISEMBARK>
 <SYNTAX CLIMB OUT OBJECT (FIND RLANDBIT) (ON-GROUND IN-ROOM) = V-DISEMBARK>
-<SYNONYM CLIMB SCALE>
+<VERB-SYNONYM CLIMB SCALE>
 
 <SYNTAX DESCEN OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
 
 <SYNTAX LIE DOWN OBJECT (FIND RLANDBIT) = V-SLEEP>
 <SYNTAX LIE ON OBJECT (FIND VEHBIT) = V-BOARD>
-;<SYNONYM LIE>
+;<VERB-SYNONYM LIE>
 
 <SYNTAX CLOSE OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
        = V-CLOSE PRE-CLOSE>
-<SYNONYM CLOSE SHUT ZIP>
+<VERB-SYNONYM CLOSE SHUT ZIP>
 
 <SYNTAX COMPARE OBJECT TO OBJECT = V-COMPARE>
 <SYNTAX COMPARE OBJECT WITH OBJECT = V-COMPARE>
 
 <SYNTAX COUNT OBJECT = V-COUNT>
 <SYNTAX COUNT OBJECT IN OBJECT = V-COUNT>
-;<SYNONYM COUNT>
+;<VERB-SYNONYM COUNT>
 
 <SYNTAX CROSS OBJECT = V-CROSS>
-<SYNONYM CROSS FORD TRAVERSE>
+<VERB-SYNONYM CROSS FORD TRAVERSE>
 
-<SYNTAX CUT OBJECT WITH OBJECT (FIND WEAPONBIT) (CARRIED HELD) = V-CUT>
-<SYNTAX CUT THROUGH OBJECT WITH OBJECT (FIND WEAPONBIT) (CARRIED HELD) = V-CUT>
-<SYNONYM CUT SLICE SLASH SEVER SPLIT DIVIDE PRUNE> 
+<SYNTAX CUT OBJECT
+       WITH OBJECT (FIND WEAPONBIT) (CARRIED HELD HAVE) = V-CUT>
+<SYNTAX CUT THROUGH OBJECT
+       WITH OBJECT (FIND WEAPONBIT) (CARRIED HELD HAVE) = V-CUT>
+<VERB-SYNONYM CUT SLICE SLASH SEVER SPLIT DIVIDE PRUNE> 
 
 <SYNTAX SHIT = V-CURSE>
-<SYNONYM SHIT DAMN FUCK>
+<VERB-SYNONYM SHIT DAMN FUCK>
 
 <SYNTAX CRACK OBJECT (ON-GROUND IN-ROOM) = V-MUNG>
 <SYNTAX CRACK OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
        WITH OBJECT (HELD CARRIED TAKE) = V-MUNG>
 <SYNTAX CRACK DOWN OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
        WITH OBJECT (HELD CARRIED TAKE) = V-MUNG>
-<SYNONYM CRACK DESTROY BREAK SMASH WRECK SCRATCH>
+<VERB-SYNONYM CRACK DESTROY BREAK SMASH WRECK SCRATCH>
 
 <SYNTAX DIG IN OBJECT = V-DIG>
 <SYNTAX DIG WITH OBJECT = V-DIG>
        WITH OBJECT (FIND TOOLBIT) (HELD CARRIED HAVE) = V-DIG>
 <SYNTAX DIG IN OBJECT (ON-GROUND IN-ROOM)
        WITH OBJECT (FIND TOOLBIT) (HELD CARRIED HAVE) = V-DIG>
-<SYNONYM DIG EXCAVATE>
+<VERB-SYNONYM DIG EXCAVATE>
 
 <SYNTAX DISEMBARK = V-DISEMBARK>
 <SYNTAX DISEMBARK OBJECT (ON-GROUND IN-ROOM) = V-DISEMBARK>
-<SYNONYM DISEMBARK DEBARK>
+<VERB-SYNONYM DISEMBARK DEBARK>
 
 <SYNTAX DRINK OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-DRINK>
 <SYNTAX DRINK FROM OBJECT (HELD CARRIED) = V-DRINK-FROM>
-<SYNONYM DRINK SIP SWALLOW>
+<VERB-SYNONYM DRINK SIP SWALLOW>
 
 <SYNTAX DROP OBJECT (HELD MANY HAVE) = V-DROP PRE-DROP>
 <SYNTAX DROP OBJECT (HELD MANY HAVE) DOWN OBJECT = V-PUT PRE-PUT>
 <SYNTAX DROP OBJECT (HELD MANY HAVE) IN OBJECT = V-PUT PRE-PUT>
 <SYNTAX DROP OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT PRE-PUT>
-<SYNONYM DROP RELEASE DUMP>
+<VERB-SYNONYM DROP RELEASE DUMP>
 
 <SYNTAX EAT OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY) = V-EAT>
-<SYNONYM EAT CONSUME TASTE ;INGEST GOBBLE>
+<VERB-SYNONYM EAT CONSUME TASTE ;INGEST GOBBLE>
 
-<SYNTAX ENTER = V-ENTER>
-<SYNTAX ENTER OBJECT = V-THROUGH>
+;<SYNTAX ENTER = V-ENTER>
+<SYNTAX ENTER OBJECT (FIND RLANDBIT) = V-THROUGH>
 
-<SYNTAX EXIT = V-EXIT>
-<SYNTAX EXIT OBJECT = V-EXIT>
-<SYNONYM EXIT DEPART WITHDRAW>
+;<SYNTAX EXIT = V-EXIT>
+<SYNTAX EXIT OBJECT (FIND RLANDBIT) = V-EXIT>
+<VERB-SYNONYM EXIT DEPART WITHDRAW>
 
 <SYNTAX EXAMINE OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
        = V-EXAMINE PRE-EXAMINE>
 <SYNTAX EXAMINE ON OBJECT (HELD CARRIED IN-ROOM ON-GROUND)
        = V-LOOK-INSIDE>
 <SYNTAX EXAMINE FOR OBJECT = V-FIND>
-<SYNONYM EXAMINE INSPECT DESCRIBE CHECK OBSERVE WATCH>
+<VERB-SYNONYM EXAMINE INSPECT DESCRIBE CHECK OBSERVE WATCH>
 
 ;<SYNTAX EXORCISE OBJECT = V-EXORCISE>
 ;<SYNTAX EXORCISE OUT OBJECT (FIND PERSON) = V-EXORCISE>
 ;<SYNTAX EXORCISE AWAY OBJECT (FIND PERSON) = V-EXORCISE>
-;<SYNONYM EXORCISE BANISH DRIVE>
+;<VERB-SYNONYM EXORCISE BANISH DRIVE>
 
 <SYNTAX EXTINGUISH OBJECT
        (MANY HELD CARRIED ON-GROUND IN-ROOM TAKE HAVE) = V-LAMP-OFF>
-;<SYNONYM EXTINGUISH DOUSE>
+;<VERB-SYNONYM EXTINGUISH DOUSE>
 
 <SYNTAX FILL OBJECT (FIND CONTBIT) (HELD TAKE HAVE) = V-FILL>
 <SYNTAX FILL OBJECT (FIND CONTBIT) (HELD TAKE HAVE)
        AT OBJECT = V-FILL>
 
 <SYNTAX FIND OBJECT = V-FIND>
-;<SYNONYM FIND SEEK SEE>
+;<VERB-SYNONYM FIND SEEK SEE>
 
 <SYNTAX FLY = V-FLY>
 <SYNTAX FLY OBJECT = V-FLY>
+<SYNONYM FLY LAUNCH>
 
 <SYNTAX FOLLOW = V-FOLLOW>
 <SYNTAX FOLLOW OBJECT = V-FOLLOW>
-<SYNONYM FOLLOW PURSUE CHASE>
+<VERB-SYNONYM FOLLOW PURSUE CHASE>
 
 <SYNTAX FORGET OBJECT = V-FORGET>
-<SYNONYM FORGET UNLEARN ;UNMEMORIZE>
+<VERB-SYNONYM FORGET UNLEARN ;UNMEMORIZE>
 
 <SYNTAX GIVE OBJECT (MANY HELD HAVE)
         TO OBJECT (FIND PERSON) (ON-GROUND) = V-GIVE PRE-GIVE>
 <SYNTAX GIVE OBJECT (FIND PERSON) (ON-GROUND) WITH OBJECT (MANY HELD HAVE)
        = V-SGIVE PRE-SGIVE>
 <SYNTAX GIVE OBJECT FOR OBJECT = V-OFFER>
-<SYNONYM GIVE HAND OFFER FEED ;PRESENT>
+<VERB-SYNONYM GIVE HAND OFFER FEED ;PRESENT>
 
 <SYNTAX HELLO = V-HELLO>
 <SYNTAX HELLO OBJECT = V-HELLO>
-<SYNONYM HELLO HI ;GREETINGS>
+<VERB-SYNONYM HELLO HI ;GREETINGS>
 
 <SYNTAX HELP = V-HELP>
 <SYNTAX HELP OBJECT = V-HELP>
-<SYNONYM HELP HINT ;HINTS>
+<VERB-SYNONYM HELP HINT ;HINTS>
 
 <SYNTAX HIDE = V-HIDE>
 <SYNTAX HIDE OBJECT (HELD HAVE) = V-HIDE>
 <SYNTAX HIDE OBJECT (HELD HAVE) FROM OBJECT = V-HIDE>
 <SYNTAX HIDE IN OBJECT = V-BOARD>
 <SYNTAX HIDE FROM OBJECT = V-HIDE-FROM>
-<SYNONYM HIDE CONCEAL ;STASH>
+<VERB-SYNONYM HIDE CONCEAL ;STASH>
 
 <SYNTAX INFLAT OBJECT = V-INFLATE>
 
 <SYNTAX JUMP OFF OBJECT = V-LEAP>
 <SYNTAX JUMP ON OBJECT = V-CLIMB-ON>
 <SYNTAX JUMP TO OBJECT = V-CLIMB-ON>
-<SYNONYM JUMP LEAP DIVE>
+<VERB-SYNONYM JUMP LEAP DIVE>
 
 <SYNTAX KICK OBJECT = V-KICK PRE-OPEN>
 
 <SYNTAX KILL OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-KILL>
 <SYNTAX KILL OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
        WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-KILL>
-<SYNONYM KILL MURDER SLAY STAB>
+<VERB-SYNONYM KILL MURDER SLAY STAB>
 
 <SYNTAX KISS OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-KISS>
 
 <SYNTAX KNOCK AT OBJECT = V-KNOCK>
 <SYNTAX KNOCK ON OBJECT = V-KNOCK>
 <SYNTAX KNOCK DOWN OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-ATTACK>
-<SYNONYM KNOCK RAP>
+<VERB-SYNONYM KNOCK RAP>
 
 <SYNTAX LAND = V-LAND>
 
 <SYNTAX LISTEN FOR OBJECT = V-LISTEN>
 
 <SYNTAX LOCK OBJECT (ON-GROUND IN-ROOM) WITH OBJECT
-       (HELD CARRIED ON-GROUND IN-ROOM) = V-LOCK>
+       (HELD CARRIED HAVE) = V-LOCK>
 
 <SYNTAX LOOK = V-LOOK>
 <SYNTAX LOOK AROUND OBJECT (FIND RLANDBIT) = V-LOOK>
 <SYNTAX LOOK UP OBJECT IN OBJECT = V-WHAT>
 <SYNTAX LOOK FOR OBJECT = V-FIND>
 <SYNTAX LOOK OBJECT = V-CHASTISE>
-<SYNONYM LOOK L STARE GAZE>
+<VERB-SYNONYM LOOK L STARE GAZE>
 
 <SYNTAX LOWER OBJECT = V-LOWER>
 <SYNTAX LOWER OBJECT IN OBJECT = V-LOWER-INTO>
 <SYNTAX LOWER OBJECT DOWN OBJECT = V-LOWER-INTO>
 
 <SYNTAX MELT OBJECT WITH OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-MELT>
-<SYNONYM MELT THAW>
+<VERB-SYNONYM MELT THAW>
 
 <SYNTAX MOVE = V-WALK-AROUND>
 <SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
 <SYNTAX ROLL UP OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
-<SYNONYM MOVE SHIFT>
+<VERB-SYNONYM MOVE SHIFT>
 
 <SYNTAX PAY OBJECT (MANY HELD HAVE) = V-PAY>
 <SYNTAX PAY OBJECT (FIND PERSON) WITH OBJECT (MANY HELD HAVE) = V-PAY>
 <SYNTAX PULL OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
 <SYNTAX PULL ON OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
 <SYNTAX PULL DOWN OBJECT = V-LOWER>
-<SYNONYM PULL TUG DRAG>
+<VERB-SYNONYM PULL TUG DRAG>
 
 <SYNTAX OPEN OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
        = V-OPEN PRE-OPEN>
 <SYNTAX OPEN OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
        WITH OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
        = V-OPEN PRE-OPEN>
-<SYNONYM OPEN UNZIP>
+<VERB-SYNONYM OPEN UNZIP>
 
 <SYNTAX PICK OBJECT = V-PICK>
 <SYNTAX PICK OBJECT WITH OBJECT = V-PICK>
 <SYNTAX PICK UP OBJECT (FIND TAKEBIT) (ON-GROUND MANY) = V-TAKE PRE-TAKE>
 
 <SYNTAX PLUG OBJECT WITH OBJECT = V-PLUG>
-<SYNONYM PLUG CLOG BLOCK>
+<VERB-SYNONYM PLUG CLOG BLOCK>
 
 <SYNTAX REPAIR OBJECT = V-REPAIR>
 <SYNTAX REPAIR OBJECT WITH OBJECT = V-REPAIR>
-<SYNONYM REPAIR PATCH FIX>
+<VERB-SYNONYM REPAIR PATCH FIX>
 
 <SYNTAX POINT AT OBJECT = V-POINT>
 <SYNTAX POINT TO OBJECT = V-POINT>
-<SYNONYM POINT GESTURE>
+<VERB-SYNONYM POINT GESTURE>
 
 <SYNTAX POKE OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
        WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-MUNG>
-<SYNONYM POKE JAB BLIND>
+<VERB-SYNONYM POKE JAB BLIND>
 
 <SYNTAX POUR OBJECT (HELD CARRIED) = V-POUR>
 <SYNTAX POUR OBJECT (HELD CARRIED) IN OBJECT = V-POUR>
 <SYNTAX POUR OBJECT (HELD CARRIED) ON OBJECT = V-POUR>
 <SYNTAX POUR OBJECT (HELD CARRIED) FROM OBJECT = V-POUR>
-<SYNONYM POUR EMPTY SPILL>
+<VERB-SYNONYM POUR EMPTY SPILL>
 
 <SYNTAX PUMP UP OBJECT = V-PUMP>
 <SYNTAX PUMP UP OBJECT WITH OBJECT = V-PUMP>
 <SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND) OBJECT = V-PUSH-TO>
 <SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND) TO OBJECT = V-PUSH-TO>
 <SYNTAX PUSH OBJECT UNDER OBJECT = V-PUT-UNDER>
-<SYNONYM PUSH PRESS SHOVE>
+<VERB-SYNONYM PUSH PRESS SHOVE>
 
 <SYNTAX PUT OBJECT (HELD MANY HAVE) IN OBJECT = V-PUT PRE-PUT>
 <SYNTAX PUT OBJECT (HELD MANY HAVE) DOWN OBJECT = V-PUT PRE-PUT>
 <SYNTAX PUT OBJECT (HELD MANY HAVE) UNDER OBJECT = V-PUT-UNDER> 
 <SYNTAX PUT ON OBJECT (IN-ROOM ON-GROUND CARRIED MANY) = V-WEAR>
 <SYNTAX PUT OBJECT (HELD MANY HAVE) BEHIND OBJECT = V-PUT-BEHIND>
-<SYNONYM PUT STUFF INSERT PLACE LAY FIT WEDGE>
+<VERB-SYNONYM PUT STUFF INSERT PLACE LAY FIT WEDGE>
 
 <SYNTAX RAISE OBJECT = V-RAISE>
 <SYNTAX RAISE UP OBJECT = V-RAISE>
-<SYNONYM RAISE LIFT>
+<VERB-SYNONYM RAISE LIFT>
 
 <SYNTAX REACH IN OBJECT (ON-GROUND IN-ROOM) = V-REACH-IN>
 
        THROUGH OBJECT = V-READ PRE-READ>
 <SYNTAX READ ABOUT OBJECT = V-WHAT>
 <SYNTAX READ ABOUT OBJECT IN OBJECT = V-WHAT>
-;<SYNONYM READ>
+;<VERB-SYNONYM READ>
 
 <SYNTAX REMOVE OBJECT = V-TAKE-OFF>
-<SYNONYM REMOVE SHED>
+<VERB-SYNONYM REMOVE SHED>
 
 <SYNTAX SAY TO OBJECT (FIND PERSON) (IN-ROOM) = V-TELL>
 <SYNTAX SAY = V-SAY>
-<SYNONYM SAY TALK CALL>
+<VERB-SYNONYM SAY TALK CALL>
 
 <SYNTAX SEARCH OBJECT = V-SEARCH>
 <SYNTAX SEARCH IN OBJECT = V-SEARCH>
 <SYNTAX SEARCH FOR OBJECT = V-FIND>
-<SYNONYM SEARCH RUMMAGE ;FRISK>
+<VERB-SYNONYM SEARCH RUMMAGE ;FRISK>
 
 <SYNTAX SEND FOR OBJECT = V-SEND>
 
 <SYNTAX SHAKE OBJECT = V-SHAKE>
 <SYNTAX SHAKE OBJECT AT OBJECT = V-WAVE-AT>
-<SYNONYM SHAKE ;JOSTLE RATTLE>
+<VERB-SYNONYM SHAKE ;JOSTLE RATTLE>
 
 <SYNTAX SHARPEN OBJECT WITH OBJECT (FIND TOOLBIT) (HAVE) = V-SHARPEN>
-;<SYNONYM SHARPEN HONE>
+;<VERB-SYNONYM SHARPEN HONE>
 
 <SYNTAX SHOOT OBJECT = V-SHOOT>
-<SYNONYM SHOOT FIRE>
+<VERB-SYNONYM SHOOT FIRE>
 
 <SYNTAX SHOW OBJECT TO OBJECT = V-SHOW>
 <SYNTAX SHOW OBJECT OBJECT = V-SSHOW PRE-SSHOW>
 <SYNTAX SIT DOWN OBJECT (FIND RLANDBIT) (ON-GROUND IN-ROOM) = V-SIT>
 <SYNTAX SIT IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
 <SYNTAX SIT AT OBJECT = V-SIT>
-<SYNONYM SIT REST MEDITATE>
+<VERB-SYNONYM SIT REST MEDITATE>
 
 <SYNTAX SLEEP = V-SLEEP>
 <SYNTAX SLEEP IN OBJECT (IN-ROOM ON-GROUND) = V-BOARD>
 <SYNTAX SNOOZE ON OBJECT (IN-ROOM ON-GROUND) = V-BOARD>
 
 <SYNTAX SKIP = V-SKIP>
-<SYNONYM SKIP HOP CAVORT GAMBOL>
+<VERB-SYNONYM SKIP HOP CAVORT GAMBOL>
 
 <SYNTAX SLIDE OBJECT UNDER OBJECT = V-PUT-UNDER>
 
 <SYNTAX SMELL = V-SMELL>
 <SYNTAX SMELL OBJECT = V-SMELL>
-<SYNONYM SMELL SNIFF>
+<VERB-SYNONYM SMELL SNIFF>
 
 <SYNTAX SPIN OBJECT = V-SPIN>
-<SYNONYM SPIN WHIRL ROTATE>
+<VERB-SYNONYM SPIN WHIRL ROTATE>
 
 <SYNTAX SQUEEZE OBJECT = V-SQUEEZE>
 <SYNTAX SQUEEZE OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT PRE-PUT>
 <SYNTAX STAND = V-STAND>
 <SYNTAX STAND UP OBJECT (FIND RLANDBIT) = V-STAND>
 <SYNTAX STAND ON OBJECT = V-STAND-ON>
-<SYNONYM STAND RISE>
+<VERB-SYNONYM STAND RISE>
 
 <SYNTAX SWIM = V-SWIM>
 <SYNTAX SWIM IN OBJECT = V-SWIM>
-<SYNONYM SWIM BATHE WADE>
+<VERB-SYNONYM SWIM BATHE WADE>
 
 <SYNTAX SWING OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-SWING>
 <SYNTAX SWING OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
        AT OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-SWING>
-<SYNONYM SWING THRUST>
+<VERB-SYNONYM SWING THRUST>
 
 <SYNTAX TAKE OBJECT (FIND TAKEBIT) (ON-GROUND IN-ROOM MANY) = V-TAKE PRE-TAKE>
 <SYNTAX TAKE IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
 <SYNTAX TAKE OBJECT (FIND TAKEBIT) (IN-ROOM CARRIED MANY)
        IN OBJECT = V-TAKE PRE-TAKE>
 <SYNTAX TAKE OFF OBJECT = V-TAKE-OFF>
-<SYNONYM TAKE GRAB CATCH GET HOLD CARRY SNATCH>
+<VERB-SYNONYM TAKE GRAB CATCH GET HOLD CARRY SNATCH>
 
 <SYNTAX TELL OBJECT (FIND PERSON) (IN-ROOM) = V-TELL>
 <SYNTAX TELL OBJECT ABOUT OBJECT = V-TELL-ABOUT PRE-TELL-ABOUT>
 
 <SYNTAX THANK OBJECT = V-THANK>
 <SYNTAX THANK = V-THANK>
-<SYNONYM THANK THANKS>
+<VERB-SYNONYM THANK THANKS>
 
 <SYNTAX THROW OBJECT (HELD CARRIED HAVE)
        AT OBJECT (ON-GROUND IN-ROOM) = V-THROW>
 <SYNTAX THROW OBJECT (HELD MANY HAVE) DOWN OBJECT = V-THROW>
 <SYNTAX THROW OBJECT (HELD MANY HAVE) IN OBJECT = V-THROW>
 <SYNTAX THROW OBJECT (HELD MANY HAVE) ON OBJECT = V-THROW>
-<SYNONYM THROW HURL TOSS PITCH>
+<VERB-SYNONYM THROW HURL TOSS PITCH>
 
 <SYNTAX TIE OBJECT TO OBJECT = V-TIE>
 <SYNTAX TIE UP OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) WITH OBJECT
        (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE) = V-TIE-UP>
-<SYNONYM TIE FASTEN ATTACH>
+<VERB-SYNONYM TIE FASTEN ATTACH>
 
 <SYNTAX TIME = V-TIME>
-<SYNONYM TIME T>
+<VERB-SYNONYM TIME T>
 
 <SYNTAX TORTUR OBJECT = V-TORTURE>
 
 <SYNTAX TOUCH OBJECT = V-RUB>
 <SYNTAX TOUCH OBJECT WITH OBJECT = V-RUB>
 <SYNTAX TOUCH OBJECT TO OBJECT = V-SRUB PRE-SRUB>
-<SYNONYM TOUCH FEEL PAT PET RUB>
+<VERB-SYNONYM TOUCH FEEL PAT PET RUB>
 
 <SYNTAX TURN OBJECT TO OBJECT = V-TURN>
 <SYNTAX TURN OBJECT = V-TURN>
 <SYNTAX TURN OFF OBJECT
        (HELD CARRIED ON-GROUND IN-ROOM TAKE) = V-LAMP-OFF>
 <SYNTAX TURN OVER OBJECT = V-TURN-OVER> 
-<SYNONYM TURN FLIP SHUT SET>
+<VERB-SYNONYM TURN FLIP ;SHUT SET>
 
 <SYNTAX UNLOCK OBJECT (ON-GROUND IN-ROOM)
-       WITH OBJECT = V-UNLOCK>
+       WITH OBJECT (HELD CARRIED HAVE) = V-UNLOCK>
 
 <SYNTAX UNTIE OBJECT (ON-GROUND IN-ROOM HELD CARRIED) = V-UNTIE>
 <SYNTAX UNTIE OBJECT (ON-GROUND IN-ROOM HELD CARRIED) FROM OBJECT = V-UNTIE>
-<SYNONYM UNTIE FREE UNFASTEN UNATTACH>
+<VERB-SYNONYM UNTIE FREE UNFASTEN UNATTACH>
 
 <SYNTAX WAIT = V-WAIT>
 <SYNTAX WAIT FOR OBJECT = V-WAIT-FOR>
-<SYNONYM WAIT Z>
+<VERB-SYNONYM WAIT Z>
 
 <SYNTAX WAKE OBJECT (FIND RLANDBIT) = V-ALARM>
 <SYNTAX WAKE UP OBJECT (FIND RLANDBIT) = V-ALARM>
-<SYNONYM WAKE AWAKE SURPRISE STARTLE ROUSE>
+<VERB-SYNONYM WAKE AWAKE SURPRISE STARTLE ROUSE>
 
 <SYNTAX WALK = V-WALK-AROUND>
 <SYNTAX WALK OBJECT = V-WALK>
 <SYNTAX WALK UP OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-UP>
 <SYNTAX WALK DOWN OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
 <SYNTAX WALK TO OBJECT = V-WALK-TO>
-<SYNONYM WALK GO RUN PROCEED STEP>
+<VERB-SYNONYM WALK GO RUN PROCEED STEP>
 
 <SYNTAX WAVE OBJECT (HELD CARRIED) = V-WAVE>
 <SYNTAX WAVE AT OBJECT = V-WAVE-AT>
 <SYNTAX WAVE TO OBJECT = V-WAVE-AT>
 <SYNTAX YELL AT OBJECT = V-WAVE-AT>
 <SYNTAX WAVE OBJECT (HELD CARRIED) AT OBJECT = V-WAVE>
-<SYNONYM WAVE ;MOTION BECKON>
+<VERB-SYNONYM WAVE ;MOTION BECKON>
 
 <SYNTAX WEAR OBJECT = V-WEAR>
 
 <SYNTAX WHAT OBJECT = V-WHAT>
-;<SYNONYM WHAT WHATS>
+;<VERB-SYNONYM WHAT WHATS>
 
 <SYNTAX WHERE = V-WHERE>
 <SYNTAX WHERE OBJECT = V-WHERE>
-;<SYNONYM WHERE WHERES>
+;<VERB-SYNONYM WHERE WHERES>
 
 <SYNTAX WHO = V-WHO>
 <SYNTAX WHO OBJECT = V-WHO>
-;<SYNONYM WHO WHOS>
+;<VERB-SYNONYM WHO WHOS>
 
 <SYNTAX YAWN = V-YAWN>
 
 <SYNTAX YELL = V-YELL>
-<SYNONYM YELL SCREAM SHOUT>
+<VERB-SYNONYM YELL SCREAM SHOUT>
 
 \^L
 
 <SYNTAX CAST OBJECT = V-CAST>
 <SYNTAX CAST OBJECT ON OBJECT = V-CAST>
 <SYNTAX CAST OBJECT AT OBJECT = V-CAST>
-<SYNONYM CAST INCANT INVOKE>
+<VERB-SYNONYM CAST INCANT INVOKE>
 
 <SYNTAX LEARN OBJECT (HELD CARRIED MANY) = V-LEARN>
-<SYNONYM LEARN MEMORIZE ;KNOW>
+<VERB-SYNONYM LEARN MEMORIZE ;KNOW>
 
 <SYNTAX SPELLS = V-SPELLS>
 
        WITH OBJECT (FIND TOOLBIT) = V-WRITE-ON PRE-WRITE-ON>
 <SYNTAX WRITE IN OBJECT (HELD CARRIED)
        WITH OBJECT (FIND TOOLBIT) = V-WRITE-ON PRE-WRITE-ON>
-<SYNONYM WRITE PRINT INSCRIBE SCRIBE>
+<VERB-SYNONYM WRITE PRINT INSCRIBE SCRIBE>
 
 <SYNTAX PRY OBJECT WITH OBJECT = V-PRY>
 <SYNTAX PRY OUT OBJECT WITH OBJECT = V-PRY>
+<VERB-SYNONYM PRY LEVER LOOSEN>
 
 <SYNTAX PLANT OBJECT = V-PLANT>
 <SYNTAX PLANT OBJECT IN OBJECT = V-PLANT>
-<SYNONYM PLANT BURY>
+<VERB-SYNONYM PLANT BURY>
 
 <SYNTAX YES = V-YES>
-<SYNONYM YES Y OKAY>
+<VERB-SYNONYM YES Y OKAY>
 <SYNTAX NO = V-NO>
-<SYNONYM NO NOPE>
+<VERB-SYNONYM NO NOPE>
 
 <SYNTAX BUY OBJECT FROM OBJECT (FIND PERSON) = V-BUY>
 <SYNTAX BUY OBJECT WITH OBJECT = V-BUY>
-<SYNONYM BUY PURCHASE>
+<VERB-SYNONYM BUY PURCHASE>
 
 <SYNTAX SELL OBJECT TO OBJECT (FIND PERSON) = V-SELL>
 <SYNTAX SELL OBJECT OBJECT = V-SSELL PRE-SSELL>
 <SYNTAX LURK IN OBJECT = V-SLAVER>
 
 <SYNTAX SLAVER = V-SLAVER>
-<SYNONYM SLAVER DROOL SALIVATE GURGLE>
+<VERB-SYNONYM SLAVER DROOL SALIVATE GURGLE>
 
 <SYNTAX ERASE OBJECT = V-ERASE>
 
 <SYNTAX ADMIRE OBJECT (FIND PERSON) = V-ADMIRE>
-<SYNONYM ADMIRE COMPLIMENT>
+<VERB-SYNONYM ADMIRE COMPLIMENT>
 
 <SYNTAX COPY OBJECT (FIND READBIT)
        WITH OBJECT (FIND TOOLBIT) = V-COPY>
 <SYNTAX COPY OBJECT (FIND READBIT) = V-COPY>
 
 <SYNTAX BARGAIN WITH OBJECT (FIND PERSON) = V-BARGAIN>
-<SYNONYM BARGAIN HAGGLE>
+<VERB-SYNONYM BARGAIN HAGGLE>
+
+<SYNTAX LOVE OBJECT (FIND PERSON) = V-EMPATHIZE>
+<SYNTAX PRAY FOR OBJECT (FIND PERSON) = V-EMPATHIZE>
+<SYNTAX SYMPATHIZE WITH OBJECT (FIND PERSON) = V-EMPATHIZE>
+<VERB-SYNONYM SYMPATHIZE EMPATHIZE>
\ No newline at end of file
index b669b44b76531e702f16b079916e5252731ff6db..caa4131974c6dee6894ac222584074fa8d73ce60 100644 (file)
--- a/verbs.zil
+++ b/verbs.zil
 
 <GLOBAL FAILED "Failed.|">
 
-<ROUTINE FINISH ("OPTIONAL" (REPEATING <>))
+<ROUTINE FINISH ("AUX" WRD)
+        <V-SCORE>
         <CRLF>
         %<DEBUG-CODE <TELL-C-INTS>>
-        <COND (<NOT .REPEATING>
-               <V-SCORE>
-               <CRLF>)>
-        <TELL
+        <REPEAT ()
+                <CRLF>
+                <TELL
 "Would you like to restart the game from the beginning, restore a saved
 game position, or end this session of the game?|
 (Type RESTART, RESTORE, or QUIT):|
 >">
-        <READ ,P-INBUF ,P-LEXV>
-        <COND (<EQUAL? <GET ,P-LEXV 1> ,W?RESTAR>
-               <RESTART>
-               <TELL ,FAILED>
-               <FINISH T>)
-              (<EQUAL? <GET ,P-LEXV 1> ,W?RESTOR>
-               <COND (<RESTORE>
-                      <TELL ,OKAY>)
-                     (T
-                      <TELL ,FAILED>
-                      <FINISH T>)>)
-              (T
-               <QUIT>)>>
+                <READ ,P-INBUF ,P-LEXV>
+                <SET WRD <GET ,P-LEXV 1>>
+                <COND (<EQUAL? .WRD ,W?RESTAR>
+                       <RESTART>
+                       <TELL ,FAILED>)
+                      (<EQUAL? .WRD ,W?RESTOR>
+                       <COND (<RESTORE>
+                              <TELL ,OKAY>)
+                             (T
+                              <TELL ,FAILED>)>)
+                      (<EQUAL? .WRD ,W?QUIT ,W?Q>
+                       <QUIT>)>>>
 
 <ROUTINE YES? ()
         <PRINTI "?|
@@ -276,21 +275,17 @@ game position, or end this session of the game?|
 <GLOBAL COPR-NOTICE
 " a transcript of interaction with SPELLBREAKER.">
 
-<ROUTINE V-VERSION ("AUX" (CNT 17))
-        <TELL <COND (<PROB 99> "SPELLBREAKER")
-                    (ELSE "MAGE")>
-"|
+<ROUTINE V-VERSION ()
+        <TELL
+"SPELLBREAKER|
 An Interactive Fantasy|
 Copyright (c) 1985 by Infocom, Inc. All rights reserved.|
 SPELLBREAKER is a trademark of Infocom, Inc.|
 Release ">
         <PRINTN <BAND <GET 0 1> *3777*>>
         <TELL " / Serial number ">
-        <REPEAT ()
-                <COND (<G? <SET CNT <+ .CNT 1>> 23>
-                       <RETURN>)
-                      (T
-                       <PRINTC <GETB 0 .CNT>>)>>
+        <DO (CNT 18 23)
+            <PRINTC <GETB 0 .CNT>>>
         <CRLF>>
 
 <ROUTINE V-$VERIFY ()
@@ -344,14 +339,11 @@ Release ">
                <PERFORM ,V?TELL ,PRSO>
                <RTRUE>)>>
 
-<ROUTINE FIND-IN (WHERE WHAT "AUX" W)
-        <SET W <FIRST? .WHERE>>
-        <REPEAT ()
-                <COND (<NOT .W> <RFALSE>)
-                      (<AND <FSET? .W .WHAT>
-                            <VISIBLE? .W>>
-                       <RETURN .W>)>
-                <SET W <NEXT? .W>>>>
+<ROUTINE FIND-IN (WHERE WHAT)
+        <MAP-CONTENTS (W .WHERE)
+                      (END <RFALSE>)
+                      <COND (<AND <FSET? .W .WHAT> <VISIBLE? .W>>
+                             <RETURN .W>)>>>
 
 "V-ASK-FOR -- transform into PRSO, GIVE PRSI TO ME"
 
@@ -380,7 +372,10 @@ Release ">
 
 <ROUTINE PRE-BOARD ("AUX" AV)
         <SET AV <LOC ,WINNER>>
-        <COND (<FSET? ,PRSO ,VEHBIT>
+        <COND (<OR <FSET? ,PRSO ,VEHBIT>
+                   <AND <EQUAL? ,PRSO ,PSEUDO-OBJECT>
+                        <EQUAL? <GETP ,PSEUDO-OBJECT ,P?ACTION>
+                                ,POOL-PSEUDO>>>
                <COND (<EQUAL? .AV ,PRSO>
                       <TELL ,YOU-ARE ,PERIOD>)
                      (<AND <FSET? .AV ,VEHBIT>
@@ -590,14 +585,6 @@ the luncheon.">
                      (ELSE
                       <TELL ,NOW-BLACK>)>)>>
 
-<ROUTINE V-ENTER ("AUX" VEHICLE)
-        <COND (<SET VEHICLE <FIND-IN ,HERE ,VEHBIT>>
-               <PERFORM ,V?BOARD .VEHICLE>
-               <RTRUE>)
-              (<GETPT ,HERE ,P?IN>
-               <DO-WALK ,P?IN>)
-              (ELSE <V-WALK-AROUND>)>>
-
 <ROUTINE PRE-EXAMINE ()
         <COND (<NOT ,LIT>
                <TELL ,TOO-DARK>)>>
@@ -626,7 +613,8 @@ is glowing brightly." CR>)
         <TELL "You see nothing special about "><THE-PRSO>>
 
 <ROUTINE V-EXIT ()
-        <COND (<AND ,PRSO <FSET? ,PRSO ,VEHBIT>>
+        <COND (<AND <NOT <EQUAL? ,PRSO ,ROOMS>>
+                    <FSET? ,PRSO ,VEHBIT>>
                <PERFORM ,V?DISEMBARK ,PRSO>
                <RTRUE>)
               (<GETPT ,HERE ,P?OUT>
@@ -965,7 +953,8 @@ before you leaped.">)
 <ROUTINE V-OPEN ("AUX" F STR)
         <COND (<OR <AND <NOT <FSET? ,PRSO ,CONTBIT>>
                         <NOT <FSET? ,PRSO ,DOORBIT>>>
-                   <FSET? ,PRSO ,SCROLLBIT>>
+                   <FSET? ,PRSO ,SCROLLBIT>
+                   <FSET? ,PRSO ,SURFACEBIT>>
                <TELL "You must tell me how to do that to ">
                <A-PRSO>)
               (<NOT <EQUAL? <GETP ,PRSO ,P?CAPACITY> 0>>
@@ -1021,23 +1010,19 @@ before you leaped.">)
               (ELSE
                <YOU-CANT-X-THAT "pour">)>>
 
-<ROUTINE EMPTY-ALL (FROM TO "AUX" (F <FIRST? .FROM>) N R)
-        <COND (<NOT .F>
+<ROUTINE EMPTY-ALL (FROM TO "AUX" F N R)
+        <COND (<NOT <FIRST? .FROM>>
                <TELL CTHE .FROM " is empty." CR>)
               (ELSE
-               <REPEAT ()
-                       <COND (.F
-                              <SET N <NEXT? .F>>
-                              <TELL D .F ": ">
-                              <SET R
-                                   <COND (.TO
-                                          <PERFORM ,V?PUT .F .TO>)
-                                         (ELSE
-                                          <PERFORM ,V?DROP .F>)>>
-                              <COND (<EQUAL? .R ,M-FATAL> <RTRUE>)
-                                    (ELSE <SET F .N>)>)
-                             (T
-                              <RTRUE>)>>)>>
+               <MAP-CONTENTS (F N .FROM)
+                       <TELL D .F ": ">
+                       <SET R
+                            <COND (.TO
+                                   <PERFORM ,V?PUT .F .TO>)
+                                  (ELSE
+                                   <PERFORM ,V?DROP .F>)>>
+                       <COND (<EQUAL? .R ,M-FATAL> <RTRUE>)>>
+               <RTRUE>)>>
 
 <ROUTINE V-PUMP ()
         <TELL "It's not clear how." CR>>
@@ -1300,6 +1285,11 @@ the ogre destroys you.">)
 don't know how much it hurt.">)
                      (ELSE
                       <IMPOSSIBLE-TO-SLEEP>)>)
+              (<AND <NOT .FORCE?>
+                    <OR <IN? ,PLAYER ,CABINET>
+                        <IN? ,PLAYER ,PAST-CABINET>>>
+               <TELL
+"It's too cramped in here to sleep comfortably." CR>)
               (T
                <COND (<EQUAL? ,HERE ,GLACIER-ROOM>
                       <SETG FREEZE-COUNT 9>)>
@@ -1330,8 +1320,10 @@ don't know how much it hurt.">)
                             (<IN? ,PLAYER ,ZIPPER>
                              <TELL "in the nothingness">)
                             (ELSE
-                             <MOVE ,PLAYER ,HERE>
-                             <TELL "on the floor">)>
+                             <TELL "on the floor">
+                             <COND (<NOT <IN? ,PLAYER ,HERE>>
+                                    <TELL " next to " THE <LOC ,PLAYER>>
+                                    <MOVE ,PLAYER ,HERE>)>)>
                       <TELL " and">)>
                <TELL " drift off, renewing your powers and
 refreshing your mind. Time passes as you snore blissfully." CR CR>
@@ -1354,7 +1346,6 @@ possessions!">)>)>
                <WEAR-OFF-SPELLS>
                <RTRUE>)>>
 
-
 <GLOBAL DREAMS
        <LTABLE 0        
 "a group of mages clustered around a magic mirror in which
@@ -1483,7 +1474,7 @@ smokes."
 
 <ROUTINE NOT-IN-VEHICLE? ("AUX" (V <LOC ,WINNER>))
         <AND ,PRSO
-             <NOT <EQUAL? ,PRSO .V>>
+             <NOT <EQUAL? ,PRSO .V ,ROOMS>>
              <NOT <HELD? ,PRSO>>
              <NOT <HELD? ,PRSO .V>>>>
 
@@ -1514,13 +1505,22 @@ smokes."
                <END-QUOTE>)>>
 
 <ROUTINE V-THANK ()
-        <COND (<FSET? ,PRSO ,PERSON>
+        <COND (<NOT ,PRSO>
+               <TELL "You're welcome, I guess." CR>)
+              (<FSET? ,PRSO ,PERSON>
                <UNINTERESTED ,PRSO>)
               (T
                <HOW-DO-YOU> <A-PRSO?>)>>
 
 <ROUTINE V-THROUGH ("AUX" M)
-       <COND (<FSET? ,PRSO ,VEHBIT>
+       <COND (<EQUAL? ,PRSO ,ROOMS>
+              <COND (<SET M <FIND-IN ,HERE ,VEHBIT>>
+                     <PERFORM ,V?BOARD .M>
+                     <RTRUE>)
+                    (<GETPT ,HERE ,P?IN>
+                     <DO-WALK ,P?IN>)
+                    (ELSE <V-WALK-AROUND>)>)
+             (<FSET? ,PRSO ,VEHBIT>
               <PERFORM ,V?BOARD ,PRSO>
               <RTRUE>)
              (<NOT <FSET? ,PRSO ,TAKEBIT>>
@@ -1760,21 +1760,17 @@ to take it as well." CR>)>
                <RTRUE>)>>
 
 <ROUTINE CCOUNT (OBJ "AUX" (CNT 0) X)
-        <COND (<SET X <FIRST? .OBJ>>
-               <REPEAT ()
-                       <SET CNT <+ .CNT 1>>
-                       <COND (<NOT <SET X <NEXT? .X>>>
-                              <RETURN>)>>)>
-        .CNT>
+        <MAP-CONTENTS (X .OBJ)
+                      (END <RETURN .CNT>)
+             <SET CNT <+ .CNT 1>>>>
 
 ;"WEIGHT: Gets sum of SIZEs of supplied object, recursing to nth level."
 
 <ROUTINE WEIGHT (OBJ "AUX" CONT (WT 0))
         <COND (<EQUAL? .OBJ ,ZIPPER ,SPELL-BOOK> T)
-              (<SET CONT <FIRST? .OBJ>>
-               <REPEAT ()
-                       <SET WT <+ .WT <WEIGHT .CONT>>>
-                       <COND (<NOT <SET CONT <NEXT? .CONT>>> <RETURN>)>>)>
+              (ELSE
+               <MAP-CONTENTS (CONT .OBJ)
+                             <SET WT <+ .WT <WEIGHT .CONT>>>>)>
         <+ .WT <GETP .OBJ ,P?SIZE>>>
 
 ^\L
@@ -2033,6 +2029,8 @@ long description (fdesc or ldesc), otherwise will print short."
 <ROUTINE JIGS-UP ("OPTIONAL" (DESC <>))
         <SETG WINNER ,PLAYER>
         <COND (.DESC <TELL .DESC>)>
+        <COND (<EQUAL? ,HERE ,INNER-VAULT ,SCALES-ROOM>
+               <MAKE-JUNK>)>
         <FORGET-ALL>
         <SETG FALLING? <>>
         <TELL "|
@@ -2089,6 +2087,8 @@ start all over with someone else. All this effort, too.">>
                        <COND (<AND <FSET? .F ,TAKEBIT>
                                    <NOT <EQUAL? .F .IGNORE>>> 
                               <SET 1ST? T>
+                              <COND (<IN? ,PLAYER .F>
+                                     <MOVE ,PLAYER ,HERE>)>
                               <COND (.TO <MOVE .F .TO>)
                                     (ELSE <REMOVE .F>)>)>
                        <SET F .N>)
@@ -2137,6 +2137,9 @@ start all over with someone else. All this effort, too.">>
               (<AND <SEE-INSIDE? .L>
                     <VISIBLE? .L>>
                <RTRUE>)
+              (<AND <EQUAL? ,HERE ,VOLCANO-ROOM>
+                    <EQUAL? .L ,OUTCROPPING-ROOM>>
+               <RTRUE>)
               (T
                <RFALSE>)>>
 
@@ -2388,3 +2391,6 @@ CTHE ,PRSI ,HAS-NO-SURFACE ,PERIOD>>
         <COND (<EQUAL? ,PRSO ,ROOMS>
                <TELL "Don't get a sore neck." CR>)
               (ELSE <PERFORM ,V?WHAT ,PRSO> <RTRUE>)>>
+
+<ROUTINE V-EMPATHIZE ()
+        <TELL "A nice sentiment." CR>>
diff --git a/z6.chart b/z6.chart
new file mode 100644 (file)
index 0000000..7ccf62e
--- /dev/null
+++ b/z6.chart
@@ -0,0 +1,378 @@
+-date-  -rel-  -size-  -pre-   -obj-   -glo-   -voc-
+ 5/20     13   66554   16454   179     140     638
+ 5/20     14   66520   16469   179     140     638
+ 5/21     14   68452   16598   181     141     644
+ 5/21     15   68494   16645   183     141     645
+ 5/22     17   70064   16673   182     145     647
+ 5/22     20   71098   16836   184     148     653
+ 5/23     21   72396   16946   186     149     657
+ 5/23     22   74738   17027   188     154     658
+ 5/24     23   74748   17032   188     155     658
+ 5/24     24   75162   17073   189     155     660
+ 5/24     25   76512   17306   190     158     676
+ 5/24     26   76610   17303   190     158     676
+ 5/24     27   77102   17333   190     158     679
+ 5/24     28   80376   17830   204     159     691
+ 5/24     29   80394   17845   204     159     691
+ 5/24     30   81454   17926   206     159     694
+ 5/25     31   81598   17961   207     159     695
+ 5/29     32   82386   18032   208     160     695
+ 5/30     33   84666   18220   213     161     700
+ 5/30     34   84664   18222   213     162     700
+ 5/31     35   86940   18386   217     161     707
+ 5/31     36   86950   18388   217     162     707
+ 5/31     37   87834   18423   218     164     707
+ 6/03     38   89926   18762   227     167     718
+ 6/03     39   89814   18763   227     166     719
+ 6/03     40   89812   18763   227     166     719
+ 6/03     41   90480   18797   228     166     719
+ 6/04     42   90952   18859   229     165     723
+ 6/04     43   91660   18889   230     165     722
+ 6/04     44   93598   19263   238     169     737
+ 6/05     45   95128   19435   242     170     745
+ 6/06     46   95388   19486   243     170     746
+ 6/06     47   95610   19494   243     170     747
+ 6/07     48   96604   19688   245     170     759
+ 6/07     49   96612   19695   245     170     760
+ 6/07     50   97764   19759   245     170     763
+ 6/07     51   97760   19776   245     170     764
+ 6/10     52   98206   19844   246     170     768
+ 6/10     52   98204   19844   246     170     768
+ 6/10     53   98314   19856   246     170     768
+ 6/11     54   98410   19856   246     170     768
+ 6/11     55   99286   19853   246     172     764
+ 6/11     56   99278   19846   246     172     763
+ 6/12     57   99292   19848   246     173     763
+ 6/12     58   99324   19848   246     173     763
+ 6/12     59   99298   19857   246     173     764
+ 6/12     59   99306   19857   246     173     764
+ 6/12     59   99324   19857   246     173     764
+ 6/12     59   99336   19869   246     173     764
+ 6/12     59   99330   19869   246     173     764
+ 6/12     59   99334   19869   246     173     764
+ 6/12     60   99330   19858   245     173     764
+ 6/13     61   99682   19918   245     174     768
+ 6/13     62   99682   19918   245     174     768
+ 6/13     63   99682   19918   245     174     768
+ 6/13     64   101206  19957   245     175     768
+ 6/13     65   101204  19959   245     176     768
+ 6/14     66   102492  20096   247     176     772
+ 6/14     66   102492  20096   247     176     772
+ 6/14     67   102490  20096   247     176     772
+ 6/14     68   102616  20096   247     176     772
+ 6/14     69   102618  20098   247     176     772
+ 6/15     70   103690  20241   247     176     778
+ 6/15     71   103754  20248   247     177     778
+ 6/15     72   103436  20312   247     177     778
+ 6/15     73   103530  20316   247     177     778
+ 6/17     74   104230  20393   247     177     779
+ 6/17     74   105386  20439   247     177     780
+ 6/17     75   106402  20519   247     177     783
+ 6/17     75   106406  20521   247     178     783
+ 6/18     75   106406  20521   247     178     783
+ 6/18     76   107214  20526   247     178     783
+ 6/18     76   107212  20526   247     178     783
+ 6/18     77   109802  20603   248     178     788
+ 6/18     77   109796  20603   248     178     788
+ 6/19     77   109796  20603   248     178     788
+ 6/19     78   110120  20594   247     178     788
+ 6/19     78   110932  20630   247     177     791
+ 6/19     78   110930  20630   247     177     791
+ 6/20     78   110930  20630   247     177     791
+ 6/20     78   110930  20630   247     177     791
+ 6/20     79   111590  20623   247     176     791
+ 6/20     79   111590  20623   247     176     791
+ 6/20     79   111592  20623   247     176     791
+ 6/20     80   111840  20646   247     176     792
+ 6/21     81   112946  20746   247     179     797
+ 6/24     82   113810  20806   247     179     801
+ 6/24     82   113808  20806   247     179     801
+ 6/24     82   113804  20806   247     179     801
+ 6/24     82   113804  20806   247     179     801
+ 6/24     82   115522  20970   249     180     804
+ 6/25     82   115530  20970   249     180     804
+ 6/25     83   116110  21010   249     180     806
+ 6/25     84   116840  21170   250     180     807
+ 6/26     85   117186  21171   250     180     807
+ 6/26     86   117324  21173   250     181     807
+ 6/27     87   117962  21238   250     181     810
+ 6/27     87   118220  21238   250     181     810
+ 6/28     88   118510  21242   250     180     810
+ 6/28     89   118742  21266   250     181     811
+ 6/28     89   118742  21266   250     181     811
+ 6/28     89   119128  21582   250     181     811
+ 6/28     89   119164  21582   250     181     811
+ 7/01     90   119526  21493   252     183     811
+ 7/02     91   119850  21495   252     184     811
+ 7/02     92   119902  21517   252     184     812
+ 7/02     92   119904  21517   252     184     812
+ 7/02     92   120224  21540   252     184     813
+ 7/02     92   120222  21540   252     184     813
+ 7/02     92   120220  21537   252     184     813
+ 7/03     93   120306  21537   252     184     813
+ 7/03     93   123774  24789   252     184     813
+ 7/03     93   121664  22273   252     184     851
+ 7/03     93   122132  22273   252     184     851
+ 7/03     93   122134  22266   252     184     850
+ 7/05     94   123278  22301   252     185     852
+ 7/05     94   123282  22301   252     185     852
+ 7/08     95   123368  22299   252     184     852
+ 7/08     96   126010  22431   251  &nbs