\"Abandon all hope, ye who enter here.\"",
wall: hellwalldesc,
},
{},
{ north: 'hades_central',
south: 'hades_entrance',
west: 'tantalus_cell',
},
{ in: 'west'
},
null, null);
hades_south.isHades = true;
pl('hades_central',
'Hades',
true,
"You are in a long, wide underground hallway with a rocky floor and iridescent orange walls. The corridor continues north and south. " +
"An obsidian door numbered \"5,984,202\" leads east.",
"",
{
wall: hellwalldesc,
},
{},
{ north: 'hades_north',
east: 'sisyphus_cell',
south: 'hades_south',
},
{ in: 'west'
},
null, null);
hades_central.isHades = true;
pl('hades_north',
'Hades',
true,
"You are in a long, wide underground hallway with a rocky floor and iridescent orange walls. The corridor continues south but " +
"gets a lot narrower and more unpleasant-looking to the north. An obsidian door numbered \"5,984,203\" leads west.",
"",
{
wall: hellwalldesc,
},
{
north: "You think better of going any further into Hades. You're already starting to feel a bit incorporeal.",
},
{
west: 'empty_cell',
south: 'hades_central',
},
{ in: 'west'
},
null, null);
hades_central.isHades = true;
pl('empty_cell',
"Empty cell",
true,
"This is a squalid round cell about twelve cubits across. There is a blue plaque fixed to the wall.",
"",
{
sign: "This plaque is slightly transparent, and shimmering in and out of sight as though " +
"it's not quite sure whether it's really there or not. In its visible moments, it reads:" +
"XYLOPHONE\nRegicide\nUsurpation\nTyranny
",
},
{},
{ out: 'hades_north' },
{ east: 'out' },
null, null);
// pl(name,fullname,indoors,description,append,sights,special,exits,hExits,daemonBefore,daemonAfter)
pl('tantalus_cell',
"Tantalus' cell",
true,
"This is a small, stinking cell, ten cubits square. There is a blue plaque fixed to the wall. Set into the floor is a pool filled with wine.",
"",
{
pool: "A circular pool filled with sweet-smelling wine. It looks rather deep.",
wine: "[[ tantalus_cell.sights.pool ]]",
sign: "The plaque reads:TANTALUS\nInfanticide\nCannibalism\nDognapping
",
},
{
'in.pool': get_in_wine_pool,
'jump.in.pool': get_in_wine_pool,
'jump.in.wine': get_in_wine_pool,
'take.in.pool' : get_in_wine_pool,
'stand.in.pool' : get_in_wine_pool,
'in.wine': get_in_wine_pool,
'take.in.wine' : get_in_wine_pool,
'stand.in.wine' : get_in_wine_pool,
'drink.pool.aulos' : drink_wine_with_aulos,
'drink.wine.aulos' : drink_wine_with_aulos,
'use.aulos.drink.wine' : drink_wine_with_aulos,
'use.aulos.drink.pool' : drink_wine_with_aulos,
'drink.pool' : drink_wine_pool,
'drink.wine' : drink_wine_pool,
'take.wine' : drink_wine_pool
},
{ out: 'hades_south' },
{ east: 'out' },
null, function() {
if(heroloc() == tantalus_cell && !gs(RESCUED_TANTALUS)) {
if(!gs(TANTALUS_PHASE)) {
// do this every two turns, to stop the player being driven mad
say('\nTantalus glances downwards and spots the wine. ' +
'"' + pickOne(["Aha", "Oo", "Wow"]) + ', wine," he says. "' + pickOne(["My favourite!", "Delicious!", "Yum!"]) + '"\n' +
'He bends his head to take a drink, but the wine drains away, always staying just below his chin.\n' +
'"' + pickOne(["Awww", "No fair", "Bummer", "What a swiz"]) + '," he says sulkily.\n' +
'He stands up straight again, and the pool instantly refills up to his neck.');
sgs(TANTALUS_PHASE, 1);
} else {
sgs(TANTALUS_PHASE, 0);
}
}
}
);
function get_in_wine_pool() {
say("You hop off the edge into the pool.\n" +
"That wasn't a smart move. You inhale wine, splutter, and only escape drowning because the torments of Hades " +
"are specifically designed not to kill the damned souls. You manage to haul yourself out and shake off the worst of your soaking.");
return true;
}
function drink_wine_pool() {
say('As you stoop to drink from the pool, it drains away.');
if(!gs(RESCUED_TANTALUS)) {
say('\n"It always does that," says Tantalus.');
}
say('\nYou stand up again, and the pool refills[[ gs(RESCUED_TANTALUS) ? "" : " as far as Tantalus\' neck" ]].');
return true;
}
function drink_wine_with_aulos() {
if(!in_inv(aulos)) {
say("You're not carrying that.");
return true;
}
say("You stoop down, put the end of the aulos in the pool, and suck some of the wine through it. You succeeded in drinking " +
"some of the wine! But you can only drink a few inches before the wine is below the reach of the pipe.");
return true;
}
// pl(name,fullname,indoors,description,append,sights,special,exits,hExits,daemonBefore,daemonAfter)
pl('sisyphus_cell',
"Sisyphus' cell",
true,
"This is a large cell, about forty cubits square. There is a blue plaque fixed to the wall. " +
"At the far end of the cell is a short slope, with a boulder [[ gs(RESCUED_SISYPHUS) ? 'at the top of' : 'on' ]] it.",
"",
{
boulder: "A large, rougly spherical dark grey rock.",
slope: "An inclined platform, sloping up from one side of the cell to the other. " +
"A groove has been worn up the centre of it by the boulder.",
hill: "[[ sisyphus_cell.sights.slope ]]",
sign: "The plaque reads:SISYPHUS\nAvarice\nDeceitfulness\nLeaking divine secrets
",
},
{
'take.boulder' : "It's far too heavy.",
'push.boulder' : push_boulder,
'cheese.boulder' : wedge_boulder, // "cheese" and "wedge" are the same word...
'drop.cheese.boulder' : wedge_boulder,
'drop.cheese.slope' : wedge_boulder,
},
{
out: 'hades_central',
},
{
west: 'out',
},
null, function() {
if(gs(RESCUED_SISYPHUS) && gs(RESCUED_TANTALUS)) {
sgs(FINISHED_HADES, 1);
}
});
function push_boulder() {
if(gs(RESCUED_SISYPHUS)) {
say("The boulder is securely wedged at the top of the slope. Best leave it.");
return true;
}
say("You try to help Sisyphus push the boulder, but even with the efforts of both of you, it's no use.");
return true;
}
function wedge_boulder() {
if(gs(RESCUED_SISYPHUS)) {
say("The boulder is already wedged in place.");
return true;
}
if(!in_inv(cheese)) {
say("You aren't carrying anything suitable to wedge the boulder with.");
return true;
}
say("You wait until Sisyphus has got the boulder to the top of the slope, and wedge the cheese under it. " +
"The boulder wobbles... and stays put.\n" +
'"Yes!" yells Sisyphus triumphantly. "I did it! Suck on that, Zeus!" He punches the air and runs out of the cell.');
get_point_for(RESCUED_SISYPHUS);
if(gs(RESCUED_TANTALUS)) {
sgs(FINISHED_HADES, 1);
}
set_personloc(sisyphus, nowhere);
take_away(cheese);
return true;
}
/*
* Troy and environs; the Trojan War, Achilles, Hector, Helen of Troy, and the Medusa
*/
// the horse (discovering you're in the horse is a puzzle in itself)
pl('horse_afthold',
'Aft hold',
true,
"You are at the back end of a dark cabin. The floor, walls and ceiling are all made of planks nailed together, and gently curved. \
You can hear the creaking of wood and the crying of gulls. Two narrow, downward-sloping passageways lead off to the sides.",
"",
{
wall: "The walls are made of dark wooden planks, nailed together in horizontal rows. They are gently curved, \
so that the cabin is slightly wider at the top.",
ground: "The floor is made of dark wooden planks nailed together. It is gently curved, with a slight sag in the middle.",
roof: "The roof is made of dark wooden planks nailed together. It is gently arched, slightly higher in the middle.",
up: "[[ horse_afthold.sights.ceiling ]]",
passage: "Circular holes lead port and starboard, into thin passageways that curve sharply downwards."
},
{
down: "Which passageway do you want to use, port or starboard?",
listen: "You can hear a regular wooden creaking, and the cawing of seabirds."
},
{
fore: 'horse_forehold',
port: 'horse_backleftfoot',
starboard: 'horse_backrightfoot'
},
{
},
null, null);
horse_afthold.isHorse = true;
pl('horse_forehold',
'Fore hold',
true,
"You are at the front end of a dark cabin. The floor, walls and ceiling are all made of planks nailed together, and gently curved. \
You can hear the creaking of wood and the crying of gulls. Two narrow, downward-sloping passageways lead off to the sides, \
and a ladder leads up.",
"",
{
wall: "The walls are made of dark wooden planks, nailed together in horizontal rows. They are gently curved, \
so that the cabin is slightly wider at the top.",
ground: "The floor is made of dark wooden planks nailed together. It is gently curved, with a slight sag in the middle.",
roof: "The roof is made of dark wooden planks nailed together. It is gently arched, slightly higher in the middle. \
At the fore end, a fixed ladder leads up through an open hatchway.",
up: "[[ horse_afthold.sights.ceiling ]]",
passage: "Circular holes lead port and starboard, into thin passageways that curve sharply downwards.",
stair: "A vertical wooden ladder set flush against the wall."
},
{
down: "Which passageway do you want to use, port or starboard?",
listen: "You can hear a regular wooden creaking, and the cawing of seabirds."
},
{
aft: 'horse_afthold',
port: 'horse_frontleftfoot',
starboard: 'horse_frontrightfoot',
up: 'horse_head',
},
{
},
null, null);
horse_forehold.isHorse = true;
///(name,fullname,indoors,description,append,sights,special,exits,hExits,daemon)
pl('horse_head',
'Bridge',
true,
'You are in a long cabin with a high wall at the aft end, and a wooden ceiling that slopes down to meet the \
floor at the fore end. Set into alcoves in the sloping ceiling are two forward-facing portholes, through which \
you can see a grassy plain stretching eastward away from you, and a walled city in the distance. \
Below the portholes is a free-standing control panel with a lever and a dial. \
A loop of rope hangs from the ceiling.',
'',
{
wall: "[[ horse_forehold.sights.wall ]]",
ground: "[[ horse_forehold.sights.floor ]]",
roof: "The roof is made of dark wooden planks nailed together. It is fairly high at the back, \
then comes down in a gently curving slope to meet the floor at the fore end. \
There are two forward-facing portholes set into it at about head height.",
rope: "A loop of thin rope hanging from the ceiling, coming down to \
about shoulder height.",
dial: read_horse_dial,
lever: "A bronze lever, about a cubit long, [[ gs(HORSE_MOVING) ? 'stuck in a downward position' : \
'currently in an upright position' ]]. At the end is a knob carved into the shape of a \
horse's head.",
control: "A control panel on a waist-high pedestal. There is a bronze lever, and a numeric dial \
with a moving arrow.",
window: "Two round windows at about head height, set into recesses in the ceiling so that they \
face forwards. \
Through them you can see a walled city[[ gs(HORSE_MOVING) ? ', getting closer' : '' ]].",
city: describe_troy,
troy: describe_troy,
tower: "Very tall towers, almost topless."
},
{
'up.rope': neigh,
'pull.rope': neigh,
'take.rope' : neigh,
'pull.lever': pull_horse_lever,
'push.lever': pull_horse_lever
},
{ down: 'horse_forehold' },
{},
null,
function() {
if(heroloc().isHorse) {
if(gs(HORSE_PRESSURE)) {
sgs(HORSE_PRESSURE, gsn(HORSE_PRESSURE) - 1);
if(heroloc()==horse_head && gs(HORSE_PRESSURE) <= 2) {
say("\nThe arrow on the dial moves [[ gs(HORSE_PRESSURE) ? 'a little' : 'all the way' ]] to the right.");
}
}
if(gs(HORSE_MOVING)==1) {
sgs(HORSE_MOVING, 2)
} else if((!(gs(DESTROYED_WALL || gs(CRASHED_INTO_WALL)))) && (gs(HORSE_MOVING) > 1)) {
// assuming player must be in the horse while it's moving
var n = gsn(HORSE_MOVING);
var clip = (n%2) ? 'CLIP' : 'CLOP';
var loud = pickOne([ 'loud', 'thunderous', 'tremendous', 'deafening',
'resounding' ]);
say('\n');
if((
!(n%2) && (heroloc()==horse_frontleftfoot || heroloc()==horse_backrightfoot)
) || (
(n%2) && (heroloc()==horse_backleftfoot || heroloc()==horse_frontrightfoot)
)) {
say("You are tossed violently as the pillar you are in rises and falls. ");
}
say("With a " + loud + " " + clip + ", the structure lurches forward.");
if(heroloc()==horse_head) {
if(n>=9) {
// say nothing - we're crashing this turn.
} else if(n==8) {
say("\nThe city wall rises before you. You're about to hit it!\nMaybe you should grab something...");
} else if(n==7) {
say("\nThe city wall is almost upon you.");
} else if(n==6) {
say(" Through the portholes, you see the city get very close.");
} else if(n>=3) {
say(" Through the portholes, you see the city get closer.");
} else{
say(" Through the portholes, you see the city get a little closer.");
}
}
if(n==3) { say("\nYou feel the speed of the structure increase to a trot."); }
if(n==5) { say("\nYou feel the speed of the structure increase to a canter."); }
if(n==7) { say("\nYou feel the speed of the structure increase to a gallop."); }
if(n==9) {
// crash into Troy
say("\nThere is an almighty crash as the structure hits \
[[ heroloc()==horse_head ? 'the city wall' : 'something' ]] \
and splinters.");
if(heroloc()==horse_head) {
die(" As you're at the very front, you're catapulted through one of the portholes and crushed against \
the wall. Before everything goes black, you've just enough time to see the \
collapsing structure from the outside – a giant wooden horse.");
} else {
say(" As it topples to the ground, you tumble out, and find yourself at the foot of a city wall.\n\
\n");
sgs(CRASHED_INTO_WALL, 1);
set_heroloc(west_of_troy);
get_things_out_of_horse();
look();
}
} else {
sgs(HORSE_MOVING, n + 1);
}
}
}
}
);
horse_head.isHorse = true;
function describe_troy() {
say("A city of grey stone, surrounded by a high, smooth, circular wall. You see a few very tall towers \
poking out the top.");
}
function neigh() {
if(Token[1]=='up') { // tried to climb the rope
say("You can't climb the rope, but as you put your weight on it, the");
} else {
say("You pull the loop of rope. The");
}
if(!gs(HORSE_PRESSURE)) {
say(" cabin trembles and an ear-splitting \"NEIGH!\" sounds all around you.\n\
Through the portholes, you see a jet of flame shoot out of the front of the structure.");
get_point_for(EVER_NEIGHED);
var n = gsn(HORSE_MOVING);
if(n>=7) {
say(" The flame hits the city wall, a section of which crumbles and collapses into a pile of rubble. \
The structure you are in hits the rubble, topples over, and splinters. You tumble out.\n\
\n");
get_things_out_of_horse();
get_point_for(DESTROYED_WALL);
sgs(FIGHTING_HAPPENING, 1);
set_heroloc(west_of_troy);
look();
return true;
}
say("\nThe arrow on the dial moves all the way to the left.");
} else {
say("re is a low whickering noise, and the arrow on the dial moves all the way back to the left.");
}
sgs(HORSE_PRESSURE, 4);
return true;
}
function pull_horse_lever() {
if(!gs(HORSE_MOVING)) {
say('The lever comes down, and sticks.\n\
For a second, nothing happens. Then there is an ominous rumble.\n\
The whole structure you are standing in shakes, and you see through the \
portholes that it has started moving – walking, you realise, on the four pillars that lead \
down from the hold. With a tremendous CLIP, \
the structure lurches forwards.');
get_point_for(HORSE_MOVING);
} else {
say("The lever is stuck in the down position, and won't budge.");
}
return true;
}
function read_horse_dial() {
say("The dial looks something like a ship's sextant, with a little bronze arrow that swivels along a \
semi-circular gauge inscribed with numerals. ");
if(!gs(HORSE_PRESSURE)) {
say(" The arrow is currently all the way to the right.");
} else if(gs(HORSE_PRESSURE)==1 || gs(HORSE_PRESSURE)==2) {
say(" The arrow is currently pointing somewhere in the middle.");
} else if(gsn(HORSE_PRESSURE)>2) {
say(" The arrow is currently all the way to the left.");
}
}
function get_things_out_of_horse() {
for(var i=1; i<=NUM_THNG; ++i) {
if(thingloc(Thing[i]).isHorse) {
set_thingloc(Thing[i], west_of_troy);
}
}
}
pl('horse_backleftfoot',
'Aft port pillar',
true,
'You are at the bottom of a narrow wooden vertical passageway. A fixed ladder leads up, bending round to starboard.',
'',
{
wall: "The walls are made of dark wooden planks, nailed together in horizontal rows.",
ground: "The floor is made of dark wooden planks nailed together.",
roof: "Above you, the passage curves round to starboard.",
stair: "A vertical wooden ladder set flush against the wall."
},
{
},
{
up: 'horse_afthold'
},
{},
null, null);
horse_backleftfoot.isHorse = true;
pl('horse_backrightfoot',
'Aft starboard pillar',
true,
'You are at the bottom of a narrow wooden vertical passageway. A fixed ladder leads up, bending round to port.',
'',
{
wall: "The walls are made of dark wooden planks, nailed together in horizontal rows.",
ground: "The floor is made of dark wooden planks nailed together.",
roof: "Above you, the passage curves round to port.",
stair: "A vertical wooden ladder set flush against the wall."
},
{
},
{
up: 'horse_afthold'
},
{},
null, null);
horse_backrightfoot.isHorse = true;
pl('horse_frontleftfoot',
'Fore port pillar',
true,
'You are at the bottom of a narrow wooden vertical passageway. A fixed ladder leads up, bending round to starboard.',
'',
{
wall: "The walls are made of dark wooden planks, nailed together in horizontal rows.",
ground: "The floor is made of dark wooden planks nailed together.",
roof: "Above you, the passage curves round to starboard.",
stair: "A vertical wooden ladder set flush against the wall."
},
{
},
{
up: 'horse_forehold'
},
{},
null, null);
horse_frontleftfoot.isHorse = true;
pl('horse_frontrightfoot',
'Fore starboard pillar',
true,
'You are at the bottom of a narrow wooden vertical passageway. A fixed ladder leads up, bending round to port.',
'',
{
wall: "The walls are made of dark wooden planks, nailed together in horizontal rows.",
ground: "The floor is made of dark wooden planks nailed together.",
roof: "Above you, the passage curves round to starboard.",
stair: "A vertical wooden ladder set flush against the wall."
},
{
},
{
up: 'horse_forehold'
},
{},
null, null);
horse_frontrightfoot.isHorse = true;
for(var i=1; idone?" he cries. "That machine took my corps of \
engineers months to build. I had to make dodgy bargains with half a dozen different \
gods to get the magic working. Look at it, it\'s matchwood!"');
if(gs(DESTROYED_WALL)) {
// You've wrecked the horse, destroyed the wall, and started the fighting
say('\nSomewhere a horn blows. A garrison of hundreds of Greek troops runs in from the west, and bolts \
through the hole in the wall. An alarm bell rings somewhere in \
the city, and soon the familiar sound of clashing swords is filling the air.\n\
"No, no!" Achilles waves, trying to stop them, to no effect. "That wasn\'t the signal. We\'re not ready!"');
}
say('\nHe falls to his knees in despair.');
set_personloc(achilles, west_of_troy);
}
else if(!pick(3)) {
say('\nA bit of ' + horse_part() + ' falls off the horse.');
}
}
}
);
function horse_part() {
return pickOne(['mane', 'wither', 'fetlock', 'shank', 'hoof', 'pastern' ]);
}
function describe_war() {
if(gs(FIGHTING_HAPPENING)) {
return ("\nHordes of Greek and Trojan soldiers are fighting in the [[ heroloc()==palladium_garden ? \
'open' : 'streets' ]].");
} else return "";
}
function war_action() {
if(heroloc().isTroy && heroloc().isOutdoors && gs(FIGHTING_HAPPENING)) {
var GorT = pickOne(["Greek", "Trojan"]);
var TorG = GorT=="Greek" ? "Trojan" : "Greek";
say('\n' + pickOne([
"An injured " + GorT + " soldier [[ pickOne(['runs', 'crawls', 'limps', 'goes flying']) ]] past you.",
"One of the " + GorT + " soldiers [[ pickOne(['swings', 'thrusts']) ]] his \
[[ pickOne(['sword', 'spear']) ]] and [[ pickOne(['mows', 'cuts']) ]] down \
[[ pickOne(['some', 'a couple of', 'a few']) ]] " + TorG + "s.",
"A " + GorT + " soldier breaks from the battle and runs away, screaming.",
"Some " + GorT + " soldiers run [[ pickOne(['past you', 'round a corner']) ]], pursued by \
a unit of " + TorG + "s.",
"A " + GorT + " soldier stabs a " + TorG + " soldier in the [[ pickOne(['neck','back','heart']) ]].",
"A[[ pickOne(['n arrow', ' spear']) ]] comes flying through the air and skewers a " + GorT + " soldier.",
"Two " + GorT + " soldiers carry off a wounded comrade."
]));
}
}
function fight_soldiers() {
if(gs(GREEKS_LEAVING)) {
say("The fighting is over.");
} else if(!gs(FIGHTING_HAPPENING)) {
say("You can't see any soldiers here.");
} else {
if(!in_inv(sword)) {
say("You swing your fist and punch out a Trojan soldier. Or maybe he was a Greek.");
} else {
say("You swing your sword and cut down a couple of Trojans. Or maybe they were Greeks.");
}
say(" It doesn't seem to make much difference to either side.");
}
return true;
}
function look_soldiers() {
if(gs(GREEKS_LEAVING)) {
say("Greek soldiers continue to walk, limp, or be carried out of the city with weary faces.");
return true;
} else if(gs(FIGHTING_HAPPENING)) {
say("There is confused fighting all around you between the Trojans, who weren't expecting to be \
attacked, and the Greeks, who weren't expecting to attack. It doesn't seem to be going \
particularly well for either side.");
return true;
} else {
say("You can't see any soldiers here.");
return false;
}
}
function look_dead() {
if(gs(FIGHTING_HAPPENING) || gs(GREEKS_LEAVING)) {
say("Dead and wounded soldiers pile up at the sides of the streets. The score seems to be \
about even.");
return true;
} else {
say("You can't see that here.");
return true;
}
}
pl('outside_fort',
'Outside Fort',
false,
"You are in the west side of the city of Troy, beside[[ gs(DESTROYED_WALL) ? ' a huge hole in' : '' ]] the great wall. \
Above you is a temporary fortification supported on four wooden struts made from tree trunks. A rope ladder leads up through \
a trapdoor in its floor.",
'[[ describe_war() ]]',
{
soldiers: look_soldiers,
greek: look_soldiers,
trojan: look_soldiers,
dead: look_dead,
fort: "A safe-enough-looking rope ladder leads up into a cubical wooden fort supported by struts and [[ gs(DESTROYED_WALL) ? \"what's left of \" : '' ]]the city wall.",
stair: "A safe-enough-looking rope ladder leads up into a cubical wooden fort supported by struts and [[ gs(DESTROYED_WALL) ? \"what's left of \" : '' ]]the city wall.",
rope: "[[ outside_fort.sights.stair ]]",
wall: west_of_troy.sights.wall,
},
{
'fight.soldiers' : fight_soldiers,
'fight.greek' : "But you\'re supposed to be on their side, and nobody\'s paying you otherwise.",
'fight.trojan' : fight_soldiers
},
{
east: 'palladium_square',
up: 'fort',
},
{ in: 'up' },
function() {
if(gs(DESTROYED_WALL)) {
outside_fort.exits['west'] = 'west_of_troy';
}
},
war_action
);
outside_fort.isTroy = true;
pl('fort',
"Fort",
true,
"You are in a tall fortification that stands against the inside of the Trojan wall" +
"[[ gs(DESTROYED_WALL) ? ', or at least where the wall used to be' : '']]. The wooden fort " +
"wobbles uncertainly as you move.",
'',
{},
{
down: leave_fort,
out: leave_fort,
},
{ down: 'outside_fort' },
{ out: 'down' },
null,
function() {
if(heroloc()==fort && (personloc(achilles)==fort || personloc(achilles)==outside_fort) && personloc(hector)==fort) {
if(gs(ACHILLES_FOLLOWING)) {
sgs(ACHILLES_FOLLOWING, 0);
set_personloc(achilles, fort);
if(personloc(achilles)==outside_fort) {
say('\nAchilles follows you.');
}
say('\n\nPatroclus sees Achilles and gives a cry of joy.\n' +
"Achilles and Hector's eyes lock, and they both square their shoulders.");
}
achilles_fights_hector();
}
}
);
function leave_fort() {
if(personloc(achilles)==fort && personloc(hector)==fort && (gs(ACHILLES_BAREFOOT) || gs(PALLADIUM_CURED)) ) {
say(pickOne(['Achilles', 'Hector']) + ' dodges a swing and jumps in front of you, blocking your way out.');
return true;
} else {
return false;
}
}
pl('outside_citadel',
"Outside Citadel",
false,
"You are outside the Citadel of Troy, an impressive fortress of sun-bleached stone. Its huge gates " +
"[[ !gs(WAR_OVER) ? 'are currently closed and locked due to the war' : 'are open' ]].",
'[[ describe_war() ]]',
{
castle: "The Citadel of Troy is an enormous, towering structure with narrow windows and high turrets, \
set against the wall that boundaries the city to the north." +
"[[!gs(WAR_OVER) ? '' : ' It is under lockdown for the duration of the war.']]",
door: "The huge gates of the Citadel are [[ gs(WAR_OVER) ? 'open' : 'closed' ]].",
wall: "[[ troy_wall_description ]]",
soldiers: look_soldiers,
greek: look_soldiers,
trojan: look_soldiers,
},
{
in: enter_citadel,
north: enter_citadel,
},
{ south: 'palladium_garden',
in: 'citadel'
},
{
north: 'in',
},
null, null
);
outside_citadel.isTroy = true;
function enter_citadel() {
if(!gs(WAR_OVER)) {
say("The gates are firmly closed, as the citadel is locked down for the duration of the war.");
return true;
}
return false;
}
pl('citadel',
"Citadel",
true,
"You stand in the wide, candlelit entrance hall to the Citadel of Troy. The war hasn't been over for long, " +
"so the staff don't seem to have returned to their work yet. A spiral staircase leads upwards.",
"",
{
stair: "A spiral stairway of dark granite steps, each slightly buckled in the middle by centuries of stair-up-and-down-goers.",
},
{
},
{ out: 'outside_citadel',
up: 'landing'
},
{},
null, null
);
citadel.isTroy = true;
pl('landing',
"Landing",
true,
"You are on a bare landing in the Citadel, at the top of a spiral staircase. A scarlet-painted door leads north.",
'',
{
door: "A wooden door painted deep red.[[ !gs(BEDCHAMBER_UNLOCKED) ? ' It is locked, and there\\\'s a heart symbol \
engraved on the lock.' : '' ]]",
lock: "A bronze lock. There is a heart symbol engraved on it.",
},
{
open: enter_bedchamber,
north: enter_bedchamber,
in: enter_bedchamber,
lock: "That would be pointless.",
'fight.door' : "Even in the face of such violent treatment, the door continues to do its job admirably.",
},
{
north: 'helens_chamber',
down: 'citadel',
out: 'citadel',
},
{
in: 'north',
},
null, null);
landing.isTroy = true;
function enter_bedchamber() {
if(gs(BEDCHAMBER_UNLOCKED)) {
if(Token[1]!='in' && Token[1]!='north') {
say('The door is already unlocked.');
return true;
} else {
return false;
}
}
if(!in_inv(key)) {
say("The door is locked.");
return true;
} else {
say("Your bronze key fits in the lock, and you enter.\n\n");
get_point_for(BEDCHAMBER_UNLOCKED);
Token[1] = 'north';
Token_str = 'north';
return false;
}
}
pl('helens_chamber',
"Bedchamber",
true,
"You are in a plush chamber draped with lace and red velvet. At one end of the room is a " +
"four-poster bed. Opposite it, a painting hangs on the wall.",
'',
{
bed : "A wooden four-poster with lace curtains. It doesn't look slept