Update the library to version 6.12.4
[spiritwrak.git] / src / fublio.inf
1
2 ! ******************************************************************
3 ! FUBLIO.INF
4 ! ----------
5 ! Add-on file for SPIRITWRAK
6 ! -- Contains South Fublio Valley locations, items and creatures
7 !
8 ! SPIRITWRAK is free software; you can redistribute it and/or modify
9 ! it under the terms of the GNU General Public License as published by
10 ! the Free Software Foundation; either version 3 of the License, or
11 ! (at your option) any later version.
12 !
13 ! SPIRITWRAK is distributed in the hope that it will be useful, but
14 ! WITHOUT ANY WARRANTY; without even the implied warranty of
15 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 ! General Public License for more details.
17 !
18 ! You should have received a copy of the GNU General Public License
19 ! along with SPIRITWRAK. If not, see <https://www.gnu.org/licenses/>.
20 ! ******************************************************************
21
22 Object FUBLIO_GUSStop "Southern Fublio Valley"
23    with description "You are in a southern region of Fublio \
24 Valley, where someone apparently decided to start \
25 a city. So far, a couple huts and farmhouses are the \
26 result. A rather run-down farmhouse lies to the \
27 southwest, a trail runs through grasslands to \
28 the south and a smaller trail runs along the hills to the \
29 southeast. To the north, you see a decrepit old \
30 building. There is also a stairway into the ground here.",
31         name "huts" "farmhouses" "farmhouse" "trail" "grasslands"
32 "hills" "stairway",
33         d_to FUBLIO_GUSStation,
34         sw_to Farm,
35         s_to Grasslands,
36         se_to Fublio_forest,
37         n_to Fublio_bank,
38         cant_go "You amble around the local area a bit, and return here.",
39    has light;
40    
41 Object Fublio_bank "Abandoned Bank"
42    with description "You're inside what must have once been a \
43 small branch office of the once indestructible Bank of Zork. \
44 However, the place has clearly been abandoned, and age has not \
45 been kind. Even the required portrait of J. Pierpont Flathead \
46 has been pilfered. An exit lies south.",
47    s_to [;
48 ! first case, r & (!p & !q & !s)
49       if ((children(r_vault) == 20) &&
50           (children(p_vault) == 0) &&
51           (children(q_vault) == 0) &&
52           (children(s_vault) == 0)) return FUBLIO_GUSStop;
53 ! second case, (p & s) & (q & !r)
54       if (((children(s_vault) > 0) && 
55            (children(p_vault) == children(s_vault))) &&
56           ((children(q_vault) == (children(p_vault) + 5)) &&
57            (children(r_vault) ~= 20))) 
58          return FUBLIO_GUSStop;
59       "A buzzer sounds, and some mysterious force \
60 prevents you from leaving!";
61    ],   
62    has light;
63
64 Class vault_class
65    with name "vault",
66    description "Basically a hollow rectangular hole cut \
67 into the wall.",
68    before [;
69       Receive:
70 if (noun hasnt is_coin)
71    "A strange force pushes your hand away.";
72    ],
73    capacity 100,
74    size 10,
75 has static container open transparent;      
76
77 Object p_vault "interest vault" Fublio_bank
78    class vault_class,
79    with name "interest",
80         initial [;
81           print "An vault labeled ~INTEREST PAID~ is \
82 open in the wall";
83 if (children(self) > 0) {
84    print ". Inside";
85    WriteListFrom(child(self), FULLINV_BIT + ENGLISH_BIT + ISARE_BIT);
86 }
87 ".";
88         ],
89 ;
90 Object q_vault "overhead vault" Fublio_bank
91    class vault_class,
92    with name "overhead",
93         initial [;
94 print "An vault labeled ~OVERHEAD~ is \
95 open in the wall";
96 if (children(self) > 0) {
97    print ". Inside";
98    WriteListFrom(child(self), FULLINV_BIT + ENGLISH_BIT + ISARE_BIT);
99 }
100 ".";
101         ],
102 ;
103 Object r_vault "basis vault" Fublio_bank
104    class vault_class,
105    with name "basis",
106         initial [;
107 print "An vault labeled ~BASIS~ is \
108 open in the wall";
109 if (children(self) > 0) {
110    print ". Inside";
111    WriteListFrom(child(self), FULLINV_BIT + ENGLISH_BIT + ISARE_BIT);
112 }
113 ".";
114         ],
115 ;
116 Object s_vault "loans vault" Fublio_bank
117    class vault_class,
118    with name "loans",
119         initial [;
120 print "An vault labeled ~LOANS~ is \
121 open in the wall";
122 if (children(self) > 0) {
123    print ". Inside";
124    WriteListFrom(child(self), FULLINV_BIT + ENGLISH_BIT + ISARE_BIT);
125 }
126 ".";
127         ],
128 ;
129
130
131 Object bank_memo "bank memo" Fublio_bank
132     with name "memo",
133 description "BANK WORKER GUIDELINES^^\
134 If at any point, account activity has been suspended \
135 (i.e. all regular account vaults have no funds) then \
136 it must be ensured that 20 zorkmids remain in basis, \
137 for potential loan requests.^^\
138 Otherwise, vaults must be maintained as follows:^^\
139 For interest waiting to be paid, the amount must \
140 equal the amount held in the loan payments vault. \
141 If this amount goes over the loan payments, talk \
142 to your local gnome manager to see about getting \
143 some outstanding loans paid back.^^\
144 Overhead should be kept at the amount in interest,
145 plus five.^^\
146 Loan payments should be kept at a positive amount.^^\
147 Make sure that both the loan and interest vaults \
148 are maintained properly, and at the same time, the \
149 overhead vault is maintained while the basis vault \
150 is kept at a non-suspended bank amount. If this \
151 is not the case, you may need to put some overtime \
152 in to straighten out the bank funds.",
153    size 15;
154
155 Object c30 "coin" r_vault class coin_class;
156 Object c31 "coin" r_vault class coin_class;
157 Object c32 "coin" r_vault class coin_class;
158 Object c33 "coin" r_vault class coin_class;
159 Object c34 "coin" r_vault class coin_class;
160 Object c35 "coin" r_vault class coin_class;
161 Object c36 "coin" r_vault class coin_class;
162 Object c37 "coin" r_vault class coin_class;
163 Object c38 "coin" r_vault class coin_class;
164 Object c39 "coin" r_vault class coin_class;
165 Object c40 "coin" r_vault class coin_class;
166 Object c41 "coin" r_vault class coin_class;
167 Object c42 "coin" r_vault class coin_class;
168 Object c43 "coin" r_vault class coin_class;
169 Object c44 "coin" r_vault class coin_class;
170 Object c45 "coin" r_vault class coin_class;
171 Object c46 "coin" r_vault class coin_class;
172 Object c47 "coin" r_vault class coin_class;
173 Object c48 "coin" r_vault class coin_class;
174 Object c49 "coin" r_vault class coin_class;
175
176 Object Farm "Farm"
177    with description "You're standing in front of a small farmhouse. \
178 A trail leads northeast, a sand bar lies to the southwest, \
179 and another trail heads east.",
180         name "trail",
181         ne_to FUBLIO_GUSStop,
182         sw_to Veg_fields,
183         e_to Grasslands,
184    has light;
185    
186 Nearby farmhouse "farmhouse"
187    with name "farmhouse" "house",
188         description "A small farmhouse, barely a shack.",
189         before [;
190            Enter: "The farmhouse is run-down enough already without you \
191                   stomping around in it.";
192         ],
193    has scenery;   
194    
195 Object Veg_fields "Oyster Farm"
196    with description [;
197            print "A coastline sand bar curves west a short distance \
198 here, ending in a shoal of large rocks. Nearby, \
199 someone has dug some shallow holes in the \
200 sand, probably farming for live Rotund Oysters, a popular \
201 Eastland delicacy.";
202            if (self hasnt general)
203 "Unfortunately, the oyster \
204 beds are too far inland, and they appear to be \
205 empty. A bit to the west you can see a small \
206 shoreline cave in the rocks.";
207            else
208 "The oyster \
209 beds are filled with water (similar to a good portion \
210 of the shoal) and look well stocked!";
211              ],
212              name "sand" "bar" "shoal" "rocks" "cave",
213              before [;
214 Fill: "Seawater is hardly a rare commodity these days.";
215              ],
216              ne_to Farm,
217              w_to [;
218                if (self hasnt general) {
219                   print "You try to head towards the cave, but \
220 the unstable rocks and sea waves make it "; 
221                   if (FUBLIO_Cave hasnt general) {
222                   give FUBLIO_Cave general;
223                   print "difficult \
224 to get there from here. Suddenly, a rock slips from underfoot! \
225 You fall...^";
226                   return FUBLIO_Cave;
227                   }
228                   else 
229                   print "impossible \
230 to get there from here.^"; return 1;
231                } 
232                else
233                   "Any remainder of the sand bar west is \
234 now submerged by a high tide or rise in the sea.";
235              ],
236    has light;
237    
238 Nearby oyster_beds "oyster beds"
239    with name "beds" "holes" "hole",
240         description [; 
241           print "Some shallow";
242           if (Veg_fields hasnt general)
243             ", mostly empty holes in the sand.";
244             " holes in the sand, filled with sea water.";
245         ],
246         before [;
247            Search:
248               if (Veg_fields has general)
249                  "You find a couple immature oysters, and throw \
250 them back."; 
251            Receive:
252               "Someone is obviously trying to use these holes \
253 for oyster farming. Best to leave them as you found them.";
254         ],
255    has scenery;
256
257 Object FUBLIO_Cave "Dark Damp Cave"
258    with description [;
259         print "You seem to be in some underground cave. ";
260         if (FUBLIO_Cave.number == 1)
261 "There are no visible exits. You feel rather claustrophobic. \
262 You also hear some unexpected noises.";
263         else 
264 "There is a small dark tunnel leading south. \
265 You hear the sounds of rushing water from somewhere nearby.";
266         ],
267         number 1,
268         name "tunnel",
269         s_to [;
270            if (FUBLIO_Cave.number == 1)
271               "You can't go that way.";
272            if (FUBLIO_Cave.number == 3)
273               "The dark tunnel becomes blocked after a short distance \
274 by a great tidal swell! The sea has risen above the entrance!";              
275            else {
276               print "^You crawl through the dark tunnel, which \
277 seems to snake back and forth. After what seems like an \
278 eternity, you see daylight, and stumble forward. You find \
279 yourself on the sand bar again! Looking back, you can't \
280 locate the tunnel you just left at all!^";
281               FUBLIO_Cave.number = 3;
282               return Veg_fields;
283            } 
284         ],
285         before [;
286           Listen: "You hear the sounds of the sea all around you.";
287           Smell: "You smell the musty odor of the sea.";
288         ],
289 ;
290
291
292
293 Object Grasslands "Grassland Beach"
294    with description [;
295         if (self hasnt general)
296           print "A nice beach with lots of tall grasses hides \
297 behind a short dune here. The Great Sea stretches out \
298 to the south.";
299         else 
300            print "A deep marsh hides behind a short dune here. The Great Sea \
301         is making some inroads here, apparently. That volcano in \
302         the water to the south may have had something to do with it.";
303         " From here, you can go north, west or east. \
304         You can just glimpse some sort of tower-like structure \ 
305         far across the bay in the east.";
306         ],
307         name "beach" "grasses" "dune" "marsh" "sea" "tower",
308         w_to [;
309              if (player in sailboat)
310                 "You'll have to get out of the sailboat first.";
311              else return Farm;
312              ],
313         e_to [;
314              if (player in sailboat)
315                 "You'll have to get out of the sailboat first.";
316              else return Fublio_forest;
317              ],
318         n_to [;
319              if (player in sailboat)
320                 "You'll have to get out of the sailboat first.";
321              else return FUBLIO_GUSStop;
322              ],
323         s_to [;
324              if (player in sailboat) return On_Fublio_bay;
325              else
326                 "The tides here make swimming unadvisable.";
327              ],
328         before [;
329              Swim:  
330                 "The tides here make swimming unadvisable.";
331         ],
332   has light;
333   
334 Nearby sailboat "small sailboat"
335    with name "sailboat" "boat",
336         description [; 
337            if (self hasnt general)
338               "A nice little sailboat that looks pretty sea-worthy. \
339 The word ~MINIRVA~ is painted on one side.";
340            "A badly damaged sailboat. Several places bear deep \
341 cracks, as though the boat had been tossed in a violent storm.";
342         ],
343         before [;
344            Go:
345               if (self has general) {
346                  print "In it's current condition, this boat is lucky to \
347                  be floating.^";
348                  return 2;  ! disallow movement but say nothing
349                  }
350               else rtrue;
351            Cast:
352               if (the_spell_was == fiznav_spell) {
353                  print "You perform a nice liturgy to the Sea Gods,";
354                  if (self has general) {
355                  give self ~general;
356                  Achieved(6);
357                  " and before your very eyes, the sailboat repairs itself!";
358                  }
359                  else " however the boat seems unchanged.";
360               }
361            Take: 
362               "That's too cumbersome to carry.";
363         ],
364         capacity 15,                                                          
365         size 30,
366    has enterable static container open;
367    
368 ! Object c6 "coin" sailboat class coin_class;
369
370 Object On_Fublio_bay "On Fublio Bay"
371    with description [;
372         print "You are sailing on Fublio Bay. A shoreline lies \
373 to the north. You could probably sail out of the bay \
374 to the south, but I'd advise against it, \
375 the winds aren't very strong. To the northeast \
376 you can see ";
377         if (self hasnt general)
378            "the tip \
379            of a peninsula where a lighthouse tower is standing.";
380         else 
381            "a partially submerged lighthouse tower. \
382            Also, to the southeast is a small volcanic island where \
383            you could probably land.";
384         ],
385         name "shoreline" "bay" "peninsula" "tower" "lighthouse"
386 "island",
387         n_to Grasslands,
388         s_to Lost_at_sea,
389         ne_to [;
390            if (self hasnt general)
391               "The winds blow the wrong way, and you end up back here.";
392            else return Lighthouse2;
393         ],
394         se_to [;
395            if (self hasnt general)
396               "You can't go that way.";
397            else return Volcano_island;
398         ],
399         before [;
400            Go:
401               if (noun==s_obj)
402                  print "^A sudden gust of wind sends your small craft \
403                    skimming out of control!^";
404            Swim, Exit:
405               if (player in sailboat)
406                  "The water's pretty deep here. I'd stay in the boat.";
407            Fill: "Seawater is hardly a rare commodity these days.";
408         ],
409         each_turn [;
410            if (seawater.number == 5) {
411               seawater.number = 10;
412               "^Many large bubbles are coming from somewhere deep in the \
413               seawater near you, as though the water was boiling! Also, \
414               you see some dark shape in the depths below rising!";
415            }
416            if (seawater.number == 4) {
417               seawater.number = 5;
418               "^There appears to be a steady stream of bubbles coming from \
419               somewhere deep in the water near you! Also, you see something \
420               dark rising from the depths below you!";
421            }
422            if (seawater.number == 3) {
423               seawater.number = 4;
424               "^You notice a few small bubbles rise to the surface of the sea.";
425            }
426            if (seawater.number == 2)
427               seawater.number = 3;
428         ],
429         
430    has light;
431
432 Object Lost_at_sea "Lost at Sea"
433    with description [;
434           print "You're lost at sea. The winds are completely dead. \
435 They managed to take you quite a ways out before they died, \
436 however, and it's currently hard to tell which way land was \
437 from here";
438          if (self has general)
439            ". Oddly, there's a volcano far out to the south, \
440            still smoldering from a recent eruption.";      
441          else ".";
442         ],
443         name "sea" "winds" "land",
444            cant_go "The winds are dead, and you're not going anywhere.",
445         before [;
446            Swim, Exit:
447               if (player in sailboat)
448                  "The water's pretty deep here. I'd stay in the boat.";
449            Fill: "Seawater is hardly a rare commodity these days.";
450         ],
451         each_turn [;
452            if (seawater.number == 9) {
453               seawater.number = 11;
454               "^Many large bubbles are coming from somewhere deep in the \
455               seawater near you, as though the water was boiling! Also, \
456               you see some dark shape in the depths below rising!";
457            }
458            if (seawater.number == 8) {
459               seawater.number = 9;
460               "^There appears to be a steady stream of bubbles coming from \
461               somewhere deep in the water near you.";
462            }
463            if (seawater.number == 7) {
464               seawater.number = 8;
465               "^You notice a small bubble rise to the surface of the sea.";
466            }
467            if (seawater.number == 6)
468               seawater.number = 7;
469         ],
470    has light;
471    
472 Object Fublio_forest "On Peninsula"
473    with description [;
474         print "You stand ";
475         if (self hasnt general)
476          "in a clearing on a grassland peninsula. A \
477           trail leads northwest from here, and another leads west. \
478           Off to the \
479           southeast, there's an entrance into what looks like an old \
480           abandoned lighthouse, just at the tip of the peninsula.";
481         if (self has general)
482          "on the southeast tip of a grassland peninsula. A \
483           trail leads northwest from here, and another leads west. Off to the \
484           southeast, you can see the top of what looks like a \
485           lighthouse, partially submerged in the Great Sea.";
486         ],
487         name "clearing" "grassland" "peninsula" "trail" 
488 "tower" "lighthouse" "sea",
489         nw_to FUBLIO_GUSStop,
490         w_to Grasslands,
491         se_to [;
492               if (self has general)
493               "Looks like you'd need a boat to get out to that \
494               lighthouse now."; 
495               else return Lighthouse1;
496               ],
497    has light;
498   
499 Object Lighthouse1 "Bottom of Lighthouse"
500    with description [;
501         print "You're inside an ancient lighthouse. The place \
502            must have been deserted quite a long time ago, and \
503            is now a mess of broken stone, cobwebs and seabird \
504            droppings. The rest of the peninsula is back \
505            northwest. You can see a hole above where a stairway \
506            probably entered an upper floor of the place, but \
507            the stairway itself crumbled into dust long ago";
508            if ((self hasnt general) && (amulet has worn)) {
509               give self general;
510            ".^^Your amulet suddenly gives off a bright purple flash, then \
511            returns to normal!";
512            }
513            else ".";
514        ],
515        name "stone" "cobwebs" "droppings" "hole",
516        nw_to Fublio_forest,
517        u_to "The hole is too far above you.",
518    has light;
519  
520 ! more scenery stuff.  This one's key though
521 ! (Sidenote:  Here's an example of a situation where one would probably
522 ! want an object that could be both a supporter and a container --
523 ! i.e. objects that float or sink could be handled easily.) 
524 Object seawater "water"
525    with name "water" "sea" "ocean",
526         description "Salty blue-green water surrounds you.",
527         time_left 0,
528         number 1,
529         weight 0,
530         size 100,
531         before [;
532            ThrownAt, Receive:
533               if (noun == toy_volcano) {
534                  if (location == On_Fublio_bay)  {
535                     seawater.number = 2;
536                     seawater.weight = 1;
537                  }
538                  else {
539                     seawater.number = 6;
540                     seawater.weight = 2;
541                  }
542                  StartTimer(self,3);
543                  remove toy_volcano;
544                  "The toy volcano drops into the water and sinks like a stone.";
545               }                            
546               else {
547                  remove noun;
548                  if (noun == umbrella && umbrella has open)
549                     "The umbrella seems to float on the water like a \
550 cloth dome for a short bit, but eventually sinks into the water.";
551                  CDefArt(noun); " sinks into the water and is soon out of sight.";
552               }              
553            Push, Pull, Turn, Take, Attack, Rub, Squeeze: "The sea water runs through your fingers.";
554            Taste, Drink: "It's just salty sea water.";
555            Search, LookUnder:
556               if (seawater.weight > 0 && seawater.number < 12)
557                  "There's something down there all right!";
558               else {
559                  if (random(10) < 2)
560                     "You glimpse a large grouper swimming under the \
561 water, and watch it swim away.";
562                  else
563                     "The water seems choppy and deep. You notice \
564 nothing beneath the waves at the moment.";
565               }
566         ],
567         found_in On_Fublio_bay Lost_at_sea,
568         time_out [ ;
569            ! a fairly simple event here, but nonetheless dramatic...
570            ! -- 1st, if we dropped the volcano in the bay (correct)
571            ! set water descriptions so that player won't see bubbles
572            seawater.number = 12;           
573            ! set CAVE number for endgame
574            FUBLIO_Cave.number = 3;
575            if (seawater.weight == 1) {
576            ! first, set up all room generals so that descriptions are 
577            ! changed.
578            give Grasslands general;
579            give Veg_fields general;
580            give Fublio_forest general;
581            give farmer general;  ! he'll give player sphere next encounter
582            give sailboat general;  ! damages sailboat, regardless of where it is
583            move sailboat to Grasslands;
584            ! Modify On_Fublio_bay paths, new one to island, new one to tower.
585            give On_Fublio_bay general;
586            ! Now, check location.  Certain areas will kill player in 
587            ! tidalwave.  Certain areas will cause an audible explosion.
588            ! Remainder do nothing (but shouldn't happen)
589            if (location == Veg_fields or Grasslands or Lighthouse1) {
590               deadflag = 1;
591               "^There's a massive explosion from the south! You turn \
592               and rub your eyes in disbelief. There's a \
593               volcano rising out of the sea! Unfortunately, \
594               there's also a large tidalwave headed your way \
595               (caused by volcanic eruption at sea, no doubt) which \
596               engulfs you as you try to scramble for higher ground! \
597               You struggle valiantly, but drown in deep water.";              
598            }
599            if (location == FUBLIO_GUSStop or Farm or Fublio_forest) {
600               "^You hear a massive explosion from the south! \
601               It sounded pretty far off, but whatever it was, it \
602               was loud.";           
603            }
604            if (location == On_Fublio_bay) {
605               deadflag = 1;
606                     "^Suddenly, the water around you literally lifts you into \
607                     the sky in an enormous explosion! The last thing you \
608                     see is the emerging mouth of an active and hungry volcano!";
609                           }        
610            if (location == Lost_at_sea) {
611               deadflag = 1;
612               "^You hear a large explosion off to the north! \
613 A massive tidal swell rushes by and tosses your small craft violently, \
614 knocking you into the water. As you watch the waves carry the boat
615 away, a giant grouper swims up and swallows you."; 
616            }             
617            }
618            ! -- else, we dropped it in the sea (bummer)
619            ! (this implies that 1) only the sea descrp will change, 
620            ! 2) the player is still stuck at sea, and will be killed 
621            ! for his trouble.
622           else {
623              give sailboat general;  ! just keeping with the story...
624              give Lost_at_sea general;
625              move sailboat to Grasslands;  ! made it back to shore somehow...
626              deadflag = 1;
627              "^Suddenly, the water around you literally lifts you into \
628              the sky in an enormous explosion! The last thing you \
629              see is the emerging mouth of an active and hungry volcano!";
630           }        
631         ],
632    has scenery container open;
633
634
635 Object Lighthouse2 "Near Submerged Lighthouse"
636    with description [;
637           print "You're on the outside of what looks like the upper \
638            part of a lighthouse, sticking straight out of the sea. \
639            The lighthouse is broken in many places, and several areas \
640            provide ledge-space to stand on. In fact, you could probably \
641            climb into the lighthouse through one of many large \
642            cracks in the walls to the east. The rest of Fublio bay \
643            is back southwest";
644           if ((self has general) || (Lighthouse1 has general) || 
645               (amulet hasnt worn))
646            ".";
647            else {
648               give self general;
649            ".^^Your amulet suddenly gives off a bright purple flash, then \
650            returns to normal!";
651           }                             
652         ],
653         name "lighthouse" "cracks",
654         e_to [;
655            if (player in sailboat) 
656               "You'll need to get out of the boat first.";
657            else return In_lighthouse;
658         ],
659      !   in_to [;
660      !      if (player in sailboat) 
661      !         "You'll need to get out of the boat first.";
662      !      else return In_lighthouse;
663      !   ],
664         sw_to [;
665            if (player notin sailboat)
666               "The water looks pretty choppy. I'd suggest you use a \
667               sea-going vessel of some sort.";
668            else return On_Fublio_bay;
669         ],
670     has light;
671     
672     
673 Object Volcano_island "Volcanic Island"
674    with description "You're on the north shore of a small volcanic \
675          island in the middle of Fublio bay. A little more \
676          shore lies to the south. The bay spreads out before \
677          you to the northwest.",
678         name "bay",
679         nw_to [;
680            if (player notin sailboat)
681               "The water looks pretty choppy. I'd suggest you use a \
682               sea-going vessel of some sort.";
683            else return On_Fublio_bay;
684         ],
685         s_to [;
686            if (player in sailboat) 
687               "You'll need to get out of the boat first.";
688            else return Island2;
689         ],
690         before [;
691            Swim:  "Near a still-active volcano? Not wise.";
692         ],
693    has light;                    
694
695 Object Island2 "South Part of Island"
696    with description "You're on a southern section of a small \
697           volcanic island in the middle of Fublio bay. Most \
698           of the area here is lava-rock, still warm. You can \
699           see a more open shore to the north.",
700         name "bay" "rock" "lava" "shore",
701         n_to Volcano_island,
702         before [;
703            Swim:  "Near a still-active volcano? Not wise.";
704         ],
705    has light; 
706
707 Nearby shipwreck "old shipwreck"
708    with name "shipwreck" "wreck" "ship",
709         initial "An old shipwreck is almost embedded in the lava \
710              here.",
711         description "It looks like an old navy vessel, \
712              stuck fast in the surrounding rock. Its obviously \
713              been underwater for some time, as it is covered in \
714              barnacles and seaweed. The hull has partially rotted apart \
715              in many places.",
716         before [;
717            Enter:
718               "You find that anything left to enter in the wreck \
719               has pretty much decayed away.";
720            Cast:
721               if (the_spell_was == fiznav_spell) 
722                  "You perform a nice ritual to the Sea Gods, and \
723                  before your very eyes, the ship attempts to repair \
724                  itself! But there's too much damage, and not \
725                  even the aid of the Sea Gods can fix this craft. \
726                  The chant fails.";
727            Search: 
728               if (self has general) {
729                  move green_rod_piece to parent(self);
730                  give self ~general;
731                  Achieved(7);
732                  "Something about the old boat rings a familiar tune. \
733 You check near something that might have once been a mast, and \
734 uncover a familiar green rod!";
735               }
736         ],
737    has static;   
738
739 Object In_lighthouse "Lighthouse, upper level"
740    with description "You're inside an abandoned lighthouse, on what \
741           must be an upper floor. The whole interior is lifeless and \
742           barren. There's a large broken crack in the western wall. \
743           You also notice a hole in the floor nearby, which might \
744           have been an exitway a long, long time ago.",
745        name "crack" "hole",
746        w_to [;
747           if (water_spirit in self)
748              "The water spirit buffets you with water and \
749              prevents you from leaving.";
750           else return Lighthouse2;
751        ],
752        d_to [;
753           deadflag = 1;
754           "You drop through the hole, and land in cold dark water! \
755           Trapped in an enclosed pool of seawater, with the hole \
756           too far above you, you drown shortly afterwards.";
757        ],   
758        before [;
759           Listen:  "You hear some sloshing noises from below the floor.";
760        ],
761 has light;
762
763
764
765 ! ************
766 ! creatures
767 ! ************
768
769 Object farmer "farmer" Farm
770    with name "farmer",
771         initial "There's a tired-looking farmer here.",
772         description "It looks like he's been working pretty hard \
773                      in the sun.",
774         each_turn [;
775            if (self hasnt general) {
776               if (random(10) == 1)
777                  "^~'Forget zucchini,' they told me, 'Go into oyster \
778                  farming. You'll make a fortune.' Ha!~";
779            }
780            else {
781               remove farmer;
782               move silver_sphere to player;
783               "^The farmer sees you approach and rushes to \
784               greet you. ~I saw what you did, sir, yes indeed. \
785               A mighty crazy thing to do, calling a volcano outa \
786               the water like that. But you did it! And \
787               my oyster beds thank you kindly! I'd like to \
788               repay the favor, but I'm only a poor farmer.~ He \
789               pauses, then searches his pockets. ~Here,~ he says, \
790               putting something in your hand. ~Found it digging in \
791               the sand. Don't know what it is, but I'll bet you \
792               can use it.~ He smiles and disappears into the \
793               farmhouse.";
794            }
795         ], 
796         life [;
797            Attack, ThrowAt:
798               "Something about attacking a down-on-his-luck \
799 farmer just doesn't seem right, so you stop.";
800            Answer:
801               if (special_word == 'hello')
802                  "The farmer nods in your direction. \
803 ~How do, stranger?~";
804            Ask:
805               if (second == 'oyster' or 'farm' or 'oysters')
806                  "~Did a foolish thing, sir, tried my luck with \
807                  oyster farming this year. The place is too far \
808                  from the sea, and I can't get any oysters in my \
809                  beds, 'cause there's no water to grow 'em in.~";
810            Show:
811               if (noun has is_sphere)
812                  "~Hey, I seen something like that once.~";
813            Give, Tell:
814               "The farmer smiles, but shakes his head.";
815            default:  "The farmer is preoccupied with something as \
816 he squints into the sun.";
817         ],             
818         before [;
819            Cast:
820              if (the_spell_was == foblub_spell or espnis_spell)
821 "~I'm just a simple farmer, sir. I'm afraid you're losing me \
822 with your fancy words.~"; 
823         ],
824    has animate;
825
826 Object water_spirit "water spirit" In_Lighthouse
827   with name "spirit",
828        description "It looks like a large moving mass of seawater, \
829                   in a somewhat man-like shape.",
830        each_turn [ i ;
831        ! spirit attack
832        ! (in general, the 4 spirits are _very_ dangerous.
833        ! There's a 1/5 chance of killing outright, and 2
834        ! chances of doing 10 and 5 points of damage respectively.
835        ! In short, the player needs to realize it's time to swanko,
836        ! and do so, quickly)
837        if (self hasnt general) {
838             give self general ~concealed;    
839             "^Suddenly, water seeps in from the west, and forms \
840             into a large vaguely-humanoid shape before your very \
841             eyes!";
842        }
843        i = random(5);
844        if (i == 1) {
845           deadflag = 1;
846           "^The water creature moves quickly, and smothers you \
847           in water! You try to escape, but the creature has \
848           amazing strength and weight! The spirit soon \
849           envelopes your head, and you drown...";
850        }
851        if (i == 2) 
852           Player_HP_CUR = Player_HP_CUR - 10;
853        if (i==3) 
854           Player_HP_CUR = Player_HP_CUR - 5;
855        if (Player_HP_CUR <= 0) {
856           deadflag = 1;
857           "^The last blow from the water spirit was too much for \
858           you, I'm afraid to say. You sink to the ground, to \
859           weak to defend yourself, as the spirit slowly oozes \
860           towards you for the final blow...";
861        } 
862        print "^The water spirit ";
863        if (i==2)
864           "blasts you with a jet of seawater! \
865           It feels like a battering ram just used you for a \
866           practice drawbridge!";
867        if (i==3)
868           "buffets you with small jets of water! \
869           You feel exposed areas of skin getting rubbed raw by \
870           the force of the water!";
871        "forms into a small wave and tries to \
872        crush you, but you evade just in time!";
873        ],
874        before [;
875           Cast:
876             if (the_spell_was == swanko_spell) {
877                remove self;
878                "As you speak the chant, the water spirit falls back \
879                in fear! You finish the chant, and the water spirit \
880                makes one last attempt to smother you, but dissipates \
881                with a splash!";
882             }
883             print "The creature makes a banshee-howl as you chant.^"; 
884        ],
885        life [ ;
886           Attack: 
887             print "You ";
888             if (random(20) >= 8)
889             "strike the water creature, but your attack passes \
890             harmlessly through it! You hear a strange noise from \
891             the creature -- akin to a drowning man laughing.";
892             "attack the water spirit, but miss!";
893           default: "It's too busy trying to kill you.";
894        ],
895    has animate concealed;
896
897 Object mad_hermit "mad hermit" FUBLIO_Cave
898    with name "hermit" "madman" "mad",
899         description "He looks quite crazed -- his wild eyes \
900 are almost unbearable to watch. His clothes are complete \
901 tatters, and he looks rather emaciated.",
902         each_turn [ i ;
903         i = random(10);
904         switch(i) {
905         1: "^The hermit stares at you and screams. \
906 ~Demon, trickster -- you'll not fool me again!~";
907         2: "^The hermit smiles at you. ~Come to pay \
908 your respects to an old man, Humboz? I know it's you.~";
909         3: "^The hermit shrinks into a corner and weeps. ~No more, no more. I \
910 can help you no more.~"; 
911         4: "^The hermit hums a little tune.";
912         5: "^The hermit talks to someone or thing unseen. \
913 ~Closer, closer, nary a sound betray...~";
914         6: "^The hermit grabs your shoulder. ~I am hampered,~ \
915 he pleads with you, ~by the lack of an algebraic solution! \
916 That was where I went wrong!~";
917         7: "^The hermit babbles something about a shining \
918 tower on a hill.";
919         8: "^The hermit pauses. ~Listen, do you hear them? \
920 The voices -- everywhere!~";
921         default: "^The hermit giggles for no reason.";
922         }  
923         ],
924         life [;
925           Answer:
926             if (special_word=='hello')
927                "~We meet again, do we not?~";
928           Ask:
929             switch (second) {
930             'exit', 'outside':  "The hermit laughs. \
931 ~You want to leave already? Very well, you'll find \
932 the exit where you came in.~";
933             'entrance': 
934                print "The hermit chuckles. ~Forgotten where \
935 you came in? It hasn't gone anywhere.";  
936                if (FUBLIO_Cave.number == 1) {
937                   FUBLIO_Cave.number = 2;
938                   "~ He points at a space in the south wall, which \
939 you realize is actually a well-hidden tunnel.";  
940                }
941                else "~";
942           !  'sack': "~A fine pet, mine and mine forever.~";
943             'food', 'fish': "~My friends of the deep, they \
944 sacrifice themselves for me, as I will some day for them.~";
945             default: "~Many are the secrets you keep.~";
946             }
947           Give:
948             if (noun has edible) {
949                print "The hermit greedily takes ", (the) noun, " and \
950 gobbles it quickly";
951                remove noun;
952                if (p1 in self) {
953                   move p1 to player;
954                   print ". ~Good, yes. \
955 I have something for you -- something you will treasure as I have.~ He \
956 gives you a piece of parchment.";
957                }
958                "."; 
959             }
960             "~No, no, I already have many of those.~";
961           Attack, ThrowAt, Order:
962             "The hermit cowers in one corner of \
963 the cave, screaming. You stop, and reconsider.";
964           Kiss:
965             "Tears run down the hermit's cheek.";
966           Show, Tell:
967             if (noun has edible)
968                "The hermit visibly salivates.";
969             "The hermit gibbers maniacally."; 
970         ],
971         before [;
972            Cast:
973        "The hermit joins in with your chanting, and \
974 twists the meaning of the words! You quickly stop.";
975         ],
976         time_left 0,
977         time_out [;
978            deadflag = 1;
979            "^The hermit seems to recognize you through his madness! \
980 ~You have returned! The Big Man! Biggest of them all! \
981 Returned to deliver me from my prison. I had never forsaken \
982 you!~^^\
983 ~Wait,~ you protest, ~stop this madness!~^^\
984 But the crazed hermit continues. He prostrates in front \
985 of you and babbles incoherently. ~I put all my faith \
986 in you -- I have to leave here, before I go insane! \
987 The others, they abandoned hope. But not me. No! \
988 You have always had our best interests in mind.~^^\
989 He begins an eerie, frenetic song that jars your very soul. \
990 You watch the water level start to rise near the southern \
991 entrance, and wait for the end.";
992         ],           
993    has animate transparent;
994
995
996  
997 ! ************
998 ! spells/scrolls
999 ! ************
1000
1001 Object spotted_scroll "spotted scroll" FUBLIO_Cave
1002   class scroll_class,
1003   with name "spotted",
1004 ;
1005
1006 Object bekdab_spell "turn iron to rust" spotted_scroll
1007   class spell_class,
1008   with name "bekdab",
1009        magic [;
1010              "Your chant goes unanswered. I guess you need pure iron.";
1011        ],
1012 ;
1013
1014 ! ************
1015 ! Misc objects
1016 ! ************
1017
1018
1019 Object sack "fur sack" sailboat
1020    with name "sack" "fur",
1021         description "A fairly large sack made of furs and animal \
1022 hides.",
1023         ! weight 20, 
1024         size 24,
1025         ! capacity 20,
1026    has container openable;
1027
1028 ! (wet -- Anabais is one of four evil elemental powers)
1029 Object p1 "wet parchment" mad_hermit
1030    class parchment_class,
1031    with name "wet",
1032 description "~...evidence that there are more demons like \
1033 the evil Anabais! In fact, I suspect that four demons, not \
1034 one, faced the Ancient Ones in spiritual battle at the \
1035 dawn of time! To suspect this is...~";
1036
1037
1038 ! 1st rod piece -- GRAY
1039 Object gray_rod_piece "gray rod piece" In_Lighthouse
1040   class rod_class,
1041   with name "gray",
1042        initial "In the center of the room is a short gray rod.",
1043        description "It's a short section of a rod made of some \
1044 undeterminable hard substance, \
1045 colored gray like murky water. A piece of the Rod of \
1046 the Ancients, no doubt!",
1047 ;
1048
1049 ! 1st sphere - SILVER
1050 Object silver_sphere "silver sphere"
1051    class sphere_class,
1052    with name "silver",
1053         description "A tiny perfect silver sphere, made of some strange \
1054            unknown metal.",
1055 ;
1056