--- /dev/null
+
+! **************************************************************
+! GURTH.INF -- Add-on for SPIRITWRAK
+! (all rights reserved, copyright 1996, D. Yu
+! **************************************************************
+
+! (author note to self -- Gurth currently isn't going to be too
+! exciting -- I'm running out of .z5 code space. The main
+! planned features are:
+! 1) The abandoned house with the oven for baking the cake
+! 2) A deep forest area somewhat north of the city where
+! a sphere piece will be hidden
+
+! The string array for labels on the GUE Oven dial (may be changed)
+Array OVEN_settings table [;
+ "Warm Soup";
+ "Hot Chocolate";
+ "Pizza";
+ "Cake";
+ "Fish";
+ "Roast Chicken";
+ "Baked Potato";
+ "Rib Roast";
+ "Thermo-nuclear Flash";
+];
+
+Object GURTH_GUSStop "Gurth City Streets"
+ with description "A foggy sky covers the ever-busy city of \
+Gurth. A road heads southeast into a larger \
+portion of the city, and stairs lead down here.",
+ name "fog" "sky" "road" "stairs",
+ d_to GURTH_GUSStation,
+ se_to GURTH_NDistrict,
+ has light;
+
+Object umbrella "umbrella" GURTH_GUSStop
+ with name "umbrella",
+ description [;
+ if (self has open)
+ print "An open";
+ else print "A closed";
+ " black-cloth umbrella.";
+ ],
+ !weight 25,
+ size 16,
+ article "an",
+ before [;
+ Open:
+ if (parent(self) == player) {
+ give self open;
+ umbrella.size = 20;
+ "You snap the umbrella open.";
+ }
+ else "You need to be holding the umbrella to do that.";
+ Close:
+ if (parent(self) == player) {
+ give self ~open;
+ umbrella.size = 16;
+ "You snap the umbrella closed.";
+ }
+ else "You need to be holding the umbrella to do that.";
+ ],
+ has openable;
+
+Object GURTH_NDistrict "North District"
+ with description "Probably the safest district in Gurth, the \
+North District is mostly cobblestone roads and barricaded \
+buildings. A main road heads south, or forks northwest and \
+northeast.",
+ name "cobblestone" "buildings" "road",
+ nw_to GURTH_GUSStop,
+ s_to GURTH_MDistrict,
+ ne_to GURTH_Forest,
+ has light;
+
+Object GURTH_Forest "Forest Edge"
+ with description "Dark forest meets dark city outskirts here. \
+The only exit is along an old path to the southwest -- \
+the forest is too thick for travel otherwise. \
+Rain falls periodically from a dark stormy sky.",
+ name "forest" "path" "rain",
+ sw_to GURTH_NDistrict,
+ each_turn [;
+ if (random(10) < 4) {
+ "^A rumble of thunder booms overhead.";
+ }
+ ],
+ before [;
+ Listen:
+ if (Treant in GURTH_Forest)
+ "You hear muffled cries for help from \
+somewhere inside the log cabin!";
+ ],
+ has light;
+
+Object storm1 "storm" GURTH_Forest
+ with name "storm" "clouds" "sky" "dark",
+ description "It does look a bit stormy overhead.",
+ before [;
+ Cast:
+ if (the_spell_was == shazok_spell) {
+ print "A bolt of lightning rips down from the \
+clouds overhead as you finish your chant! It strikes ";
+ if (Treant in GURTH_Forest) {
+ print "the angry treant! \
+A portion of its top branches catch fire! Howling in pain, \
+the creature runs off into the woods and disappears!";
+ SaveWoodsman();
+ rtrue;
+ }
+ else {
+ deadflag = 1;
+ "you, frying you to a crisp!";
+ }
+ }
+ ],
+ has scenery;
+
+Object Treant "angry treant" GURTH_Forest
+ with name "treant" "angry" "blighted",
+ description "Treants are basically animated trees. They \
+are considered mythical creatures, usually solitary and quite \
+rare. This particular treant looks similar to a great elm tree. \
+You notice that it seems covered with spots of some sort of \
+blight.",
+ article "an",
+ each_turn [ i ;
+ i = random(20);
+ print "^The treant ";
+ if (i > 10) {
+ if (WOOD_House.number == 3) {
+ WOOD_House.number = 4;
+ remove self;
+ "pounds the cabin, and it collapses into \
+splinters! The treant grabs a hapless woodsman from the \
+wreckage and stalks off into the forest with his victim!";
+ }
+ else {
+ WOOD_House.number = WOOD_House.number + 1;
+ "hammers on the house and you hear a \
+crack! The cabin sustains some damage!";
+ }
+ }
+ else "angrily attacks the wood cabin, which shakes \
+with the continued blows.";
+ ],
+ before [;
+ Cast:
+ if (the_spell_was == egdelp_spell) {
+ deadflag = 1;
+ "The treant is covered with a waxy buildup, which \
+washes off in the rain. The treant, already \
+rather incensed, turns his attentions to you and mauls you \
+with two giant branches/arms.";
+ }
+ if (the_spell_was == throck_spell) {
+ deadflag = 1;
+ "The treant grows a bit bigger. His current bad \
+mood seems to increase proportionately! He turns his attentions \
+to you and pounds you with two huge branches/arms.";
+ }
+ if (the_spell_was == taclor_spell) {
+ print "The treant seems to turn a shade of deep \
+green, and the patches of blight disappear! The ancient tree \
+creature pauses, regards you solemnly, and then walks \
+off into the forest.";
+ SaveWoodsman();
+ rtrue;
+ }
+ ],
+ has animate;
+
+Object WOOD_House "log cabin" GURTH_Forest
+ with name "cabin" "log" "house",
+ description [;
+ print "A small house built of logs";
+ switch (self.number) {
+ 0: print ".";
+ 1: print ". It looks slightly damaged.";
+ 2: print ". It looks partially damaged, the roof logs \
+are broken in several places.";
+ 3: print ". It looks very damaged. One wall is \
+nearly broken through.";
+ default: print " that has collapsed into little more \
+than a pile of broken logs.";
+ }
+ if (self has general)
+ " You notice some area of wood have spots of wax \
+on them.";
+ new_line;
+ rtrue;
+ ],
+ before [;
+ Enter:
+ if (Treant in GURTH_Forest)
+ "The angry treant seems to be in the way.";
+ "It's just a tiny log cabin that probably \
+has nothing interesting inside.";
+ Cast:
+ if (the_spell_was == egdelp_spell) {
+ give self general;
+ "The outside of the cabin is now covered \
+with spots of waxy buildup.";
+ }
+ ],
+ number 0,
+ has static;
+
+[ SaveWoodsman ;
+ remove Treant;
+ move red_sphere to player;
+ "^^Moments later, a woodsman appears from the battered log \
+cabin. ~Much thanks, sir,~ he says. ~Appears I mistook that \
+treant for a dead tree and tried to cut it down. Can't say \
+he took it too well.~ he says sheepishly. ~Say, you don't \
+look like you're from around these parts. Kinda like this \
+funny thing I found in the woods the other day.~ He hands \
+you a strange round object. ~Maybe you know what to do with \
+it?~ He hefts a small hatchet over his shoulder. ~Well, \
+back to do a little logging,~ he says, as he walks off into the \
+deep forest, whistling.";
+];
+
+Object GURTH_MDistrict "Market District"
+ with description "The famous Gurth Market District is as noisy, \
+crowded, and dangerous as it ever was. A cobblestone road heads \
+north and south here.",
+ name "cobblestone" "road",
+ n_to GURTH_NDistrict,
+ s_to GURTH_SDistrict,
+ e_to "~Get out 'o me way!~ some rude fellow says as you \
+try to pass.",
+ w_to "~No push'n, no shov'n!~ some old hag screams at you, \
+and promptly shoves you back.",
+ each_turn [;
+ if ((random(10) < 5) && (self hasnt general)) {
+ give self general;
+ move c7 to self;
+ "^A clumsy hawker stumbles into you as he \
+crosses the street, hustling off without so much as an \
+apology. You notice he dropped something in his hurry.";
+ }
+ ],
+ has light;
+
+Object c7 "coin" class coin_class;
+
+Object GURTH_SDistrict "South District"
+ with description "The general gloomy atmosphere is more noticeable \
+than ever here, in the extremely dangerous South District. The \
+general area is filled with boarded-up houses, and a few shifty-eyed \
+characters are the only people milling about here. A road leads \
+north. To the east is an abandoned flat, probably in better shape \
+than the rest.",
+ name "houses" "characters" "people" "road" "flat",
+ n_to GURTH_MDistrict,
+ s_to [;
+ print "You wander down ";
+ if (random(20) == 5) {
+ deadflag = 1;
+ "a back alleyway, and are immediately \
+assaulted by a group of vicious thugs, who batter you senseless.";
+ }
+ else "an alleyway, find a dead-end, and return \
+here.";
+ ],
+ w_to [;
+ print "You wander down ";
+ if (random(20) == 5) {
+ deadflag = 1;
+ "a sidestreet, and are immediately \
+assaulted by a group of vicious thugs. One of them seems to \
+recognize you. ~That's the Preacher-man who got Davey arrested! \
+Let's show 'em what we think'o that!~ They proceed to beat you senseless.";
+ }
+ else "a sidestreet, find a dead-end, and return \
+here.";
+ ],
+ e_to GURTH_House,
+ has light;
+
+Object GURTH_House "Front of House"
+ with description "You're standing at the rotting front steps of \
+a small flat. The front door to the east has been battered down and \
+you could probably walk right in, or return to the street to \
+the west.",
+ name "street" "steps" "flat",
+ w_to GURTH_SDistrict,
+ e_to House_Ent,
+ in_to House_Ent,
+ has light;
+
+Object GURTH_House2 "Front of House"
+ with description "You're standing near a small construction site. \
+A city street lies west, and a construction ditch is east.",
+ name "street" "ditch",
+ w_to [;
+ deadflag = 1;
+ "You step into the street, and several locals \
+give you strange looks. The surrounding neighborhood seems \
+new and busy -- various construction sites mark the \
+work of enterprising shop-keepers of the area.^^\
+~Watch out there!~ someone cries. A sudden \
+pile of bricks falls from a nearby scaffolding, and \
+crushes you.";
+ ],
+ e_to Construction_site,
+ has light;
+
+
+Object bad_brick "dusty brick" GURTH_House2
+ with name "brick" "dusty" "old",
+ initial "An old discarded brick lies nearby.",
+ description "An old brick, slightly cracked in several places.",
+ size 15,
+ time_left 0,
+ time_out [;
+ ! Construction Worker appears
+ if ((good_brick in Construction_site) ||
+ ((good_brick notin Construction_site) &&
+ (bad_brick notin Construction_site))) {
+ remove good_brick;
+ foundation_wall.number = 1;
+ }
+ else {
+ remove bad_brick;
+ foundation_wall.number = 2;
+ }
+ if (location == Construction_site) {
+ print "^From behind some scaffolding, a construction \
+worker appears. He walks to a part of the ditch and starts to \
+make some finishing touches on part of a low wall. \
+He finds a brick nearby and applies it to the wall with \
+a good patch of mortar.";
+ if (foundation_wall.number == 1)
+" Brushing himself off, he walks off \
+and is soon out of sight.";
+ else
+" He looks at the patch somewhat \
+unsatisfied, but shrugs, and walks off, soon out of sight.";
+ }
+ else
+ "^You hear some brief noises from the east.";
+ ],
+;
+
+Object Construction_site "Construction Site"
+with description "This is a long square ditch that is \
+likely to be the starting point for some building. It is \
+framed by wood slats and short brick walls. The only way \
+out is to the west.",
+ name "ditch" "slats" "wood",
+ w_to GURTH_House2,
+ has light;
+
+Object good_brick "thick brick" Construction_site
+ with name "brick" "thick",
+ !weight 30,
+ size 15,
+ initial "A thick brick lies nearby.",
+ description "A thick brick, solid as a rock.",
+;
+
+Object foundation_wall "portion of wall" Construction_site
+ with name "wall" "foundation" "portion" "hole" "recess",
+ initial "You notice a foundation side wall \
+in the ditch.",
+ number 0,
+ size 15,
+ description [;
+ switch (self.number) {
+ 0: "It looks somewhat unfinished. Part of it \
+is open into a dark recess in the side of the ditch.";
+ 1: "The wall is a finished work of brick and \
+mortar. It looks quite strong.";
+ 2: "The wall is a finished work of brick and \
+mortar. You see a spot where the brickwork seems a bit \
+lower in quality.";
+ }
+ ],
+ before [;
+ Receive:
+ if (self.number > 0)
+ "The wall is currently sealed shut.";
+ else {
+ move noun to self;
+ print "You put ", (the) noun, " into the ";
+ "small hole in the wall.";
+ }
+ Search, LetGo:
+ if (self.number > 0)
+ "The wall is currently sealed shut.";
+ Attack:
+ if (self.number == 0) {
+ deadflag = 1;
+ "You kick at the wall. Unfortunately, it wasn't \
+all that stable, and the wall falls apart, burying you under a \
+pile of loose bricks.";
+ }
+ if (self.number == 1) {
+ remove foundation;
+ print "You try to break the wall, but only end up \
+hurting your hand. ";
+ }
+ else {
+ give foundation general;
+ print "You knock on the weak portion of the \
+wall, and produce a slight crack, that no doubt will \
+cause the homeowners some worry in the future. ";
+ }
+! give GURTH_House ~general;
+ while (child(player) ~= 0) remove child(player);
+! while (child(GURTH_House) ~= 0) remove child(GURTH_House);
+print "The wall seems to start to glow a purple color, and you \
+step back, to find your surroundings replaced by cold natural \
+cave walls.^";
+ Mystical_Cave.number = Mystical_Cave.number + 1;
+ PlayerTo(Mystical_Cave);
+ rtrue;
+ ],
+ has static container open;
+
+Object House_Ent "Entrance Room"
+ with description "A bare room, with peeling paint and rotting, \
+water-stained walls. There's a room to the east, and a rickety \
+stairway down. The outdoors lie west.",
+ name "paint" "stairway" "outdoors",
+ e_to House_Kitchen,
+ d_to House_Basement,
+ w_to GURTH_House,
+ out_to GURTH_House,
+ has light;
+
+Object House_Basement "Basement"
+ with description "A musty, smelly basement. Stairs head up.",
+ name "stairs",
+ u_to House_Ent,
+ before [;
+ Smell: "It's smells musty down here, as though \
+the place has been unused for quite some time.";
+ ],
+;
+
+Object House_switchbox "dusty metal box" House_Basement
+ with name "dusty" "metal" "box",
+ when_closed "There's a dusty metal box attached to the wall here.",
+ when_open [ x;
+ print "There's an open metal box attached to the wall here. ";
+ x = children(self);
+ if (x == 0) "It seems to be empty.";
+ print "It contains:^";
+ x = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT;
+ WriteListFrom (child(self), x, 1);
+ rtrue;
+ ],
+ capacity 3,
+ size 10,
+ description "A dusty metal box, attached to the wall.",
+ before [;
+ Open, Push, Pull, Turn, Touch:
+ if (GHOST in House_Basement)
+ "Slowly, but quite deliberately, the zombie \
+prevents you from getting near the box.";
+ ],
+ has static container openable;
+
+
+Object wire "thin wire" House_switchbox
+ with name "wire" "thin",
+ ! initial "Inside the box is a loose wire.",
+ description "A thin stiff string of metal.",
+ !weight 2,
+ size 1, ! must fit in subway gate slot...
+ before [;
+ Cast:
+if ((the_spell_was == huncho_spell or luncho_spell) &&
+ (self hasnt general))
+"Your chant goes unanswered.";
+ Take, Push, Pull, Touch, Rub, Squeeze:
+ if (self hasnt general) {
+ if (rubber_gloves has worn) {
+ if (action==##Take) give self general;
+ print "As you touch the wire, you notice a \
+bright spark! Good thing you were wearing rubber gloves! ";
+ }
+ else {
+ print "As your fingers get near the wire, \
+a bright spark of electricity ";
+ if (random(10) < 4) {
+ deadflag = 1;
+ move GHOST to House_Basement;
+"arcs into your hand! The results are quite shocking, I'm afraid.";
+ }
+ else
+"flashes near your fingers! You pull back just in time.";
+ }
+ }
+ ],
+;
+
+Object foundation "foundation" House_Basement
+ with name "foundation" "break" "hole",
+ initial "A large break in the wall exposes a good portion of \
+ the house's foundation.",
+ description "Water damage, or simply age, has exposed a large \
+ hole in one of the walls, through which you can see exposed \
+ wood and brick, part of the foundation of the house.",
+ before [;
+ Receive:
+ "No need to put things in the foundation like that.";
+ Search:
+ if (self hasnt general)
+ "You briefly search the decaying foundation, but find nothing.";
+ else {
+ print "You dig around in a familiar spot in the hole ";
+ give self ~general;
+ if (children(foundation_wall) == 0)
+ "but find nothing.";
+ Achieved(17);
+ while (child(foundation_wall) ~= 0)
+ move child(foundation_wall) to House_Basement;
+ "and find something!";
+ }
+ ],
+ has static;
+
+Object House_Kitchen "Kitchen"
+ with description "You're in the kitchen, by the looks of things. \
+Some broken cabinets are on the wall. Light from partially boarded-up \
+windows lets you see the rotting wood floors. Rooms lie to the \
+north and west.",
+ name "cabinets" "windows" "wood",
+ w_to House_Ent,
+ n_to House_Pantry,
+ has light;
+
+! (An oven, a typical inform object)
+Object OVEN "GUE-Automatic oven" House_Kitchen
+ with name "oven" "GUE-Automatic",
+ when_closed "Strangely untouched and undamaged, a GUE-Automatic oven is \
+sitting closed in a corner of the room.",
+ capacity 1,
+ when_open [ x;
+ print "Strangely untouched and undamaged, a GUE-Automatic oven is \
+sitting open in a corner of the room.";
+ x = children(self);
+ if (x == 0) " It seems to be empty.";
+ print " It contains:^";
+ x = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT;
+ WriteListFrom (child(self), x, 1);
+ rtrue;
+ ],
+ size 15,
+ description "A FrobozzCo best-seller -- this small green oven is \
+perfect for those adventurers who want a home-cooked meal, but are short \
+on time and space. There's a dial and a button \
+on the top.",
+ before
+ [ x ;
+ Open:
+ if (self hasnt open) {
+ give self open;
+ print "You open the oven, ";
+ x = children(self);
+ if (x==0) "which is empty.";
+ print "revealing:^";
+ x = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT;
+ WriteListFrom (child(self), x, 1);
+ rtrue; }
+ ],
+ add_to_scope oven_dial oven_button,
+ has static container openable;
+
+Object oven_dial "oven dial"
+ with name "dial",
+ number 5,
+ description [;
+ print "A round dial with small printed words. A line on the \
+oventop marks which dial setting is currently active, which at the \
+moment is ~", (string) OVEN_settings-->(oven_dial.number); "~.";
+ ],
+ before [;
+ Turn:
+ oven_dial.number = oven_dial.number + 1;
+ if (oven_dial.number > 9) oven_dial.number = 1;
+ print "The line is now pointing to ~", (string) OVEN_settings-->(oven_dial.number);
+ "~ on the dial.";
+ SetTo:
+ "The dial has somewhat unusual \
+settings. You'll need to turn to the one you want.";
+ ],
+ has static;
+
+Object oven_button "oven button"
+ with name "button" "black",
+ number 0,
+ description "A small round black button on the top of the oven.",
+ before [;
+ Push:
+ if (OVEN has open)
+ "There is an irritated buzz.";
+ else {
+ print "You press the button and hear a low spinning noise. \
+Suddenly, the oven makes a ";
+ if (oven_dial.number == 9) {
+ ! Ye old nuclear flash setting
+ if (children(OVEN) ~= 0)
+ remove child(OVEN);
+"tremendous 'bang', and nearly springs off \
+the floor! A bright flash of light seems to originate from somewhere \
+inside the oven! Then, just as suddenly, everything is quiet again.";
+ }
+ ! check object in oven
+ ! if obj exists, check for edible
+ ! or cake, mutate appropriately.
+ if (children(OVEN) ~= 0) {
+ if ((Baking_Pan in oven) && (cake in Baking_Pan)) {
+ ! we're no doubt cooking the cake again.
+ ! as a nice feature of the GUE auto, if the cake
+ ! was undone, and the oven setting == 4, give
+ ! the cake the 'done' result
+ if ((cake.number == 1) && (oven_dial.number == 4))
+ cake.number = 0;
+ ! otherwise, nothing changes
+ }
+ if ((Baking_Pan in oven) && (dough in Baking_Pan)) {
+ ! first, check oven setting (too cold or too hot)
+ ! if setting ok, check number of times folded
+ ! (too few, too many). Move 'cake' to pan, make
+ ! dough child of cake, and set the 'result' number
+ ! of cake accordingly (0, ok, 1 underdone, 2
+ ! overdone, 3 underfolded, 4 overfolded)
+ ! (assumption is that dough will be only thing
+ ! in pan [add's are trapped by dough]
+ move dough to cake; ! Zen cooking...
+ move cake to Baking_Pan;
+ if (oven_dial.number == 4) {
+ if (dough.number < 83)
+ cake.number = 3;
+ if (dough.number > 83)
+ cake.number = 4;
+ else cake.number = 0; ! well done baker
+ }
+ else {
+ if (oven_dial.number < 4)
+ cake.number = 1;
+ if (oven_dial.number > 4)
+ cake.number = 2;
+ }
+ }
+ }
+"a loud 'pop' and nearly springs off \
+the floor! Then, just as suddenly, everything is quiet again.";
+ }
+ ],
+ has static;
+
+Object House_Pantry "Pantry"
+ with description "This was once probably a pantry of some \
+sort. It's now a bare closet-sized room. The exit is south.",
+ s_to House_Kitchen,
+ has light;
+
+Object Baking_Pan "baking pan" House_Pantry
+ with name "pan" "baking",
+ description "It's a nice round flat-bottomed ceramic pan.",
+ capacity 20,
+ !weight 10,
+ size 14,
+ before
+ [ i ;
+ Mix:
+ if (children(Baking_Pan) == 0)
+ "There doesn't seem to be anything in the pan to mix.";
+ else {
+ if (cake in Baking_Pan)
+ "You can't mix anything with the already baked cake in the pan.";
+ ! if the dough is already in the pan, add the
+ ! 'new children', if any
+ if (dough in Baking_Pan) {
+ i = 0;
+ move dough to OVEN; ! Temp
+ while (child(Baking_Pan) ~= 0) {
+ i = i + 1;
+ move child(Baking_Pan) to dough;
+ }
+ move dough to Baking_Pan;
+ if (i == 0)
+ "You need to add something to the pan if you \
+want to mix something new into the dough.";
+ "You mix in the new ingredients into the dough.";
+ }
+ ! Minimally, if the flour, butter and egg are in the
+ ! pan, 'dough' will be produced
+ if ((flour notin Baking_Pan) ||
+ (corbie_egg notin Baking_Pan) ||
+ (butter notin Baking_Pan))
+ "You mix the contents of the pan around a bit, but \
+some things don't quite coagulate, and the contents remain unmixed.";
+ else {
+ while (child(Baking_Pan) ~= 0) {
+ move child(Baking_Pan) to dough;
+ }
+ move dough to Baking_Pan;
+ "You start mixing. Like magic, in short time you \
+have a doughy mixture in the pan.";
+ }
+ }
+ LetGo:
+ if (noun == dough or cake) {
+ CDefArt(noun); " is stuck fast in the pan and \
+ you can't get it out.";
+ }
+ else {
+ ! we've modified certain ingredient objs that we want \
+ ! to 'preserve' in the pan.
+ if ((noun == flour) || (noun == sugar_cube) ||
+ (noun == baking_powder) || (noun == butter) ||
+ (noun == corbie_egg) || (noun==dornberries))
+ "It's somewhat scattered about in the pan right \
+now, and you can't quite remove it cleanly.";
+ }
+ Receive:
+ if (cake in self)
+ "The cake takes up the entire space in the pan.";
+ ! -- trap and nicely parse putting
+ ! ingredients in pan, will require modifying
+ ! 'short_name's of various ingredients.
+ if (noun == flour) {
+ flour.short_name = "pile of flour";
+ move flour to Baking_Pan;
+ flour.description = "A heap of white flour.";
+ "You break open the bag and add the flour to the pan.";
+ }
+ if (noun == sugar_cube) {
+ sugar_cube.short_name = "quantity of sugar";
+ move sugar_cube to Baking_Pan;
+ sugar_cube.description = "Some sugar scattered about.";
+ "You crumble the sugar cube into the pan.";
+ }
+ if (noun == baking_powder) {
+ baking_powder.short_name = "small sprinkling of baking powder";
+ move baking_powder to Baking_Pan;
+ baking_powder.description = "A small pile of very fine white powder.";
+ "You open the packet and add the powder to the pan.";
+ }
+ if (noun == corbie_egg) {
+ corbie_egg.short_name = "bit of raw egg";
+ move corbie_egg to Baking_Pan;
+ corbie_egg.description = "The yolk and the white parts from an egg.";
+ "You crack the egg and drop the gooey contents into the \
+ pan, discarding the shell.";
+ }
+ ],
+ has container open;
+
+Object pan_sticker "sticker" Baking_Pan
+ with name "sticker",
+ initial "There's a sticker stuck to the bottom of the pan.",
+ description "\
+Frobozz Magic Baking Pan^^\
+HELLO, BAKER!^^\
+To mix ingredients placed in pan, simply say 'MIX PAN'. \
+Baked goods should be removed with a Frobozz Magic \
+Spatula.",
+ !weight 1,
+ size 5,
+;
+
+Object dough "lump of dough"
+ with name "dough",
+ number 0, ! equals the number of times folded
+ !weight 10,
+ size 14,
+ description "It looks like a nice beige lump of uncooked dough.",
+ before [;
+ Eat, Taste:
+ if (action==##Eat) remove self;
+ "Ugg. Raw dough.";
+ Cast:
+ if (the_spell_was == gloth_spell) {
+ dough.number = dough.number + 83;
+ if (dough.number > 500) dough.number = 500;
+ "As you speak the chant, the dough seems to \
+twinkle! With a sudden puff of flour, the dough spins and \
+neatly kneads itself many times!";
+ }
+ Fold:
+ dough.number = dough.number + 1;
+ print "You roll up your sleeves and start kneading. \
+The dough ";
+ if (dough.number > 500) dough.number = 500;
+ if (dough.number < 50)
+ "folds easily.";
+ if (dough.number > 200)
+ "has the consistency of a soft rock.";
+ "is pliable.";
+ ],
+ has edible;
+
+Object cake "cake"
+ with name "cake",
+ number 0,
+! number = condition:
+! 0 ok, 1 undercooked, 2 overck, 3 underfld, 4 overfld
+ description [;
+ print "It's a ";
+ switch (cake.number) {
+ 1: "somewhat raw-looking cake.";
+ 2: "nice-looking cake, except that it \
+looks a little burned.";
+ default: "nice-looking cake.";
+ ! The player will have to taste the cake to check the
+ ! 'fold quality'.
+ }
+ ],
+ before [;
+ Eat:
+ remove self;
+ "Not bad. Unfortunately, it looks like you can't have \
+your cake and eat it too.";
+ Taste:
+ print "You taste a tiny bit of the cake. ";
+ switch (cake.number) {
+ 1: "It tastes a bit underdone.";
+ 2: "It tastes a little burned.";
+ 3: "It's a little too soft.";
+ 4: "It's a bit tough.";
+ default: "It tastes great!";
+ }
+ ],
+ !weight 10,
+ size 14,
+ has edible;
+
+
+
+! ***************
+! animated beings
+! ***************
+
+Object GHOST "frightening zombie" House_Basement
+ with name "zombie" "frightening",
+ description "A frightening gaunt member of the \
+living dead, with pale skin, and even paler eyes.",
+ before [;
+ Cast:
+ if (the_spell_was == wigro_spell) {
+ remove self;
+ "The zombie crumbles into dust, turned.";
+ }
+ ],
+ life [;
+ ThrowAt:
+ if (noun==holywater) {
+ remove holywater; remove self;
+ "The vial breaks into shards, scattering \
+holy water all over the zombie. The zombie shrieks, and \
+crumbles into dust.";
+ }
+ Attack: "Your attack knocks it back, but it \
+seems completely unharmed, somehow!";
+ Give:
+if (noun==rubber_gloves) {
+ move wire to House_Basement;
+ move rubber_gloves to House_Basement;
+ give rubber_gloves ~worn;
+ give wire general;
+ give House_switchbox open;
+ remove self;
+ "The zombie seems to regard the gloves, and slowly puts \
+them on. It proceeds to open the metal box and remove a \
+loose wire, producing a few sparks in the process. Finally, \
+it places the loose wire on the floor, satisfied. It \
+slowly crumbles into dust, but you just manage to hear, \
+~Thanks, I've been trying to get rid of that wire for ages,~ \
+in the faintest of whispers.";
+}
+ default: "Zombies are usually not very responsive to \
+those among the living. This one is no exception.";
+ ],
+ has animate;
+
+! ***************
+! spells/scrolls
+! ***************
+
+Object gray_scroll "gray scroll" House_Basement
+ class scroll_class,
+ with name "gray",
+;
+
+Object tossio_spell "turn granite to pasta" gray_scroll
+ class spell_class,
+ with name "tossio",
+ magic [;
+ if ((location == THIEF_Storeroom) &&
+ (second == w_obj) && (THIEF_Storeroom hasnt general)) {
+ give THIEF_Storeroom general;
+ move pasta to THIEF_Storeroom;
+ move c50 to THIEF_Storeroom;
+ "As you finish the chant, the granite wall is replaced \
+by a large mass of pasta. A hidden section of the room is revealed, \
+along with the mass of gold coins it was holding! The coins spill \
+out, and nearly flood the room.^^In a flash, a large group of \
+financial nymphs appear on the scene. ~It looks like we found the \
+missing GUS earnings,~ one nymph says to another. Producing large \
+sacks, they quickly collect the mass of coins and disappear with a \
+twinkle.^^Moments later, a single coin falls out of a crack in the \
+previously hidden alcove, rolling to a stop near your feet.";
+ }
+ "Your chant goes unanswered. I guess you need pure granite.";
+ ],
+;
+
+! ***************
+! misc items
+! ***************
+
+Object red_sphere "red sphere"
+ class sphere_class
+ with name "red",
+ description "A tiny perfect red sphere, made of some strange \
+ unknown metal.",
+;