Rename game files to lowercase
[spiritwrak.git] / src / special.inf
1 ! *********************************************************************
2 ! SPECIAL.INF  -- Add-on for SPIRITWRAK
3 ! Contains: 'specials' that I wanted to keep separate from
4 ! the other 'city-based' .INF files (Atrii, NPC homes)
5 ! *********************************************************************
6
7 ! ----------------- (Frobar's home) -------------------------
8
9 Object FROBAR_Foyer "Entrance Foyer"
10    with description "You are in the Entrance Foyer of a \
11 small but tasteful home. The exit is to the southwest. \
12 The general area is tastefully done in maroon carpeting \
13 and brass fixtures. Another room lies to the north.",
14    name "maroon" "carpeting" "brass" "fixtures",
15    sw_to FROBAR_Ent,
16    out_to FROBAR_Ent,
17    n_to FROBAR_Parlor,
18    has light;
19    
20 Object FROBAR_Parlor "Parlor"
21    with description "You are in a very decorative parlor. \
22 Various furnishings of high quality are arranged around \
23 an enormous rug with intricate golden symbols in the weave \
24 design. Open doorways lead south, north, east and west.",
25    name "rug" "doorways" "furnishings" "symbols",
26    s_to FROBAR_Foyer,
27    n_to FROBAR_Bedroom,
28    e_to FROBAR_Study,
29    w_to FROBAR_Lounge,
30    has light;
31
32 Object frobar_plant "large potted plant" FROBAR_Parlor
33    with name "plant" "large" "potted",
34    initial "A large potted plant sits in one corner.",
35    description "A well-tended house-plant.",
36    before [;
37       Cast:
38          if (the_spell_was == throck_spell) {
39             "The plant seems even healthier now.";   
40 !            if (Frobar in FROBAR_Bedroom) 
41 ! (couldn't think of a proper reaction...:)
42          }
43    ],        
44    has static;
45                     
46 Object FROBAR_Lounge "Lounge"
47    with description "A large room here apparently serves as a lounge \
48 for entertaining. The walls and furniture all have interesting \
49 design work that gives an impression of dignified age. A doorway \
50 heads east.",
51    name "furniture" "doorway",
52    e_to FROBAR_Parlor,
53    has light;
54    
55 Object FROBAR_Study "Study"
56    with description "This is a study room with fancy wood paneling and \
57 plush carpeting. There is an exit to the west.",
58    name "wood" "paneling" "carpeting",
59    w_to FROBAR_Parlor,
60    has light;
61
62 Nearby FROBAR_shelves "large bookshelf"
63    with name "shelves" "shelf" "bookshelf",
64         initial "A large bookshelf takes up most of the north wall.",
65         description "It's filled with odds and ends, mostly uninteresting.",
66         capacity 30,
67    has static supporter;
68
69 Object FROBAR_Journal "plain journal" FROBAR_shelves
70    with name "journal" "plain",
71    ! weight 15, 
72    size 15,
73    description "This is a short journal of notes that \
74 Frobar was keeping. The contents are quite dull, mostly \
75 consisting of entries like ~Remember to water plant~ and \
76 so forth. In fact, the only non-trivial entry follows:^^\
77 ~Perhaps today I will go visit Barsap's latest creation. \
78 Then again, maybe I won't. This so-called 'Gambit' of his \
79 is supposed to be some silly diversion where people can \
80 hop around floating platforms trying to reach the southeast \
81 corner \
82 platform on the bottom level, just so they can get \
83 teleported back to the top, and start all over again! \
84 Can this be a monetarily beneficial thing? I doubt it.~";
85
86 ! (twisted -- four ancient ones)
87 Object p5 "twisted parchment" FROBAR_shelves
88    class parchment_class,
89    with name "twisted",
90 description "~...understand. I, like many of the Order, \
91 have understood that the greatest Saints of our Order were \
92 the Three, those Three that we know as the Ancient Ones. \
93 Why then, do I find in ancient cairns, in hidden temples, \
94 and in versions of the Scriptures found in unsettled lands, \
95 that _four_ beings that called themselves the Ancient Ones \
96 did do battle with evil and were defeated? This surely is \
97 not to be believed, but I...~";
98
99 Object FROBAR_Desk "large wood desk" FROBAR_Study
100    with name "desk",
101         description "A massive wood desk carved from a single block of wood.",
102         capacity 20,
103    has static supporter;
104    
105 Object FROBAR_Bedroom "Bedroom"
106    with description "A nice cozy bedroom. The exit is south.",
107    s_to FROBAR_Parlor,
108    has light;
109    
110 Object FROBAR_bed "large bed" FROBAR_Bedroom
111    with name "bed",
112         description "A large comfortable-looking bed.",
113         before [;
114            LookUnder: "Sorry, no monsters here.";
115         ],
116    has static enterable supporter;
117    
118 !Object FROBAR_Painting "large painting" FROBAR_Bedroom
119 !   with name "painting",
120 !        initial "There is a large painting hanging on the wall.",
121 !        description [;
122 !        if (self hasnt general)
123 !        "It appears to be an oil painting of a \
124 !        scroll on a table.  A small note on the frame says, \
125 !        ~Still-life with Scroll, -FF, 791~";
126 !        else
127 !        "It appears to be an oil painting of a \
128 !        table.  A small note on the frame says, \
129 !        ~Still-life, -FF, 791~";
130 !        ],
131 !        before [;
132 !           Touch, Rub, Push:
133 !              if (self hasnt general) {
134 !                 give self general;
135 !                 move painted_scroll to player;
136 !                 Achieved(23);
137 !                 print "As you touch the painting, your hands \
138 !run across the scroll, and the oil takes on a three-dimensional \
139 !quality!  You ignore the strange sensations as you reach \
140 !into the painting, and withdraw the scroll";
141 !                 if (Frobar in FROBAR_Bedroom) 
142 !                    "!  Frobar watches the events over your \
143 !shoulder, and seems puzzled.  ~Now, why didn't I ever think to try \
144 !that,~ he muses.";
145 !                 else "!";
146 !              }
147 !              else 
148 !                 "The painting seems to be nothing more than \
149 !an oil painting now.";
150 !        ],
151 !   has static;
152
153 ! ----------------- (Thief's home) -------------------------
154    
155 Object THIEF_Bottom_of_staircase "Wondrous Stairway"
156    with description "An enormous spiral staircase seems to wind miles \
157 above your head in this curious column-like chamber. Strange \
158 points of light brighten the chamber from above. \
159 To the west is a small exit.",
160    name "points" "light" "staircase" "stairway" "stairs",
161 ! TODO -- fix this weirdness...
162    u_to THIEF_Ent,
163    w_to "You can't go that way.",  ! but later...
164    before [;
165       Go: 
166          if (noun == u_obj)
167             print "^You begin the long trek upwards. Strangely, \
168             the stair seems to twist and move as you step on it, \
169             turning like a corkscrew, until you are \
170             graciously deposited at the top, far above your \
171             previous location.^";
172    ],
173    has light;
174          
175    
176 Object THIEF_Ent "Fancy Hall"
177    with description "This must be an apartment or penthouse in the \
178 skyscraper. You are in a very high hall, with black slate stone \
179 walls that seem to reflect shadows everywhere. There is a room \
180 to the north. The southern edge of this room drops off into the \
181 darkness, followed by a long spiral staircase. The ceiling overhead \
182 seems to have tiny points of light like a night sky.",
183      name "slate" "shadows" "staircase" "points" "light",
184      d_to THIEF_Bottom_of_staircase,
185      n_to THIEF_Foyer,
186    has light;
187
188 Object THIEF_Foyer "Magnificent Foyer"
189    with description "This is an exceptionally grand entrance foyer, \
190 with sweeping arched ceilings and sparkling chandeliers. The \
191 room is dimly lit. Open hallways lead south and west.",
192    name "chandeliers",
193    s_to THIEF_Ent,
194    w_to THIEF_Lounge,
195    has light;
196    
197 Object THIEF_Lounge "Fancy Lounge"
198    with description "A tastefully overdone lounge with tapestries \
199 and gold enamel finished walls. The room is dimly lit, although \
200 you see no windows or other sources of light. Open hallways lead \
201 east and west.",
202    name "tapestries" "enamel",
203    e_to THIEF_Foyer,
204    w_to THIEF_Storeroom,
205    has light;
206
207 Object THIEF_Journal "short journal" THIEF_Lounge
208    with name "journal",
209    initial "There's an open journal sitting here.",
210    ! weight 15, 
211    size 15,
212    description "This appears to be a short collection of notes:^^\
213    ~TIPS ON CRACKING THE NEW FROBOZZCO 3-DIAL COMBO LOCKS: ^\
214    Remember, there's a slight flaw in the design. For every \
215    correct number in the correct dial, pressing the opening button \
216    with cause a small click. Dials with the correct number in the \
217    wrong dial place will cause a small thunk. The lock mechanism \
218    scans for correct numbers in correct places first, and then \
219    for correct numbers in the wrong place in the 'remaining dials'. \
220    Simple! But don't forget, closing the locks will automatically \
221    lock and reset the dials!^^\
222    NEW FLATHEAD PAINTING: ^\
223    I've completed making the copy of the new Leonardo Flathead painting, \
224    received courtesy of the Royal Museum. Glad to say my skills in \
225    art forgery are undiminished -- I can barely tell the difference \
226    between the two myself! I'll soon replace the original with the \
227    copy, and no one will be the wiser!~";
228          
229
230 Object THIEF_Storeroom "Workroom"
231    with description [;
232       print "A sight to inspire even the most avaricious, this \
233        storeroom is filled with all sorts of rare and precious treasures. \
234        A hallway leads east";
235       if (self hasnt general)
236          print ". You notice that the west wall appears to be made of \
237 solid granite";
238       ".";
239    ],
240    name "hallway",
241    e_to THIEF_Lounge,
242    before [;
243       Examine:
244          if ((noun == w_obj) && (self hasnt general))
245             "The west wall is a solid piece of granite, which \
246 seems very odd, considering the other walls are clearly made of \
247 slate.";
248       Cast:
249          if ((the_spell_was==ledak_spell) && (Painting_FAKE in self)) {
250             if (Painting_REAL in self)
251                print "One of the paintings";
252             else print "The painting";
253             remove Painting_FAKE;
254             " is surrounded by a yellow glow! It crumbles into \
255 dust!";
256          }
257    ],
258    has light;   
259    
260 Nearby THIEF_treasure "precious treasures"
261    with name "treasure" "jewels" "gemstones" "artifacts",
262         description "Piles of rare gemstones, precious jewelry, \
263         priceless artifacts, and other treasures line the walls \
264         here.",
265         before [;
266            Take:
267            "Fortunately, your high moral standing allows you \
268            the benefit of having no need for such materials of excess.";
269         ],
270    has scenery;
271
272 Object pasta "pile of fettucini carbonari"
273    with name "pile" "fettucini" "carbonari" "pasta",
274         description "A large pile of fettucini dripping in \
275 carbonari sauce.",
276         before [;
277            Eat:
278               if (self hasnt general) {
279                  give self general;
280                  "You manage to stuff yourself with pasta, \
281 but there's still quite a lot left."; 
282               }
283               else 
284                  "You've already had enough of this stuff \
285 to last a lifetime. Just the thought of eating more is enough to \
286 make you queasy.";
287         ],
288         size 16,        
289    has edible;
290
291 Object c50 "coin" class coin_class;
292    
293 Object Painting_FAKE "priceless painting" THIEF_Storeroom
294    with name "painting",
295         plural "priceless paintings",
296         short_name "priceless painting",
297         description "It's a beautiful oil painting of a dark stormy \
298 scene. On the horizon, you can see the edges of mountaintops. Near \
299 the top of the painting, two winged figures are carrying a lone \
300 individual towards a break in the clouds, where a bright white light \
301 seems to emanate.",
302         ! weight 25, 
303         size 25,
304         before [;
305         Drop:
306             if (location == Museum_north) { ! player returned fake painting to museum! 
307                remove self;
308                "A museum curator appears and takes the \
309 painting. With an expert eye, he looks closely at it. ~This is \
310 a fake! I warn you sir, art forgery is a dangerous game.~ He \
311 leaves, much disgusted.";              
312             }
313         Take:
314             if (Painting_REAL in parent(self))
315                "They both look so genuine! You can't decide!";
316         Cast:
317             if (the_spell_was == ledak_spell) {
318                remove self;
319                "One of the paintings is surrounded by a bright \
320 yellow glow, and disintegrates!";
321             }
322         Search:
323                if (Painting_REAL in parent(self))
324                   "Search which one? Goodness, you can't decide!";
325         ],        
326         ;
327                    
328
329 ! -------------ETHEREAL PLANE OF ATRII ------------
330
331 Object ATRII_1 "Ethereal Plane of Atrii"
332    with description "Standing on a featureless gray plane that \
333    stretches to the infinite horizon against a gray sky, you \
334    can only conclude one thing -- you're on the Ethereal Plane \
335    of Atrii. Well, at least it fits the description Brother \
336    Palemon gave you. It seems like you could go in any \
337    direction from here.",
338    cant_go "An invisible force blocks your way!",
339    name "plane" "horizon" "sky",
340    sw_to ATRII_2,
341    se_to ATRII_3,
342    has light;
343    
344 Object ATRII_2 "Ethereal Plane of Atrii"
345    with description "Flat, featureless gray is in every direction \
346    you look. Stranger still is the upright rectangular hole in the \
347    fabric of space that stands in the center of this area. \
348    Otherwise, you could wander this gray dimension in any direction, \
349    it seems.",
350    cant_go "An invisible force blocks your way!",
351    ne_to ATRII_1,
352    sw_to ATRII_4,
353    e_to ATRII_3,
354    s_to ATRII_6,
355    has light;
356    
357 Nearby ATRII_2_hole "rectangular hole"
358    with name "hole" "rectangle" "opening",
359         description "Surely you are in a place where the very laws of \
360         nature and the Gods work by different rules! Here stands a \
361         rectangular hole, seemingly torn out of the very space you \
362         stand in. You see some curious metal chamber through the \
363         opening, but there is nothing behind the opening.",
364         before [;
365            Enter:
366               print "^You step through and feel your stomach twist. \
367               You stumble past a set of open metal doors into...^";
368               in_atrii = 0;
369               PlayerTo(Skyscraper);
370               return 2;  ! allow, but print nothing...
371         ],
372    has scenery enterable;
373    
374 Object ATRII_3 "Ethereal Plane of Atrii"
375    with description "Flat, featureless gray is in every direction \
376    you look. Stranger still is the flat, glass-like square in the \
377    center of the 'floor' of this area. \
378    Otherwise, you could wander this gray dimension in any direction, \
379    it seems.",
380    cant_go "An invisible force blocks your way!",
381    nw_to ATRII_1,
382    w_to ATRII_2,
383    se_to ATRII_5,
384    s_to ATRII_7,
385    has light;
386    
387 Nearby ATRII_3_ice "square of ice"
388    with name "square" "ice" "glass-like",
389         description "It looks and feels like a perfect square of ice, \
390         flush with the featureless gray surface you stand on.",
391         before [;
392            Enter:
393  print "You step onto the square, and before you know it, your \
394 surroundings shift and start to fade! You feel a \
395 sudden chilling wind. The ice seems to lengthen and stretch. The \
396 gray plane slowly turns white and bumpy.^";
397               in_atrii = 0;
398               PlayerTo(Frozen_river2);
399               return 2;
400         ],
401    has scenery enterable;
402     
403 Object ATRII_4 "Ethereal Plane of Atrii"
404    with description "Flat, featureless gray is in every direction \
405 you look. Stranger still is the large black hole to the south. \
406 Otherwise, you could wander this gray dimension in any direction, \
407 it seems.",
408    cant_go "An invisible force blocks your way!",
409    ne_to ATRII_2,
410    se_to ATRII_6,
411    s_to [; <<Enter ATRII_4_hole>>; ],
412    has light;
413    
414 Nearby ATRII_4_hole "black hole"
415    with name "hole" "black",
416         description "It looks like a large hole, probably twice your \
417         height. It's completely black and featureless.",
418         before [;
419            Enter:
420              print "^You step into the black hole. You stumble \
421        forward, surrounded by blacker-than-night darkness.^";
422              in_atrii = 0;
423              PlayerTo(Subway_Tunnel);
424              return 2;
425         ],
426    has scenery enterable;
427    
428 ! (secret subway tunnel)
429 Object Subway_Tunnel "Dark Tunnel"
430    with description "You're in a large dark tunnel that seems \
431    to run north and south. To the south you see light. There \
432    seem to be two metal tracks running along the ground.",
433        s_to GURTH_GUSPlatform,
434        n_to "You walk north, and run into a invisible force!",
435        before [;
436           Go:
437              if (noun==s_obj) {
438                 Achieved(25);
439                 print "^You step out into an underground chamber. \
440     A burly uniformed figure sees you exit the tunnel and yells, \
441     ~Hey, no playing in the tunnels, pal!~^";
442              }
443        ],
444        each_turn [ i ;
445           i = random(40);
446           if (i > 35)
447              "^You hear a rumbling noise echoed from somewhere, and \
448              the entire tunnel seems to shake! Then, all is quiet.";
449           if (i == 17 or 18) {
450              deadflag = 1;
451              "^Suddenly, without warning, a huge train car appears \
452              heading south! It plows straight into you!";
453           }
454           if (i==6 or 7) 
455              "^Suddenly, a huge train car appears heading north! \
456              You barely avoid getting pulverized! Strangely, \
457              you watch as the train continues north, and \
458              seems disappear into blackness nearby. It's as \
459              though the train was simply removed from the tunnel \
460              somehow.";
461        ],
462 ;
463
464 Nearby ST_tracks "tracks"
465    with name "tracks" "tracks" "metal",
466         description "Two long metal tracks, running north and south. \
467         There's something oddly familiar about them.",
468    has scenery;
469                
470 Object ATRII_5 "Ethereal Plane of Atrii"
471    with description "Flat, featureless gray is in every direction \
472    you look. It seems like you could go in any \
473    direction from here.",
474    cant_go "An invisible force blocks your way!",
475    nw_to ATRII_3,
476    sw_to ATRII_7
477    has light;
478    
479 Object p9 "ripped parchment" ATRII_5
480    class parchment_class,
481    with name "ripped",
482 description "~...now know that the Rod we believe is \
483 the Rod of the Ancients, sequestered in our Monastery, is \
484 an artifact of evil! Imprisoned inside, \
485 true to the scriptures (at least this much is, what \
486 isn't, I can nowadays say is much) we know, is Anabais. \
487 What is worse, is that this very Rod is an artifact of \
488 evil power created by Anabais, in the image of the True \
489 Rod of the Ancients, which he planned to use to aid \
490 him in his evil gains! \
491 Were that evil one free again, and had about him both \
492 his brothers and his Rod of Evil, we would witness a \
493 reckoning \
494 greater than Quendor has ever known! I take relief in \
495 the knowledge that he will never be freed, and he will \
496 never regain his implement of evil; only an innocent \
497 being can break the false rod and \
498 free him from his prison, and subsequently, \
499 the false rod cannot be regained by Anabais through his \
500 own will, or another evil being. \
501 In fact, only a being of good again can gather \
502 the resulting pieces, and only through this being \
503 can Anabais regain his evil artifact, for...~";
504
505
506 Object ATRII_6 "Ethereal Plane of Atrii"
507    with description "Flat, featureless gray is in every direction \
508    you look. It seems like you could go in any \
509    direction from here.",
510    cant_go "An invisible force blocks your way!",
511    nw_to ATRII_4,
512    e_to ATRII_7,
513    n_to ATRII_2,
514    se_to ATRII_8,
515    has light;
516    
517 Object ATRII_7 "Ethereal Plane of Atrii"
518    with description "Flat, featureless gray is in every direction \
519    you look. Stranger still is the odd-shaped depression in the gray \
520    plane here. \
521    Otherwise, you could wander this gray dimension in any direction, \
522    it seems.",
523    cant_go "An invisible force blocks your way!",
524    ne_to ATRII_5,
525    w_to ATRII_6,
526    sw_to ATRII_8,
527    n_to ATRII_3,
528    has light;
529
530 Nearby ATRII_7_depression "depression"
531    with name "depression" "cavity",
532         description "It's a large elongated depression in the gray 'floor'. \
533         The cavity has a flat bottom, and somewhat cigar-like shape.",
534         before [;
535            Enter:
536               print "^You step into the depression. Your very \
537               surroundings start to fade, replaced by sunlight that \
538               makes you squint! The gray plane undulates and \
539               buckles and turns into a great body of water \
540               before your very eyes.^";
541               in_atrii = 0;
542               PlayerTo(sailboat); ! useful if the player 'lost' the boat at sea.
543               return 2;
544         ],
545    has scenery enterable;
546    
547 Object ATRII_8 "Ethereal Plane of Atrii"
548    with description "Flat, featureless gray is in every direction \
549    you look. Directly overhead, you notice odd streaks of \
550    light. From here, you could wander this gray dimension in any direction, \
551    it seems.",
552    name "streaks",
553    cant_go "An invisible force blocks your way!",
554    nw_to ATRII_6,
555    ne_to ATRII_7,
556    has light;
557  
558 ! ----------- Special Implementor's Residence -----------
559
560 Object Imp_Liv "Strange Room"
561    with description [;
562       print "You ";
563       if (player in Imp_Curtains)
564          "can't see much behind these curtains.";
565       else "feel a great sense of dread! Surely, given the way \
566 you got here, this must be the domicile of a dreaded Implementor! \
567 The entire place feels strange and \
568 alien and, well, ~modern~. There's some sort of kitchen to the \
569 east. Long curtains cover what must be a window to the south.";
570         ],
571         number 1,
572         e_to Imp_Kitchen,
573         w_to Imp_door,
574         s_to [; <<Enter Imp_Curtains>>; ],
575         each_turn [ ;
576         if (Imp in Imp_Bedroom) {
577            if (Imp_Liv.number == 3) {
578               StartDaemon(Imp); 
579               Imp_Liv.number = 4;
580            }
581            else "^You hear some faint noises to the west.";
582         }
583         ! create some noises if player in curtains
584         if (player in Imp_Curtains) {
585            if (Imp in Imp_Liv)
586               "^You hear some faint noises nearby.";
587            if (Imp in Imp_Kitchen)
588               "^You hear some faint noises to the east.";
589         }
590         ],
591         time_left 0,
592         time_out [;
593             ! if player hasn't 'listened' twice to start Imp, 
594             ! start him anyway (otherwise, in truth, player 
595             ! would be permanently stuck in (my) apartment.
596             if (Imp_Liv.number < 4) {
597               StartDaemon(Imp);
598               Imp_Liv.number = 4;
599             }
600         ], 
601         before [;
602            ! if player actually listens, better noises...
603            Listen:
604         if (Imp in Imp_Bedroom) {
605            if (Imp hasnt general) { ! i.e. -- awake
606               if (Imp_Liv.number == 1) {
607                  Imp_Liv.number = 2;
608                  "It sounds like someone is talking to himself to \
609 the west. You hear: ~Now, wait just a second here, the player object \
610 is gone! How did that happen?~";
611               }
612               if (Imp_Liv.number == 2) {
613                  Imp_Liv.number = 3;
614                  "It sounds like someone is talking to himself to \
615 the west. You hear: ~That can't be right. I must be getting tired. \
616 Think I'll make myself a nice hot cup of coffee.~";
617 ! on next turn via Imp_Liv.each_turn, Imp daemon will be started...
618               }
619               ! otherwise, Imp has already made his rounds and
620               ! returned to bedroom, _not_ falling asleep
621               "You hear someone whistling a merry tune to the west."; 
622            }
623            else
624               "You hear someone snoring loudly to the west.";
625         }
626         if (Imp in Imp_Liv) {
627            if (Imp.number == 1)
628               "You hear someone walking nearby. The footsteps \
629 soon fade to the east.";
630            if (Imp.number == 4)
631               "You hear someone walking nearby. The footsteps \
632 soon fade to the west.";
633         }
634         if (Imp in Imp_Kitchen) {
635            ! This assumes the daemon will run before the player turn.
636            if (Imp.number == 2) {
637            switch (Imp.weight) {
638            118: print "You hear an irritated voice say, \ 
639 ~What happened to my coffee maker?~ Slightly softer, you \ 
640 hear ~Well, I guess I'll have that iced tea.~";
641            119, 122: print "You hear a voice to the east say, \ 
642 ~Looks like I've got coffee, thank goodness.~";
643            121: print "You hear a voice to the east say, \ 
644 ~Great, I'm all out of coffee. Good thing I still have some \ 
645 iced tea.~";
646            }  
647            " Shortly after this, you hear sounds of someone to \
648 the east starting some kitchen activity.";
649            }
650            else "You hear some brief busy noises from the west, \
651 followed by what sounds like someone drinking something. Shortly \
652 thereafter, you hear the sounds of someone walking into the area \
653 from the east.";
654         }
655         ],
656    has light;       
657
658 Nearby Imp_Curtains "set of curtains"
659    with name "curtain" "curtains",
660         description "Some heavy-cloth curtains along the south wall.",
661         before [;
662            Open: "You draw back the curtains and see a sight that \
663 beggars the mind! Through the windows, the night sky falls across \
664 some unknown landscape, dotted with strange bright points of light. \
665 Tall buildings seem to be everywhere. Whatever world you've stumbled \
666 onto, it certainly is not your own! You hastily close \
667 the curtains.";
668            Enter: print "In an attempt to hide, you part the curtains. ";
669         ],
670    has static enterable;
671
672 Object Imp_Kitchen "Strange Kitchen"
673    with description "A room that could be a kitchen, \
674 if it didn't seem completely strange. Harsh bright lights seem to \
675 be coming from some unknown source. Strange-looking white countertops and \
676 cabinets fill the area, along with a curious white closet-like object. \
677 A room lies to the west.",
678    name "cabinet" "cabinets" "closet" "refrigerator" "countertops",
679         w_to Imp_Liv,
680    has light;
681    
682 Object Coffee_maker "curious machine" Imp_Kitchen
683    with name "machine" "curious",
684         description "A white plastic device that seems to \
685 encase a glass pitcher or kettle of some sort. Most odd.",
686         ! weight 15, 
687         size 15,
688 ;
689
690 Object regular_coffee_can "can of regular coffee" Imp_Kitchen
691    with name "can" "coffee" "regular",
692         description [;
693                     "The can reads: ~Brand-X coffee crystals~^^\
694                     ~Rich, mountain-grown flavor.~";
695         ],
696         before [;
697            Open:
698             "You'd need a good can-opener for that.";
699         ],
700         ! weight 15, 
701         size 15,
702 ;
703
704
705 Object Imp_Bedroom "Strange Bedroom"
706    with description "A very curious small bedroom. \
707    A white desk sits here amongst other odd furnishings.",
708    name "furnishings" "bed" "chair",
709    e_to Imp_door,
710    has light;
711    
712 !Nearby Imp_Bed "furnishings"   
713 !   with name "furnishings" "bed" "chair",
714 !        description "Some weird bedroom furniture.",
715 !   has scenery;
716
717 Object Imp_Desk "desk" Imp_Bedroom
718    with name "desk",
719         description "A white desk, with a strange, modern look.",
720         capacity 6,
721    has scenery supporter;
722
723 Object Imp_Computer "strange machine" Imp_Desk
724    with name "machine" "computer",
725         description 
726         [ ;
727            print "It's a strange metal box. On top, perhaps connected in some \
728 way, is another metal box with a glass plate on the front. Strange wires \
729 seem to be attached to the boxes somehow. \
730 In front of the boxes is an odd plastic \
731 flat object with rows and rows of plastic buttons labeled every letter in \
732 the alphabet";
733            if (self hasnt general) {
734               give self general;
735               print ".^^Looking closer, you notice curious glowing \
736 letters on the glass plate. You read the letters, and \
737 feel drawn to respond...^^\
738 SPIRITWRAK DEVELOPMENT SYSTEM:^\
739 (AUTOMATIC OBJECT GARBAGE-COLLECTION)^\
740 REMOVE OBJECT IMPENETRABLE_STEEL_WALL? (Y/N) ";
741 if (YesOrNo() == 0)  "You press a button labeled ~N~. The strange box \
742 emits a tiny beep, and the glass plate is covered with fantastic colorful \
743 designs.";
744 else {
745         ! set-up the secret room 
746         remove steel_wall;
747         give cave_intersection general;
748         Achieved(18);
749 "You press a button labeled ~Y~. The strange box \
750 emits a tiny beep, and the glass plate is covered with fantastic colorful \
751 designs.";
752      }           
753            }
754            else ". The glass plate currently has strange glowing colorful \
755 patterns displayed on it.";                                 
756         ],        
757    has static;
758    
759 [ ImpSendBack ;
760     print "~I'm afraid you'll have to go back.~ The Implementor \
761 snaps his fingers, and suddenly, you're back in...^";    
762     spell_block = 0;
763     StopDaemon(Imp);
764     StopTimer(Imp_Liv);
765     PlayerTo(ATRII_8);
766 ];   
767    
768 Nearby Imp_door "door"
769    with name "door",
770         when_closed [;
771              if (self in Imp_Liv) {
772                 if (player notin Imp_Curtains)
773                    "There's a closed door to the west.";
774                 else rtrue;
775              }
776              else "There's a closed door to the east.";
777         ],
778         when_open [;
779              if (self in Imp_Liv) {
780                 if (player notin Imp_Curtains)
781                    "There's an open door to the west.";
782                 else rtrue;
783              }
784              else "There's an open door to the east.";
785         ],
786         description "A plain-looking door. A note \
787 attached to it says ~DO NOT DISTURB, IMPLEMENTOR AT WORK~.",
788         door_dir [;
789              if (self in Imp_Liv) return w_to;
790              else return e_to;
791         ], 
792         door_to [;
793              if (self in Imp_Liv) return Imp_Bedroom;
794              else return Imp_Liv;
795         ],
796         found_in Imp_Liv Imp_Bedroom,
797         before [;
798         Open:
799            if ((Imp in Imp_Bedroom) && (Imp hasnt general)) {
800               print "You open the door, revealing a small room with \
801 what must be an Implementor sitting behind a desk. The Implementor looks \
802 up, startled. ~You're here?~ he says, observantly. ";
803               ImpSendBack();     
804               return 1;                    
805            }             
806         ],
807     has static door openable;
808
809    
810 ! *************** And, for my final trick, the endgame **************
811
812 Object Mystical_Cave "Mystical Cave"
813    with description "You've entered a wondrous natural cave, lit \
814 everywhere by reflected light from some sort of purple crystalline substance \
815 in the walls. A tunnel exits to the northwest.",
816    name "reflected" "crystal" "crystalline" "substance",
817    number 0,
818    nw_to [;
819       if (Mystical_Cave.number ~= 4)
820          "The purple light in the chamber seems to pulse with energy, \
821 and find your way blocked by an invisible force!";
822       else {
823          spell_block = 0;
824          ! fill with things, if necc.
825          print "As you leave, a sudden tremor shakes the \
826 cave! You just narrowly avoid a sudden cave-in behind you!^";
827          give cave_intersection ~general;
828          return cave_intersection;      
829       }
830    ],
831    has light;         
832    
833 Nearby purple_sphere "purple sphere"
834    with name "sphere" "purple",
835         initial "There's a purple crystal sphere partially embedded \
836 in the rock floor here.",
837         description "A large purple sphere that seems to pulse with \
838 strange energy.",
839         before [;
840           Push, Touch, Rub:
841             ! various endgame trickery...
842             if (silver_rod_piece in player) {
843                while (child(player)~=0) {
844                   give child(player) ~worn;
845                   move child(player) to Mystical_Cave;
846                }
847                move silver_rod_piece to player;
848                spell_block = 1;
849                print "The sphere pulses with angry energy! It seems to \
850 be fighting the silver rod piece you hold! With a sudden burst, you \
851 feel your mind reel and your very surroundings change!^";
852                give stone_marker general;
853 !               give snowy_intersection general ~visited;
854                give snowy_intersection general;
855                StartTimer(White_Dragon,3);
856                PlayerTo(Dragon_Cave);
857                rtrue;
858             }
859             if (green_rod_piece in player) {
860                while (child(player)~=0) {
861                   give child(player) ~worn;
862                   move child(player) to Mystical_Cave;
863                }
864                move green_rod_piece to player;
865                spell_block = 1;
866                print "The sphere pulses with angry energy! It seems to \
867 be fighting the green rod piece you hold! With a sudden burst, you \
868 feel your mind reel and your very surroundings change!^";
869                StartTimer(captain,3);
870                PlayerTo(On_Boat);
871                rtrue;
872             }
873             if (red_rod_piece in player) {
874                while (child(player)~=0) {
875                   give child(player) ~worn;
876                   move child(player) to Mystical_Cave;
877                }
878                move red_rod_piece to player;
879                spell_block = 1;
880                print "The sphere pulses with angry energy! It seems to \
881 be fighting the red rod piece you hold! With a sudden burst, you \
882 feel your mind reel and your very surroundings change!^";
883 !               give Stadium_entrance general ~visited;
884 !               remove stadium_sign;
885 !               remove stadium_statue;
886 !               move statue_base to Stadium_entrance;
887                StartTimer(statue_base,2);
888                PlayerTo(Stadium_entrance2);
889                rtrue;
890             }
891             if (brown_rod_piece in player) {
892                while (child(player)~=0) {
893                   give child(player) ~worn;
894                   move child(player) to Mystical_Cave;
895                }
896                move brown_rod_piece to player;
897                spell_block = 1;
898                print "The sphere pulses with angry energy! It seems to \
899 be fighting the brown rod piece you hold! With a sudden burst, you \
900 feel your mind reel and your very surroundings change!^";
901 !               give GURTH_House general ~visited;
902 !               move bad_brick to GURTH_House;
903                StartTimer(bad_brick,7);
904                PlayerTo(GURTH_House2);
905                rtrue;
906             }
907             ! default...
908             "A purple blast of force throws you back!";
909         ],
910    has static;                   
911
912 Object skeleton "skeleton" Mystical_Cave
913    with name "skeleton" "bones",
914         initial "Lying in one corner of the room is a skeleton.",
915         description "Just some bones, not much else, is all.",
916         before [;
917            Pull, Push, Turn, ThrownAt, Touch, Attack, Rub,
918 Cut, Shake, Squeeze, Kiss:
919               remove self;
920               "The skeleton crumbles into dust, as though \
921 many years of time had suddenly caught up with it in one \
922 moment.";
923         ],
924 has static;
925
926 ! (black -- final parchment of Palemon's final words)
927 Object p8 "blackened parchment" Mystical_Cave
928    class parchment_class,
929    with name "blackened",
930 description "~I write these final words not in the hope \
931 that others will find and heed them, for this is too great \
932 a hope in my moment of death, but rather, to try and maintain my mind and soul \
933 in the face of the terror I now know is the truth.^^\
934 For how can a man survive, knowing that his entire life, \
935 his entire belief, has been a ruse, a dupe, from the \
936 early beginning? That he has merely been a pawn in a \
937 working of evil that cannot be stopped?^^\
938 I have fought all manner of terrors, and recovered that which \
939 I know is the _true_ Rod of the Ancients, broken and scattered \
940 eons ago in the face of great evil. I sought also those \
941 ancient spheres that the Four Ancients never had the chance to \
942 use against the evil four elemental demons, but alas, I could \
943 not find them all, and sequestered those which I did with \
944 good people that the elemental evil could not touch.^^\
945 Alas, my quest has ended here. I lie trapped here, \
946 with the pieces of the true Rod in hand, unable to go forward, trapped by the \
947 elemental mystic locks on the rod that prevent it from leaving this \
948 very room, yet unable to go back, to leave the rod here and \
949 deny the very real danger of the defeat of the Ancients, of \
950 the power that the evil elementals hold.^^\
951 What is a faith destroyed? Who can help me to believe, in my moment \
952 of disbelief?^^\
953 --P--~"; 
954
955
956
957
958 Object Dragon_Cave "Giant Cavern"
959    with description "You find yourself in a huge cavern. To the west \
960 is a large exit that looks out into a void of snow-covered mountains.",
961         name "mountains",
962         w_to "You hesitate. The cave seems to just \
963 exit off the side of a mountain, and all you can see below is whiteness. \
964 It could be a long way down.",
965         d_to [; <<Jump>>; ],
966         out_to [; <<Jump>>; ],
967         before [;
968             Jump:
969                print "You close your eyes and leap out of the cave! \
970 You plummet through silent white winds. \
971 Moments later, you fall right into an enormous snowbank, and \
972 roll downwards, into...^";
973                PlayerTo(snowy_intersection2);
974                rtrue;
975         ],
976    has light;
977
978 Object On_Boat "On strange boat"
979    with description "You are on a long open boat, riding the waves of \
980 some great sea. The boat seems to be filled with sailors from \
981 some militia.",
982         name "waves" "sea" "mast" "floorboards" "ship" "boat",
983         before [;
984            Drop:
985               if (captain has general) {
986                  if (noun==green_rod_piece) {
987                     remove green_rod_piece;  ! it'll be back           
988                     give shipwreck general;
989                     Mystical_Cave.number = Mystical_Cave.number + 1;
990                     StopTimer(captain);
991                     StopTimer(militia);
992                     print "You drop the green rod and watch it roll near \
993 a mast and get stuck in the floorboards.^^\
994 There's a load crack! The ship is breaking apart! Sailors \
995 scramble in vain for safety! You hang onto the side of the \
996 boat, but the vessel rocks wildly, and you fall into the waters. \
997 ^^As you sink, you notice the waters seem to change to a purplish \
998 hue, and you find yourself back in...^";
999                     PlayerTo(Mystical_Cave);
1000                     rtrue;
1001                  }
1002               } 
1003               else  
1004                 "The sailors are holding you fast, so you \
1005 can't do this at the moment.";
1006         ],
1007    has light;
1008
1009 Nearby militia "sailors"
1010    with name "sailors" "militia" "navy",
1011         description "A bunch of dour-looking navy sailors.",
1012         time_left 0,
1013         time_out [;
1014            deadflag = 1;
1015            "The ship breaks asunder! Sailors scramble madly \
1016 and fall into the violent waves! You hear \
1017 the captain scream ~Blast! I can't swim!~ before the \
1018 waters cover you completely.";
1019         ],
1020    has scenery;
1021
1022 Object ENDGAME_ROOM "Nothingness"
1023    with description "Nothingness surrounds you. Yet, you feel like \
1024 your conscious being extends into worlds and dimensions never \
1025 imagined. You float in a void of total being.",
1026         number 0,  ! number of elementals banished
1027         each_turn [;
1028            switch (ENDGAME_timer.number) {
1029            0:  ENDGAME_timer.number = 1; 
1030                if (black_elemental in ENDGAME_ROOM) 
1031                "^Echoing in your mind, you hear a voice, that you \
1032 somehow know is from the black sphere. ~Give me the rod priest, \
1033 and you shall be immortalized as a symbol to an entire civilization!~";
1034            1:  ENDGAME_timer.number = 2; 
1035                if (smoke_elemental in ENDGAME_ROOM) 
1036                "^Echoing in your mind, you hear a voice, that you \
1037 somehow know is from the smoke-colored sphere. ~Give me the rod priest, \
1038 and I shall let you be witness to a feat of great magic, never \
1039 before witnessed!~";
1040            2:  ENDGAME_timer.number = 3; 
1041                if (gray_elemental in ENDGAME_ROOM) 
1042                "^Echoing in your mind, you hear a voice, that you \
1043 somehow know is from the gray-colored sphere. ~Give me the rod priest, \
1044 and I will grant you power over all who surround you!~";
1045            3:  ENDGAME_timer.number = 4; 
1046                if (white_elemental in ENDGAME_ROOM) 
1047                "^Echoing in your mind, you hear a voice, that you \
1048 somehow know is from the white sphere. ~Give me the rod priest, \
1049 and you will gain the attention of one of the more powerful \
1050 figures of your time!~";
1051            }
1052         ],  
1053 has light;
1054
1055 Object ENDGAME_timer "void" ENDGAME_ROOM
1056    with name "void" "nothingness",
1057         description "The absence of anything. Yet, at the same \
1058 time, the sense that everything possible is near.",
1059         number 0,
1060         time_left 0,
1061         time_out [;
1062            deadflag = 1;
1063            if (ENDGAME_ROOM.number < 3)
1064               print "The spheres nearby suddenly converge";
1065            else print "The sphere nearby suddenly converges";
1066            " towards you! In your mind, you hear \
1067 ~Hesitation, foolish priest, was the downfall of the Ancient \
1068 Ones~ before you feel the full force of the void.";
1069         ],  
1070    has scenery;
1071
1072 ! *** fake room/encounter for bad ending #x
1073 Object badend1 "On Giant Cube"
1074    with description "You stand on a single giant floating white \
1075 cube, in the middle of some dimly lit cavern. \
1076 ^^A small newt floats nearby, concentrating on something.^^\
1077 The newt suddenly opens its eyes! ~What?~ it croaks in \
1078 surprise. ~Who are you? You've broken my concentration on \
1079 the spell, you fool!~ the newt croaks. You feel the cube \
1080 shift, then stop floating! You plummet into the lava you \
1081 feared was below..."
1082    has light;
1083
1084 Object badend2 "Top of Pyramid"
1085    with description "You are on top of a pyramid in some \
1086 ancient city. You see dense jungle to the horizon. \
1087 An ancient civilization spreads before you, in all its \
1088 mysterious glory.^^Several robed figures surround you.^^\
1089 Suddenly, you realize you are tightly bound! One of the \
1090 figures points towards the horizon and makes a complicated \
1091 gesture. In a language you do not understand, he seems \
1092 to make a prayer to some nameless god! Fearing the \
1093 inevitable, you struggle mightily, but to no avail. \ 
1094 In moments, the group of robed figures hurls you off the \
1095 pyramid to your death!"
1096    has light;
1097
1098 ! *************
1099 ! Creatures
1100 ! *************
1101
1102 Object Imp "Implementor" Imp_Bedroom
1103    with name "Implementor",
1104         article "an",
1105         description [;
1106            print "Some Implementor. Looks more like a oddly-dressed \
1107 young man badly in need of a haircut";
1108            if (self has general)
1109               ". He's also sound asleep!";
1110            else ".";
1111         ],
1112         describe [;
1113            print "^Someone you assume must be an Implementor \
1114 is here";
1115            if (self has general)
1116               ", sound asleep.";
1117            else ".";
1118         ],           
1119         number 0,
1120         weight 120,  !  about right
1121              life [;
1122                 ! if asleep, which is usually the case
1123                 if (self has general) {
1124                    if (action==##WakeOther or ##Attack) {
1125                       print "You manage to rouse the Implementor from his \
1126 slumber. He stares at you, bewildered. ~What are you doing here?~ \
1127 he asks. ";
1128 ImpSendBack(); rtrue;
1129            }
1130                    else
1131                    "He appears to be sound asleep right now, and isn't very \
1132 responsive.";
1133            }
1134 !               else {
1135 ! (I suppose this is unnecessary. -- i.e. the player shouldn't be able to 
1136 ! interact with the implementor unless the implementor is asleep)
1137 !                  print "Well, that got his attention. The Implementor \
1138 !looks completely startled. ~What are you doing here?~  he says. ";
1139 !ImpSendBack(); rtrue;
1140 !           }                              
1141              ],
1142              daemon [;
1143                 ! ASSUMPTION -- daemon started by start event
1144                 StopTimer(Imp_Liv);
1145                 if (Imp.number == 0) {
1146                    give Imp_door open;
1147                    if ((player in Imp_Liv) && (player notin Imp_Curtains)) {
1148                       print "^The door to the west suddenly flies open! \
1149 A somewhat bedraggled Implementor steps out! He spots you and his \
1150 jaw drops. ~You, here?~ he says. ";
1151 ImpSendBack(); rtrue;
1152               }               
1153               else 
1154                  print "^You hear a door open to the west.^";
1155               Imp.number = 1;
1156               move Imp to Imp_Liv;
1157               }
1158            else {
1159               ! first a little 'lazy' clause that kicks the player
1160               ! out if the Imp is moving around and the player isn't
1161               ! in the curtains
1162               if ((Imp.number < 5) && (player notin Imp_Curtains)) {
1163                  if (Imp in location) print "^The Implementor ";
1164                  else print "^From nearby, an Implementor rushes up and \
1165 ";
1166                  print " grabs you by the shoulder! \
1167 ~What are you doing here?~ he \
1168 says. "; ImpSendBack(); return 1;
1169               }
1170               ! now, otherwise, we move the Imp and set his
1171               ! number accordingly.  Room descs and 'Listen'
1172               ! traps in Imp_Liv will need to use this info  
1173               switch (Imp.number) {
1174               ! [step 1, moving to Kitchen]
1175               1: move Imp to Imp_Kitchen;
1176                  Imp.number = 2;
1177                  if (Coffee_maker notin Imp_Kitchen) Imp.weight = 118;
1178                  else {
1179                     if (regular_coffee_can in Imp_Kitchen) {
1180                        Imp.weight = 119;
1181                        remove regular_coffee_can;
1182                     }
1183                     else {
1184                        if (decaf_coffee_can in Imp_Kitchen) {
1185                           Imp.weight = 122;
1186                           remove decaf_coffee_can;
1187                        }
1188                        else {
1189                        ! no coffee, gosh darn it
1190                           Imp.weight = 121;
1191                        }
1192                     }
1193                  }
1194                  return 0;
1195               ! [step 2, making/drinking the beverage]
1196               2: Imp.number = 3;
1197               ! [step 3, leaving kitchen, back to living room]
1198               3: Imp.number = 4;
1199                  move Imp to Imp_Liv;
1200               ! [step 4, goes back into bedroom]
1201               4: Imp.number = 5;
1202                  give Imp_door ~open;
1203                  if (player in Imp_Curtains) 
1204                     print "^You hear a door close to the west.^";
1205                  move Imp to Imp_Bedroom;
1206 !                 move coffee_cup to Imp_Bedroom;
1207                  if (Imp.weight == 122)
1208                     give Imp general;  ! asleep
1209                  StopDaemon(Imp);
1210               }                         
1211            }         
1212              ],
1213 has animate;
1214
1215 !Object coffee_cup "large cup"
1216 !   with name "cup" "large",
1217 !        description "A large mug, with the residue of some brown liquid \
1218 !left in it.",
1219         ! weight 5, 
1220 !        size 4,
1221 !   has container open;        
1222
1223 ! MOVEPRINTNPC routine, from Gareth Rees' 'THIEF.INF' 
1224 ! (TODO -- you really don't need this, since only Frobar moves in this fashion)
1225 [ MovePrintNPC n dest dir;
1226     if (n in location) {
1227         print "^", (The) n, " walks off";
1228         if (dir ~= in_obj or out_obj or u_obj && dir ~= d_obj)
1229             print " to the ", (DirectionName) dir.door_dir;
1230         print ".^";
1231     }
1232     if (dest == 0) remove n;  ! This seems odd - if dest bogus, 'unlink' NPC?
1233     else move n to dest;        
1234     if (n in location)
1235         print "^", (The) n, " walks in.^";
1236 ];
1237
1238 Object White_Dragon "White Dragon" Dragon_Cave
1239    with name "dragon" "white" "giant",
1240         describe [;
1241            print "There is a gigantic white dragon here";
1242            if (self has general)
1243               " sleeping peacefully.";
1244            "!";
1245         ],
1246         description "A giant white dragon, the size of a small house.",
1247         time_left 0,
1248         time_out [;
1249            give self ~general;
1250            if (location == Dragon_Cave) {
1251               deadflag = 1;
1252               "^The dragon suddenly snorts and wakes! It sees you \
1253 and attacks! In moments, you are no more...";
1254            }
1255            else {
1256               remove self;
1257               give stone_marker ~general;
1258               move stone_marker_top to snowy_intersection2;  
1259               "^You hear a roar from the east! From out of the \
1260 sky, a giant white dragon descends! It draws near, spots you, \
1261 and bellows in rage! You shrink back, and pray for a quick but \
1262 painless end.^^There is a loud crack! The dragon, in trying to \
1263 land, almost impales itself on the obelisk marker! Part of the \
1264 marker breaks off, and the dragon flies off, whimpering in pain!"; 
1265            }          
1266         ],
1267         life [;
1268         Attack, ThrowAt, WakeOther:
1269 deadflag = 1;
1270 "You disturb the sleeping dragon, who promptly makes you wish \
1271 you hadn't.";
1272         default: "Best not to disturb the dragon, I'd guess.";
1273         ],
1274   has animate;
1275
1276 Object captain "sea captain" On_Boat
1277    with name "captain",
1278         description "A rough-looking navy captain.",
1279         number 0,
1280         each_turn [;
1281            if (self hasnt general) {
1282               if (captain.number == 0) {
1283                  captain.number = 1;
1284                  "^You suddenly realize that you are being \
1285 held fast by two navy sailors! The captain walks forward and \
1286 points his cutlass near your ear.^^\
1287 ~What we have here, lads, is a stowaway!~ Some sailor cries out \
1288 ~Overboard with the stowaway!~ The captain smiles. \
1289 ~Now, we was planning on feeding you to the groupers, \
1290 but we could use a scullion in the hold. One things for sure, \
1291 ye ain't finding passage on this ship if ye ain't aligned with \
1292 the Antharian Navy cause!~ Some sailor cries out \
1293 (unnecessarily) ~The Antharian Navy cause!~. ~So, tell us lad, \
1294 are ye with us? If ye are true, you'll tell me the Antharian \
1295 Navy patron saint! So speak quickly, lad, if ye wish to stay \
1296 dry!~";
1297               }
1298               else "^~Speak up fellow! We havn't got all day!~";
1299            } 
1300         ],
1301         time_left 0,
1302         time_out [;
1303            deadflag = 1;
1304            "The captain sighs. ~Into the water with ye, then,~ \
1305 he says, and the two sailors push you roughly overboard. \
1306 You land in the sea with a splash, and struggle to stay afloat. \
1307 The ship sails off, but oddly, moments later, it seems to \
1308 stall and start to sink! Before you get a chance to reflect on \
1309 this, a large grouper swallows you whole.";
1310         ], 
1311         life [;
1312            if (self has general)
1313               "The captain's a bit too busy trying to save \
1314 a sinking ship.";
1315            Answer:
1316              if (noun=='minirva') {
1317                 give self general;
1318                 StopTimer(self);
1319                 StartTimer(militia,2);
1320                 "~Aye, that's right. Escort the new scullion \
1321 down to the hold where --~^^\
1322 The captain's orders are cut short by a sudden grinding noise, \
1323 and the boat rocks violently! ~Reef, captain!~ you hear someone \
1324 cry. ~Blast!~ the captain says, ~quickly men, we've got to --~ \
1325 But it's too late. The boat starts to tip and sway, and \
1326 the two sailors release you and hastily try to help raise the \
1327 rigging!";
1328              }
1329              else {
1330                 if (noun=='duncanthrax') {
1331                   deadflag = 1;
1332                   "The sailors suddenly pale at the mention of \
1333 Lord Duncanthrax. ~A traitor in our midst, eh?~ the captain \
1334 shouts and beheads you with one stroke.";
1335                 }
1336                 if (noun=='ulysses' or 'odysseus')
1337                    "~Nay lad, me thinks that \
1338 was a sailor.~";                   
1339                 else "~Nay lad, that doesn't sound right.~";
1340              }
1341            Attack, ThrowAt, Kiss, Show, Give:
1342              "Given that you are in the grips of several \
1343 strong navy sailors, this is impossible.";
1344         ],
1345    has animate;
1346
1347 ! ***** THE EVIL ELEMENTALS
1348 Object black_elemental "black sphere" ENDGAME_ROOM
1349    with name "anabais" "black" "sphere" "earth",
1350         description "A black sphere of energy.",
1351         life [;
1352            ThrowAt:
1353               if (noun==brown_sphere) {
1354                  remove self; remove brown_sphere;
1355                  ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1;
1356                  if (ENDGAME_ROOM.number == 4) {
1357                     GameWinner(); rtrue; }
1358                  "The black sphere howls in rage and is no more!";
1359               }
1360            Give:
1361               if (noun==TRUEROD) {
1362                  remove TRUEROD;
1363                  print "You feel a strange foreboding feeling as \
1364 the black sphere seems to engulf the rod, then you! Your \
1365 surroundings change once again!^";
1366                  deadflag = 1;
1367                  PlayerTo(badend2);
1368                  rtrue;
1369               }
1370            default: "The black sphere is unresponsive.";
1371         ], 
1372    has animate; 
1373
1374 Object smoke_elemental "smoke-colored sphere" ENDGAME_ROOM
1375    with name "smoke" "sphere" "fire", ! TODO new name...
1376         description "A smoke-filled sphere of energy.",
1377         life [;
1378            ThrowAt:
1379               if (noun==red_sphere) {
1380                  remove self; remove red_sphere;
1381                  ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1;
1382                  if (ENDGAME_ROOM.number == 4) {
1383                     GameWinner(); rtrue; }
1384                  "The smoke-filled sphere howls in rage and is no more!";
1385               }
1386            Give:
1387               if (noun==TRUEROD) {
1388                  remove TRUEROD;
1389                  print "You feel a strange foreboding feeling as \
1390 the smoke-filled sphere seems to engulf the rod, then you! Your \
1391 surroundings change once again!^";
1392                  deadflag = 1;
1393                  PlayerTo(badend1);
1394                  rtrue;
1395               }
1396            default: "The smoke-filled sphere is unresponsive.";
1397         ], 
1398    has animate; 
1399
1400 Object gray_elemental "gray sphere" ENDGAME_ROOM
1401    with name "gray" "sphere" "water", ! TODO new name
1402         description "A gray sphere of energy.",
1403         life [;
1404            ThrowAt:
1405               if (noun==green_sphere) {
1406                  remove self; remove green_sphere;
1407                  ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1;
1408                  if (ENDGAME_ROOM.number == 4) {
1409                     GameWinner(); rtrue; }
1410                  "The gray sphere howls in rage and is no more!";
1411               }
1412            Give:
1413               if (noun==TRUEROD) {
1414                  remove TRUEROD;
1415                  print "You feel a strange foreboding feeling as \
1416 the gray sphere seems to engulf the rod, then you! Your \
1417 surroundings change once again!^";
1418                  PlayerTo(FUBLIO_Cave);  
1419                  StartTimer(mad_hermit,3);
1420                  rtrue;
1421               }
1422            default: "The gray sphere is unresponsive.";
1423         ], 
1424    has animate; 
1425
1426 Object white_elemental "white sphere" ENDGAME_ROOM
1427    with name  "white" "sphere" "air",  ! TODO new name
1428         description "A white sphere of energy.",
1429         life [;
1430            ThrowAt:
1431               if (noun==silver_sphere) {
1432                  remove self; remove silver_sphere;
1433                  ENDGAME_ROOM.number = ENDGAME_ROOM.number + 1;
1434                  if (ENDGAME_ROOM.number == 4) {
1435                     GameWinner(); rtrue; }
1436                  "The white sphere howls in rage and is no more!";
1437               }
1438            Give:
1439               if (noun==TRUEROD) {
1440                  remove TRUEROD;
1441                  print "You feel a strange foreboding feeling as \
1442 the white sphere seems to engulf the rod, then you! Your \
1443 surroundings change once again!^";
1444                  PlayerTo(TROPHY_SECRET);  
1445                  rtrue;
1446               }
1447            default: "The white sphere is unresponsive.";
1448         ], 
1449    has animate; 
1450
1451
1452 ! ******************
1453 ! scrolls/spells 
1454 ! ******************
1455
1456 Object fancy_scroll "fancy scroll" 
1457   class scroll_class,
1458   with name "fancy",
1459 ;
1460
1461 Object wigro_spell "turn undead" fancy_scroll
1462    class spell_class,
1463    with name "wigro",
1464    magic [;
1465       "You speak the chant. Nothing seems to happen.";
1466    ],
1467 ;
1468
1469 Object briefcase "briefcase" Subway_Tunnel
1470    with name "briefcase" "case",
1471         description "A somewhat battered brown-leather briefcase.",
1472         capacity 5,
1473         ! weight 20, 
1474         size 15,
1475    has container openable;
1476
1477 Object red_scroll "red scroll" briefcase
1478   class scroll_class,
1479   with name "red",
1480 ;
1481
1482 Object luncho_spell "send object to lower plane" red_scroll
1483   class spell_class,
1484   with name "luncho",
1485        magic [;
1486           if (second == 0)
1487 "You see a brief flash of smoke, but nothing happens.";
1488           if (second has animate)
1489              "You feel a slight rumbling beneath your feet, but nothing else \
1490 happens.";
1491           else {
1492              if ((second hasnt static) && (second hasnt scenery)) {
1493                 if (second has clothing) give second ~worn;
1494                 if (in_atrii == 1) {
1495                    move second to MON_Chapel2;
1496                 }
1497                 else
1498                 move second to Hades_5;
1499                 print "There is a sudden puff of smoke, and "; DefArt(second); 
1500                 " suddenly vanishes!";
1501              }
1502              "Your chant goes unanswered.";
1503           }
1504       ],
1505 ;
1506
1507 ! ******************
1508 ! special obs
1509 ! ******************
1510
1511 Object Atrii_gate "strange contraption" GUE_Labs_SECRET
1512    with name "contraption" "plate" "disc" "strange",
1513         description "It looks like a large, slightly convex round disc \
1514         made of some silvery material.",
1515         before [;
1516            Enter:
1517               print "As you step onto the silvery disc, you feel a \
1518               strange jolt run through your body. A bright white \
1519               flash blinds you momentarily!^^You blink, trying to \
1520               register your surroundings.^";
1521               in_atrii = 1;
1522               PlayerTo(ATRII_1);
1523               return 2;
1524            Receive:
1525               move noun to ATRII_1;
1526               CDefArt(noun); " suddenly disappears in a bright \
1527               flash of light as you place it on the silver disc!";              
1528            Push, Pull, Touch, Take:
1529               "As you reach for the strange contraption, you notice \
1530               white sparks of something arc from the silver surface \
1531               to your fingers! You hastily draw back.";              
1532         ],
1533    has static supporter enterable;
1534
1535 ! *** the true rod pieces, and the golden rod (after joined)
1536 Object silver_rod_piece "silver rod piece" Mystical_Cave
1537    class rod_class,
1538    with name "silver",
1539         description "A strange short section of rod colored \
1540 silver.",
1541         before [;
1542            Join:
1543               if (location ~= Mystical_Cave) {
1544               if (second == TRUEROD) 
1545                  <<Join TRUEROD self>>;
1546               if ((second == brown_rod_piece) ||
1547                  (second == red_rod_piece) ||
1548                  (second == green_rod_piece)) {
1549                  if (TRUEROD.number == 0) {
1550                     TRUEROD.number = 1;
1551                     move TRUEROD to parent(self);
1552                     remove self;  remove second;
1553                     "There is a dazzling golden light as \
1554 you join the two rod pieces! What remains is a new, strange \
1555 rod piece!"; 
1556                  }
1557                  else "There is a dazzling burst of \
1558 golden light. However, the pieces will not join, and seem \
1559 to be seeking out something else...";
1560               }
1561               }
1562               else "Some strange purple flash of force \
1563 blocks your efforts.";
1564         ],
1565 ;
1566 Object red_rod_piece "red rod piece" Mystical_Cave
1567    class rod_class,
1568    with name "red",
1569         description "A strange short section of rod colored \
1570 red.",
1571         before [;
1572            Join:
1573               if (location ~= Mystical_Cave) {
1574               if (second == TRUEROD) 
1575                  <<Join TRUEROD self>>;
1576               if ((second == silver_rod_piece) ||
1577                  (second == brown_rod_piece) ||
1578                  (second == green_rod_piece)) {
1579                  if (TRUEROD.number == 0) {
1580                     TRUEROD.number = 1;
1581                     move TRUEROD to parent(self);
1582                     remove self;  remove second;
1583                     "There is a dazzling golden light as \
1584 you join the two rod pieces! What remains is a new, strange \
1585 rod piece!"; 
1586                  }
1587                  else "There is a dazzling burst of \
1588 golden light. However, the pieces will not join, and seem \
1589 to be seeking out something else...";
1590               }
1591               }
1592               else "Some strange purple flash of force \
1593 blocks your efforts.";
1594         ],
1595 ;
1596 Object green_rod_piece "green rod piece" Mystical_Cave
1597    class rod_class,
1598    with name "green",
1599         description "A strange short section of rod colored \
1600 green.",
1601         before [;
1602            Join:
1603               if (location ~= Mystical_Cave) {
1604               if (second == TRUEROD) 
1605                  <<Join TRUEROD self>>;
1606               if ((second == silver_rod_piece) ||
1607                  (second == red_rod_piece) ||
1608                  (second == brown_rod_piece)) {
1609                  if (TRUEROD.number == 0) {
1610                     TRUEROD.number = 1;
1611                     move TRUEROD to parent(self);
1612                     remove self;  remove second;
1613                     "There is a dazzling golden light as \
1614 you join the two rod pieces! What remains is a new, strange \
1615 rod piece!"; 
1616                  }
1617                  else "There is a dazzling burst of \
1618 golden light. However, the pieces will not join, and seem \
1619 to be seeking out something else...";
1620               }
1621               }
1622               else "Some strange purple flash of force \
1623 blocks your efforts.";
1624         ],
1625 ;
1626 Object brown_rod_piece "brown rod piece" Mystical_Cave
1627    class rod_class,
1628    with name "brown",
1629         description "A strange short section of rod colored \
1630 brown.",
1631         before [;
1632            Join:
1633               if (location ~= Mystical_Cave) {
1634               if (second == TRUEROD) 
1635                  <<Join TRUEROD self>>;
1636               if ((second == silver_rod_piece) ||
1637                  (second == red_rod_piece) ||
1638                  (second == green_rod_piece)) {
1639                  if (TRUEROD.number == 0) {
1640                     TRUEROD.number = 1;
1641                     move TRUEROD to parent(self);
1642                     remove self;  remove second;
1643                     "There is a dazzling golden light as \
1644 you join the two rod pieces! What remains is a new, strange \
1645 rod piece!"; 
1646                  }
1647                  else "There is a dazzling burst of \
1648 golden light. However, the pieces will not join, and seem \
1649 to be seeking out something else...";
1650               }
1651               }
1652               else "Some strange purple flash of force \
1653 blocks your efforts.";
1654         ],
1655 ;
1656 Object TRUEROD "golden rod" 
1657    class rod_class,
1658    with name "golden",
1659         number 0,
1660         description [;
1661            print "A wondrous, shimmering golden rod";
1662            if (TRUEROD.number < 3) 
1663               " that seems slightly short.";
1664            else "."; 
1665         ],
1666         before [;
1667            Wave:
1668              if (TRUEROD.number == 3) {
1669                 deadflag = 1;
1670 ! TODO -- this is essentially another 'win', but not a good one
1671                 "You wave the rod, and feel a sudden blast of force! \
1672 The spheres howl in terror and \
1673 suddenly explode! The jolt of power from the rod sends you \
1674 hurtling through space, and you are lost in an endless \
1675 tumble through the void..."; 
1676              }
1677            Join:
1678              if ((second == silver_rod_piece) ||
1679                  (second == red_rod_piece) ||
1680                  (second == green_rod_piece) ||
1681                  (second == brown_rod_piece)) {
1682                 remove second;
1683                 TRUEROD.number = TRUEROD.number + 1;
1684                 print "You feel a strange surge of \
1685 mystic energy as you join the rod pieces. ", (The) second,  " \
1686 joins with the golden rod";
1687                 if (TRUEROD.number == 3) {
1688                    Achieved(19);
1689                    print "!^^Time and space seem to grind to \
1690 a halt.^^\
1691 Your surroundings and the very ground you stand on shatter like \
1692 planes of glass, revealing a strange, new dimension...^";
1693                    spell_block = 1;
1694                    PlayerTo(ENDGAME_ROOM);
1695                    StartTimer(ENDGAME_timer,12);
1696                    rtrue;
1697                 }
1698                 else "!";
1699              } 
1700         ],
1701 ;
1702
1703 ! *** The results of winning the game ***
1704 [ GameWinner ;
1705    Achieved(26);
1706    print "The last sphere howls in rage and disappears!";
1707    deadflag = 2;
1708    " You scream in agony as the void that surrounds you \
1709 seems to implode! You feel yourself dissipating into the \
1710 surrounding nothingness. ~Is this my reward?~ you scream, \
1711 ~Is this, then, the end?~^^\
1712 A white light makes you open your eyes.^^\
1713 You are lying on a beach. The Great Sea laps at your \
1714 tattered garments. Slowly, you rise to your knees.^^\
1715 The sun, like a bloated, radiant bird, is sinking below the \
1716 wave on the horizon. Another day is coming to an end.^^\
1717 A voice startles you. ~Tis a fine spot for watching \
1718 sunsets.~ You turn to see Morgan the Ranger, Frobar and \
1719 the Thief nearby. The Thief helps you to your feet, and Frobar \
1720 glances your way. ~I sensed a great upheaval in the \
1721 fabric of time and space not long ago. I gather you \
1722 have quite a story to tell,~ he says. ~We \
1723 probably can relate to much of what you have seen, \
1724 although your unwavering faith is something we \
1725 desire to understand.~ Morgan explains, ~Belief in the \
1726 face of the unbelievable is an enviable strength.~ \
1727 The Thief chuckles quietly. \
1728 ~Perhaps you will join us at Delbins, where we will \
1729 partake in a belief of fine cuisine while you tell all?~ he says. \
1730 He notices your weary expression and \
1731 adds with surprising seriousness, ~Not that I \
1732 prepose to offer advice from one as myself, \
1733 but humbly, I admit, that many a time, a belief in myself \
1734 was often sufficient.~ He pauses. \
1735 ~Gods or no, now, you make your own destiny.~";
1736 ];