--- /dev/null
+
+! **************************************************************
+! frostham.inf
+! ------------
+! Frostham locations in SPIRITWRAK, included in spirit.inf
+! (Do not compile and/or use separately!)
+! **************************************************************
+
+Object FROSTHAM_Outskirts "Frostham Outskirts"
+ with description [;
+ print "You are at the northern outskirts of Frostham. \
+The city proper is to the south. A few \
+snow covered residences are nearby. \
+A trail leads into a valley to the north";
+ if (self hasnt general) {
+ give self general;
+ ".^^The last time you saw Frostham was before you \
+entered the Monastery -- many years ago at least. \
+Oddly, it seemed bigger and less desolate then.";
+ }
+ else ".";
+ ],
+ name "city" "snow" "residences" "trail" "valley",
+ n_to Valley_trail,
+ s_to FROSTHAM_2,
+ cant_go "You walk around the local area a bit, finding \
+ nothing of interest.",
+ has light;
+
+Object FROSTHAM_2 "Frostham"
+ with description "You are in Frostham City, the famous winter-\
+lover's haven. The once booming ski vacation spot seems \
+to be a bit more run-down than in times past. \
+The city thins out towards the north, while \
+another section of town is to the south. To the west is \
+a large wood structure. To the southwest is a small \
+building. To the southeast is another small building, possibly a \
+store.",
+ name "wood" "structure" "building" "store",
+ n_to FROSTHAM_Outskirts,
+ w_to FROSTHAM_Resort,
+ sw_to FROSTHAM_Governer1,
+ s_to FROSTHAM_GUSStop,
+ se_to FROSTHAM_Store,
+ cant_go "You walk around the local streets a bit, finding \
+ nothing of interest.",
+ each_turn [ i ;
+ if (GROC_hall1 has general)
+ i = CheckHall();
+! Why check the grocery hallway here?
+! Conceptually, if the player dies in the hallway (rather
+! difficult, but possible by swearing, for example),
+! the hallway should 'adjust' itself to the new weight.
+! I simply check this here, because the player must go
+! this way to reach the hallway for a second time.
+ ],
+ has light;
+
+Object FROSTHAM_Store "General Store"
+ with description [;
+print "This appears to be a small grocery store, \
+strangely abandoned at the moment. Shelves line the walls, \
+although, since no one is minding \
+the store, the current stock seems to be a bit depleted. \
+You notice an exit south marked ~EMPLOYEES ONLY~ that \
+appears to lead to ";
+if (GROC_hall1.number == 1)
+print "some hallway.";
+else
+print "a dark hole.";
+" The way back out is to the northwest.";
+],
+ name "stock" "shelves",
+ nw_to FROSTHAM_2,
+ s_to [;
+if (GROC_hall1.number == 1) return GROC_hall1;
+else
+ "You pull back before falling into what appears to be a deep \
+pit of some sort beyond the south exit.";
+],
+ after [ i ;
+ Go:
+ if (noun == n_obj) {
+ i = CheckHall();
+ if (i == 1)
+ print "You hear a grinding noise from behind \
+you.^";
+ }
+ ],
+ has light;
+
+Class Barrel_class
+ with name "crate",
+ before [;
+ Take, Pull, Turn: "It's rather heavy.";
+ Push: "It's heavy, but you manage to make it slide \
+along the floor a bit.";
+ PushDir:
+if (location == FROSTHAM_Store && second == nw_obj)
+ "A portion of the door seal blocks the crate from going outside.";
+if (location == GROC_hall1 && second == s_obj) {
+ print "^You give the crate a good shove.^";
+ move self to GROC_hall2;
+ <<Go s_obj>>;
+}
+if (location == GROC_hall1 && second == n_obj) {
+ print "^You give the crate a good shove.^";
+ move self to FROSTHAM_Store;
+ <<Go n_obj>>;
+}
+if (location == GROC_hall2 && second == n_obj) {
+ print "^You give the crate a good shove.^";
+ move self to GROC_hall1;
+ <<Go n_obj>>;
+}
+if (location == FROSTHAM_Store && second == s_obj && GROC_hall1.number == 1) {
+ print "^You give the crate a good shove.^";
+ move self to GROC_hall1;
+ <<Go s_obj>>;
+}
+! (we do our own version to allow the CheckHall() to
+! work properly)
+AllowPushDir(); rtrue;
+ ],
+ has static;
+
+Object BARREL1 "dusty crate" FROSTHAM_Store
+ class Barrel_class,
+ with name "dusty",
+ description "A dust-covered crate.",
+;
+Object BARREL2 "moldy crate" FROSTHAM_Store
+ class Barrel_class,
+ with name "moldy",
+ description "A mold-covered crate.",
+;
+Object BARREL3 "filthy crate" FROSTHAM_Store
+ class Barrel_class,
+ with name "filthy",
+ description "A filth-covered crate.",
+;
+
+Object GROC_hall1 "North end of Hallway"
+ with name "end" "hallway",
+ number 1,
+ description [;
+ print "You're at the north end of a short N-S hall. \
+The hallway";
+ switch (GROC_hall1.number) {
+ 1: print " slopes sharply upwards to the south. \
+You notice two dark doorways above you along the northern wall, \
+one above the other, \
+but no obvious means of getting to them";
+ 2: print " travels evenly to the south. \
+You notice a dark doorway above you along the northern wall, \
+but no obvious means of getting to it";
+ 3: print " slopes sharply downwards to the south";
+ }
+ ". To the north is an exit.";
+],
+ each_turn [;
+ if (self hasnt general) {
+ give self general;
+ "^The hallway suddenly creaks underfoot! The floor \
+shakes briefly and dust seems to rise from cracks near the \
+walls. Apparently, your unexpected presence has jarred \
+some old mechanisms back to life!";
+ }
+ ],
+ n_to [;
+switch (GROC_hall1.number) {
+ 1: return FROSTHAM_Store;
+ 2: return GROC_stockroom;
+ 3: return GROC_attic;
+}
+ ],
+ after [ i ;
+ Go:
+ if (noun == n_obj or s_obj) {
+ i = CheckHall();
+ if (i == 2)
+print "^You hear a low grinding noise. \
+The hallway underfoot suddenly shifts and drops!^";
+ }
+ ],
+ s_to GROC_hall2,
+ before [;
+ Jump: "You jump for a bit. The floor feels strangely \
+unsteady.";
+ ],
+ has light;
+
+
+Object GROC_hall2 "South end of Hallway"
+ with name "end" "hallway",
+ number 3,
+ description [;
+ print "You're at the south end of a short N-S hall \
+that seems to lead nowhere. The hallway";
+ switch (GROC_hall2.number) {
+ 1: " slopes sharply upwards to the north.";
+ 2: " travels evenly to the north.";
+ 3: " slopes sharply downwards to the north.";
+ }
+ ],
+ after [ i ;
+ Go:
+ if (noun == s_obj) {
+ i = CheckHall();
+ if (i == 1)
+print "^You hear a low grinding noise. \
+The hallway underfoot suddenly shifts and drops!^";
+ }
+ ],
+ before [;
+ Jump: "You jump for a bit. The floor feels strangely \
+unsteady.";
+ ],
+ n_to GROC_hall1,
+ has light;
+
+! (Routine for checking 'weights' of two sides of hallway)
+! (assumes called from room's _after_ routine, thus all
+! barrels and players are in their after_turn places)
+! RETURNS: 0 if no change
+! 1 if NORTH END now higher than before
+! 2 if NORTH END now lower than before
+[ CheckHall
+ i ! local total of weight points for north end
+ j ! local total of weight points for south end
+ k ! local -- orig setting of north end (.number)
+ ;
+ i = 0; j = 0;
+ k = GROC_hall1.number;
+ if (player in GROC_hall1)
+ i = i + 2;
+ if (player in GROC_hall2)
+ j = j + 2;
+ if (BARREL1 in GROC_hall1) i = i + 1;
+ if (BARREL1 in GROC_hall2) j = j + 1;
+ if (BARREL2 in GROC_hall1) i = i + 1;
+ if (BARREL2 in GROC_hall2) j = j + 1;
+ if (BARREL3 in GROC_hall1) i = i + 1;
+ if (BARREL3 in GROC_hall2) j = j + 1;
+ if (i == j) {
+ GROC_hall1.number = 2;
+ GROC_hall2.number = 2;
+ }
+ if (i > j) {
+ GROC_hall1.number = 1;
+ GROC_hall2.number = 3;
+ }
+ if (i < j) {
+ GROC_hall1.number = 3;
+ GROC_hall2.number = 1;
+ }
+ if (GROC_hall1.number == k)
+ return 0;
+ if (GROC_hall1.number > k)
+ return 1;
+ if (GROC_hall1.number < k)
+ return 2;
+];
+
+
+Object GROC_stockroom "Stockroom"
+ with description [;
+print "This is a tiny poorly lit room, that \
+is covered in dust. An exit south leads to a";
+if (GROC_hall1.number == 2) print " short hallway";
+else print " dark hole";
+if (GROC_attic has general)
+ print ". Above, a hole has been exposed in the ceiling structure";
+".";
+ ],
+ name "dust",
+ u_to [; if (GROC_attic hasnt general)
+"You can't go that way.";
+ else return GROC_attic;
+ ],
+ s_to [;
+if (GROC_hall1.number == 2) return GROC_hall1;
+else
+ "You pull back before falling into what appears to be a deep \
+pit of some sort beyond the south exit.";
+ ],
+ after [ i ;
+ Go:
+ if (noun == n_obj) {
+ i = CheckHall();
+ if (i == 2 or 1)
+ print "You hear a low grinding noise behind you.^";
+ }
+ ],
+ has light;
+
+Object GROC_attic "Attic"
+ with description [;
+print "This is an exceptionally cramped attic, obviously \
+unused for some time. The floorboards are starting to crack.";
+if (self has general)
+ print " One section of the floor is particularly poor, and has \
+a gaping hole leading downwards into darkness.";
+" An exit heads south.";
+ ],
+ name "sag" "crack" "hole",
+ d_to [;
+ if (GROC_attic hasnt general)
+"You can't go that way.";
+ else return GROC_stockroom;
+ ],
+ s_to [;
+if (GROC_hall1.number == 3) return GROC_hall1;
+else
+ "You pull back at the edge of the exit. The floor, it \
+appears, is too far below you!";
+ ],
+ after [ i ;
+ Go:
+ if (noun == n_obj) {
+ i = CheckHall();
+ if (i == 2)
+ print "You hear a low grinding noise behind you.^";
+ }
+ ],
+ has light;
+
+Object attic_floorboards "floorboards" GROC_attic
+ with name "boards" "floorboards",
+ description [;
+print "Some badly rotting floorboards";
+if (GROC_attic has general)
+ " with a noticeable hole in one section.";
+else {
+ if (self has general)
+ " with a noticeable sag in one section.";
+ else ".";
+}
+ ],
+ before [;
+ Take: "They're nailed into the floor.";
+ Push, Pull, Attack, Shake:
+if (self has general)
+ "The floor shakes a bit, but nothing else happens.";
+else {
+ move loose_board to GROC_stockroom;
+ give self general;
+ "The floor shakes under your abuse, and suddenly, a \
+portion in the middle sags considerably! But nothing else \
+happens.";
+}
+ ],
+ has scenery;
+
+Object loose_board "loose board"
+ with name "loose" "board",
+ initial "You notice a loose board, partially \
+broken, hanging from the ceiling structure.",
+ description "A portion of the ceiling boards \
+has apparently broken loose.",
+ before [;
+ Pull, Attack, Shake:
+give GROC_attic general;
+remove self;
+"You give the board a good couple of yanks. The board \
+soon breaks off, taking a small portion of the ceiling \
+with it! After the dust settles, you notice the rather \
+poor remodeling job you've done to the ceiling.";
+ ],
+has static;
+
+
+! (the coffee was moved to the cafe in Borphee)
+Object decaf_coffee_can "can of decaf coffee"
+ with name "can" "coffee" "decaf",
+ description "The can reads: ~Frobozz coffee crystals~^^\
+ ~Rich, mountain-grown flavor.~^^DECAFFEINATED.",
+ before [;
+ Open:
+ "You'd need a good can-opener for that.";
+ ],
+ size 15,
+;
+
+Object icebox_key "square key" GROC_attic
+ with name "key" "square",
+ size 5,
+;
+
+
+Object icebox "icebox" GROC_stockroom
+ with name "icebox" "box",
+ description "A rather old-looking icebox.",
+ capacity 10,
+ size 20,
+ with_key icebox_key,
+ when_closed "A dust-covered icebox stands closed against \
+the northern wall.",
+ when_open [ x;
+ print "The icebox is open. ";
+ x = children(self);
+ if (x == 0) "It is also empty.";
+ print "Inside ";
+ if (x == 1) print "is: "; else print "are: ^";
+ x = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT;
+ WriteListFrom (child(self), x, 1);
+ rtrue;
+ ],
+ has static container openable lockable locked;
+
+Object cerealbox1 "blue cereal box" icebox
+ with name "box" "blue" "Crunchies",
+ description "A blue paper box with lettering that reads:^^\
+ ~Grueslayer Crunchies!^^\
+ (It's not just for adventurers anymore!)^^\
+ [Free bonus scroll surprise inside!]~^^\
+ Writing on the box reads ~50zm~.",
+ size 10, capacity 5,
+ before [;
+ Receive:
+ if (noun == cerealbox2 or cerealbox3) {
+ "That doesn't quite fit.";
+ }
+ Cast:
+ if (the_spell_was == zemdor_spell) {
+ if (self hasnt general) {
+ give self general;
+ move cerealbox2 to parent(cerealbox1);
+ move cerealbox3 to parent(cerealbox1);
+ Achieved(1);
+ "The box of cereal suddenly seems to dance with magic! \
+ Before your very eyes, the box suddenly splits into \
+ three boxes! The magic fades, but the boxes remain.";
+ }
+ else
+ "The magic fights against the cereal box, but fails. \
+ I guess you can only triplicate once.";
+ }
+ ],
+ has container openable;
+
+Object cerealbox2 "navy-blue cereal box"
+ with name "box" "navy-blue" "Sugarglobs",
+ description "A navy-blue paper box with lettering that reads:^^\
+ ~Frobozz Super Sugar Globs!^^\
+ (Seventeen times the sugar of any other cereal!)^^\
+ [Free bonus Frobozz toy inside!]~^^\
+ Writing on the box reads ~50zm~.",
+ !weight 10,
+ size 10, capacity 5,
+ before [;
+ Receive:
+ if (noun == cerealbox1 or cerealbox3) {
+ "That doesn't quite fit.";
+ }
+ ],
+ has container openable;
+
+Object cerealbox3 "royal-blue cereal box"
+ with name "box" "royal-blue" "Dornflakes",
+ description "A royal-blue paper box with lettering that reads:^^\
+ ~Dornflakes^^\
+ (Just like Grandma Dimwit used to make!)^^\
+ [Free bonus Frobozz toy inside!]~^^\
+ Writing on the box reads ~50zm~.",
+ !weight 10,
+ size 10, capacity 5,
+ before [;
+ Receive:
+ if (noun == cerealbox1 or cerealbox2) {
+ "That doesn't quite fit.";
+ }
+ ],
+ has container openable;
+
+! A Breakfast cereal class -- what a concept
+Class cereal_class
+ with name "cereal",
+ description "A quantity of overly-sweetened breakfast cereal.",
+ !weight 5,
+ size 8,
+ before [;
+ Eat:
+ remove self;
+ "You consume the cereal. The sugar rush occurs five seconds \
+ later and ends just as quickly.";
+ ],
+ has edible;
+
+Object cereal1 "crunchy cereal" cerealbox1
+ class cereal_class
+ with name "crunchy";
+Object cereal2 "sugary cereal" cerealbox2
+ class cereal_class
+ with name "sugary";
+Object cereal3 "flaky cereal" cerealbox3
+ class cereal_class
+ with name "flaky";
+
+Object baking_powder "packet of baking powder" icebox
+ with name "powder" "baking" "packet",
+ short_name "packet of baking powder",
+ description "A single-use packet of baking powder from \
+~Port Foozle Bakers Guild~ products.",
+ !weight 5,
+ size 5,
+ before [;
+ Eat:
+ remove self;
+ "You eat the baking powder. Yuck.";
+ ],
+ has edible;
+
+Object butter "stick of butter" icebox
+ with name "butter" "stick" "fat",
+ description "A good-sized stick of butter.",
+ !weight 5,
+ size 5,
+ before [;
+ Eat:
+ remove self;
+ print "You eat the entire stick of butter.";
+ if (random(20) < 15)
+" Your heart will no doubt thank you for that someday.";
+ deadflag = 1;
+ " The sudden \
+intake of concentrated fat is too much of a shock to your \
+system, and an important artery somewhere bursts.";
+ ],
+ has edible;
+
+Object FROSTHAM_Resort "Ski Resort"
+ with description "You are inside a large ski resort. Perhaps \
+ it's not ski-season, as the entire place is \
+ basically empty. Frostham city lies to the \
+ east.",
+ name "resort" "city" "ski" "skis" "earmuff" "earmuffs",
+ e_to FROSTHAM_2,
+ out_to FROSTHAM_2,
+ w_to "You don't have a lift-ticket. Also, you don't have \
+ skis. Most importantly, however, the slopes look \
+ pretty lousy.",
+ has light;
+
+Object FROSTHAM_Governer1 "Governor's House, Waiting Room"
+ with description "You are in a waiting room in the house of the Frostham \
+ Governor. The carpet is surprisingly plush. \
+ The walls have been painted a rather bland \
+ peach-like color. The furnishings \
+ are also colored peach, which complements the \
+ walls without being too nouveau. The way out \
+ is to the northeast.",
+ name "carpet" "furnishings",
+ ne_to FROSTHAM_2,
+ out_to FROSTHAM_2,
+ s_to Gov_door,
+ after [;
+ Go:
+ if (noun==n_obj) {
+ give Gov_door ~open locked;
+ print "You hear the door slam and lock behind you.^";
+ }
+ ],
+ has light;
+
+Object Gov_couch "couch" FROSTHAM_Governer1
+ with name "couch" "peach",
+ initial "A comfortable-looking peach-colored couch is here.",
+ description "It looks pretty comfy, but the color wouldn't \
+have been your first choice.",
+ before [;
+ Search:
+ if (self hasnt general) {
+ give self general;
+ move c1 to FROSTHAM_Governer1;
+ "You rummage through the cushions and a coin falls out!";
+ }
+ "You find nothing of interest.";
+ ],
+ has static enterable supporter;
+
+Object travel_posters "travel brochure" FROSTHAM_Governer1
+ with name "brochure" "travel",
+ description "The brochure has pictures of various cheerful-looking \
+ people in rather cheerful-looking places. \
+ Bold lettering reads ~FEEL BETTER IN MIZNIA~, \
+ ~IT'S ARAGAIN, AGAIN~, \
+ and ~NEW BORPHEE, EVERYONE'S FAVORITE CITY~",
+ size 10,
+ ;
+
+Object c1 "coin" class coin_class;
+
+Object Gov_desk1 "desk" FROSTHAM_Governer1
+ with name "desk" "waiting" "room",
+ description "A fairly plain-looking desk",
+ has scenery supporter;
+
+Object Gov_ledger "ledger" Gov_desk1
+ with name "ledger",
+ description [;
+ if (receptionist in FROSTHAM_Governer1)
+ "The receptionist seems to be using it at the moment.";
+ "The ledger reads:^^\
+ ~ -- New signed petition for presentation and coronation of \
+new King delivered to Aragain Magistrate, awaiting word of \
+event schedule.~^^That's all. I guess the governor hasn't been \
+very busy as of late.";
+ ],
+ !weight 20,
+ size 15,
+ before [;
+ Take:
+ if (receptionist in FROSTHAM_Governer1)
+ "The receptionist gives you a rather menacing look.";
+ ],
+;
+
+
+Object alarm_clock "alarm clock" Gov_desk1
+ with name "clock" "alarm",
+ description [;
+print "A small round desk-clock, with a set of bells \
+on the top, and a small pull-knob on the back. \
+Strangely, the clock seems to be stopped. Two hands, black and golden, \
+are sitting at ",alarm_clock.number," and ",
+alarm_clock_dial.number;
+ " respectively.";
+ ],
+ article "an",
+ number 9, ! setting of the clock hand
+ time_left 0,
+ time_out [ x ;
+ alarm_clock.number = alarm_clock.number + 1;
+ if (alarm_clock.number > 12) alarm_clock.number = 1;
+ x = TestScope(alarm_clock,player);
+ if (x==1) print "^The alarm clock suddenly makes an \
+awful grinding noise";
+ if (alarm_clock.number == alarm_clock_dial.number) {
+ ! alarm goes off
+ if (x==1) print ", followed by a ear-splitting clang!^";
+ ! certain events follow:
+ ! if receptionist still in office and self in office,
+ ! receptionist leaves (if player in office, he'll
+ ! see this, or see it outside the office)
+ if ((receptionist in FROSTHAM_Governer1) &&
+ (((self in FROSTHAM_Governer1) || (self in Gov_desk1)) ||
+ ((self in player) && (player in FROSTHAM_Governer1))) ) {
+ remove receptionist; ! a long lunch hour, apparently...
+ ! give alarm_clock general;
+ Achieved(2);
+ if (player in FROSTHAM_Governer1)
+ "^The receptionist suddenly jumps from her \
+seat and rushes out of the room, screaming ~Lunchtime!~";
+ if (player in FROSTHAM_2)
+ "^You see a woman rush out of the building \
+to the southwest, and quickly vanish.";
+ rtrue;
+ }
+ ! future: boutique in Miznia -- brings salesman to front
+ if (((self in MIZNIA_Boutique) || (self in player)) &&
+ (player in MIZNIA_Boutique)) {
+ print "^From somewhere in the back of the \
+store, a tailor rushes out and";
+ if (MIZNIA_Boutique hasnt general) {
+ give MIZNIA_Boutique general;
+ move fancy_scroll to player;
+ Achieved(23);
+" sees you. ~We've got a rather \
+busy schedule,~ he explains, ~but let me see what I can do.~ \
+He gives you a somewhat unapproving look. ~The ascetic-monk \
+look is out, you know. Here.~ He pins a rolled paper object \
+to your clothes. ~The latest craze -- wearing magic scrolls. \
+Beats using them nowadays, I hear. Now, like I said, we're \
+very busy.~ He goes off to the back of the store.";
+ }
+ else
+" recognizes you. \
+~I've done all I can for you right now,~ he explains as \
+goes off to the back of the store.";
+ }
+ rtrue;
+ }
+ else if (x==1) "!";
+ ],
+ size 5,
+ add_to_scope alarm_clock_dial alarm_clock_bells alarm_clock_hands,
+ has transparent;
+
+Object alarm_clock_dial "knob"
+ with name "pull" "knob",
+ description "A small, pullable knob on the back of the clock.",
+ number 12,
+ before [;
+ Push:
+ print "The knob ";
+ if (self has general) {
+ give self ~general;
+ "pushes in a short bit.";
+ }
+ else "is as far in as it can go.";
+ Pull:
+ print "The knob ";
+ if (self hasnt general) {
+ give self general;
+ "pulls out a short bit.";
+ }
+ else "is as far out as it can go.";
+ Turn:
+ if (self hasnt general) {
+ ! wind clock
+ StartTimer(alarm_clock,1);
+ "The knob turns -- barely. You \
+hear a small clicking noise as well.";
+ }
+ else {
+ ! set alarm hand
+ alarm_clock_dial.number = alarm_clock_dial.number + 1;
+ if (alarm_clock_dial.number > 12)
+ alarm_clock_dial.number = 1;
+ print "The knob turns easily. You notice the \
+golden hand on the front sweep to ",alarm_clock_dial.number;
+ ".";
+ }
+ ! if (alarm_clock hasnt general) {
+ ! }
+ ! "It doesn't turn anymore. I guess the receptionist \
+ ! broke the clock (not that it was in good shape to \
+ ! begin with).";
+ ],
+ has static;
+
+Object alarm_clock_hands "hands"
+ with name "hand" "hands"
+ has static;
+
+Object alarm_clock_bells "bells"
+ with name "bell" "bells"
+ has static;
+
+Object FROSTHAM_Governer2 "Governor's Office"
+ with description "You are in a rather spacious office. The \
+carpeting is quite plush, and all the furnishings seem \
+excessively lavish.",
+ name "carpeting" "furnishings",
+ n_to Gov_door,
+ has light;
+
+Object Gov_desk2 "desk" FROSTHAM_Governer2
+ with name "desk" "office",
+ description "A fairly impressive looking desk, made from \
+ a massive lacquered piece of black oak wood.",
+ before [;
+ Cast:
+ if (the_spell_was == egdelp_spell)
+ "The desk is covered with a ugly waxy film. \
+The governor looks extremely annoyed and wipes the desk clean with \
+a stack of papers.";
+ Push, Pull, Rub, Attack, Search:
+ "~Do you mind?~ the governor says.";
+ ],
+ has scenery supporter;
+
+Object Gov_door "door"
+ with name "door" "office",
+ when_closed [;
+ print "There's a closed door to the ";
+ if (self in FROSTHAM_Governer1)
+ "south.";
+ else "north.";
+ ],
+ when_open [;
+ print "There's an open door to the ";
+ if (self in FROSTHAM_Governer1)
+ "south.";
+ else "north.";
+ ],
+ description "It's just a thick door.",
+ door_dir [ ; if (location==FROSTHAM_Governer1) return s_to;
+ return n_to;
+ ],
+ door_to [ ; if (location==FROSTHAM_Governer1)
+ return FROSTHAM_Governer2;
+ return FROSTHAM_Governer1;
+ ],
+ before [ ;
+ Open:
+ if ((location==FROSTHAM_Governer1) &&
+ (receptionist in FROSTHAM_Governer1))
+ "The receptionist puts a hand in your way and says, \
+ ~The governor is currently busy.~";
+ Close:
+ if (location==FROSTHAM_Governer2)
+ "~Close it on your way _out_~, the governor snarls.";
+ ],
+ found_in FROSTHAM_Governer1 FROSTHAM_Governer2,
+ has static door openable lockable;
+
+Object FROSTHAM_GUSStop "Subway Entrance"
+ with description "You're near the southern end of the city. \
+ The rest of the city lies to the north. \
+ There's also a rather conspicuous \
+ stairway down here.",
+ name "stairway",
+ n_to FROSTHAM_2,
+ u_to "You can't go that way.",
+ d_to FROSTHAM_GUSStation,
+ cant_go "You walk around the local streets a bit, finding \
+ nothing of interest.",
+ has light;
+
+
+! ******************************************************************
+! People/Creatures
+! ******************************************************************
+
+Object ski_instructor "ski instructor" FROSTHAM_Resort
+ with name "instructor" "dude" "skier" "guy" "tall" "lanky",
+ initial [;
+ print "A tall lanky guy is here, holding two colorful \
+skis. He seems to be ";
+ if (waxy_scroll in self)
+ "waxing them with a scroll.";
+ "concentrating greatly on waxing \
+ his skis.";
+ ],
+ description "A tall lanky guy, like I said. He's \
+ decked out in fancy bright winter clothes.",
+ life [;
+ Attack, ThrowAt:
+ "~Dude, you must chill.~";
+ Answer, Tell:
+ if (special_word == 'hello' or 'hi')
+ "The skier gives you the 'thumbs-up' sign. \
+~Hey, dude.~";
+ else "~Uh, whatever, dude.~";
+ Show:
+ if (noun==rag)
+ "~Hey dude, can I borrow that?~";
+ "~Uh, whatever, dude.~";
+ Order:
+ if (action==##Give) {
+ if (noun=='skis')
+ "~No way, dude.~";
+ if (((noun==waxy_scroll) && (self hasnt general)) ||
+ ((noun==rag) && (self has general)))
+ "~I'm using it, dude.~";
+ }
+ "~Dude, I have no idea what you're talking about.~";
+ Ask:
+ if (second=='rag')
+ "~A rag makes an excellent ski-maintenance accessory, dude.~";
+ if ((second=='scroll' or 'waxy') && (self hasnt general))
+ "~Something I found at the top of a run. \
+ Doesn't work too well, but hey, I gotta wax.~";
+ if (second=='skis')
+ "~My rad Grayslopes Slaloms. If you don't wax 'em \
+ every 30 seconds, they lose their speed.~";
+ if ((second=='slopes') || (second=='slope') ||
+ (second=='powder') || (second=='runs') ||
+ (second=='skiing'))
+ "The skier takes you aside. ~Listen dude, \
+ between you and me, the slopes here rot. They \
+ used to be way better. But you know, I hear there \
+ are some _killer_ drops up north.~";
+ "~Dude, I have no idea what you're talking about.~";
+ Give:
+ if (noun==rag) {
+ move waxy_scroll to FROSTHAM_Resort;
+ move rag to self;
+ give self general;
+ Achieved(3);
+ "The skier gladly takes the rag and starts \
+ polishing immediately. He lets the scroll \
+ fall to the ground. ~Excellent man, thanks!~";
+ }
+ "~No thanks, dude.~";
+ default: "At the moment, the skier is too busy waxing.";
+ ],
+ each_turn [;
+ if (waxy_scroll notin self && self hasnt general) {
+ Achieved(3);
+ remove self;
+ "^~Dude, like, that scroll thing just \
+vanished! What a cosmic experience!~ On that note, \
+the skier opts to head for the slopes, and leaves to the west.";
+ }
+ if (random(20) < 5)
+ "^The skier polishes a spot on his skis.";
+ ],
+ before [;
+ Cast:
+ if (the_spell_was == foblub_spell or espnis_spell)
+ "A pair of fluffy earmuffs the skier is wearing \
+prevents him from hearing the full impact of your sermon.";
+ ],
+ has animate transparent;
+
+Object receptionist "receptionist" FROSTHAM_Governer1
+ with name "receptionist",
+ initial "A receptionist sits behind a desk, engrossed in \
+ the ledger.",
+ description "A gruff-looking lady who apparently is far \
+ more interested in her work than you.",
+ each_turn [;
+ if (receptionist hasnt general) {
+ give receptionist general;
+ "^Without even looking up, the receptionist says, \
+ ~The governor is busy right now.~";
+ }
+ if (random(10) == 1)
+ "^The receptionist turns a page in the ledger.";
+ ],
+ life [;
+ Answer, Order:
+ print "The receptionist";
+ if (special_word=='hello')
+ ", without looking up, says \
+ ~Can I help you?~.";
+ " seems to be ignoring you.";
+ Ask:
+ print "The receptionist";
+ if (second=='governor')
+ ", without looking up, says \
+ ~He's very busy right now.~.";
+ " shrugs.";
+ default:
+ "The receptionist seems to be ignoring you.";
+ ],
+ react_before [;
+ Cast:
+"The receptionist, in a rather shrill voice says, \
+~If you're gonna wait, do it quietly,~ disrupting your chant.";
+ Blow:
+if (noun==whistle)
+"You make an unusually high-pitched noise. The receptionist, \
+in a rather shrill voice says, \
+~If you're gonna wait, do it quietly.~";
+ Sneeze:
+"~If you want to spread germs, do it outside.~";
+ Yell:
+"~If you're gonna wait, do it quietly.~";
+ Sing:
+"~We're not holding auditions, you know.~";
+ ],
+ has animate female;
+
+Object governor "governor" FROSTHAM_Governer2
+ with name "governor" "gov",
+ initial "The governor of Frostham is sitting behind a \
+ desk here, trying to look busy.",
+ description "A sour-looking man who tries his best not \
+ to notice you.",
+ each_turn [ i ;
+ if (governor hasnt general) {
+ give governor general;
+ move c2 to player;
+ "^The governor scowls as you enter. ~What do you want?~ \
+ he says, and doesn't wait for a response. ~Oh, I know. \
+ More complaints about the snow, I suppose? Well \
+ look, I didn't ask for this job. Do you want it? I \
+ didn't think so.~ He shoves something into your hand. \
+ ~Here, buy yourself a cup of coffee, and stop \
+ bothering me.~";
+ }
+ i = random(4);
+ print "^The governor ";
+ if (i == 1)
+ "thumbs through some papers.";
+ if (i==2)
+ "balances a pencil on his nose.";
+ if (i==3)
+ "scribbles something meaningless.";
+ if (i==4)
+ "looks up and notices you. ~Don't you \
+ have anything else to do?~ he says.";
+ ],
+ life [;
+ Ask:
+ if (second=='key' or 'shiny') {
+ print "~Some key an important visitor \
+forgot while visiting. Probably useless now";
+ if (parent(cab_key) == player)
+ print ". You can keep it, for all I care";
+ ".~";
+ }
+ if (second=='receptionist')
+ "~I think she's out to lunch,~ he says, \
+with obvious annoyance.";
+ if (second=='magistrate' or 'king' or 'sydney')
+ "He looks at you suspiciously. \
+~Never heard of him,~ he says.";
+ if (second=='ledger')
+ "~I think my receptionist has it.~";
+ if (second=='pencil')
+ "~Please! I'm a very busy man!~";
+ "~Sorry, that's not my problem. Now run along.~";
+ Kiss:
+ "The governor brushes you off. ~Are you \
+planning on running for office or something?~";
+ Attack, ThrowAt:
+ deadflag = 1;
+ "As you make a threatening move, the governor \
+presses some unseen switch behind his desk. Before you \
+know it, a hidden trapdoor opens in the floor and you \
+plunge to your death. A good politician is always \
+prepared, it seems...";
+ Tell:
+ "~Sure, sure. Scram, will you?~";
+ Answer, Order:
+ if (special_word=='hello')
+ "~Yeah, sure. So what's your problem?~";
+ "The governor is busy trying to look busy.";
+ Give:
+ "Bribing a politician, eh?";
+ Show:
+ if (noun==Gov_ledger)
+ "~Hey, return that to the receptionist!~";
+ "~Please! I'm a very busy man!~";
+ ],
+ react_after [;
+ Take:
+ if (noun == cab_key)
+ "~Oh sure, just go ahead and take things \
+from my office. See if I care.~";
+ ],
+ before [;
+ Cast:
+ if (the_spell_was == foblub_spell)
+ "Actually, the governor seems pretty glued to his \
+seat already. In any event, nothing seems to happen.";
+ if (the_spell_was == espnis_spell)
+ "The governor seems to nod off, but only for \
+a second.";
+ ],
+ has animate transparent;
+
+
+! ***************
+! More objects...
+! ***************
+
+Object pencil "pencil" governor
+ with name "pencil";
+
+Object c2 "coin" class coin_class;
+
+! (cereal box prizes)
+Object whistle "whistle" cerealbox2
+ with name "whistle",
+ description "A tiny plastic whistle.",
+ !weight 1,
+ size 1,
+ before [;
+ Blow:
+ "You make an unusually high-pitched noise.";
+ ],
+;
+! (a fancier packaged prize :)
+Object plastic_wrapper "plastic wrapper" cerealbox3
+ with name "wrapper" "plastic",
+ description "A small plastic see-through package.",
+ before [;
+ Open:
+ while (child(self)~=0) move child(self) to parent(self);
+ remove plastic_wrapper;
+ "The wrapper rips open with ease, and disintegrates, \
+ leaving the contents behind.";
+ ],
+ !weight 0,
+ size 5,
+ has container openable transparent;
+
+Object toy_volcano "toy volcano" plastic_wrapper
+ with name "toy" "volcano",
+ description "A strange thing indeed -- a miniature \
+ ceramic toy, that has been painted and shaped \
+ in painstaking detail to look like a volcano.",
+ !weight 5,
+ size 5,
+;
+
+Object volcano_note "instruction notice" plastic_wrapper
+ with name "notice" "instruction",
+ article "an",
+ description "~Frobozz Instant Volcano~^^\
+ (parental supervision recommended)^^\
+ To use: Just add a good quantity of water! We suggest \
+ a very large safety radius.~",
+ size 5,
+;
+
+
+
+! ******************
+! Scrolls and spells
+! ******************
+
+Object waxy_scroll "waxy scroll" ski_instructor
+ class scroll_class,
+ with name "waxy",
+;
+
+Object egdelp_spell "create waxy build-up on wood" waxy_scroll
+ class spell_class,
+ with name "egdelp",
+ magic [;
+ if (second ~= 0 && second ~= player) {
+ CDefArt(second); " looks pretty polished as is."; }
+ else { "The chant, seeking wood to polish, fails."; }
+ ],
+;
+
+Object sugar_scroll "sugar-coated scroll" cerealbox1
+ class scroll_class,
+ with name "sugar-coated" "coated",
+;
+
+Object zemdor_spell "triplicate object" sugar_scroll
+ class spell_class,
+ with name "zemdor",
+ number 0,
+ magic [;
+ if (second == 0)
+ "The chant, seeking a locus for \
+triplication, fails.";
+ if (second has animate)
+ "The chant, not designed for living creatures, fails.";
+ if (second has is_spell)
+"This violates certain unwritten laws of magic.";
+ if (second has is_coin) {
+ ! new twist for zemdor, as sugg. by player
+ print "The coin shimmers suddenly! You blink in \
+ disbelief as the coin seems to split \
+ into three copies of itself! ";
+ if (self hasnt general) {
+ give self general;
+ move c12 to parent(second);
+ move c13 to parent(second);
+ "You notice there are now three coins where \
+there was once but one!";
+ }
+ "Suddenly, a financial nymph appears! She gives \
+you a denunciatory look. ~Line 7234-6 of the Pierpont \
+tax laws clearly states that repeated unauthorized \
+triplication of monetary \
+items is strictly forbidden,~ she says, and takes the \
+the two newly created coins before disappearing.";
+ }
+ print (The) second, " shimmers suddenly! You blink in \
+ disbelief as ", (the) second, " seems to split \
+ into three copies of itself! ";
+ "But, as you finish the chant, \
+ the mystic energy seems to fade, and the copies \
+ coalesce back into one unchanged object. The \
+chant fails.";
+ ],
+;
+
+Object c12 "coin" class coin_class;
+Object c13 "coin" class coin_class;
+