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