Rename game files to lowercase
[spiritwrak.git] / src / special.inf
diff --git a/src/special.inf b/src/special.inf
new file mode 100644 (file)
index 0000000..1d22b5c
--- /dev/null
@@ -0,0 +1,1736 @@
+! *********************************************************************
+! SPECIAL.INF  -- Add-on for SPIRITWRAK
+! Contains: 'specials' that I wanted to keep separate from
+! the other 'city-based' .INF files (Atrii, NPC homes)
+! *********************************************************************
+
+! ----------------- (Frobar's home) -------------------------
+
+Object FROBAR_Foyer "Entrance Foyer"
+   with description "You are in the Entrance Foyer of a \
+small but tasteful home. The exit is to the southwest. \
+The general area is tastefully done in maroon carpeting \
+and brass fixtures. Another room lies to the north.",
+   name "maroon" "carpeting" "brass" "fixtures",
+   sw_to FROBAR_Ent,
+   out_to FROBAR_Ent,
+   n_to FROBAR_Parlor,
+   has light;
+   
+Object FROBAR_Parlor "Parlor"
+   with description "You are in a very decorative parlor. \
+Various furnishings of high quality are arranged around \
+an enormous rug with intricate golden symbols in the weave \
+design. Open doorways lead south, north, east and west.",
+   name "rug" "doorways" "furnishings" "symbols",
+   s_to FROBAR_Foyer,
+   n_to FROBAR_Bedroom,
+   e_to FROBAR_Study,
+   w_to FROBAR_Lounge,
+   has light;
+
+Object frobar_plant "large potted plant" FROBAR_Parlor
+   with name "plant" "large" "potted",
+   initial "A large potted plant sits in one corner.",
+   description "A well-tended house-plant.",
+   before [;
+      Cast:
+         if (the_spell_was == throck_spell) {
+            "The plant seems even healthier now.";   
+!            if (Frobar in FROBAR_Bedroom) 
+! (couldn't think of a proper reaction...:)
+         }
+   ],        
+   has static;
+                    
+Object FROBAR_Lounge "Lounge"
+   with description "A large room here apparently serves as a lounge \
+for entertaining. The walls and furniture all have interesting \
+design work that gives an impression of dignified age. A doorway \
+heads east.",
+   name "furniture" "doorway",
+   e_to FROBAR_Parlor,
+   has light;
+   
+Object FROBAR_Study "Study"
+   with description "This is a study room with fancy wood paneling and \
+plush carpeting. There is an exit to the west.",
+   name "wood" "paneling" "carpeting",
+   w_to FROBAR_Parlor,
+   has light;
+
+Nearby FROBAR_shelves "large bookshelf"
+   with name "shelves" "shelf" "bookshelf",
+        initial "A large bookshelf takes up most of the north wall.",
+        description "It's filled with odds and ends, mostly uninteresting.",
+        capacity 30,
+   has static supporter;
+
+Object FROBAR_Journal "plain journal" FROBAR_shelves
+   with name "journal" "plain",
+   ! weight 15, 
+   size 15,
+   description "This is a short journal of notes that \
+Frobar was keeping. The contents are quite dull, mostly \
+consisting of entries like ~Remember to water plant~ and \
+so forth. In fact, the only non-trivial entry follows:^^\
+~Perhaps today I will go visit Barsap's latest creation. \
+Then again, maybe I won't. This so-called 'Gambit' of his \
+is supposed to be some silly diversion where people can \
+hop around floating platforms trying to reach the southeast \
+corner \
+platform on the bottom level, just so they can get \
+teleported back to the top, and start all over again! \
+Can this be a monetarily beneficial thing? I doubt it.~";
+
+! (twisted -- four ancient ones)
+Object p5 "twisted parchment" FROBAR_shelves
+   class parchment_class,
+   with name "twisted",
+description "~...understand. I, like many of the Order, \
+have understood that the greatest Saints of our Order were \
+the Three, those Three that we know as the Ancient Ones. \
+Why then, do I find in ancient cairns, in hidden temples, \
+and in versions of the Scriptures found in unsettled lands, \
+that _four_ beings that called themselves the Ancient Ones \
+did do battle with evil and were defeated? This surely is \
+not to be believed, but I...~";
+
+Object FROBAR_Desk "large wood desk" FROBAR_Study
+   with name "desk",
+        description "A massive wood desk carved from a single block of wood.",
+        capacity 20,
+   has static supporter;
+   
+Object FROBAR_Bedroom "Bedroom"
+   with description "A nice cozy bedroom. The exit is south.",
+   s_to FROBAR_Parlor,
+   has light;
+   
+Object FROBAR_bed "large bed" FROBAR_Bedroom
+   with name "bed",
+        description "A large comfortable-looking bed.",
+        before [;
+           LookUnder: "Sorry, no monsters here.";
+        ],
+   has static enterable supporter;
+   
+!Object FROBAR_Painting "large painting" FROBAR_Bedroom
+!   with name "painting",
+!        initial "There is a large painting hanging on the wall.",
+!        description [;
+!        if (self hasnt general)
+!        "It appears to be an oil painting of a \
+!        scroll on a table.  A small note on the frame says, \
+!        ~Still-life with Scroll, -FF, 791~";
+!        else
+!        "It appears to be an oil painting of a \
+!        table.  A small note on the frame says, \
+!        ~Still-life, -FF, 791~";
+!        ],
+!        before [;
+!           Touch, Rub, Push:
+!              if (self hasnt general) {
+!                 give self general;
+!                 move painted_scroll to player;
+!                 Achieved(23);
+!                 print "As you touch the painting, your hands \
+!run across the scroll, and the oil takes on a three-dimensional \
+!quality!  You ignore the strange sensations as you reach \
+!into the painting, and withdraw the scroll";
+!                 if (Frobar in FROBAR_Bedroom) 
+!                    "!  Frobar watches the events over your \
+!shoulder, and seems puzzled.  ~Now, why didn't I ever think to try \
+!that,~ he muses.";
+!                 else "!";
+!              }
+!              else 
+!                 "The painting seems to be nothing more than \
+!an oil painting now.";
+!        ],
+!   has static;
+
+! ----------------- (Thief's home) -------------------------
+   
+Object THIEF_Bottom_of_staircase "Wondrous Stairway"
+   with description "An enormous spiral staircase seems to wind miles \
+above your head in this curious column-like chamber. Strange \
+points of light brighten the chamber from above. \
+To the west is a small exit.",
+   name "points" "light" "staircase" "stairway" "stairs",
+! TODO -- fix this weirdness...
+   u_to THIEF_Ent,
+   w_to "You can't go that way.",  ! but later...
+   before [;
+      Go: 
+         if (noun == u_obj)
+            print "^You begin the long trek upwards. Strangely, \
+            the stair seems to twist and move as you step on it, \
+            turning like a corkscrew, until you are \
+            graciously deposited at the top, far above your \
+            previous location.^";
+   ],
+   has light;
+         
+   
+Object THIEF_Ent "Fancy Hall"
+   with description "This must be an apartment or penthouse in the \
+skyscraper. You are in a very high hall, with black slate stone \
+walls that seem to reflect shadows everywhere. There is a room \
+to the north. The southern edge of this room drops off into the \
+darkness, followed by a long spiral staircase. The ceiling overhead \
+seems to have tiny points of light like a night sky.",
+     name "slate" "shadows" "staircase" "points" "light",
+     d_to THIEF_Bottom_of_staircase,
+     n_to THIEF_Foyer,
+   has light;
+
+Object THIEF_Foyer "Magnificent Foyer"
+   with description "This is an exceptionally grand entrance foyer, \
+with sweeping arched ceilings and sparkling chandeliers. The \
+room is dimly lit. Open hallways lead south and west.",
+   name "chandeliers",
+   s_to THIEF_Ent,
+   w_to THIEF_Lounge,
+   has light;
+   
+Object THIEF_Lounge "Fancy Lounge"
+   with description "A tastefully overdone lounge with tapestries \
+and gold enamel finished walls. The room is dimly lit, although \
+you see no windows or other sources of light. Open hallways lead \
+east and west.",
+   name "tapestries" "enamel",
+   e_to THIEF_Foyer,
+   w_to THIEF_Storeroom,
+   has light;
+
+Object THIEF_Journal "short journal" THIEF_Lounge
+   with name "journal",
+   initial "There's an open journal sitting here.",
+   ! weight 15, 
+   size 15,
+   description "This appears to be a short collection of notes:^^\
+   ~TIPS ON CRACKING THE NEW FROBOZZCO 3-DIAL COMBO LOCKS: ^\
+   Remember, there's a slight flaw in the design. For every \
+   correct number in the correct dial, pressing the opening button \
+   with cause a small click. Dials with the correct number in the \
+   wrong dial place will cause a small thunk. The lock mechanism \
+   scans for correct numbers in correct places first, and then \
+   for correct numbers in the wrong place in the 'remaining dials'. \
+   Simple! But don't forget, closing the locks will automatically \
+   lock and reset the dials!^^\
+   NEW FLATHEAD PAINTING: ^\
+   I've completed making the copy of the new Leonardo Flathead painting, \
+   received courtesy of the Royal Museum. Glad to say my skills in \
+   art forgery are undiminished -- I can barely tell the difference \
+   between the two myself! I'll soon replace the original with the \
+   copy, and no one will be the wiser!~";
+         
+
+Object THIEF_Storeroom "Workroom"
+   with description [;
+      print "A sight to inspire even the most avaricious, this \
+       storeroom is filled with all sorts of rare and precious treasures. \
+       A hallway leads east";
+      if (self hasnt general)
+         print ". You notice that the west wall appears to be made of \
+solid granite";
+      ".";
+   ],
+   name "hallway",
+   e_to THIEF_Lounge,
+   before [;
+      Examine:
+         if ((noun == w_obj) && (self hasnt general))
+            "The west wall is a solid piece of granite, which \
+seems very odd, considering the other walls are clearly made of \
+slate.";
+      Cast:
+         if ((the_spell_was==ledak_spell) && (Painting_FAKE in self)) {
+            if (Painting_REAL in self)
+               print "One of the paintings";
+            else print "The painting";
+            remove Painting_FAKE;
+            " is surrounded by a yellow glow! It crumbles into \
+dust!";
+         }
+   ],
+   has light;   
+   
+Nearby THIEF_treasure "precious treasures"
+   with name "treasure" "jewels" "gemstones" "artifacts",
+        description "Piles of rare gemstones, precious jewelry, \
+        priceless artifacts, and other treasures line the walls \
+        here.",
+        before [;
+           Take:
+           "Fortunately, your high moral standing allows you \
+           the benefit of having no need for such materials of excess.";
+        ],
+   has scenery;
+
+Object pasta "pile of fettucini carbonari"
+   with name "pile" "fettucini" "carbonari" "pasta",
+        description "A large pile of fettucini dripping in \
+carbonari sauce.",
+        before [;
+           Eat:
+              if (self hasnt general) {
+                 give self general;
+                 "You manage to stuff yourself with pasta, \
+but there's still quite a lot left."; 
+              }
+              else 
+                 "You've already had enough of this stuff \
+to last a lifetime. Just the thought of eating more is enough to \
+make you queasy.";
+        ],
+        size 16,        
+   has edible;
+
+Object c50 "coin" class coin_class;
+   
+Object Painting_FAKE "priceless painting" THIEF_Storeroom
+   with name "painting",
+        plural "priceless paintings",
+        short_name "priceless painting",
+        description "It's a beautiful oil painting of a dark stormy \
+scene. On the horizon, you can see the edges of mountaintops. Near \
+the top of the painting, two winged figures are carrying a lone \
+individual towards a break in the clouds, where a bright white light \
+seems to emanate.",
+        ! weight 25, 
+        size 25,
+        before [;
+        Drop:
+            if (location == Museum_north) { ! player returned fake painting to museum! 
+               remove self;
+               "A museum curator appears and takes the \
+painting. With an expert eye, he looks closely at it. ~This is \
+a fake! I warn you sir, art forgery is a dangerous game.~ He \
+leaves, much disgusted.";              
+            }
+        Take:
+            if (Painting_REAL in parent(self))
+               "They both look so genuine! You can't decide!";
+        Cast:
+            if (the_spell_was == ledak_spell) {
+               remove self;
+               "One of the paintings is surrounded by a bright \
+yellow glow, and disintegrates!";
+            }
+        Search:
+               if (Painting_REAL in parent(self))
+                  "Search which one? Goodness, you can't decide!";
+        ],        
+        ;
+                   
+
+! -------------ETHEREAL PLANE OF ATRII ------------
+
+Object ATRII_1 "Ethereal Plane of Atrii"
+   with description "Standing on a featureless gray plane that \
+   stretches to the infinite horizon against a gray sky, you \
+   can only conclude one thing -- you're on the Ethereal Plane \
+   of Atrii. Well, at least it fits the description Brother \
+   Palemon gave you. It seems like you could go in any \
+   direction from here.",
+   cant_go "An invisible force blocks your way!",
+   name "plane" "horizon" "sky",
+   sw_to ATRII_2,
+   se_to ATRII_3,
+   has light;
+   
+Object ATRII_2 "Ethereal Plane of Atrii"
+   with description "Flat, featureless gray is in every direction \
+   you look. Stranger still is the upright rectangular hole in the \
+   fabric of space that stands in the center of this area. \
+   Otherwise, you could wander this gray dimension in any direction, \
+   it seems.",
+   cant_go "An invisible force blocks your way!",
+   ne_to ATRII_1,
+   sw_to ATRII_4,
+   e_to ATRII_3,
+   s_to ATRII_6,
+   has light;
+   
+Nearby ATRII_2_hole "rectangular hole"
+   with name "hole" "rectangle" "opening",
+        description "Surely you are in a place where the very laws of \
+        nature and the Gods work by different rules! Here stands a \
+        rectangular hole, seemingly torn out of the very space you \
+        stand in. You see some curious metal chamber through the \
+        opening, but there is nothing behind the opening.",
+        before [;
+           Enter:
+              print "^You step through and feel your stomach twist. \
+              You stumble past a set of open metal doors into...^";
+              in_atrii = 0;
+              PlayerTo(Skyscraper);
+              return 2;  ! allow, but print nothing...
+        ],
+   has scenery enterable;
+   
+Object ATRII_3 "Ethereal Plane of Atrii"
+   with description "Flat, featureless gray is in every direction \
+   you look. Stranger still is the flat, glass-like square in the \
+   center of the 'floor' of this area. \
+   Otherwise, you could wander this gray dimension in any direction, \
+   it seems.",
+   cant_go "An invisible force blocks your way!",
+   nw_to ATRII_1,
+   w_to ATRII_2,
+   se_to ATRII_5,
+   s_to ATRII_7,
+   has light;
+   
+Nearby ATRII_3_ice "square of ice"
+   with name "square" "ice" "glass-like",
+        description "It looks and feels like a perfect square of ice, \
+        flush with the featureless gray surface you stand on.",
+        before [;
+           Enter:
+ print "You step onto the square, and before you know it, your \
+surroundings shift and start to fade! You feel a \
+sudden chilling wind. The ice seems to lengthen and stretch. The \
+gray plane slowly turns white and bumpy.^";
+              in_atrii = 0;
+              PlayerTo(Frozen_river2);
+              return 2;
+        ],
+   has scenery enterable;
+    
+Object ATRII_4 "Ethereal Plane of Atrii"
+   with description "Flat, featureless gray is in every direction \
+you look. Stranger still is the large black hole to the south. \
+Otherwise, you could wander this gray dimension in any direction, \
+it seems.",
+   cant_go "An invisible force blocks your way!",
+   ne_to ATRII_2,
+   se_to ATRII_6,
+   s_to [; <<Enter ATRII_4_hole>>; ],
+   has light;
+   
+Nearby ATRII_4_hole "black hole"
+   with name "hole" "black",
+        description "It looks like a large hole, probably twice your \
+        height. It's completely black and featureless.",
+        before [;
+           Enter:
+             print "^You step into the black hole. You stumble \
+       forward, surrounded by blacker-than-night darkness.^";
+             in_atrii = 0;
+             PlayerTo(Subway_Tunnel);
+             return 2;
+        ],
+   has scenery enterable;
+   
+! (secret subway tunnel)
+Object Subway_Tunnel "Dark Tunnel"
+   with description "You're in a large dark tunnel that seems \
+   to run north and south. To the south you see light. There \
+   seem to be two metal tracks running along the ground.",
+       s_to GURTH_GUSPlatform,
+       n_to "You walk north, and run into a invisible force!",
+       before [;
+          Go:
+             if (noun==s_obj) {
+                Achieved(25);
+                print "^You step out into an underground chamber. \
+    A burly uniformed figure sees you exit the tunnel and yells, \
+    ~Hey, no playing in the tunnels, pal!~^";
+             }
+       ],
+       each_turn [ i ;
+          i = random(40);
+          if (i > 35)
+             "^You hear a rumbling noise echoed from somewhere, and \
+             the entire tunnel seems to shake! Then, all is quiet.";
+          if (i == 17 or 18) {
+             deadflag = 1;
+             "^Suddenly, without warning, a huge train car appears \
+             heading south! It plows straight into you!";
+          }
+          if (i==6 or 7) 
+             "^Suddenly, a huge train car appears heading north! \
+             You barely avoid getting pulverized! Strangely, \
+             you watch as the train continues north, and \
+             seems disappear into blackness nearby. It's as \
+             though the train was simply removed from the tunnel \
+             somehow.";
+       ],
+;
+
+Nearby ST_tracks "tracks"
+   with name "tracks" "tracks" "metal",
+        description "Two long metal tracks, running north and south. \
+        There's something oddly familiar about them.",
+   has scenery;
+               
+Object ATRII_5 "Ethereal Plane of Atrii"
+   with description "Flat, featureless gray is in every direction \
+   you look. It seems like you could go in any \
+   direction from here.",
+   cant_go "An invisible force blocks your way!",
+   nw_to ATRII_3,
+   sw_to ATRII_7
+   has light;
+   
+Object p9 "ripped parchment" ATRII_5
+   class parchment_class,
+   with name "ripped",
+description "~...now know that the Rod we believe is \
+the Rod of the Ancients, sequestered in our Monastery, is \
+an artifact of evil! Imprisoned inside, \
+true to the scriptures (at least this much is, what \
+isn't, I can nowadays say is much) we know, is Anabais. \
+What is worse, is that this very Rod is an artifact of \
+evil power created by Anabais, in the image of the True \
+Rod of the Ancients, which he planned to use to aid \
+him in his evil gains! \
+Were that evil one free again, and had about him both \
+his brothers and his Rod of Evil, we would witness a \
+reckoning \
+greater than Quendor has ever known! I take relief in \
+the knowledge that he will never be freed, and he will \
+never regain his implement of evil; only an innocent \
+being can break the false rod and \
+free him from his prison, and subsequently, \
+the false rod cannot be regained by Anabais through his \
+own will, or another evil being. \
+In fact, only a being of good again can gather \
+the resulting pieces, and only through this being \
+can Anabais regain his evil artifact, for...~";
+
+
+Object ATRII_6 "Ethereal Plane of Atrii"
+   with description "Flat, featureless gray is in every direction \
+   you look. It seems like you could go in any \
+   direction from here.",
+   cant_go "An invisible force blocks your way!",
+   nw_to ATRII_4,
+   e_to ATRII_7,
+   n_to ATRII_2,
+   se_to ATRII_8,
+   has light;
+   
+Object ATRII_7 "Ethereal Plane of Atrii"
+   with description "Flat, featureless gray is in every direction \
+   you look. Stranger still is the odd-shaped depression in the gray \
+   plane here. \
+   Otherwise, you could wander this gray dimension in any direction, \
+   it seems.",
+   cant_go "An invisible force blocks your way!",
+   ne_to ATRII_5,
+   w_to ATRII_6,
+   sw_to ATRII_8,
+   n_to ATRII_3,
+   has light;
+
+Nearby ATRII_7_depression "depression"
+   with name "depression" "cavity",
+        description "It's a large elongated depression in the gray 'floor'. \
+        The cavity has a flat bottom, and somewhat cigar-like shape.",
+        before [;
+           Enter:
+              print "^You step into the depression. Your very \
+              surroundings start to fade, replaced by sunlight that \
+              makes you squint! The gray plane undulates and \
+              buckles and turns into a great body of water \
+              before your very eyes.^";
+              in_atrii = 0;
+              PlayerTo(sailboat); ! useful if the player 'lost' the boat at sea.
+              return 2;
+        ],
+   has scenery enterable;
+   
+Object ATRII_8 "Ethereal Plane of Atrii"
+   with description "Flat, featureless gray is in every direction \
+   you look. Directly overhead, you notice odd streaks of \
+   light. From here, you could wander this gray dimension in any direction, \
+   it seems.",
+   name "streaks",
+   cant_go "An invisible force blocks your way!",
+   nw_to ATRII_6,
+   ne_to ATRII_7,
+   has light;
+! ----------- Special Implementor's Residence -----------
+
+Object Imp_Liv "Strange Room"
+   with description [;
+      print "You ";
+      if (player in Imp_Curtains)
+         "can't see much behind these curtains.";
+      else "feel a great sense of dread! Surely, given the way \
+you got here, this must be the domicile of a dreaded Implementor! \
+The entire place feels strange and \
+alien and, well, ~modern~. There's some sort of kitchen to the \
+east. Long curtains cover what must be a window to the south.";
+        ],
+        number 1,
+        e_to Imp_Kitchen,
+        w_to Imp_door,
+        s_to [; <<Enter Imp_Curtains>>; ],
+        each_turn [ ;
+        if (Imp in Imp_Bedroom) {
+           if (Imp_Liv.number == 3) {
+              StartDaemon(Imp); 
+              Imp_Liv.number = 4;
+           }
+           else "^You hear some faint noises to the west.";
+        }
+        ! create some noises if player in curtains
+        if (player in Imp_Curtains) {
+           if (Imp in Imp_Liv)
+              "^You hear some faint noises nearby.";
+           if (Imp in Imp_Kitchen)
+              "^You hear some faint noises to the east.";
+        }
+        ],
+        time_left 0,
+        time_out [;
+            ! if player hasn't 'listened' twice to start Imp, 
+            ! start him anyway (otherwise, in truth, player 
+            ! would be permanently stuck in (my) apartment.
+            if (Imp_Liv.number < 4) {
+              StartDaemon(Imp);
+              Imp_Liv.number = 4;
+            }
+        ], 
+        before [;
+           ! if player actually listens, better noises...
+           Listen:
+        if (Imp in Imp_Bedroom) {
+           if (Imp hasnt general) { ! i.e. -- awake
+              if (Imp_Liv.number == 1) {
+                 Imp_Liv.number = 2;
+                 "It sounds like someone is talking to himself to \
+the west. You hear: ~Now, wait just a second here, the player object \
+is gone! How did that happen?~";
+              }
+              if (Imp_Liv.number == 2) {
+                 Imp_Liv.number = 3;
+                 "It sounds like someone is talking to himself to \
+the west. You hear: ~That can't be right. I must be getting tired. \
+Think I'll make myself a nice hot cup of coffee.~";
+! on next turn via Imp_Liv.each_turn, Imp daemon will be started...
+              }
+              ! otherwise, Imp has already made his rounds and
+              ! returned to bedroom, _not_ falling asleep
+              "You hear someone whistling a merry tune to the west."; 
+           }
+           else
+              "You hear someone snoring loudly to the west.";
+        }
+        if (Imp in Imp_Liv) {
+           if (Imp.number == 1)
+              "You hear someone walking nearby. The footsteps \
+soon fade to the east.";
+           if (Imp.number == 4)
+              "You hear someone walking nearby. The footsteps \
+soon fade to the west.";
+        }
+        if (Imp in Imp_Kitchen) {
+           ! This assumes the daemon will run before the player turn.
+           if (Imp.number == 2) {
+           switch (Imp.weight) {
+           118: print "You hear an irritated voice say, \ 
+~What happened to my coffee maker?~ Slightly softer, you \ 
+hear ~Well, I guess I'll have that iced tea.~";
+           119, 122: print "You hear a voice to the east say, \ 
+~Looks like I've got coffee, thank goodness.~";
+           121: print "You hear a voice to the east say, \ 
+~Great, I'm all out of coffee. Good thing I still have some \ 
+iced tea.~";
+           }  
+           " Shortly after this, you hear sounds of someone to \
+the east starting some kitchen activity.";
+           }
+           else "You hear some brief busy noises from the west, \
+followed by what sounds like someone drinking something. Shortly \
+thereafter, you hear the sounds of someone walking into the area \
+from the east.";
+        }
+        ],
+   has light;       
+
+Nearby Imp_Curtains "set of curtains"
+   with name "curtain" "curtains",
+        description "Some heavy-cloth curtains along the south wall.",
+        before [;
+           Open: "You draw back the curtains and see a sight that \
+beggars the mind! Through the windows, the night sky falls across \
+some unknown landscape, dotted with strange bright points of light. \
+Tall buildings seem to be everywhere. Whatever world you've stumbled \
+onto, it certainly is not your own! You hastily close \
+the curtains.";
+           Enter: print "In an attempt to hide, you part the curtains. ";
+        ],
+   has static enterable;
+
+Object Imp_Kitchen "Strange Kitchen"
+   with description "A room that could be a kitchen, \
+if it didn't seem completely strange. Harsh bright lights seem to \
+be coming from some unknown source. Strange-looking white countertops and \
+cabinets fill the area, along with a curious white closet-like object. \
+A room lies to the west.",
+   name "cabinet" "cabinets" "closet" "refrigerator" "countertops",
+        w_to Imp_Liv,
+   has light;
+   
+Object Coffee_maker "curious machine" Imp_Kitchen
+   with name "machine" "curious",
+        description "A white plastic device that seems to \
+encase a glass pitcher or kettle of some sort. Most odd.",
+        ! weight 15, 
+        size 15,
+;
+
+Object regular_coffee_can "can of regular coffee" Imp_Kitchen
+   with name "can" "coffee" "regular",
+        description [;
+                    "The can reads: ~Brand-X coffee crystals~^^\
+                    ~Rich, mountain-grown flavor.~";
+        ],
+        before [;
+           Open:
+            "You'd need a good can-opener for that.";
+        ],
+        ! weight 15, 
+        size 15,
+;
+
+
+Object Imp_Bedroom "Strange Bedroom"
+   with description "A very curious small bedroom. \
+   A white desk sits here amongst other odd furnishings.",
+   name "furnishings" "bed" "chair",
+   e_to Imp_door,
+   has light;
+   
+!Nearby Imp_Bed "furnishings"   
+!   with name "furnishings" "bed" "chair",
+!        description "Some weird bedroom furniture.",
+!   has scenery;
+
+Object Imp_Desk "desk" Imp_Bedroom
+   with name "desk",
+        description "A white desk, with a strange, modern look.",
+        capacity 6,
+   has scenery supporter;
+
+Object Imp_Computer "strange machine" Imp_Desk
+   with name "machine" "computer",
+        description 
+        [ ;
+           print "It's a strange metal box. On top, perhaps connected in some \
+way, is another metal box with a glass plate on the front. Strange wires \
+seem to be attached to the boxes somehow. \
+In front of the boxes is an odd plastic \
+flat object with rows and rows of plastic buttons labeled every letter in \
+the alphabet";
+           if (self hasnt general) {
+              give self general;
+              print ".^^Looking closer, you notice curious glowing \
+letters on the glass plate. You read the letters, and \
+feel drawn to respond...^^\
+SPIRITWRAK DEVELOPMENT SYSTEM:^\
+(AUTOMATIC OBJECT GARBAGE-COLLECTION)^\
+REMOVE OBJECT IMPENETRABLE_STEEL_WALL? (Y/N) ";
+if (YesOrNo() == 0)  "You press a button labeled ~N~. The strange box \
+emits a tiny beep, and the glass plate is covered with fantastic colorful \
+designs.";
+else {
+       ! set-up the secret room 
+       remove steel_wall;
+       give cave_intersection general;
+        Achieved(18);
+"You press a button labeled ~Y~. The strange box \
+emits a tiny beep, and the glass plate is covered with fantastic colorful \
+designs.";
+     }           
+           }
+           else ". The glass plate currently has strange glowing colorful \
+patterns displayed on it.";                                 
+        ],        
+   has static;
+   
+[ ImpSendBack ;
+    print "~I'm afraid you'll have to go back.~ The Implementor \
+snaps his fingers, and suddenly, you're back in...^";    
+    spell_block = 0;
+    StopDaemon(Imp);
+    StopTimer(Imp_Liv);
+    PlayerTo(ATRII_8);
+];   
+   
+Nearby Imp_door "door"
+   with name "door",
+        when_closed [;
+             if (self in Imp_Liv) {
+                if (player notin Imp_Curtains)
+                   "There's a closed door to the west.";
+                else rtrue;
+             }
+             else "There's a closed door to the east.";
+        ],
+        when_open [;
+             if (self in Imp_Liv) {
+                if (player notin Imp_Curtains)
+                   "There's an open door to the west.";
+                else rtrue;
+             }
+             else "There's an open door to the east.";
+        ],
+        description "A plain-looking door. A note \
+attached to it says ~DO NOT DISTURB, IMPLEMENTOR AT WORK~.",
+        door_dir [;
+             if (self in Imp_Liv) return w_to;
+             else return e_to;
+        ], 
+        door_to [;
+             if (self in Imp_Liv) return Imp_Bedroom;
+             else return Imp_Liv;
+        ],
+        found_in Imp_Liv Imp_Bedroom,
+        before [;
+        Open:
+           if ((Imp in Imp_Bedroom) && (Imp hasnt general)) {
+              print "You open the door, revealing a small room with \
+what must be an Implementor sitting behind a desk. The Implementor looks \
+up, startled. ~You're here?~ he says, observantly. ";
+              ImpSendBack();     
+              return 1;                    
+           }             
+        ],
+    has static door openable;
+
+   
+! *************** And, for my final trick, the endgame **************
+
+Object Mystical_Cave "Mystical Cave"
+   with description "You've entered a wondrous natural cave, lit \
+everywhere by reflected light from some sort of purple crystalline substance \
+in the walls. A tunnel exits to the northwest.",
+   name "reflected" "crystal" "crystalline" "substance",
+   number 0,
+   nw_to [;
+      if (Mystical_Cave.number ~= 4)
+         "The purple light in the chamber seems to pulse with energy, \
+and find your way blocked by an invisible force!";
+      else {
+         spell_block = 0;
+         ! fill with things, if necc.
+         print "As you leave, a sudden tremor shakes the \
+cave! You just narrowly avoid a sudden cave-in behind you!^";
+         give cave_intersection ~general;
+         return cave_intersection;      
+      }
+   ],
+   has light;         
+   
+Nearby purple_sphere "purple sphere"
+   with name "sphere" "purple",
+        initial "There's a purple crystal sphere partially embedded \
+in the rock floor here.",
+        description "A large purple sphere that seems to pulse with \
+strange energy.",
+        before [;
+          Push, Touch, Rub:
+            ! various endgame trickery...
+            if (silver_rod_piece in player) {
+               while (child(player)~=0) {
+                  give child(player) ~worn;
+                  move child(player) to Mystical_Cave;
+               }
+               move silver_rod_piece to player;
+               spell_block = 1;
+               print "The sphere pulses with angry energy! It seems to \
+be fighting the silver rod piece you hold! With a sudden burst, you \
+feel your mind reel and your very surroundings change!^";
+               give stone_marker general;
+!               give snowy_intersection general ~visited;
+               give snowy_intersection general;
+               StartTimer(White_Dragon,3);
+               PlayerTo(Dragon_Cave);
+               rtrue;
+            }
+            if (green_rod_piece in player) {
+               while (child(player)~=0) {
+                  give child(player) ~worn;
+                  move child(player) to Mystical_Cave;
+               }
+               move green_rod_piece to player;
+               spell_block = 1;
+               print "The sphere pulses with angry energy! It seems to \
+be fighting the green rod piece you hold! With a sudden burst, you \
+feel your mind reel and your very surroundings change!^";
+               StartTimer(captain,3);
+               PlayerTo(On_Boat);
+               rtrue;
+            }
+            if (red_rod_piece in player) {
+               while (child(player)~=0) {
+                  give child(player) ~worn;
+                  move child(player) to Mystical_Cave;
+               }
+               move red_rod_piece to player;
+               spell_block = 1;
+               print "The sphere pulses with angry energy! It seems to \
+be fighting the red rod piece you hold! With a sudden burst, you \
+feel your mind reel and your very surroundings change!^";
+!               give Stadium_entrance general ~visited;
+!               remove stadium_sign;
+!               remove stadium_statue;
+!               move statue_base to Stadium_entrance;
+               StartTimer(statue_base,2);
+               PlayerTo(Stadium_entrance2);
+               rtrue;
+            }
+            if (brown_rod_piece in player) {
+               while (child(player)~=0) {
+                  give child(player) ~worn;
+                  move child(player) to Mystical_Cave;
+               }
+               move brown_rod_piece to player;
+               spell_block = 1;
+               print "The sphere pulses with angry energy! It seems to \
+be fighting the brown rod piece you hold! With a sudden burst, you \
+feel your mind reel and your very surroundings change!^";
+!               give GURTH_House general ~visited;
+!               move bad_brick to GURTH_House;
+               StartTimer(bad_brick,7);
+               PlayerTo(GURTH_House2);
+               rtrue;
+            }
+            ! default...
+            "A purple blast of force throws you back!";
+        ],
+   has static;                   
+
+Object skeleton "skeleton" Mystical_Cave
+   with name "skeleton" "bones",
+        initial "Lying in one corner of the room is a skeleton.",
+        description "Just some bones, not much else, is all.",
+        before [;
+           Pull, Push, Turn, ThrownAt, Touch, Attack, Rub,
+Cut, Shake, Squeeze, Kiss:
+              remove self;
+              "The skeleton crumbles into dust, as though \
+many years of time had suddenly caught up with it in one \
+moment.";
+        ],
+has static;
+
+! (black -- final parchment of Palemon's final words)
+Object p8 "blackened parchment" Mystical_Cave
+   class parchment_class,
+   with name "blackened",
+description "~I write these final words not in the hope \
+that others will find and heed them, for this is too great \
+a hope in my moment of death, but rather, to try and maintain my mind and soul \
+in the face of the terror I now know is the truth.^^\
+For how can a man survive, knowing that his entire life, \
+his entire belief, has been a ruse, a dupe, from the \
+early beginning? That he has merely been a pawn in a \
+working of evil that cannot be stopped?^^\
+I have fought all manner of terrors, and recovered that which \
+I know is the _true_ Rod of the Ancients, broken and scattered \
+eons ago in the face of great evil. I sought also those \
+ancient spheres that the Four Ancients never had the chance to \
+use against the evil four elemental demons, but alas, I could \
+not find them all, and sequestered those which I did with \
+good people that the elemental evil could not touch.^^\
+Alas, my quest has ended here. I lie trapped here, \
+with the pieces of the true Rod in hand, unable to go forward, trapped by the \
+elemental mystic locks on the rod that prevent it from leaving this \
+very room, yet unable to go back, to leave the rod here and \
+deny the very real danger of the defeat of the Ancients, of \
+the power that the evil elementals hold.^^\
+What is a faith destroyed? Who can help me to believe, in my moment \
+of disbelief?^^\
+--P--~"; 
+
+
+
+
+Object Dragon_Cave "Giant Cavern"
+   with description "You find yourself in a huge cavern. To the west \
+is a large exit that looks out into a void of snow-covered mountains.",
+        name "mountains",
+        w_to "You hesitate. The cave seems to just \
+exit off the side of a mountain, and all you can see below is whiteness. \
+It could be a long way down.",
+        d_to [; <<Jump>>; ],
+        out_to [; <<Jump>>; ],
+        before [;
+            Jump:
+               print "You close your eyes and leap out of the cave! \
+You plummet through silent white winds. \
+Moments later, you fall right into an enormous snowbank, and \
+roll downwards, into...^";
+               PlayerTo(snowy_intersection2);
+               rtrue;
+        ],
+   has light;
+
+Object On_Boat "On strange boat"
+   with description "You are on a long open boat, riding the waves of \
+some great sea. The boat seems to be filled with sailors from \
+some militia.",
+        name "waves" "sea" "mast" "floorboards" "ship" "boat",
+        before [;
+           Drop:
+              if (captain has general) {
+                 if (noun==green_rod_piece) {
+                    remove green_rod_piece;  ! it'll be back           
+                    give shipwreck general;
+                    Mystical_Cave.number = Mystical_Cave.number + 1;
+                    StopTimer(captain);
+                    StopTimer(militia);
+                    print "You drop the green rod and watch it roll near \
+a mast and get stuck in the floorboards.^^\
+There's a load crack! The ship is breaking apart! Sailors \
+scramble in vain for safety! You hang onto the side of the \
+boat, but the vessel rocks wildly, and you fall into the waters. \
+^^As you sink, you notice the waters seem to change to a purplish \
+hue, and you find yourself back in...^";
+                    PlayerTo(Mystical_Cave);
+                    rtrue;
+                 }
+              } 
+              else  
+                "The sailors are holding you fast, so you \
+can't do this at the moment.";
+        ],
+   has light;
+
+Nearby militia "sailors"
+   with name "sailors" "militia" "navy",
+        description "A bunch of dour-looking navy sailors.",
+        time_left 0,
+        time_out [;
+           deadflag = 1;
+           "The ship breaks asunder! Sailors scramble madly \
+and fall into the violent waves! You hear \
+the captain scream ~Blast! I can't swim!~ before the \
+waters cover you completely.";
+        ],
+   has scenery;
+
+Object ENDGAME_ROOM "Nothingness"
+   with description "Nothingness surrounds you. Yet, you feel like \
+your conscious being extends into worlds and dimensions never \
+imagined. You float in a void of total being.",
+        number 0,  ! number of elementals banished
+        each_turn [;
+           switch (ENDGAME_timer.number) {
+           0:  ENDGAME_timer.number = 1; 
+               if (black_elemental in ENDGAME_ROOM) 
+               "^Echoing in your mind, you hear a voice, that you \
+somehow know is from the black sphere. ~Give me the rod priest, \
+and you shall be immortalized as a symbol to an entire civilization!~";
+           1:  ENDGAME_timer.number = 2; 
+               if (smoke_elemental in ENDGAME_ROOM) 
+               "^Echoing in your mind, you hear a voice, that you \
+somehow know is from the smoke-colored sphere. ~Give me the rod priest, \
+and I shall let you be witness to a feat of great magic, never \
+before witnessed!~";
+           2:  ENDGAME_timer.number = 3; 
+               if (gray_elemental in ENDGAME_ROOM) 
+               "^Echoing in your mind, you hear a voice, that you \
+somehow know is from the gray-colored sphere. ~Give me the rod priest, \
+and I will grant you power over all who surround you!~";
+           3:  ENDGAME_timer.number = 4; 
+               if (white_elemental in ENDGAME_ROOM) 
+               "^Echoing in your mind, you hear a voice, that you \
+somehow know is from the white sphere. ~Give me the rod priest, \
+and you will gain the attention of one of the more powerful \
+figures of your time!~";
+           }
+        ],  
+has light;
+
+Object ENDGAME_timer "void" ENDGAME_ROOM
+   with name "void" "nothingness",
+        description "The absence of anything. Yet, at the same \
+time, the sense that everything possible is near.",
+        number 0,
+        time_left 0,
+        time_out [;
+           deadflag = 1;
+           if (ENDGAME_ROOM.number < 3)
+              print "The spheres nearby suddenly converge";
+           else print "The sphere nearby suddenly converges";
+           " towards you! In your mind, you hear \
+~Hesitation, foolish priest, was the downfall of the Ancient \
+Ones~ before you feel the full force of the void.";
+        ],  
+   has scenery;
+
+! *** fake room/encounter for bad ending #x
+Object badend1 "On Giant Cube"
+   with description "You stand on a single giant floating white \
+cube, in the middle of some dimly lit cavern. \
+^^A small newt floats nearby, concentrating on something.^^\
+The newt suddenly opens its eyes! ~What?~ it croaks in \
+surprise. ~Who are you? You've broken my concentration on \
+the spell, you fool!~ the newt croaks. You feel the cube \
+shift, then stop floating! You plummet into the lava you \
+feared was below..."
+   has light;
+
+Object badend2 "Top of Pyramid"
+   with description "You are on top of a pyramid in some \
+ancient city. You see dense jungle to the horizon. \
+An ancient civilization spreads before you, in all its \
+mysterious glory.^^Several robed figures surround you.^^\
+Suddenly, you realize you are tightly bound! One of the \
+figures points towards the horizon and makes a complicated \
+gesture. In a language you do not understand, he seems \
+to make a prayer to some nameless god! Fearing the \
+inevitable, you struggle mightily, but to no avail. \ 
+In moments, the group of robed figures hurls you off the \
+pyramid to your death!"
+   has light;
+
+! *************
+! Creatures
+! *************
+
+Object Imp "Implementor" Imp_Bedroom
+   with name "Implementor",
+        article "an",
+        description [;
+           print "Some Implementor. Looks more like a oddly-dressed \
+young man badly in need of a haircut";
+           if (self has general)
+              ". He's also sound asleep!";
+           else ".";
+        ],
+        describe [;
+           print "^Someone you assume must be an Implementor \
+is here";
+           if (self has general)
+              ", sound asleep.";
+           else ".";
+        ],           
+        number 0,
+        weight 120,  !  about right
+            life [;
+                ! if asleep, which is usually the case
+               if (self has general) {
+                  if (action==##WakeOther or ##Attack) {
+                     print "You manage to rouse the Implementor from his \
+slumber. He stares at you, bewildered. ~What are you doing here?~ \
+he asks. ";
+ImpSendBack(); rtrue;
+           }
+                  else
+                  "He appears to be sound asleep right now, and isn't very \
+responsive.";
+           }
+!              else {
+! (I suppose this is unnecessary. -- i.e. the player shouldn't be able to 
+! interact with the implementor unless the implementor is asleep)
+!                 print "Well, that got his attention. The Implementor \
+!looks completely startled. ~What are you doing here?~  he says. ";
+!ImpSendBack(); rtrue;
+!           }                             
+            ],
+            daemon [;
+               ! ASSUMPTION -- daemon started by start event
+                StopTimer(Imp_Liv);
+               if (Imp.number == 0) {
+                  give Imp_door open;
+                  if ((player in Imp_Liv) && (player notin Imp_Curtains)) {
+                     print "^The door to the west suddenly flies open! \
+A somewhat bedraggled Implementor steps out! He spots you and his \
+jaw drops. ~You, here?~ he says. ";
+ImpSendBack(); rtrue;
+              }                      
+              else 
+                 print "^You hear a door open to the west.^";
+              Imp.number = 1;
+              move Imp to Imp_Liv;
+              }
+           else {
+              ! first a little 'lazy' clause that kicks the player
+              ! out if the Imp is moving around and the player isn't
+              ! in the curtains
+              if ((Imp.number < 5) && (player notin Imp_Curtains)) {
+                 if (Imp in location) print "^The Implementor ";
+                 else print "^From nearby, an Implementor rushes up and \
+";
+                 print " grabs you by the shoulder! \
+~What are you doing here?~ he \
+says. "; ImpSendBack(); return 1;
+              }
+              ! now, otherwise, we move the Imp and set his
+              ! number accordingly.  Room descs and 'Listen'
+              ! traps in Imp_Liv will need to use this info  
+              switch (Imp.number) {
+              ! [step 1, moving to Kitchen]
+              1: move Imp to Imp_Kitchen;
+                 Imp.number = 2;
+                 if (Coffee_maker notin Imp_Kitchen) Imp.weight = 118;
+                 else {
+                    if (regular_coffee_can in Imp_Kitchen) {
+                       Imp.weight = 119;
+                       remove regular_coffee_can;
+                    }
+                    else {
+                       if (decaf_coffee_can in Imp_Kitchen) {
+                          Imp.weight = 122;
+                          remove decaf_coffee_can;
+                       }
+                       else {
+                       ! no coffee, gosh darn it
+                          Imp.weight = 121;
+                       }
+                    }
+                 }
+                 return 0;
+              ! [step 2, making/drinking the beverage]
+              2: Imp.number = 3;
+              ! [step 3, leaving kitchen, back to living room]
+              3: Imp.number = 4;
+                 move Imp to Imp_Liv;
+              ! [step 4, goes back into bedroom]
+              4: Imp.number = 5;
+                 give Imp_door ~open;
+                 if (player in Imp_Curtains) 
+                    print "^You hear a door close to the west.^";
+                 move Imp to Imp_Bedroom;
+!                 move coffee_cup to Imp_Bedroom;
+                 if (Imp.weight == 122)
+                    give Imp general;  ! asleep
+                 StopDaemon(Imp);
+              }                         
+           }        
+            ],
+has animate;
+
+!Object coffee_cup "large cup"
+!   with name "cup" "large",
+!        description "A large mug, with the residue of some brown liquid \
+!left in it.",
+        ! weight 5, 
+!        size 4,
+!   has container open;        
+
+! MOVEPRINTNPC routine, from Gareth Rees' 'THIEF.INF' 
+! (TODO -- you really don't need this, since only Frobar moves in this fashion)
+[ MovePrintNPC n dest dir;
+    if (n in location) {
+        print "^", (The) n, " walks off";
+        if (dir ~= in_obj or out_obj or u_obj && dir ~= d_obj)
+            print " to the ", (DirectionName) dir.door_dir;
+        print ".^";
+    }
+    if (dest == 0) remove n;  ! This seems odd - if dest bogus, 'unlink' NPC?
+    else move n to dest;        
+    if (n in location)
+        print "^", (The) n, " walks in.^";
+];
+
+Object White_Dragon "White Dragon" Dragon_Cave
+   with name "dragon" "white" "giant",
+        describe [;
+           print "There is a gigantic white dragon here";
+           if (self has general)
+              " sleeping peacefully.";
+           "!";
+        ],
+        description "A giant white dragon, the size of a small house.",
+        time_left 0,
+        time_out [;
+           give self ~general;
+           if (location == Dragon_Cave) {
+              deadflag = 1;
+              "^The dragon suddenly snorts and wakes! It sees you \
+and attacks! In moments, you are no more...";
+           }
+           else {
+              remove self;
+              give stone_marker ~general;
+              move stone_marker_top to snowy_intersection2;  
+              "^You hear a roar from the east! From out of the \
+sky, a giant white dragon descends! It draws near, spots you, \
+and bellows in rage! You shrink back, and pray for a quick but \
+painless end.^^There is a loud crack! The dragon, in trying to \
+land, almost impales itself on the obelisk marker! Part of the \
+marker breaks off, and the dragon flies off, whimpering in pain!"; 
+           }          
+        ],
+        life [;
+        Attack, ThrowAt, WakeOther:
+deadflag = 1;
+"You disturb the sleeping dragon, who promptly makes you wish \
+you hadn't.";
+        default: "Best not to disturb the dragon, I'd guess.";
+        ],
+  has animate;
+
+Object captain "sea captain" On_Boat
+   with name "captain",
+        description "A rough-looking navy captain.",
+        number 0,
+        each_turn [;
+           if (self hasnt general) {
+              if (captain.number == 0) {
+                 captain.number = 1;
+                 "^You suddenly realize that you are being \
+held fast by two navy sailors! The captain walks forward and \
+points his cutlass near your ear.^^\
+~What we have here, lads, is a stowaway!~ Some sailor cries out \
+~Overboard with the stowaway!~ The captain smiles. \
+~Now, we was planning on feeding you to the groupers, \
+but we could use a scullion in the hold. One things for sure, \
+ye ain't finding passage on this ship if ye ain't aligned with \
+the Antharian Navy cause!~ Some sailor cries out \
+(unnecessarily) ~The Antharian Navy cause!~. ~So, tell us lad, \
+are ye with us? If ye are true, you'll tell me the Antharian \
+Navy patron saint! So speak quickly, lad, if ye wish to stay \
+dry!~";
+              }
+              else "^~Speak up fellow! We havn't got all day!~";
+           } 
+        ],
+        time_left 0,
+        time_out [;
+           deadflag = 1;
+           "The captain sighs. ~Into the water with ye, then,~ \
+he says, and the two sailors push you roughly overboard. \
+You land in the sea with a splash, and struggle to stay afloat. \
+The ship sails off, but oddly, moments later, it seems to \
+stall and start to sink! Before you get a chance to reflect on \
+this, a large grouper swallows you whole.";
+        ], 
+        life [;
+           if (self has general)
+              "The captain's a bit too busy trying to save \
+a sinking ship.";
+           Answer:
+             if (noun=='minirva') {
+                give self general;
+                StopTimer(self);
+                StartTimer(militia,2);
+                "~Aye, that's right. Escort the new scullion \
+down to the hold where --~^^\
+The captain's orders are cut short by a sudden grinding noise, \
+and the boat rocks violently! ~Reef, captain!~ you hear someone \
+cry. ~Blast!~ the captain says, ~quickly men, we've got to --~ \
+But it's too late. The boat starts to tip and sway, and \
+the two sailors release you and hastily try to help raise the \
+rigging!";
+             }
+             else {
+                if (noun=='duncanthrax') {
+                  deadflag = 1;
+                  "The sailors suddenly pale at the mention of \
+Lord Duncanthrax. ~A traitor in our midst, eh?~ the captain \
+shouts and beheads you with one stroke.";
+                }
+                if (noun=='ulysses' or 'odysseus')
+                   "~Nay lad, me thinks that \
+was a sailor.~";                   
+                else "~Nay lad, that doesn't sound right.~";
+             }
+           Attack, ThrowAt, Kiss, Show, Give:
+             "Given that you are in the grips of several \
+strong navy sailors, this is impossible.";
+        ],
+   has animate;
+
+! ***** THE EVIL ELEMENTALS
+Object black_elemental "black sphere" ENDGAME_ROOM
+   with name "anabais" "black" "sphere" "earth",
+        description "A black sphere of energy.",
+        life [;
+           ThrowAt:
+              if (noun==brown_sphere) {
+                 remove self; remove brown_sphere;
+                 ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1;
+                 if (ENDGAME_ROOM.number == 4) {
+                    GameWinner(); rtrue; }
+                 "The black sphere howls in rage and is no more!";
+              }
+           Give:
+              if (noun==TRUEROD) {
+                 remove TRUEROD;
+                 print "You feel a strange foreboding feeling as \
+the black sphere seems to engulf the rod, then you! Your \
+surroundings change once again!^";
+                 deadflag = 1;
+                 PlayerTo(badend2);
+                 rtrue;
+              }
+           default: "The black sphere is unresponsive.";
+        ], 
+   has animate; 
+
+Object smoke_elemental "smoke-colored sphere" ENDGAME_ROOM
+   with name "smoke" "sphere" "fire", ! TODO new name...
+        description "A smoke-filled sphere of energy.",
+        life [;
+           ThrowAt:
+              if (noun==red_sphere) {
+                 remove self; remove red_sphere;
+                 ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1;
+                 if (ENDGAME_ROOM.number == 4) {
+                    GameWinner(); rtrue; }
+                 "The smoke-filled sphere howls in rage and is no more!";
+              }
+           Give:
+              if (noun==TRUEROD) {
+                 remove TRUEROD;
+                 print "You feel a strange foreboding feeling as \
+the smoke-filled sphere seems to engulf the rod, then you! Your \
+surroundings change once again!^";
+                 deadflag = 1;
+                 PlayerTo(badend1);
+                 rtrue;
+              }
+           default: "The smoke-filled sphere is unresponsive.";
+        ], 
+   has animate; 
+
+Object gray_elemental "gray sphere" ENDGAME_ROOM
+   with name "gray" "sphere" "water", ! TODO new name
+        description "A gray sphere of energy.",
+        life [;
+           ThrowAt:
+              if (noun==green_sphere) {
+                 remove self; remove green_sphere;
+                 ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1;
+                 if (ENDGAME_ROOM.number == 4) {
+                    GameWinner(); rtrue; }
+                 "The gray sphere howls in rage and is no more!";
+              }
+           Give:
+              if (noun==TRUEROD) {
+                 remove TRUEROD;
+                 print "You feel a strange foreboding feeling as \
+the gray sphere seems to engulf the rod, then you! Your \
+surroundings change once again!^";
+                 PlayerTo(FUBLIO_Cave);  
+                 StartTimer(mad_hermit,3);
+                 rtrue;
+              }
+           default: "The gray sphere is unresponsive.";
+        ], 
+   has animate; 
+
+Object white_elemental "white sphere" ENDGAME_ROOM
+   with name  "white" "sphere" "air",  ! TODO new name
+        description "A white sphere of energy.",
+        life [;
+           ThrowAt:
+              if (noun==silver_sphere) {
+                 remove self; remove silver_sphere;
+                 ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1;
+                 if (ENDGAME_ROOM.number == 4) {
+                    GameWinner(); rtrue; }
+                 "The white sphere howls in rage and is no more!";
+              }
+           Give:
+              if (noun==TRUEROD) {
+                 remove TRUEROD;
+                 print "You feel a strange foreboding feeling as \
+the white sphere seems to engulf the rod, then you! Your \
+surroundings change once again!^";
+                 PlayerTo(TROPHY_SECRET);  
+                 rtrue;
+              }
+           default: "The white sphere is unresponsive.";
+        ], 
+   has animate; 
+
+
+! ******************
+! scrolls/spells 
+! ******************
+
+Object fancy_scroll "fancy scroll" 
+  class scroll_class,
+  with name "fancy",
+;
+
+Object wigro_spell "turn undead" fancy_scroll
+   class spell_class,
+   with name "wigro",
+   magic [;
+      "You speak the chant. Nothing seems to happen.";
+   ],
+;
+
+Object briefcase "briefcase" Subway_Tunnel
+   with name "briefcase" "case",
+        description "A somewhat battered brown-leather briefcase.",
+        capacity 5,
+        ! weight 20, 
+        size 15,
+   has container openable;
+
+Object red_scroll "red scroll" briefcase
+  class scroll_class,
+  with name "red",
+;
+
+Object luncho_spell "send object to lower plane" red_scroll
+  class spell_class,
+  with name "luncho",
+       magic [;
+          if (second == 0)
+"You see a brief flash of smoke, but nothing happens.";
+          if (second has animate)
+             "You feel a slight rumbling beneath your feet, but nothing else \
+happens.";
+          else {
+             if ((second hasnt static) && (second hasnt scenery)) {
+                if (second has clothing) give second ~worn;
+                if (in_atrii == 1) {
+                   move second to MON_Chapel2;
+                }
+                else
+                move second to Hades_5;
+                print "There is a sudden puff of smoke, and "; DefArt(second); 
+                " suddenly vanishes!";
+             }
+             "Your chant goes unanswered.";
+          }
+      ],
+;
+
+! ******************
+! special obs
+! ******************
+
+Object Atrii_gate "strange contraption" GUE_Labs_SECRET
+   with name "contraption" "plate" "disc" "strange",
+        description "It looks like a large, slightly convex round disc \
+        made of some silvery material.",
+        before [;
+           Enter:
+              print "As you step onto the silvery disc, you feel a \
+              strange jolt run through your body. A bright white \
+              flash blinds you momentarily!^^You blink, trying to \
+              register your surroundings.^";
+              in_atrii = 1;
+              PlayerTo(ATRII_1);
+              return 2;
+           Receive:
+              move noun to ATRII_1;
+              CDefArt(noun); " suddenly disappears in a bright \
+              flash of light as you place it on the silver disc!";              
+           Push, Pull, Touch, Take:
+              "As you reach for the strange contraption, you notice \
+              white sparks of something arc from the silver surface \
+              to your fingers! You hastily draw back.";              
+        ],
+   has static supporter enterable;
+
+! *** the true rod pieces, and the golden rod (after joined)
+Object silver_rod_piece "silver rod piece" Mystical_Cave
+   class rod_class,
+   with name "silver",
+        description "A strange short section of rod colored \
+silver.",
+        before [;
+           Join:
+              if (location ~= Mystical_Cave) {
+              if (second == TRUEROD) 
+                 <<Join TRUEROD self>>;
+              if ((second == brown_rod_piece) ||
+                 (second == red_rod_piece) ||
+                 (second == green_rod_piece)) {
+                 if (TRUEROD.number == 0) {
+                    TRUEROD.number = 1;
+                    move TRUEROD to parent(self);
+                    remove self;  remove second;
+                    "There is a dazzling golden light as \
+you join the two rod pieces! What remains is a new, strange \
+rod piece!"; 
+                 }
+                 else "There is a dazzling burst of \
+golden light. However, the pieces will not join, and seem \
+to be seeking out something else...";
+              }
+              }
+              else "Some strange purple flash of force \
+blocks your efforts.";
+        ],
+;
+Object red_rod_piece "red rod piece" Mystical_Cave
+   class rod_class,
+   with name "red",
+        description "A strange short section of rod colored \
+red.",
+        before [;
+           Join:
+              if (location ~= Mystical_Cave) {
+              if (second == TRUEROD) 
+                 <<Join TRUEROD self>>;
+              if ((second == silver_rod_piece) ||
+                 (second == brown_rod_piece) ||
+                 (second == green_rod_piece)) {
+                 if (TRUEROD.number == 0) {
+                    TRUEROD.number = 1;
+                    move TRUEROD to parent(self);
+                    remove self;  remove second;
+                    "There is a dazzling golden light as \
+you join the two rod pieces! What remains is a new, strange \
+rod piece!"; 
+                 }
+                 else "There is a dazzling burst of \
+golden light. However, the pieces will not join, and seem \
+to be seeking out something else...";
+              }
+              }
+              else "Some strange purple flash of force \
+blocks your efforts.";
+        ],
+;
+Object green_rod_piece "green rod piece" Mystical_Cave
+   class rod_class,
+   with name "green",
+        description "A strange short section of rod colored \
+green.",
+        before [;
+           Join:
+              if (location ~= Mystical_Cave) {
+              if (second == TRUEROD) 
+                 <<Join TRUEROD self>>;
+              if ((second == silver_rod_piece) ||
+                 (second == red_rod_piece) ||
+                 (second == brown_rod_piece)) {
+                 if (TRUEROD.number == 0) {
+                    TRUEROD.number = 1;
+                    move TRUEROD to parent(self);
+                    remove self;  remove second;
+                    "There is a dazzling golden light as \
+you join the two rod pieces! What remains is a new, strange \
+rod piece!"; 
+                 }
+                 else "There is a dazzling burst of \
+golden light. However, the pieces will not join, and seem \
+to be seeking out something else...";
+              }
+              }
+              else "Some strange purple flash of force \
+blocks your efforts.";
+        ],
+;
+Object brown_rod_piece "brown rod piece" Mystical_Cave
+   class rod_class,
+   with name "brown",
+        description "A strange short section of rod colored \
+brown.",
+        before [;
+           Join:
+              if (location ~= Mystical_Cave) {
+              if (second == TRUEROD) 
+                 <<Join TRUEROD self>>;
+              if ((second == silver_rod_piece) ||
+                 (second == red_rod_piece) ||
+                 (second == green_rod_piece)) {
+                 if (TRUEROD.number == 0) {
+                    TRUEROD.number = 1;
+                    move TRUEROD to parent(self);
+                    remove self;  remove second;
+                    "There is a dazzling golden light as \
+you join the two rod pieces! What remains is a new, strange \
+rod piece!"; 
+                 }
+                 else "There is a dazzling burst of \
+golden light. However, the pieces will not join, and seem \
+to be seeking out something else...";
+              }
+              }
+              else "Some strange purple flash of force \
+blocks your efforts.";
+        ],
+;
+Object TRUEROD "golden rod" 
+   class rod_class,
+   with name "golden",
+        number 0,
+        description [;
+           print "A wondrous, shimmering golden rod";
+           if (TRUEROD.number < 3) 
+              " that seems slightly short.";
+           else "."; 
+        ],
+        before [;
+           Wave:
+             if (TRUEROD.number == 3) {
+                deadflag = 1;
+! TODO -- this is essentially another 'win', but not a good one
+                "You wave the rod, and feel a sudden blast of force! \
+The spheres howl in terror and \
+suddenly explode! The jolt of power from the rod sends you \
+hurtling through space, and you are lost in an endless \
+tumble through the void..."; 
+             }
+           Join:
+             if ((second == silver_rod_piece) ||
+                 (second == red_rod_piece) ||
+                 (second == green_rod_piece) ||
+                 (second == brown_rod_piece)) {
+                remove second;
+                TRUEROD.number = TRUEROD.number + 1;
+                print "You feel a strange surge of \
+mystic energy as you join the rod pieces. ", (The) second,  " \
+joins with the golden rod";
+                if (TRUEROD.number == 3) {
+                   Achieved(19);
+                   print "!^^Time and space seem to grind to \
+a halt.^^\
+Your surroundings and the very ground you stand on shatter like \
+planes of glass, revealing a strange, new dimension...^";
+                   spell_block = 1;
+                   PlayerTo(ENDGAME_ROOM);
+                   StartTimer(ENDGAME_timer,12);
+                   rtrue;
+                }
+                else "!";
+             } 
+        ],
+;
+
+! *** The results of winning the game ***
+[ GameWinner ;
+   Achieved(26);
+   print "The last sphere howls in rage and disappears!";
+   deadflag = 2;
+   " You scream in agony as the void that surrounds you \
+seems to implode! You feel yourself dissipating into the \
+surrounding nothingness. ~Is this my reward?~ you scream, \
+~Is this, then, the end?~^^\
+A white light makes you open your eyes.^^\
+You are lying on a beach. The Great Sea laps at your \
+tattered garments. Slowly, you rise to your knees.^^\
+The sun, like a bloated, radiant bird, is sinking below the \
+wave on the horizon. Another day is coming to an end.^^\
+A voice startles you. ~Tis a fine spot for watching \
+sunsets.~ You turn to see Morgan the Ranger, Frobar and \
+the Thief nearby. The Thief helps you to your feet, and Frobar \
+glances your way. ~I sensed a great upheaval in the \
+fabric of time and space not long ago. I gather you \
+have quite a story to tell,~ he says. ~We \
+probably can relate to much of what you have seen, \
+although your unwavering faith is something we \
+desire to understand.~ Morgan explains, ~Belief in the \
+face of the unbelievable is an enviable strength.~ \
+The Thief chuckles quietly. \
+~Perhaps you will join us at Delbins, where we will \
+partake in a belief of fine cuisine while you tell all?~ he says. \
+He notices your weary expression and \
+adds with surprising seriousness, ~Not that I \
+prepose to offer advice from one as myself, \
+but humbly, I admit, that many a time, a belief in myself \
+was often sufficient.~ He pauses. \
+~Gods or no, now, you make your own destiny.~";
+];