Doctor Who karn.z5 (87 Kbytes) 7doctors.z5 (70Kbytes) spacestation.z5 Version 2.4 Run Code (79Kbytes) - 22nd August 2010.
PET Corner - Commodore PET Computer.
4Kbyte of RAM, Green Monochrome Monitor, Tape Cassette Drive,
and Keyboard with Symbols on it. Like on the Fast Show.
How to write a Transcript
faulty_towers.inf - below
bzork_sample.inf - below
.inf = Inform 6 , .z5 = RUN File
Download for FREE:
.z5 and .dat Files Runnable using
WindowsFrotz2002.zip
(664Kbytes) WinZip File
To Run WinFrotz click on it and goto File/Open new story...
infocom_game.zip 1.66Mbtyes WinZip File -
includes Frotz.exe and WInfocom.exe Interpreters; plus the following games: beyond_zork, bureaucracy, lgop, lurking, planetfall, sherlock, sorcerer, stationfall, zork1, zork2, zork3.
Infocom was founded on June 22, 1979 by MIT staff and students led by Dave Lebling, Marc Blank, Albert Vezza, and Joel Berez and lasted as an independent company until 1986 when it was bought by Activision. Activision finally shut down the Infocom division in 1989, although they released some titles in the 1990s under the Infocom Zork brand. Activision abandoned the Infocom trademark in 2002. Steve Meretsky wrote some games too, as an Implementor with the Great Author Douglas Adams.
7doctors - a Doctor Who Game - by david.burke@btinternet.com
balances - by Graham Nelson, the Oxford Mathematics Professor who coded the Inform Language.
beyond_zork_sample - 'Beyond Zork - Example Transcript' by Allen Garvin, 1998. Endurance, Strength, Dexterity, Intelligence, Compassion, Luck, Armor Class.
christminster - Set in an Ox-bridge College - by Graham Nelson
fifteen - play the 15 Puzzle on a Computer.
hadrian - by David Ledgard
jigsaw - by Graham Nelson
karn - 'Return to Karn' - by Patrick Wigfall.
library - all Quiet on the Library Front.
lost - 'The Lost Spellmaker' - by Neil James Brown - 1997
robots - 'ROBOTS - Another abuse of the Z-Machine', A nostalgic diversion by Trobjorn Andersson.
spacestation - Science Fiction Game by David Ledgard, type HELP to learn how to play it. Version 1 entered in 'Interactive Fiction Comp98'.
what_IF - 7 possbile Alternate Histories - by David Ledgard
zombies - a re-make of a Commodore PET Microcomputer Game - by David Ledgard
ztrek - early Star Trek Game - 'Super Z Trek' - includes Phasors, Torpedoes, and Shields.
Lost New York runs using HTML TADS Interpretor 3 LOSTNY.zip (216Kbytes) WinZip File
! Simple game about the Faulty Towers TV Situation Comedy. Can be expanded by anyone interested. The
! 'actors' could have more detail added to them.
!
! Type 'c' to compile i.e. c ft.inf .
! Goto 'Start' Button, Run 'cmd' (MS-DOS Command Prompt, Microsoft Disk Operating System) ;
! 'cd Desktop' ; 'cd ft_inf' ; 'c ft.inf ... and fix any errors and re-compile - CD = Change
! Directory , DIR = List Directory.
! Then you get the 'ft.z5' Run code, run using 'WinFrotz2002.exe' ; Simples!!!
!
!'inf' stand for 'Inform Code' (Inform 5 and 6 available) ;
!'.z5' Stand for 'z-Machine' Interacive Fiction Text Adventure multi-platform Programming Language that
!works on any computer platform with Free Emulators downloadable from the internet e.g. PC, Psion...
!
!Dave. 14/09/15
Switches xd;
Constant DEBUG;
Constant Story "Faulty Towers Computer Game";
Constant Headline ": An Interactive Transcript^
Freeware 2014 by David Ledgard;^";
Serial "150914";
Release 1;
Include "Parser";
Include "VerbLib";
Include "Grammar";
Object Reception "Reception"
with
description "This is the Reception of the Hotel. Exits lie North, South, and East.",
n_to Office,
s_to DiningRoom,
e_to Lobby,
has light;
Object -> Proprietor "Basil" "Forta",
has static animate male;
Object Lobby "Foyer" "Lobby"
with
description "This is the Reception of the Hotel. Exits lie North, South, West, and East. And stairs lead upwards.",
w_to Reception,
n_to Lounge,
s_to DiningRoom,
e_to CarPark,
u_to FirstFloor,
has light;
Object FirstFloor "First" "Floor"
with
description "There are three Rooms on this floor. With Doors.",
d_to Lobby,
has light;
Object -> Manuel "Manuel"
with
before [;
Kick: "Manuel says 'Oi!'";
],
has static animate male;
Object -> ReceptionDesk "Desk",
with
found_in Reception,
has scenery;
Object -> -> ReceptionBell "Bell"
with
before [;
Ring, Push:
"The Bell Rings.^
Basil says 'Hello. how do you do?'^
People don't even say 'Good Morning' in this Country anymore, at the Station.";
],
has scenery;
Object Office "Office"
with
description "This is the Hotel Office. There is a safe here.",
e_to Lounge,
s_to Reception,
has light;
Object -> Simone "Simone" "woman"
has static animate female;
Object -> Safe "Safe"
has scenery openable open;
Object -> -> Money "Money" "Fiver"
with
description "A fiver.";
Object Lounge "Lounge"
with
description "This is the Hotel Lounge.",
w_to Office,
s_to Lobby,
has light;
Object -> theMajor "Major"
with
description "The Major is here. Sitting down in a Chair.",
has static animate male;
Object -> Chair "Chair"
with
before [;
"The Major is sitting in a Chair.";
],
has scenery supporter enterable;
Object -> Drinks "drinks"
with
name "drink" "drinks" "glass" "glasses",
description "There are three drinks here.",
has scenery;
Object -> -> Whisky "Whisky"
has scenery;
Object -> -> Vodka "Vodka"
has scenery;
Object -> -> Scheppes "Scheppes"
has scenery;
Object DiningRoom "Dining" "Room"
with
description "There a several tables here, Chairs, and a Menu.",
n_to Reception,
e_to Kitchen,
has light;
Object -> OldLadies "Old" "lady" "ladies"
has static animate female;
Object -> GermanTourists "german" "tourists"
has static animate male;
Object -> Maid "Maid"
has static animate female;
Object -> Menu "Menu"
with
description "For breakfast there is Orange Juice, Tea, Toast, and Cereal.",
before [;
Consult, Read: "For breakfast there is Orange Juice, Tea, Toast, and Cereal.";
];
Object Kitchen "Kitchen"
with
description "There is a Cooker here and Fridge. Also a Table.",
w_to DiningRoom,
n_to Lobby;
Object -> Cook "Cook"
has static animate male;
Object Lane "Lane"
with
description "You're standing a Lane. A Hotel lies to the West, and the lane continues East.",
w_to CarPark,
n_to TechnicalCollege,
e_to RecordingStudio,
has light;
Object TechnicalCollege "Technical" "College" "School"
with
description
"This Technical College offers a two year course in Computer Studies. Subjects covered include the c programming
language, selected because it can BIT TWIDDLE... The Pascal Programming Language is recommended as a Teaching
Language, it is elegant, and has special commands like variable TYPES e.g. [ January .. December], [Ace .. King ],
RECORD's, ARRAY's... CONSTANT, INTEGER, BYTE, REAL, BOOLEAN (TRUE or FALSE), CHAR, and STRING. if (KeyPressed = TRUE)
then isQuit. Another Command is GotoXY ( 1, 1 ) for the Screen Cursor, and ClrScr ().^
WHILE / DO, and REPEAT / UNTIL isQuit Loops. Procedures, and Functions - Returns one Variable,
e.g. Result := Sqrt (144). Plot (X, Y, Color), Draw (X1, Y1, X2, Y2, Color)...^
Turtle Graphics: Turn Left, Turn Right, Forward, SetPenColor, SetPenDown...^
You can download the Pascal Programming Language (named after a French Philosopher and Mathamatician) FREE from the
internet, and find a Manual, or Teaching book in your local Bookshop. The Pascal Language can be COMPILE'ed, from
test.pas for example. Any Errors are shown and can be fixed in the Program Editor. When correct it then creates a RUN
File: .COM, or .EXE .^^
Technical Colleges also do short courses for 2 hours a week, for 10 weeks, Evening Classes, or Saturday Morning like
'Introduction to the Internet' and 'Writing Web Pages'. 'NoteTab Pro' and 'CuteFTP Professional' are highly
recommended for editing Web Pages, and Uploaded to the Internet - FTP: File Transfer Protocol. Download them from
the internet for little. A good book is 'HTML 4 - 10 Minute Guide' - Hypertext Markup Language, developed by Sir Tim
Berners Lee, at CERN, at little cost.",
s_to Lane,
has light;
Object RecordingStudio "Record" "Studio" "Tape" "Cassette" "Sony" "Walkman"
with
description
"This is a Music recording studio ; and a 'Sony Walkman' for Cassette Tape, with x2 AA Batteries, and Earphones. Also
a collection of Tapes.^
One is 'By the Rivers of Babylon, where we sat down, and we did weep when we remembered Zion.'.
A second is 'In the Jungle the Mighty Jungle the Lion Sleeps tonight.'. A third is Michael Jackson's 'Beat it.'.
Fourth 'We built this City on Rock and Roll' by Starship. Fifth 'Changes' by David Bowie.". Sixth ABBA's 'My, my. At
Waterloo Napoleaon did surrender' and 'Money. Money. Money'. Seventh Starship's 'We built this City on Rock and
Roll'. Eighth The Bangles 'Walk like an Egyptian' and 'Guilty in the First Degree'. Ninth The BeeGees 'Saturday Night
Fever' and 'You Win again'. And finally Tenth Jeff Wayne 'War of the Worlds'.
w_to Lane,
has light;
Object -> DaniDaveto "Dani" "DeVito",
with
name
initial [;
print "Dani says his favoutie quote: 'I've got Chesse!'. He also starred in the great film 'Other peoples Money'
with Gregory Peck.";
],
before [;
Consult, Read: "I'm making you Money!";
];
has static animate male;
Object -> MusicAmplifier "Music" "Amp" "Amplifier",
with
description "There is a Music Amplifier here.",
has scenery;
Object CarPark "Car" "Park"
with
description "This is a small Car Park next to the Hotel.",
w_to Lobby, e_to Lane,
has light;
Object -> Car "Car" "Renault"
with
description "It's a Renault Car.",
has scenery;
Object -> FaultyTowersSign "Sign"
with
before [;
Read: "The sign says 'Faulty Towers'.";
],
has scenery;
! The transcript upon which this game is based is copyrighted by
! Infocom, 1987. The rights today belong to Activision, and no
! attempts have been made to secure permission from them. From their
! track record, they probably don't care about this obscure use of a
! by-product of one of their old Infocom games. This certainly can't
! be any worse than the Hugo port of Zork.
!
! This transcript programmed in Inform by Allen Garvin for no
! apparent reason (well, actually, he was bored and decided to
! program in one of the example transcripts for fun--Beyond Zork's
! was the most complete and self-contained); he can be reached at
! earendil@faeryland.tamu-commerce.edu. All code may be freely
! distributed and modified, as long as no commercial profit is
! involved. It'd be kinda neat if people made full games out of the
! transcripts of this or other Infocom games.
!
! Note also this is unfinished. I got bored before I could get around to
! programming the combat.
Switches xd;
Constant DEBUG;
Constant SACK_OBJECT = Pack;
Constant Story "Beyond Zork Example";
Constant Headline ": An Interactive Transcript^
Copyright 1987 by Infocom; Inform code copyright 1998 by Allen Garvin^
Zork is a registered trademark of Activision.^";
Release 1;
Replace DrawStatusLine;
Replace TimePasses;
Replace YesOrNo;
Include "/usr/games/Inform/Parser";
Object LibraryMessages with
before [;
Buy:
if( location == Tavern or Shoppe )
"Unfortunately, you've already spent your last zorkmid.";
rfalse;
Quit:
QuitRoutine();
],
;
Array Stats --> 18;
Array PresetChars --> 36;
Global AC;
Global Gender;
Global MyName;
Include "/usr/games/Inform/VerbLib";
Object Tavern "Tavern" with
description "You're in a dark and smoky tavern, filled to capacity with
soldiers, louts, and other misfits like yourself. The ringing of
glasses is almost drowned out by the din of drunken voices. An exit
lies to the east.",
e_to Road,
has light;
Object -> "drinks" with
name #n$a "drink" "drinks" "glass" "glasses",
description "You are the only patron without a glass of sweet liquor.",
has scenery;
Object -> "grizzled warrior" with
name "warrior" "grizzled" "zot" "brastar" "man",
initial [;
print "Sitting at a nearby table is a grizzled warrior. ";
if( child(self) ) {
print "He's holding ";
WriteListFrom(child(self), ENGLISH_BIT);
".";
}
"";
],
player_standing [;
if( parent(player) == Tavern ) {
self.number = self.number + 1;
switch( self.number ) {
1: "~Sit down, sonny!~";
2: "~I ain't talking to no man that can't sit down like a gentleman.~";
default:
if( self has general ) print "Zot"; else print (The) self;
" ignores you.";
}
}
self.number = 0;
rfalse;
],
before [;
GreetPerson:
if( self.player_standing() ) rtrue;
if( self has general )
"Zot gives you a friendly nod.";
self.greet();
],
greet [;
if( self has general )
"~I've already told you about myself.~";
give self general;
move Replica to self;
"~Zot Brastar's the name!~ roars the warrior, clasping your hand in an iron grip.
He reaches under the table and reveals a bright, round object. It's just what you've been
looking for - a glow-in-the-dark plastic replica of the legendary Stone of Dreams!";
],
life [;
Ask:
if( self.player_standing() ) rtrue;
switch( second ) {
'warrior', 'himself', 'grizzled', 'zot', 'brastar':
self.greet(); rtrue;
'replica', 'stone', 'dreams':
"~Nice little trinket, eh? The dragon I stole it from thought so, too.~";
default: "~I don't know nothing about that.~";
}
rfalse;
Tell:
if( self.player_standing() ) rtrue;
rfalse;
Order:
if( self.player_standing() ) rtrue;
rfalse;
Give:
switch( noun ) {
Egg:
move Egg to self;
"You give the egg to the warrior. ~Hey, thanks!~ he says.";
Wand:
if( self has general ) print "Zot"; else print (The) self;
" refuses your offer. ~I never could make magic work,~ he
says. ~That's why I took up the sword for my trade.~";
default:
if( self has general ) print "Zot"; else print (The) self;
" refuses your offer.";
}
],
orders [;
Greet:
if( self has general )
"Zot gives you a friendly nod.";
self.greet();
rtrue;
Give:
if( noun == Replica && second == player ) {
if( Egg in self )
"~Oh, this thing? Sure, you can have it. But first, there's this
grue's fang I've been hankering after...~";
"~Not so fast, boy!~ chuckles Zot, leaning closer. ~You can have the
stone - if you bring me the egg of the Queen Corbie.~";
}
NotUnderstood:
switch( random(3) ) {
1: "~You're not making sense, sonny.~";
2: "~Speak clearly, boy.~";
3: if( self has general ) print "Zot"; else print (The) self;
" looks at your puzzled.";
}
default: if( self.player_standing() ) rtrue;
],
number 0,
has static animate male transparent;
Object -> "table" with
name "table",
after [;
Enter:
if( self has general ) "~Welcome back, sonny!~";
give self general; "You sit down at the table.";
],
has scenery supporter enterable;
Object Replica "glow-in-the-dark plastic replica of the legendary
Stone of Dreams" with
name "replica" "of" "stone" "dreams" "dream" "glow-in-the-dark" "legendary"
"plastic",
description "It is exactly the item you need.",
;
Object Road "Road" with
description "You're standing on a dirt road outside the tavern. A Magick Shoppe stands to the
east, and a dark alley leads north. Looking south, you see the snowy peaks of a distant mountain.",
w_to Tavern,
n_to Alley,
e_to Shop,
s_to MountainBase,
has light;
Object -> "magick shoppe" with
name "magick" "shoppe" "shop" "store" "magic",
description "Little can be seen from here.",
has scenery;
Object Alley "Alley" with
description "You're in a dark alley with exits to
the south and west. Unpleasant aromas waft from heaps of garbage.",
s_to Road,
w_to Alley2,
has light;
Object -> Imp "trash imp" with
name "trash" "imp" "monster",
initial "A trash imp is grinning at you maliciously.",
react_before [;
Go:
if( noun == w_to ) "The trash imp blocks your path! ";
Attack, kill:
"You deal the imp and decisive blow with your Sword!^
The trash imp disintegrates into a pile of garbage!^
[Your experience just went up.]"
],
has static animate;
Object Alley2 "Alley" with
description "You're in a dirty alley, with an exit to the east.",
e_to Alley,
has light;
Object -> "jagged hole" with
name "hole" "jagged",
description "It is about five inches wide, but you can't tell how deep it is or what may be in it.",
initial "A jagged hole is visible in the sidewalk.",
before [;
Search: "You see only darkness.";
ReachIn: if( Wand hasnt moved ) {
move wand to player;
give wand moved;
"You grasp a thin piece of wood and pull it out. It looks like a
magic wand!";
}
],
has static container open;
Object -> -> Wand "wand" with
name "wand" "magic" "zorch",
description [;
if( self has general )
"You recall that the old woman said it was a Zorch wand.";
"It is a short wand, about 8 inches long and made of wood.";
],
before [;
Point:
if( self.number == 0 ) "Nothing happens.";
self.number = self.number - 1;
switch( second ) {
Greech:
remove Greech;
"POOF! The greech turns into an iguana, and scurries out sight.";
Corbie:
move Gila to MountainBase;
remove Corbie;
"POOF! The corbie turns into a large gila monster, scurries out
of the nest and tumbles out of sight.";
default:
"POOF! There is a flash and a cloud of smoke. Nothing else seems
to have changed.";
}
],
number 9,
;
Object Shop "door" with
name "door",
found_in Shoppe Road,
! description [;
! print "It looks as if the door is
door_dir [;
if( location == Shoppe ) return w_to; return e_to;
],
door_to [;
if( location == Shoppe ) return Road; return Shoppe;
],
before [;
Knock:
if( door has open ) "It's already open.";
if( location == Road )
"A voice calls from inside, ~Come in!~";
],
after [;
Open, Close:
print "As you ";
if( action_to_be == ##Open ) print "open"; else print "close";
" the door, a concealed bell tinkles merrily.";
],
has door openable scenery;
Object Shoppe "Magick Shoppe" with
description "You're in Ye Olde Magick Shoppe. Shelves groan with
forbidden books, bubbling potions, and other fun items.",
w_to [;
print "~Please try our new Partay spell, with a money-back guarantee!~^";
return Shop;
],
has light;
Object -> "old woman" with
name "woman" "old",
initial "An old woman is standing behind the counter.",
description "The old woman regards you with equal interest.",
life [;
Show, Give:
switch( noun ) {
Wand:
if( Wand has general )
"~I've already told you about the Zorch wand.~";
give Wand general;
"The old woman takes the wand and turns it over in her
hands. ~Hmm,~ she says, ~a rare magic item, indeed! This
is a Zorch wand, which can transform any creature into a
reptile. Please be careful - it's not a toy.~^She hands the
wand back to you.";
default:
"The old woman glances at ", (the) noun, ". ~Can't tell you much
about this here,~ she mutters.";
}
Attack, ThrowAt:
"The old woman obviously means you no harm; even your meager
compassion is enough to stay your hand.";
Ask:
"The old woman smiles wryly, but says nothing.";
Order:
"~I'm not used to being ordered about,~ observes the old woman
coldly.";
],
has animate static female;
Object MountainBase "Mountain Base" with
description "You're at the bottom of a huge mountain. A steep, rocky path
leads upwards. Open areas lie to the west and east.",
n_to Road,
e_to Pasture,
w_to Garden,
u_to [;
if( player in Greech )
return Ledge;
"You try to scramble up the path, but it's much too steep.";
],
has light;
Object Pasture "Pasture" with
description "You are standing in a wide, green field of grass.",
w_to MountainBase
has light;
Object -> Greech "greech" with
name "greech" "mountain" "animal",
initial [;
if( self hasnt general )
"A bored-looking mountain greech is feeding in the tall grass.";
print_ret "A ", (name) self, " is here, looking at you happily.";
],
number 0, ! number of times we've ridden
before [;
Enter:
if( self hasnt general )
"The greech trots away from you, and pulls up another clump of grass.";
Pet:
if( self hasnt general )
"The greech sniffs your fingers, decides they are not worth eating,
and mouths another clump of grass.";
"The greech seems to enjoy your attention, looking happily up at your
face.";
Go:
if( location == MountainBase && noun == u_to )
"The greech walks up the path with ease, climbing confidently over the rocks.";
if( (location == Garden or Pasture) ||
(location == MountainBase && noun ~= n_to) )
"The greech trots across the grass.";
if( location == Ledge && noun == u_to ) {
print "The greech shakes his head, refusing to climb any higher.^";
return 2;
}
if( location == Ledge && noun == d_to ) {
print "The greech picks its way down the slope. ";
if( parent(Egg) == player ) {
remove Egg;
move Scrambled to MountainBase;
"About half way down, however, the greech's hoof slips on a rock,
jolting you and sending the egg tumbling from your hand onto the
ground below, shatting as it crashes into the rocks.";
}
"";
}
if( location == Road && noun == w_to )
{
print "A passing constable growls, ~No greeches allowed in the
tavern.~^";
return 2;
}
if( location == Road && noun == e_to ) {
print "As you start ride the Greech into the Magick Shoppe, the old
woman points at a previously unseen sign by door, ~No Animals
allowed in Shoppe~. You turn the greech around.^";
return 2;
}
if( location == Road && noun == n_to ) {
print "The greech apparently doesn't like the look of the filthy
alley, and refuses to budge towards it.";
return 2;
}
"The greech carries you along, walking steadily.";
],
life [;
Give:
if( noun == BlueTulip ) {
remove noun;
give self general;
"The greech's eyes light up when it sees the blue tulip. It grabs it out
of your hand, gobbles it down, and gives you a hopeful bleat.";
}
print_ret (The) self, " sniffs ", (the) noun, " but doesn't consider
it worth eating.";
], after [;
Enter:
if( self.number == 0 ) {
self.number = 1;
"The greech reluctantly allows you to climb onto its back.^";
}
"The greech allows you to climb onto his back.";
],
has static animate supporter enterable;
Object Garden "Garden" with
description [;
print "You're standing in a lovely garden, surrounded by exotic flowers. ";
if( RedTulip has scenery && BlueTulip has scenery )
"A red tulip and a blue tulip are growing at your feet.";
if( RedTulip has scenery )
"A red tulip is growing at your feet.";
if( BlueTulip has scenery )
"A blue tulip is growing at your feet.";
"";
],
e_to MountainBase,
has light;
Object -> BlueTulip "blue tulip" with
name "blue" "tulip" "flower",
before [;
Pull, Take:
if( self has scenery ) {
give self ~scenery;
move self to player;
print_ret (The) self, " pulls out of the ground with a muffled ~pop.~";
}
],
has scenery;
Object -> RedTulip "red tulip" with
name "red" "tulip" "flower",
before [;
Pull, Take:
if( self has scenery ) {
give self ~scenery;
move self to player;
print_ret (The) self, " pulls out of the ground with a muffled ~pop.~";
}
],
has scenery;
Object Ledge "Ledge" with
description "You're on a narrow ledge near the top of the mountain. A
path leads downward. About ten feet above you is the peak, which
appears to be covered with straw.",
u_to Nest,
d_to [;
if( player in Greech ) return MountainBase;
print "As you climb down the path, you trip and fall! You slide down
to the bottom unhurt, ";
if( parent(Egg) == player ) {
remove Egg;
move Scrambled to MountainBase;
print "but the egg falls from your hand and shatters on the
ground.^";
}
if( parent(Egg) == Pack ) {
remove Egg;
move Scrambled to Pack;
print "thanks to your pack which you fell on. Unfortunately, you heard a
crunching sound as you landed on it.^";
}
print "miraculously.^";
return MountainBase;
],
has light;
Object Nest "Nest" with
description "You're in a huge straw nest, lined with brightly-colored
string and the skeletons of small, unfortunate animals.",
d_to Ledge,
before [;
Take:
if( noun == Egg ) {
if( Corbie in location )
"There's a giant Queen Corbie looming over you that seems intent
on preventing your theft.";
if( Gila notin MountainBase ) {
move Corbie to location;
"As you reach for the egg, you hear a terrible squawking from
above, and a pair of talons zooms out of the sky! The Queen
Corbie lands in the nest and screams at you, her eyes red with
anger.";
}
}
],
has light;
Object -> Egg "giant purple egg" with
initial "A giant purple egg lies in the middle of the nest.",
name "egg" "purple" "giant",
;
Object Scrambled "scrambled egg" with
name "scrambled" "egg",
description "It is a scrambled egg of herculean proportions.",
after [;
Eat: "You manage to choke down the uncooked scrambled egg.";
],
has edible;
Obj
ct Corbie "Queen Corbie" with
name "corbie" "queen" "bird" "monster",
has animate static;
Object Gila "large but dead gila monster" with
name "dead" "reptile" "lizard" "gila" "monster" "large" "but",
before [;
Take, Remove, Push, Transfer:
"You strain, but cannot even move the dead gila monster, which
must weigh several hundred pounds.";
],
has static;
Object Sword "sword" with
name "sword" "blade" "elvish",
description "It's of elvish workmanship.",
;
Object Pack "pack" with
name "pack" "backpack" "back" "leather",
description "It is a worn but sturdy leather backpack that has accompanied
you on all your journeys.",
has container open worn clothing;
Array printed_text table 800;
! I added the printf from the designer's manual, but didn't find it very
! useful, so I changed it into this :)
[ FormatText format j k;
printed_text-->0 = 64; @output_stream 3 printed_text;
print (string) format; @output_stream -3;
j = printed_text-->0;
for( k=2: kk == '%' ) {
switch( printed_text->(++k) ) {
'%': print "%";
'U': style underline;
' ': spaces 1;
'B': style bold;
'P': style roman; ! Plain
'R': style reverse;
}
} else
print (char) printed_text->k;
}
];
Include "/usr/games/Inform/Grammar";
Global ScreenWidth;
Global ScreenHeight;
[ Strlen text;
printed_text-->0 = 64; @output_stream 3 printed_text;
print (string) text; @output_stream -3;
return printed_text-->0;
];
[ FunnyChar text i;
printed_text-->0 = 64; @output_stream 3 printed_text;
print (string) text; @output_stream -3;
for( i=2: i0: i++ )
if(~~( (printed_text->i >= 'A' || printed_text->i <= 'Z') ||
(printed_text->i >= 'a' || printed_text->i <= 'z') ||
printed_text->i == '-' ) )
rtrue;
rfalse;
];
[ Center text stylecode x;
x = ScreenWidth/2 - Strlen(text)/2;
spaces x;
switch( stylecode ) {
1: style reverse;
2: style bold;
}
FormatText(text);
if( stylecode ~= 0 ) style roman;
new_line;
];
[ PrintBanner x y;
@erase_window -1;
for( y=0: y x;
@erase_window -1;
];
[ SexSetup i;
print "^Shall your character be male or female?^^[The default is MALE.] >";
for( :: ) {
read buffer parse;
i=parse-->1;
if( (i=='m//' or 'male') || parse->1 == 0 ) {
Gender = 0;
return;
} else if( i=='f//' or 'female' ) {
Gender = 1;
return;
} else
print "^[Please type MALE or FEMALE.]^^[The default is MALE.] >";
}
];
[ YesOrNo i;
if( i )
print "^[Please type YES or NO.] >";
for (::) {
read buffer parse;
i=parse-->1;
if (i==YES1__WD or YES2__WD or YES3__WD) rtrue;
if (i==NO1__WD or NO2__WD or NO3__WD) rfalse;
print "^[Please type YES or NO.] >";
}
];
[ QuitRoutine;
print "^Are you sure you want to leave the story now?^";
if( YesOrNo(1) )
quit;
else
print "^[Continuing.]^^";
];
[ PrintNum num with_zeros digits;
if( digits >= 3 )
if( num < 100 )
if( with_zeros )
print "0";
else
print " ";
if( digits >= 2 )
if( num < 10 )
if( with_zeros )
print "0";
else
print " ";
print num;
];
[ DisplayStats i j;
@set_window 1;
style reverse;
@set_cursor 3 28;
spaces 18;
for( i=0: i<6: i++ ) {
j = i + 4;
style reverse;
@set_cursor j
28;
switch( i ) {
0: FormatText(" Endurance ");
1: FormatText(" Strength ");
2: FormatText(" Dexterity ");
3: FormatText(" Intelligence ");
4: FormatText(" Compassion ");
5: FormatText(" Luck ");
}
style roman; PrintNum(Stats-->i, 0, 3);
style reverse; print " ";
}
@set_cursor 10 28; spaces 18;
style roman;
];
[ AttributeQuery;
@erase_window 1;
@set_window 1;
DisplayStats();
@set_window 0;
print "^^Are you sure these are the attributes you want?^";
return YesOrNo(1);
];
[ RandomCharLoop i j lp;
@erase_window 1;
while( true ) {
for( i=0: i<6: i++ )
Stats-->i = 1;
for( i=0: i<60: i++ ) {
j = random(6) - 1;
Stats-->j = Stats-->j + 1;
}
DisplayStats();
@set_window 0;
lp = true;
while( lp == true ) {
@read_char 1 -> i;
switch( i ) {
32: lp = false;
13: if( AttributeQuery() ) rtrue; rfalse;
}
}
}
];
[ PresetCharLoop pos i y lp;
@erase_window 1;
while( true ) {
@set_window 1;
style reverse;
@set_cursor 3 18;
spaces 9;
for( i=0: i<6: i++ ) {
y = 4 + i;
@set_cursor y 18;
print " ";
if( pos == i )
style roman;
switch( i ) {
0: FormatText("Lucky ");
1: FormatText("Tank ");
2: FormatText("Muscles");
3: FormatText("Nimble ");
4: FormatText("Genius ");
5: FormatText("Saint ");
}
style reverse;
print " ";
}
@set_cursor 10 18;
style reverse; spaces 9; style roman;
for( i=0: i<6: i++ )
Stats-->i = PresetChars-->(pos * 6 + i);
DisplayStats();
@set_window 0;
lp = true;
while( lp == true ) {
@read_char 1 -> i;
switch( i ) {
32: lp = false;
13: if( AttributeQuery() ) rtrue; rfalse;
129: if( pos == 0 ) pos = 5; else pos = pos - 1; lp = false;
130, 32: if( pos == 5 ) pos = 0; else pos = pos + 1; lp = false;
}
}
}
];
[ CreateChar lp i j pos pot;
@erase_window 1;
pot = 60;
while( true ) {
@set_window 1;
style reverse;
@set_cursor 3 28;
spaces 18;
for( i=0: i<6: i++ ) {
j = i + 4;
style reverse;
@set_cursor j 28; print " ";
if( pos == i ) style roman;
switch( i ) { 0: FormatText(" Endurance");
1: FormatText(" Strength");
2: FormatText(" Dexterity");
3: FormatText("Intelligence");
4: FormatText(" Compassion");
5: FormatText(" Luck");
}
style reverse; print " ";
style roman; PrintNum(Stats-->i, 0, 3);
style reverse; print " ";
}
@set_cursor 10 28; spaces 18;
@set_cursor 11 28; FormatText(" Potential ");
style roman; PrintNum(pot, 0, 3); style reverse; print " ";
@set_cursor 12 28; spaces 18;
@set_window 0;
lp = true;
style roman;
while( lp == true ) {
@read_char 1 -> i;
switch( i ) {
32: lp = false;
13:
if( pot > 0 ) {
j = pot / 6;
if( j == 0 ) j = 1;
for( i=0: i<5: i++ ) {
if( pot > 0 ) {
Stats-->i = Stats-->i + j;
pot = pot - j;
}
}
Stats-->5 = Stats-->5 + pot;
print "^^Your unused Potential has been evenly distributed.^";
}
if( AttributeQuery() ) rtrue; rfalse;
129: if( pos == 0 ) pos = 5; else pos = pos - 1; lp = false;
130, 32: if( pos == 5 ) pos = 0; else pos = pos + 1; lp = false;
131: !left
if( Stats-->pos > 1 ) {
(Stats-->pos)--;
pot++;
lp = false;
}
132: !right
if( pot > 0 ) {
(Stats-->pos)++;
pot--;
lp = false;
}
}
}
}
];
Global FallThru;
[ SetupLoop pos ch i;
@set_cursor 7 0;
while( true ) {
if( pos == -1 ) {
@set_window 1;
@set_cursor 5 0;
Center("Character Setup");
@set_window 0;
print "Use the UP and DOWN arrow keys to highlight your selection.^^";
print "Type [RETURN] to continue. >";
pos = 0;
}
@set_window
1;
for( i=7: i<12: i++ ) {
if( pos == i-7 ) ch = 1; else ch = 0;
@set_cursor i 0;
switch( i ) {
7: Center(" Begin using a preset character ", ch);
8: Center(" Select a preset character ", ch);
9: Center(" Randomly generate a new character ", ch);
10: Center(" Create your own character ", ch);
11: Center(" Quit ", ch);
}
}
!@set_cursor 19 29;
@set_window 0;
@read_char 1 -> ch;
swi
ch( ch ) {
129: if( pos == 0 ) pos = 4; else pos = pos - 1;
130, 32: if( pos == 4 ) pos = 0; else pos = pos + 1;
13:
if( pos == 0 ) {
for( i=0: i<6: i++ )
Stats-->i = PresetChars-->i;
FallThru = 1;
return;
}
if( pos == 1 ) {
print "^^Use the UP and DOWN arrow keys to select the character
you want.^^Press [RETURN] when you're finished. >";
if( PresetCharLoop() ) return;
pos = -1;
@erase_window 1;
}
if( pos == 2 ) {
print "^^A new set of attributes will appear each time you press
the [SPACE] bar.^^
Press [RETURN] to select a set that you like. >";
if( RandomCharLoop() ) return;
pos = -1;
@erase_window 1;
}
if( pos == 3 ) {
print "^^Use the UP and DOWN arrow keys to select an attribute.
Then use the LEFT and RIGHT arrow keys to adjust that
attribute.^^Press [RETURN] when you're finished. >";
if( CreateChar() ) return;
pos = -1;
@erase_window 1;
}
if( pos == 4 ) { new_line; QuitRoutine(); pos = -1; }
}
}
];
[ CharacterSetup;
@erase_window -1;
@split_window 16;
@set_window 1;
@set_cursor 5 0;
Center("Character Setup");
new_line;
Center(" Begin using a preset character ");
Center(" Select a preset character ");
Center(" Randomly generate a new character ");
Center(" Create your own character ");
Center(" Quit ");
@set_window 0;
SetupLoop(-1);
];
[ SetupPreset;
PresetChars-->0 = 16; !Lucky
PresetChars-->1 = 8;
PresetChars-->2 = 8;
PresetChars-->3 = 8;
PresetChars-->4 = 1;
PresetChars-->5 = 25;
PresetChars-->6 = 30; !Tank
PresetChars-->7 = 16;
PresetChars-->8 = 8;
PresetChars-->9 = 1;
PresetChars-->10 = 1;
PresetChars-->11 = 10;
PresetChars-->12 = 18; !Muscles
PresetChars-->13 = 20;
PresetChars-->14 = 18;
PresetChars-->15 = 4;
PresetChars-->16 = 1;
PresetChars-->17 = 5;
PresetChars-->18 = 12; !Nimble
PresetChars-->19 = 14;
PresetChars-->20 = 20;
PresetChars-->21 = 4;
PresetChars-->22 = 1;
PresetChars-->23 = 15;
PresetChars-->24 = 12; !Genius
PresetChars-->25 = 10;
PresetChars-->26 = 8;
PresetChars-->27 = 16;
PresetChars-->28 = 5;
PresetChars-->29 = 15;
PresetChars-->30 = 12; !Saint
PresetChars-->31 = 10;
PresetChars-->32 = 8;
PresetChars-->33 = 8;
PresetChars-->34 = 16;
PresetChars-->35 = 12;
];
[ SelectName;
if( true ) rfalse;
while( true ) {
if( Strlen(MyName) > 24 )
print "^That name is too long. Please supply another.^";
else if( FunnyChar(MyName) )
print "^That name is silly. Please supply another.^"; }
];
[ StartUp i;
CharacterSetup();
for( i=6:i<12:i++ )
Stats-->i = Stats-->(i-6);
if( FallThru == 0 ) {
SexSetup();
SelectName();
}
];
[ CharacterVerify;
print "^Are you sure ", (string) MyName, " is the character you want?^";
return YesOrNo(1);
];
[ Initialise i;
ScreenWidth = 0->33;
ScreenHeight = 0->32;
for( i=0:i<18:i++ ) {
if( i < 6 )
Stats-->i = 1;
else
Stats-->i = 0;
}
SetupPreset();
PrintBanner();
do {
MyName = "Frank Booth";
Startup();
} until ( FallThru ||
CharacterVerify() );
print "^^Press any key to begin the story. >";
@read_char 1 -> i;
@erase_window -1;
print "^^^";
location = Tavern;
move Sword to player;
move Pack to player;
];
[ NotifyStat ndex change orig last;
style bold;
print "^[Your ";
switch( ndex ) {
0: print "endurance";
1: print "strength";
2: print "dexterity";
3: print "intelligence";
4: print "compassion";
5: print "luck";
}
print " just went ";
if( last + change == orig )
print "is back to normal";
else if( change < 0 )
print "down";
else
print "up";
print ".]^";
style roman;
];
[ TimePasses i;
for( i=0: i<6: i++ ) {
if( Stats-->(i + 12) ~= 0 ) {
NotifyStat(i, Stats-->(i+12), Stats-->i, Stats-->(i+7));
Stats-->(i+6) = Stats-->(i+6) + Stats-->(i+12);
Stats-->(i+12) = 0;
if( Stats-->(i+6) > Stats-->i )
Stats-->(i+6) = Stats-->i;
}
}
];
[ DrawStatusLine x i; @
split_window 2;
@set_window 1;
@set_cursor 1 1;
style reverse;
spaces ScreenWidth; new_line; spaces ScreenWidth;
@set_cursor 1 2;
print (string) MyName;
x = ScreenWidth - 41;
@set_cursor 1 x;
for( i=0: i<=6: i++ ) {
switch( i ) {
0: print "EN"; 1: print "ST"; 2: print "DX"; 3: print "IQ";
4: print "CM"; 5: print "LK"; 6: print "AC";
}
print ":";
if( i == 6 )
PrintNum(AC, 1, 2);
else
PrintNum(Stats-->(i+6), 1, 2);
print " ";
}
@set_cursor 2 2;
print (name) location;
@set_cursor 1 1;
style roman;
@set_window 0;
];
[ HelpMenu;
switch( menu_item ) {
0: item_width = 7; item_name = "About This Game";
return 4;
1: item_width = 6; item_name = "Instructions";
2: item_width = 9; item_name = "Original Transcript";
3: item_width = 10; item_name = "Credits and Copyright";
4: item_width = 7; item_name = "The IF-Archive";
}
];
[ HelpInfo;
switch( menu_item ) {
1: print "Instructions will go here.^^";
FormatText("%BNote:%P Some older, non-Frotzian interpreters have some trouble with the full
screen character setup.
My apologies. I was too lazy to bother with trying them out and fixing up special routines
for them. I used Frotz 2.32 under Unix with ncurses.^");
2: print "^Tavern^
You're in a dark and smoky tavern, filled to capacity with soldiers, louts, and other misfits
like yourself. The ringing of glasses is almost drowned out by the din of drunken voices. An
exit lies to the east.^
Sitting at a nearby table is a grizzled warrior.^^
>BUY A DRINK^
Unfortunately, you've already spent your last zorkmid.^^
>WARRIOR, HELLO^
~Sit down, sonny!~^
^
>SIT DOWN^
You sit down at the table.^
^
>WARRIOR, WHO ARE YOU?^~
~Zot Brastar's the name!~ roars the warrior, clasping your hand in an iron grip. He reaches
under the table and reveals a bright, round object. It's just what you've been looking for - a
glow-in-the-dark plastic replica of the legendary Stone of Dreams!^^";
print ">ASK ZOT ABOUT THE REPLICA^
~Nice little trinket, eh? The dragon I stole it from thought so, too.~^
^
>ZOT, GIVE IT TO ME^
~Not so fast, boy!~ chuckles Zot, leaning closer. ~You can have the stone -
if you bring me the egg of the Queen Corbie.~^^
>STAND UP^
You are back on your feet.^
^
>GO EAST^
You leave the tavern, gasping for fresh air.^
^
Road^
You're standing on a dirt road outside the tavern. A Magick Shoppe stands
to the east, and a dark alley leads north. Looking south, you see the
snowy peaks of a distant mountain.^^
>INVENTORY [in Beyond Zork, many commands can be shortened using the
function keys. For example, function key 2 is preset to INVENTORY.]^
You are carrying a sword. You are wearing a pack.^^
>NAME THE SWORD ~RALPH~^
You invoke the Spell of Naming, and the sword basks in the glow of a
new-forged synonym. Henceforth, you may refer to it as ~Ralph.~^^";
print ">WIELD RALPH^
You are now wielding Ralph.^
^
Alley^
You're in a dark alley with exits to the south and west. Unpleasant
aromas waft from heaps of garbage.^
A trash imp is grinning at you maliciously.^
^
>W^
The trash imp blocks your path! With a wicked laugh, the trash imp jabs
you with his fork.^
[Your endurance just went down.]^^
>ATTACK THE TRASH IMP^
[with Ralph]^
Ralph noticeably wounds the trash imp.^
The trash imp barely grazes you with his fork.^^
>PARRY^
You leap to avoid the trash imp's fork.^
The trash imp strikes out at you, but misses.^
^
>THRUST^
You deal the trash imp a decisive blow with Ralph!^
The trash imp disintegrates into a pile of garbage.^
[Your experience just went up.]^
^
>WEST^
Alley^
You're in a dirty alley, with an exit to the east.^
A jagged hole is visible in the sidewall.^
^
>LOOK INTO THE HOLE^
You see only darkness.^
^
>REACH INTO THE HOLE^
You grasp a thin piece of wood and pull it out. It looks like a magic wand!^
^
>E THEN S^
Alley^
Road^
^
>EAST^
Magick Shoppe^";
print "You're in Ye Olde Magick Shoppe. Shelves groan with forbidden books,
bubbling potions, and other fun items. An old woman is standing behind
the counter.^^
>SHOW THE WAND TO THE OLD WOMAN^
The old woman takes the wand and turns it over in her hands. ~Hmm,~ she
says, ~a rare magic item, indeed! This is a Zorch wand, which can transform
any creature into a reptile. Please be careful - it's not a toy.~^
She hands the wand back to you.^^
>WEST^
~Please try our new Partay spell, with a money-back guarantee!~^
^
Road^
^
>SOUTH^
Mountain Base^";
print "You're at the bottom of a huge mountain. A steep, rocky path leads
upwards. Open areas lie to the west and east.^^
>UP^
You try to scramble up the path, but it's much too steep.^
^
>EAST^
Pasture
You are standing in a wide, green field of grass.^
A bored-looking mountain greech is feeding in the tall grass.^
^
>RIDE THE GREECH^
The greech trots away from you, and pulls up another clump of grass.^
^
>PET IT^
The greech sniffs your fingers, decides they are not worth eating,
and mouths another clump of grass.^^
>FEED THE GREECH^
You have nothing to feed the greech.^
^
>DROP THE SWORD^
Dropped.^
^
>POINT THE MAGIC WAND AT THE GREECH^
POOF! The greech turns into an iguana, and scurries out sight.^
^
>UNDO^
Pasture^
You are standing in a wide, green field of grass.^
A bored-looking mountain greech is feeding in the tall grass.^
Ralph is here.^
^
>TAKE THE SWORD^
Taken.^
^
>WEST^
Mountain Base^
^
>WEST^
Garden^";
print "You're standing in a lovely garden, surrounded by exotic flowers.
A red tulip and a blue tulip are growing at your feet.^
^
>PICK TULIP ^
[which tulip do you mean, the red tulip or the blue tulip?]^
^
>BLUE^
The blue tulip pulls out of the ground with a muffled ~pop.~^
Mountain Base^
Pasture^
A bored-looking mountain greech is feeding in the tall grass.^
^
>FEED THE TULIP TO THE GREECH^
The greech's eyes light up when it sees the blue tulip. It grabs
it out of your hand, gobbles it down, and gives you a hopeful bleat.^^
>RIDE THE GREECH^
The greech reluctantly allows you to climb onto its back.^
^
>W^
The greech trots across the grass.^
Mountain Base, on a greech^
^
>NAME GREECH ~ZEKE~^";
print "You invoke the Spell of Naming, and the greech basks in the glow
of a new-forged synonym. Henceforth, you may refer to it as ~Zeke.~^^
>UP^
Zeke walks up the path with ease, climbing confidently over the rocks.^
^
Ledge, on Zeke^
You're on a narrow ledge near the top of the mountain. A path leads
downward. About ten feet above you is the peak, which appears to be
covered with straw.^^
>UP^
Zeke shakes his head, refusing to climb any higher. ^
^
>GET OFF^
[Zeke]^
You are back on your feet.^
^
>UP^
Nest^
You're in a huge straw nest, lined with brightly-colored string and
the skeletons of small, unfortunate animals. A giant purple egg lies
in the middle of the nest.^^
>TAKE THE EGG^
As you reach for the egg, you hear a terrible squawking from above, and a pair
of talons zooms out of the sky! The Queen Corbie lands in the nest and
screams at you, her eyes red with anger.^^";
print ">ATTACK COSBIE^
[The word ~cosbie~ isn't in the vocabulary you can use.]^
^
>OOPS CORBIE ^
You swing at the Queen Corbie with Ralph, but she flutters out of reach!^
The corbie lashes out with her razor-sharp beak. Ouch!^
[Your endurance just went down.]^
^
>POINT WAND AT CORBIE^
POOF! The corbie turns into a large gila monster, scurries out of the
nest and tumbles out of sight.^^
>GET EGG^
Taken.^
^
>DOWN^
Ledge^
Zeke is here, looking at you happily.^
^
>DOWN^";
print "As you climb down the path, you trip and fall! You slide down to the
bottom unhurt, but the egg falls from your hand and shatters on the ground.^^
Mountain Base^
You see a large but dead gila monster and a scrambled egg here.^
^
>UNDO^
Ledge^
Zeke is here, looking at you happily.^
^
>INVENTORY^
You are carrying Ralph, a giant purple egg and a wand. You are wearing a pack.^
^
>PUT THE EGG IN THE PACK^
You put the giant purple egg in the pack.^
^
>RIDE ZEKE^
Zeke allows You to climb onto his back.^
^
>DOWN^
Zeke picks its way down the slope.^
^
Mountain Base, on Zeke^
You see a large but dead gila monster here.^
^
>N.W^
Zeke carries you along, walking steadily.^
^
Road, on Zeke^
A passing constable growls, ~No greeches allowed in the tavern.~^
^
>GET OFF ZEKE^
You are back on your feet.^
^
>W^
Tavern^";
print "A grizzled warrior sits at a nearby table. He's holding a glow-in-the-dark
plastic replica of the legendary Stone of Dreams.^^
>SIT DOWN^
~Welcome back, sonny!~^
^
>GIVE THE EGG TO ZOT^
You'll have to take the egg out of the pack first.^
^
>TAKE THE EGG^
You take the giant purple egg out of the pack.^
^
>GIVE THE EGG TO THE WARRIOR^
You give the egg to the warrior. ~Hey, thanks!~ he says.^
^
>WARRIOR, GIVE ME THE PLASTIC STONE^
~Oh, this thing? Sure, you can have it. But first, there's this
grue's fang I've been hankering after...~^^";
FormatText(" %B[END OF TRANSCRIPT]%P^^");
3:
FormatText("The transcript upon which this game is based is
copyrighted by %BInfocom%P, 1987. The rights today belong
to %BActivision%P, and no attempts have been made to secure
permission from them. From their track record, they probably
don't care about this obscure use of a by-product of one of
their old Infocom games. This certainly can't be any worse
than the %BHugo%P port of Zork.^^");
FormatText("This transcript programmed in %BInform%P by Allen Garvin for
no apparent reason (well, actually, he was bored and decided to
program in one of the example transcripts for fun--%BBeyond Zork%P's
was the most complete and self-contained); he can be reached at
%Bearendil@@64faeryland.tamu-commerce.edu%P. All code may be freely
distributed and modified, as long as no commercial profit is
involved. It'd be kinda neat if people made full games out of
the transcripts of this or other Infocom games.^^");
4: FormatText("There is an archive of Interactive Fiction at
%Bftp.gmd.de%P, in the directory /if-archive, maintained by Volker
Blasius and open to anonymous %BFTP%P. This repository contains
adventure games for almost every computer platform, as well as
%BInform%P, the compiler that was used to write this game.^^");
}
];
[ HelpSub;
DoMenu("There is information provided on the following:^
^ Instructions
^ Original Transcript
^ Credits and Copyright Information
^ The IF-Archive at FTP.GMD.DE^", HelpMenu, HelpInfo);
];
[ ReachInSub;
if( noun hasnt container )
"You can't reach into that.";
if( noun hasnt open )
print_ret (The) noun, " is not open.";
if( child(noun) )
"There is something inside ", (the) noun, ".";
"You reach around inside ", (the) noun, " but feel nothing.";
];
[ PointSub;
"You point ", (the) noun, " at ", (the) second, ", but nothing unusual happens.";
];
[ SitDownSub x;
objectloop( x in location ) {
if( x has supporter && x has enterable )
<< Enter x >>;
}
"There is no place to sit here.";
];
[ PetSub; print_ret (The) noun, " wouldn't appreciate that."; ];
[ SlaverSub; "Leave the slavering to the grues."; ];
[ GreetSub; "Hello to you, too."; ];
[ GreetPersonSub; "There is no response."; ];
[ XyzzySub; "A hollow voice says, ~Fool!~"; ];[ MagicSpellSub; "Such magic lies far beyond your meager abilities."; ];
[ KnockSub; "There's no answer."; ];
Verb "reach"
* "in"/"into" noun -> ReachIn;
Verb "point"
* held "at" noun -> Point;
Extend "sit" replace
* -> SitDo
* "at"/"on" noun -> Enter
* "down" -> SitDown
* "down" "at" noun -> Enter;
Verb "pet" "pat"
* creature -> Pet;
Verb "slaver" "drool"
* -> Slaver
* "on"/"onto" -> Slaver;
Verb "greet" "hi" "hello" "salute" "greetings"
* -> Greet
* creature -> GreetPerson;
Verb "help" "hints" "hint"
* -> Help;
Verb "xyzzy"
* -> Xyzzy;
Verb "frotz"
* noun -> MagicSpell;
Verb "knock"
* noun -> Attack
* "on" noun -> Knock;