! *******************************************************************
! ARAGIN.INF
! -- Add-on for SPIRITWRAK (don't use alone!)
! for Aragain city, royal grounds, possibly Barsap's Gambit
!
! 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 ARAGAIN_GUSStop "Aragain North"
with description "You are just north of the newly \
built Aragain City. The general vicinity \
is busy with important-looking people. \
A stairway goes down here, \
while a large walkway heads south into Aragain.",
name "people" "stairway" "walkway",
d_to ARAGAIN_GUSStation,
s_to ARAGAIN_Entrance,
has light;
Object ARAGAIN_Entrance "Aragain Entrance"
with description "Before you is a truly astounding sight. \
A huge metal gate to the south blocks the entrance into the newly \
built Aragain Royal Grounds. Worse yet, a seemingly \
endless line of people stands before the gate. \
They look like dignitaries, diplomats, or \
just plain politicians. A walkway heads north.",
name "walkway" "pastries",
n_to ARAGAIN_GUSStop,
s_to ARAGAIN_Entrance_gate,
cant_go "The only interesting place seems to be past \
that gate.",
has light;
Nearby line1 "line"
with name "line" "people" "dignitaries" "diplomats" "politicians",
description "A god-awful line of well-dressed people. You \
notice that many of them are holding what appear \
to be round pastries of some sort.",
life [;
default: "No one in the line seems to be paying you any attention.";
],
before [;
Cast:
if (the_spell_was == espnis_spell)
"A few people doze off as you canvass the line. They are \
quickly replaced by others.";
],
has animate concealed;
Object gate_sign "large sign" ARAGAIN_Entrance
with initial "There is a large sign bolted to the gate.",
name "sign" "large",
description [;
print "The sign reads:^^\
~WELCOME TO ARAGAIN!^^\
As today (and everyday henceforth) has been decreed \
his royal lordship's birthday, we request that all \
visitors respect good king Sydney Flathead's wishes \
and present a cake appropriate for the occasion before \
entering.";
if (self hasnt general) {
give self general;
"~^^Well, that's odd. If memory and Brother \
TuffBerry's Quendor History lessons serve, the \
Flathead family died off more than a hundred years \
ago.";
}
else "~";
],
has static;
Object ARAGAIN_Entrance_gate "huge entrance gate" ARAGAIN_Entrance
with name "gate" "entrance",
description "A solid steel gate, probably 40 feet tall, \
complete with spikes at the top and close-set bars.",
door_dir [;
if (self in ARAGAIN_Entrance)
return s_to;
else return n_to;
],
door_to [;
if (self in ARAGAIN_Entrance)
return ARAGAIN_Courtyard;
else return ARAGAIN_Entrance;
],
found_in ARAGAIN_Entrance ARAGAIN_Courtyard,
when_open "The massive gate is open.",
when_closed "The massive gate is closed.",
before [;
Open, Push, Pull:
if (Entrance_guardian hasnt general)
"The guard shoves you away as you approach the gate. \
He points at the sign. ~No cake, no castle.~";
Close:
"It must weigh a ton, you can't seem to move it.";
],
has static door openable locked;
Object ARAGAIN_Courtyard "Courtyard"
with description "You're standing in a lovely courtyard with \
magnificent topiary designs and real marble walkways. A large \
gate stands to the north. To the east is a red stone building \
with spires and columns. To the west is a large flat stone \
building. To the south is a huge entranceway into what must \
be the new Royal Palace, which appears to be carved out of the \
face of a massive mountain.",
name "marble" "walkway" "red" "spires" "columns" "flat"
"entranceway" "mountain" "Palace",
n_to ARAGAIN_Entrance_gate,
e_to ARAGAIN_Museum,
w_to ARAGAIN_Gambit,
s_to ARAGAIN_Palace,
has light;
Nearby topiary "topiary"
with name "topiary",
description "Cleverly abused shrubs in the shape of giant \
crowns.",
has scenery;
! -- The (rather empty) Royal Museum
Object ARAGAIN_Museum "Royal Museum"
with description "You're in the entrance to a museum. The \
lighting is rather dim, throwing light shadows all over the \
walls. There are exhibit rooms to the north and south, or \
an exit west.",
name "lighting" "shadows",
w_to ARAGAIN_Courtyard,
n_to Museum_north,
s_to Museum_south,
has light;
Object Museum_north "North Exhibit Room"
with description "You are in a small exhibit room designed with \
dark wood floors and plaster-on-stucco walls. The room is dimly lit by \
hidden lamps or torches behind recessed wall niches. \
The exit is south.",
name "wood" "plaster" "stucco" "lamps" "torches" "niches",
s_to ARAGAIN_Museum,
each_turn [;
if ((glass_wall in self) && (Thief notin Delbins)) {
if (random(10) == 2 or 7)
"^You get the odd feeling that there's someone behind \
you, but when you turn around, you see no one!";
}
],
before [;
Cast:
if (the_spell_was == huncho_spell or luncho_spell)
"From nearby, a museum curator walks up and abruptly \
stops your chant. ~Please don't disturb the other patrons,~ \
he says and walks off. There doesn't seem to be anyone else \
around, however.";
Blow:
if ((noun == whistle) && (glass_wall in self)) {
remove glass_wall;
print "You produce an extremely high-pitched noise. \
Suddenly, to the north, a near-invisible wall of glass shatters \
into a million little shards";
if (Thief notin Delbins) {
move Painting_REAL to THIEF_Storeroom;
Painting_REAL.initial = nothing;
move magic_door to Museum_north;
"!^^From out of the shadows, a man dressed \
in black appears! He performs a half-bow in your direction \
before deftly prying the painting off the wall! ~I'm a great \
appreciator of the arts, you understand,~ he says, as with a quick \
twist of his cape, he melds into the shadows and disappears \
with the painting!^^As you reflect on the thief's actions, \
you can't help but notice that he apparently dropped something \
while making his dramatic exit.";
}
else "!";
! -- guards always come and move player to jail room ?
! -- if thief still in delbins, attempt to get painting is \
! trapped below, player CANT TAKE IT (as a priest)
}
],
has light;
Nearby glass_wall "glass wall"
with name "wall" "glass",
description "Yes, there's a glass wall covering the \
north wall, all right. It's exceptionally smooth and transparent.",
before [;
Attack:
"Your blows have no effect, it must be quite thick.";
],
has static concealed;
Object Painting_REAL "priceless painting" Museum_north
with name "painting",
short_name "priceless painting",
plural "priceless paintings",
initial "There is a priceless painting hanging on the north wall.",
description "It's a beautiful oil painting of a dark stormy \
scene. On the horizon, you can see the edges of mountaintops. Near \
the top of the painting, two winged figures are carrying a lone \
individual towards a break in the clouds, where a bright white light \
seems to emanate.",
size 25,
before [;
Take, Pull, Push, Turn, Attack, Rub, Cut, Touch, Search:
if (self in Museum_north) {
if (glass_wall in Museum_north)
"As you get close to the painting, you find yourself stopped by a \
nearly-invisible glass wall!";
else {
if (action == ##Search)
"You notice a slightly loose part \
of the canvas in one corner, but the painting is apparently \
bonded to the wall, which limits your investigation.";
if (action ~= ##Touch)
"You can't seem to move the painting at all. \
It's somehow bonded to the museum wall!";
}
}
else {
if ((action == ##Take) && (self in THIEF_Storeroom) &&
(Painting_FAKE in THIEF_Storeroom))
"They both look so genuine! You can't decide!";
if (action == ##Search) {
if ((self in THIEF_Storeroom) &&
(Painting_FAKE in THIEF_Storeroom))
"Search which one? Goodness, you can't decide!";
if (self hasnt general) {
give self general;
move white_scroll to player;
"You notice a slightly loose part \
of the canvas in one corner. You carefully peel back a part of the \
canvas from the back and reveal a hidden scroll!";
}
}
}
Drop:
if (location == Museum_north) {
! player returned painting to museum, give him a reward
move c4 to player;
move self to Museum_north;
"A museum curator appears and graciously takes the \
painting. ~Thank you for recovering this priceless work.~ He \
gives you a coin. ~The reward. We've been a little short on funds \
lately.~ The curator somehow attaches the painting to the north wall, \
and leaves.";
}
],
;
Object c4 "coin" class coin_class;
Object Painting_plaque "plaque" Museum_north
with name "plaque",
initial [;
print "A metal plaque is attached to the wall";
if (Painting_REAL in Museum_north)
" next to the painting.";
else ".";
],
description "~ASCENDENCY~ Leonardo Flathead, 777 GUE",
before [;
Take, Pull, Push, Turn, Attack, Rub, Cut, Touch:
if ((self in Museum_north) && (glass_wall in Museum_north))
"As you get close to the painting, you find yourself stopped by a \
nearly-invisible glass wall!";
],
has static;
Object Museum_south "South Exhibit Room"
with description "You are in a square exhibit room with \
wood flooring and plain plaster walls. In the center of the \
room is an exhibit platform made from a large slab of marble. \
The room is lit brightly by hidden torches. The exit is north.",
name "wood" "plaster" "torches",
n_to ARAGAIN_Museum
has light;
Nearby museum_dais "platform"
with name "platform" "slab" "marble",
description "It's a large flat slab of marble, polished \
smooth, in the center of the floor.",
capacity 20,
has scenery supporter;
Object TEMPLE_Artifact "flower vase" museum_dais
with name "artifact" "vase",
initial "There's an ancient wood vase sitting on the marble platform.",
description "An extremely narrow short wood vase, possibly for \
holding long-stemmed flowers. It's clearly of ancient origin, well \
preserved, with strange carvings and designs \
of robed figures all over.",
capacity 1,
before [;
Receive:
if (noun hasnt is_rod)
"Strangely, it doesn't quite fit.";
LetGo:
if (self in TEMPLE_1_Opening)
"You can't reach the vase, much less the contents of the vase.";
],
size 10,
has container open;
! -- Okay maze-lovers, you asked for it -- Barsap's Gambit
Object ARAGAIN_Gambit "Warm Room"
with description "You are in a long stone room, which is strangely \
warm. In the very center of the room is a hole, with a ladder \
down. An outdoor courtyard lies to the east.",
name "hole" "courtyard" "ladder",
e_to ARAGAIN_Courtyard,
d_to GAMBIT_11,
has light;
Nearby Gambit_sign "large sign"
with initial "There is a large sign posted near the doorway.",
name "sign",
description "~Welcome to Barsap's Royal Gambit, a \
delight to entertain all guests to the Aragain Royal Grounds. \
Please consult your tourbook for rules and regulations regarding \
this area. His highness, Sydney Flathead, and those in his \
employ, cannot be held responsible for any accidents or minor
spills at this location.~",
has static;
! (room names -- GAMBIT_XY, where X=level (1,2,3), Y=room #)
! -----------------------------------------------------
! The all-important "CheckGambit" routine. Called by a
! room when a player attempts to move onto a beam.
! Various important things need to be passed...
! RETNS: 0 if cant go, 1 if player fell, 2 if can go
[ CheckGambit
i ! niche associated with dir player moving in
j ! niche directly below (if player falls) [0 if lev 3]
k ! 'level' currently on (1, 2 or 3)
m ! (local var)
;
! ** Step one -- check if there's even a beam there at all
if (children(i) == 0)
return 0;
! ** Step two -- check if the beam is strong enough
m = child(i);
if (m.number == 99) ! (we have the 'wrong half')
m = child(i.counter_niche);
if (m.number <= 0) {
! -- nope, beam breaks, we're about to fall
! -- remove broken beam
remove child(i); remove child(i.counter_niche);
print "As you step onto the wood beam, it breaks with a \
shuddering crack! ";
if (has_resist_gravity == 0) {
deadflag = 1;
print "You plummet quickly through the air, ";
switch (k) {
1: print "pass by two levels of floating cubes and beams, ";
2: print "pass by one level of floating cubes and beams, ";
}
print "and find the bottom of the chamber is filled with \
red-hot lava...";
return 1;
}
else {
! -- player will float, but see if there's anything to float to...
print "Amazingly, you float downwards like a \
feather, instead of falling to your death! ";
if (k==3) { ! (j==0) { on the bottom level
deadflag = 1;
print "Unfortunately, you float slowly down to \
the bottom of the chamber, which is filled with red-hot lava.";
return 1;
}
print "You float down towards another network of floating \
cubes and beams. ";
if (children(j) == 0) { ! no wood beam waiting
deadflag = 1;
print "You pass between two giant floating cubes, \
similar to the ones you just left. Sadly, no wood beam seems \
to connect these particular cubes, and you float downwards ";
if (k==1)
print "past yet another level of floating cubes and beams, ";
print "to a pit of hot lava.";
return 1;
}
print "You float to another wood beam and your feet \
land on it, perfectly balanced! ";
m = child(j);
if (m.number == 99) ! (we have the 'wrong half')
m = child(j.counter_niche);
if (m.number <= 0) {
! -- beam breaks (again!), player dies
! -- remove broken beam
remove child(j); remove child(j.counter_niche);
print "Sadly, this wood beam also breaks! You \
continue to float downwards ";
if (k==1)
print "past yet another level of floating cubes and beams ";
print "into a pit of hot lava.";
deadflag = 1;
return 1;
}
else {
print "^";
! -- beam is ok, decrement strength counter
m.number = m.number - 1;
! -- MOVE PLAYER TO NEW BEAM
! set-up new WN_TO and ES_TO
if (j.niche_dir == 3 or 4) {
WN_TO = parent(j);
ES_TO = parent(j.counter_niche);
}
else {
ES_TO = parent(j);
WN_TO = parent(j.counter_niche);
}
! move to appropriate 'on beam' room
! TODO update beam description....
if (j.niche_dir == 2 or 4) {
if (k==1)
PlayerTo(GAMBIT_W21);
else
PlayerTo(GAMBIT_W31);
}
else {
if (k==1)
PlayerTo(GAMBIT_W22);
else
PlayerTo(GAMBIT_W32);
}
return 1;
}
}
}
else {
! -- beam is ok, decrement strength counter
m.number = m.number - 1;
print "You step gingerly onto the wood beam...^";
if (i.niche_dir == 3 or 4) {
WN_TO = parent(i);
ES_TO = parent(i.counter_niche);
}
else {
ES_TO = parent(i);
WN_TO = parent(i.counter_niche);
}
return 2;
}
];
! -----------------------------------------------------
Class Gambit_Room_Lev1_Class
with description "You are standing on a large floating white \
stone cube in a very large underground chamber. The entire place is \
dimly lit red from somewhere below.",
name "white" "stone" "cube" "chamber",
has light;
Object GAMBIT_11 "On Giant White Cube"
with description "As far as you can tell, you are standing on a \
large white stone cube that somehow floats without visible supports in \
a terrifyingly large underground chamber. The entire place is \
dimly lit red from somewhere below. There is a ladder up to a hole \
high in the ceiling here.",
name "white" "stone" "cube" "chamber" "ladder" "hole",
u_to ARAGAIN_Gambit,
w_to
[ i ;
i = CheckGambit(n112,n212,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
s_to
[ i ;
i = CheckGambit(n113,n213,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
has light;
Object GAMBIT_12 "On Giant White Cube"
class Gambit_Room_Lev1_Class
with e_to
[ i ;
i = CheckGambit(n124,n224,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
w_to
[ i ;
i = CheckGambit(n122,n222,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
s_to
[ i ;
i = CheckGambit(n123,n223,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
;
Object GAMBIT_13 "On Giant White Cube"
class Gambit_Room_Lev1_Class
with e_to
[ i ;
i = CheckGambit(n134,n234,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
s_to
[ i ;
i = CheckGambit(n133,n233,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
;
Object GAMBIT_14 "On Giant White Cube"
class Gambit_Room_Lev1_Class
with w_to
[ i ;
i = CheckGambit(n142,n242,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
n_to
[ i ;
i = CheckGambit(n141,n241,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
s_to
[ i ;
i = CheckGambit(n143,n243,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
;
Object GAMBIT_15 "On Giant White Cube"
class Gambit_Room_Lev1_Class
with e_to
[ i ;
i = CheckGambit(n154,n254,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
w_to
[ i ;
i = CheckGambit(n152,n252,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
n_to
[ i ;
i = CheckGambit(n151,n251,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
s_to
[ i ;
i = CheckGambit(n153,n253,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
;
Object GAMBIT_16 "On Giant White Cube"
class Gambit_Room_Lev1_Class
with e_to
[ i ;
i = CheckGambit(n164,n264,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
n_to
[ i ;
i = CheckGambit(n161,n261,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
s_to
[ i ;
i = CheckGambit(n163,n263,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
;
Object GAMBIT_17 "On Giant White Cube"
class Gambit_Room_Lev1_Class
with w_to
[ i ;
i = CheckGambit(n172,n272,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
n_to
[ i ;
i = CheckGambit(n171,n271,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
;
Object GAMBIT_18 "On Giant White Cube"
class Gambit_Room_Lev1_Class
with w_to
[ i ;
i = CheckGambit(n182,n282,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
n_to
[ i ;
i = CheckGambit(n181,n281,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
e_to
[ i ;
i = CheckGambit(n184,n284,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
;
Object GAMBIT_19 "On Giant White Cube"
class Gambit_Room_Lev1_Class
with e_to
[ i ;
i = CheckGambit(n194,n294,1);
if (i ~= 2) return i;
else return GAMBIT_W1;
],
n_to
[ i ;
i = CheckGambit(n191,n291,1);
if (i ~= 2) return i;
else return GAMBIT_W2;
],
;
! (level 1 niches)
Object n112 "western niche" GAMBIT_11
class niche_class
with name "western",
counter_niche n124,
niche_dir 2, ! 2 = on western edge of floor
;
Object n113 "southern niche" GAMBIT_11
class niche_class
with name "southern",
counter_niche n141,
niche_dir 3;
Object n124 "eastern niche" GAMBIT_12
class niche_class
with name "eastern",
counter_niche n112,
niche_dir 4;
Object n123 "southern niche" GAMBIT_12
class niche_class
with name "southern",
counter_niche n151,
niche_dir 3;
Object n122 "western niche" GAMBIT_12
class niche_class
with name "western",
counter_niche n134,
niche_dir 2;
Object n134 "eastern niche" GAMBIT_13
class niche_class
with name "eastern",
counter_niche n122,
niche_dir 4;
Object n133 "southern niche" GAMBIT_13
class niche_class
with name "southern",
counter_niche n161,
niche_dir 3;
Object n141 "northern niche" GAMBIT_14
class niche_class
with name "northern",
counter_niche n113,
niche_dir 1;
Object n142 "western niche" GAMBIT_14
class niche_class
with name "western",
counter_niche n154,
niche_dir 2;
Object n143 "southern niche" GAMBIT_14
class niche_class
with name "southern",
counter_niche n171,
niche_dir 3;
Object n151 "northern niche" GAMBIT_15
class niche_class
with name "northern",
counter_niche n123,
niche_dir 1;
Object n154 "eastern niche" GAMBIT_15
class niche_class
with name "eastern",
counter_niche n142,
niche_dir 4;
Object n152 "western niche" GAMBIT_15
class niche_class
with name "western",
counter_niche n164,
niche_dir 2;
Object n153 "southern niche" GAMBIT_15
class niche_class
with name "southern",
counter_niche n181,
niche_dir 3;
Object n164 "eastern niche" GAMBIT_16
class niche_class
with name "eastern",
counter_niche n152,
niche_dir 4;
Object n161 "northern niche" GAMBIT_16
class niche_class
with name "northern",
counter_niche n133,
niche_dir 1;
Object n163 "southern niche" GAMBIT_16
class niche_class
with name "southern",
counter_niche n191,
niche_dir 3;
Object n171 "northern niche" GAMBIT_17
class niche_class
with name "northern",
counter_niche n143,
niche_dir 1;
Object n172 "western niche" GAMBIT_17
class niche_class
with name "western",
counter_niche n184,
niche_dir 2;
Object n181 "northern niche" GAMBIT_18
class niche_class
with name "northern",
counter_niche n153,
niche_dir 1;
Object n182 "western niche" GAMBIT_18
class niche_class
with name "western",
counter_niche n194,
niche_dir 2;
Object n184 "eastern niche" GAMBIT_18
class niche_class
with name "eastern",
counter_niche n172,
niche_dir 4;
Object n191 "northern niche" GAMBIT_19
class niche_class
with name "northern",
counter_niche n163,
niche_dir 1;
Object n194 "eastern niche" GAMBIT_19
class niche_class
with name "eastern",
counter_niche n182,
niche_dir 4;
! (level 1 initial wood beam layout)
! wood beam, as two 'halves'
! (the 'trick' here, is to devise a method of testing for the
! correct '.number', without having to constantly update
! both halves (which, when separated in niches, is impossible)
! Thus, one half will always have number=99, which indicates
! 'wrong half to test'. The other half, which is gained by
! checking child(self.counter_niche), has the useful .number
! Object e11 "ebony beam" n112 class ebony_beam_class;
! Object e111 "ebony beam" n124 class ebony_beam_class with number 99;
Object e12 "ebony beam" n113 class ebony_beam_class;
Object e121 "ebony beam" n141 class ebony_beam_class with number 99;
Object e13 "ebony beam" n153 class ebony_beam_class;
Object e131 "ebony beam" n181 class ebony_beam_class with number 99;
Object p11 "pine beam" n123 class pine_beam_class;
Object p111 "pine beam" n151 class pine_beam_class with number 99;
Object p12 "pine beam" n122 class pine_beam_class;
Object p121 "pine beam" n134 class pine_beam_class with number 99;
Object p13 "pine beam" n133 class pine_beam_class;
Object p131 "pine beam" n161 class pine_beam_class with number 99;
Object p14 "pine beam" n194 class pine_beam_class;
Object p141 "pine beam" n182 class pine_beam_class with number 99;
Object p15 "pine beam" n112 class pine_beam_class;
Object p151 "pine beam" n124 class pine_beam_class with number 99;
! (side note: with balsa beams, 2nd side need not be 99, since
! it will always break on the first try, and the default number is 0
Object b11 "balsa beam" n152 class balsa_beam_class;
Object b111 "balsa beam" n164 class balsa_beam_class;
Object b12 "balsa beam" n143 class balsa_beam_class;
Object b121 "balsa beam" n171 class balsa_beam_class;
Object b13 "balsa beam" n163 class balsa_beam_class;
Object b131 "balsa beam" n191 class balsa_beam_class;
Object b14 "balsa beam" n142 class balsa_beam_class;
Object b141 "balsa beam" n154 class balsa_beam_class;
Object b15 "balsa beam" n172 class balsa_beam_class;
Object b151 "balsa beam" n184 class balsa_beam_class;
! (remaining 2 levels in sep. files)
Include "gambit2.inf";
Include "gambit3.inf";
! tricky 'on beam' rooms -- only two for each level
! change description of fake_beam as appropriate
Object GAMBIT_W1 "On wood beam"
with description "You're walking along a very narrow wood beam that runs \
east to west into darkness. Below, you can see the dark \
silhouette of a network of beams and floating cubes. Much \
farther below you can see a dull red glow.",
name "darkness" "network" "silhouette" "cubes" "glow",
w_to [; give self ~visited; return WN_TO; ],
e_to [; give self ~visited; return ES_TO; ],
before [;
Jump:
"There's barely enough room to walk, much less jump.";
Drop:
print "Dropping "; DefArt(noun);
print " will result in your losing both ";
DefArt(noun);
" and probably your balance.";
],
has light;
Object GAMBIT_W2 "On wood beam"
with description "You're walking along a very narrow wood beam that runs \
north to south into darkness. Below, you can see the dark \
silhouette of a network of beams and floating cubes. Much \
farther below you can see a dull red glow.",
name "darkness" "network" "silhouette" "cubes" "glow",
n_to [; give self ~visited; return WN_TO; ],
s_to [; give self ~visited; return ES_TO; ],
before [;
Jump:
"There's barely enough room to walk, much less jump.";
Drop:
print "Dropping "; DefArt(noun);
print " will result in your losing both ";
DefArt(noun);
" and probably your balance.";
],
has light;
Object GAMBIT_W21 "On wood beam"
with description "You're walking along a very narrow wood beam that runs \
east to west into darkness. Both above and below, you can see the dark \
silhouette of a network of beams and floating cubes. \
Farther below you can see a dull red glow.",
name "darkness" "network" "silhouette" "cubes" "glow",
w_to [; give self ~visited; return WN_TO; ],
e_to [; give self ~visited; return ES_TO; ],
before [;
Jump:
"There's barely enough room to walk, much less jump.";
Drop:
print "Dropping "; DefArt(noun);
print " will result in your losing both ";
DefArt(noun);
" and probably your balance.";
],
has light;
Object GAMBIT_W22 "On wood beam"
with description "You're walking along a very narrow wood beam that runs \
north to south into darkness. Both above and below, you can see the dark \
silhouette of a network of beams and floating cubes. \
Farther below you can see a dull red glow.",
name "darkness" "network" "silhouette" "cubes" "glow",
n_to [; give self ~visited; return WN_TO; ],
s_to [; give self ~visited; return ES_TO; ],
before [;
Jump:
"There's barely enough room to walk, much less jump.";
Drop:
print "Dropping "; DefArt(noun);
print " will result in your losing both ";
DefArt(noun);
" and probably your balance.";
],
has light;
Object GAMBIT_W31 "On wood beam"
with description [;
print "You're walking along a very narrow wood beam that runs \
east to west into darkness. Above you can see a network of floating beams \
and cubes. Below you can see a red glow";
if ((self hasnt general) && (GAMBIT_W32 hasnt general) &&
(amulet has worn) && (ES_TO == GAMBIT_37)) {
give self general;
".^^Your amulet suddenly gives off a bright flash, then fades!";
}
else ".";
],
name "darkness" "network" "cubes" "glow",
w_to [; give self ~visited; return WN_TO; ],
e_to [; give self ~visited; return ES_TO; ],
before [;
Jump:
"There's barely enough room to walk, much less jump.";
Drop:
print "Dropping "; DefArt(noun);
print " will result in your losing both ";
DefArt(noun);
" and probably your balance.";
],
has light;
Object GAMBIT_W32 "On wood beam"
with description [;
print "You're walking along a very narrow wood beam that runs \
north to south into darkness. Above you can see a network of floating beams \
and cubes. Below you can see a red glow.";
if ((self hasnt general) && (GAMBIT_W31 hasnt general) &&
(amulet has worn) && (ES_TO == GAMBIT_37)) {
give self general;
".^^Your amulet suddenly gives off a bright flash, then fades!";
}
else ".";
],
name "darkness" "network" "cubes" "glow",
n_to [; give self ~visited; return WN_TO; ],
s_to [; give self ~visited; return ES_TO; ],
before [;
Jump:
"There's barely enough room to walk, much less jump.";
Drop:
print "Dropping "; DefArt(noun);
print " will result in your losing both ";
DefArt(noun);
" and probably your balance.";
],
has light;
Object fake_beam "wood beam"
with name "wood" "beam",
description "A long thin wood beam, barely wide enough for \
both of your feet.", ! change as appropriate
before [;
Turn, Search, Rub, LookUnder, Attack, Take, Push, Pull:
"You'll have to show me how you intend to do \
this, since you're standing on the wood beam.";
],
found_in GAMBIT_W1 GAMBIT_W2 GAMBIT_W21 GAMBIT_W22
GAMBIT_W31 GAMBIT_W32,
has scenery;
! -- The Royal Palace, and its strange secret
Object ARAGAIN_Palace "Palace Entrance Hall"
with description "A vast hall runs north and south \
in this massive palace. Royal trappings decorate the walls \
and ceiling, and red carpet lines the floor. \
A tremendous open archway exits to the north into some \
courtyard, while two open solid brass doors mark the \
entrance south into some audience chamber. Two smaller \
exits head east and west towards stairways up and down \
respectively.",
name "trappings" "carpet" "archway" "courtyard"
"brass" "doors",
n_to ARAGAIN_Courtyard,
s_to Palace_Audience,
e_to Palace_office,
w_to Palace_Westwing,
u_to Palace_office,
d_to Palace_Westwing,
has light;
Object Palace_Audience "Audience Hall"
with description "This is a giant audience hall, equivalent to \
a large auditorium with a throne on the stage. The hall is \
filled with luxurious decorations -- red carpeting, expensive \
chandeliers, sweeping gold-edged drapery. The hall is also \
currently filled with a large number of dignitaries and \
important-looking people taking up all the seats. Open brass \
doors lie to the north.",
name "carpeting" "chandeliers" "drapery" "seats" "brass" "doors",
n_to ARAGAIN_Palace,
has light;
Nearby audience_people "people"
with name "people" "dignitaries" "diplomats",
description "Just your average throng of official-looking \
people. Interestingly, many of them seem to be smeared \
with flour.",
life [;
default: "The audience seems to be too busy waiting \
for something interesting to happen.";
],
before [;
Cast:
if (the_spell_was == foblub_spell)
"You give a marvelous sermon on patience. The audience \
seems glued to their seats, which changes little.";
if (the_spell_was == espnis_spell)
"You give a rather overdone sermon on patience. A few \
people in the back rows drop off to sleep.";
],
has animate concealed;
Object throne "throne"
with name "throne",
description "A large throne.",
before [;
Enter: "This is no time to be playing king.";
],
has scenery enterable;
Object Palace_office "Royal Bedroom"
with description "This might have once been a lavish bedroom \
for royalty. At the moment, it seems like someone has converted \
it into a private lounge of some sort. A stairway heads down.",
name "stairway",
d_to ARAGAIN_Palace,
has light;
Object cab_key "shiny key" Gov_desk2
with name "key" "shiny",
!weight 5,
size 5,
description "A shiny key.",
;
Object Palace_cabinet "cabinet" Palace_office
with name "cabinet",
with_key cab_key,
description [;
print "A rather new-looking wooden cabinet";
if (self has general)
", with a bit of waxy build-up all over it.";
else ".";
],
when_closed "A wooden cabinet stands against one wall, \
clearly a new addition to the room.",
when_open [ x;
print "The wooden cabinet has been opened. ";
x = children(self);
if (x == 0) "It seems to be empty.";
print "It contains:^";
! if (x == 1) print "is "; else print "are:^";
x = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT;
WriteListFrom (child(self), x, 1);
rtrue;
],
before [;
Cast:
if (the_spell_was == egdelp_spell) {
give self general;
"The cabinet is covered in waxy build-up.";
}
Open:
if ((self hasnt locked) && (self hasnt open)) {
print "You give the cabinet a good tug";
if (self hasnt general)
", but the \
cabinet doors barely budge. The new-looking wood seems \
to be rather tightly fitted.";
else {
give self open;
". The wax makes the doors open with ease.";
}
}
],
size 25,
capacity 20,
has static container openable lockable locked;
! (warped -- true story of the great battle)
Object p6 "warped parchment" Palace_cabinet
class parchment_class,
with name "warped",
description "~...truth. In fact, the truth too terrible to \
believe, but believe it I must, for all the evidence I \
have found indicates that the Ancient Ones went up against \
the evil elementals and lost! With the Rod in hand, they \
were defeated by trickery! The Rod was broken and \
scattered into the world, but can be regained and rejoined \
by any whose heart and spirit are pure! Did the \
Ancient Ones forsake the spheres of...~";
Object Palace_Westwing "Palace Dungeons"
with description "Dark and spooky, the palace dungeons seem \
empty at the moment. The north portion of the room is sectioned-off \
by iron bars that form a makeshift cell.",
n_to [; <>; ],
u_to ARAGAIN_Palace,
has light;
Nearby prison_cell "prison cell"
with name "cell" "bars" "iron",
when_open [ x;
print "The cell stands open.";
x = children(self);
if (x == 0) { new_line; rtrue; }
print " Inside you notice:^";
x = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT;
WriteListFrom (child(self), x, 1);
rtrue;
],
when_closed [ x;
print "The cell is closed.";
x = children(self);
if (x == 0) { new_line; rtrue; }
print " Inside you notice:^";
x = FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + RECURSE_BIT;
WriteListFrom (child(self), x, 1);
rtrue;
],
description "A cramped space with a wall of iron bars.",
before [;
Cast:
if (the_spell_was == bekdab_spell) {
print "The bars seem to rust a bit";
if (self has locked) {
give self ~locked;
". You hear a lock mechanism in the cell door break!";
}
else ".";
}
Go:
if ((noun == s_obj) && (player in prison_cell)) {
; return 2; }
],
size 50,
has static container openable transparent enterable;
! *****************
! Creatures/people
! *****************
Object Entrance_guardian "Tough-looking Palace guard" ARAGAIN_Entrance
with name "guardian" "guard",
initial "A tough-looking palace guard is standing by the gate.",
description "Typical guard -- big, armed to the teeth, and a \
sour disposition.",
before [;
Cast:
"The guard stops you in mid-chant by blowing a rather \
shrill whistle. ~None of that priest mumbo-jumbo on \
my watch!.~";
],
react_before [;
Blow:
if (noun==whistle)
"The guard stops you as you are about to blow the whistle. \
~I blow the whistles around here.~";
],
life
[ i ;
Attack, ThrowAt:
"I'd advise against this. He's probably knows 101 \
ways to dismember an opponent. \
Also, he's armed and encased in plate mail.";
Ask:
if ((noun == 'cake' or 'gate') && (self hasnt general))
"~It's pretty simple. Give me a cake, and you get in. \
That's the rules.~";
Show:
if ((noun == Baking_Pan) && (cake in Baking_Pan))
"~Well, hand it over already.~";
Give:
! Now for the fun...
if ((noun == Baking_Pan) && (cake notin Baking_Pan))
"The guard looks at the pan, and hands it back. \
~I don't see any cake. What are you, a wise guy or something?~";
if ((noun == Baking_Pan) && (cake in Baking_Pan)) {
move Baking_Pan to Entrance_guardian;
print "The guard grabs the pan, and, to your \
annoyance, cuts himself a massive slice of cake with his broadsword. \
The guard takes a bite";
! 1st, check for strange foreign objects
objectloop (i in dough) {
if ((i ~= flour) &&
(i ~= sugar_cube) &&
(i ~= baking_powder) &&
(i ~= corbie_egg) &&
(i ~= dornberries) &&
(i ~= butter)) {
if (i hasnt edible) {
print " and you hear a strange \
'crunch'. He removes ", (a) i; " from his teeth. ~What's this?~ the \
guard says, clearly angry. ~I oughta report you to the 'Better \
Bakers Bureau'.~"; ! hopefully, this will break out of objectloop
}
else {
print ", and chews for a bit. \
His eyes widen, and he spits the cake out. ~Hey pal, I taste ", (name) i;
" in this so-called cake of yours! Grues could've done a better job \
than this!~";
}
}
}
! 2nd, check overall quality of cake
if (cake.number ~= 0) {
print ", and chews for a bit. \
He frowns. ~Sorry pal, this doesn't pass inspection. ";
if (cake.number == 1)
"It could stand some more cooking.~";
if (cake.number == 2)
"Did ya burn it or something?~";
if (cake.number == 3)
"It'd make an okay pancake, though.~";
if (cake.number == 4)
"It's hard as a rock!~";
}
! finally, check that all proper ingredients are there.
if ((butter in dough) &&
(sugar_cube in dough) &&
(corbie_egg in dough) &&
(baking_powder in dough) &&
(dornberries in dough) &&
(flour in dough)) {
! good cake
give self general;
give ARAGAIN_Entrance_gate open ~locked;
Achieved(4);
", and smacks \
his lips. ~Finally, someone who can bake an acceptable cake.~ \
He unlocks and opens the gate. ~You can pass.~";
}
else
", and chews for a bit. He seems displeased. \
~I don't know where you learned to bake, but there's definitely \
something missing here.~";
}
default:
"The guard is amazingly good at ignoring distractions.";
],
each_turn [ i;
i = random(25);
if (i == 1)
"^A couple of dignitaries from Gurth push their way to the \
front and present a flat object to the guard. The guard frowns. \
~A fish cake? I don't think so.~ The dignitaries return to the line.";
if (i==3)
"^The guard paces back and forth.";
if (i==5)
"^A representative from Borphee steps up and presents \
a pile of baked dough-bits on a plate to the guard. ~Frobolli cake, eh? \
Well, this may be popular where you come from, but it ain't popular \
here.~ The representative walks off.";
if (i==7)
"^The guard practices his menacing stares.";
if (i==8)
"^The guard blows his whistle at some people in line.";
if (i==9)
"^An official presents a nice morgia root pie to the \
guard. ~A pie?~ the guard says, clearly exasperated. He points at \
the sign as the official leaves. ~Cakes folks, we're taking C-A-K-E-S.~";
if (i==11)
"^The guard polishes a spot on his armor.";
if (i==13)
"^Some dignitary presents the guard with a strange \
green cake with the words ~EAT ME~ written in frosting. The guard smiles, \
cuts himself a piece, and suddenly stuffs it into the dignitary's mouth! \
~You boys are going to have to do better than that,~ he says to the
now tiny dignitary, who stalks off.";
if (i==15)
"^The guard hums a military dirge to himself.";
],
has animate;
! -- The evil magistrate
Object Magistrate "magistrate" Palace_Audience
with name "magistrate",
initial "There is a royal magistrate here.",
description "A rather nasty-looking thin tall fellow with an \
evil grin.",
number 1,
life [;
Attack, ThrowAt:
magroutine1(1); rtrue;
Show:
if (noun==Gov_ledger && Sydney notin Palace_Audience) {
move Sydney to Palace_Audience;
remove Gov_ledger;
"The Magistrate grabs the ledger and \
frowns as he reads it. ~Fine, you want a presentation?~ He grabs a \
young boy who was hiding behind \
the throne and shoves him forward. ~Presenting his royal \
Highness, King Sydney Flathead, lost heir to the Flathead monarchy!~ \
The crowd reaction is somewhat mixed. ~Well, his head does look \
flat,~ you hear one person say.";
}
if (noun==cab_key) {
move cab_key to self;
"The magistrate moves with surprising speed and \
takes the key. ~I was looking for that!~ he says.";
}
else "~Oh, very interesting.~ he says with heavy \
sarcasm.";
Give:
if (noun==Gov_ledger && Sydney notin Palace_Audience) {
<>;
}
if (noun==cab_key) {
move cab_key to self;
"The magistrate takes the key. \
~I was looking for that!~ he says.";
}
else "~I have no need for that!~ he says with a sneer.";
default: "The magistrate pays you absolutely no attention.";
],
react_before [;
Cast:
if (the_spell_was ~= ledak_spell) {
magroutine1(2); rtrue;
}
],
each_turn [ i ;
i = random(20);
if (Sydney in Palace_Audience) {
if (i==1)
"^A diplomat approaches the little boy with a \
document. The Magistrate steps forward and \
stops him. ~Sydney is much too busy to bother \
with that.~ the Magistrate says.";
}
else {
if (i==5)
"^An impatient diplomat shouts out, \
~Bring out the King!~ The Magistrate smiles \
and says, ~Did anyone make a petition for \
a royal presentation?~ The crowd is silent. \
~I didn't think so.~";
}
],
has animate;
! (a short code-space saving routine)
[ magroutine1
w
;
! remove player's possessions
while (child(player) ~= 0) {
give child(player) ~worn;
move child(player) to Palace_office;
}
if (w == 1)
print "You move quickly, but from nowhere, two royal palace \
guards appear and wrestle you to the ground. ~Lock this \
fanatic up!~ ";
if (w == 2)
print "You start to chant, but the magistrate has sharp \
ears, and recognizes your magic! With a quick signal, \
two royal palace guards appear and wrestle you to the ground. \
~Lock this babbler up!~ ";
print "the Magistrate says with a sneer. The guards \
strip you of your possessions and drag you down to the royal \
dungeons.^";
PlayerTo(prison_cell);
give prison_cell ~open locked;
rtrue;
];
Object Sydney "young child"
with name "child" "boy" "sydney",
! describe "There is a young boy here",
description [;
print "A little boy dressed in uncomfortable-looking frilly clothes";
if (flat_hat in self)
". He's wearing a small red hat.";
else ".";
],
before [;
Cast:
if (the_spell_was == foblub_spell or espnis_spell)
"The boy seems to miss the subtle nuances of your sermon. All \
that happens is that now he seems even more nervous than before.";
],
life
[;
Ask, Tell:
if (self has general)
"Young Sydney Flathead only tucks his head lower and whimpers.";
else
"Young Sydney Flathead only shrugs.";
Answer:
if (special_word=='hello' or 'hi') {
if (self hasnt general)
"Young Sydney Flathead doesn't respond -- he seems \
to find you a bit frightening.";
else
"~Hello,~ the young lad says, somewhat shyly.";
}
"Young Sydney Flathead only stares at you.";
Attack, ThrowAt:
give self ~general;
deadflag = 1;
"The young boy screams in terror as you move to threaten him \
(shame on you!). Several guards appear out of nowhere, and club \
you to death for attempting regicide.";
Give:
if (noun==stuffed_toy) {
give self general;
move stuffed_toy to self;
"Tentatively, the boy takes the stuffed toy. You \
catch the glimpse of a sad smile as he holds it tightly.";
}
"Young Sydney cowers and shakes his head.";
Order:
if (action==##Give) {
if (noun==flat_hat) {
if (self has general) {
remove Magistrate;
remove self;
move flat_hat to player;
move brown_sphere to player;
"Little Sydney smiles and removes the hat and \
hands it to you. You notice his head is actually round, and the hat \
was cleverly hiding this.^^\
~He's no Flathead!~ someone in the audience hall yells out. A distinct \
murmur of discontent rises from the crowd. The Magistrate slowly \
backs away. ~Wait! I can explain!~ the Magistrate \
starts, but soon runs screaming out of the hall, with several angry diplomats \
hot on his heels!^^\
~Thank you, kind sir,~ someone behind you says. You turn around. \
Little Sydney is happily in the arms of a kindly-looking couple. The woman \
continues. ~Our son was kidnaped, a little while ago. We've \
been waiting here, hoping to get him back. You did a very brave thing.~ \
The man steps forward holding some small object. \
~A priest fellow, such as yourself, told me a long time \
ago that one day, someone would help us in our time of need, and that \
I should give him this.~ He gives you a strange round object. \
~It's the least we can do.~ he says. The couple leaves the hall, \
with the little boy laughing in their arms.";
}
else "Little Sydney shrinks back and holds on to his \
hat. He stares at you fearfully.";
}
"Little Sydney shrinks back and stares at you fearfully.";
}
"Sydney shakes his head fretfully.";
],
has animate transparent;
! *****************
! scrolls/spells
! *****************
Object crumpled_scroll "crumpled scroll" Palace_cabinet
class scroll_class,
with name "crumpled",
;
Object ledak_spell "detect forgery" crumpled_scroll
class spell_class,
with name "ledak",
magic [;
if ((location==Palace_Audience) &&
(Sydney in Palace_Audience) &&
((second == 0) || (second == Sydney))) {
"You notice a soft yellow glow around the young boy. \
The glow fades.";
}
if (second==0)
"The place appears to be free of forgeries, at the \
moment.";
else {
if (second==player) "You appear to be the geniune thing.";
CDefArt(second);
" appears to be the genuine thing.";
}
],
;
! ****************
! Misc objects
! ****************
Object flat_hat "red hat" Sydney
with name "hat" "red",
description "A little red hat with no brim. It's unusually \
flat at the top.",
before [;
Wear:
"It's too small for your head.";
],
size 10,
has clothing;
Object brown_sphere "brown sphere"
class sphere_class,
with name "brown",
description "A tiny perfect brown sphere, made of some strange \
unknown metal.",
;
! THIEF'S magic door
! Contains an unusual amount of properties...
Object magic_door "strange door"
with name "door" "strange",
!weight 20,
size 30,
description [;
print "A small door labeled ~STAIRS~, of all \
things";
if (self hasnt static)
". Oddest of all is the fact that it isn't \
attached to anything!";
else ".";
],
door_dir [;
if (self has static) {
if (location == Skyscraper) return e_to;
else return w_to;
}
],
door_to [;
if (self has static) {
if (location == Skyscraper) return THIEF_Bottom_of_staircase;
else return Skyscraper;
}
],
found_in [;
if (self has static) {
if (location == Skyscraper or THIEF_Bottom_of_staircase)
rtrue;
else rfalse;
}
! else rtrue????
],
describe [;
! we force a describe routine here, rather than use
! when_open/closed due to the results that happen
! after an obj has been moved (which the door will be).
if (self hasnt static)
"^There's an unattached door lying on the ground here.";
else {
if (self has open) {
print "^There's an open door to the";
if (location == Skyscraper)
" east.";
else
" west.";
}
else {
print "^There's a closed door";
if (location == Skyscraper)
" in the eastern wall.";
else
" to the west.";
}
}
],
time_left 0,
time_out [;
! after timeout -- Thief locks the door
give self ~open locked;
if ((location == THIEF_Bottom_of_staircase) ||
(location == THIEF_Ent) ||
(location == THIEF_Foyer) ||
(location == THIEF_Lounge) ||
(location == THIEF_Storeroom)) {
print "^Suddenly, out of the shadows springs a \
gentleman dressed in black! ~How did you get in here!~ he \
cries. Quicker than lightning, he envelopes you in his dark \
cape, which seems to fade into shadows, leaving you in...^";
PlayerTo(Skyscraper);
rtrue;
}
if (location == Skyscraper)
"^Out of the shadows, a gentleman dressed in \
black appears! He sees the door to the east and seems \
somewhat annoyed. ~Much too busy for unexpected guests,~ \
you hear him say as he slips through the door and closes \
it behind him. Moments later you hear the sound of a lock \
closing on the other side.^";
],
before [;
Enter:
if (self has static) {
if (location == Skyscraper) <>;
else <>;
}
else
"Since the door doesn't currently lead anywhere, \
entering it seems pointless.";
Open:
if (self hasnt static)
"The door opens onto...thin air. Without a \
doorway to attach to, it's not terribly useful, it appears.";
if ((self has static) && (self hasnt open) &&
(self hasnt general)) {
give self general;
give self open;
StartTimer(magic_door,15);
"The door opens. There's a dark chamber \
on the other side, which seems all but impossible, given \
that the wall previously appeared solid!";
}
Close:
if (self hasnt static)
"You close the door, which at this moment \
means you turn the movable door to a new angle. Without a \
doorway to attach to, it's not terribly useful, it seems.";
Drop:
if (location == Skyscraper) {
move self to Skyscraper;
give self static;
Skyscraper.e_to = magic_door;
THIEF_Bottom_of_staircase.w_to = magic_door;
"As you drop the door, it leaps off the ground \
and flies towards the eastern wall! Amazingly, it seems to \
attach itself to the eastern wall!";
}
],
has door openable;