2 ! ****************************************************************
4 ! -- Add-on for SPIRITWRAK
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.
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.
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 ! ****************************************************************
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,
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 \
38 name "roadway" "stadium" "pub",
43 ne_to Stadium_entrance,
44 cant_go "You walk around the area, take in the local scene, and \
45 find yourself back here.",
47 Smell: "You can smell scents of local cooking coming \
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",
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.",
67 Smell: "You smell rather nice floral scents coming \
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",
84 Object telescope "viewing telescope" ANTHAR_Waterfront
85 with name "telescope" "viewing" "scope",
87 when_closed "There's a viewing telescope here, attached to the railing.",
89 print "There's a viewing telescope here, attached to the \
90 railing. One of the lenses seems loose";
91 if (children(self) == 0) ".";
93 print ". Inside you see:^";
94 x = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT;
95 WriteListFrom (child(telescope), x, 1); rtrue;
98 description "A nice tourist toy. Perfect for getting a good view.",
100 Open: print "You pry loose a lens. ";
101 Close: print "You push the lens back in place. ";
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 \
110 " and see a ship in the distance! Wait, perhaps not. \
112 " and see a nice expanse of the Great Sea.";
117 has static container openable;
119 ! (Conservatory gardens)
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 \
126 name "greenhouse" "greenhouses",
128 ne_to Con_Desert_garden,
129 se_to Con_Flower_garden,
131 Smell: "You can smell floral scents from the southeast.";
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,
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 \
155 name "perfume" "entrance" "trail" "greenhouse",
156 nw_to Conservatory_entrance,
157 e_to Con_Jungle_garden,
158 n_to Con_Decor_garden,
161 Smell: "The bouquet of flowers is quite intoxicating.";
165 Nearby flowers "flowers"
166 with name "flowers" "flower" "garden",
167 description "A lovely assortment of flowers.",
169 Take: "Don't pick the flowers.";
171 if (the_spell_was == throck_spell)
172 "Suddenly, a few more flowers spring out of the \
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,
185 Nearby toolshed "toolshed"
186 with name "toolshed" "shed",
187 description "A plain toolshed.",
191 when_closed "A toolshed stands closed against the wall.",
193 print "The toolshed is open. ";
195 if (x == 0) "It is empty.";
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);
202 has static container openable lockable locked;
205 Object gardeners_cap "cap" toolshed
207 description "A cap with an odd green emblem stitched on \
208 the front that looks like a clover.",
211 Object hedge_clipper "hedge clipper" toolshed
212 with name "clipper" "clippers",
213 description "Basically a long pair of scissors.",
216 Object rubber_gloves "rubber gloves" toolshed
217 with name "gloves" "pair" "rubber",
219 description "A pair of yellow rubber gloves, slightly \
220 worn. Good for gardening, or washing dishes, I suppose.",
224 ! (cracked -- magic has questionable source, doesn't always work)
225 Object p3 "cracked parchment" toolshed
226 class parchment_class,
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! \
239 Object Con_Decor_garden "Decorative Plants Garden"
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,
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.",
254 w_to Con_Desert_garden,
258 Nearby plants1 "plants"
259 with name "plants" "plant" "tree" "forest",
260 description "You are reminded of a hiking trip you took once.",
263 if (the_spell_was == throck_spell)
264 "The forest seems a bit livelier now.";
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.",
274 w_to Con_Flower_garden,
277 if (waterfall hasnt general)
278 "You can't go that way.";
279 else return Con_Nursery;
282 Smell: "You smell flowers to the west.";
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.",
292 if (the_spell_was == throck_spell)
293 "The jungle seems a bit livelier now.";
297 Object waterfall "small waterfall" Con_Jungle_garden
298 with name "waterfall" "fall" "falls",
300 if (self hasnt general)
301 print "A nice little waterfall enhances the jungle \
304 print "A fake waterfall hides a passage";
309 if (self has general) print " fake";
310 " waterfall drops out of a mock-stucco \
314 Pull, Push, Touch, Search, Rub:
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!";
323 move noun to Con_Jungle_garden;
324 CDefArt(noun); ", to your surprise, literally \
325 bounces off the waterfall, and lands with a thump \
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,
340 Object smallpot "small flower pot" Con_Nursery
342 description "A small red-ceramic flower pot, \
343 ideal for small plants, I suppose.",
346 if ((location == Con_Nursery) && (self hasnt general)) {
348 move shed_key to Con_Nursery;
349 print "Moving the pot uncovers a small key hidden \
351 if (action==##Push) rtrue; else rfalse;
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.";
359 if ((the_spell_was == huncho_spell or luncho_spell) &&
360 (self hasnt general)) {
362 move shed_key to Con_Nursery;
367 has container open transparent;
370 Object Con_Fountain "Fountain"
371 with description "A tasteful fountain intercepts a north-south \
374 n_to Con_Forest_garden,
375 s_to Con_Jungle_garden,
378 "^You hear someone whistling nearby, but there doesn't \
379 seem to be anyone around.";
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.",
390 if (self hasnt general) {
393 "You fish in the fountain for a bit and find a coin!";
396 print "Mostly wet plant debris";
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;
405 if (noun has is_coin)
406 print "Hoping for a little luck, I presume?";
410 has scenery container open;
412 Object glasses "pair of glasses" Con_Fountain
414 initial "It looks like someone left their glasses here.",
415 description "Thick lenses and a heavy frame.",
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.";
425 Object c3 "coin" class coin_class;
427 Object shed_key "small key"
428 with name "key" "small",
429 description "A small metal key.",
436 Object Delbins "Delbin's Pub"
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.";
454 if (self has general)
455 "The barbarians are a rather noisy bunch.";
457 if ((noun == n_obj) || (noun==out_obj))
458 print "Delbin calls out ~Visit us again!~ as you leave.^";
463 if (Morgan in Delbins) {
465 if ((i==1) && (Delbins.number == 0)) {
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,~ \
472 if ((i==1) && (Delbins.number == 1)) {
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.";
479 if ((i==1) && (Delbins.number == 2)) {
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.";
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.",
495 if (Morgan in Delbins)
496 "The barbarians are somewhat paralyzed with fear at the moment.";
498 "The barbarians are far too busy telling rude jokes \
501 has animate concealed;
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 \
512 Object bar "bar" Delbins
514 description "A long flat wood bar that could probably use a \
518 if (the_spell_was == egdelp_spell) {
519 print "The bar is covered with a waxy film. \
520 Delbin notices this and shrugs.";
523 if (noun==ale_glass) {
524 <Take ale_glass>; rtrue; }
526 has scenery supporter;
528 Object ale_glass "glass of ale" bar
529 with name "glass" "ale",
530 description "A small glass filled with an amber liquid.",
533 "You receive cold stares from the three individuals \
534 at the bar. ~Get your own,~ the Ranger says and \
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 \
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 \
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.";
554 if (the_spell_was == zemdor_spell) {
555 give Delbins general;
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;
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 \
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 \
596 Object rag "dirty rag" bar
597 with name "rag" "dirty",
598 description "A slightly dirty cleaning rag.",
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",
618 "You can hear the roars of a good crowd from \
619 inside the stadium. Must be playoff season.";
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.^";
627 ! (fake stadium entrance, for "past")
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.",
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.";
645 "The place is surprisingly quiet.";
650 Object stadium_sign "stadium sign" Stadium_entrance
652 initial "A stadium event sign is pasted to one of the stadium walls here.",
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!)~",
663 Object stadium_statue "stadium statue" Stadium_entrance
665 initial "A statue depicting the legendary Babe \
666 Flathead greets all visitors in front of the stadium.",
668 "According to the inscription, this statue honors the legendary Babe Flathead.",
671 if (self has general)
672 "Oddly, the statue seems to sit slightly tilted.";
674 if (self has general) {
676 move statue_base to Stadium_entrance;
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 \
684 else "The statue seems to be firmly fixed in place.";
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.",
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;
706 give stadium_statue general;
707 print " It fits, but seems just slightly \
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 \
721 PlayerTo(Mystical_Cave);
725 has static container open;
727 Object Stadium_top "In Flathead Stadium, upper seats"
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 \
734 name "seats" "crowd" "field" "dots" "fans",
735 s_to Stadium_entrance,
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.",
742 Listen: "The crowd is deafening.";
747 Object Stadium_bottom "In Flathead Stadium, lower seats"
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 \
754 name "seats" "crowd" "field" "dots" "fans",
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;
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;
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.",
778 Listen: "The crowd is deafening.";
782 Object Near_locker_room "Near Locker Room"
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",
792 if (self hasnt 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.";
801 Listen: "The crowd is deafening.";
805 Object Locker_room "Locker Room"
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",
812 s_to Near_locker_room,
814 Listen: "You can hear the crowd outside.";
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.",
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;
830 if (self has general) {
833 "^Someone in the crowd yells out, ~Get him a body bag!~ \
834 We assume he was referring to the golem, not you.";
836 "^The crowd does 'the wave'.";
838 "^The crowd waves some strange colorful objects. \
839 Rather distracting.";
841 "^Someone in the crowd screams ~Flathead that golem!~";
845 Listen: "The crowd is deafening.";
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.",
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.",
867 "^The Christmas Tree Monster belts out a few bars of 'I'm dreaming \
868 of a Black Cavern' arranged by Bing Frozby.";
870 "^The Christmas Tree Monster sings a few measures from Berknip's own \
871 rendition of 'Silent Night', a rather morbid version.";
873 "^The Christmas Tree Monster hums a few notes from 'Dornbeasts \
874 Roasting on an Open Pyre'.";
876 "^The Christmas Tree Monster whistles a part of 'Frosty the Snow Wight'.";
878 "^The Christmas Tree Monster sways in time to 'Let it snow, let it snow, \
881 "^The Christmas Tree Monster treats you to an abridged version of \
882 Handel's 'Messiah'.";
883 "^The Christmas Tree Monster hums to itself.";
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 \
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)) {
901 remove hedge_clipper;
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 \
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.";
918 if (gardeners_cap has worn) {
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.";
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.";
941 "You song is drowned out by a boisterous chorus \
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.";
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",
958 print "A small shrub sits near and under the Christmas Tree";
959 if (Christmas_tree_monster hasnt general)
960 ", almost covered by it.";
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.";
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.";
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)) {
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.";
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.";
995 if (noun ~= dornberries)
996 "I don't think the shrub can support that.";
998 has static supporter;
1000 Object dornberries "bunch of dornberries"
1001 with name "dornberries" "berries",
1002 description "A bunch of tasty-looking red berries.",
1007 ! (moved here so that it shows up 'last' in room descr)
1008 Object plaque "plaque" Con_Decor_garden
1010 initial "A small plaque sticks out of the soil near the two plants.",
1012 print "The plaque reads:^^";
1014 print "~CHRISTMAS TREE MONSTER DORNBERRY BUSH^";
1015 print "<Jinglebellus Adnauseam> <Smallus Shrubus>~^";
1018 ! ~CHRISTMAS TREE MONSTER DORNBERRY BUSH^\
1019 ! <Jinglebellus Adnauseous> <Smallus Shrubus>~",
1023 ! (Characters in Flathead Stadium)
1026 Object burly_man "burly man" Stadium_bottom
1027 with name "man" "burly",
1028 description "A big man who's apparently into sports.",
1031 if ((the_spell_was == foblub_spell) && (self hasnt general)) {
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.";
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.";
1047 "~You were amazing pal. Ever think of going pro?~";
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 \
1054 "~Give it a rest pal, I'm watching the game.~";
1058 Object coach "tough-looking coach" Locker_room
1061 print "An old fellow with bushy eyebrows and \
1062 a gruff demeanor. He's dressed like a sports coach";
1064 ". You also notice he's holding some sort of trophy.";
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 \
1077 PlayerTo(Flathead_field);
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 \
1084 PlayerTo(Flathead_field);
1087 if ((self has general) && (coach.number == 1)) {
1088 move win_bag to player;
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.~^";
1097 ! essentially, the only chances to do 'life' things
1098 ! will occur when the coach is lingering around
1099 ! the lockerroom after the match.
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 \
1106 "The coach merely nods.";
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.~";
1118 if (noun == cereal1 ||
1121 noun == cerealbox1 ||
1122 noun == cerealbox2 ||
1124 "~A bowlful of that each morning is bound to make a \
1125 champion out of you.~";
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
1131 if ((action==##Give) && (noun==trophy) &&
1133 move trophy to player;
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.";
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.";
1147 "~What's that you're saying? Speak up, I'm your \
1148 coach, I'm hear to listen.~";
1150 has animate transparent;
1152 Object referee "referee" Flathead_field
1153 with name "referee" "ref",
1154 description "A stout looking man in a funny striped shirt.",
1156 if (self hasnt general) {
1158 "^The ref blows his whistle and says ~Round 1~. The golem, not \
1159 needing any encouragement, jumps into the fray.";
1164 "Your opponent is the golem, not the referee.";
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.~";
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.";
1184 if (the_spell_was == espnis_spell) {
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 \
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",
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!",
1213 Player_HP_CUR = Player_HP_CUR - 15;
1214 if (Player_HP_CUR <= 0) {
1216 "^The wood golem jumps forward and flattens you, \
1217 which feels similar to getting hit by a falling \
1221 "^The golem staggers you with a punch that sends you \
1224 "^The wood golem tries to move in for a clinch, and you dance \
1227 "^The wood golem makes a lumbering swing at your head, and misses!";
1228 "^The wood golem makes a swipe for you, and misses.";
1232 if (the_spell_was == egdelp_spell) {
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!~";
1251 wood_golem.number = wood_golem.number - 1;
1252 if (wood_golem.number <= 0) {
1254 move stone_golem to Flathead_field;
1255 "With a thundering blow, you smash the golem into \
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!~";
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.";
1271 "You swing, but miss.";
1275 Object stone_golem "fierce-looking stone golem"
1276 with name "golem" "stone",
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!",
1285 Player_HP_CUR = Player_HP_CUR - 20;
1286 if (Player_HP_CUR <= 0) {
1288 "^The stone golem jumps forward and flattens you, \
1289 which feels similar to getting crushed by a giant \
1293 "^The golem hits you with a punch that sends you \
1296 "^The golem jabs with his left, and misses!";
1297 "^The golem tries to close, and misses.";
1301 if (the_spell_was == tossio_spell) {
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!~";
1319 stone_golem.number = stone_golem.number - 1;
1320 if (stone_golem.number <= 0) {
1322 move iron_golem to Flathead_field;
1323 "With a thundering blow, you smash the golem into \
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!~";
1333 print "Solid blow! Stone chips fly.";
1334 if (stone_golem.number > 10)
1335 ". It didn't seem to slow him down, though.";
1339 "You swing, but miss.";
1343 Object iron_golem "deadly-looking iron golem"
1344 with name "golem" "iron",
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.",
1354 Player_HP_CUR = Player_HP_CUR - 30;
1355 if (Player_HP_CUR <= 0) {
1357 "^The iron golem jumps forward and flattens you, \
1358 which feels similar to getting mashed by a giant \
1359 block of iron. Oww.";
1362 "^The golem staggers you with a punch that sends you \
1363 reeling! That felt quite painful.";
1365 "^The golem tries to flatten you, and you evade just in time!";
1366 "^The golem tries to step on you, and you dodge.";
1370 if (the_spell_was == bekdab_spell) {
1373 give Flathead_field ~general;
1375 move trophy to coach;
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.";
1393 iron_golem.number = iron_golem.number - 1;
1394 if (iron_golem.number <= 0) {
1397 give Flathead_field ~general;
1399 move trophy to coach;
1401 "With a thundering blow, you smash the golem into \
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.";
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.";
1417 "You swing, but miss.";
1421 ! (Three important NPCs)
1423 Object Morgan "Morgan the Ranger" Delbins
1424 with name "ranger" "warrior" "Morgan" "captain" "maiden",
1427 if (self in Delbins)
1428 "There's a warrior-maiden sitting at the bar, her \
1429 eyes riveted to the glass of ale.";
1431 "Morgan the Ranger is here.";
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.",
1439 if ((self in Ravine_pass) && (Morgan.number == 1)) {
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 \
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. \
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.~";
1478 if (special_word == 'hello') {
1480 if (Morgan.number == 2)
1485 "She's well-armed and probably dangerous.";
1487 "A gracious gesture, perhaps, but she isn't \
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.";
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.";
1511 if (second == 'thief' or 'gentleman') {
1512 print "She smiles. ~I can't say as I know \
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.";
1520 "that thief fellow. I've been told \
1521 he has a hideout somewhere, nearly impossible to find.~";
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.";
1538 "~What's that you're mumbling there priest?~";
1540 has animate female proper;
1542 Object Frobar "Frobar" Delbins
1543 with name "Frobar" "wizard" "sorcerer" "enchanter",
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.";
1550 description "A wizardly old figure of a man.",
1553 "You make a threatening move. The wizard practically yawns! \
1554 ~Just what the world needs, another violent Priest.~ You stop, \
1555 somewhat embarrassed.";
1557 if (special_word=='hello')
1558 "The wizard nods. ~Hello, hello, and all that rubbish.~";
1560 if (self in Delbins)
1561 "The wizard is somewhat occupied at the moment.";
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 \
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.~";
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.~";
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.";
1601 if (noun has is_scroll)
1602 "~A magic scroll, eh? Doesn't do me a lot of good \
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.~";
1609 if (noun==wood_book)
1610 "~So, you're a carpenter too?~ Frobar says, somewhat \
1612 if ((noun==term_paper) && (glossy_scroll in self))
1616 "~Hmm. Not very interesting.~";
1619 if ((noun==term_paper) && (glossy_scroll in self))
1621 if (self notin Delbins)
1623 else "The wizard pushes your offering aside. \
1624 ~I'm somewhat busy at the moment,~ he says, his eyes glued to \
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.";
1634 default: "~I'm rather busy at the moment.~";
1637 ! Handle Frobar's actions here...ALWAYS CHECK PARENT AND LOCATION
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. ";
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.^";
1657 ! Random self mutterings...
1659 if (self in location && self notin Delbins) {
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.~";
1668 "^Frobar checks his pockets. ~What did I do with this \
1669 month's 'Enchanter Monthly'?~ he muses outloud.";
1674 daemon [ i j k Mdest Mdir;
1675 ! This daemon will only deal with NPC movement...
1677 if (random(3) ~= 1) rfalse; ! doesn't always immed. move
1679 ! Count the available exits quickly
1680 objectloop(i in Compass)
1681 if (ZRegion(parent(self).(i.door_dir)) == 1)
1683 if (k == 0) rtrue; ! no exits...
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) {
1690 Mdest = FROBAR_Parlor;
1691 MovePrintNPC(Frobar,Mdest,Mdir);
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) {
1702 Mdest = parent(self).(i.door_dir);
1703 MovePrintNPC(Frobar,Mdest,Mdir);
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.~";
1728 Object Thief "thief" Delbins
1729 with name "thief" "character" "gentleman",
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.";
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 \
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.~";
1747 if (special_word == 'hello')
1748 "The gentleman gives a sharp nod in your direction.";
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?~";
1760 if (noun has is_coin || noun==trophy) {
1762 "Confused, the thief pockets your offering. \
1763 ~Quite generous of you, sir.~ he says.";
1766 default: "The gentleman glances at you with \
1767 dark suspicious eyes.";
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!";
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.",
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!";
1789 Object Delbin "Delbin" Delbins
1790 with name "Delbin" "bartender" "owner",
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 \
1797 if (random(20) == 1)
1798 "^Delbin cleans some glasses behind the bar.";
1802 if (noun == headdress)
1803 "~You're welcome to that unsightly thing, sir. \
1804 Been trying to get rid of it for sometime.~";
1806 "Delbin give you a curious look, \
1811 Attack, Kiss, ThrowAt: "Leave good old Delbin alone.";
1813 if (special_word == 'hello')
1814 "~Welcome to Delbin's, good sir.~";
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'>>;
1824 "Delbin takes the rag and cleans a spot on the bar, leaving \
1825 it in a familiar place.";
1827 "Delbin politely refuses.";
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.~";
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?~";
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 \
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') {
1869 print "Delbin scratches his ear and says, \
1870 ~Yes, now, what did I hear...~^^";
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.~";
1877 "~They say the kobold war up north is gonna \
1878 end real soon. I'll believe that when it happens.~";
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. \
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.~";
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.~";
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?~";
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 \
1914 if (Thief in Delbins)
1915 "!~ The thief suddenly starts to cough, and controls himself.";
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.~";
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.";
1944 Object musty_scroll "musty scroll" telescope
1949 Object fiznav_spell "make boat sea-worthy" musty_scroll
1953 if (second has animate)
1954 "Your chant goes unanswered. It's not intended for \
1957 "Your chant goes unanswered. It's intended for boats apparently.";
1961 Object pale_scroll "pale scroll"
1966 Object shazok_spell "call lightning from storm" pale_scroll
1970 if (second==0 && location==GURTH_Forest) {
1971 <<Cast shazok_spell storm1>>;
1973 "Your chant goes unanswered. You need a genuine \
1974 natural storm, I suppose.";
1978 Object glossy_scroll "glossy scroll" Frobar
1983 Object feeyuk_spell "allow creature to resist gravity" glossy_scroll
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!";
1997 " is no doubt thankful for the power to resist gravity.";
2001 has_resist_gravity = 0;
2002 "You feet feel heavy again.";
2010 Object trophy "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.",
2020 ! if (noun hasnt is_sphere)
2021 ! "That doesn't seem to fit.";
2022 ! ! else fancy light tricks
2025 ! container open transparent;
2027 Object win_bag "bag"
2029 description "A small cloth bag.",
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;