! **************************************************************
! frostham.inf
! ------------
! Frostham locations in SPIRITWRAK, included in spirit.inf
! (Do not compile and/or use separately!)
!
! SPIRITWRAK 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.
!
! SPIRITWRAK 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 SPIRITWRAK. If not, see ./>
! **************************************************************
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;
<>;
}
if (location == GROC_hall1 && second == n_obj) {
print "^You give the crate a good shove.^";
move self to FROSTHAM_Store;
<>;
}
if (location == GROC_hall2 && second == n_obj) {
print "^You give the crate a good shove.^";
move self to GROC_hall1;
<>;
}
if (location == FROSTHAM_Store && second == s_obj && GROC_hall1.number == 1) {
print "^You give the crate a good shove.^";
move self to GROC_hall1;
<>;
}
! (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;