Rename game files to lowercase
[spiritwrak.git] / src / SPIRIT.INF
diff --git a/src/SPIRIT.INF b/src/SPIRIT.INF
deleted file mode 100644 (file)
index a458e6d..0000000
+++ /dev/null
@@ -1,3075 +0,0 @@
-! *****************************************************************
-! SPIRITWRAK -- An exercise in copyright infringement :)
-! 
-!    Release 1, 12/95 -- 3/96 
-!    Release 2, 3/96 --  
-!    Release 3, 4/96 --  
-!    Copyright (C) 1996, D. S. Yu
-!
-!    This program is free software; you can redistribute it and/or modify
-!    it under the terms of the GNU General Public License as published by
-!    the Free Software Foundation; either version 3 of the License, or
-!    (at your option) any later version.
-!
-!    This program is distributed in the hope that it will be useful,
-!    but WITHOUT ANY WARRANTY; without even the implied warranty of
-!    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-!    GNU General Public License for more details.
-!
-!    You should have received a copy of the GNU General Public License
-!    along with this program; if not, write to the Free Software
-!    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-!
-!    To contact the author (Dan Yu), send email to dsyu@holonet.net.
-!
-! *****************************************************************
-
-! SPECIAL THANKS:
-!   Mr. Blank, Lebling, Meretzky, Moriarty for the Zork universe.
-!   Graham Nelson for Inform, and for various code I've shamelessly cribbed.
-
-! NUTRITION NOTE:  No Microsoft(tm) products were used in the 
-! construction of this game
-
-! ** inform compile switches here **
-Switches exv5b;
-
-! ** abbreviations
-Include "spirita.inf"; 
-
-! ** Story Constants **
-Constant Story "SPIRITWRAK";
-Constant Headline "^An Interactive Fantasy Adventure^\
-                  Copyright (C) 1996, by D.S. Yu.^\
-Portions copyright Graham Nelson.^^\
-'SPIRITWRAK' comes with ABSOLUTELY NO WARRANTY ^\
-This is free software, and you are welcome to redistribute it \
-under conditions as described in the GNU General Public License as published by \
-the Free Software Foundation; either version 3 of the License, or \
-(at your option) any later version.^^";
-
-Release 3;
-
-! ** Scoring System
-Constant MAX_SCORE 250;
-Constant NUMBER_TASKS 27;
-Constant TASKS_PROVIDED;
-Constant OBJECT_SCORE 2;
-! Constant ROOM_SCORE 1;
-! Global task_scores initial t1 t2 t3.....
-Array task_scores -> 2 5 5 5 10 15 5 5 5 5 5 5 10 10 10 5 5 5 10 10 5 5 10 5 5 5 10; 
-
-! ** Player inventory and weight system
-Constant MAX_CARRIED 15;  ! Max of 15 items carried at start
-         ! This can be changed on the fly by adjusting player.capacity
-Property weight; 
-! Entire weight system removed 3/16/96, however certain puzzles
-! inadvertently depend on this, so...
-Property size;
-
-global Player_HP_MAX = 20; ! number of hp MAX (should be 20 + score)
-global Player_HP_CUR = 20; ! number of hp left (< MAX)
-global Player_Lives_Left = 3;  ! number of resurrects left 
-global in_hades = 0;           ! Is the player in Hades? (we certainly hope not)
-global in_atrii = 0;           ! Is the player in Atrii? 
-! global all_my_spells data 32;   array for spells in spell book
-Array all_my_spells -> 64;  ! array for spells in spell book
-global has_resist_gravity = 0; ! is player resisting gravity?(see feeyuk spell)
-global spell_block = 0;        ! block spell-related stuff (end-game)
-
-! Any actions that are replaced get mentioned here
-Replace PraySub;
-Replace StrongSub;
-Replace InsertSub;  ! for relative sizes
-
-! *** Include Parser and VerbLib
-Include "Parser";
-Include "VerbLib";
-
-! -- two global location ptrs for Barsap's Gambit
-global WN_TO;
-global ES_TO;
-
-! ******************* CLASS DEFS *****************
-
-! ** rod (part) class and attribute
-Attribute is_rod;
-
-Class rod_class
-   with name "rod",
-        description "A thin rod made from some undeterminable material.",
-        !weight 10,
-        size 10,
-        before [;
-           Cast:
-              "You complete the chant, but the rod lies unaffected! \
-              Perhaps it is protected from magic somehow?";
-           Join:
-              if (second has is_rod)
-                 "You try to bring the rods together, but a \
-sudden blast of energy prevents you, and stings your hands!";
-! (note that true rod pieces have their own Join befores, which
-! should, in theory, get called instead of this one).
-        ],
-   has is_rod scored;
-
-Class parchment_class
-   with name "parchment",
-        description "A piece of blank parchment.",
-        !weight 10,
-        size 15,
-;
-
-Attribute is_sphere;
-
-Class sphere_class
-   with name "sphere",
-        description "A small hard sphere made from some undeterminable material.",
-        !weight 5,
-        size 3,
-        before [;
-           Cast:
-              "You complete the chant, but the sphere lies unaffected! \
-              Perhaps it is protected from magic somehow?";
-        ],
-   has is_sphere scored;
-
-Attribute is_flag;
-
-Class flag_class
-   with name "flag" "cloth",
-        plural "flags",
-        description "A short square piece of colored cloth.",
-        !weight 10,        
-        size 15,
-   has is_flag;
-
-Class trophy_dep_class
-   with name "depression" "niche" "hole" "keyhole",
-      initial [;
-print "There is a circular depression in the center of the floor";
-if (trophy in self)
-   ". Sitting in the depression is a trophy.";
-else ".";
-      ],
-      description [;
-print "A small circular depression in the center \
-      of the stone floor";
-if (trophy in self)
-     ". At the moment, the depression holds a trophy.";
-else ". There seem to be three small concave \
-      marks in the otherwise flat stone of the depression.";
-      ],
-      size 8,
-      capacity 1,
-has static container open;
-   
-Attribute is_niche;
-Property counter_niche;  
-Property niche_dir;  ! assoc with the dir a niche is facing.
-
-Class niche_class 
-   with name "niche",
-        capacity 1,
-        niche_dir 1,  ! default north
-        description "It looks like a chiseled-out niche in the floor.",
-        initial [;
-           switch (self.niche_dir) {
-           1: print "There's a square niche in the northern edge of the floor here";
-           2: print "There's a square niche in the western edge of the floor here";
-           3: print "There's a square niche in the southern edge of the floor here";
-           4: print "There's a square niche in the eastern edge of the floor here";
-           }
-           if (children(self) ~= 0) {
-              print ". Resting in the niche is ";
-              InDefArt(child(self));
-              print " that extends into the darkness";
-! weird -- There is no "CInDefArt(), equiv to (A) obj, which
-! is probably pretty simple...
-           }
-           ".";
-        ],
-        before 
-        [ j ;
-          Receive:
-            if (noun hasnt is_wood_beam)
-                 "That's not going to stay in the niche.";
-            else {
-               ! (odd capacity check, seems like I'm stepping in front...)
-               if (children(self) ~= 0)
-                  "The niche space is currently full.";
-               ! place both pieces in niches
-               j = child(noun);  ! child piece (whichever)
-               move j to self.counter_niche;
-               move noun to self;
-               "You carefully place one end of the beam in the niche and \
-               extend the other end into the darkness. You feel something \
-               solid support the far end!";
-            }
-          LetGo:
-            ! (reconstruct wood beam) Assumption is that noun must have 
-            ! wood_beam attrib.
-            move child(self.counter_niche) to child(self);
-            move child(self) to player;
-            "Taken.";
-        ],  
-        has static container open is_niche; 
-
-! ** multiple coins, cribbed from "Balances"
-Attribute is_coin;
-Class  coin_class
-  with name "coin",
-       description "A round metal disc, with ~1zm~ stamped on both sides.",
-       !weight 1,
-       size 1,
-       parse_name
-       [ i j w;
-         if (parser_action==##TheSame)
-         {   if ((parser_one.&name)-->0 == (parser_two.&name)-->0) return -1;
-             return -2;
-         }
-         w=(self.&name)-->0;
-         for (::i++)
-         {   j=NextWord();
-             if (j=='coins') parser_action=##PluralFound;
-             else if (j~='coin' or w) return i;
-         }
-       ], 
-       plural "coins",
-  has  is_coin;
-
-! ** Spell-casting system, again cribbed from Graham's "Balances",
-!    except stuffy priests call them 'chants'...
-! ----------------------------------------------------------------------------
-!   Now the whole spell-casting system
-! ----------------------------------------------------------------------------
-
-Attribute is_spell;
-Attribute known_about;
-Attribute is_scroll;    
-Attribute is_spell_book;
-Property magic;
-Fake_Action SayName;
-
-[ SpellName obj; print (address) (obj.&name)-->0; ];
-
-Class  spell_class
-  with name "spell" "spells" "chant" "chants", article "the", number 0,
-       short_name
-       [; SpellName(self); print " chant"; give self known_about; rtrue;
-       ],
-       before
-       [; 
-  !        SayName: SpellName(self); print " chant:  ", object self;
-          SayName: SpellName(self); print " chant:  ", self;
-                   give self known_about; rtrue;
-          Examine: <SayName self>; ".";
-       ],
-       size 0,
-  has  is_spell;
-
-Object memory "memory"
-  with capacity 5,   ! will change periodically, given God-granted powers...
-       number 1,
-       size 0,
-       before
-       [ i j k;
-         Examine:
-           if (spell_block == 1)
-               "Currently, your mystic powers don't seem to be working.";
-           objectloop (i in self) if (i.number==100) j++;
-           if (j>0)
-           {   print "The ";
-               objectloop (i in self)
-                   if (i.number==100)
-                   {   k++; SpellName(i);
-                       if (k==j-1) print " and ";
-                       if (k<j-1) print ", ";
-                   }
-               if (j==1) print " chant is"; else print " chants are";
-               print " yours forever. Other than that, y";
-           }
-           else print "Y";
-           print "ou have ";
-           j=0; k=0;
-           objectloop (i in self) if (i.number<100) j++;
-           if (j>0)
-           {   print "the ";
-               objectloop (i in self)
-                   if (i.number<100)
-                   {   k++;
-                       PrintShortName(i);
-                       if (i.number==2) print " (twice)";
-                       if (i.number==3) print " (thrice)";
-                       if (i.number==4) print " (four times)";
-                       if (i.number>=5) print " (many times)";
-                       if (k==j-1) print " and ";
-                       if (k<j-1) print ", ";
-                   }
-           }
-           else print "no chants";
-           " prepared.";
-         Insert:
-           if (spell_block==1)
-               "Currently, your mystic powers don't seem to be working.";
-           if (second.number==100) "You always know that chant.";
-           self.number=self.number+1;
-           print "Making a quick prayer to the Gods, you prepare the ";
-           SpellName(second);
-           print " chant";
-           if (second notin self) second.number=0;
-           move second to self;
-           second.number=second.number+1;
-           if (second.number==1) print ".";
-           if (second.number==2) print " once again.";
-           if (second.number==3) print " a third time.";
-           if (second.number>3) print " yet another time.";
-           if (self.number <= self.capacity) { new_line; rtrue; }
-           i=youngest(self); <Remove self i>;
-           "^A voice booms out ~Do not try to exceed your powers, mortal!~";
-         Remove:
-           if (second notin self || second.number==100) rtrue;
-           if (self.number>0) self.number=self.number-1;
-           second.number=second.number-1;
-           if (second.number==0) remove second;
-           rtrue;
-       ];
-
-Object gnusto_spell "copy a chant into your prayer book" memory
- class spell_class
-  with name "gnusto",
-       number 100,
-       magic
-       [ i a_book;
-            if (spell_block==1)
-               "Currently, your mystic powers don't seem to be working.";
-            if (amulet hasnt worn)
-               "You speak the chant, and absolutely nothing happens!";
-            if (second has is_spell_book)
-               "Unlike scrolls, prayer books are magically guarded against \
-                the 'theft' of their lore.";
-            if (second==0 || second hasnt is_scroll)
-               "Your chant goes unanswered.";
-            if (second notin player)
-                "A gnusto chant would require close scrutiny of the scroll \
-                 it is to copy, which you do not seem to be holding.";
-            objectloop (i in player)
-                if (i has is_spell_book) a_book=i;
-            if (a_book==0)
-                "Your chant fails, as you have no prayer book.";
-            i=child(second);
-            if (i==0 || i hasnt is_spell)
-            {   print "Your chant fails, as "; DefArt(second);
-                " is illegible.";
-            }
-            <Learn a_book i>; remove second;
-            print "Your prayer book begins to shake! Slowly, ornately, \
-                   the words of "; DefArt(i); " are inscribed, \
-                   into the book with a violet glow. \
-                   The book's brightness fades, but the chant remains! \
-                   However, the scroll on which it was written vanishes as \
-                   the last word is copied.";
-       ];
-
-Class  spell_book_class
-  with magic 0,
-       capacity 20,
-       size 15, 
-       before
-       [ p i; Open, Close:
-              CDefArt(self); " will always open to the desired page thanks \
-              to the powers of the Gods, may they never forget us.";
-          Attack:
-              print "When you are done, "; DefArt(self); " remains unmarred.";
-          Learn:
-              if (self.magic==0) "(This prayer book has no pages.)";
-              p = self.magic;
-              for (i=0:i<self.capacity && (p-->i)~=0:i++) ;
-              if (i==self.capacity) rtrue;
-              p-->i = second;
-              rtrue;
-       ],
-       after
-       [ p i j; Examine:
-              if (self.magic==0) "(This prayer book has no pages.)";
-              p = self.magic;
-              for (i=0:i<self.capacity && (p-->i)~=0:i++)
-              {   j=p-->i; <Examine j>;
-              }
-              rtrue;
-       ],
-  has  is_spell_book;
-
-Class  scroll_class
-  with parse_name
-       [ i j k; j=-1;
-              if (self has general)
-              {   if (child(self)~=0 && child(self) has is_spell)
-                      j=(child(self).&name)-->0; else j='illegible';
-              }
-              for (::) {
-                 k = NextWord();
-                 if (k=='scrolls') parser_action = ##PluralFound;
-                 if ((k=='scrolls' or 'scroll' or j) || (k==(self.&name)-->0))
-                    i++;
-                 else return i;
-              }
-              ! while (NextWord()==j or 'scroll' or (self.&name)-->0) i++;
-              ! return i;
-       ],
-       before
-       [ i; Examine:
-            i=child(self);
-            give self general;
-            if (i==0 || i hasnt is_spell)
-                "The scroll has faded, and you cannot read it.";
-            print "The scroll reads ~"; <SayName i>; "~.";
-       ],
-       invent
-       [;   if (inventory_stage==2 && self has general)
-            {   if (child(self)==0 || child(self) hasnt is_spell)
-                    print " (which is illegible)";
-                else
-                {   print " (of "; DefArt(child(self)); print ")"; }
-            }
-       ],
-       size 10,
-  has scored is_scroll;
-
-! NOTE: This routine has a slight bug (as cribbed from GN's
-! Balances, rel2) in that Examine, if the routine reaches
-! scope_stage 3, prints a rather confusing msg.  However,
-! the appropriate msg is printed for, say, Learn, if the
-! spell is unknown/out-of-scope.  Oddly, action can't
-! be checked at stage 3, so I copied a second version of
-! the routine for Examine only.  -DY
-! 3/19 update: Checking Graham's release 3 of Balances, 
-! I stumble across the "action_to_be" var.  Most useful.
-[ ReadableSpell i j k;
-  if (scope_stage==1) return 1;
-  if (scope_stage==2)
-  {   objectloop (i in player)
-          if (i has is_spell_book)
-          {   for (k=0:k<i.capacity && (i.magic)-->k~=0:k++)
-              {   j=(i.magic)-->k; PlaceInScope(j);
-              }
-          }
-      rtrue;
-  }
-  if (action_to_be == ##Examine) 
-     "You can't see any such thing.";
-  !"You have never seen or heard of such a chant.";
-  "You can't see such a chant, if that is indeed a chant.";
-];
-
-[ SpellsSub; <Examine memory>; ];  ! for our case, 'chants' will work also
-
-[ LearnSub; if (location==thedark)
-                print "(The magic purple glow of the chants casts enough light \
-                        that you can read them.)^";
-            <Insert memory noun>;
-];
-
-global the_spell_was = gnusto_spell;
-
-[ CastOneSub; <Cast the_spell_was noun>; ];
-
-! Property long unmagic;
-
-
-! (wood beams and niches -- for Barsap's Gambit)
-! (put after 'the_spell_was' global defined)
-
-Attribute is_wood_beam;
-
-Class wood_beam_class
-  with name "wood" "beam",
-       plural "beams",
-       description "A long thin wooden beam.",
-       !weight 10,
-       size 50,
-       number 0,   ! number is the 'strength left' qualifier
-       before [;
-          Cast:
-          if (the_spell_was == egdelp_spell)
-             "The wood beam is covered in a waxy film! Thinking \
-better of this, you hastily wipe off the offending build-up.";
-          if ((the_spell_was == luncho_spell or huncho_spell) &&
-              (parent(self) has is_niche)) {
-          ! reconstruct beam before teleporting
-          ! due to problem below, I'm denying this...
-"Your chant goes unanswered.";
-           !  move child(parent(self).counter_niche) to self;
-           !  <<Cast the_spell_was self>>; 
-           ! NOTE NOTE This may recursively explode...
-          }
-       ],
-  has is_wood_beam;
-
-Class balsa_beam_class
-   class wood_beam_class,
-   with name "balsa",
-        plural "balsa wood beams",
-        description "A long thin balsa wood beam.",
-        number 0;  ! always breaks
-
-Class pine_beam_class
-   class wood_beam_class,
-   with name "pine",
-        plural "pine wood beams",
-        description "A long thin pine wood beam.",
-        number 1;
-        
-Class ebony_beam_class
-   class wood_beam_class,
-   with name "ebony",
-        article "an",
-        plural "ebony wood beams",
-        description "A long thin ebony wood beam.",
-        number 2;
-                
-[ CastSub k;
-  the_spell_was = noun; <Remove memory noun>;
-
-!  if (noun has general)
-!  {   give noun ~general;
-!      if (RunRoutines(noun,unmagic)~=0) rfalse;
-!      "Nothing happens.";
-!  }
-
-  if (amulet hasnt worn)
-     "You speak the chant, and absolutely nothing happens!";     
-  if (spell_block==1)
-     "Currently, your mystic powers don't seem to be working.";
-  if (in_hades == 1)
-     "Your Gods can't save you now...";
-  if (second~=0)
-  {   ResetVagueWords(second);                     ! Set "it", "him", "her"
-      if (RunRoutines(second,before)~=0) rfalse;   ! Run before routine(s)
-  }
-  k = random(10);
-  if (k<=3) {
-     if (k==1)
-        "You speak the chant, but the Gods are not kind this time, as nothing happens!";
-     if (k==2 or 3)
-        "You speak the chant, but something sounds wrong. Nothing happens \
-this time."; 
-  }
-  if (RunRoutines(noun,magic)~=0) rfalse;
-  "Nothing happens.";
-];
-
-[ InScope i;
-  if (verb_word=='c,cast' or 'cast')
-      objectloop (i in memory) PlaceInScope(i);
-  rfalse;
-];
-
-[ ParserError x i flag vb;
-  if (etype==VERB_PE or ASKSCOPE_PE)
-  {   if (etype==ASKSCOPE_PE)
-      {   if (verb_word=='cast') vb=1;
-          if (verb_word=='learn' or 'memorise' or 'memorize') vb=2;
-          if (verb_word=='copy') vb=3;
-          if (vb==0) { etype=CANTSEE_PE; rfalse; }
-      }
-      wn=verb_wordnum; if (vb~=0) wn++;
-      x=NextWordStopped();
-      for (i=player+1:i<=top_object:i++)
-          if (i has is_spell && Refers(i,x)==1
-              && i has known_about) flag=1;
-      if (flag==1)
-      {   if (vb==0 or 1)
-             "You haven't got that chant prepared. [Type ~spells~ \
-              or ~chants~ to see what you do have prepared.]";
-          if (vb==2)
-             "Your training is such that you can only prepare such a chant \
-              with the aid of a prayer book containing it.";
-          if (vb==3)
-             "You have no text of that chant to copy.";
-      }
-      if (vb==1)
-         "You haven't prepared that chant, if indeed it is a chant.";
-      if (vb==2 or 3)
-         "You haven't access to that chant, if indeed it is a chant.";
-  }
-  rfalse;
-];
-
-! Random attempt to code a ChooseObjects for the
-! coin choosing problem often seen in the Bank of Zork
-[ ChooseObjects obj code;
-  if (code < 2) rfalse;
-  if ((action_to_be == ##Remove or ##Insert) &&
-      (obj has is_coin) && (obj in player)) return 9;
-  return 0;
-];
-
-[ UnknownVerb word i;
-  objectloop (i in memory)
-      if (word==(i.&name)-->0) { the_spell_was = i; return 'c,cast'; }
-  rfalse;
-];
-
-[ PrintVerb v;
-  if (v=='c,cast') { print "cast a chant at"; rtrue; }
-  rfalse;
-];
-
-! ----------------------------------------------------------------------------
-!   The player's spell book, and initial spells (to go with gnusto):
-! ----------------------------------------------------------------------------
-
-Object prayer_book "prayer book"
- class spell_book_class,
-  with name "prayer" "book" "my" "spellbook",
-       description "Mystical Chants^";
-
-Object frotz_spell "cause an object to give off light"
- class spell_class,
-  with name "frotz",
-       magic
-       [;  if (second==0) "There is a brief, blinding flash of light.";
-           if (second has animate)
-               "The chant, not designed for living creatures, is denied.";
-           if (parent(second)==compass)
-               "The chant fails.";
-           give second light;
-      print "There is an almost blinding flash of light as "; DefArt(second);
-      print " begins to glow! It slowly fades to a less painful level, but ";
-      DefArt(second); " is now quite usable as a light source.";
-       ],
-;
-
-! ** Start of locations (and other objs) **
-
-! ***********************************************************************
-! **
-! ** LOCATIONS INSIDE MONESTARY (Mostly)
-! **
-! ***********************************************************************
-
-Object MON_Chapel1 "Monastery Chapel"
-      with description "You are standing in a monastery chapel. \
-All around you, fellow Brothers of the Order are standing, chanting. \
-The eerie droning voices seem to reverberate into the air. At the \
-front of the chapel, Brother Joseph stands in deep concentration, \
-holding the Rod of the Ancients.",
-      name "brothers",
-      number 0,
-      each_turn [ ;
-          MON_Chapel1.number = MON_Chapel1.number + 1;
-          Startup1(MON_Chapel1.number);
-      ],
-      before [ ;
-          if (action==##Listen) "You hear heavy chanting";
-          if (action==##look) rfalse;
-          if (action==##Wait) rfalse;
-          "You are caught up in the collective chanting, and cannot break \
-           your concentration to do much of anything else.";
-      ],
-      has light;
-    
-! A fake obj to handle 'look at Joseph'
-Object MON_FAKE "the Order" MON_Chapel1
-   with name "Joseph" "rod" "brothers",
-   description [; <<Look>>;],
-has scenery;
-
-! A somewhat bulky routine to set our stage.  
-[ Startup1 currturn;
-   if (currturn <= 1) {
-      print "^Brother Joseph now speaks directly to the entire Order.^^\ 
-      ~Fellow Brothers, the year, as you know, is 976 GUE. \
-      A difficult time indeed. Ten years have passed since the Cataclysm \
-      brought forth by the Circle of Enchanters changed our world forever. \
-      The outside world as we know it is in turmoil. A period of great \
-      change is upon all of us.~^";
-      rtrue;
-   }
-   if (currturn == 2) {
-      print "^Brother Joseph continues speaking.^^\
-      ~Our order has always maintained the strictest secrecy. Few \
-      outside of our order know of our existence. \
-      We are the keepers of the mystic balance \
-      that which embodies pure magic that can keep our world \
-      safe. It has always been thus -- we watch over all \
-      of Quendor, never interfering in the affairs of others, yet \
-      striving to maintain harmony.~^";
-      rtrue;
-   }
-   if (currturn == 3) {
-      print "^Brother Joseph continues speaking.^^\
-      ~But we can no longer depend on enchantments to keep \ 
-      outsiders at bay. Magic as we know it is dying. The dreaded \
-      Age of Science is already upon us, and in short time, our \
-      order will be discovered, and the balance will be no more. Many of \
-      our order have gone out into the world in secret, in attempts \
-      to repair what has been broken, but alas, this appears to be \
-      impossible.~^"; 
-      rtrue;  
-   }
-   if (currturn == 4) {
-      print "^Brother Joseph continues.^^\
-      ~I have brought you all forth today to say that although we \
-      cannot protect the future of Quendor, we can protect ourselves!~ \
-      He holds the Rod of the Ancients high. ~This holy Rod, which \
-      the Ancient Ones used to defeat the demon Anabais, \
-      has the power to protect our order. I have discovered a lost mystic \
-      cube!~ He holds a white, featureless cube high in his other hand. \
-      ~This cube, when joined with the Rod of the Ancients, will \
-      preserve our order forever, sequestering all of us in another time, \
-      another place!~^";
-      rtrue;
-   }
-   if (currturn >= 5) {
-      print "^There is a momentous pause. ^^\
-      Brother Joseph looks at the entire Order. \
-      ~May the Gods smile down upon us on this day! We go now, \
-      into the unknown!~ He triumphantly joins the white cube to \
-      the end of the Rod of the Ancients.^^\
-      There is a sudden, blinding white flash! The chanting is instantly \
-      broken by a tremendous thunderclap! Brother Joseph is suddenly \
-      thrown back by a great force, and to your horror, the Rod of the \
-      Ancients breaks apart! Four pieces now float serenely above the \
-      altar, above a strange black globe that seems to crackle with energy.^^\
-      ~AT LAST!~^^\
-      The voice comes from nowhere and everywhere. The black sphere \
-      pulsates with lightning.^^\
-      ~ANABAIS IS FREE AGAIN!~ The voice pauses. \
-      ~I see you found my fake mystic cube \
-      Joseph. I knew that someday, someone would find it, and free \
-      me from my prison!~ The voice pauses again. ~To show my gratitude, I'm \
-      scattering this broken symbol to the corners of the world!~ \
-      The pieces of the rod suddenly disappear!^^\
-      ~Watch out!~ someone cries. \
-      The black sphere suddenly expands with alarming speed. \  
-      Seconds later, a violent explosion seems to jar the very \
-      ground you stand on, and a black void covers all.^^\
-      You awaken in your room in a cold sweat. Was it all a terrible \
-      dream? The day beckons...^";
-      PlayerTo(MON_your_quarters);
-      ! remove MON_Chapel1;  clean up memory (NOTE: This is futile)
-      rfalse;
-   }
-];
-
-
-Object MON_your_quarters "Your Quarters"
-   with name "furnishing" "furnishings",
-   description "You are in your room in the Monastery. It is \
-sparsely furnished, but certainly feels like home. The exit \
-is north.",
-   n_to MON_f1hall1,
-   has light;
-
-Object note "note" MON_your_quarters
-with name "note",
-        description "The note, in a hastily written scrawl, reads:^\
-            ~Please stop by the chapel as soon as you can.^\
-            -- Joseph~",
-        !weight 1,
-        size 5, 
-;
-
-!Object staff "staff" MON_your_quarters
-!   with name "staff" "walking" "trusty" "stick",
-!        initial "Your trusty walking staff is right where you left it.",
-!        description "A stout piece of pine you found while on a nature \
-!                     walk, this staff has served you well on many journeys.",
-        !weight 20,
-!        size 20,
-!;
-
-Object sleeppallet "sleeping pallet" MON_your_quarters
-   with name "pallet" "sleeping" "roll",
-   description "This is your sleeping pallet, a short portable sleeping roll \
-               made of straw. It's softer than it looks.",
-   size 25,
-   react_before [;
-      Go: if (player in self) "You'll have to get off the sleeping \
-pallet first.";
-   ],
-   has supporter enterable;
-
-Object MON_f1hall1 "Hallway (near your quarters)"
-   with description "You are in a hallway running west and east. The \
-vaulted ceilings are a nice touch. Your \
-quarters are to the south.",
-   name "vaulted" "ceiling",
-   s_to MON_your_quarters,
-   w_to MON_f1hall2,
-   e_to MON_f1hall3,
-   has light;
-
-Object MON_f1hall3 "Hallway (near quarters of Palemon and TuffBerry)"
-   with description "You are in a hallway running west and east. \
-Brother TuffBerry's quarters lie to the south. Brother Palemon's \
-quarters are to the north.",
-   w_to MON_f1hall1,
-   e_to MON_f1hall4,
-   n_to MON_Palemon_quarters,
-   s_to MON_Tuffberry_quarters,
-   has light;
-   
-Object MON_f1hall4 "Hallway (east end)"
-   with description "You are at the east end of an east-west hallway. \
-Brother Joseph's quarters lie to the north, and Brother Toolbox's \
-quarters lie to the south.",
-! The acolyte chambers lie to the east.",
-   w_to MON_f1hall3,
-   ! n_to MON_Joseph_quarters,
-   n_to "It doesn't look like Joseph is in. Perhaps you can find \
-him elsewhere.",
-   s_to MON_Toolbox_quarters,
-!   e_to MON_acolyte_chambers,
-   has light;
-      
-! Object MON_acolyte_chambers "Acolyte Chambers"
-!    with description "You are in a long chamber that serves as the home \
-! for the many devoted acolytes of the Order.  The room is currently \
-! empty.",
-!    w_to MON_f1hall4,
-!    has light;
-   
-Object MON_f1hall2 "Hallway (west end)"
-   with description "You are at the west end of an east-west hallway. \
-There are stairs up and down here, and an exit to the west.",
-   name "stairs",
-   e_to MON_f1hall1,
-   u_to MON_f2hall1,
-   d_to MON_f0hall1,
-   w_to MON_garden,
-   has light;     
-
-Object MON_garden "Monastery Gardens"
-   with description "You are in the Monastery gardens, where various \ 
-shrubs and conifers are covered in a light blanket of snow. \
-An open cloister lies to the west, while \
-a doorway heads east.",
-   name "cloister" "doorway" "shrubs" "conifers",
-   w_to MON_cloister,
-   e_to MON_f1hall2,
-   has light;
-!Nearby shrubs "snow-covered shrubs"
-!   with name "shrubs" "shrub" "snow-covered" "conifers" "conifer" "plants",
-!        description "Good thing they're evergreen.",
-!   has scenery;
-   
-Object sand "sand" MON_garden
-   with name "sand",
-        initial "A small area in the snow has been cleared for late winter \
-planting, and some sand has been sprinkled here and there.",
-        description "A handful of sand, nothing more, nothing less.",
-        !weight 5,
-        size 5,
-        article "some",
-;
-
-Object MON_cloister "Cloister Walkway"
-   with description "You are in an open cloister, that runs along the \
-Monastery gardens to the east. To the north is the main wing of the \
-Monastery. To the south is the entrance hall.",
-   name "cloister",
-   e_to MON_garden,
-   n_to MON_Main_hall,
-   s_to MON_Entrance_hall,
-   has light;
-   
-Object MON_Entrance_hall "Entrance Hall"
-   with description "This is the large entrance hall to the Monastery. \
-Many a devoted visitor has passed through this place. \
-There is an exit to the outside world to the \
-south, and the rest of the Monastery lies to the north.",
-   s_to Cliff_face, out_to Cliff_face,
-   n_to MON_cloister,
-   before [;
-      Go:
-         if ((noun==s_obj) || (noun==out_obj))
-            print "You are surprised by a cold blast of wind as you leave the Monastery!^";
-   ],
-   after [;
-      Go:
-         if ((noun==in_obj) || (noun==n_obj))
-            print "You are greeted by relatively warm and cozy air.^";
-   ],
-   has light;
-
-Object MON_Main_hall "Main Hall"
-   with description "This is the main hall of worship in the Monastery. \
-A large domed ceiling hides some sort of lighting that create a warm yet \
-serene atmosphere. A covered walk to the rest of the Monastery lies to \
-the south. To the north is the Monastery chapel. A brazier sits in \
-the center of the room.",
-        name "dome" "ceiling" "lighting" "atmosphere",
-        s_to MON_cloister,
-        n_to MON_Chapel2,
-   has light;
-   
-Nearby brazier "brazier"
-   with name "brazier",
-        description "This is a silver incense brazier, somewhat similar to \
-an ornamental bowl on a tripod. Brother Palemon supposedly \
-found it on one of his many journeys.",
-        before [;
-           Take:
-              "That's been in the Monastery for years. People would \
-              be upset if you took it.";
-           Receive:
-      !        if (noun~=incense)
-               if (noun has is_sphere) {
-                  print "As you place the sphere in the brazier, \
-you feel a strange sensation. Suddenly, the brazier is filled \
-with ";
-                  if (noun == brown_sphere)
-                     print "earthworms!";
-                  if (noun == green_sphere)
-                     print "seawater!";
-                  if (noun == red_sphere)
-                     print "burning embers!";
-                  if (noun == silver_sphere)
-                     print "white vapors!";
-                  " No, wait, it's empty again. You hastily \
-withdraw the sphere, and try to clear your mind.";
-               }
-               else "That doesn't seem quite appropriate.";                 
-        ],
-        size 9,
-   has scenery container open;
-
-Object MON_Chapel2 "Monastery Chapel"
-   with description "You are in the Monastery Chapel, the site of the \
-recent appearance of the legendary Anabais. Signs of the \
-recent visit include the slightly scorched walls, and the \
-reek of brimstone. Wood pews are arranged in a circle \
-around the central altar. The exit is south.",
-   name "pews" "scorched",
-   s_to MON_Main_hall,
-   before [;
-      Smell:
-         "You detect the faint odor of brimstone.";
-!      Yell: 
-!         if ((parent(Joseph)==MON_Chapel2) && (Joseph hasnt general))
-!            "Shhh.  You don't want to abruptly disturb Joseph like that.";
-!      Go: 
-!         if (noun==s_obj) {
-!            if ((parent(Joseph)==MON_Chapel2) && (Joseph has general) &&
-!                (WeightOf(Joseph) > 140)) {
-!               if (WeightOf(Joseph) == 149) {
-!                  Joseph.weight = 139;
-!                  print "^As you leave, Brother Joseph calls out \
-!                   ~Oh, and take something for that cold!~^";
-!                   rfalse;
-!               }
-!               if (WeightOf(Joseph) == 148) {
-!                  Joseph.weight = 139;
-!                  print "^As you leave, Brother Joseph calls out \
-!                  ~Oh, and remember -- reading the scriptures \
-!                  is one sure way of maintaining an active mind!~^";
-!                  rfalse;
-!               }
-!               if (WeightOf(Joseph) == 147) {
-!                  Joseph.weight = 139;
-!                  print "^As you leave, Brother Joseph calls out \
-!                  ~Oh, and remember -- mirth is wonderful for the soul, \
-!                  in moderation, of course.~^";
-!                  rfalse;
-!               }
-               ! add in any others here...
-!            }
-!         }
-!      Sneeze:
-!              if (Joseph hasnt general) {
-!                 give Joseph general;
-!                 Joseph.weight = 149;
-!                 JosephWakeAction();
-!                 rtrue;
-!              }
-!      Yawn:
-!              if (Joseph hasnt general) {
-!                 give Joseph general;
-!                 Joseph.weight = 148;
-!                 JosephWakeAction();
-!                 rtrue;
-!              }
-!      Laugh:
-!              if (Joseph hasnt general) {
-!                 give Joseph general;
-!                 Joseph.weight = 147;
-!                 JosephWakeAction();
-!                 rtrue;
-!              }                                          
-!      Drop:
-!              if (Joseph hasnt general) {
-!                 give Joseph general;
-!                 Joseph.weight = 146;
-!                 JosephWakeAction();
-!                 move (inp1) to MON_Chapel2;
-!                 rtrue;
-!              }                                          
-    ],
-   has light;
-   
-! And now, the incredible shrinking Brother Joseph...
-! Modified 3/16 -- this puzzle seems to be unpopular...
-Object Joseph "Joseph" MON_Chapel2
-   with name "Brother" "Joseph",
-        description "Brother Joseph is a pale man, with gray eyes, a fine \
-            beard, and a finer disposition.",
-!        weight 150,
-        number 0,  ! used to hold count of (fake) rod pieces received
-        describe [;
-!           if (self hasnt general)
-!            "Brother Joseph is kneeling in front of the remains of the altar, \
-!            his eyes closed, deep in meditation.";
-!           else
-              "Brother Joseph is here, standing by the altar.";
-        ],
-        life [;
-!           if ((WeightOf(Joseph) == 150) && ((action ~= ##Attack) || 
-!                                             (action ~= ##WakeOther)))
-!              "Perhaps it's best not to bother him, he seems very \
-!              deep in meditation.";
-!           WakeOther:
-!              if (WeightOf(Joseph) == 150)
-!                 "Joseph isn't asleep, just meditating.  You may need to \
-!do something subtle to rouse him.";
-           Attack, ThrowAt:
-              deadflag = 1;
-              Player_Lives_Left = 0;
-"Your blow sends Brother Joseph staggering back.^^\
-Brother Joseph gets up and brushes himself off, and glares \
-at you. Ro-roo, I think you made him mad. \
-You remember, of course, that Brother Joseph is a renowned \
-full-contact martial artist?^^\
-~Impudent wretch! I'll show you how we deal with non-believers here!~\
-^^Suddenly, Brother Joseph produces a gigantic mallet from \
-beneath his robes and clobbers you into a pulp.";
-           Ask:
-              if (second=='amulet')
-                 "~Don't leave the Monastery without it!~";
-              if (second=='joseph')
-                 "Joseph smiles. ~I believe we've been introduced.~";
-              if (second=='rod')
-                 "~We must recover the Rod before it is too late!~";
-              if (second=='anabais')
-                 "~Beware the demon!  He is most cunning and dangerous!~";
-              if (second=='scriptures')
-                 "~Study the holy scriptures, and you will be rewarded.~";
-              if (second=='palemon' or 'tuffberry' or 'toolbox')
-                 "~I fear I know not where his feet now tread.~";
-              "~I don't know anything about that. Perhaps you should \
-              consult our library upstairs?~";
-
-           Tell:
-              "~Do tell.~";
-           Show:
-              if (noun has is_rod)
-                 "~Have you succeeded in retrieving the Rod? If so, \
-do what you feel is right.~";
-                 
-           Give:
-              if (noun has is_rod) {
-                 if ((noun==black_rod_piece) || (noun==white_rod_piece) ||
-                     (noun==smoke_rod_piece) || (noun==gray_rod_piece)) {
-                    Joseph.number = Joseph.number + 1;
-                    remove noun;
-                    print "Joseph takes the rod piece. ";
-                    if (Joseph.number==4) {
-                       ! trouble -- got the whole fake rod to Joseph...
-                       deadflag = 1;
-                       Player_Lives_Left = 0; 
-                       "~The Order will \
-remember your acts of bravery forever,~ Joseph says, as he brings out \
-all four rod pieces and tries to join them together. A sudden burst \
-of light blinds you!^^\
-When you can see again, a large black sphere of malevolent energy \
-floats nearby! Joseph, either dead or stunned, lies in one corner \
-of the room. The four rod pieces are floating above the sphere.^^\
-~Foolish little priest,~ a evil voice says in you mind. ~You \
-have only brought upon yourself your own undoing. With my rod returned \
-by an innocent, the pact is complete. Come forth, my brothers, \
-for our time of power is at hand!~^^\
-The last thing you hear is mocking laughter, before the world \
-as you know it comes to a close.";
-                    } 
-                    else 
-                    "~Well done, brave Priest!~ he says.";
-                 }
-                 else
-"Joseph looks at the rod piece and seems puzzled. ~This isn't any part \
-of the Rod of the Ancients that I've ever seen. And yet, it seems similar.~ \
-He hands it back to you. ~In this, my teachings can help you no \
-further.~";
-              }
-              else "Joseph waves off your offering. ~You may \
-need that in your quest.~";
-           Answer, Order:
-              if (special_word=='hello' or 'hi') 
-                 "Joseph smiles. ~Hello.~";
-           default:
-              "At the moment, Joseph seems to be \
-preoccupied with spiritual matters.";
-        ],                     
-        before [;
-           Cast:
-             "Brother Joseph stops you in mid-chant. ~That won't be necessary~";             
-        ],
-        each_turn [;
-           if (self hasnt general) {
-              give self general;
-           move Amulet to player;
-           "^Joseph smiles as you enter. \
-~I'm glad you found me. As you know, thanks to the old \
-fool standing before you, the demon Anabais is loose upon \
-the world once more. He has broken the Rod of the Ancients \
-which was keeping our house and Order protected from outsiders. \
-It is a sorry day for us all.~ Joseph pauses for a moment. \
-~You are our final hope in a time of chaos. Brothers \
-Palemon, TuffBerry and Toolbox have left the Order, and only \
-you remain. I must now ask you to serve the Order which you \
-have so faithfully served in the past. No short order this, for \
-our continued existence depends on it, but you must go out into \
-a world gone mad alone, and retrieve the four broken pieces of \
-the Rod of the Ancients, and return them here to me, so that we \
-can rid the world of the evil we have loosed!~^^Brother Joseph \
-pauses and searches his robes.^^~Here, you will need this,~ he \
-says, giving you a strange amulet. ~Without this amulet, the \
-Ancient Ones cannot give you the mystic aid that you will most \
-certainly need. But I waste much time. Go now, and may the \
-Gods smile upon us all.~";
-           }
-        ],
-   has animate proper;
-    
-Object Amulet "holy amulet" 
-   with name "amulet" "holy",
-        description "This small golden amulet and chain seem to \
-shimmer with a strange mystic saffron energy. The \
-pendant portion of the amulet is in the shape of a small \
-golden cube.",
- !       weight 10,
-        size 7,
-        before [;
-           Wear:
-              if (self hasnt worn) { give self worn;
-              "As you place the amulet around your neck, \
-              you feel a strange sense of mystic power.";
-              } 
-              else "You're already wearing that.";
-        ],              
-   has clothing scored;
-           
-! [ JosephWakeAction;
-!      print "^You make a subtle noise^^\
-!           Brother Joseph opens his eyes, breathes deeply, and smiles.^^\
-!            ~I'm glad you found me.  As you know, thanks to the old \
-!            fool standing before you, the demon Anabais is loose upon \
-!            the world once more.  He has broken the Rod of the Ancients \
-!            which was keeping our house and Order protected from outsiders. \
-!          It is a sorry day for us all.~  Joseph pauses for a moment. \
-!          ~You are our final hope in a time of chaos.  Brothers \
-!          Palemon, TuffBerry and Toolbox have left the Order, and only \
-!          you remain.  I must now ask you to serve the Order which you \
-!          have so faithfully served in the past.  No short order this, for \
-!          our continued existence depends on it, but you must go out into \
-!          a world gone mad alone, and retrieve the four broken pieces of \
-!          the Rod of the Ancients, and return them here to me, so that we \
-!          can rid the world of the evil we have loosed!~^^Brother Joseph \
-!          pauses and searches his robes.^^~Here, you will need this,~ he \
-!          says, giving you a strange amulet.  ~Without this amulet, the \
-!          Ancient Ones cannot give you the mystic aid that you will most \
-!          certainly need.  But I waste much time.  Go now, and may the \
-!          Gods smile upon us all.~";
-!     move Amulet to player;
-!     rtrue;
-!];
-
-Object altar "altar" 
-   with name "altar" "damaged" "cube",
-      description "The altar is roughly the shape of a five foot \
-         white cube. The top edges appear to be singed black and there \
-         are cracks and chips all over.",
-   found_in MON_Chapel1 MON_Chapel2,
-   before [;
-      Search:
-         if (self hasnt general) {
-            give self general;
-            move holywater to player;
-            "You uncover a vial of holy water.";
-         }
-   ],
-   has scenery supporter;
-
-Object holywater "vial of holy water"
-   with name "holy" "water" "vial",
-        description "A small glass vial of holy water.",
-        before [;
-           Eat: "You might want to try drinking it instead.";
-           Drink: remove self;
-              Player_HP_CUR = Player_HP_MAX;
-              "You quaff the holy water with a simple ceremony. \
-You feel physically and spiritually refreshed."; 
-        ],
-        size 5,
-;
-   
-Object MON_Palemon_quarters "Brother Palemon's Quarters"
-   with description [;
-        print "You are in Brother Palemon's quarters, which \
-           have been left unattended ever since Brother Palemon's \
-           unexplained disappearance many years ago";
-        if (self has general)
-           print ". To the west, a small secret door in the wall leads \
-            into darkness";
-        ". The exit is south.";
-        ],        
-   s_to MON_f1hall3,
-   w_to [;
-      if (self hasnt general)
-         "You can't go that way.";      
-      else return MON_Hidden_sanctum;
-   ],
-   before [;
-      Push:
-        if (noun == w_obj) {
-           if (self hasnt general) {
-              give self general;
-              "Pushing the west wall reveals a hidden secret door! \
-You've been in these quarters before, but certainly never noticed \
-anything like this!";
-              }
-              else "Nothing happens."; 
-           }
-       Touch, Rub:
-          if ((noun == w_obj) && (self hasnt general))
-             "Oddly, a section of the west wall feels slightly thin.";
-   ],
-   has light;
-   
-Object journal "thin journal" MON_Palemon_quarters
-   with name "journal" "thin",
-        description "This journal is very strange indeed. Brother \
-        Palemon seems to have been very preoccupied up to the point \
-        of his disappearance with strange accursed places that he \
-        claims are located all over Quendor. He also makes several \
-        references to evil 'spirits' found in these places. You also \
-        notice that several pages of parchment near the back of \
-        the journal have been torn out.",
-        !weight 20,
-        size 15,
-;
-
-Object MON_Hidden_sanctum "Hidden Sanctum"
-   with description "You are standing in a small chamber that obviously hasn't \
-been used in quite some time -- the cobwebs and dust are several \
-layers thick. There is a short crawl east.",
-   name "cobwebs" "dust",
-   e_to MON_Palemon_quarters,
-;   
-
-Object dusty_scroll "dusty scroll" MON_Hidden_sanctum
-   class scroll_class,
-   with name "dusty",
-;
-
-Object foblub_spell "deliver magnificent sermon (glue audience to seats)" dusty_scroll
-   class spell_class,
-   with name "foblub",
-        magic [;
-           if (second hasnt animate)
-              "Your sermon goes unheard.";
-           if (second == player)
-              "Well, I know you like listening to yourself, but \
-isn't this a bit much?";
-           "You give a wonderful sermon about how one's future \
-           affects one's past, but no one seems to be listening."; 
-        ],
-;
-
-      
-Object MON_TuffBerry_quarters "Brother TuffBerry's Quarters"
-   with description "You are in Brother TuffBerry's quarters, vacant \
-since he undertook his quest for Joseph not long ago. The \
-exit is north.",
-   n_to MON_f1hall3,
-   has light;
-   
-Object page "torn page" MON_TuffBerry_quarters
-   with name "torn" "page",
-        !weight 5,
-        size 5,
-           description "This page was apparently \
-torn from a larger document of some sort. All that is left \
-now reads:^^\
-           ~...fear. Just today I heard again something below \
-           me when I was meditating upstairs. \
-           It sounded like a person, or something alive at least \
-           was just below, trying to quietly move around unnoticed. \   
-           Clearly this is \
-           impossible, and yet I cannot doubt what I heard. \
-           Palemon tells me I'm hearing spirits, but little does \
-           he know that I once heard the same noises in his \
-           very chambers! He was not around at the time, but \
-           to the west, behind the wall, I...~",
-;           
-        
-
-!Object MON_Joseph_quarters "Brother Joseph's Quarters"
-!   with description "You are in Brother Joseph's quarters.  The hallway lies \
-!           to the south.",
-!   s_to MON_f1hall4,
-!   has light;
-   
-Object MON_Toolbox_quarters "Brother Toolbox's Quarters"
-   with description "You are in Brother Toolbox's quarters, vacant \
-ever since he left the order due to differences many years \
-ago. The exit is north.",
-   n_to MON_f1hall4,
-   has light;
-
-Object tb_diary "diary" MON_Toolbox_quarters
-   with name "diary" "toolbox",
-        description "\
-        ~-- <944 GUE> Today Brother Joseph tried to explain the \
-        essence of how we channel magic energy through our \
-        amulets. To me, this seems to pale in comparison with \
-        the seemingly innate abilities of those who call \
-        themselves Enchanters. Joseph did show me a nice \
-        trick, however. He brought the Rod of the Ancients near \
-        my amulet, and the amulet gave off a sudden purple flash of light! \
-        I'll have to try that one on the Acolytes tomorrow.~^^\
-        (there isn't much else of interest until the \
-        very last entry, which is not dated)^^\        
-        ~-- So long diary. I'm now off to seek greater spiritual \
-        guidance in Thriff. I hear the summers there are very nice \
-        too.~",
-        !weight 12,
-        size 12,
-;
-   
-Object folded_scroll "folded scroll" MON_Toolbox_quarters
-   class scroll_class,
-   with name "folded",
-;
-
-Object espnis_spell "deliver dull sermon (cause sleep)" folded_scroll
-   class spell_class,
-   with name "espnis",
-        magic [;
-           if (second hasnt animate)
-              "Your sermon goes unheard.";
-           if (second == player)
-              "A preacher boring himself to sleep with his \
-own sermon? This doesn't seem prudent.";
-           CDefArt(second); 
-           " listens as you begin your sermon about the general \
-              religious practices of the royal families of the past, but \
-              only stifles a yawn when you finish.";  
-        ],
-;
-   
-   
-Object MON_f2hall1 "Hallway (second floor, west)"
-   with description "You are in a hallway on the second floor \
-           of the Monastery. The hallway continues east, while \
-           stairs lead downwards.",
-        name "stairs",
-        d_to MON_f1hall2,
-        e_to MON_f2hall2,
-   has light;
-   
-Object MON_f2hall2 "Hallway (second floor, east)"
-   with description "You are in a hallway on the second floor \
-           of the Monastery that runs east-to-west. To the \
-           north is the private meditation room. To the east \
-           is the Monastery library. To the northeast is an \
-           entrance to the steeple room.",
-        w_to MON_f2hall1,
-        n_to MON_priv_med_room,
-        e_to MON_Library,
-        ne_to MON_Steeple_room,
-   has light;
-   
-Object MON_priv_med_room "Private Meditation Room"
-   with description "You are in a small bare chamber that is \
-           used for private meditation and worship. The only \
-           exit lies to the south.",
-        s_to MON_f2hall2,
-   has light;
-   
-Object MON_Library "Monastery Library"
-   with description "You are in the Monastery library, a cozy, \
-           almost cramped room with shelves of various books. \
-           The exit is to the west.",
-        w_to MON_f2hall2,
-   has light;
-
-Object lib_shelves "shelves" MON_Library
-   with name "shelves" "bookshelves",
-        description "Just some bookshelves.",
-   has scenery supporter;
-   
-! *** LIBRARY BOOKS
-
-! Scriptures:
-! -- Of course, this is a ruse created from the deviations of 
-! Anabais.  Grounded in some fact though.  Each section has a
-! lie, which may not initially be obvious.  Truthful sections 
-! are scattered over Quendor.
-Object HolyScriptures1 "a copy of the Holy Scriptures" lib_shelves
-   with name "holy" "scriptures" "copy",
-        description "This sacred tome details the teachings and \
-beliefs of the Order, of which it's certainly always good \
-practice to re-familiarize yourself with. The scriptures are \
-divided into several sections. Sections that \
-can be consulted in greater detail include:^^\
-~Doctrines~^\
-~Demons~^\
-~Spirits~^\
-~(Book of the) Mystical~^\
-~(Book of the) Planes~^\
-~(Book of the) Ancients~^\
-~Legend of the Rod~",
-        before [ w1; Consult:
-        if (consult_words > 1)
-               "You'll have to consult the sacred book by \
-individual section.";               
-            wn = consult_from; w1 = NextWord();
-            switch (w1) {
-               'doctrines', 'doctrine', 'canon':
-"~THE SACRED DOCTRINES OF THE ORDER OF BALANCE:^^\
-Thou shalt strive to achieve balance in a world filled with unbalance.^\
-Thou shalt pray to the Deities in moments of inner reflection.^\
-Thou shalt not harm innocents nor aid them -- this is the way of balance.~"; 
-! TODO add add
-               'demons', 'demon', 'anabais':
-"~Fear not, mortal men^\
-though your world be filled with demons^\
-and the wicked.^^\
-Thou alone can prevail^\
-as The Ancient Ones^\
-against Anabais, the trickster^\
-were victorious.~";               
-! LIE - The ancient ones lost to Anabais and the other demons
-               'spirits', 'spirit':
-"~Before the dawn of time, know that our world was \
-filled with evil spirits of the elements, \
-until mankind came upon the land and vanquished them \
-forever.~";
-! LIE - spirits still exist.
-               'mystic', 'mystical', 'magic', 'chant':
-"~If one is true of doubts, then a believer in the \
-great Harmony can draw upon the powers of the Ancients \
-and perform feats of mystic power anywhere. Remember that in \
-so doing, thou must act only as the channel of mystical \
-power for the Ancient Ones.~";               
-! LIE - powers don't work everywhere, and not always.
-               'planes', 'plane', 'atrii', 'hades':
-"~Let not the ways of the mortal life \
-dissuade the knowledge of higher and lower planes \
-of existence.^^\
-For, beyond mortal reach are places where those who \
-have truly served the Order and those who have truly \
-forsaken the Harmony of Balance will find themselves \
-in death. These are the Ethereal Plane of Atrii and \
-the plane of the damned -- Hades.~";               
-! LIE - don't have to die to reach Atrii.
-               'ancients', 'ancient':
-"~Trust in The Ancient Ones, those Three who showed mankind the \
-way of Balance and Harmony.~";
-! LIE - Four ancient ones existed.
-               'rod', 'legend':
-"~Anabais foresaw his own demise when he dared to \
-challenge the Ancient Ones. From powers of light and \
-darkness, the Ancient Ones constructed that holy Rod that \
-we know only as the Rod of the Ancients, and did smite \
-the demon Anabais so grievously, that they did imprison \
-him in that very Rod, where he could do no harm. This \
-very Rod was made of pieces of ancient elemental energy, \
-once separated. Only the powers of the Ancients could \
-bring them together.~";               
-! LIE - Anabais never imprisoned, etc.
-               default: "There doesn't seem to be a section \
-about that.";               
-            }
-          Cast:
-             if (the_spell_was == ledak_spell) {
-                remove self;
-                "The scriptures are surrounded by a \
-yellow glow. To your horror, the tome evaporates into nothing!";
-             }
-        ],
-        !weight 20, 
-        size 15,
-has proper;
-     
-! *** parchments
-! (Several scraps of
-! Palemon's journal are scattered around Quendor, 
-! contradicting the ancient scriptures) 
-
-! (faded -- spirits exist)
-Object p2 "faded parchment" MON_Hidden_sanctum
-   class parchment_class,
-   with name "faded",
-description "~...are real! I have seen much evidence in the \
-jungles of Miznia, marshes of Fublio Valley, the ruins \
-of old Egreth and in Aragain itself! I believe that \
-they are associated with certain basic elements in the \
-surrounding area. But they dare not show themselves now, \
-not while magic is strong! Woe unto us, should the powers \
-of magic cease, as there would be nothing to stop their \
-terror...~",
-;
-
-Object MON_Steeple_room "Steeple Room"
-   with description "You are in a round room with colored-glass \
-           windows. Wood beams line the walls and rise to form \
-           a short point in the peaked ceiling above. A small \
-           walkway returns to the southwest. A long wood table \
-           sits in the center of the room.",
-        name "windows" "glass" "beams" "walkway" "handle" "latch",
-        sw_to MON_f2hall2,
-        !out_to MON_Steeple_roof,        
-        out_to steeple_window,        
-        before [;
-           Go: 
-              if ((noun == out_obj) && (steeple_window has open)) {
-                 if (random(10) < 3) {
-                    print "^You climb out the open window and somehow manage \
-                          not to fall.^";
-                 }
-                 else {
-                    deadflag = 1;
-print "^You climb out the open window, but slip on the icy sill";
-if (has_resist_gravity == 0) ", and plummet to the ground!";
-else 
-"! As you float slowly downwards, you can't help but notice the \
-hungry-looking winter dire wolf below, waiting for you to land...";
-                 }
-              }              
-        ],
-   has light;
-   
-Object MON_Steeple_roof "Steeple Roof"
-   with description "You are on a very narrow ledge outside \
-           the Monastery steeple. The snow and wind are doing \
-           their best to send you to a ungracious death below. The \
-           steeple roof is quite sharply slanted.",
-        in_to steeple_window,
-        name "roof" "ledge" "wind",
-        cant_go "It's hard enough staying on the ledge.",
-        before [;
-           Jump:
-             deadflag = 1;
-             if (has_resist_gravity==0)
-             "Well, if you insist. The ground breaks most of the \
-             bones in your body, including the important ones.";
-             else
-             "You float downwards gracefully, into the waiting \
-jaws of a winter dire wolf."; ! <shrug>
-        ],
-   has light;        
-   
-Object steeple_window "steeple window" 
-   with name "window" "rose" "steeple",
-        found_in MON_Steeple_room MON_Steeple_roof,
-        description [;
-           print "A large rose-colored glass window";
-           if (location==MON_Steeple_room) 
-              ", with a handle and latch";
-           ".";
-        ],
-        describe [;
-           if (location==MON_Steeple_room) {
-              if (self has open)
-                 "Someone has left a rose-colored window open and some \
-snow drifts in.";
-              "A large rose-colored window lets some light in.";
-           }
-           if (location==MON_Steeple_roof) {
-              if (self has open)                
-                 "A window opens into the steeple proper.";
-              "A large rose-colored window is partially covered with snow here.";
-           }
-        ],
-        door_dir [;
-           if (location==MON_Steeple_room) return out_to;
-           return in_to;
-        ],
-        door_to [;
-           if (location==MON_Steeple_room) return MON_Steeple_roof;
-           return MON_Steeple_room;
-        ],
-        before [;
-           Enter:
-              if (location==MON_Steeple_room) <<Go out_obj>>;
-              else <<Go in_obj>>;
-           Open:
-              if ((self hasnt open) && (location==MON_Steeple_roof))
-                 "Unfortunately, the window opens inward, and the latch \
-                 and handle are on the inside.";
-              if ((self hasnt open) && (location==MON_Steeple_room)) {
-                 give self open;
-                 "You turn and yank the window handle and pull. \
-                  A rush of wind and snow greets you as you open \
-                  the window.";
-              }
-           Close:
-              if ((self has open) && (location==MON_Steeple_roof))
-                 "It doesn't seem to want to stay shut. You can't \
-quite reach the window latch from out here.";                 
-           Attack:
-              "The window glass remains unmarred. It's probably made of \
-              that especially thick lead-glass that the Monastery got \
-              because Brother Toolbox kept complaining about drafts.";
-           Push:
-              if (self hasnt open)
-                 "It doesn't budge.";
-           Search:
-              "The window looks out into a winter wonderland.";
-        ],        
-   has static door openable;
-
-Object steeple_table "long table" MON_Steeple_room
-   with name "table" "long" "steeple",
-        description "This long wood table has been used for various \
-           private meetings and impromptu get-togethers between \
-           members of the Order in the past.",
-   has scenery supporter;   
-   
-Object MON_f0hall1 "Hallway (basement)"
-   with description "You are in a hallway in the Monastery basement. \
-           The hallway continues to the east, and stairs lead upwards.",
-        name "stairs",
-   u_to MON_f1hall2,
-   e_to MON_Refectory,
-   has light;
-
-Object MON_Refectory "Refectory"
-   with description "You are in the Refectory, the general dining \
-area for members of the Order. You grimace at the lingering scent of \
-Brother Pufpistery's favorite dish -- Borphbelly stew. \
-Several large oak tables and benches adorn this otherwise \
-bare room. An exit lies to the west, the kitchen is to \
-the north, and another exit lies to the east.",
-        name "oak" "tables" "benches", 
-   w_to MON_f0hall1,
-   n_to MON_Kitchen,
-   e_to MON_Storeroom,
-   before [;
-      Smell: "Even the faintest lingering scent of Borphbelly stew \
-is enough to make you feel like fasting.";
-   ],
-   has light;
-   
-Object MON_Kitchen "Monastery Kitchen"
-   with description "You are in Brother Pufpistery's domain -- the \
-dreaded acolyte kitchen. A huge soup \
-cauldron sits unused nearby. The refectory is \
-south.",
-   s_to MON_Refectory,
-   before [;
-      Smell: "The lingering scent of Borphbelly stew \
-is stronger here, unfortunately.";
-   ],
-   has light;
-
-Object cauldrons "cauldron" MON_Kitchen
-   with name "cauldron" "vat",
-        description "This large iron soup cauldron has the \
-           unmistakable odor of Borphbelly stew. Ugg.",
-        size 25,
-        capacity 10,
-        before [;
-           Cast:
-             if (the_spell_was == bekdab_spell)
-                "The soup cauldron rusts a bit.";
-        ],
-   has scenery container open;
-
-Object preparing_table "preparing table" MON_Kitchen
-   with name "table" "preparing",
-        description "A heavy wood table with a well-used look.",
-        before [;
-           Cast:
-              if (the_spell_was == egdelp_spell)
-                 "The table is now covered in a waxy film. \
-All things considered, it actually looks cleaner now.";
-        ],
-   has static supporter;
-   
-Object recipe_paper "scrap of paper" preparing_table
-   with name "scrap" "recipe" "paper",
-        description "It's a recipe torn from an issue of \
-             ~Better Homes and Caverns~:^^\
-             GUILDMASTER SNEFFLE'S PRIZE WINNING BIRTHDAY CAKE \
-             ^^\
-             Ingredients:^^\
-             -- 1 small sack of flour^\
-             -- 1 large sugar cube^\
-             -- 1 packet of baking powder^\
-             -- 1 stick butter^\
-             -- 1 large corbie egg^\
-             -- Dornberries, to taste^^\
-             Mix the ingredients together. Fold the resulting \
-             mixture the correct number of times (a single gloth \
-             spell should do the trick). Bake in a GUE \
-             Automatic oven on the ~cake~ setting.^^\
-             Guildmaster Sneffle claims that ~the dornberries are \
-             the secret to making a cake even the King would be \
-             impressed with.~ He also notes that ~improper folding \
-             of the dough will produce very poor results.~",
-   !weight 1,
-   size 5,
-;
-      
-Object MON_Storeroom "Storeroom"
-   with description "You are in a small cramped storeroom, stocked \
-with various crates and barrels of foodstuffs. \
-The refectory is west.",
-        name "crate" "crates" "foodstuffs",
-        w_to MON_Refectory,
-        d_to secret_trapdoor,
-        each_turn [;
-           if ((random(20) == 1) && (secret_trapdoor notin MON_Storeroom))
-              print "^A tiny mouse scurries into view, then disappears \
-                    under a barrel.^";
-        ],
-        before [;
-           Go:
-              if (noun==d_obj)
-                 if (secret_trapdoor hasnt general)
-                    "You can't go that way.";
-        ],
-   has light;
-   
-Object crate1 "large barrel" MON_Storeroom
-   with name "barrel",
-        description "A large wooden barrel labeled ~DRIED PRUNES~.",
-        before [;
-           Cast:
-              if (the_spell_was==egdelp_spell)
-                 "The barrel is covered with a light \
-waxy film.";
-           Take, Remove:
-              "The barrel is far too bulky to take.";
-           Open:
-              "You'd probably need a hacksaw to do that. Besides, \
-              look what it says it contains.";
-           Push, Pull:
-              if (secret_trapdoor hasnt general) {
-                 give secret_trapdoor general;
-                 move secret_trapdoor to MON_Storeroom;
-                 "Well whaddya know, a trapdoor...";                           
-              }
-        ],
-   has supporter;   
-   
-Object flour "sack of flour" crate1
-   with name "flour" "sack",
-        short_name "sack of flour",
-        description "A small sack of flour, all-purpose.",
-        !weight 15,
-        size 14,
-   has edible;
-           
-Object MON_Caverns "Caverns"
-   with description "You are in an low underground cavern, made of roughly \
-worked stone. An even lower tunnel travels east.",
-        name "stone" "worked" "tunnel",
-        u_to secret_trapdoor2,
-        e_to cave_intersection,
-;       
-
-! A two-way initially hidden trapdoor, which affects rooms.
-! To my great chagrin, I couldn't code this in one obj (sigh).
-! I admit it, this is my first Inform project.
-Object secret_trapdoor "trapdoor"
-   with name "trapdoor" "trap" "door",
-        description "A wooden trapdoor in the floor.",
-        door_to MON_Caverns,
-        door_dir d_to,
-        describe [;
-           if (self has open)
-              "A trapdoor opens into darkness below.";
-           "There is a closed trapdoor in the floor here.";
-        ],
-        before [;
-           Enter: <<Go d_obj>>;
-           Open:
-               give MON_Caverns light;
-               give secret_trapdoor2 open;
-               rfalse;
-           Close:
-               give MON_Caverns ~light;
-               give secret_trapdoor2 ~open;
-               rfalse;
-        ],
-     has static door openable;
-     
-Object secret_trapdoor2 "trapdoor" MON_Caverns
-   with name "trapdoor" "trap" "door",
-        description "A wooden trapdoor in the ceiling.",
-        door_to MON_Storeroom,
-        door_dir u_to,
-        describe [;
-           if (self has open)
-              "Light gleams in from an open trapdoor above.";
-           "You notice a closed trapdoor in the ceiling.";
-        ],
-        before [;
-           Enter: <<Go u_obj>>;
-           Open:
-               give MON_Caverns light; 
-               give secret_trapdoor open;
-               rfalse;
-           Close:
-               give MON_Caverns ~light; 
-               give secret_trapdoor ~open;
-               rfalse;
-        ],
-     has static door openable;
-     
-Object cave_intersection "Cave Intersection"
-   with description [; 
-           print "You are in a large open cavern. The rough \
-           limestone here was probably eroded by underground springs \
-           to form the somewhat circular chamber you now stand in. \
-           Oddly, there seems to have been a recent cave-in, as \
-           piles of rubble line the walls. A tunnel \
-           snakes off to the west";
-           if (self has general)
-           ". To the southeast, there is a wide square hole!";
-           else ".";
-           ],
-           name "limestone" "rubble" "tunnel",
-  ! cant_go "There's too much rubble",           
-   w_to MON_Caverns,
-   se_to [;
-           if (self hasnt general) rfalse;
-           if (self has general) return Mystical_Cave;
-   ],
-   before [;
-      Go:
-         if ((noun == se_obj) && (self has general)) {
-            if ((white_rod_piece in player) && 
-            (black_rod_piece in player) &&
-            (gray_rod_piece in player) &&
-            (smoke_rod_piece in player)) {
-            remove white_rod_piece;
-            remove black_rod_piece;
-            remove gray_rod_piece;
-            remove smoke_rod_piece;
-            Player_Lives_Left = 0;   ! hope you saved...
-            spell_block = 1;  ! going into the endgame...
-            print "^As you enter the tunnel, a strange \
-light surrounds you! The four rod pieces you were \
-carrying crumble into dust!^";                       
-            }
-            else
-            "Well, the hole to the southeast seems obvious \
-enough. But, some mysterious force blocks the way! \
-Try as you might, you can't seem to enter it!";
-         }
-     ],            
-;
-           
-Object steel_wall "steel wall" cave_intersection
-   with name "steel" "wall",
-      description "A ten-by-ten slab of solid steel, this wall \
-         must be at least a foot thick, and is accented by \
-         large steel rivets that bolt it to the surrounding \
-         rock.",
-      initial "To the southeast, a huge steel wall demonstrates \
-               a marked contrast to the otherwise drab surroundings.",
-      before [;
-         Open:  "I presume you have a blow-torch handy?";
-         Push, Pull, Turn: "Not surprisingly, it doesn't move an inch.";
-         LookUnder: "It's flush with the rock floor.";
-         Cast: "The wall seems to absorb and nullify all magic!";
-      ],         
-   has static;
-        
-         
-! ***********************************************************************
-! ** 
-! ** GRAY MOUNTAINS AREA NEARBY MONESTARY   
-! **
-! ***********************************************************************
-   
-Object Cliff_face "Cliff Face"
-   with description "You are standing near the top of a snowy mountain peak. \
-The wind is quite cold and is making your teeth chatter. \
-The general vicinity is mostly snow and rock; however, the \
-entrance into the Monastery is to the north, all but hidden from view \
-by the enormous slabs of snow-covered rock that make up the \
-cliff face. There is a rough but obvious trail leading down \
-the mountain to the south. There is also another trail that \
-winds even further up the mountain peak almost hidden in the \
-snow to the east.",
-   name "peak" "wind" "rock" "structure" "slabs" "trail",
-   n_to MON_Entrance_hall, in_to MON_Entrance_hall,
-   s_to rocky_trail, d_to rocky_trail,
-   e_to Covered_trail, u_to Covered_trail,
-   has light;
-   
-Object Covered_trail "Covered Trail"
-   with description "You are climbing up a small trail that gets periodically \
-lost in great bluffs of snow. The swirling snow makes seeing \
-an unusual effort. The trail leads downwards to a cliff face \
-to the west, and rises towards the mountain top to the north.",
-        name "bluffs" "trail",
-   w_to Cliff_face, d_to Cliff_face,
-   n_to Mountain_peak, u_to Mountain_peak,
-   has light;
-
-Object Mountain_peak "Mountain Peak"
-   with description [;
-        print "You are standing on the top of a peak of the Gray \
-Mountains. A cold wind blows snow everywhere, obscuring what \
-would otherwise surely be a wonderful view of the surrounding \
-countryside. You can just make out some buildings to the far \
-south in Frostham. A snowy bluff marks the way back down";   
-        if (self hasnt general)
-", or to the west, there appears to be a snowy outcropping. It seems to \
-hang precariously over the edge of the mountain, however.";
-        else ".";
-   ],
-   name "wind" "peak" "mountains" "countryside" "buildings" "bluff",
-   d_to Covered_trail,
-   w_to [;
-      if (self has general)
-         "Looks like the outcropping completely collapsed!";
-      return Snowy_outcropping;
-   ],
-   before [;
-      Go:
-       if ((noun==w_obj) && (self hasnt general) && (player notin sleeppallet)) {
-!                 if (WeightOf(player) > 25) {
-           if (children(player) > 0) {
-             print "As you start to tread out to the outcropping, you feel \
-                the snow beneath your feet shifting under your sudden \
-                 weight! You ";
-             if (random(10) > 6) {
-                deadflag = 1;
-                "start to turn back, but the entire \
-                outcropping suddenly tilts under your weight, sending \
-                 you hurtling off the edge into oblivion!";
-             }
-             else {
-                "beat a hasty retreat back to the peak.";
-             }
-          }                     
-          print "You carefully make your way onto the outcropping.^";
-       }
-      Jump: 
-         "Not advisable, it's probably a long way down...";
-   ],   
-   has light;
-                  
-Object Snowy_outcropping "Snowy Outcropping"
-   with description        
-           "You are standing on a snow-covered outcropping. \
-           You are almost waist-deep in snow, and the blisteringly cold \
-           winds aren't helping. The outcropping juts out alarmingly \
-           over the western edge of the mountain. In fact, you can see the \
-           Monastery steeple below this ledge. \
-           The main portion of the mountain peak lies to the east.",
-   name "winds" "steeple" "peak",
-   e_to Mountain_peak,
-   each_turn [;
-        if (random(5)<=3)
-           "^There is an ominous creaking noise somewhere underfoot.";
-        "^Some snow falls off the outermost edge of the outcropping.";
-   ],
-   before [;
-        Go:
-           if (noun==e_obj)
-              print "You cautiously make your way back to the mountain top^";
-           if (noun==d_obj)
-              "That's not a very sound idea.";
-        Jump:
-           "Let's not be suicidal.";
-        Yell: 
-           Outcrop_break(1); rtrue;
-        Sneeze: 
-           Outcrop_break(2); rtrue;
-        Drop:
-           deadflag = 1;
-           "You must have disturbed something! The entire outcropping \
-           breaks away in an avalanche, and you plummet to your death!";
-        Take, Touch, Push, Pull:
-           if (noun==dirty_scroll) {
-              if (random(10) > 5) {
-              deadflag = 1;
-              give Mountain_peak general;
-              remove Snowy_Outcropping;
-              move dirty_scroll to MON_Steeple_roof;  ! it's still obtainable...
-              "As you reach for the scroll, the entire outcropping lurches \
-              alarmingly! Without warning, it \
-              breaks away in an avalanche, and you plummet to your death!";
-              }
-              "As you reach for the scroll, you hear a disturbing rumbling \ 
-              from somewhere underfoot, and you step back hastily.";
-           }
-        Answer:
-           if (inp2==player) {
-              Outcrop_break(1); rtrue;
-           }
-           "To who/whom, exactly?";
-   ],
-   has light;               
-[ Outcrop_break type;
-   if (type == 1) 
-      print "You give the best bellow you can muster, given the current \
-           weather conditions.";  
-   if (type == 2)
-      print "Understandable, given the weather conditions.";
-   print  " Unfortunately, you seem to have disturbed \
-           something, as the entire outcropping gives way in a brief but \
-           powerful avalanche! You tumble through the air, followed by \
-           a large quantity of snow! But suddenly, you see the \
-           Monastery steeple rushing up to meet you!^^THUMP!^^\
-           You lie dazed for a moment. Miraculously, the dirty scroll \
-           lands next to you!^";
-      give Mountain_peak general;
-      move dirty_scroll to MON_Steeple_roof;
-      remove Snowy_Outcropping;
-      PlayerTo(MON_Steeple_roof);  
-      rfalse;    
-];
-
-Object dirty_scroll "dirty scroll" Snowy_outcropping
- class scroll_class,
-  with name "dirty",             
-       initial [;
-           if (location==Snowy_outcropping)
-              "There is a dirty scroll here, practically buried in the snow!";
-           "There is a dirty scroll here.";
-       ],
-;
-
-Object swanko_spell "banish spirit" dirty_scroll
- class spell_class,
-  with name "swanko",
-       magic
-       [;  
-       if (second==0)
-"The chant, looking for a locus of spiritual energy, fails.";
-          "The general vicinity seems pretty free of spirits now.";
-       ],
-;
-
-Object rocky_trail "Rocky Mountain Trail"
-   with description "You are on a rocky mountain trail \
-           that winds up and down a mountain. Patches of \
-           snow can be found here and there. The trail \
-           continues down the mountain to the south, or \
-           up to the north.",
-        name "trail",
-        d_to snowy_intersection,
-        s_to snowy_intersection,
-        u_to cliff_face,
-        n_to cliff_face,
-   has light;
-
-Object snowy_intersection "Snowy Intersection"
-   with description "You are at a snow-filled crossroads \
-           in a mountain trail. Paths lead north towards \
-           the top of the mountain, east, west, and south \
-           towards the base of the mountain.",
-        name "trail" "mountain",
-        n_to rocky_trail,
-        s_to North_of_river,
-        e_to "The path east is blocked after a short distance by a huge snow drift.",
-        w_to Top_of_drop,
-   has light;
-
-Object stone_marker "stone marker"
-   with initial "There is a large stone marker here, in \
-           the center of the intersection.",
-        name "stone" "marker" "obelisk",
-        description [;
-           print "This odd stone structure, partially \
-           covered in snow, looks quite old and mysterious. \
-           It's about seven feet tall, and is shaped like \
-           an obelisk";
-           if (self hasnt general)
-           ", with the top partially broken off.";
-           else ".";
-        ],
-        found_in snowy_intersection snowy_intersection2,
-   has static;
-
-! (second snowy intersection -- in the "past")   
-Object snowy_intersection2 "Snowy Intersection"
-   with description "You are at a snow-filled crossroads \
-           in a mountain trail. Paths lead north towards \
-           the top of the mountain, east, west, and south \
-           towards the base of the mountain.^^Something \
-           seems familiar, yet different, about this place.",
-        name "trail" "mountain",
-n_to "The path north ends after a short distance.",
-s_to "The path north ends after a short distance.",
-w_to "The path north ends after a short distance.",
-e_to "The path east is blocked after a short distance by a huge snow drift.",
-   has light;
-        
-
-Object stone_marker_top "broken stone top"
-   with name "top" "stone" "pinnacle" "broken",
-        capacity 1,
-        size 10,
-        description "The top pinnacle from the stone marker. \
-You notice that it's partially hollow inside.",
-        before [;
-           Receive:
-              if ((noun==silver_rod_piece) && 
-                  (snowy_intersection has general)) {
-                 move silver_rod_piece to self;
-                 give snowy_intersection ~general;
-                 remove self;
-                 give snow general;
-                 print "As you place the rod piece in the \
-broken stone piece, you sense a force from above pull you \
-skywards! In moments, you are high above the snow covered \
-mountains, nearing the sky, which you notice is strangely \
-purple!^";
-                 PlayerTo(Mystical_Cave);
-              !   spell_block = 0;
-                 Mystical_Cave.number = Mystical_Cave.number + 1;
-                 rtrue;
-              }
-        ],
-   has container static open;                
-
-Object Top_of_drop "Top of Snowy Slope"
-   with description "You're at the top of a short downwards slope into \
-           a snowy area below. A path leads east. You could also \
-           slide down the slope. A lone tree stands here, overlooking \
-           the slope.",
-        name "slope",
-        e_to snowy_intersection,
-        d_to Bottom_of_drop,
-        w_to Bottom_of_drop,
-        u_to [;
-          if (tree1 has general) <<Climb tree1>>;
-        ],
-   has light;
-   
-Object tree1 "tree" Top_of_drop
-   with name "tree",
-        description "A leafless, bare tree, with what might be a bird's \
-nest in it.",
-        before [;
-           Climb:                         
-              if (self hasnt general) give self general;
-              print "You clamber up the tree.^";
-              PlayerTo(Top_of_tree); rtrue;
-        ],
-   has scenery;
-   
-Object nest1 "nest" Top_of_drop
-   with name "nest",
-        description "Even from down here, it's a pretty big nest. \
-           Thankfully, no big birds seem to be present.",
-        before [;
-           Search: "You can't see into it from down here.";
-           ThrownAt: 
-                 move noun to Top_of_drop;
-                 "You take aim, but miss.";
-           Receive, LetGo, Rub, Turn, Take, Push, Pull, Touch, Attack, Shake: "You can't reach it.";
-           Search, LookUnder: "From down here, it's hard to see anything \
-but the bottom of the nest.";
-        ],
-   has scenery;
-   
-Object Bottom_of_drop "Bottom of Snowy Slope"
-   with description "You've made your way down to a small snow-covered \
-           clearing, ringed by pine trees. The only exit is back up the \
-           slope.",
-        name "clearing" "pine" "trees" "slope",
-        u_to Top_of_drop,
-        e_to Top_of_drop,
-   has light;
-   
-Object boulder "large boulder" Bottom_of_drop
-   with name "boulder" "rock",
-        initial "There's a large boulder here, sitting squat in the \
-           middle of the clearing.",
-        description "A big, snow-covered rock.",
-        before [;
-           Push, Pull, Turn: "It must weight a ton.";
-           Receive: 
-              if (noun==sleeppallet) {
-                 move sleeppallet to boulder;
-                 "You drape the pallet over the boulder.";
-              }
-        ],
-   has static supporter;
-   
-Object egg_shards "egg shards"
-   with name "shards",
-        initial "There's some broken eggshell shards here, scattered all \
-                over. Some gooey egg stuff too.",
-        description "Some large pieces of shell is all.",
-        !weight 5,
-        size 5,
-;    
-              
-Object Top_of_tree "Top of tree"
-   with description "You're on top of the tree, on some lower branches \
-           that seem pretty stable.",
-        d_to Top_of_drop,
-   has light;
-   
-Object tree2 "tree" Top_of_tree
-   with name "tree",
-        description "Overall, there's nothing terribly special about this tree.",
-   has scenery;   
-   
-Object nest2 "nest" Top_of_tree
-   with name "nest",
-        initial [;
-           print "There's a large bird's nest a bit farther out on a \
-           nearby branch";
-           if (corbie_egg in self)
-              print ". There appears to be an egg in it";
-           ".";
-        ],          
-        description "Given the size and Brother Joseph's lessons \
-           in ornithology, you'd guess that it's a corbie's nest. \
-           It looks abandoned.",
-        before [;
-           ThrownAt:
-              move noun to Top_of_drop;
-              print "Your throw goes a little wide, and ";
-              DefArt(noun); print " lands ";
-              ! if (WeightOf(noun) > 10)
-              !    "with a thump below.";
-              ! else "below.";
-              "below.";
-           Take:  "It's way out on a thinner branch that probably \
-                 won't support your weight.";
-           Receive: "You can't quite reach it to put anything in it.";
-           Push, Pull, Rub, Touch, Attack, Shake: "You can't reach it.";
-           LookUnder: "It seems to be sitting on some branches.";
-        ],           
-        size 10,
-   has static container open transparent;
-   
-Object corbie_egg "corbie egg" nest2
-   with name "egg",
-        short_name "corbie egg",
-        description "A large speckled corbie egg.",
-        !weight 8,
-        size 5,
-        before [;
-           Take, Rub, Push, Pull, Touch, Squeeze, Turn, Shake:
-              if (parent(self) == nest2)
-                 "You can't reach it."; 
-           LookUnder:
-              if (parent(self) == nest2)
-                 "It seems to be in a nest.";
-           ThrownAt:
-              if (parent(self) == nest2) {
-                 move egg_shards to Top_of_drop;         
-                 move noun to Top_of_drop;
-                 remove self;
-                 "Good toss! A bit too strong though. With a dull \
-                 crack, your throw breaks the egg, and pieces of \
-                 shell and egg goop fall to the ground below.";
-              }
-           Attack:
-              move egg_shards to parent(player);
-              remove self;
-              "The egg breaks easily, covering you with egg goop. \
-What a mess.";
-        ],
-has edible scored;           
-
-Object branch "branch" Top_of_tree
-   with name "branch" "branches",
-        description "Some leafless thin tree branches.",
-        before [;
-           Push, Pull, Turn, Shake:  
-              if (corbie_egg in nest2) {
-                 print "You give the branches a good shake. The egg pops \
-                 free and tumbles to the ground below! You see the egg \
-                 land in a soft patch of snow, and roll down the slope! \
-                 Moments later, you hear a dull ";
-                 if (sleeppallet in boulder) {
-                    move corbie_egg to Bottom_of_drop;
-                    "thump from below.";
-                 }
-                 else {
-                    remove corbie_egg;
-                    move egg_shards to Bottom_of_drop;
-                    "crack from below.";
-                 }
-              }
-              "You give the branches a good yank. A bit of snow falls.";
-        ],
-  has scenery;
-
-   
-! Some scenery 'fluff'
-Object snow "snow"
-   with name "snow",
-        description "Cold, white and not in short supply.",
-   found_in Mountain_peak Covered_trail Cliff_face Snowy_outcropping MON_garden
-            snowy_intersection rocky_trail Top_of_drop Bottom_of_drop,
-   before [;
-      Take:  "It melts into nothing soon after.";
-      Touch: "It's crisply cold.";
-      Search:
-         if ((self has general) && (location == snowy_intersection)) {
-            give self ~general;
-            Achieved(16);
-            move stone_marker_top to snowy_intersection;
-            "Remembering where the stone marker top fell, you brush \
-aside some snow. Sure enough, there it is!";
-         }            
-   ],            
-   has scenery;
-
-
-
-Object North_of_river "North of Frozen River"
-   with description "You are standing just north of a frozen river \
-(probably a tributary of Lake Dinge). You can just see \
-the south bank from here, where the trail seems to \
-continue. There doesn't seem to be a bridge, however. \
-A trail also continues north.",
-   name "river" "lake" "bank" "trail",
-   s_to Frozen_river,
-   n_to snowy_intersection,
-  has light;
-  
-  
-Object Frozen_river "On Frozen River"
-   with description "You are standing on a wide smooth river of ice. \
-The river 'runs' east to west, and there are banks to the \
-north and south.",
-   name "bank" "banks",
-   n_to North_of_river,
-   s_to South_of_river,
-   e_to "You slide eastwards, and lose your footing, going nowhere.",
-   w_to "You slide westwards, and slip, going nowhere.",
-   before [;
-      Drop:
-         if (noun==sand) {
-            move sand to Frozen_river;
-            Achieved(0);
-            "You scatter the sand onto the ice.";
-         }
-      Go:
-         if (noun==s_obj) {
-            if (player notin sleeppallet) {
-            if (sand notin Frozen_river)
-               "You slide and flounder helplessly on the ice!";
-            else
-               print "You tread lightly on the sand covered portion of \
-                   the ice, and scramble to the south bank.^";
-            }
-         }
-      Jump:
-         deadflag = 1;
-         "You bravely jump, but without warning, the ice cracks in many \
-         places, and you fall into the freezing river, becoming a human \
-         popsicle in a short amount of time.";
-   ],
-   has light;
-
-! (special -- accessible only from Atrii -- put useful item here)
-Object Frozen_river2 "On Frozen River"
-   with description "You are standing on a wide smooth river of ice. \
-The river 'runs' east to west. To the north and south \
-are huge snow bluffs that obscure most of the surrounding \
-countryside.", 
-   e_to "You step eastwards but lose your footing, going nowhere.",
-   w_to Frozen_river,
-   before [;
-      Go:
-         if (noun==w_obj) 
-            print "^As you step west, a slight downwards slope \
-in the ice sends you sliding uncontrollably.^";
-      Jump:
-         deadflag = 1;
-         "You bravely jump, but without warning, the ice cracks in many \
-         places, and you fall into the freezing river, becoming a human \
-         popsicle in a short amount of time.";
-   ],
-   has light;
-   
-! (scrawled -- clue to using spheres)
-Object p7 "scrawled parchment" Frozen_river2
-   class parchment_class,
-   with name "scrawled",
-description "~Red beats smoke,^\
-Silver bests clouds,^\
-Green defeats depths,^\
-Brown stops earth.~";
-
-Object river_ice "river ice"
-   with name "ice" "river",
-        description "The ice is thick and quite smooth.",
-        found_in Frozen_river Frozen_river2,
-        before [;
-! just trap all receives as drops
-           Receive:
-             <<Drop noun>>;
-        ],
-   has scenery supporter;
-   
-Object South_of_river "South of Frozen River"
-   with description "You are standing just south of a frozen river. \
-You can just see the north bank from here, where the trail seems to \
-continue. The only way to get there is across the river. \
-A trail heads south into a valley.",
-        name "river" "bank" "trail",
-   n_to Frozen_river,
-   s_to Valley_trail,
-   has light;
-
-Object Valley_trail "Valley Trail"
-   with description "You are walking along a valley trail, just \
-           below a portion of the Gray Mountain ranges. You can \
-           see the beginnings of a city to the south, while the \
-           trail winds further into the mountain ranges to the \
-           north.",
-        name "trail" "ranges" "mountain" "city",
-   n_to South_of_river,
-   s_to FROSTHAM_Outskirts,
-   has light;
-
-! (An interesting object, with possible uses...)
-!Object bathroom_scale "bathroom scale" 
-!   with name "scale" "bathroom",
-!        description [;
-!           if (player in bathroom_scale)
-!              "This is an odd small flat white device, with a tiny \
-!               glass window at one end that you can see a numbered dial \
-!               through.  The dial currently reads -- wait, that \
-!               can't be right.  The thing must be broken.";
-!           print "This is an odd small flat white device, with a tiny \
-!               glass window at one end that you can see a numbered dial \
-!               through.  The dial currently reads: <", 
-!               (WeightOf(self) - 10), " Ughs>.^"; rtrue;
-!        ],
-!        weight 10,
-!   has supporter enterable;
-
-
-! ***********************************************************************
-! ** (at this point, for clarity and my sanity, I'm going to build 
-! **  the remaining locations & objects in separate files, included
-! **  here.  Hopefully, the files will be somewhat organized based on
-! **  general location/town/situation, etc.
-! ***********************************************************************
-
-Include "frostham.inf";
-Include "aragain.inf";
-Include "anthar.inf";
-Include "fublio.inf";
-Include "borphee.inf";
-Include "miznia.inf";
-Include "gurth.inf";
-Include "subway.inf";
-Include "special.inf";
-
-! ***********************************************************************
-! **
-! ** HADES, in a newer format
-! **
-! ***********************************************************************
-
-Class Hades_Room_Class
-   with description "You are floating in an empty space. Surrounding you \
-           on all sides is a great wall of flame. It would almost seem \
-           like you are trapped inside a ball of fire.",
-        name "fire" "ball" "space" "flame",
-        before [;
-           if ((action~=##Go) && (action~=##Look) && (action~=##Wait))
-              "You currently lack the means to do that.";  ! can't do much in Hades...
-           Go:
-              give self ~visited; ! cheat, easier than routines for each dir...
-              print "^You find yourself floating through the flaming wall! \
-                    As you pass through you feel a gut-wrenching sensation. \
-                    Well, perhaps you would if you currently had a gut, or \
-                    sensations for that matter. Let's just say you feel \
-                    something akin to a gut-wrenching sensation, and leave \
-                    it at that.^";
-        ],
-     has light;
-  
-Object Hades_1 "Hades"
-   class Hades_Room_Class
-   with u_to  Hades_1,
-        d_to  Hades_1,
-        n_to  Hades_1,
-        s_to  Hades_1,
-        e_to  Hades_1,
-        w_to  Hades_1,
-        in_to  Hades_1,
-        out_to  Hades_1,
-        ne_to  Hades_2,
-        nw_to  Hades_1,
-        se_to  Hades_1,
-        sw_to  Hades_1,
-        each_turn [;
-           if (random(10) == 1)
-              "^A wisp of smoke appears to the northeast, then fades.";
-        ],
-;
-                   
-Object Hades_2 "Hades"
-   class Hades_Room_Class
-   with u_to  Hades_1,
-        d_to  Hades_1,
-        n_to  Hades_2,
-        s_to  Hades_3,
-        e_to  Hades_1,
-        w_to  Hades_2,
-        in_to  Hades_1,
-        out_to  Hades_1,
-        ne_to  Hades_2,
-        nw_to  Hades_1,
-        se_to  Hades_2,
-        sw_to  Hades_2,
-        each_turn [;
-           if (random(10) == 1)
-              "^A wisp of smoke appears to the south, then fades.";
-        ],
-;
-     
-Object Hades_3 "Hades"
-   class Hades_Room_Class
-   with u_to  Hades_4,
-        d_to  Hades_3,
-        n_to  Hades_2,
-        s_to  Hades_1,
-        e_to  Hades_1,
-        w_to  Hades_2,
-        in_to  Hades_3,
-        out_to  Hades_1,
-        ne_to  Hades_2,
-        nw_to  Hades_1,
-        se_to  Hades_3,
-        sw_to  Hades_3,
-        each_turn [;
-           if (random(10) == 1)
-              "^A wisp of smoke appears above, then fades.";
-        ],
-;
-     
-Object Hades_4 "Hades"
-   class Hades_Room_Class
-   with u_to  Hades_3,
-        d_to  Hades_3,
-        n_to  Hades_5,
-        s_to  Hades_2,
-        e_to  Hades_1,
-        w_to  Hades_4,
-        in_to  Hades_4,
-        out_to  Hades_1,
-        ne_to  Hades_1,
-        nw_to  Hades_3,
-        se_to  Hades_3,
-        sw_to  Hades_1,
-        each_turn [;
-           if (random(10) == 1)
-              "^A wisp of smoke appears to the north, then fades.";
-        ],
-;
-     
-Object Hades_5 "Hades"
-   with description "You are floating in an empty space. Surrounding you \
-           on all sides is a great wall of flame. It would almost seem \
-           like you are trapped inside a ball of fire.",
-        name "fire" "space",
-        u_to  Hades_1,
-        d_to  Hades_3,
-        n_to  Hades_2,
-        s_to  Hades_4,
-        e_to  Hades_4,
-        w_to  Hades_5,
-!        in_to  Hades_1,
-        out_to  Hades_1,
-        ne_to  Hades_1,
-        nw_to  Hades_3,
-        se_to  Hades_3,
-        sw_to  Hades_2,
-        before [;
-           if ((action~=##Go) && (action~=##Look) && 
-               (action~=##Wait) && (action~=##Enter) &&
-               (action~=##Take) && (action~=##Examine))
-              "You currently lack the means to do that.";
-           Go:
-              if (noun==in_obj) {
-                 Revive_Player1();
-                 rtrue;
-              }
-              give self ~visited;
-              print "^You find yourself floating through the flaming wall! \
-                    As you pass through you feel a gut-wrenching sensation. \
-                    Well, perhaps you would if you currently had a gut, or \
-                    sensations for that matter. Let's just say you feel \
-                    something akin to a gut-wrenching sensation, and leave \
-                    it at that.^";
-        ],
-     has light;           
-     
-Object Hades_flameball "Ball of flame" Hades_5
-   with name "ball" "sphere" "flame",
-        initial [;
-           print "In the center of the room is a ";
-           if (Player_Lives_Left >= 3)
-              "large flaming sphere.";
-           if (Player_Lives_Left == 2)
-              "medium-sized flaming sphere.";
-           "small flaming sphere.";
-        ],
-        description "It's rather hypnotic -- a perfect sphere made entirely of orange-red fire.",
-        before [;
-           Enter: 
-              Revive_Player1();
-              rtrue;
-        ],                
-   has enterable static open;
-   
-[ Revive_Player1 ;
-     print "You find yourself drawn into flaming sphere. The \
-            ball of flame engulfs you completely, and you feel \
-            nothing as inky blackness surrounds you.^^\
-            ~You have revived him!~ you hear a voice say.^^\
-            You open your eyes. You are lying on a long wooden \
-            table in the Monastery Steeple room. Several members \
-            of the Order are gathered around you, and Brother \
-            Joseph helps you to your feet.^^\
-            ~We were able to bring you back to the world of the \
-            living,~ Joseph says, ~but I fear our powers are waning, \
-            and we may not succeed if we try again. Your quest \
-            continues!~^^\
-            The group files out, leaving you alone in the room.^";
-     in_hades = 0;
-     Player_Lives_Left--;
-     Player_HP_CUR = Player_HP_MAX;  ! Healed up
-     give steeple_window ~open;  ! one of the acolytes was too cold...
-     PlayerTo(MON_Steeple_room);
-];
-
-    
-! ***********************************************************************
-! **
-! ** INITIALIZE AND OTHER STARTUP, place player, place objs, etc
-! **
-! ***********************************************************************
-
-[ Initialise;
-  
-  thedark.description =
-     "It is pitch black. You are likely to be eaten by a grue.";
-     
-  prayer_book.magic = all_my_spells;
-  <Learn prayer_book gnusto_spell>;
-  <Learn prayer_book frotz_spell>;
-  move prayer_book to player;
-  location=MON_Chapel1;
-
-!  (FOR TESTING ONLY)
-!move amulet to player;
-!<Learn prayer_book huncho_spell>;
-!<Learn prayer_book feeyuk_spell>;
-!<Learn prayer_book ledak_spell>;
-!<Learn prayer_book egdelp_spell>;
-!<Learn prayer_book tossio_spell>;
-!move TEMPLE_Artifact to player;
-!move umbrella to player;
-!move sack to player;
-!move c1 to player;
-!move magic_door to player;
-!location = ANTHAR_GUSStation;
-!location=Skyscraper;
-!spell_block = 1;
-!<Learn prayer_book bekdab_spell>;
-!<Learn prayer_book egdelp_spell>;
-!<Learn prayer_book tossio_spell>;
-!move decaf_coffee_can to player;
-!location=ATRII_1;
-];
-
-
-! ***********************************************************************
-! **
-! ** Some special routines, which should be after Initialise
-! **
-! ***********************************************************************
-
-! The Afterlife -- or, a fine time in Hades
-[ AfterLife i;
-   if (Player_Lives_Left <= 0) {
-      print "^^A blackness surrounds you, replaced by more blackness...^^";
-      rfalse;
-   }
-   else {
-      deadflag = 0;  ! not dead yet
-      ! move inventory to place of death
-      i=parent(player);
-      while (child(player)~=0) {
-         give child(player) ~worn;
-         move child(player) to i;
-      }
-      spell_block = 0;
-      in_atrii = 0;
-      in_hades = 1;   
-      print "^^A blackness surrounds you, only to be replaced by...^^";
-      i = random(4);
-      if (i==2) { PlayerTo(Hades_2); rtrue; }
-      if (i==3) { PlayerTo(Hades_3); rtrue; }
-      else { PlayerTo(Hades_1); rtrue; }
-   }
-];   
-
-
-[ DarkToDark i;
-     i = random(10);
-     if (i < 4) {
-        print "^Hmm, perhaps the Grues really are migrating with the \
-               Great Change.^";
-        rtrue;
-     }
-     if (i >= 4) {
-        deadflag = 1;
-        "^Well, don't say I didn't warn you. Something horrible \
-with slavering fangs lurks up and devours you!";
-        rtrue;
-     }
-];
-                    
-
-! [ WeightOf obj t i;
-!       t = obj.weight;
-!       objectloop (i in obj)  t=t+WeightOf(i);
-!       return t;
-! ];              
-! Now, rules for capacity still hold (slightly unrealistic), but we
-! can now check WeightOf(player) in those situations that need it.
-
-[ PrintRank;
-   print ", earning you the rank of ";
-   if (score < 0) "Wanna-be Altar-boy";
-!   if (score >= 500) "Truly Enlightened One";
-!   if (score >= 495) "Benevolent One";
-!   if (score >= 490) "Faithful One";
-!   if (score >= 395) "Simple Man";
-! fill fill
-   if (score >= 250) "Enlightened One";
-   if (score >= 225) "Patriarch";
-   if (score >= 200) "Cardinal";
-   if (score >= 150) "Lama";
-   if (score >= 125) "Cleric";
-   if (score >= 100) "High Priest";
-   if (score >= 90) "Priest";
-   if (score >= 75) "Monk";
-   if (score >= 50) "Brother";
-   if (score >= 30) "Acolyte";
-   if (score >= 20) "Aspirant";
-   if (score >= 10) "Devoted";
-   if (score >= 5) "Believer";
-   "Non-believer";
-];
-
-[ PrintTaskName ach;
-    switch (ach) {
-    0: "using sand to get across the river";
-    1: "triplicating the cereal box";
-    2: "setting the alarm clock";
-    3: "getting the waxy scroll from the skier";
-    4: "giving the palace guard a good cake";
-    5: "solving Barsap's Gambit";
-    6: "fixing the sailboat";
-    7: "finding the rod in the shipwreck";
-    8: "triplicating the ale";
-    9: "finding the rod under the statue";
-    10: "pruning the Christmas Tree Monster";
-    11: "getting past the burly sports fan";
-    12: "winning the three Golem bouts";
-    13: "ending the kobold war";
-    14: "unlocking Duncanthrax's Trophy chamber";
-    15: "unlocking the Lab door";
-    16: "finding the rod in the top of the marker";
-    17: "finding the rod in the house foundation";
-    18: "removing the impenetrable steel wall";
-    19: "joining the True Rod";
-    20: "getting past the broken subway gate";
-    21: "finding the hidden path to the temple";
-    22: "getting the rod through the temple";
-!    23: "finding the scroll in Frobar's painting";
-    23: "getting the scroll from the boutique";
-    24: "getting the scroll from Frobar";
-    25: "getting into the subway tunnel";
-    26: "banishing the four evil elementals";
-! add, if desired
-    } 
-];
-
-! *** NEW ACTION ROUTINES
-
-[ PraySub i;
-     if ((in_hades == 1) || (in_atrii == 1) || (spell_block==1))
-        "You make a prayer and feel no spiritual response! \
-        Have the Deities forsaken you? Or have you found a \
-        place where even the Gods cannot provide guidance?";
-     else {
-        i = random(100);
-        if (Player_HP_MAX ~= (20 + score)) 
-           Player_HP_MAX = (20 + score);
-        ! consider increasing memory/spell capacity here
-        if (i==97) {
-           Player_HP_CUR = Player_HP_MAX;  ! Healed
-           "You make a quick but respectful prayer to the \
-           Deities above, asking for Divine Guidance in your \
-           quest. A saffron glow surrounds you and you feel \
-           spiritually and physically renewed!";
-        }
-        "You make a quick but respectful prayer to the \
-        Deities above, asking for Divine Guidance in your \
-        quest. You finish and feel spiritually renewed.";
-     } 
-];
-
-[ DiagnoseSub i;
-     if (Player_HP_CUR > Player_HP_MAX) ! (This should never happen)
-        "You feel superhuman!";
-     if (Player_HP_CUR == Player_HP_MAX)
-        "You are in good health.";
-     if (Player_HP_CUR == 1)
-        "You are near death's door.";    
-     if (Player_HP_CUR < 5)
-        "You feel extremely weak.";
-     if (Player_HP_CUR < 10)
-        "You feel weak.";
-     i = (Player_HP_MAX / Player_HP_CUR);
-     if (i >= 4)
-        "You feel slightly weak";
-     if (i >= 2) 
-        "You've been better, but you'll be okay.";
-     "You feel okay.";   
-];
-
-[ StrongSub i;
-     i = random(20);
-     if (i > 15) {
-        deadflag = 1;
-        "Such language from a priest such as yourself! \
-         The ground rumbles, and a bolt of blue wrath from the \
-         Deities strikes you dead!";
-     }
-     "Such language from a priest such as yourself! \
-         The ground rumbles suddenly!";
-];
-
-! [ LiftSub ;
-!    if (noun has static)
-!       "That's fixed in place.";
-!    if (noun has scenery)
-!       "You're unable to.";
-!    if (noun has animate)
-!       "That would be less than courteous.";
-!    print "You lift "; DefArt(noun); " and put it back in \
-!          it's original position.  Nothing obvious happens.";
-! ];
-
-[ ShakeSub ;
-   if (noun has animate)
-      "Get a hold of yourself. No need to go around shaking living \
-things like that.";
-   "Nothing happens.";
-];
-
-! (new insert routine, which is the same as old, except that
-! we also check relative sizes of objects) 
-[ InsertSub;
-  receive_action = ##Insert;
-  if (second==d_obj ) <<Drop noun>>;
-  if (parent(noun)~=player) return L__M(##Insert,1);
-
-  if (second>1)
-  {   action=##Receive;
-      if (RunRoutines(second,before)~=0) { action=##Insert; rtrue; }
-      action=##Insert;
-  }
-  if (second hasnt container) return L__M(##Insert,2);
-  if (second hasnt open)      return L__M(##Insert,3);
-  if (IndirectlyContains(noun,second)==1) return L__M(##Insert,5);
-  if (noun has worn)
-  {   L__M(##Insert,6);
-      <Disrobe noun>; if (noun has worn) rtrue;
-  }
-
-  if (children(second)>=ValueOrRun(second,capacity))
-      return L__M(##Insert,7,second);
-
-  if (noun.size > second.size) {
-     CDefArt(noun); print " appears to be too large to put in ";
-     DefArt(second); ".";
-  }
-  move noun to second;
-
-  if (AfterRoutines()==1) rtrue;
-
-  if (second>1)
-  {   action=##Receive;
-      if (RunRoutines(second,after)~=0) { action=##Insert; rtrue; }
-      action=##Insert;
-  }
-  if (keep_silent==1) rtrue;
-  if (multiflag==1) return L__M(##Insert,8);
-  L__M(##Insert,9,noun);
-];    
-
-[ FoldSub ;
-   "I fail to see what you're trying to accomplish by doing this.";
-];
-
-[ MixSub;
-   "I fail to see what you're trying to accomplish by doing this.";
-];
-
-![ SpecialDialSub;
-!   if (noun hasnt numberdial)
-!      "You can't seem to do that.";
-!   if ((second > 9) || (second < 0))
-!      print "It appears that the valid range for ",noun; " is 0 to 9";
-!   noun.number = second;
-!   if (noun.number > 9) noun.number = 0;  
-! a special restriction in this case
-!   print "You set ",noun," to ",second; ".";
-!]; 
-   
-[ JoinSub;
-   "This doesn't seem terribly productive.";
-];
-
-[ MeditateSub;
-   "You close your eyes and focus your mind inwards. \
-Mere moments of time seem to pass like eons. You \
-open your eyes.";
-];
-
-[ YellSub;
-         "ARRGH!";
-];       
-[ SneezeSub;
-     "You make a rather sickly noise.";
-];
-[ YawnSub;
-     if (Frobar in location)
-        "~Stop that!~ Frobar says, ~It's contagious.~";
-     else "Tired?";
-];
-[ XyzzySub;
-     "A hollow voice says, ~Cool!~";
-];
-[ BegSub;
-     "Please, no begging.";
-];
-[ LaughSub;
-     "Was it that funny?";
-]; 
-
-[ HelpSub;
-   "Hello Player!^^\
-SPIRITWRAK, An Interactive Fantasy Adventure^\
-If you're new to interactive fiction games, I lack the \
-space here to give an adequate description, but in short, \
-you're a character in a story, able to interact with \
-objects, places and other things (using regular english \
-sentences) in order to reach your goal, which is to \
-figure out how to ~solve~ the story. For a real \
-description, you might want to check out documents \
-located at ftp.gmd.de.^^\
-For those more experienced players, if you're looking \
-for on-line clues, etc., sadly, you won't find them \
-(the Z5 code is getting rather obscenely large as I \
-write this). A short verb list is contained in the \
-README file that you should have received with this \
-game (or should be able to find at the same place you \
-found this game). Beyond that, if you're truly \
-desperate, you can post a note on the rec.arts.int-fiction \
-usenet newsgroup, or send me email.^^\
-Thanks for playing! ^^\
--- D. S. Yu [dsyu@@64holonet.net]";
-];
-
-Include "Grammar"; ! (Include grammar _after_ action defs, if we replace any)
-
-! **** Extensions
-!Extend "turn" first  
-!  * noun "to" number   -> SpecialDial;
-Extend "examine" first
-                * scope=ReadableSpell            -> Examine;
-
-
-
-! **** Action defs
-
-Verb "diagnose" "health" "status"
-   *     ->    Diagnose;
-    
-Verb "spells" "memory" "chants"
-                *                                -> Spells;
-Verb "learn" "memorise" "memorize" "prepare"
-                * scope=ReadableSpell            -> Learn;
-Verb "c,cast"
-                *                                -> CastOne
-                * noun                           -> CastOne;
-Verb "cast" "chant"
-                * is_spell                       -> Cast
-                * is_spell "at" noun             -> Cast
-                * is_spell "on" noun             -> Cast;
-Verb "yell" "scream" "bellow"
-   *            -> Yell;
-Verb "sneeze" "cough"
-       *       -> Sneeze;
-Verb "yawn"
-       *       -> Yawn;
-Verb "laugh" "chuckle"
-   *            -> Laugh;
-Verb "play"
-   * held       -> Blow;
-Verb "clip" "trim"
-   * noun       -> Cut;
-! Verb "lift" "raise"
-!    * noun       -> Lift;   
-Verb "shake" "yank"
-   * noun       -> Shake;
-Verb "fold"
-   * noun       -> Fold;
-Verb "mix" "stir"
-   * noun       -> Mix;
-Verb "join" "connect"
-   * noun "to" noun -> Join
-   * noun "with" noun -> Join;
-Verb meta "help" "hint"
-   *            -> Help;      
-
-! ** (nonsense verbs below, can be removed without affecting game)   
-Verb "xyzzy" "plugh" "treasure" "plover" "yoho"
-       *       -> Xyzzy;
-Verb "beg"
-        *       -> Beg;
-Verb "meditate"
-        *       -> Meditate;
-      
-end;
-! fin.
-