X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=src%2FSPIRIT.INF;fp=src%2FSPIRIT.INF;h=0000000000000000000000000000000000000000;hb=8cf6c360a875867b3cb9b78b9e73a0e72d527d17;hp=a458e6de4f342e42f41776cf81b2a86547d72b06;hpb=eabbe6652d6c382ba6fe25cba07074f73020b4d0;p=spiritwrak.git diff --git a/src/SPIRIT.INF b/src/SPIRIT.INF deleted file mode 100644 index a458e6d..0000000 --- a/src/SPIRIT.INF +++ /dev/null @@ -1,3075 +0,0 @@ -! ***************************************************************** -! SPIRITWRAK -- An exercise in copyright infringement :) -! -! Release 1, 12/95 -- 3/96 -! Release 2, 3/96 -- -! Release 3, 4/96 -- -! Copyright (C) 1996, D. S. Yu -! -! This program is free software; you can redistribute it and/or modify -! it under the terms of the GNU General Public License as published by -! the Free Software Foundation; either version 3 of the License, or -! (at your option) any later version. -! -! This program is distributed in the hope that it will be useful, -! but WITHOUT ANY WARRANTY; without even the implied warranty of -! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -! GNU General Public License for more details. -! -! You should have received a copy of the GNU General Public License -! along with this program; if not, write to the Free Software -! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -! -! To contact the author (Dan Yu), send email to dsyu@holonet.net. -! -! ***************************************************************** - -! SPECIAL THANKS: -! Mr. Blank, Lebling, Meretzky, Moriarty for the Zork universe. -! Graham Nelson for Inform, and for various code I've shamelessly cribbed. - -! NUTRITION NOTE: No Microsoft(tm) products were used in the -! construction of this game - -! ** inform compile switches here ** -Switches exv5b; - -! ** abbreviations -Include "spirita.inf"; - -! ** Story Constants ** -Constant Story "SPIRITWRAK"; -Constant Headline "^An Interactive Fantasy Adventure^\ - Copyright (C) 1996, by D.S. Yu.^\ -Portions copyright Graham Nelson.^^\ -'SPIRITWRAK' comes with ABSOLUTELY NO WARRANTY ^\ -This is free software, and you are welcome to redistribute it \ -under conditions as described in the GNU General Public License as published by \ -the Free Software Foundation; either version 3 of the License, or \ -(at your option) any later version.^^"; - -Release 3; - -! ** Scoring System -Constant MAX_SCORE 250; -Constant NUMBER_TASKS 27; -Constant TASKS_PROVIDED; -Constant OBJECT_SCORE 2; -! Constant ROOM_SCORE 1; -! Global task_scores initial t1 t2 t3..... -Array task_scores -> 2 5 5 5 10 15 5 5 5 5 5 5 10 10 10 5 5 5 10 10 5 5 10 5 5 5 10; - -! ** Player inventory and weight system -Constant MAX_CARRIED 15; ! Max of 15 items carried at start - ! This can be changed on the fly by adjusting player.capacity -Property weight; -! Entire weight system removed 3/16/96, however certain puzzles -! inadvertently depend on this, so... -Property size; - -global Player_HP_MAX = 20; ! number of hp MAX (should be 20 + score) -global Player_HP_CUR = 20; ! number of hp left (< MAX) -global Player_Lives_Left = 3; ! number of resurrects left -global in_hades = 0; ! Is the player in Hades? (we certainly hope not) -global in_atrii = 0; ! Is the player in Atrii? -! global all_my_spells data 32; array for spells in spell book -Array all_my_spells -> 64; ! array for spells in spell book -global has_resist_gravity = 0; ! is player resisting gravity?(see feeyuk spell) -global spell_block = 0; ! block spell-related stuff (end-game) - -! Any actions that are replaced get mentioned here -Replace PraySub; -Replace StrongSub; -Replace InsertSub; ! for relative sizes - -! *** Include Parser and VerbLib -Include "Parser"; -Include "VerbLib"; - -! -- two global location ptrs for Barsap's Gambit -global WN_TO; -global ES_TO; - -! ******************* CLASS DEFS ***************** - -! ** rod (part) class and attribute -Attribute is_rod; - -Class rod_class - with name "rod", - description "A thin rod made from some undeterminable material.", - !weight 10, - size 10, - before [; - Cast: - "You complete the chant, but the rod lies unaffected! \ - Perhaps it is protected from magic somehow?"; - Join: - if (second has is_rod) - "You try to bring the rods together, but a \ -sudden blast of energy prevents you, and stings your hands!"; -! (note that true rod pieces have their own Join befores, which -! should, in theory, get called instead of this one). - ], - has is_rod scored; - -Class parchment_class - with name "parchment", - description "A piece of blank parchment.", - !weight 10, - size 15, -; - -Attribute is_sphere; - -Class sphere_class - with name "sphere", - description "A small hard sphere made from some undeterminable material.", - !weight 5, - size 3, - before [; - Cast: - "You complete the chant, but the sphere lies unaffected! \ - Perhaps it is protected from magic somehow?"; - ], - has is_sphere scored; - -Attribute is_flag; - -Class flag_class - with name "flag" "cloth", - plural "flags", - description "A short square piece of colored cloth.", - !weight 10, - size 15, - has is_flag; - -Class trophy_dep_class - with name "depression" "niche" "hole" "keyhole", - initial [; -print "There is a circular depression in the center of the floor"; -if (trophy in self) - ". Sitting in the depression is a trophy."; -else "."; - ], - description [; -print "A small circular depression in the center \ - of the stone floor"; -if (trophy in self) - ". At the moment, the depression holds a trophy."; -else ". There seem to be three small concave \ - marks in the otherwise flat stone of the depression."; - ], - size 8, - capacity 1, -has static container open; - -Attribute is_niche; -Property counter_niche; -Property niche_dir; ! assoc with the dir a niche is facing. - -Class niche_class - with name "niche", - capacity 1, - niche_dir 1, ! default north - description "It looks like a chiseled-out niche in the floor.", - initial [; - switch (self.niche_dir) { - 1: print "There's a square niche in the northern edge of the floor here"; - 2: print "There's a square niche in the western edge of the floor here"; - 3: print "There's a square niche in the southern edge of the floor here"; - 4: print "There's a square niche in the eastern edge of the floor here"; - } - if (children(self) ~= 0) { - print ". Resting in the niche is "; - InDefArt(child(self)); - print " that extends into the darkness"; -! weird -- There is no "CInDefArt(), equiv to (A) obj, which -! is probably pretty simple... - } - "."; - ], - before - [ j ; - Receive: - if (noun hasnt is_wood_beam) - "That's not going to stay in the niche."; - else { - ! (odd capacity check, seems like I'm stepping in front...) - if (children(self) ~= 0) - "The niche space is currently full."; - ! place both pieces in niches - j = child(noun); ! child piece (whichever) - move j to self.counter_niche; - move noun to self; - "You carefully place one end of the beam in the niche and \ - extend the other end into the darkness. You feel something \ - solid support the far end!"; - } - LetGo: - ! (reconstruct wood beam) Assumption is that noun must have - ! wood_beam attrib. - move child(self.counter_niche) to child(self); - move child(self) to player; - "Taken."; - ], - has static container open is_niche; - -! ** multiple coins, cribbed from "Balances" -Attribute is_coin; - -Class coin_class - with name "coin", - description "A round metal disc, with ~1zm~ stamped on both sides.", - !weight 1, - size 1, - parse_name - [ i j w; - if (parser_action==##TheSame) - { if ((parser_one.&name)-->0 == (parser_two.&name)-->0) return -1; - return -2; - } - w=(self.&name)-->0; - for (::i++) - { j=NextWord(); - if (j=='coins') parser_action=##PluralFound; - else if (j~='coin' or w) return i; - } - ], - plural "coins", - has is_coin; - -! ** Spell-casting system, again cribbed from Graham's "Balances", -! except stuffy priests call them 'chants'... -! ---------------------------------------------------------------------------- -! Now the whole spell-casting system -! ---------------------------------------------------------------------------- - -Attribute is_spell; -Attribute known_about; -Attribute is_scroll; -Attribute is_spell_book; -Property magic; -Fake_Action SayName; - -[ SpellName obj; print (address) (obj.&name)-->0; ]; - -Class spell_class - with name "spell" "spells" "chant" "chants", article "the", number 0, - short_name - [; SpellName(self); print " chant"; give self known_about; rtrue; - ], - before - [; - ! SayName: SpellName(self); print " chant: ", object self; - SayName: SpellName(self); print " chant: ", self; - give self known_about; rtrue; - Examine: ; "."; - ], - size 0, - has is_spell; - -Object memory "memory" - with capacity 5, ! will change periodically, given God-granted powers... - number 1, - size 0, - before - [ i j k; - Examine: - if (spell_block == 1) - "Currently, your mystic powers don't seem to be working."; - objectloop (i in self) if (i.number==100) j++; - if (j>0) - { print "The "; - objectloop (i in self) - if (i.number==100) - { k++; SpellName(i); - if (k==j-1) print " and "; - if (k0) - { print "the "; - objectloop (i in self) - if (i.number<100) - { k++; - PrintShortName(i); - if (i.number==2) print " (twice)"; - if (i.number==3) print " (thrice)"; - if (i.number==4) print " (four times)"; - if (i.number>=5) print " (many times)"; - if (k==j-1) print " and "; - if (k3) print " yet another time."; - if (self.number <= self.capacity) { new_line; rtrue; } - i=youngest(self); ; - "^A voice booms out ~Do not try to exceed your powers, mortal!~"; - Remove: - if (second notin self || second.number==100) rtrue; - if (self.number>0) self.number=self.number-1; - second.number=second.number-1; - if (second.number==0) remove second; - rtrue; - ]; - -Object gnusto_spell "copy a chant into your prayer book" memory - class spell_class - with name "gnusto", - number 100, - magic - [ i a_book; - if (spell_block==1) - "Currently, your mystic powers don't seem to be working."; - if (amulet hasnt worn) - "You speak the chant, and absolutely nothing happens!"; - if (second has is_spell_book) - "Unlike scrolls, prayer books are magically guarded against \ - the 'theft' of their lore."; - if (second==0 || second hasnt is_scroll) - "Your chant goes unanswered."; - if (second notin player) - "A gnusto chant would require close scrutiny of the scroll \ - it is to copy, which you do not seem to be holding."; - objectloop (i in player) - if (i has is_spell_book) a_book=i; - if (a_book==0) - "Your chant fails, as you have no prayer book."; - i=child(second); - if (i==0 || i hasnt is_spell) - { print "Your chant fails, as "; DefArt(second); - " is illegible."; - } - ; remove second; - print "Your prayer book begins to shake! Slowly, ornately, \ - the words of "; DefArt(i); " are inscribed, \ - into the book with a violet glow. \ - The book's brightness fades, but the chant remains! \ - However, the scroll on which it was written vanishes as \ - the last word is copied."; - ]; - -Class spell_book_class - with magic 0, - capacity 20, - size 15, - before - [ p i; Open, Close: - CDefArt(self); " will always open to the desired page thanks \ - to the powers of the Gods, may they never forget us."; - Attack: - print "When you are done, "; DefArt(self); " remains unmarred."; - Learn: - if (self.magic==0) "(This prayer book has no pages.)"; - p = self.magic; - for (i=0:ii)~=0:i++) ; - if (i==self.capacity) rtrue; - p-->i = second; - rtrue; - ], - after - [ p i j; Examine: - if (self.magic==0) "(This prayer book has no pages.)"; - p = self.magic; - for (i=0:ii)~=0:i++) - { j=p-->i; ; - } - rtrue; - ], - has is_spell_book; - -Class scroll_class - with parse_name - [ i j k; j=-1; - if (self has general) - { if (child(self)~=0 && child(self) has is_spell) - j=(child(self).&name)-->0; else j='illegible'; - } - for (::) { - k = NextWord(); - if (k=='scrolls') parser_action = ##PluralFound; - if ((k=='scrolls' or 'scroll' or j) || (k==(self.&name)-->0)) - i++; - else return i; - } - ! while (NextWord()==j or 'scroll' or (self.&name)-->0) i++; - ! return i; - ], - before - [ i; Examine: - i=child(self); - give self general; - if (i==0 || i hasnt is_spell) - "The scroll has faded, and you cannot read it."; - print "The scroll reads ~"; ; "~."; - ], - invent - [; if (inventory_stage==2 && self has general) - { if (child(self)==0 || child(self) hasnt is_spell) - print " (which is illegible)"; - else - { print " (of "; DefArt(child(self)); print ")"; } - } - ], - size 10, - has scored is_scroll; - -! NOTE: This routine has a slight bug (as cribbed from GN's -! Balances, rel2) in that Examine, if the routine reaches -! scope_stage 3, prints a rather confusing msg. However, -! the appropriate msg is printed for, say, Learn, if the -! spell is unknown/out-of-scope. Oddly, action can't -! be checked at stage 3, so I copied a second version of -! the routine for Examine only. -DY -! 3/19 update: Checking Graham's release 3 of Balances, -! I stumble across the "action_to_be" var. Most useful. -[ ReadableSpell i j k; - if (scope_stage==1) return 1; - if (scope_stage==2) - { objectloop (i in player) - if (i has is_spell_book) - { for (k=0:kk~=0:k++) - { j=(i.magic)-->k; PlaceInScope(j); - } - } - rtrue; - } - if (action_to_be == ##Examine) - "You can't see any such thing."; - !"You have never seen or heard of such a chant."; - "You can't see such a chant, if that is indeed a chant."; -]; - -[ SpellsSub; ; ]; ! for our case, 'chants' will work also - -[ LearnSub; if (location==thedark) - print "(The magic purple glow of the chants casts enough light \ - that you can read them.)^"; - ; -]; - -global the_spell_was = gnusto_spell; - -[ CastOneSub; ; ]; - -! Property long unmagic; - - -! (wood beams and niches -- for Barsap's Gambit) -! (put after 'the_spell_was' global defined) - -Attribute is_wood_beam; - -Class wood_beam_class - with name "wood" "beam", - plural "beams", - description "A long thin wooden beam.", - !weight 10, - size 50, - number 0, ! number is the 'strength left' qualifier - before [; - Cast: - if (the_spell_was == egdelp_spell) - "The wood beam is covered in a waxy film! Thinking \ -better of this, you hastily wipe off the offending build-up."; - if ((the_spell_was == luncho_spell or huncho_spell) && - (parent(self) has is_niche)) { - ! reconstruct beam before teleporting - ! due to problem below, I'm denying this... -"Your chant goes unanswered."; - ! move child(parent(self).counter_niche) to self; - ! <>; - ! NOTE NOTE This may recursively explode... - } - ], - has is_wood_beam; - -Class balsa_beam_class - class wood_beam_class, - with name "balsa", - plural "balsa wood beams", - description "A long thin balsa wood beam.", - number 0; ! always breaks - -Class pine_beam_class - class wood_beam_class, - with name "pine", - plural "pine wood beams", - description "A long thin pine wood beam.", - number 1; - -Class ebony_beam_class - class wood_beam_class, - with name "ebony", - article "an", - plural "ebony wood beams", - description "A long thin ebony wood beam.", - number 2; - -[ CastSub k; - the_spell_was = noun; ; - -! if (noun has general) -! { give noun ~general; -! if (RunRoutines(noun,unmagic)~=0) rfalse; -! "Nothing happens."; -! } - - if (amulet hasnt worn) - "You speak the chant, and absolutely nothing happens!"; - if (spell_block==1) - "Currently, your mystic powers don't seem to be working."; - if (in_hades == 1) - "Your Gods can't save you now..."; - if (second~=0) - { ResetVagueWords(second); ! Set "it", "him", "her" - if (RunRoutines(second,before)~=0) rfalse; ! Run before routine(s) - } - k = random(10); - if (k<=3) { - if (k==1) - "You speak the chant, but the Gods are not kind this time, as nothing happens!"; - if (k==2 or 3) - "You speak the chant, but something sounds wrong. Nothing happens \ -this time."; - } - if (RunRoutines(noun,magic)~=0) rfalse; - "Nothing happens."; -]; - -[ InScope i; - if (verb_word=='c,cast' or 'cast') - objectloop (i in memory) PlaceInScope(i); - rfalse; -]; - -[ ParserError x i flag vb; - if (etype==VERB_PE or ASKSCOPE_PE) - { if (etype==ASKSCOPE_PE) - { if (verb_word=='cast') vb=1; - if (verb_word=='learn' or 'memorise' or 'memorize') vb=2; - if (verb_word=='copy') vb=3; - if (vb==0) { etype=CANTSEE_PE; rfalse; } - } - wn=verb_wordnum; if (vb~=0) wn++; - x=NextWordStopped(); - for (i=player+1:i<=top_object:i++) - if (i has is_spell && Refers(i,x)==1 - && i has known_about) flag=1; - if (flag==1) - { if (vb==0 or 1) - "You haven't got that chant prepared. [Type ~spells~ \ - or ~chants~ to see what you do have prepared.]"; - if (vb==2) - "Your training is such that you can only prepare such a chant \ - with the aid of a prayer book containing it."; - if (vb==3) - "You have no text of that chant to copy."; - } - if (vb==1) - "You haven't prepared that chant, if indeed it is a chant."; - if (vb==2 or 3) - "You haven't access to that chant, if indeed it is a chant."; - } - rfalse; -]; - -! Random attempt to code a ChooseObjects for the -! coin choosing problem often seen in the Bank of Zork -[ ChooseObjects obj code; - if (code < 2) rfalse; - if ((action_to_be == ##Remove or ##Insert) && - (obj has is_coin) && (obj in player)) return 9; - return 0; -]; - -[ UnknownVerb word i; - objectloop (i in memory) - if (word==(i.&name)-->0) { the_spell_was = i; return 'c,cast'; } - rfalse; -]; - -[ PrintVerb v; - if (v=='c,cast') { print "cast a chant at"; rtrue; } - rfalse; -]; - -! ---------------------------------------------------------------------------- -! The player's spell book, and initial spells (to go with gnusto): -! ---------------------------------------------------------------------------- - -Object prayer_book "prayer book" - class spell_book_class, - with name "prayer" "book" "my" "spellbook", - description "Mystical Chants^"; - -Object frotz_spell "cause an object to give off light" - class spell_class, - with name "frotz", - magic - [; if (second==0) "There is a brief, blinding flash of light."; - if (second has animate) - "The chant, not designed for living creatures, is denied."; - if (parent(second)==compass) - "The chant fails."; - give second light; - print "There is an almost blinding flash of light as "; DefArt(second); - print " begins to glow! It slowly fades to a less painful level, but "; - DefArt(second); " is now quite usable as a light source."; - ], -; - -! ** Start of locations (and other objs) ** - -! *********************************************************************** -! ** -! ** LOCATIONS INSIDE MONESTARY (Mostly) -! ** -! *********************************************************************** - -Object MON_Chapel1 "Monastery Chapel" - with description "You are standing in a monastery chapel. \ -All around you, fellow Brothers of the Order are standing, chanting. \ -The eerie droning voices seem to reverberate into the air. At the \ -front of the chapel, Brother Joseph stands in deep concentration, \ -holding the Rod of the Ancients.", - name "brothers", - number 0, - each_turn [ ; - MON_Chapel1.number = MON_Chapel1.number + 1; - Startup1(MON_Chapel1.number); - ], - before [ ; - if (action==##Listen) "You hear heavy chanting"; - if (action==##look) rfalse; - if (action==##Wait) rfalse; - "You are caught up in the collective chanting, and cannot break \ - your concentration to do much of anything else."; - ], - has light; - -! A fake obj to handle 'look at Joseph' -Object MON_FAKE "the Order" MON_Chapel1 - with name "Joseph" "rod" "brothers", - description [; <>;], -has scenery; - -! A somewhat bulky routine to set our stage. -[ Startup1 currturn; - if (currturn <= 1) { - print "^Brother Joseph now speaks directly to the entire Order.^^\ - ~Fellow Brothers, the year, as you know, is 976 GUE. \ - A difficult time indeed. Ten years have passed since the Cataclysm \ - brought forth by the Circle of Enchanters changed our world forever. \ - The outside world as we know it is in turmoil. A period of great \ - change is upon all of us.~^"; - rtrue; - } - if (currturn == 2) { - print "^Brother Joseph continues speaking.^^\ - ~Our order has always maintained the strictest secrecy. Few \ - outside of our order know of our existence. \ - We are the keepers of the mystic balance \ - that which embodies pure magic that can keep our world \ - safe. It has always been thus -- we watch over all \ - of Quendor, never interfering in the affairs of others, yet \ - striving to maintain harmony.~^"; - rtrue; - } - if (currturn == 3) { - print "^Brother Joseph continues speaking.^^\ - ~But we can no longer depend on enchantments to keep \ - outsiders at bay. Magic as we know it is dying. The dreaded \ - Age of Science is already upon us, and in short time, our \ - order will be discovered, and the balance will be no more. Many of \ - our order have gone out into the world in secret, in attempts \ - to repair what has been broken, but alas, this appears to be \ - impossible.~^"; - rtrue; - } - if (currturn == 4) { - print "^Brother Joseph continues.^^\ - ~I have brought you all forth today to say that although we \ - cannot protect the future of Quendor, we can protect ourselves!~ \ - He holds the Rod of the Ancients high. ~This holy Rod, which \ - the Ancient Ones used to defeat the demon Anabais, \ - has the power to protect our order. I have discovered a lost mystic \ - cube!~ He holds a white, featureless cube high in his other hand. \ - ~This cube, when joined with the Rod of the Ancients, will \ - preserve our order forever, sequestering all of us in another time, \ - another place!~^"; - rtrue; - } - if (currturn >= 5) { - print "^There is a momentous pause. ^^\ - Brother Joseph looks at the entire Order. \ - ~May the Gods smile down upon us on this day! We go now, \ - into the unknown!~ He triumphantly joins the white cube to \ - the end of the Rod of the Ancients.^^\ - There is a sudden, blinding white flash! The chanting is instantly \ - broken by a tremendous thunderclap! Brother Joseph is suddenly \ - thrown back by a great force, and to your horror, the Rod of the \ - Ancients breaks apart! Four pieces now float serenely above the \ - altar, above a strange black globe that seems to crackle with energy.^^\ - ~AT LAST!~^^\ - The voice comes from nowhere and everywhere. The black sphere \ - pulsates with lightning.^^\ - ~ANABAIS IS FREE AGAIN!~ The voice pauses. \ - ~I see you found my fake mystic cube \ - Joseph. I knew that someday, someone would find it, and free \ - me from my prison!~ The voice pauses again. ~To show my gratitude, I'm \ - scattering this broken symbol to the corners of the world!~ \ - The pieces of the rod suddenly disappear!^^\ - ~Watch out!~ someone cries. \ - The black sphere suddenly expands with alarming speed. \ - Seconds later, a violent explosion seems to jar the very \ - ground you stand on, and a black void covers all.^^\ - You awaken in your room in a cold sweat. Was it all a terrible \ - dream? The day beckons...^"; - PlayerTo(MON_your_quarters); - ! remove MON_Chapel1; clean up memory (NOTE: This is futile) - rfalse; - } -]; - - -Object MON_your_quarters "Your Quarters" - with name "furnishing" "furnishings", - description "You are in your room in the Monastery. It is \ -sparsely furnished, but certainly feels like home. The exit \ -is north.", - n_to MON_f1hall1, - has light; - -Object note "note" MON_your_quarters -with name "note", - description "The note, in a hastily written scrawl, reads:^\ - ~Please stop by the chapel as soon as you can.^\ - -- Joseph~", - !weight 1, - size 5, -; - -!Object staff "staff" MON_your_quarters -! with name "staff" "walking" "trusty" "stick", -! initial "Your trusty walking staff is right where you left it.", -! description "A stout piece of pine you found while on a nature \ -! walk, this staff has served you well on many journeys.", - !weight 20, -! size 20, -!; - -Object sleeppallet "sleeping pallet" MON_your_quarters - with name "pallet" "sleeping" "roll", - description "This is your sleeping pallet, a short portable sleeping roll \ - made of straw. It's softer than it looks.", - size 25, - react_before [; - Go: if (player in self) "You'll have to get off the sleeping \ -pallet first."; - ], - has supporter enterable; - -Object MON_f1hall1 "Hallway (near your quarters)" - with description "You are in a hallway running west and east. The \ -vaulted ceilings are a nice touch. Your \ -quarters are to the south.", - name "vaulted" "ceiling", - s_to MON_your_quarters, - w_to MON_f1hall2, - e_to MON_f1hall3, - has light; - -Object MON_f1hall3 "Hallway (near quarters of Palemon and TuffBerry)" - with description "You are in a hallway running west and east. \ -Brother TuffBerry's quarters lie to the south. Brother Palemon's \ -quarters are to the north.", - w_to MON_f1hall1, - e_to MON_f1hall4, - n_to MON_Palemon_quarters, - s_to MON_Tuffberry_quarters, - has light; - -Object MON_f1hall4 "Hallway (east end)" - with description "You are at the east end of an east-west hallway. \ -Brother Joseph's quarters lie to the north, and Brother Toolbox's \ -quarters lie to the south.", -! The acolyte chambers lie to the east.", - w_to MON_f1hall3, - ! n_to MON_Joseph_quarters, - n_to "It doesn't look like Joseph is in. Perhaps you can find \ -him elsewhere.", - s_to MON_Toolbox_quarters, -! e_to MON_acolyte_chambers, - has light; - -! Object MON_acolyte_chambers "Acolyte Chambers" -! with description "You are in a long chamber that serves as the home \ -! for the many devoted acolytes of the Order. The room is currently \ -! empty.", -! w_to MON_f1hall4, -! has light; - -Object MON_f1hall2 "Hallway (west end)" - with description "You are at the west end of an east-west hallway. \ -There are stairs up and down here, and an exit to the west.", - name "stairs", - e_to MON_f1hall1, - u_to MON_f2hall1, - d_to MON_f0hall1, - w_to MON_garden, - has light; - -Object MON_garden "Monastery Gardens" - with description "You are in the Monastery gardens, where various \ -shrubs and conifers are covered in a light blanket of snow. \ -An open cloister lies to the west, while \ -a doorway heads east.", - name "cloister" "doorway" "shrubs" "conifers", - w_to MON_cloister, - e_to MON_f1hall2, - has light; - -!Nearby shrubs "snow-covered shrubs" -! with name "shrubs" "shrub" "snow-covered" "conifers" "conifer" "plants", -! description "Good thing they're evergreen.", -! has scenery; - -Object sand "sand" MON_garden - with name "sand", - initial "A small area in the snow has been cleared for late winter \ -planting, and some sand has been sprinkled here and there.", - description "A handful of sand, nothing more, nothing less.", - !weight 5, - size 5, - article "some", -; - -Object MON_cloister "Cloister Walkway" - with description "You are in an open cloister, that runs along the \ -Monastery gardens to the east. To the north is the main wing of the \ -Monastery. To the south is the entrance hall.", - name "cloister", - e_to MON_garden, - n_to MON_Main_hall, - s_to MON_Entrance_hall, - has light; - -Object MON_Entrance_hall "Entrance Hall" - with description "This is the large entrance hall to the Monastery. \ -Many a devoted visitor has passed through this place. \ -There is an exit to the outside world to the \ -south, and the rest of the Monastery lies to the north.", - s_to Cliff_face, out_to Cliff_face, - n_to MON_cloister, - before [; - Go: - if ((noun==s_obj) || (noun==out_obj)) - print "You are surprised by a cold blast of wind as you leave the Monastery!^"; - ], - after [; - Go: - if ((noun==in_obj) || (noun==n_obj)) - print "You are greeted by relatively warm and cozy air.^"; - ], - has light; - -Object MON_Main_hall "Main Hall" - with description "This is the main hall of worship in the Monastery. \ -A large domed ceiling hides some sort of lighting that create a warm yet \ -serene atmosphere. A covered walk to the rest of the Monastery lies to \ -the south. To the north is the Monastery chapel. A brazier sits in \ -the center of the room.", - name "dome" "ceiling" "lighting" "atmosphere", - s_to MON_cloister, - n_to MON_Chapel2, - has light; - -Nearby brazier "brazier" - with name "brazier", - description "This is a silver incense brazier, somewhat similar to \ -an ornamental bowl on a tripod. Brother Palemon supposedly \ -found it on one of his many journeys.", - before [; - Take: - "That's been in the Monastery for years. People would \ - be upset if you took it."; - Receive: - ! if (noun~=incense) - if (noun has is_sphere) { - print "As you place the sphere in the brazier, \ -you feel a strange sensation. Suddenly, the brazier is filled \ -with "; - if (noun == brown_sphere) - print "earthworms!"; - if (noun == green_sphere) - print "seawater!"; - if (noun == red_sphere) - print "burning embers!"; - if (noun == silver_sphere) - print "white vapors!"; - " No, wait, it's empty again. You hastily \ -withdraw the sphere, and try to clear your mind."; - } - else "That doesn't seem quite appropriate."; - ], - size 9, - has scenery container open; - -Object MON_Chapel2 "Monastery Chapel" - with description "You are in the Monastery Chapel, the site of the \ -recent appearance of the legendary Anabais. Signs of the \ -recent visit include the slightly scorched walls, and the \ -reek of brimstone. Wood pews are arranged in a circle \ -around the central altar. The exit is south.", - name "pews" "scorched", - s_to MON_Main_hall, - before [; - Smell: - "You detect the faint odor of brimstone."; -! Yell: -! if ((parent(Joseph)==MON_Chapel2) && (Joseph hasnt general)) -! "Shhh. You don't want to abruptly disturb Joseph like that."; -! Go: -! if (noun==s_obj) { -! if ((parent(Joseph)==MON_Chapel2) && (Joseph has general) && -! (WeightOf(Joseph) > 140)) { -! if (WeightOf(Joseph) == 149) { -! Joseph.weight = 139; -! print "^As you leave, Brother Joseph calls out \ -! ~Oh, and take something for that cold!~^"; -! rfalse; -! } -! if (WeightOf(Joseph) == 148) { -! Joseph.weight = 139; -! print "^As you leave, Brother Joseph calls out \ -! ~Oh, and remember -- reading the scriptures \ -! is one sure way of maintaining an active mind!~^"; -! rfalse; -! } -! if (WeightOf(Joseph) == 147) { -! Joseph.weight = 139; -! print "^As you leave, Brother Joseph calls out \ -! ~Oh, and remember -- mirth is wonderful for the soul, \ -! in moderation, of course.~^"; -! rfalse; -! } - ! add in any others here... -! } -! } -! Sneeze: -! if (Joseph hasnt general) { -! give Joseph general; -! Joseph.weight = 149; -! JosephWakeAction(); -! rtrue; -! } -! Yawn: -! if (Joseph hasnt general) { -! give Joseph general; -! Joseph.weight = 148; -! JosephWakeAction(); -! rtrue; -! } -! Laugh: -! if (Joseph hasnt general) { -! give Joseph general; -! Joseph.weight = 147; -! JosephWakeAction(); -! rtrue; -! } -! Drop: -! if (Joseph hasnt general) { -! give Joseph general; -! Joseph.weight = 146; -! JosephWakeAction(); -! move (inp1) to MON_Chapel2; -! rtrue; -! } - ], - has light; - -! And now, the incredible shrinking Brother Joseph... -! Modified 3/16 -- this puzzle seems to be unpopular... -Object Joseph "Joseph" MON_Chapel2 - with name "Brother" "Joseph", - description "Brother Joseph is a pale man, with gray eyes, a fine \ - beard, and a finer disposition.", -! weight 150, - number 0, ! used to hold count of (fake) rod pieces received - describe [; -! if (self hasnt general) -! "Brother Joseph is kneeling in front of the remains of the altar, \ -! his eyes closed, deep in meditation."; -! else - "Brother Joseph is here, standing by the altar."; - ], - life [; -! if ((WeightOf(Joseph) == 150) && ((action ~= ##Attack) || -! (action ~= ##WakeOther))) -! "Perhaps it's best not to bother him, he seems very \ -! deep in meditation."; -! WakeOther: -! if (WeightOf(Joseph) == 150) -! "Joseph isn't asleep, just meditating. You may need to \ -!do something subtle to rouse him."; - Attack, ThrowAt: - deadflag = 1; - Player_Lives_Left = 0; -"Your blow sends Brother Joseph staggering back.^^\ -Brother Joseph gets up and brushes himself off, and glares \ -at you. Ro-roo, I think you made him mad. \ -You remember, of course, that Brother Joseph is a renowned \ -full-contact martial artist?^^\ -~Impudent wretch! I'll show you how we deal with non-believers here!~\ -^^Suddenly, Brother Joseph produces a gigantic mallet from \ -beneath his robes and clobbers you into a pulp."; - Ask: - if (second=='amulet') - "~Don't leave the Monastery without it!~"; - if (second=='joseph') - "Joseph smiles. ~I believe we've been introduced.~"; - if (second=='rod') - "~We must recover the Rod before it is too late!~"; - if (second=='anabais') - "~Beware the demon! He is most cunning and dangerous!~"; - if (second=='scriptures') - "~Study the holy scriptures, and you will be rewarded.~"; - if (second=='palemon' or 'tuffberry' or 'toolbox') - "~I fear I know not where his feet now tread.~"; - "~I don't know anything about that. Perhaps you should \ - consult our library upstairs?~"; - - Tell: - "~Do tell.~"; - - Show: - if (noun has is_rod) - "~Have you succeeded in retrieving the Rod? If so, \ -do what you feel is right.~"; - - Give: - if (noun has is_rod) { - if ((noun==black_rod_piece) || (noun==white_rod_piece) || - (noun==smoke_rod_piece) || (noun==gray_rod_piece)) { - Joseph.number = Joseph.number + 1; - remove noun; - print "Joseph takes the rod piece. "; - if (Joseph.number==4) { - ! trouble -- got the whole fake rod to Joseph... - deadflag = 1; - Player_Lives_Left = 0; - "~The Order will \ -remember your acts of bravery forever,~ Joseph says, as he brings out \ -all four rod pieces and tries to join them together. A sudden burst \ -of light blinds you!^^\ -When you can see again, a large black sphere of malevolent energy \ -floats nearby! Joseph, either dead or stunned, lies in one corner \ -of the room. The four rod pieces are floating above the sphere.^^\ -~Foolish little priest,~ a evil voice says in you mind. ~You \ -have only brought upon yourself your own undoing. With my rod returned \ -by an innocent, the pact is complete. Come forth, my brothers, \ -for our time of power is at hand!~^^\ -The last thing you hear is mocking laughter, before the world \ -as you know it comes to a close."; - } - else - "~Well done, brave Priest!~ he says."; - } - else -"Joseph looks at the rod piece and seems puzzled. ~This isn't any part \ -of the Rod of the Ancients that I've ever seen. And yet, it seems similar.~ \ -He hands it back to you. ~In this, my teachings can help you no \ -further.~"; - } - else "Joseph waves off your offering. ~You may \ -need that in your quest.~"; - Answer, Order: - if (special_word=='hello' or 'hi') - "Joseph smiles. ~Hello.~"; - default: - "At the moment, Joseph seems to be \ -preoccupied with spiritual matters."; - ], - before [; - Cast: - "Brother Joseph stops you in mid-chant. ~That won't be necessary~"; - ], - each_turn [; - if (self hasnt general) { - give self general; - move Amulet to player; - "^Joseph smiles as you enter. \ -~I'm glad you found me. As you know, thanks to the old \ -fool standing before you, the demon Anabais is loose upon \ -the world once more. He has broken the Rod of the Ancients \ -which was keeping our house and Order protected from outsiders. \ -It is a sorry day for us all.~ Joseph pauses for a moment. \ -~You are our final hope in a time of chaos. Brothers \ -Palemon, TuffBerry and Toolbox have left the Order, and only \ -you remain. I must now ask you to serve the Order which you \ -have so faithfully served in the past. No short order this, for \ -our continued existence depends on it, but you must go out into \ -a world gone mad alone, and retrieve the four broken pieces of \ -the Rod of the Ancients, and return them here to me, so that we \ -can rid the world of the evil we have loosed!~^^Brother Joseph \ -pauses and searches his robes.^^~Here, you will need this,~ he \ -says, giving you a strange amulet. ~Without this amulet, the \ -Ancient Ones cannot give you the mystic aid that you will most \ -certainly need. But I waste much time. Go now, and may the \ -Gods smile upon us all.~"; - } - ], - has animate proper; - -Object Amulet "holy amulet" - with name "amulet" "holy", - description "This small golden amulet and chain seem to \ -shimmer with a strange mystic saffron energy. The \ -pendant portion of the amulet is in the shape of a small \ -golden cube.", - ! weight 10, - size 7, - before [; - Wear: - if (self hasnt worn) { give self worn; - "As you place the amulet around your neck, \ - you feel a strange sense of mystic power."; - } - else "You're already wearing that."; - ], - has clothing scored; - -! [ JosephWakeAction; -! print "^You make a subtle noise^^\ -! Brother Joseph opens his eyes, breathes deeply, and smiles.^^\ -! ~I'm glad you found me. As you know, thanks to the old \ -! fool standing before you, the demon Anabais is loose upon \ -! the world once more. He has broken the Rod of the Ancients \ -! which was keeping our house and Order protected from outsiders. \ -! It is a sorry day for us all.~ Joseph pauses for a moment. \ -! ~You are our final hope in a time of chaos. Brothers \ -! Palemon, TuffBerry and Toolbox have left the Order, and only \ -! you remain. I must now ask you to serve the Order which you \ -! have so faithfully served in the past. No short order this, for \ -! our continued existence depends on it, but you must go out into \ -! a world gone mad alone, and retrieve the four broken pieces of \ -! the Rod of the Ancients, and return them here to me, so that we \ -! can rid the world of the evil we have loosed!~^^Brother Joseph \ -! pauses and searches his robes.^^~Here, you will need this,~ he \ -! says, giving you a strange amulet. ~Without this amulet, the \ -! Ancient Ones cannot give you the mystic aid that you will most \ -! certainly need. But I waste much time. Go now, and may the \ -! Gods smile upon us all.~"; -! move Amulet to player; -! rtrue; -!]; - -Object altar "altar" - with name "altar" "damaged" "cube", - description "The altar is roughly the shape of a five foot \ - white cube. The top edges appear to be singed black and there \ - are cracks and chips all over.", - found_in MON_Chapel1 MON_Chapel2, - before [; - Search: - if (self hasnt general) { - give self general; - move holywater to player; - "You uncover a vial of holy water."; - } - ], - has scenery supporter; - -Object holywater "vial of holy water" - with name "holy" "water" "vial", - description "A small glass vial of holy water.", - before [; - Eat: "You might want to try drinking it instead."; - Drink: remove self; - Player_HP_CUR = Player_HP_MAX; - "You quaff the holy water with a simple ceremony. \ -You feel physically and spiritually refreshed."; - ], - size 5, -; - -Object MON_Palemon_quarters "Brother Palemon's Quarters" - with description [; - print "You are in Brother Palemon's quarters, which \ - have been left unattended ever since Brother Palemon's \ - unexplained disappearance many years ago"; - if (self has general) - print ". To the west, a small secret door in the wall leads \ - into darkness"; - ". The exit is south."; - ], - s_to MON_f1hall3, - w_to [; - if (self hasnt general) - "You can't go that way."; - else return MON_Hidden_sanctum; - ], - before [; - Push: - if (noun == w_obj) { - if (self hasnt general) { - give self general; - "Pushing the west wall reveals a hidden secret door! \ -You've been in these quarters before, but certainly never noticed \ -anything like this!"; - } - else "Nothing happens."; - } - Touch, Rub: - if ((noun == w_obj) && (self hasnt general)) - "Oddly, a section of the west wall feels slightly thin."; - ], - has light; - -Object journal "thin journal" MON_Palemon_quarters - with name "journal" "thin", - description "This journal is very strange indeed. Brother \ - Palemon seems to have been very preoccupied up to the point \ - of his disappearance with strange accursed places that he \ - claims are located all over Quendor. He also makes several \ - references to evil 'spirits' found in these places. You also \ - notice that several pages of parchment near the back of \ - the journal have been torn out.", - !weight 20, - size 15, -; - -Object MON_Hidden_sanctum "Hidden Sanctum" - with description "You are standing in a small chamber that obviously hasn't \ -been used in quite some time -- the cobwebs and dust are several \ -layers thick. There is a short crawl east.", - name "cobwebs" "dust", - e_to MON_Palemon_quarters, -; - - -Object dusty_scroll "dusty scroll" MON_Hidden_sanctum - class scroll_class, - with name "dusty", -; - -Object foblub_spell "deliver magnificent sermon (glue audience to seats)" dusty_scroll - class spell_class, - with name "foblub", - magic [; - if (second hasnt animate) - "Your sermon goes unheard."; - if (second == player) - "Well, I know you like listening to yourself, but \ -isn't this a bit much?"; - "You give a wonderful sermon about how one's future \ - affects one's past, but no one seems to be listening."; - ], -; - - -Object MON_TuffBerry_quarters "Brother TuffBerry's Quarters" - with description "You are in Brother TuffBerry's quarters, vacant \ -since he undertook his quest for Joseph not long ago. The \ -exit is north.", - n_to MON_f1hall3, - has light; - -Object page "torn page" MON_TuffBerry_quarters - with name "torn" "page", - !weight 5, - size 5, - description "This page was apparently \ -torn from a larger document of some sort. All that is left \ -now reads:^^\ - ~...fear. Just today I heard again something below \ - me when I was meditating upstairs. \ - It sounded like a person, or something alive at least \ - was just below, trying to quietly move around unnoticed. \ - Clearly this is \ - impossible, and yet I cannot doubt what I heard. \ - Palemon tells me I'm hearing spirits, but little does \ - he know that I once heard the same noises in his \ - very chambers! He was not around at the time, but \ - to the west, behind the wall, I...~", -; - - -!Object MON_Joseph_quarters "Brother Joseph's Quarters" -! with description "You are in Brother Joseph's quarters. The hallway lies \ -! to the south.", -! s_to MON_f1hall4, -! has light; - -Object MON_Toolbox_quarters "Brother Toolbox's Quarters" - with description "You are in Brother Toolbox's quarters, vacant \ -ever since he left the order due to differences many years \ -ago. The exit is north.", - n_to MON_f1hall4, - has light; - -Object tb_diary "diary" MON_Toolbox_quarters - with name "diary" "toolbox", - description "\ - ~-- <944 GUE> Today Brother Joseph tried to explain the \ - essence of how we channel magic energy through our \ - amulets. To me, this seems to pale in comparison with \ - the seemingly innate abilities of those who call \ - themselves Enchanters. Joseph did show me a nice \ - trick, however. He brought the Rod of the Ancients near \ - my amulet, and the amulet gave off a sudden purple flash of light! \ - I'll have to try that one on the Acolytes tomorrow.~^^\ - (there isn't much else of interest until the \ - very last entry, which is not dated)^^\ - ~-- So long diary. I'm now off to seek greater spiritual \ - guidance in Thriff. I hear the summers there are very nice \ - too.~", - !weight 12, - size 12, -; - -Object folded_scroll "folded scroll" MON_Toolbox_quarters - class scroll_class, - with name "folded", -; - -Object espnis_spell "deliver dull sermon (cause sleep)" folded_scroll - class spell_class, - with name "espnis", - magic [; - if (second hasnt animate) - "Your sermon goes unheard."; - if (second == player) - "A preacher boring himself to sleep with his \ -own sermon? This doesn't seem prudent."; - CDefArt(second); - " listens as you begin your sermon about the general \ - religious practices of the royal families of the past, but \ - only stifles a yawn when you finish."; - ], -; - - -Object MON_f2hall1 "Hallway (second floor, west)" - with description "You are in a hallway on the second floor \ - of the Monastery. The hallway continues east, while \ - stairs lead downwards.", - name "stairs", - d_to MON_f1hall2, - e_to MON_f2hall2, - has light; - -Object MON_f2hall2 "Hallway (second floor, east)" - with description "You are in a hallway on the second floor \ - of the Monastery that runs east-to-west. To the \ - north is the private meditation room. To the east \ - is the Monastery library. To the northeast is an \ - entrance to the steeple room.", - w_to MON_f2hall1, - n_to MON_priv_med_room, - e_to MON_Library, - ne_to MON_Steeple_room, - has light; - -Object MON_priv_med_room "Private Meditation Room" - with description "You are in a small bare chamber that is \ - used for private meditation and worship. The only \ - exit lies to the south.", - s_to MON_f2hall2, - has light; - -Object MON_Library "Monastery Library" - with description "You are in the Monastery library, a cozy, \ - almost cramped room with shelves of various books. \ - The exit is to the west.", - w_to MON_f2hall2, - has light; - -Object lib_shelves "shelves" MON_Library - with name "shelves" "bookshelves", - description "Just some bookshelves.", - has scenery supporter; - -! *** LIBRARY BOOKS - -! Scriptures: -! -- Of course, this is a ruse created from the deviations of -! Anabais. Grounded in some fact though. Each section has a -! lie, which may not initially be obvious. Truthful sections -! are scattered over Quendor. -Object HolyScriptures1 "a copy of the Holy Scriptures" lib_shelves - with name "holy" "scriptures" "copy", - description "This sacred tome details the teachings and \ -beliefs of the Order, of which it's certainly always good \ -practice to re-familiarize yourself with. The scriptures are \ -divided into several sections. Sections that \ -can be consulted in greater detail include:^^\ -~Doctrines~^\ -~Demons~^\ -~Spirits~^\ -~(Book of the) Mystical~^\ -~(Book of the) Planes~^\ -~(Book of the) Ancients~^\ -~Legend of the Rod~", - before [ w1; Consult: - if (consult_words > 1) - "You'll have to consult the sacred book by \ -individual section."; - wn = consult_from; w1 = NextWord(); - switch (w1) { - 'doctrines', 'doctrine', 'canon': -"~THE SACRED DOCTRINES OF THE ORDER OF BALANCE:^^\ -Thou shalt strive to achieve balance in a world filled with unbalance.^\ -Thou shalt pray to the Deities in moments of inner reflection.^\ -Thou shalt not harm innocents nor aid them -- this is the way of balance.~"; -! TODO add add - 'demons', 'demon', 'anabais': -"~Fear not, mortal men^\ -though your world be filled with demons^\ -and the wicked.^^\ -Thou alone can prevail^\ -as The Ancient Ones^\ -against Anabais, the trickster^\ -were victorious.~"; -! LIE - The ancient ones lost to Anabais and the other demons - 'spirits', 'spirit': -"~Before the dawn of time, know that our world was \ -filled with evil spirits of the elements, \ -until mankind came upon the land and vanquished them \ -forever.~"; -! LIE - spirits still exist. - 'mystic', 'mystical', 'magic', 'chant': -"~If one is true of doubts, then a believer in the \ -great Harmony can draw upon the powers of the Ancients \ -and perform feats of mystic power anywhere. Remember that in \ -so doing, thou must act only as the channel of mystical \ -power for the Ancient Ones.~"; -! LIE - powers don't work everywhere, and not always. - 'planes', 'plane', 'atrii', 'hades': -"~Let not the ways of the mortal life \ -dissuade the knowledge of higher and lower planes \ -of existence.^^\ -For, beyond mortal reach are places where those who \ -have truly served the Order and those who have truly \ -forsaken the Harmony of Balance will find themselves \ -in death. These are the Ethereal Plane of Atrii and \ -the plane of the damned -- Hades.~"; -! LIE - don't have to die to reach Atrii. - 'ancients', 'ancient': -"~Trust in The Ancient Ones, those Three who showed mankind the \ -way of Balance and Harmony.~"; -! LIE - Four ancient ones existed. - 'rod', 'legend': -"~Anabais foresaw his own demise when he dared to \ -challenge the Ancient Ones. From powers of light and \ -darkness, the Ancient Ones constructed that holy Rod that \ -we know only as the Rod of the Ancients, and did smite \ -the demon Anabais so grievously, that they did imprison \ -him in that very Rod, where he could do no harm. This \ -very Rod was made of pieces of ancient elemental energy, \ -once separated. Only the powers of the Ancients could \ -bring them together.~"; -! LIE - Anabais never imprisoned, etc. - default: "There doesn't seem to be a section \ -about that."; - } - Cast: - if (the_spell_was == ledak_spell) { - remove self; - "The scriptures are surrounded by a \ -yellow glow. To your horror, the tome evaporates into nothing!"; - } - ], - !weight 20, - size 15, -has proper; - -! *** parchments -! (Several scraps of -! Palemon's journal are scattered around Quendor, -! contradicting the ancient scriptures) - -! (faded -- spirits exist) -Object p2 "faded parchment" MON_Hidden_sanctum - class parchment_class, - with name "faded", -description "~...are real! I have seen much evidence in the \ -jungles of Miznia, marshes of Fublio Valley, the ruins \ -of old Egreth and in Aragain itself! I believe that \ -they are associated with certain basic elements in the \ -surrounding area. But they dare not show themselves now, \ -not while magic is strong! Woe unto us, should the powers \ -of magic cease, as there would be nothing to stop their \ -terror...~", -; - -Object MON_Steeple_room "Steeple Room" - with description "You are in a round room with colored-glass \ - windows. Wood beams line the walls and rise to form \ - a short point in the peaked ceiling above. A small \ - walkway returns to the southwest. A long wood table \ - sits in the center of the room.", - name "windows" "glass" "beams" "walkway" "handle" "latch", - sw_to MON_f2hall2, - !out_to MON_Steeple_roof, - out_to steeple_window, - before [; - Go: - if ((noun == out_obj) && (steeple_window has open)) { - if (random(10) < 3) { - print "^You climb out the open window and somehow manage \ - not to fall.^"; - } - else { - deadflag = 1; -print "^You climb out the open window, but slip on the icy sill"; -if (has_resist_gravity == 0) ", and plummet to the ground!"; -else -"! As you float slowly downwards, you can't help but notice the \ -hungry-looking winter dire wolf below, waiting for you to land..."; - } - } - ], - has light; - -Object MON_Steeple_roof "Steeple Roof" - with description "You are on a very narrow ledge outside \ - the Monastery steeple. The snow and wind are doing \ - their best to send you to a ungracious death below. The \ - steeple roof is quite sharply slanted.", - in_to steeple_window, - name "roof" "ledge" "wind", - cant_go "It's hard enough staying on the ledge.", - before [; - Jump: - deadflag = 1; - if (has_resist_gravity==0) - "Well, if you insist. The ground breaks most of the \ - bones in your body, including the important ones."; - else - "You float downwards gracefully, into the waiting \ -jaws of a winter dire wolf."; ! - ], - has light; - -Object steeple_window "steeple window" - with name "window" "rose" "steeple", - found_in MON_Steeple_room MON_Steeple_roof, - description [; - print "A large rose-colored glass window"; - if (location==MON_Steeple_room) - ", with a handle and latch"; - "."; - ], - describe [; - if (location==MON_Steeple_room) { - if (self has open) - "Someone has left a rose-colored window open and some \ -snow drifts in."; - "A large rose-colored window lets some light in."; - } - if (location==MON_Steeple_roof) { - if (self has open) - "A window opens into the steeple proper."; - "A large rose-colored window is partially covered with snow here."; - } - ], - door_dir [; - if (location==MON_Steeple_room) return out_to; - return in_to; - ], - door_to [; - if (location==MON_Steeple_room) return MON_Steeple_roof; - return MON_Steeple_room; - ], - before [; - Enter: - if (location==MON_Steeple_room) <>; - else <>; - Open: - if ((self hasnt open) && (location==MON_Steeple_roof)) - "Unfortunately, the window opens inward, and the latch \ - and handle are on the inside."; - if ((self hasnt open) && (location==MON_Steeple_room)) { - give self open; - "You turn and yank the window handle and pull. \ - A rush of wind and snow greets you as you open \ - the window."; - } - Close: - if ((self has open) && (location==MON_Steeple_roof)) - "It doesn't seem to want to stay shut. You can't \ -quite reach the window latch from out here."; - Attack: - "The window glass remains unmarred. It's probably made of \ - that especially thick lead-glass that the Monastery got \ - because Brother Toolbox kept complaining about drafts."; - Push: - if (self hasnt open) - "It doesn't budge."; - Search: - "The window looks out into a winter wonderland."; - ], - has static door openable; - -Object steeple_table "long table" MON_Steeple_room - with name "table" "long" "steeple", - description "This long wood table has been used for various \ - private meetings and impromptu get-togethers between \ - members of the Order in the past.", - has scenery supporter; - -Object MON_f0hall1 "Hallway (basement)" - with description "You are in a hallway in the Monastery basement. \ - The hallway continues to the east, and stairs lead upwards.", - name "stairs", - u_to MON_f1hall2, - e_to MON_Refectory, - has light; - -Object MON_Refectory "Refectory" - with description "You are in the Refectory, the general dining \ -area for members of the Order. You grimace at the lingering scent of \ -Brother Pufpistery's favorite dish -- Borphbelly stew. \ -Several large oak tables and benches adorn this otherwise \ -bare room. An exit lies to the west, the kitchen is to \ -the north, and another exit lies to the east.", - name "oak" "tables" "benches", - w_to MON_f0hall1, - n_to MON_Kitchen, - e_to MON_Storeroom, - before [; - Smell: "Even the faintest lingering scent of Borphbelly stew \ -is enough to make you feel like fasting."; - ], - has light; - -Object MON_Kitchen "Monastery Kitchen" - with description "You are in Brother Pufpistery's domain -- the \ -dreaded acolyte kitchen. A huge soup \ -cauldron sits unused nearby. The refectory is \ -south.", - s_to MON_Refectory, - before [; - Smell: "The lingering scent of Borphbelly stew \ -is stronger here, unfortunately."; - ], - has light; - -Object cauldrons "cauldron" MON_Kitchen - with name "cauldron" "vat", - description "This large iron soup cauldron has the \ - unmistakable odor of Borphbelly stew. Ugg.", - size 25, - capacity 10, - before [; - Cast: - if (the_spell_was == bekdab_spell) - "The soup cauldron rusts a bit."; - ], - has scenery container open; - -Object preparing_table "preparing table" MON_Kitchen - with name "table" "preparing", - description "A heavy wood table with a well-used look.", - before [; - Cast: - if (the_spell_was == egdelp_spell) - "The table is now covered in a waxy film. \ -All things considered, it actually looks cleaner now."; - ], - has static supporter; - -Object recipe_paper "scrap of paper" preparing_table - with name "scrap" "recipe" "paper", - description "It's a recipe torn from an issue of \ - ~Better Homes and Caverns~:^^\ - GUILDMASTER SNEFFLE'S PRIZE WINNING BIRTHDAY CAKE \ - ^^\ - Ingredients:^^\ - -- 1 small sack of flour^\ - -- 1 large sugar cube^\ - -- 1 packet of baking powder^\ - -- 1 stick butter^\ - -- 1 large corbie egg^\ - -- Dornberries, to taste^^\ - Mix the ingredients together. Fold the resulting \ - mixture the correct number of times (a single gloth \ - spell should do the trick). Bake in a GUE \ - Automatic oven on the ~cake~ setting.^^\ - Guildmaster Sneffle claims that ~the dornberries are \ - the secret to making a cake even the King would be \ - impressed with.~ He also notes that ~improper folding \ - of the dough will produce very poor results.~", - !weight 1, - size 5, -; - -Object MON_Storeroom "Storeroom" - with description "You are in a small cramped storeroom, stocked \ -with various crates and barrels of foodstuffs. \ -The refectory is west.", - name "crate" "crates" "foodstuffs", - w_to MON_Refectory, - d_to secret_trapdoor, - each_turn [; - if ((random(20) == 1) && (secret_trapdoor notin MON_Storeroom)) - print "^A tiny mouse scurries into view, then disappears \ - under a barrel.^"; - ], - before [; - Go: - if (noun==d_obj) - if (secret_trapdoor hasnt general) - "You can't go that way."; - ], - has light; - -Object crate1 "large barrel" MON_Storeroom - with name "barrel", - description "A large wooden barrel labeled ~DRIED PRUNES~.", - before [; - Cast: - if (the_spell_was==egdelp_spell) - "The barrel is covered with a light \ -waxy film."; - Take, Remove: - "The barrel is far too bulky to take."; - Open: - "You'd probably need a hacksaw to do that. Besides, \ - look what it says it contains."; - Push, Pull: - if (secret_trapdoor hasnt general) { - give secret_trapdoor general; - move secret_trapdoor to MON_Storeroom; - "Well whaddya know, a trapdoor..."; - } - ], - has supporter; - -Object flour "sack of flour" crate1 - with name "flour" "sack", - short_name "sack of flour", - description "A small sack of flour, all-purpose.", - !weight 15, - size 14, - has edible; - -Object MON_Caverns "Caverns" - with description "You are in an low underground cavern, made of roughly \ -worked stone. An even lower tunnel travels east.", - name "stone" "worked" "tunnel", - u_to secret_trapdoor2, - e_to cave_intersection, -; - -! A two-way initially hidden trapdoor, which affects rooms. -! To my great chagrin, I couldn't code this in one obj (sigh). -! I admit it, this is my first Inform project. -Object secret_trapdoor "trapdoor" - with name "trapdoor" "trap" "door", - description "A wooden trapdoor in the floor.", - door_to MON_Caverns, - door_dir d_to, - describe [; - if (self has open) - "A trapdoor opens into darkness below."; - "There is a closed trapdoor in the floor here."; - ], - before [; - Enter: <>; - Open: - give MON_Caverns light; - give secret_trapdoor2 open; - rfalse; - Close: - give MON_Caverns ~light; - give secret_trapdoor2 ~open; - rfalse; - ], - has static door openable; - -Object secret_trapdoor2 "trapdoor" MON_Caverns - with name "trapdoor" "trap" "door", - description "A wooden trapdoor in the ceiling.", - door_to MON_Storeroom, - door_dir u_to, - describe [; - if (self has open) - "Light gleams in from an open trapdoor above."; - "You notice a closed trapdoor in the ceiling."; - ], - before [; - Enter: <>; - Open: - give MON_Caverns light; - give secret_trapdoor open; - rfalse; - Close: - give MON_Caverns ~light; - give secret_trapdoor ~open; - rfalse; - ], - has static door openable; - -Object cave_intersection "Cave Intersection" - with description [; - print "You are in a large open cavern. The rough \ - limestone here was probably eroded by underground springs \ - to form the somewhat circular chamber you now stand in. \ - Oddly, there seems to have been a recent cave-in, as \ - piles of rubble line the walls. A tunnel \ - snakes off to the west"; - if (self has general) - ". To the southeast, there is a wide square hole!"; - else "."; - ], - name "limestone" "rubble" "tunnel", - ! cant_go "There's too much rubble", - w_to MON_Caverns, - se_to [; - if (self hasnt general) rfalse; - if (self has general) return Mystical_Cave; - ], - before [; - Go: - if ((noun == se_obj) && (self has general)) { - if ((white_rod_piece in player) && - (black_rod_piece in player) && - (gray_rod_piece in player) && - (smoke_rod_piece in player)) { - remove white_rod_piece; - remove black_rod_piece; - remove gray_rod_piece; - remove smoke_rod_piece; - Player_Lives_Left = 0; ! hope you saved... - spell_block = 1; ! going into the endgame... - print "^As you enter the tunnel, a strange \ -light surrounds you! The four rod pieces you were \ -carrying crumble into dust!^"; - } - else - "Well, the hole to the southeast seems obvious \ -enough. But, some mysterious force blocks the way! \ -Try as you might, you can't seem to enter it!"; - } - ], -; - -Object steel_wall "steel wall" cave_intersection - with name "steel" "wall", - description "A ten-by-ten slab of solid steel, this wall \ - must be at least a foot thick, and is accented by \ - large steel rivets that bolt it to the surrounding \ - rock.", - initial "To the southeast, a huge steel wall demonstrates \ - a marked contrast to the otherwise drab surroundings.", - before [; - Open: "I presume you have a blow-torch handy?"; - Push, Pull, Turn: "Not surprisingly, it doesn't move an inch."; - LookUnder: "It's flush with the rock floor."; - Cast: "The wall seems to absorb and nullify all magic!"; - ], - has static; - - -! *********************************************************************** -! ** -! ** GRAY MOUNTAINS AREA NEARBY MONESTARY -! ** -! *********************************************************************** - -Object Cliff_face "Cliff Face" - with description "You are standing near the top of a snowy mountain peak. \ -The wind is quite cold and is making your teeth chatter. \ -The general vicinity is mostly snow and rock; however, the \ -entrance into the Monastery is to the north, all but hidden from view \ -by the enormous slabs of snow-covered rock that make up the \ -cliff face. There is a rough but obvious trail leading down \ -the mountain to the south. There is also another trail that \ -winds even further up the mountain peak almost hidden in the \ -snow to the east.", - name "peak" "wind" "rock" "structure" "slabs" "trail", - n_to MON_Entrance_hall, in_to MON_Entrance_hall, - s_to rocky_trail, d_to rocky_trail, - e_to Covered_trail, u_to Covered_trail, - has light; - -Object Covered_trail "Covered Trail" - with description "You are climbing up a small trail that gets periodically \ -lost in great bluffs of snow. The swirling snow makes seeing \ -an unusual effort. The trail leads downwards to a cliff face \ -to the west, and rises towards the mountain top to the north.", - name "bluffs" "trail", - w_to Cliff_face, d_to Cliff_face, - n_to Mountain_peak, u_to Mountain_peak, - has light; - -Object Mountain_peak "Mountain Peak" - with description [; - print "You are standing on the top of a peak of the Gray \ -Mountains. A cold wind blows snow everywhere, obscuring what \ -would otherwise surely be a wonderful view of the surrounding \ -countryside. You can just make out some buildings to the far \ -south in Frostham. A snowy bluff marks the way back down"; - if (self hasnt general) -", or to the west, there appears to be a snowy outcropping. It seems to \ -hang precariously over the edge of the mountain, however."; - else "."; - ], - name "wind" "peak" "mountains" "countryside" "buildings" "bluff", - d_to Covered_trail, - w_to [; - if (self has general) - "Looks like the outcropping completely collapsed!"; - return Snowy_outcropping; - ], - before [; - Go: - if ((noun==w_obj) && (self hasnt general) && (player notin sleeppallet)) { -! if (WeightOf(player) > 25) { - if (children(player) > 0) { - print "As you start to tread out to the outcropping, you feel \ - the snow beneath your feet shifting under your sudden \ - weight! You "; - if (random(10) > 6) { - deadflag = 1; - "start to turn back, but the entire \ - outcropping suddenly tilts under your weight, sending \ - you hurtling off the edge into oblivion!"; - } - else { - "beat a hasty retreat back to the peak."; - } - } - print "You carefully make your way onto the outcropping.^"; - } - Jump: - "Not advisable, it's probably a long way down..."; - ], - has light; - -Object Snowy_outcropping "Snowy Outcropping" - with description - "You are standing on a snow-covered outcropping. \ - You are almost waist-deep in snow, and the blisteringly cold \ - winds aren't helping. The outcropping juts out alarmingly \ - over the western edge of the mountain. In fact, you can see the \ - Monastery steeple below this ledge. \ - The main portion of the mountain peak lies to the east.", - name "winds" "steeple" "peak", - e_to Mountain_peak, - each_turn [; - if (random(5)<=3) - "^There is an ominous creaking noise somewhere underfoot."; - "^Some snow falls off the outermost edge of the outcropping."; - ], - before [; - Go: - if (noun==e_obj) - print "You cautiously make your way back to the mountain top^"; - if (noun==d_obj) - "That's not a very sound idea."; - Jump: - "Let's not be suicidal."; - Yell: - Outcrop_break(1); rtrue; - Sneeze: - Outcrop_break(2); rtrue; - Drop: - deadflag = 1; - "You must have disturbed something! The entire outcropping \ - breaks away in an avalanche, and you plummet to your death!"; - Take, Touch, Push, Pull: - if (noun==dirty_scroll) { - if (random(10) > 5) { - deadflag = 1; - give Mountain_peak general; - remove Snowy_Outcropping; - move dirty_scroll to MON_Steeple_roof; ! it's still obtainable... - "As you reach for the scroll, the entire outcropping lurches \ - alarmingly! Without warning, it \ - breaks away in an avalanche, and you plummet to your death!"; - } - "As you reach for the scroll, you hear a disturbing rumbling \ - from somewhere underfoot, and you step back hastily."; - } - Answer: - if (inp2==player) { - Outcrop_break(1); rtrue; - } - "To who/whom, exactly?"; - ], - has light; - -[ Outcrop_break type; - if (type == 1) - print "You give the best bellow you can muster, given the current \ - weather conditions."; - if (type == 2) - print "Understandable, given the weather conditions."; - print " Unfortunately, you seem to have disturbed \ - something, as the entire outcropping gives way in a brief but \ - powerful avalanche! You tumble through the air, followed by \ - a large quantity of snow! But suddenly, you see the \ - Monastery steeple rushing up to meet you!^^THUMP!^^\ - You lie dazed for a moment. Miraculously, the dirty scroll \ - lands next to you!^"; - give Mountain_peak general; - move dirty_scroll to MON_Steeple_roof; - remove Snowy_Outcropping; - PlayerTo(MON_Steeple_roof); - rfalse; -]; - -Object dirty_scroll "dirty scroll" Snowy_outcropping - class scroll_class, - with name "dirty", - initial [; - if (location==Snowy_outcropping) - "There is a dirty scroll here, practically buried in the snow!"; - "There is a dirty scroll here."; - ], -; - -Object swanko_spell "banish spirit" dirty_scroll - class spell_class, - with name "swanko", - magic - [; - if (second==0) -"The chant, looking for a locus of spiritual energy, fails."; - "The general vicinity seems pretty free of spirits now."; - ], -; - -Object rocky_trail "Rocky Mountain Trail" - with description "You are on a rocky mountain trail \ - that winds up and down a mountain. Patches of \ - snow can be found here and there. The trail \ - continues down the mountain to the south, or \ - up to the north.", - name "trail", - d_to snowy_intersection, - s_to snowy_intersection, - u_to cliff_face, - n_to cliff_face, - has light; - -Object snowy_intersection "Snowy Intersection" - with description "You are at a snow-filled crossroads \ - in a mountain trail. Paths lead north towards \ - the top of the mountain, east, west, and south \ - towards the base of the mountain.", - name "trail" "mountain", - n_to rocky_trail, - s_to North_of_river, - e_to "The path east is blocked after a short distance by a huge snow drift.", - w_to Top_of_drop, - has light; - -Object stone_marker "stone marker" - with initial "There is a large stone marker here, in \ - the center of the intersection.", - name "stone" "marker" "obelisk", - description [; - print "This odd stone structure, partially \ - covered in snow, looks quite old and mysterious. \ - It's about seven feet tall, and is shaped like \ - an obelisk"; - if (self hasnt general) - ", with the top partially broken off."; - else "."; - ], - found_in snowy_intersection snowy_intersection2, - has static; - -! (second snowy intersection -- in the "past") -Object snowy_intersection2 "Snowy Intersection" - with description "You are at a snow-filled crossroads \ - in a mountain trail. Paths lead north towards \ - the top of the mountain, east, west, and south \ - towards the base of the mountain.^^Something \ - seems familiar, yet different, about this place.", - name "trail" "mountain", -n_to "The path north ends after a short distance.", -s_to "The path north ends after a short distance.", -w_to "The path north ends after a short distance.", -e_to "The path east is blocked after a short distance by a huge snow drift.", - has light; - - -Object stone_marker_top "broken stone top" - with name "top" "stone" "pinnacle" "broken", - capacity 1, - size 10, - description "The top pinnacle from the stone marker. \ -You notice that it's partially hollow inside.", - before [; - Receive: - if ((noun==silver_rod_piece) && - (snowy_intersection has general)) { - move silver_rod_piece to self; - give snowy_intersection ~general; - remove self; - give snow general; - print "As you place the rod piece in the \ -broken stone piece, you sense a force from above pull you \ -skywards! In moments, you are high above the snow covered \ -mountains, nearing the sky, which you notice is strangely \ -purple!^"; - PlayerTo(Mystical_Cave); - ! spell_block = 0; - Mystical_Cave.number = Mystical_Cave.number + 1; - rtrue; - } - ], - has container static open; - -Object Top_of_drop "Top of Snowy Slope" - with description "You're at the top of a short downwards slope into \ - a snowy area below. A path leads east. You could also \ - slide down the slope. A lone tree stands here, overlooking \ - the slope.", - name "slope", - e_to snowy_intersection, - d_to Bottom_of_drop, - w_to Bottom_of_drop, - u_to [; - if (tree1 has general) <>; - ], - has light; - -Object tree1 "tree" Top_of_drop - with name "tree", - description "A leafless, bare tree, with what might be a bird's \ -nest in it.", - before [; - Climb: - if (self hasnt general) give self general; - print "You clamber up the tree.^"; - PlayerTo(Top_of_tree); rtrue; - ], - has scenery; - -Object nest1 "nest" Top_of_drop - with name "nest", - description "Even from down here, it's a pretty big nest. \ - Thankfully, no big birds seem to be present.", - before [; - Search: "You can't see into it from down here."; - ThrownAt: - move noun to Top_of_drop; - "You take aim, but miss."; - Receive, LetGo, Rub, Turn, Take, Push, Pull, Touch, Attack, Shake: "You can't reach it."; - Search, LookUnder: "From down here, it's hard to see anything \ -but the bottom of the nest."; - ], - has scenery; - -Object Bottom_of_drop "Bottom of Snowy Slope" - with description "You've made your way down to a small snow-covered \ - clearing, ringed by pine trees. The only exit is back up the \ - slope.", - name "clearing" "pine" "trees" "slope", - u_to Top_of_drop, - e_to Top_of_drop, - has light; - -Object boulder "large boulder" Bottom_of_drop - with name "boulder" "rock", - initial "There's a large boulder here, sitting squat in the \ - middle of the clearing.", - description "A big, snow-covered rock.", - before [; - Push, Pull, Turn: "It must weight a ton."; - Receive: - if (noun==sleeppallet) { - move sleeppallet to boulder; - "You drape the pallet over the boulder."; - } - ], - has static supporter; - -Object egg_shards "egg shards" - with name "shards", - initial "There's some broken eggshell shards here, scattered all \ - over. Some gooey egg stuff too.", - description "Some large pieces of shell is all.", - !weight 5, - size 5, -; - -Object Top_of_tree "Top of tree" - with description "You're on top of the tree, on some lower branches \ - that seem pretty stable.", - d_to Top_of_drop, - has light; - -Object tree2 "tree" Top_of_tree - with name "tree", - description "Overall, there's nothing terribly special about this tree.", - has scenery; - -Object nest2 "nest" Top_of_tree - with name "nest", - initial [; - print "There's a large bird's nest a bit farther out on a \ - nearby branch"; - if (corbie_egg in self) - print ". There appears to be an egg in it"; - "."; - ], - description "Given the size and Brother Joseph's lessons \ - in ornithology, you'd guess that it's a corbie's nest. \ - It looks abandoned.", - before [; - ThrownAt: - move noun to Top_of_drop; - print "Your throw goes a little wide, and "; - DefArt(noun); print " lands "; - ! if (WeightOf(noun) > 10) - ! "with a thump below."; - ! else "below."; - "below."; - Take: "It's way out on a thinner branch that probably \ - won't support your weight."; - Receive: "You can't quite reach it to put anything in it."; - Push, Pull, Rub, Touch, Attack, Shake: "You can't reach it."; - LookUnder: "It seems to be sitting on some branches."; - ], - size 10, - has static container open transparent; - -Object corbie_egg "corbie egg" nest2 - with name "egg", - short_name "corbie egg", - description "A large speckled corbie egg.", - !weight 8, - size 5, - before [; - Take, Rub, Push, Pull, Touch, Squeeze, Turn, Shake: - if (parent(self) == nest2) - "You can't reach it."; - LookUnder: - if (parent(self) == nest2) - "It seems to be in a nest."; - ThrownAt: - if (parent(self) == nest2) { - move egg_shards to Top_of_drop; - move noun to Top_of_drop; - remove self; - "Good toss! A bit too strong though. With a dull \ - crack, your throw breaks the egg, and pieces of \ - shell and egg goop fall to the ground below."; - } - Attack: - move egg_shards to parent(player); - remove self; - "The egg breaks easily, covering you with egg goop. \ -What a mess."; - ], -has edible scored; - -Object branch "branch" Top_of_tree - with name "branch" "branches", - description "Some leafless thin tree branches.", - before [; - Push, Pull, Turn, Shake: - if (corbie_egg in nest2) { - print "You give the branches a good shake. The egg pops \ - free and tumbles to the ground below! You see the egg \ - land in a soft patch of snow, and roll down the slope! \ - Moments later, you hear a dull "; - if (sleeppallet in boulder) { - move corbie_egg to Bottom_of_drop; - "thump from below."; - } - else { - remove corbie_egg; - move egg_shards to Bottom_of_drop; - "crack from below."; - } - } - "You give the branches a good yank. A bit of snow falls."; - ], - has scenery; - - -! Some scenery 'fluff' -Object snow "snow" - with name "snow", - description "Cold, white and not in short supply.", - found_in Mountain_peak Covered_trail Cliff_face Snowy_outcropping MON_garden - snowy_intersection rocky_trail Top_of_drop Bottom_of_drop, - before [; - Take: "It melts into nothing soon after."; - Touch: "It's crisply cold."; - Search: - if ((self has general) && (location == snowy_intersection)) { - give self ~general; - Achieved(16); - move stone_marker_top to snowy_intersection; - "Remembering where the stone marker top fell, you brush \ -aside some snow. Sure enough, there it is!"; - } - ], - has scenery; - - - -Object North_of_river "North of Frozen River" - with description "You are standing just north of a frozen river \ -(probably a tributary of Lake Dinge). You can just see \ -the south bank from here, where the trail seems to \ -continue. There doesn't seem to be a bridge, however. \ -A trail also continues north.", - name "river" "lake" "bank" "trail", - s_to Frozen_river, - n_to snowy_intersection, - has light; - - -Object Frozen_river "On Frozen River" - with description "You are standing on a wide smooth river of ice. \ -The river 'runs' east to west, and there are banks to the \ -north and south.", - name "bank" "banks", - n_to North_of_river, - s_to South_of_river, - e_to "You slide eastwards, and lose your footing, going nowhere.", - w_to "You slide westwards, and slip, going nowhere.", - before [; - Drop: - if (noun==sand) { - move sand to Frozen_river; - Achieved(0); - "You scatter the sand onto the ice."; - } - Go: - if (noun==s_obj) { - if (player notin sleeppallet) { - if (sand notin Frozen_river) - "You slide and flounder helplessly on the ice!"; - else - print "You tread lightly on the sand covered portion of \ - the ice, and scramble to the south bank.^"; - } - } - Jump: - deadflag = 1; - "You bravely jump, but without warning, the ice cracks in many \ - places, and you fall into the freezing river, becoming a human \ - popsicle in a short amount of time."; - ], - has light; - -! (special -- accessible only from Atrii -- put useful item here) -Object Frozen_river2 "On Frozen River" - with description "You are standing on a wide smooth river of ice. \ -The river 'runs' east to west. To the north and south \ -are huge snow bluffs that obscure most of the surrounding \ -countryside.", - e_to "You step eastwards but lose your footing, going nowhere.", - w_to Frozen_river, - before [; - Go: - if (noun==w_obj) - print "^As you step west, a slight downwards slope \ -in the ice sends you sliding uncontrollably.^"; - Jump: - deadflag = 1; - "You bravely jump, but without warning, the ice cracks in many \ - places, and you fall into the freezing river, becoming a human \ - popsicle in a short amount of time."; - ], - has light; - -! (scrawled -- clue to using spheres) -Object p7 "scrawled parchment" Frozen_river2 - class parchment_class, - with name "scrawled", -description "~Red beats smoke,^\ -Silver bests clouds,^\ -Green defeats depths,^\ -Brown stops earth.~"; - -Object river_ice "river ice" - with name "ice" "river", - description "The ice is thick and quite smooth.", - found_in Frozen_river Frozen_river2, - before [; -! just trap all receives as drops - Receive: - <>; - ], - has scenery supporter; - -Object South_of_river "South of Frozen River" - with description "You are standing just south of a frozen river. \ -You can just see the north bank from here, where the trail seems to \ -continue. The only way to get there is across the river. \ -A trail heads south into a valley.", - name "river" "bank" "trail", - n_to Frozen_river, - s_to Valley_trail, - has light; - -Object Valley_trail "Valley Trail" - with description "You are walking along a valley trail, just \ - below a portion of the Gray Mountain ranges. You can \ - see the beginnings of a city to the south, while the \ - trail winds further into the mountain ranges to the \ - north.", - name "trail" "ranges" "mountain" "city", - n_to South_of_river, - s_to FROSTHAM_Outskirts, - has light; - -! (An interesting object, with possible uses...) -!Object bathroom_scale "bathroom scale" -! with name "scale" "bathroom", -! description [; -! if (player in bathroom_scale) -! "This is an odd small flat white device, with a tiny \ -! glass window at one end that you can see a numbered dial \ -! through. The dial currently reads -- wait, that \ -! can't be right. The thing must be broken."; -! print "This is an odd small flat white device, with a tiny \ -! glass window at one end that you can see a numbered dial \ -! through. The dial currently reads: <", -! (WeightOf(self) - 10), " Ughs>.^"; rtrue; -! ], -! weight 10, -! has supporter enterable; - - -! *********************************************************************** -! ** (at this point, for clarity and my sanity, I'm going to build -! ** the remaining locations & objects in separate files, included -! ** here. Hopefully, the files will be somewhat organized based on -! ** general location/town/situation, etc. -! *********************************************************************** - -Include "frostham.inf"; -Include "aragain.inf"; -Include "anthar.inf"; -Include "fublio.inf"; -Include "borphee.inf"; -Include "miznia.inf"; -Include "gurth.inf"; -Include "subway.inf"; -Include "special.inf"; - -! *********************************************************************** -! ** -! ** HADES, in a newer format -! ** -! *********************************************************************** - -Class Hades_Room_Class - with description "You are floating in an empty space. Surrounding you \ - on all sides is a great wall of flame. It would almost seem \ - like you are trapped inside a ball of fire.", - name "fire" "ball" "space" "flame", - before [; - if ((action~=##Go) && (action~=##Look) && (action~=##Wait)) - "You currently lack the means to do that."; ! can't do much in Hades... - Go: - give self ~visited; ! cheat, easier than routines for each dir... - print "^You find yourself floating through the flaming wall! \ - As you pass through you feel a gut-wrenching sensation. \ - Well, perhaps you would if you currently had a gut, or \ - sensations for that matter. Let's just say you feel \ - something akin to a gut-wrenching sensation, and leave \ - it at that.^"; - ], - has light; - -Object Hades_1 "Hades" - class Hades_Room_Class - with u_to Hades_1, - d_to Hades_1, - n_to Hades_1, - s_to Hades_1, - e_to Hades_1, - w_to Hades_1, - in_to Hades_1, - out_to Hades_1, - ne_to Hades_2, - nw_to Hades_1, - se_to Hades_1, - sw_to Hades_1, - each_turn [; - if (random(10) == 1) - "^A wisp of smoke appears to the northeast, then fades."; - ], -; - -Object Hades_2 "Hades" - class Hades_Room_Class - with u_to Hades_1, - d_to Hades_1, - n_to Hades_2, - s_to Hades_3, - e_to Hades_1, - w_to Hades_2, - in_to Hades_1, - out_to Hades_1, - ne_to Hades_2, - nw_to Hades_1, - se_to Hades_2, - sw_to Hades_2, - each_turn [; - if (random(10) == 1) - "^A wisp of smoke appears to the south, then fades."; - ], -; - -Object Hades_3 "Hades" - class Hades_Room_Class - with u_to Hades_4, - d_to Hades_3, - n_to Hades_2, - s_to Hades_1, - e_to Hades_1, - w_to Hades_2, - in_to Hades_3, - out_to Hades_1, - ne_to Hades_2, - nw_to Hades_1, - se_to Hades_3, - sw_to Hades_3, - each_turn [; - if (random(10) == 1) - "^A wisp of smoke appears above, then fades."; - ], -; - -Object Hades_4 "Hades" - class Hades_Room_Class - with u_to Hades_3, - d_to Hades_3, - n_to Hades_5, - s_to Hades_2, - e_to Hades_1, - w_to Hades_4, - in_to Hades_4, - out_to Hades_1, - ne_to Hades_1, - nw_to Hades_3, - se_to Hades_3, - sw_to Hades_1, - each_turn [; - if (random(10) == 1) - "^A wisp of smoke appears to the north, then fades."; - ], -; - -Object Hades_5 "Hades" - with description "You are floating in an empty space. Surrounding you \ - on all sides is a great wall of flame. It would almost seem \ - like you are trapped inside a ball of fire.", - name "fire" "space", - u_to Hades_1, - d_to Hades_3, - n_to Hades_2, - s_to Hades_4, - e_to Hades_4, - w_to Hades_5, -! in_to Hades_1, - out_to Hades_1, - ne_to Hades_1, - nw_to Hades_3, - se_to Hades_3, - sw_to Hades_2, - before [; - if ((action~=##Go) && (action~=##Look) && - (action~=##Wait) && (action~=##Enter) && - (action~=##Take) && (action~=##Examine)) - "You currently lack the means to do that."; - Go: - if (noun==in_obj) { - Revive_Player1(); - rtrue; - } - give self ~visited; - print "^You find yourself floating through the flaming wall! \ - As you pass through you feel a gut-wrenching sensation. \ - Well, perhaps you would if you currently had a gut, or \ - sensations for that matter. Let's just say you feel \ - something akin to a gut-wrenching sensation, and leave \ - it at that.^"; - ], - has light; - -Object Hades_flameball "Ball of flame" Hades_5 - with name "ball" "sphere" "flame", - initial [; - print "In the center of the room is a "; - if (Player_Lives_Left >= 3) - "large flaming sphere."; - if (Player_Lives_Left == 2) - "medium-sized flaming sphere."; - "small flaming sphere."; - ], - description "It's rather hypnotic -- a perfect sphere made entirely of orange-red fire.", - before [; - Enter: - Revive_Player1(); - rtrue; - ], - has enterable static open; - -[ Revive_Player1 ; - print "You find yourself drawn into flaming sphere. The \ - ball of flame engulfs you completely, and you feel \ - nothing as inky blackness surrounds you.^^\ - ~You have revived him!~ you hear a voice say.^^\ - You open your eyes. You are lying on a long wooden \ - table in the Monastery Steeple room. Several members \ - of the Order are gathered around you, and Brother \ - Joseph helps you to your feet.^^\ - ~We were able to bring you back to the world of the \ - living,~ Joseph says, ~but I fear our powers are waning, \ - and we may not succeed if we try again. Your quest \ - continues!~^^\ - The group files out, leaving you alone in the room.^"; - in_hades = 0; - Player_Lives_Left--; - Player_HP_CUR = Player_HP_MAX; ! Healed up - give steeple_window ~open; ! one of the acolytes was too cold... - PlayerTo(MON_Steeple_room); -]; - - -! *********************************************************************** -! ** -! ** INITIALIZE AND OTHER STARTUP, place player, place objs, etc -! ** -! *********************************************************************** - -[ Initialise; - - thedark.description = - "It is pitch black. You are likely to be eaten by a grue."; - - prayer_book.magic = all_my_spells; - ; - ; - move prayer_book to player; - location=MON_Chapel1; - -! (FOR TESTING ONLY) -!move amulet to player; -!; -!; -!; -!; -!; -!move TEMPLE_Artifact to player; -!move umbrella to player; -!move sack to player; -!move c1 to player; -!move magic_door to player; -!location = ANTHAR_GUSStation; -!location=Skyscraper; -!spell_block = 1; -!; -!; -!; -!move decaf_coffee_can to player; -!location=ATRII_1; -]; - - -! *********************************************************************** -! ** -! ** Some special routines, which should be after Initialise -! ** -! *********************************************************************** - -! The Afterlife -- or, a fine time in Hades -[ AfterLife i; - if (Player_Lives_Left <= 0) { - print "^^A blackness surrounds you, replaced by more blackness...^^"; - rfalse; - } - else { - deadflag = 0; ! not dead yet - ! move inventory to place of death - i=parent(player); - while (child(player)~=0) { - give child(player) ~worn; - move child(player) to i; - } - spell_block = 0; - in_atrii = 0; - in_hades = 1; - print "^^A blackness surrounds you, only to be replaced by...^^"; - i = random(4); - if (i==2) { PlayerTo(Hades_2); rtrue; } - if (i==3) { PlayerTo(Hades_3); rtrue; } - else { PlayerTo(Hades_1); rtrue; } - } -]; - - -[ DarkToDark i; - i = random(10); - if (i < 4) { - print "^Hmm, perhaps the Grues really are migrating with the \ - Great Change.^"; - rtrue; - } - if (i >= 4) { - deadflag = 1; - "^Well, don't say I didn't warn you. Something horrible \ -with slavering fangs lurks up and devours you!"; - rtrue; - } -]; - - -! [ WeightOf obj t i; -! t = obj.weight; -! objectloop (i in obj) t=t+WeightOf(i); -! return t; -! ]; -! Now, rules for capacity still hold (slightly unrealistic), but we -! can now check WeightOf(player) in those situations that need it. - -[ PrintRank; - print ", earning you the rank of "; - if (score < 0) "Wanna-be Altar-boy"; -! if (score >= 500) "Truly Enlightened One"; -! if (score >= 495) "Benevolent One"; -! if (score >= 490) "Faithful One"; -! if (score >= 395) "Simple Man"; -! fill fill - if (score >= 250) "Enlightened One"; - if (score >= 225) "Patriarch"; - if (score >= 200) "Cardinal"; - if (score >= 150) "Lama"; - if (score >= 125) "Cleric"; - if (score >= 100) "High Priest"; - if (score >= 90) "Priest"; - if (score >= 75) "Monk"; - if (score >= 50) "Brother"; - if (score >= 30) "Acolyte"; - if (score >= 20) "Aspirant"; - if (score >= 10) "Devoted"; - if (score >= 5) "Believer"; - "Non-believer"; -]; - -[ PrintTaskName ach; - switch (ach) { - 0: "using sand to get across the river"; - 1: "triplicating the cereal box"; - 2: "setting the alarm clock"; - 3: "getting the waxy scroll from the skier"; - 4: "giving the palace guard a good cake"; - 5: "solving Barsap's Gambit"; - 6: "fixing the sailboat"; - 7: "finding the rod in the shipwreck"; - 8: "triplicating the ale"; - 9: "finding the rod under the statue"; - 10: "pruning the Christmas Tree Monster"; - 11: "getting past the burly sports fan"; - 12: "winning the three Golem bouts"; - 13: "ending the kobold war"; - 14: "unlocking Duncanthrax's Trophy chamber"; - 15: "unlocking the Lab door"; - 16: "finding the rod in the top of the marker"; - 17: "finding the rod in the house foundation"; - 18: "removing the impenetrable steel wall"; - 19: "joining the True Rod"; - 20: "getting past the broken subway gate"; - 21: "finding the hidden path to the temple"; - 22: "getting the rod through the temple"; -! 23: "finding the scroll in Frobar's painting"; - 23: "getting the scroll from the boutique"; - 24: "getting the scroll from Frobar"; - 25: "getting into the subway tunnel"; - 26: "banishing the four evil elementals"; -! add, if desired - } -]; - -! *** NEW ACTION ROUTINES - -[ PraySub i; - if ((in_hades == 1) || (in_atrii == 1) || (spell_block==1)) - "You make a prayer and feel no spiritual response! \ - Have the Deities forsaken you? Or have you found a \ - place where even the Gods cannot provide guidance?"; - else { - i = random(100); - if (Player_HP_MAX ~= (20 + score)) - Player_HP_MAX = (20 + score); - ! consider increasing memory/spell capacity here - if (i==97) { - Player_HP_CUR = Player_HP_MAX; ! Healed - "You make a quick but respectful prayer to the \ - Deities above, asking for Divine Guidance in your \ - quest. A saffron glow surrounds you and you feel \ - spiritually and physically renewed!"; - } - "You make a quick but respectful prayer to the \ - Deities above, asking for Divine Guidance in your \ - quest. You finish and feel spiritually renewed."; - } -]; - -[ DiagnoseSub i; - if (Player_HP_CUR > Player_HP_MAX) ! (This should never happen) - "You feel superhuman!"; - if (Player_HP_CUR == Player_HP_MAX) - "You are in good health."; - if (Player_HP_CUR == 1) - "You are near death's door."; - if (Player_HP_CUR < 5) - "You feel extremely weak."; - if (Player_HP_CUR < 10) - "You feel weak."; - i = (Player_HP_MAX / Player_HP_CUR); - if (i >= 4) - "You feel slightly weak"; - if (i >= 2) - "You've been better, but you'll be okay."; - "You feel okay."; -]; - -[ StrongSub i; - i = random(20); - if (i > 15) { - deadflag = 1; - "Such language from a priest such as yourself! \ - The ground rumbles, and a bolt of blue wrath from the \ - Deities strikes you dead!"; - } - "Such language from a priest such as yourself! \ - The ground rumbles suddenly!"; -]; - -! [ LiftSub ; -! if (noun has static) -! "That's fixed in place."; -! if (noun has scenery) -! "You're unable to."; -! if (noun has animate) -! "That would be less than courteous."; -! print "You lift "; DefArt(noun); " and put it back in \ -! it's original position. Nothing obvious happens."; -! ]; - -[ ShakeSub ; - if (noun has animate) - "Get a hold of yourself. No need to go around shaking living \ -things like that."; - "Nothing happens."; -]; - -! (new insert routine, which is the same as old, except that -! we also check relative sizes of objects) -[ InsertSub; - receive_action = ##Insert; - if (second==d_obj ) <>; - if (parent(noun)~=player) return L__M(##Insert,1); - - if (second>1) - { action=##Receive; - if (RunRoutines(second,before)~=0) { action=##Insert; rtrue; } - action=##Insert; - } - if (second hasnt container) return L__M(##Insert,2); - if (second hasnt open) return L__M(##Insert,3); - if (IndirectlyContains(noun,second)==1) return L__M(##Insert,5); - if (noun has worn) - { L__M(##Insert,6); - ; if (noun has worn) rtrue; - } - - if (children(second)>=ValueOrRun(second,capacity)) - return L__M(##Insert,7,second); - - if (noun.size > second.size) { - CDefArt(noun); print " appears to be too large to put in "; - DefArt(second); "."; - } - move noun to second; - - if (AfterRoutines()==1) rtrue; - - if (second>1) - { action=##Receive; - if (RunRoutines(second,after)~=0) { action=##Insert; rtrue; } - action=##Insert; - } - if (keep_silent==1) rtrue; - if (multiflag==1) return L__M(##Insert,8); - L__M(##Insert,9,noun); -]; - -[ FoldSub ; - "I fail to see what you're trying to accomplish by doing this."; -]; - -[ MixSub; - "I fail to see what you're trying to accomplish by doing this."; -]; - -![ SpecialDialSub; -! if (noun hasnt numberdial) -! "You can't seem to do that."; -! if ((second > 9) || (second < 0)) -! print "It appears that the valid range for ",noun; " is 0 to 9"; -! noun.number = second; -! if (noun.number > 9) noun.number = 0; -! a special restriction in this case -! print "You set ",noun," to ",second; "."; -!]; - -[ JoinSub; - "This doesn't seem terribly productive."; -]; - -[ MeditateSub; - "You close your eyes and focus your mind inwards. \ -Mere moments of time seem to pass like eons. You \ -open your eyes."; -]; - -[ YellSub; - "ARRGH!"; -]; -[ SneezeSub; - "You make a rather sickly noise."; -]; -[ YawnSub; - if (Frobar in location) - "~Stop that!~ Frobar says, ~It's contagious.~"; - else "Tired?"; -]; -[ XyzzySub; - "A hollow voice says, ~Cool!~"; -]; -[ BegSub; - "Please, no begging."; -]; -[ LaughSub; - "Was it that funny?"; -]; - -[ HelpSub; - "Hello Player!^^\ -SPIRITWRAK, An Interactive Fantasy Adventure^\ -If you're new to interactive fiction games, I lack the \ -space here to give an adequate description, but in short, \ -you're a character in a story, able to interact with \ -objects, places and other things (using regular english \ -sentences) in order to reach your goal, which is to \ -figure out how to ~solve~ the story. For a real \ -description, you might want to check out documents \ -located at ftp.gmd.de.^^\ -For those more experienced players, if you're looking \ -for on-line clues, etc., sadly, you won't find them \ -(the Z5 code is getting rather obscenely large as I \ -write this). A short verb list is contained in the \ -README file that you should have received with this \ -game (or should be able to find at the same place you \ -found this game). Beyond that, if you're truly \ -desperate, you can post a note on the rec.arts.int-fiction \ -usenet newsgroup, or send me email.^^\ -Thanks for playing! ^^\ --- D. S. Yu [dsyu@@64holonet.net]"; -]; - -Include "Grammar"; ! (Include grammar _after_ action defs, if we replace any) - -! **** Extensions -!Extend "turn" first -! * noun "to" number -> SpecialDial; -Extend "examine" first - * scope=ReadableSpell -> Examine; - - - -! **** Action defs - -Verb "diagnose" "health" "status" - * -> Diagnose; - -Verb "spells" "memory" "chants" - * -> Spells; -Verb "learn" "memorise" "memorize" "prepare" - * scope=ReadableSpell -> Learn; -Verb "c,cast" - * -> CastOne - * noun -> CastOne; -Verb "cast" "chant" - * is_spell -> Cast - * is_spell "at" noun -> Cast - * is_spell "on" noun -> Cast; -Verb "yell" "scream" "bellow" - * -> Yell; -Verb "sneeze" "cough" - * -> Sneeze; -Verb "yawn" - * -> Yawn; -Verb "laugh" "chuckle" - * -> Laugh; -Verb "play" - * held -> Blow; -Verb "clip" "trim" - * noun -> Cut; -! Verb "lift" "raise" -! * noun -> Lift; -Verb "shake" "yank" - * noun -> Shake; -Verb "fold" - * noun -> Fold; -Verb "mix" "stir" - * noun -> Mix; -Verb "join" "connect" - * noun "to" noun -> Join - * noun "with" noun -> Join; -Verb meta "help" "hint" - * -> Help; - -! ** (nonsense verbs below, can be removed without affecting game) -Verb "xyzzy" "plugh" "treasure" "plover" "yoho" - * -> Xyzzy; -Verb "beg" - * -> Beg; -Verb "meditate" - * -> Meditate; - -end; -! fin. -