Implement per-file license notices
[spiritwrak.git] / src / anthar.inf
1
2 ! ****************************************************************
3 ! ANTHAR.INF
4 ! -- Add-on for SPIRITWRAK
5 ! (Do not use alone!)
6 !
7 ! SPIRITWRAK is free software; you can redistribute it and/or modify
8 ! it under the terms of the GNU General Public License as published by
9 ! the Free Software Foundation; either version 3 of the License, or
10 ! (at your option) any later version.
11 !
12 ! SPIRITWRAK is distributed in the hope that it will be useful, but
13 ! WITHOUT ANY WARRANTY; without even the implied warranty of
14 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 ! General Public License for more details.
16 !
17 ! You should have received a copy of the GNU General Public License
18 ! along with SPIRITWRAK. If not, see <https://www.gnu.org/licenses/>.
19 ! ****************************************************************
20
21 Object ANTHAR_GUSStop "Entrance to Greater Anthar"
22    with description "You're just west of Greater Anthar on the \
23 island nation of Antharia. The bright sunlight \
24 seems to make the city streets east of here glitter. \
25 A stairway leads down.",
26         name "sunlight" "streets" "glitter" "stairway",
27         d_to ANTHAR_GUSStation,
28         e_to ANTHAR_West, 
29    has light;
30
31 Object ANTHAR_West "Anthar West"
32    with description "You are standing in a busy section of \
33 West Greater Anthar City. The city seems to thin \
34 out to the west. A roadway heads east, \
35 the ever-popular Flathead \
36 Stadium lies to the northeast, and a pub lies to the \
37 south.",
38         name "roadway" "stadium" "pub",
39         w_to ANTHAR_GUSStop,
40         e_to ANTHAR_East,
41         s_to Delbins,
42         in_to Delbins,
43         ne_to Stadium_entrance,
44         cant_go "You walk around the area, take in the local scene, and \
45                  find yourself back here.",
46         before [;
47            Smell:  "You can smell scents of local cooking coming \
48                    from the south.";
49         ],
50    has light;
51
52 Object ANTHAR_East "Anthar East"
53    with description "You are standing in a busy section of \
54 East Greater Anthar City. The city continues to \
55 the west. There is a large odd structure to the \
56 east, made mostly of glass. The ever-popular Flathead \
57 Stadium lies to the northwest. A short walk down \
58 to a waterfront area is to the south.",
59         name "structure" "glass" "stadium" "waterfront",
60         w_to ANTHAR_West,
61         e_to Conservatory_entrance, 
62         s_to ANTHAR_Waterfront,
63         nw_to Stadium_entrance,
64         cant_go "You walk around the area, take in the local scene, and \
65                  find yourself back here.",
66         before [;
67            Smell:  "You smell rather nice floral scents coming \
68                    from the east.";
69         ],
70    has light;
71
72
73 Object ANTHAR_Waterfront "Swank Waterfront"
74    with description "A pleasant waterfront walk is your current \
75 location. You can see the Great Sea stretching out \
76 before you to the south, a breath-taking sight. \
77 A rail runs along the south end, preventing \
78 an untimely fall into the rock shore below. The \
79 city is back to the north.",
80         name "waterfront" "sea" "great" "railing" "rail" "rock" "shore",
81         n_to ANTHAR_East,
82    has light;
83
84 Object telescope "viewing telescope" ANTHAR_Waterfront
85    with name "telescope" "viewing" "scope",
86         capacity 1,
87         when_closed "There's a viewing telescope here, attached to the railing.",
88         when_open [ x ;
89               print "There's a viewing telescope here, attached to the \
90 railing. One of the lenses seems loose";
91               if (children(self) == 0) ".";
92               else {
93                  print ". Inside you see:^";
94                  x = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT;
95                  WriteListFrom (child(telescope), x, 1); rtrue;
96               }
97         ],
98         description "A nice tourist toy. Perfect for getting a good view.",
99         before [;
100            Open:  print "You pry loose a lens. ";
101            Close: print "You push the lens back in place. ";
102            Search: 
103               if (self hasnt open) {
104                  print "You take a peak through the telescope";
105                  if (children(self) ~= 0)
106                     " but oddly, there's something blocking your \
107                     view.";
108                  else {
109                  if (random(40)==1)
110                     " and see a ship in the distance! Wait, perhaps not. \
111 It's gone.";
112                  " and see a nice expanse of the Great Sea.";
113                  }
114               }
115         ],
116         size 10,
117    has static container openable;
118
119 ! (Conservatory gardens)
120
121 Object Conservatory_entrance "Conservatory Entrance"
122    with description "You stand before the entrance to a large public \
123 conservatory. You can enter the greenhouses to the northeast \
124 and southeast, or walk back to Anthar to the \
125 west.",
126         name "greenhouse" "greenhouses",
127         w_to ANTHAR_East,
128         ne_to Con_Desert_garden,
129         se_to Con_Flower_garden,
130         before [;
131            Smell: "You can smell floral scents from the southeast.";
132         ],
133    has light;
134
135 Object Con_Desert_garden "Desert Garden"
136    with description "A nicely arranged collection of desert plants \
137 is here in the ~Desert Garden~. Bright sunlight \
138 and a sandy ground enhance the overall effect. \
139 The conservatory entrance is to the southwest, or \
140 more gardens lie to the south and east.",
141         name "sunlight" "plants" "sand" "gardens",
142         sw_to Conservatory_entrance,
143         e_to Con_Forest_garden,
144         s_to Con_Decor_garden, 
145    has light;
146
147
148 Object Con_Flower_garden "Flower Garden"
149    with description "A rather lovely flower garden lies before you. \
150 The multi-colored flowers are turning the air into \ 
151 perfume. The conservatory entrance is northwest, \
152 or more greenhouse gardens lie to the north and \
153 east. A tiny trail leads south past the flower \
154 beds.",
155         name "perfume" "entrance" "trail" "greenhouse",
156         nw_to Conservatory_entrance,
157         e_to Con_Jungle_garden,
158         n_to Con_Decor_garden,
159         s_to Con_storehouse,
160         before [;
161           Smell:  "The bouquet of flowers is quite intoxicating.";
162         ],
163    has light;
164
165 Nearby flowers "flowers"
166    with name "flowers" "flower" "garden",
167         description "A lovely assortment of flowers.",
168         before [;
169           Take: "Don't pick the flowers.";
170           Cast: 
171              if (the_spell_was == throck_spell)
172                 "Suddenly, a few more flowers spring out of the \
173                 ground!";
174         ],
175    has scenery;
176
177 Object Con_storehouse "Gardener's Storehouse"
178    with description "This must be a storehouse for the conservatory \
179 gardeners. There are soil stains and plant debris all over. \
180 The only exit is north.",
181         name "soil" "stains" "debris" "plant",
182         n_to Con_Flower_garden,
183    has light;
184
185 Nearby toolshed "toolshed"
186    with name "toolshed" "shed",
187         description "A plain toolshed.",
188         with_key shed_key,
189         capacity 10,
190         size 20,
191         when_closed "A toolshed stands closed against the wall.",
192         when_open [ x;
193          print "The toolshed is open. ";
194          x = children(self);
195          if (x == 0) "It is empty.";
196          print "Inside ";
197          if (x == 1) print "is: "; else print "are: ^";
198          x = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT;
199          WriteListFrom (child(self), x, 1); 
200          rtrue;
201        ],
202    has static container openable lockable locked;
203
204 ! (contents of shed)
205 Object gardeners_cap "cap" toolshed
206    with name "cap",
207         description "A cap with an odd green emblem stitched on \
208 the front that looks like a clover.",
209         size 10,
210    has clothing;
211 Object hedge_clipper "hedge clipper" toolshed
212    with name "clipper" "clippers",
213         description "Basically a long pair of scissors.",
214         size 15,
215 ;
216 Object rubber_gloves "rubber gloves" toolshed
217   with name "gloves" "pair" "rubber",
218        article "a pair of",
219        description "A pair of yellow rubber gloves, slightly \
220 worn. Good for gardening, or washing dishes, I suppose.",
221        size 10,
222 has clothing;
223
224 ! (cracked -- magic has questionable source, doesn't always work)
225 Object p3 "cracked parchment" toolshed
226    class parchment_class,
227    with name "cracked",
228 description "~...is true that those who go by the title of \
229 'Enchanters' need not wear any holy symbol through which \
230 to draw magical power. Indeed, it seems as though the very \
231 amulets we must wear are our only link to magical powers \
232 at all. Worse yet, the powers are indeed granted from \
233 powers above, but the Ancient Ones? I think not. For indeed, \
234 I have found places where magic powers will not work, with or \
235 without the amulet. Likewise, I have found places where \
236 magic works, but praying to the Ancient Ones goes unanswered! \
237 What this all...~";
238
239 Object Con_Decor_garden "Decorative Plants Garden"
240   with description "\ 
241 You are standing in a small well-kept garden. The plots surrounding the \
242 paths are filled with a variety of general ground-cover plants, all \
243 appropriate for most discerning homeowners. Exits lie north and south.",
244        name "ground-cover" "plots" "flamingo" "tinsel" "ornament",
245        n_to Con_Desert_garden,
246        s_to Con_Flower_Garden,
247   has light;
248
249 Object Con_Forest_garden "Forest Garden"
250    with description "A garden path winds through this narrow \
251 greenhouse, which is stocked with various forest plants. \
252 The path winds back to the west and south.",
253         name "path",
254         w_to Con_Desert_garden,
255         s_to Con_Fountain,
256    has light;
257
258 Nearby plants1 "plants"
259    with name "plants" "plant" "tree" "forest",
260         description "You are reminded of a hiking trip you took once.",
261         before [;
262            Cast: 
263               if (the_spell_was == throck_spell)
264                  "The forest seems a bit livelier now.";
265         ],
266    has scenery;
267
268 Object Con_Jungle_garden "Jungle Garden"
269    with description "A garden path winds through this \
270 long greenhouse, which is filled with plants native to \
271 jungle settings. The environment is somewhat \
272 humid. The path heads west and north from here.", 
273         name "path" "humid",
274         w_to Con_Flower_garden,
275         n_to Con_Fountain,
276         e_to [;
277           if (waterfall hasnt general)
278              "You can't go that way.";
279           else return Con_Nursery;
280         ],
281         before [;
282            Smell: "You smell flowers to the west.";
283         ],
284    has light;
285
286 Nearby plants2 "plants"
287    with name "plants" "plant" "tree" "jungle",
288         description "Reminds you of a picture you once saw of \
289 the Miznia jungles.",
290         before [;
291            Cast: 
292               if (the_spell_was == throck_spell)
293                  "The jungle seems a bit livelier now.";
294         ],
295    has scenery;
296
297 Object waterfall "small waterfall" Con_Jungle_garden
298    with name "waterfall" "fall" "falls",
299         initial [;
300             if (self hasnt general)
301                print "A nice little waterfall enhances the jungle \
302 setting";
303             else 
304                print "A fake waterfall hides a passage";
305             " to the east.";
306         ],
307         description [;
308             print "A small";
309             if (self has general) print " fake";
310             " waterfall drops out of a mock-stucco \
311 wall to the east.";
312         ],
313         before [;
314            Pull, Push, Touch, Search, Rub:
315               give self general;
316               "You reach out, expecting to get your hands wet, but \
317               to your surprise, you feel a cloth-like substance. \
318               On closer examination, you realize that the waterfall \
319               is a clever realistic-looking fake, made of cloth \
320               and wood. Stepping around some low plants, you also \
321               notice the waterfall covers a passage east!";
322            ThrownAt:
323               move noun to Con_Jungle_garden;
324               CDefArt(noun); ", to your surprise, literally \
325               bounces off the waterfall, and lands with a thump \
326               nearby.";
327         ],
328    has static;
329
330 Object Con_Nursery "Nursery"
331    with description "This small back room is apparently the \
332 conservatory nursery. Bits of soil and plant \
333 debris are everywhere, along with immature \
334 seedling plants. A exit lies west, partially \
335 covered by some cloth.",
336          name "soil" "plant" "debris" "seedling" "cloth", 
337         w_to Con_Jungle_garden,
338    has light;
339
340 Object smallpot "small flower pot" Con_Nursery
341    with name "pot",
342         description "A small red-ceramic flower pot, \
343 ideal for small plants, I suppose.",
344         before [;
345            Push, Take:
346               if ((location == Con_Nursery) && (self hasnt general))  {
347                  give self general;
348                  move shed_key to Con_Nursery;
349                  print "Moving the pot uncovers a small key hidden \
350 underneath it.^";
351                  if (action==##Push) rtrue; else rfalse;
352               }
353            LookUnder:
354               if ((location == Con_Nursery) && (self hasnt general))  {
355                  "The pot does appear to be sitting crooked. But \
356                  you can't see whatever is under it.";
357               }
358            Cast:
359               if ((the_spell_was == huncho_spell or luncho_spell) &&
360                   (self hasnt general)) {
361                      give self general;
362                      move shed_key to Con_Nursery;
363                      rfalse;
364                   }                 
365         ],
366         size 15,
367    has container open transparent;
368
369
370 Object Con_Fountain "Fountain"
371    with description "A tasteful fountain intercepts a north-south \
372 garden trail here.",
373         name "trail",
374         n_to Con_Forest_garden,
375         s_to Con_Jungle_garden,
376         each_turn [;
377           if (random(20) == 1)
378              "^You hear someone whistling nearby, but there doesn't \
379 seem to be anyone around.";
380         ],
381    has light;
382
383 Nearby fountain "fountain"
384    with name "fountain", 
385         description "A stone basin with a central fountain spout \
386 shaped like a fish. There's no water running currently.",
387         before 
388         [ x;
389            Search: 
390               if (self hasnt general) {
391                   give self general;
392               move c3 to self;
393               "You fish in the fountain for a bit and find a coin!";
394               }
395               else {
396                  print "Mostly wet plant debris";
397                  x = children(self);
398                  if (x == 0) 
399                     ", nothing interesting.";
400                  print ". You also notice:^";
401          x = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT;
402          WriteListFrom (child(self), x, 1); rtrue;
403               }
404            Receive:
405               if (noun has is_coin)
406                  print "Hoping for a little luck, I presume?";
407         ],
408         capacity 10,
409         size 25,
410    has scenery container open;
411
412 Object glasses "pair of glasses" Con_Fountain
413    with name "glasses",
414         initial "It looks like someone left their glasses here.",
415         description "Thick lenses and a heavy frame.",
416         before [;
417            Wear: "You put the glasses on for a moment, and it's like \
418                  looking through a fishtank. Deciding \
419                  against continuing your quest without adequate \
420                  vision, you take them off.";
421         ],
422         size 5,
423    has clothing;
424
425 Object c3 "coin" class coin_class;
426
427 Object shed_key "small key" 
428    with name "key" "small",
429         description "A small metal key.",
430         size 4,
431
432
433
434 ! (Delbin's Pub)
435
436 Object Delbins "Delbin's Pub"
437    with description [;
438            print "Delbin's Pub has been a popular food and drink spot in \
439            South Anthar for quite a while. ";
440            if (self hasnt general)
441            print "Usually, you need to \
442            fight off barbarians to find a place to sit. At the moment, \
443            however, the place is unusually quiet. A group of \
444            barbarians seem paralyzed with fear near the back wall, \
445            glancing nervously at the front of the bar.";
446            else print "A group of barbarians \
447            are making a lot of noise nearby.";
448            " The exit is to the north.";
449         ],
450         name "back" "front",
451         number 0,
452         before [;
453           Listen:
454              if (self has general)
455                 "The barbarians are a rather noisy bunch.";
456           Go:
457             if ((noun == n_obj) || (noun==out_obj))
458 print "Delbin calls out ~Visit us again!~ as you leave.^";
459         ],
460         n_to ANTHAR_West,
461         out_to ANTHAR_West,
462         each_turn [ i ;
463            if (Morgan in Delbins) {
464               i = random(3);
465               if ((i==1) && (Delbins.number == 0)) {
466                 Delbins.number = 1;
467                  "^The man in black makes a lightning fast move for the \
468 glass of ale, but is countered by an equally fast move by the warrior. \
469 ~Lose something, thief?~ the woman says. ~No need to get violent, Morgan,~ \
470 the thief says.";
471               }
472               if ((i==1) && (Delbins.number == 1)) {
473                 Delbins.number = 2;
474                  "^The wizard looks at his companions. ~Say, did I ever \
475 show any of you my famous disappearing glass trick?~ He starts to take \
476 off his wizard's hat, but the gentleman and ranger stop him. ~Don't \
477 even try it, Frobar.~ the woman warrior says.";
478               }
479               if ((i==1) && (Delbins.number == 2)) {
480                 Delbins.number = 3;
481                  "^The female ranger fixates on the glass of ale. \
482 ~Look you two, some of us have better things to do, like fight wars.~ \
483 The wizard scowls. ~Oh save it, Morgan.~ he says.";
484               }
485             }
486           ], 
487    has light;
488  
489 Nearby barbarians "barbarians"
490    with name "barbarians" "group",
491         description "A group of dirty barbarians. One of them \
492            sees you staring at them, and gives you a dirty look.",
493         life [;
494            default:
495  if (Morgan in Delbins)
496     "The barbarians are somewhat paralyzed with fear at the moment.";
497  else 
498     "The barbarians are far too busy telling rude jokes \
499 at the moment.";
500         ],
501    has animate concealed;
502
503 Object headdress "headdress" Delbins
504    with name "headdress",
505         initial "A gaudy headdress of some kind is \
506 hanging on a nearby wall.",
507         description "A large headdress made of animal fur and colorful \
508 bird feathers.",
509         size 15,
510    has clothing;
511
512 Object bar "bar" Delbins
513    with name "bar",
514         description "A long flat wood bar that could probably use a \
515 washing.",
516         before [;
517            Cast:
518              if (the_spell_was == egdelp_spell) {
519                 print "The bar is covered with a waxy film. \
520 Delbin notices this and shrugs.";
521              }
522            LetGo:
523              if (noun==ale_glass) {
524                 <Take ale_glass>; rtrue; }
525         ],
526    has scenery supporter;
527
528 Object ale_glass "glass of ale" bar
529    with name "glass" "ale",
530         description "A small glass filled with an amber liquid.",
531         before [;
532            Take:
533               "You receive cold stares from the three individuals \
534               at the bar. ~Get your own,~ the Ranger says and \
535               pushes you back.";
536            Drink:
537               "You receive cold stares from the three individuals \
538               at the bar. ~Get your own,~ the Thief says and \
539               takes the glass from you before you can bring it \
540               to your lips.";
541            Turn, Push, Pull, Shake:
542               "You receive cold stares from the three individuals \
543               at the bar. ~Get your own,~ the Wizard says and \
544               prevents you."; 
545            ThrownAt:
546               deadflag = 1;
547               CDefArt(noun); " hits the glass and nearly topples it! \
548               A voice from the back of the room says ~Garn! He \
549               nearly ruined a perfectly good glass of ale, he did.~ \
550               The three individuals at the bar turn to you with \
551               angry stares, but before you can respond, some \
552               barbarians pummel you to death for poor bar manners.";
553           Cast:
554              if (the_spell_was == zemdor_spell) {
555                 give Delbins general;
556                 remove self;
557                 Achieved(8);
558                 ! set up three NPCs
559                 ! -- Morgan, fairly easy
560                 move Morgan to Ravine_pass;
561                 ! -- Frobar, a little tougher
562                 move Frobar to FROBAR_Study;
563                 if (Ench_mag in Frobar_mailbox)
564                    move Ench_mag to Frobar;
565                 StartDaemon(Frobar);
566                 ! -- Thief, trickiest
567                 remove Thief;  ! he'll be back
568                 if ((Painting_REAL in Museum_north) &&
569                     (glass_wall notin Museum_north))
570                     move Painting_REAL to THIEF_Storeroom;
571                     ! Thief steals painting (no door left behind!)             
572                 "You quickly make the zemdor chant and watch the glass \
573 of ale start to shimmer! In short time, there are three glasses filled \
574 with ale on the bar!^^\
575 Morgan the Ranger looks suspiciously at Frobar the Enchanter. \
576 ~Is this your doing, wizard?~ Frobar shakes his head. ~Surely not, \
577 you know I can't do magic anymore.~ He glances briefly in your \
578 direction. ~No matter,~ the thief says, and raises a glass. \
579 ~To the spirit of adventure!~ The three down their glasses quickly. \
580 Morgan smiles. ~Now, that's good ale.~ She adjusts her broadsword. \
581 ~I'm off to the Egreth front. Want to help end a war, Frobar?~ \
582 Frobar chuckles. ~Thank you, no. I've got, err, something to do \
583 at home,~ he says and quickly leaves. ~Well, then, what about you, \
584 thief?~ Morgan asks, and notices that the thief has already slipped \
585 away. She shrugs and leaves the bar as well. ~Good hunting!~ Delbin \
586 calls after her.";                
587              }
588              if (the_spell_was == huncho_spell or luncho_spell) 
589 "You begin the chant, but something about it gets the \
590 Enchanter's attention. ~If you have something to say, \
591 why don't you share it?~ With a subtle gesture, the Enchanter \
592 dispels the chant.";
593         ],
594 ;
595
596 Object rag "dirty rag" bar
597    with name "rag" "dirty",
598         description "A slightly dirty cleaning rag.",
599         !weight 5,
600 ;
601
602
603 ! (Flathead stadium)
604
605 Object Stadium_entrance "Entrance to Flathead Stadium"
606    with description "Here stands the entrance into the still \
607            popular Flathead Stadium, home to esoteric \
608            sports activities you never fully understood. \
609            Walkways lie southeast and southwest from here, or \
610            you can enter the stadium to the north.",
611         name "stadium" "walkways" "entrance",
612         sw_to ANTHAR_West,
613         se_to ANTHAR_East,
614         n_to Stadium_top,
615         in_to Stadium_top,
616         before [;
617            Listen:  
618         "You can hear the roars of a good crowd from \
619    inside the stadium. Must be playoff season.";
620            Go:
621               if ((noun==n_obj) || (noun==in_obj))
622                 print "You walk right into the stadium. The ticket-takers \
623                 must be on strike or something.^";
624         ],
625    has light;
626
627 ! (fake stadium entrance, for "past")
628
629 Object Stadium_entrance2 "Entrance to Flathead Stadium"
630    with description "You appear to be in front of Flathead Stadium once \
631 again, however something seems different. Even the stadium itself seems \
632 dissimilar, newer. Walkways lie southeast and southwest from here, or \
633 you can enter the stadium to the north.",
634         name "stadium" "walkways" "entrance",
635         sw_to "A strange feeling compels you to stay.",
636         se_to "A strange feeling compels you to stay.",
637         n_to [;
638             deadflag = 1;
639             "As you head towards the entrance, a mob of crazed fans \
640 rushes out of the stadium (~Isn't that Babe Flathead?~ you hear someone \
641 scream) and tramples you to death.";
642         ],
643         before [;
644            Listen:  
645               "The place is surprisingly quiet.";
646         ],
647    has light;
648
649
650 Object stadium_sign "stadium sign" Stadium_entrance
651    with name "sign",
652         initial "A stadium event sign is pasted to one of the stadium walls here.",
653         description  
654                     "~Today's event:^\
655                         GOLEM FIGHTS!!!^^\
656                         ALL CHALLENGERS WELCOME!!!^\
657                         THREE ROUNDS, THREE BOUTS!^\
658                         BIG CASH FOR THE WINNER!^^\
659                     (All Golems have undefeated records, so^\
660                     only trained golem-wrestlers need apply!)~",
661    has static;
662
663 Object stadium_statue "stadium statue" Stadium_entrance
664    with name "statue",
665         initial "A statue depicting the legendary Babe \
666 Flathead greets all visitors in front of the stadium.",
667         description 
668            "According to the inscription, this statue honors the legendary Babe Flathead.",
669         before [;
670            LookUnder:
671                 if (self has general) 
672                    "Oddly, the statue seems to sit slightly tilted.";
673            Push:
674               if (self has general) {
675                  remove self;
676                  move statue_base to Stadium_entrance;
677                  Achieved(9);
678                  "You give the statue a shove, and it wobbles and falls, \
679 breaking into useless dust! A passing sportsfan notices your act \
680 of vandalism, and says to a friend, ~Look at that. The guy wins one \
681 bout of Golem wrestling, and he thinks he's better than Babe \
682 Flathead.~";  
683               }
684               else "The statue seems to be firmly fixed in place.";
685         ],
686    has static;
687
688 Object statue_base "square hole" Stadium_entrance2
689    with name "hole" "square",
690         describe "In front of the stadium is a square hole.",
691         description "There's a large square hole in the ground near \
692 the front of the stadium.",
693         time_left 0,
694         time_out [;
695 !          move stadium_sign to Stadium_entrance;
696 !          move stadium_statue to Stadium_entrance;
697           print "^You hear voices behind you, and suddenly, a \
698 small crowd of people pass by, pushing a statue.^^\
699 ~Right there,~ someone shouts, and a few people position the \
700 statue into the square hole.";
701           if (children(self) == 0) {
702              print " It fits neatly in place.";
703              remove red_rod_piece;
704           }
705           else {
706              give stadium_statue general;
707              print " It fits, but seems just slightly \
708 tilted.";
709           }
710 !          remove statue_base;
711 !          give Stadium_entrance ~general;
712           Mystical_Cave.number = Mystical_Cave.number + 1;  
713           print "^^~That's perfect,~ you hear a voice say, and \
714 the crowd murmurs in agreement. Why, it's Babe Flathead himself! \
715 He saunters up towards the statue, which is indeed a good \
716 likeness, and starts handing out cigars. ~We'll get to \
717 autographs later,~ he says while lighting your cigar as you \
718 try to protest. Seconds later, the cigar explodes! You see \
719 sparkling stars, which seem to change to purple flashes. You \
720 blink.^";
721           PlayerTo(Mystical_Cave);
722         ], 
723         capacity 1,
724         size 15,
725 has static container open;     
726
727 Object Stadium_top "In Flathead Stadium, upper seats"
728    with description "\
729 You are near the top cheap seats of Flathead Stadium. \
730 The crowd is busy cheering whatever is going on down on the \
731 field. Looking at the field, you see two small dots. The Stadium exit \
732 is back south, or you can walk down to the front seats to \
733 the north.",
734    name "seats" "crowd" "field" "dots" "fans",
735    s_to Stadium_entrance,
736    n_to Stadium_bottom,
737    d_to Stadium_bottom,
738    e_to "You try to push your way through the fans, but fail.",
739    w_to "You climb over a few seats, but the crowd blocks any \
740          further progress west.",
741    before [;
742        Listen:  "The crowd is deafening.";
743    ],
744 has light;
745
746
747 Object Stadium_bottom "In Flathead Stadium, lower seats"
748    with description "\
749 You are near the good seats in Flathead Stadium. \
750 The crowd is busy cheering for the current event on the \
751 field. Looking at the field, you see two large dots. The \
752 seats continue up and south, or you can walk down to the \
753 field below.",
754   name "seats" "crowd" "field" "dots" "fans",
755   s_to Stadium_top,
756   u_to Stadium_top,
757   d_to [;
758      if (burly_man hasnt general)
759 "The burly man jumps out of his seat as you try to pass. \ 
760 ~Hey buddy, I'm saving those seats.~ He points to an entire \
761 row of seats below you. ~I've been waiting all season, and \
762 I don't want an obstructed view, so look for somewhere else to \
763 sit.~ He sits back in his seat.";
764      else return Near_locker_room;
765   ],
766   n_to [;
767      if (burly_man hasnt general)
768 "The burly man jumps out of his seat as you try to pass. \ 
769 ~Hey buddy, I'm saving those seats.~ He points to an entire \
770 row of seats below you. ~I've been waiting all season, and \
771 I don't want an obstructed view, so look for somewhere else to \
772 sit.~ He sits back in his seat.";
773      else return Near_locker_room;
774   ],
775   w_to "You try to push past a couple fans, but the angry looks make you stop.",
776   e_to "You try to push past a couple fans, but the rude looks make you stop.",
777    before [;
778        Listen:  "The crowd is deafening.";
779    ],
780 has light;
781
782 Object Near_locker_room "Near Locker Room"
783    with description "\
784 You are near a locker room under Flathead field. \
785 You can enter the locker room to the north, or start the climb back into \
786 the roaring crowd to the south.",
787    name "crowd" "field" "fans",
788    s_to Stadium_bottom,
789    u_to Stadium_bottom,
790    n_to Locker_room,
791    each_turn [;
792       if (self hasnt general) {
793          give self general;
794          move pale_scroll to Near_locker_room;
795          "^A couple front row fans are getting a bit boisterous. \
796 Several of them throw garbage and paper debris towards the field. \
797 You notice something flutter down by your feet.";
798       }
799    ],
800    before [;
801        Listen:  "The crowd is deafening.";
802    ],
803    has light;
804
805 Object Locker_room "Locker Room"
806    with description "\
807 You are inside a locker room under Flathead field. You can hear the \
808 crowds outside. The room is empty. There is an exit \
809 to the south, and the entrance to the field is to the north.",
810    name "field" "locker" "lockers",
811    n_to Flathead_field,
812    s_to Near_locker_room,
813    before [;
814        Listen:  "You can hear the crowd outside.";
815    ],
816    has light;
817
818 Object Flathead_field "Flathead Field"
819    with description "You're on Flathead field, in front of millions of zany \
820 fans, a lifetime dream. Or not. Well, anyway, \
821 there's a locker room to the south.",
822    name "field" "fans",
823    s_to [;
824        if (self has general)
825 "You head for the showers, but the coach springs out and blocks \
826 your way. ~Come on kid, keep your head in the game.~";
827        else return Locker_room;
828    ],
829    each_turn [ i;
830       if (self has general) {
831          i = random(20);
832          if (i == 1) 
833             "^Someone in the crowd yells out, ~Get him a body bag!~ \
834             We assume he was referring to the golem, not you.";
835          if (i == 5)
836             "^The crowd does 'the wave'.";
837          if (i == 7)
838             "^The crowd waves some strange colorful objects. \
839 Rather distracting.";
840          if (i == 10)
841             "^Someone in the crowd screams ~Flathead that golem!~";
842       }
843    ],
844    before [;
845        Listen:  "The crowd is deafening.";
846    ],
847    has light;
848
849
850
851
852 ! ****************
853 ! People/creatures
854 ! ****************
855
856 Object Christmas_tree_monster "Christmas tree monster" Con_Decor_garden
857    with name "tree" "monster" "Christmas",
858         initial "A Christmas Tree stands in one plot, swaying back and forth.",
859         description "\
860 The Christmas Tree monster has obviously seen some good years. It towers \
861 above you, wrapped with tinsel that sparkles marvelously. The \
862 plastic flamingo ornaments are a rather gaudy touch. Surprisingly, it seems to \
863 have taken root in the soil.",
864         each_turn [ i ;
865            i = random(10);
866            if (i==1) 
867 "^The Christmas Tree Monster belts out a few bars of 'I'm dreaming \
868 of a Black Cavern' arranged by Bing Frozby.";
869            if (i==2)
870 "^The Christmas Tree Monster sings a few measures from Berknip's own \
871 rendition of 'Silent Night', a rather morbid version.";
872            if (i==3)
873 "^The Christmas Tree Monster hums a few notes from 'Dornbeasts \
874 Roasting on an Open Pyre'.";
875            if (i==4)
876 "^The Christmas Tree Monster whistles a part of 'Frosty the Snow Wight'.";
877            if (i==6)
878 "^The Christmas Tree Monster sways in time to 'Let it snow, let it snow, \
879 let it snow'.";
880            if (i==8)
881 "^The Christmas Tree Monster treats you to an abridged version of \
882 Handel's 'Messiah'.";
883         "^The Christmas Tree Monster hums to itself.";  
884         ],
885         before [;
886            Cut:
887               if (hedge_clipper notin player)
888                  "You'll need a gardening implement to do that.";
889               if (self has general)
890                  "The gardener said he'd make you dig for slugs, and \
891                  that doesn't sound too exciting, so let's leave the tree \
892                  alone.";
893               if (self hasnt general) {
894 print "You being to clip a few of the lower branches of the Christmas Tree \
895 Monster, who bellows in pain!^^\
896 Out of nowhere, a short old man appears, wearing full gardener \
897 regalia. He drags your hand away from the tree.^^\
898 ~What are ya trying to do there, kill the thing?~ he says. ";
899                  if ((glasses hasnt moved) || (glasses in Con_Fountain)) {
900                     remove glasses;
901                     remove hedge_clipper;
902 "He pulls \
903 out a pair of glasses and puts it on. ~Say, I don't know you,~ \
904 he says. ~If you want to practice introductory horticulture, do \
905 it in someone else's garden!~ He grabs the clippers from your hands \
906 and stalks off.";
907                  }
908                  else {
909 print "He seems \
910 to be squinting at you. ~Who are you sonny?~ he asks. He starts 
911 searching his pockets. ~Confound it, lost my glasses again.~ ";
912                     if (gardeners_cap hasnt worn) {
913                        remove hedge_clipper;
914 "He squints again, and says, ~Well, whoever you are, the gardens are \
915 for looking at, not practicing landscape design!~ He grabs the \
916 clippers out of your hands and stalks off.";
917                     }
918                     if (gardeners_cap has worn) {
919                        give self general;
920                        Achieved(10);
921 "He looks at you again, and notices your cap. ~You must be one of the \
922 new boys. Here, look, I'm not going to show you twice.~ He takes \
923 the clippers and delicately clips away several lower branches, all \
924 the while singing ~It's beginning to look a lot like Christmas~. \
925 He finishes trimming the tree, leaving a nice opening exposing the \
926 shrub next to it, and stops singing. ~I'm starting to hate \
927 that tune,~ he says under his breath. He hands the clippers back \
928 to you and says, ~Now if I catch you doing this wrong again, I'm \
929 going to make you dig for slugs, understand?~ He disappears as \
930 quickly as he appeared.";
931                    }
932                  }
933               }
934            Cast:
935               "You start chanting, but the tree starts singing \
936               ~Plover the river and frotz the woods~ and you \
937               can't help joining in, ruining your chant.";
938         ],
939         react_before [;
940            Sing:
941               "You song is drowned out by a boisterous chorus \
942               by the tree.";
943         ],
944         life [;
945           Show: 
946              if (noun==toy_volcano)
947                 "The tree abruptly stops singing, and seems \
948 a trifle flustered for some reason. Moments later, it \
949 resumes its chorus.";
950           default: "The tree just keeps on singing.";
951         ],
952    has animate;
953
954 ! (ok, the bush isn't defined as alive.  But it is...)
955 Object dornberry_bush "Dornberry bush" Con_Decor_garden
956    with name "shrub" "bush",
957         initial [; 
958           print "A small shrub sits near and under the Christmas Tree";
959           if (Christmas_tree_monster hasnt general)     
960              ", almost covered by it.";
961           else
962              ".";
963         ],
964         description [;
965                 if (self hasnt general)
966 "The small shrub looks rather poorly tended. Just a few green leaves \
967 distinguish it from the surrounding soil."; 
968                 else
969 "The small shrub looks quite healthy. A cluster of green leaves and \
970 branches make a nice plant. It's still smaller than the tree, though.";
971                 ],
972         capacity 1,
973         before [;
974             Cast:
975              if (the_spell_was == throck_spell) {
976                 if (Christmas_tree_monster hasnt general)       
977 "The shrub seems to shake suddenly! A new leaf grows, searchs for the \
978 sunlight, fails, and withers.";
979                 if ((Christmas_tree_monster has general) &&
980                     (self hasnt general)) {
981                   give self general;
982                   move dornberries to self;
983 "The shrub seems to shake suddenly! A new leaf grows, searchs for the \
984 sunlight, and finds it! Another leaf follows, and soon the shrub is \
985 sprouting new branches. In the sunlight, flowers appear, and a cycle \
986 of missed-out seasons is made-up for in minutes! The shrub is now \
987 quite a thriving plant, covered with tiny red fruit.";
988                 }
989                 if (self has general) 
990                    "The shrub shakes a bit, but the plant remains the \
991                    same. For a Dornberry bush, it's already probably \
992                    the healthiest one you've ever seen.";
993               }
994               Receive:
995                  if (noun ~= dornberries)
996                     "I don't think the shrub can support that.";
997            ],
998    has static supporter;
999
1000 Object dornberries "bunch of dornberries"
1001    with name "dornberries" "berries",
1002         description "A bunch of tasty-looking red berries.",
1003         !weight 5,
1004         size 5,
1005    has edible scored;
1006
1007 ! (moved here so that it shows up 'last' in room descr)
1008 Object plaque "plaque" Con_Decor_garden
1009    with name "plaque",
1010         initial "A small plaque sticks out of the soil near the two plants.",
1011         description [;
1012         print "The plaque reads:^^";
1013         font off;
1014 print "~CHRISTMAS TREE MONSTER               DORNBERRY BUSH^";
1015 print "<Jinglebellus Adnauseam>              <Smallus Shrubus>~^";
1016         font on;
1017         ],
1018 !          ~CHRISTMAS TREE MONSTER               DORNBERRY BUSH^\
1019 !          <Jinglebellus Adnauseous>            <Smallus Shrubus>~",
1020    has static;
1021
1022
1023 ! (Characters in Flathead Stadium)
1024
1025
1026 Object burly_man "burly man" Stadium_bottom
1027    with name "man" "burly",
1028         description "A big man who's apparently into sports.",
1029         before [;
1030   Cast:
1031      if ((the_spell_was == foblub_spell) && (self hasnt general)) {
1032         give self general;
1033         Achieved(11);
1034 "You begin your sermon. The man starts to tell you to knock \
1035 it off, but starts to listen with awe. As you finish, the man \
1036 tries to get up to shake your hand, but realizes he is stuck \
1037 fast. ~They gotta start cleaning these seats,~ he says.";
1038      }
1039       if (the_spell_was == espnis_spell) 
1040          "You begin a description of the 1700 different kinds of \
1041           holy water, but the man seems so enthralled with the \
1042           game below, he just isn't paying attention.";
1043       ],
1044       life [;
1045           Show:
1046            if (noun==trophy)
1047               "~You were amazing pal. Ever think of going pro?~";
1048           Ask:
1049             if (second=='fight' or 'game' or 'fights')
1050                "~It's the three-golem special. One contestant \
1051                versus three golems, one after the other. Great \
1052                stuff.~";
1053           default:
1054             "~Give it a rest pal, I'm watching the game.~";
1055       ],
1056    has animate;
1057
1058 Object coach "tough-looking coach" Locker_room
1059    with name "coach",
1060         description [;
1061 print "An old fellow with bushy eyebrows and \
1062 a gruff demeanor. He's dressed like a sports coach";
1063 if (trophy in self)
1064 ". You also notice he's holding some sort of trophy.";
1065 else ".";
1066         ],
1067         number 1,
1068         each_turn [;
1069             if (self hasnt general) {
1070               if (Flathead_field hasnt general) {
1071                  give Flathead_field general;
1072 print "^The coach looks up and notices you. ~Oh, you must be the \
1073 replacement,~ he says. He drags you over to the field entrance. \
1074 ~Well, I hoped you're warmed up, cuz you're up.~ He shoves you \
1075 north. ~Remember, these guys are tough, so give 'em your \
1076 best stuff.~^";
1077                  PlayerTo(Flathead_field);
1078               }
1079               else {
1080                  print "^The coach looks up and notices you. \
1081 ~Where have you been? The ref was about to default \
1082 it to the golems!~ He shoves you north. ~Now get in there and \
1083 make me proud.~^";
1084                  PlayerTo(Flathead_field);
1085               }
1086             }
1087             if ((self has general) && (coach.number == 1)) {
1088                move win_bag to player;
1089                coach.number = 2;
1090                "^The coach gives you a slap on the back that \
1091 knocks the wind out of you. ~You did it! I didn't think \
1092 you had it in you!~ He hands you a small bag. ~Here's the \
1093 winnings. I went ahead and took out my cut, of course.~^";
1094             }  
1095         ],
1096         life [;
1097            ! essentially, the only chances to do 'life' things
1098            ! will occur when the coach is lingering around 
1099            ! the lockerroom after the match.
1100            Attack:
1101                "~You want a couple rounds with the old man \
1102 too? Well, I'm ready.~ For an old coach, he still looks \
1103 like he's in pretty good shape. You decide against violent \
1104 action.";
1105            Answer: 
1106                "The coach merely nods.";
1107            Ask:
1108                if (second == 'trophy')
1109                   "~It's a beauty all right.~";
1110                if (second == 'winnings' or 'cut') 
1111                   "~It's all there, count it if you want.~";
1112                if (second == 'life' or 'game' or 'sport')
1113                   "The coach looks momentarily reflective. \
1114 ~Life is all about getting into the game,~ he says. \
1115 ~Remember that, it's not about winning or losing, but \
1116 giving it your best shot.~";
1117            Show:
1118              if (noun == cereal1 || 
1119                  noun == cereal2 ||
1120                  noun == cereal3 ||
1121                  noun == cerealbox1 ||
1122                  noun == cerealbox2 ||
1123                  noun == cerealbox3)
1124            "~A bowlful of that each morning is bound to make a \
1125 champion out of you.~";
1126            Order:  
1127 ! *** note2: this seems to contradict documentation,
1128 ! i.e. 'ask coach for trophy' results in noun==trophy and
1129 !       second==(?)coach or player, not the other way
1130 !       around.
1131                if ((action==##Give) && (noun==trophy) && 
1132                    (trophy in self)) {
1133                   move trophy to player;
1134                   remove self;
1135 "The coach looks lovingly at the trophy, and then at you. \
1136 ~Fair enough kid, you earned it.~ he says, and gives it \
1137 to you. ~I've seen a lot of golem-wrestlers in my time, \
1138 but I gotta say, you're the best golem-wrestler I've ever \
1139 seen.~ He leaves the locker room to greet his fans.";
1140                }
1141            default:  "At the moment, it looks like the coach is too busy \
1142                writing a Hall of Fame acceptance speech to \
1143                pay you much attention.";
1144          ],
1145          react_before [;
1146             Cast:
1147               "~What's that you're saying? Speak up, I'm your \
1148 coach, I'm hear to listen.~";
1149          ],
1150    has animate transparent;
1151
1152 Object referee "referee" Flathead_field
1153    with name "referee" "ref",
1154         description "A stout looking man in a funny striped shirt.",
1155         each_turn [;
1156            if (self hasnt general) {
1157               give self general;
1158 "^The ref blows his whistle and says ~Round 1~. The golem, not \
1159 needing any encouragement, jumps into the fray.";
1160            }
1161         ],
1162         life [;
1163            Attack:
1164              "Your opponent is the golem, not the referee.";
1165            Ask:
1166              if (second == 'time' or 'timeout')
1167                 "~Sorry, no timeouts!~ the ref says.";
1168              if (second == 'foul')
1169                 "~It looked good to me.~";
1170              if (second == 'round') {
1171                 if (wood_golem in Flathead_field)
1172                    "~You're in round 1.~";
1173                 if (stone_golem in Flathead_field)
1174                    "~You're in round 2.~";
1175                 if (iron_golem in Flathead_field)
1176                    "~You're in round 3, the final round.~";
1177              }
1178            default: "The ref makes some completely \
1179 bewildering hand signal, that could be an insult, for \
1180 all you know about wrestling. In any event, nothing happens.";
1181         ], 
1182         before [;
1183            Cast:
1184 if (the_spell_was == espnis_spell) {
1185    deadflag = 1;
1186    "You start to relate the advantages of Bingo over Double \
1187 Fanucci to the ref, and sooner that you can say ~Zounds~, the \
1188 ref is fast asleep! Unfortunately, the golem takes advantage of \
1189 this opportunity and breathes poison gas at you! You reflect \
1190 on this display of poor sportsmanship as you slowly lose \
1191 consciousness.";
1192 }
1193         ],
1194    has animate;
1195
1196 ! -- the golems...
1197 !    In general: To be fair, the golems only have a 1 in 30 chance
1198 !    of actually hitting.  When they do hit, however, it's pretty
1199 !    painful.  They also tend to have high HP, although I guess 
1200 !    theoretically, they could be beaten without spells.
1201 !    (note: I've tried this with the iron golem and never
1202 !     succeeded.  The odds are definitely not in the players favor)
1203 Object wood_golem "dangerous-looking wood golem" Flathead_field
1204    with name "golem" "wood",
1205         number 20,
1206         description "\
1207 The wood golem stands at about twice your height, an animated statue \
1208 made completely of wood. He may move like an old cabinet, but \
1209 watch those hands!",
1210         each_turn [ i ;
1211            i = random(13);
1212            if (i == 13)
1213               Player_HP_CUR = Player_HP_CUR - 15;
1214            if (Player_HP_CUR <= 0) {
1215               deadflag = 1;
1216               "^The wood golem jumps forward and flattens you, \
1217               which feels similar to getting hit by a falling \
1218               redwood tree.";
1219            }
1220            if (i == 13)
1221               "^The golem staggers you with a punch that sends you \
1222               reeling!";
1223            if (i == 20)  
1224 "^The wood golem tries to move in for a clinch, and you dance \
1225 away.";
1226            if (i == 10)
1227 "^The wood golem makes a lumbering swing at your head, and misses!";
1228 "^The wood golem makes a swipe for you, and misses.";
1229         ],
1230         before [;
1231           Cast:
1232             if (the_spell_was == egdelp_spell) {
1233                remove self;
1234                move stone_golem to Flathead_field;
1235 "The wood golem is suddenly covered with a waxy buildup! \
1236 Greatly embarrassed, he turns to call foul, and slips! \
1237 With a great thud, the golem hits the turf, and knocks \
1238 himself out cold!^^\
1239 The ref says ~Knockout!~. The crowd cheers in approval.^^\
1240 Several dwarves appear and cart the wood golem off. \ 
1241 Unfortunately, a stone golem soon walks into view!^^\
1242 The coach yells from the doorway ~You're doing great kid, \
1243 just hang in there.~^^\
1244 The ref says ~Round 2!~";
1245             }
1246         ],
1247         life [ i ;
1248           Attack:
1249             i = random(20);
1250             if (i > 10) {
1251                wood_golem.number = wood_golem.number - 1;
1252                if (wood_golem.number <= 0) {
1253                remove self;
1254                move stone_golem to Flathead_field;
1255 "With a thundering blow, you smash the golem into \
1256 kindling!^^\
1257 The ref says ~Knockout!~. The crowd cheers in approval.^^\
1258 Several dwarves appear and cart the wood golem off. \ 
1259 Unfortunately, a stone golem soon walks into view!^^\
1260 The coach yells from the doorway ~You're doing great kid, \
1261 just hang in there.~^^\
1262 The ref says ~Round 2!~";
1263                }
1264                else {
1265                  print "Good shot! You whack the golem, and splinters fly";
1266                  if (wood_golem.number > 10)
1267                     ". It didn't seem to slow him down, though.";
1268                  else ".";
1269                }
1270             }
1271             "You swing, but miss.";
1272         ],      
1273    has animate;
1274
1275 Object stone_golem "fierce-looking stone golem" 
1276    with name "golem" "stone",
1277         number 40,
1278         description "\
1279 The stone golem is quite a towering piece of work. He looks like a crude \
1280 statue made of animated granite. He probably has all the \
1281 finesse of a giant boulder, so don't let him pin ya!",
1282         each_turn [ i ;
1283            i = random(13);
1284            if (i == 13)
1285               Player_HP_CUR = Player_HP_CUR - 20;
1286            if (Player_HP_CUR <= 0) {
1287               deadflag = 1;
1288               "^The stone golem jumps forward and flattens you, \
1289               which feels similar to getting crushed by a giant \
1290               boulder.";
1291            }
1292            if (i == 13)
1293               "^The golem hits you with a punch that sends you \
1294               reeling!";
1295            if (i == 20)  
1296               "^The golem jabs with his left, and misses!";
1297            "^The golem tries to close, and misses.";
1298         ],
1299         before [;
1300           Cast:
1301             if (the_spell_was == tossio_spell) {
1302                remove self;
1303                move iron_golem to Flathead_field;
1304 "The golem is suddenly replaced with a pile of steaming \
1305 linguini alfredo!^^\
1306 The ref yells ~Takeout!~ The crowd goes wild! \
1307 Several dwarves appear and serve the pasta to the crowd \
1308 on platters. Unfortunately, an iron golem soon \
1309 walks into view! ^^\
1310 The coach yells out from the safety of the locker room ~Okay kid, drop \
1311 this golem, and we can celebrate.~^^\
1312 The ref yells ~Round 3!~";
1313             }
1314         ],
1315         life [ i ;
1316           Attack:
1317             i = random(20);
1318             if (i > 10) {
1319                stone_golem.number = stone_golem.number - 1;
1320                if (stone_golem.number <= 0) {
1321                remove self;
1322                move iron_golem to Flathead_field;
1323 "With a thundering blow, you smash the golem into \
1324 gravel!^^\
1325 The ref says ~Knockout!~. The crowd cheers in approval.^^\
1326 Several dwarves appear and cart the stone golem off. \ 
1327 Unfortunately, an iron golem soon walks into view!^^\
1328 The coach yells out from the safety of the locker room ~Okay kid, drop \
1329 this golem, and we can celebrate.~^^\
1330 The ref yells ~Round 3!~";
1331                }
1332                else {
1333                  print "Solid blow! Stone chips fly.";
1334                  if (stone_golem.number > 10)
1335                     ". It didn't seem to slow him down, though.";
1336                  else ".";
1337                }
1338             }
1339             "You swing, but miss.";
1340         ],      
1341    has animate;
1342
1343 Object iron_golem "deadly-looking iron golem" 
1344    with name "golem" "iron",
1345         number 50,
1346         description "\
1347 The iron golem resembles a huge nightmare made out of iron. \
1348 Towering at least 30 feet high, this animated iron statue isn't \
1349 something you'd want to meet in a dark alley, much less \
1350 in an arena filled with screaming fans.",
1351         each_turn [ i ;
1352            i = random(13);
1353            if (i == 13)
1354               Player_HP_CUR = Player_HP_CUR - 30;
1355            if (Player_HP_CUR <= 0) {
1356               deadflag = 1;
1357               "^The iron golem jumps forward and flattens you, \
1358               which feels similar to getting mashed by a giant \
1359               block of iron. Oww.";
1360            }
1361            if (i == 13)
1362               "^The golem staggers you with a punch that sends you \
1363               reeling! That felt quite painful.";
1364            if (i == 20)  
1365              "^The golem tries to flatten you, and you evade just in time!";
1366            "^The golem tries to step on you, and you dodge.";
1367         ],
1368         before [;
1369           Cast:
1370             if (the_spell_was == bekdab_spell) {
1371                remove self;
1372                remove referee;
1373                give Flathead_field ~general;
1374                give coach general;
1375                move trophy to coach;
1376                Achieved(12);
1377 "The golem suddenly develops many unsightly patches of rust. \
1378 Mortified, the golem calls for his oil trainer, but to no \
1379 avail! It soon falls apart into several rusty metal pieces!^^\
1380 The ref calls out ~The winner!~ and holds your hand aloft. \
1381 The crowd is on its feet! They'd probably be chanting your \
1382 name, if they knew it.^^\
1383 Several dwarves appear and drag off the rusty metal plates. \
1384 The ref explains that the prize money and a championship \
1385 trophy will be awarded in the \
1386 locker room, and exits.";
1387             }
1388         ],
1389         life [ i ;
1390           Attack:
1391             i = random(20);
1392             if (i > 10) {
1393                iron_golem.number = iron_golem.number - 1;
1394                if (iron_golem.number <= 0) {
1395                remove self;
1396                remove referee;
1397                give Flathead_field ~general;
1398                give coach general;
1399                move trophy to coach;
1400                Achieved(12);
1401 "With a thundering blow, you smash the golem into \
1402 ball-bearings.^^\
1403 The ref calls out ~The winner!~ and holds your hand aloft. \
1404 The crowd is on its feet! They'd probably be chanting your \
1405 name, if they knew it.^^\
1406 Several dwarves appear and collect the ball-bearings. \
1407 The ref explains that the trophy will be awarded in the \
1408 locker room, and exits.";
1409                }
1410                else {
1411                  print "Solid blow! You make a small dent.";
1412                  if (iron_golem.number > 10)
1413                     ". It didn't seem to slow him down, though.";
1414                  else ".";
1415                }
1416             }
1417             "You swing, but miss.";
1418         ],      
1419    has animate;
1420
1421 ! (Three important NPCs)
1422
1423 Object Morgan "Morgan the Ranger" Delbins
1424    with name "ranger" "warrior" "Morgan" "captain" "maiden",
1425         number 1,
1426         initial [;
1427              if (self in Delbins)
1428                 "There's a warrior-maiden sitting at the bar, her \
1429 eyes riveted to the glass of ale.";
1430              else 
1431              "Morgan the Ranger is here.";
1432         ],
1433         description "She's nearly twice your height, and \
1434 probably twice your strength too. She's armed and armored in \
1435 typical military Ranger gear. She gives you the impression of \
1436 being the type who'd hunt dragons as a hobby -- assuming there were \
1437 any dragons left to hunt, of course.",
1438         each_turn [;
1439            if ((self in Ravine_pass) && (Morgan.number == 1)) {
1440               Morgan.number = 2;
1441               "^The Ranger sees you approach and recognizes you. \
1442               ~Well met again, Priest. I have need of your \
1443         assistance to end the kobold border war that has been going \
1444         on far too long.~ She pauses. ~To the \
1445         west and east are two of my lieutenants and their \
1446         soldiers, cut off from the rest of us by previous kobold \
1447         raids. I have the power to end this war and call a truce, \
1448         but to do so, I need \
1449         to inform both of my lieutenants to \
1450         stop fighting via \
1451         windcat message carriers.~ She points to the two windcats \
1452         in the wicker cage and the pile of colored flags. \
1453         ~The 'red' flags indicate 'attack', the \
1454         'blue', truce. When my lieutenants receive the instructions, \
1455         they will verify my commands by sending additional messengers \
1456         with 'attack' or 'truce' instructions to each other. \
1457         Based on the two \
1458         received messages, each lieutenant will act accordingly.~ \
1459         She slaps you on the back, jolting you to attention. \
1460         ~Herein lies my problem, Priest. I know for a fact, that \
1461         one of my lieutenants is a traitor, who will \
1462         disobey my orders. Any instruction I send to the traitor, \
1463         the opposite will be sent by the traitor to my remaining \
1464         good lieutenant. The traitor will also take the two orders \
1465         he receives and do the opposite, if there is a majority, or \
1466         attack outright, if there are messages of 'truce' and 'attack'. \
1467         Thankfully, my good lieutenant will faithfully copy my \
1468         instructions to the other lieutenant, and will follow orders \
1469         received, if there is a majority, or follow a 'truce' if \
1470         there are mixed messages. My greatest problem, Priest, is that \
1471         I do not know which lieutenant is the traitor! If you \
1472         can bring peace once and for all to Southern Egreth, many \
1473         will remember your good deeds.~";
1474          } 
1475         ],
1476         life [;
1477             Answer:
1478                if (special_word == 'hello') {
1479                   print "~Hello";
1480                   if (Morgan.number == 2)
1481                      print " again";
1482                   ", priest.~";
1483                }
1484             Attack, ThrowAt:
1485                "She's well-armed and probably dangerous.";
1486             Give, Show:
1487                "A gracious gesture, perhaps, but she isn't \
1488 interested.";
1489             Kiss:
1490                "She nearly splits your skull with the flat of \
1491 a huge broadsword before you even get close. ~For a man of \
1492 the cloth, you've got a lot of nerve,~ she says.";
1493             Ask:
1494                if (((second == 'cat') || (second=='cats') ||
1495                     (second == 'windcat') || (second=='windcats')) &&
1496                    (Morgan.number == 2))
1497                 "~Right, the windcats. \
1498                 The speckled cat will find the lieutenant to the east. \
1499                 The spotted cat will find the lieutenant to the west.";
1500                if (second == 'frobar' or 'wizard' or 'enchanter') {
1501                   print "She laughs. ~You've never heard of \
1502 Frobar, the dullest Enchanter? The Enchanter who was so dull \
1503 that his fellow wizards forgot to invite him to the last \
1504 great meeting? This saved him from becoming an amphibian, so \
1505 perhaps dullness has its virtues";
1506                   if (self in Delbins)
1507                      ".~ The wizard looks rather insulted. \
1508 ~Oh hush up, Morgan.~ the wizard says.";
1509                   else ".~";
1510                }
1511                if (second == 'thief' or 'gentleman') {
1512                   print "She smiles. ~I can't say as I know \
1513 much about ";
1514                   if (self in Delbins)
1515                      "this fellow over here,~ she says and \
1516 gives the gentleman a whack on the back that nearly knocks his \
1517 teeth out. ~But I hear he's something of a thief.~ ~Nothing \
1518 of the sort!~ the gentleman protests.";
1519                   else 
1520                      "that thief fellow. I've been told \
1521 he has a hideout somewhere, nearly impossible to find.~";
1522                }
1523                if (second=='kobold' or 'war')
1524 "~The war wages on, priest, even though the battle was lost \
1525 long ago, and there were no winners, kobold or man.~";
1526                if (second=='dragon' or 'dragons')
1527 "Morgan becomes momentarily thoughtful. ~Some of the best \
1528 dragon-hunting I ever did was up in Frostham long ago. \
1529 Those white frost dragons are quite a vicious lot. Best not \
1530 to wake a sleeping white dragon unless you have a weapon handy \
1531 and know how to use it!~";
1532             else "~Sorry, I'm not sure about that.~";
1533             default: "Morgan the Ranger appears to be \
1534 thinking important thoughts at the moment.";
1535         ],
1536         before [;
1537             Cast:
1538                "~What's that you're mumbling there priest?~";
1539         ],
1540    has animate female proper;
1541
1542 Object  Frobar "Frobar" Delbins
1543  with   name "Frobar" "wizard" "sorcerer" "enchanter",
1544         initial [;
1545            if (self in Delbins)
1546            "There's an old wizard sitting at the bar, his \
1547 eyes riveted to the glass of ale.";
1548            else "Frobar the Enchanter is here.";
1549         ],
1550         description "A wizardly old figure of a man.",
1551         life [;
1552          Attack, ThrowAt:
1553          "You make a threatening move. The wizard practically yawns! \
1554 ~Just what the world needs, another violent Priest.~ You stop, \
1555 somewhat embarrassed.";
1556          Answer:
1557             if (special_word=='hello')
1558                "The wizard nods. ~Hello, hello, and all that rubbish.~";
1559          Ask:
1560             if (self in Delbins)
1561                "The wizard is somewhat occupied at the moment.";
1562             else {
1563                if (second=='magic' or 'mystic') {
1564                   print "Frobar scowls. ~Magic? We've seen the last \
1565 of magic, let me tell you. Does anyone remember what it did \
1566 for us? Does anyone mention the Enchanters that saved Quendor \
1567 from certain ruin many a time? Of course not. A bunch of \
1568 ingrates";
1569 if (term_paper notin self)
1570 ". I just hope they're teaching the kids at Tech what magic \
1571 was all about, before we got all this 'new science' stuff everyone's \
1572 blabbering about.~";                     
1573 else ".~";
1574                }
1575                if (second=='golem' or 'golems')
1576 "Frobar sighs. ~Golems used to be useful, you know. But now, \
1577 without magic to control them, they go off and get into all \
1578 sorts of mischief.~";               
1579                if (second == 'thief' or 'gentleman') 
1580                   "~Some fellow I've had some dealings with \
1581 in the past. Not a bad chap, but he does like to \
1582 supplement his income, if you know what I mean. Far \
1583 too risky a profession for my taste.~";
1584                if (second == 'morgan' or 'ranger' or 'warrior')
1585                   "~Morgan Grueslayer, top military Ranger \
1586 in her graduating class, I hear. If she asks you to join \
1587 her on one of her campaigns, just walk away. All that \
1588 fighting -- too stressful if you ask me.~";
1589                if (second == 'barsap' or 'snaboz')
1590 !"~I don't even want to talk about it.~";
1591 "~Don't even get me started.~";
1592             }
1593          Show:
1594             if (self in Delbins)
1595                "The wizard is somewhat occupied at the moment.";
1596             if (noun == Ench_mag) {
1597                move Ench_mag to Frobar;
1598                "Frobar snatches the magazine out of your hands. \
1599                ~What are you doing with my mail?~ he says, irritated.";
1600                }
1601             if (noun has is_scroll) 
1602                "~A magic scroll, eh? Doesn't do me a lot of good \
1603 these days.~";
1604             if ((noun has is_rod) || (noun has is_sphere)) {
1605                print "Frobar looks at ", (the) noun;
1606                " for a moment. ~Something \
1607 more than meets the eye here. Couldn't tell you what, though.~";  
1608                } 
1609             if (noun==wood_book)
1610                "~So, you're a carpenter too?~ Frobar says, somewhat \
1611                sarcasticly.";
1612             if ((noun==term_paper) && (glossy_scroll in self))
1613             {
1614                FrobarGetsPaper();
1615             }            
1616             "~Hmm. Not very interesting.~";                
1617
1618          Give:
1619             if ((noun==term_paper) && (glossy_scroll in self))
1620             {
1621                if (self notin Delbins)
1622                FrobarGetsPaper();
1623                else "The wizard pushes your offering aside. \
1624 ~I'm somewhat busy at the moment,~ he says, his eyes glued to \
1625 the glass of ale.";
1626             }            
1627             if (noun == Ench_mag) {
1628                move Ench_mag to Frobar;
1629                "Frobar grabs the magazine. \
1630                ~What are you doing with my mail?~ he says, irritated.";
1631                }
1632             "~No, thank you.~";
1633             
1634          default: "~I'm rather busy at the moment.~";
1635         ],
1636         each_turn [ i ;
1637             ! Handle Frobar's actions here...ALWAYS CHECK PARENT AND LOCATION
1638             
1639             if ((self in location) && (player in FROBAR_Bed)) {
1640                print "Frobar seems annoyed. ~Get out of my bed!~ he says, \
1641                and drags you to your feet. ";
1642                <<Exit>>;
1643             }
1644                          
1645             ! Misc housekeeping actions...
1646             if (random(3) < 3) {
1647             if ((frobar_plant in parent(self)) && (self in location)) 
1648                 print "^Frobar tends to the plant.^";
1649             if (FROBAR_Bed in parent(self) && self in location) 
1650                 print "^Frobar arranges some quilts on the bed.^";            
1651             if (FROBAR_shelves in parent(self) && self in location) 
1652                 print "^Frobar pulls a book off the shelves, glances through it, and puts it back.^";
1653             if (parent(self) == FROBAR_Lounge && self in location) 
1654                 print "^Frobar dusts the furniture a bit.^";
1655             }
1656             
1657            ! Random self mutterings...
1658            i = random(5); 
1659            if (self in location && self notin Delbins) {
1660               switch(i) {
1661               1 : "^Frobar mutters to himself, ~They didn't even invite \
1662            me to the Last Enchanter's Guild Meeting.~";
1663               2 : "^Frobar mutters to himself, ~Good old dependable Frobar. Bah!~";
1664               3 : if (Ench_mag in self)
1665                   "^Frobar leafs through a magazine he holds. ~What happened to \
1666                   Barsap? Hah! Did they ask me? No, of course not.~";
1667                   else
1668                   "^Frobar checks his pockets. ~What did I do with this \
1669                   month's 'Enchanter Monthly'?~ he muses outloud.";
1670               default: rtrue;
1671               }
1672            }
1673         ],
1674         daemon [ i j k Mdest Mdir;
1675             ! This daemon will only deal with NPC movement...
1676             ! (no doors either)
1677             if (random(3) ~= 1) rfalse;  ! doesn't always immed. move
1678             
1679             ! Count the available exits quickly
1680             objectloop(i in Compass)
1681                 if (ZRegion(parent(self).(i.door_dir)) == 1)
1682                     k ++;
1683             if (k == 0) rtrue;  ! no exits...
1684             
1685             ! Pick a place to move to.
1686             ! In Frobar's case, most of the time he only has one exit.
1687             ! Also, we can block the sw exit of home here.
1688             if (parent(self) == FROBAR_Foyer) {
1689                Mdir = n_obj;
1690                Mdest = FROBAR_Parlor;
1691                MovePrintNPC(Frobar,Mdest,Mdir);                 
1692                rtrue;
1693             }   
1694                         
1695             ! Pick an exit at random and attempt to travel that way
1696             j = random(k); k = 0;
1697             objectloop(i in Compass) {
1698                 if (ZRegion(parent(self).(i.door_dir)) == 1) {
1699                     k ++;
1700                     if (k == j) {              
1701                         Mdir = i;          
1702                         Mdest = parent(self).(i.door_dir);
1703                         MovePrintNPC(Frobar,Mdest,Mdir);  
1704                         rtrue;                      
1705                     }
1706                 }
1707             }
1708         ],
1709   has animate proper;
1710
1711 [ FrobarGetsPaper ;
1712     Achieved(24);
1713     move term_paper to self;
1714     move glossy_scroll to player;
1715     "Frobar glances over the term paper and his eyes widen. \
1716 ~Wilbur -- why, that's my great nephew!~ He takes the paper and \
1717 reads. ~So true, so true,~ he mumbles and smiles. ~A fine boy, \
1718 perhaps he'll become a great man someday, if he stops skipping class. \
1719 He reminds me of my days at Tech -- all filled with dreams and hopes.~ \
1720 He pauses, and searches his pockets. ~I even perfected a spell, did \
1721 you know? Good old loyal, boring Frobar perfected a spell, and, \
1722 if it hadn't been for that Snaboz show-off who had to go and perfect the \
1723 izyuk spell, I might have even tried to publish mine.~ He finds a \
1724 scroll amongst his robes and hands it to you. ~You don't believe me? Here, \
1725 see for yourself.~";            
1726 ];
1727
1728 Object Thief "thief" Delbins
1729    with name "thief" "character" "gentleman",
1730         number 1,
1731         initial [;
1732             if (self in Delbins)
1733                "There's a gentleman dressed in black sitting at the \
1734 bar, his eyes riveted to the glass of ale.";
1735         ],
1736         description "A lean crafty-looking individual, dressed mostly \
1737 in black. He seems a bit too scruffy to be a nobleman, but also \
1738 a bit too distinguished to be a common thug. Probably a thief, I'd \
1739 guess.",
1740         life [;
1741          Attack, ThrowAt:
1742          "You make a threatening move, but the thief seems to \
1743 move twice as fast! You find yourself looking at the sharp end \
1744 of a stiletto. ~I'm too much of a gentleman to harm a Priest,~ \
1745 the thief says, ~so don't force me to make an exception.~";
1746          Answer:
1747            if (special_word == 'hello')
1748               "The gentleman gives a sharp nod in your direction.";
1749          Ask:
1750            if (second == 'magistrate')
1751 "The thief gives you a knowing nod. ~The Aragain magistrate? \
1752 A honorless cur, if I ever saw one.~";
1753            if (second == 'painting')
1754 "The thief shrugs. ~I hear there's a nice new painting on \
1755 exhibit at the royal museum. You might want to check it out.~";
1756            if (second == 'lock' or 'locks')
1757 "The thief shrugs. ~Do I look like a locksmith?~";
1758
1759          Give:
1760            if (noun has is_coin || noun==trophy) {
1761               move noun to Thief;
1762               "Confused, the thief pockets your offering. \
1763 ~Quite generous of you, sir.~ he says.";
1764            } 
1765
1766           default: "The gentleman glances at you with \
1767 dark suspicious eyes.";
1768         ],
1769         before [;
1770             Cast:
1771                "You speak the chant perfectly, but nothing \
1772 seems to happen! The gentleman smiles and pats his dark cloak, \
1773 which seems to glow briefly with mystic energy, then fade!";
1774         ],
1775    has animate;
1776
1777 Object thief_cloak "dark cloak" Thief
1778    with name "dark" "cloak",
1779         description "A coal-black cloak, which blends into \
1780 the surrounding shadows.",
1781 before [;
1782             Cast:
1783                "You speak the chant perfectly, but nothing \
1784 seems to happen! The gentleman smiles and pats his dark cloak, \
1785 which seems to glow briefly with mystic energy, then fade!";
1786         ],
1787 has clothing;        
1788
1789 Object Delbin "Delbin" Delbins
1790    with name "Delbin" "bartender" "owner",
1791         number 1,
1792         initial "Delbin himself is standing behind the bar.",
1793         description "Delbin is a stout bald fellow with laughing eyes and \
1794 a heavy beard. He somehow seems both young and old at the same \
1795 time.",
1796         each_turn [ ;
1797            if (random(20) == 1)
1798               "^Delbin cleans some glasses behind the bar.";
1799         ],
1800         react_after [;
1801            Take:
1802               if (noun == headdress)
1803                 "~You're welcome to that unsightly thing, sir. \
1804 Been trying to get rid of it for sometime.~";
1805               if (noun == rag)
1806                 "Delbin give you a curious look, \
1807 but says nothing.";
1808         ],
1809         life  
1810         [ i ;
1811            Attack, Kiss, ThrowAt:  "Leave good old Delbin alone.";
1812            Answer:
1813               if (special_word == 'hello')
1814                  "~Welcome to Delbin's, good sir.~";
1815            Give:
1816               if (noun has is_coin) {
1817                  print "Delbin refuses your offering. \
1818 ~Keep your change, sir. If you're looking for a good tip, \
1819 I can tell you what I hear.~^^";
1820                  <<Ask Delbin 'rumor'>>;
1821               }
1822               if (noun == rag) {
1823 move rag to bar;
1824 "Delbin takes the rag and cleans a spot on the bar, leaving \
1825 it in a familiar place.";
1826               }
1827               "Delbin politely refuses.";
1828            Show:
1829               if (noun == headdress)
1830 "~There's a good story behind that ugly thing. Maybe if you \
1831 keep reminding me, I'll remember it.~";
1832            print "~A nice ", (name) noun;
1833            " you've got yourself there.~";
1834            Ask:
1835               if (second == 'ale' or 'situation') {
1836                  if (Morgan in Delbins) 
1837                     "~Quite a situation we've got sir. Those three at \
1838 the front of the bar all ordered a glass of Special Borphee Ale. Well, \
1839 with the shutdown of the Brewers Guild in Borphee since the Great \
1840 Change, I can't keep that particular beverage in stock, but I've got \
1841 that one left there. Seems none of them's leaving until they decide \
1842 who gets the ale -- and let me tell you, those three are folks who \
1843 don't like to be disappointed!~";
1844                  "Delbin smiles. ~All out of ale sir. But I suppose \
1845 ye already knew that?~";
1846               }
1847               if (second == 'rod')
1848                  "Delbin shrugs. ~Sounds vaguely familiar sir, \
1849 maybe I heard a rumor about it once. Can't really say, though.~";
1850               if (second == 'headdress')
1851 "~There's a good story behind that ugly thing. Maybe if you \
1852 keep reminding me, I'll remember it.~";
1853               if (second == 'rag')
1854 "~Not much more than a rag, sir.~";
1855               if (second == 'minirva')
1856                  "~I think that's the name of some old \
1857 Antharian Sea Goddess. Like a patron saint to sailors, in \
1858 the old days.~";
1859               if (second == 'morgan' or 'warrior' or 'ranger')
1860                  "~Morgan Grueslayer's a skilled ranger.~";
1861               if (second == 'frobar' or 'wizard' or 'enchanter')
1862                  "~Frobar's probably one of the last \
1863 enchanters around. He's a regular here.~";
1864               if (second == 'thief' or 'gentleman')
1865                  "~Don't really know that fellow's name. \
1866 He tips well, though.~";
1867               if (second == 'rumor' or 'rumors' or 'story') {
1868                  i = random(7);
1869                  print "Delbin scratches his ear and says, \
1870 ~Yes, now, what did I hear...~^^";
1871                  if (i==1)
1872                     "~People tell me this new Flathead king is \
1873 a fake, plain and simple. Hasn't stopped people from trying to \
1874 get on his good side, though. Now, I haven't seen the fellow \
1875 myself, but if you ask me, somebody somewhere is up to no good.~";
1876                  if (i==2)
1877                     "~They say the kobold war up north is gonna \
1878 end real soon. I'll believe that when it happens.~";
1879                  if (i==3) {
1880                     print "~Oh, this one's a good one.";
1881                     if (headdress in Delbins)
1882                        print " You see that headdress over there? \
1883 Well, this explorer fellow left it here, along with quite a story. \
1884 He";
1885 else print " Some explorer fellow";
1886 " claimed he found some lost ancient city in the Miznia \
1887 jungles. Said he made a map to the place, but lost it when bargaining \
1888 for his life with some jungle natives. I just nodded and let \
1889 the poor man talk.~";
1890                  }
1891                  if (i==4)
1892                     "~This crazy-looking old fellow stops in \
1893 the other day. Said that he was a professor, at GUE Tech, but \
1894 that he was giving that all up! Something about his \
1895 research going bad, on something he called 'an ethereal gate'. \
1896 What all of that means, I can't say.~";
1897                  if (i==5)
1898                     "~Say, you sorta remind me of this other Priest \
1899 fellow who stopped by here a long long time ago. Delbin \
1900 never forgets, you know? This fellow, who didn't give a name, \
1901 told me he was on an important \
1902 quest for something called -- now what was it -- 'The \
1903 Rod of the Ancients', or something like that. That \
1904 mean anything to you?~";
1905                  if (i==6) {
1906                     print "~An artist friend of mine tells me that \
1907 this new Leonardo Flathead painting they've recently discovered \
1908 on display at the Royal Museum has a special secret. They \
1909 say that Leonardo painted over something else under the canvas, but no one's \
1910 saying what. They're keeping a watchful eye on it too, just \
1911 in case curiosity gets the better of some folk. In fact, \
1912 I hear they've already had a few people trying to steal the \
1913 thing";
1914    if (Thief in Delbins)
1915       "!~ The thief suddenly starts to cough, and controls himself.";
1916    else "!~";
1917                  }
1918              ! Add further rumors here...
1919                  "Delbin shrugs. ~Guess I'm getting old, \
1920 nothing comes to mind at the moment. Maybe if you \
1921 give me a moment, I'll think of something.~";
1922               }
1923         ],
1924         before [;
1925            Cast:
1926 if (the_spell_was == foblub_spell)
1927    "You relate a fine sermon to Delbin about spirits -- \
1928 both the liquid kind and the not-so-liquid kind. Were \
1929 Delbin sitting rather than standing behind the bar, \
1930 he might even be glued to his seat by now. ~A fine \
1931 speech there, reverend.~";
1932 if (the_spell_was == espnis_spell)
1933    "You relate a dull sermon to Delbin about the various \
1934 types of wood casks used in brewing Mithicus beer. \
1935 Delbin, being a bartender, is a good listener, and \
1936 manages to stay awake.";
1937         ],
1938    has animate proper;
1939
1940 ! ****************
1941 ! spells/scrolls
1942 ! ****************
1943
1944 Object musty_scroll "musty scroll" telescope
1945   class scroll_class,
1946   with name "musty",
1947 ;
1948
1949 Object fiznav_spell "make boat sea-worthy" musty_scroll
1950   class spell_class,
1951   with name "fiznav",
1952        magic [;
1953           if (second has animate)
1954              "Your chant goes unanswered. It's not intended for \
1955               living creatures.";
1956           else 
1957              "Your chant goes unanswered. It's intended for boats apparently.";
1958        ],
1959 ;
1960
1961 Object pale_scroll "pale scroll" 
1962   class scroll_class,
1963   with name "pale",
1964 ;
1965
1966 Object shazok_spell "call lightning from storm" pale_scroll
1967   class spell_class,
1968   with name "shazok",
1969        magic [;
1970              if (second==0 && location==GURTH_Forest) {
1971                 <<Cast shazok_spell storm1>>;
1972              }
1973              "Your chant goes unanswered. You need a genuine \
1974 natural storm, I suppose.";
1975        ],
1976 ;
1977
1978 Object glossy_scroll "glossy scroll" Frobar
1979    class scroll_class,
1980    with name "glossy"
1981 ;
1982
1983 Object feeyuk_spell "allow creature to resist gravity" glossy_scroll
1984    class spell_class
1985    with name "feeyuk",
1986         magic [;
1987            if ((second == 0) || (second hasnt animate))
1988               "The chant backfires, and your feet feel numb!";
1989            if (second == player) {
1990               has_resist_gravity = 1;
1991               StartTimer(self,75);
1992               "You speak the chant in clear tones. Initially, you \
1993 feel no different. And then, strangely, your back feels better \
1994 than it has in years, and your step seems lighter!";
1995            }
1996            CDefArt(second);
1997            " is no doubt thankful for the power to resist gravity.";
1998         ],
1999         time_left 0,
2000         time_out [;
2001             has_resist_gravity = 0;
2002             "You feet feel heavy again."; 
2003         ],
2004
2005
2006 ! **********
2007 ! Misc objects
2008 ! **********
2009
2010 Object trophy "trophy"
2011    with name "trophy",
2012         description "A lovely gold and platinum grail-like trophy that looks \
2013           very antique. The letter ~D~ is inscribed on the side. \
2014           You notice three odd bumps on the bottom of the circular base.",
2015         !weight 20,
2016         size 8,
2017 !        capacity 1,
2018 !        before [;
2019 !           Receive:
2020 !              if (noun hasnt is_sphere)
2021 !                 "That doesn't seem to fit.";
2022 !              ! else fancy light tricks
2023 !        ],
2024    has scored;
2025 ! container open transparent;
2026
2027 Object win_bag "bag"
2028    with name "bag",
2029         description "A small cloth bag.",
2030         capacity 50,
2031         !weight 10,
2032         size 15, 
2033    has container open;
2034
2035 Object c20 "coin" win_bag class coin_class;
2036 Object c21 "coin" win_bag class coin_class;
2037 Object c22 "coin" win_bag class coin_class;
2038 Object c23 "coin" win_bag class coin_class;
2039 Object c24 "coin" win_bag class coin_class;
2040 Object c25 "coin" win_bag class coin_class;
2041 Object c26 "coin" win_bag class coin_class;
2042 Object c27 "coin" win_bag class coin_class;
2043 Object c28 "coin" win_bag class coin_class;
2044 Object c29 "coin" win_bag class coin_class;
2045 !Object c30 "coin" win_bag class coin_class;
2046
2047