!--------------------------------------------------------------------------
! The Carousel Room from Zork II: an example
!
! Graham Nelson, 3/95, after Lebling & Blank
!--------------------------------------------------------------------------
Constant Story "CAROUSEL";
Constant Headline "^An Interactive Snippet from Zork II^by Dave Lebling \
and Marc Blank (1981)^";
Constant MAX_SCORE 4;
Include "parser";
Include "verblib";
Include "grammar";
[ Initialise;
location = Arched_Hall;
print "^^^^^Are you feeling dizzy? It must be the...^^";
];
Object Arched_Hall "Arched Hall"
has light
with description "This is an arched hall of fine marble. The hall is \
blocked to the north by an unfordable stream, where the \
marble is cracked and broken. Perhaps a flood or collapse of \
the cave was responsible. To the south the hall opens into a \
large room. There is rather annoying whirring sound coming \
from that room.",
s_to Carousel_Room;
Object Carousel_Room "Carousel Room"
has light general
with description [;
print "You are in a large circular room whose high ceiling is \
lost in gloom. Eight identical passages leave the \
room.^";
if (self has general)
"A loud whirring sound comes from all around, and you \
feel sort of disoriented in here.";
"The whirring sound is very quiet, and you no longer feel \
dizzy.";
],
n_to Arched_Hall,
ne_to side_room_ne,
nw_to side_room_nw,
se_to side_room_se,
sw_to side_room_sw,
s_to side_room_s,
e_to side_room_e,
w_to side_room_w,
before [ i;
Go:
print "You're not sure which direction is which. This room \
is very disorienting.^";
switch (random(7)) {
1: i = Arched_Hall;
2: i = side_room_ne;
3: i = side_room_nw;
4: i = side_room_se;
5: i = side_room_sw;
6: i = side_room_s;
7: i = side_room_e;
}
PlayerTo(i);
rtrue;
];
Class side_room
with description "This is a little side-chamber, with no other exit.",
has light;
Object side_room_ne "NE of Carousel"
class side_room
with sw_to Carousel_Room;
Object side_room_nw "NW of Carousel"
class side_room
with se_to Carousel_Room;
Object side_room_e "E of Carousel"
class side_room
with w_to Carousel_Room;
Nearby table "oak table"
has static supporter
with name "oak" "table" "engraved" "engravings",
initial "An engraved oak table rests beside one wall.",
description "~Place Treasures Here~.",
after [;
Receive:
if (noun == pile) { deadflag = 2; "Chime!"; }
];
Object side_room_w "Room 8"
class side_room
with e_to Carousel_Room;
Nearby pile "pile of jewels"
has scored
with name "pile" "of" "jewels" "gems";
Object side_room_se "SE of Carousel"
class side_room
with nw_to Carousel_Room;
Object side_room_sw "SW of Carousel"
class side_room
with ne_to Carousel_Room;
Object side_room_s "S of Carousel"
class side_room
with n_to Carousel_Room;
Nearby switch "large switch"
has switchable static on
with name "large" "switch" "lever",
when_off "A large switch is down on the wall.",
when_on "A large switch is up on the wall.",
before [;
Pull: <<SwitchOff self>>;
Push: <<SwitchOn self>>;
],
after [;
SwitchOn: "Nothing obvious happens.";
SwitchOff:
give Carousel_Room ~general;
! Note that, since Inform is an untyped language, it is
! entirely legal to over-write the "before" of Carousel_Room
! with a number... in this case -1, which means "no before
! routine at all" and is the value of "before" for any object
! which doesn't provide one. This conveniently deletes the
! "disoriented" rule from the game.
Carousel_Room.before = -1;
"There is a shower of sparks, and the whirring sound dies \
down.";
];