BSD 4_2 development
[unix-history] / usr / src / games / ddl / sample / objects.ddl
ADJECTIVE red,green,blue,clear;
ADJECTIVE glass;
NOUN red message(road2); { It's red so there can be others elsewhere }
red message(WEIGH) = CAPAC;
red message(LDESC) = ($say "There is a message scratched in the dirt.\n");
red message(SDESC) = ($say "a message in the dirt");
red message(ACTION) = (($eq ($verb) read):
($say "'in' is a preposition. 'enter' is a verb.\n")
($exit 1)
);
NOUN keys (town4);
keys(WEIGH) = 2;
keys(LDESC) = ($say "There's a set of keys here.\n");
keys(SDESC) = ($say "a set of keys");
NOUN toolbox (farm5);
toolbox(WEIGH) = CAPAC;
toolbox(HOLDS) = 50;
toolbox(OPENS) = TRUE;
toolbox(LOCKS) = TRUE;
toolbox(LOCKD) = TRUE;
toolbox(LIGHT) = TRUE;
toolbox(LDESC) = (($eq ($loc .ME) toolbox):
($say
"You are in a huge wooden structure, towering up at least 80 feet
above your head, with wooden walls formed of immense 10-foot by 50-foot
boards. Everything here, even the grains of dust which cover the wooden
floor, seems immense. ")
(($prop toolbox OPEN):
($say
"Above your head, the top of the structure is open,
and sunlight streams in.\n")
: ($say
"The structure is closed at the top, but
enough light comes in from between the boards to enable you to see.\n")
)
: {else} ($say
" Against
the house is a heavy ")
(($prop toolbox OPEN):
($say "toolbox with the lid open.\n")
{ (($cont toolbox) :
($say "In the toolbox, you see:\n")
($setp toolbox CONTS TRUE)
(Slook 1 ($cont toolbox))
($setp toolbox CONTS FALSE)
)}
:{else} (($prop toolbox LOCKD) :
($say "toolbox with a rusty lock, painted
with an insignia composed of blue and green squares, joined at
their corners.\n") :
($say "toolbox, the lid of which is ajar.\n")
)
)
);
toolbox(SDESC) =
(($eq ($loc .ME) toolbox):
($say "Inside huge box.\n")
:{else} ($say "a toolbox"));
toolbox(ACTION) =
(($eq ($loc .ME) toolbox) :
(($or ($eq ($verb) drop)
($eq ($verb) throw)):
($say "You just lost ")(($sdisc ($dobj)))
($say " in a crack between the wooden floorboards!\n")
($move ($dobj) .ALL)
)
($miss cg cg cg cg cg cg cg cg cg cg)
{else} :
(($eq ($verb) lock):
(Lockup toolbox keys "The toolbox seals with a CLICK!\n"))
(($eq ($verb) unlock):
(Ulock toolbox keys
"One of the keys fits! The toolbox can be opened now.\n")
)
);
NOUN signpost(roadx);
signpost(RDLOC)=10;
signpost(WEIGH)=CAPAC;
signpost(LDESC)=($say "There is a signpost by the side of the road.\n");
signpost(SDESC)=($say "a signpost");
signpost(ACTION) = (($eq ($verb) read):
($say
"Pointing east, it says: 'Unuchevala: 10 miles'\n")
($exit 1)
);
NOUN globe(toolbox);
globe(WEIGH) = 20;
globe(LDESC) = (($prop globe LIGHT):
($say "A globe of stone glows brightly here.\n")
{else}:
($say "There is a strange globe of polished stone here.\n")
);
globe(SDESC) = (($prop globe LIGHT): ($say "a glowing globe of stone")
: ($say "a stone globe"));
globe(ACTION) = (($eq ($verb) rub):
(($prop globe LIGHT):
($say "The light from the stone globe fades away.\n")
($setp globe LIGHT FALSE)
{else}:
($say "The stone globe glows brightly!\n")
($setp globe LIGHT TRUE)
)
($setg LOOKP TRUE)
($exit 1)
)
;
NOUN crowbar (town3);
crowbar(WEIGH) = 100;
crowbar(LDESC) = ($say "There is a long crowbar here.\n");
crowbar(SDESC) = ($say "a crowbar");
crydie =
($say
"What POWER! The magic crystal releases a flood of energy in
a split-second! Unfortunately, you were a little close...\n")
(die);
{ Dragon Stuff }
AWAKE=MISC1;
NOUN dragon (cel06);
white=clear;
NOUN green crystal(cel07);
NOUN red crystal(cel08);
NOUN blue crystal(cel10);
NOUN clear crystal(cel09);
{NOUN diamond { = clear crystal;
{NOUN sapphire{= blue crystal;
{NOUN ruby (cel08){= red crystal;
{NOUN emerald (cel07){= green crystal;}
green crystal(WEIGH)=15;
green crystal(POINT)=25;
green crystal(LDESC) = ($say "There is a beautiful green crystal here!\n");
green crystal(SDESC) = ($say "a green crystal");
green crystal(ACTION) =
(($eq ($verb) take):
(($eq ($loc .ME) cel07):
(($not ($prop dragon AWAKE)):
($say "You hear a stirring in the Ice Cavern.\n")
($setg Tempr ($plus @Tempr 2))
($setp dragon AWAKE TRUE)
($setp cel06 VISIT FALSE)
:{else} ($setg Tempr 0)
)
)
)
(($eq ($verb) drop):
(($eq ($loc .ME) cel07):
($setg Tempr ($minus @Tempr 2))
(($le @Tempr 0) :
($setp dragon AWAKE FALSE)
($say
"You hear a deep Y A W N from the Cavern.\n"))
($setp cel06 VISIT FALSE)
)
)
(($eq ($verb) touch):
(($eq ($dobj) [red crystal]) :
($say "The red and green crystals flare briefly!\n")
(Grow)
($move .ME cel01)
($setg LOOKP TRUE)
($exit 1)
)
(($eq ($dobj) [blue crystal]) :
($say "The blue and green crystals flare briefly!\n")
($move .ME toolbox)
(Shrink)
($setg LOOKP TRUE)
($exit 1)
)
)
(($eq ($verb) break):
(($eq ($dobj) [green crystal]):
(crydie)
)
);
ROUTINE CRout;
WORKD = MISC1; { Has Clear crystal shed its light? }
red crystal(WEIGH)=15;
red crystal(POINT)=25;
red crystal(LDESC) = ($say "There is a beautiful red crystal here!\n");
red crystal(SDESC) = ($say "a red crystal");
red crystal(ACTION) =
(($eq ($verb) touch):
(($eq ($dobj) [clear crystal]) :
(($not ($prop [clear crystal] WORKD)):
($say "The red and clear crystals flare briefly!\n")
($setp [clear crystal] WORKD TRUE)
($setp [clear crystal] LIGHT TRUE)
($say
"The clear crystal blazes forth with a magical incandescence brilliant
enough to penetrate even the deepest darkness!!\n\n")
($sfus CRout 4)
($setg LOOKP TRUE)
($exit 1)
{else} :
($say
"The clear crystal seems curiously inert now.\n")
($exit 1)
)
)
(($eq ($dobj) [green crystal]) :
($say "The red and green crystals flare briefly!\n")
(Grow)
($move .ME cel01)
($setg LOOKP TRUE)
($exit 1)
)
)
(($eq ($verb) break):
(($eq ($dobj) [red crystal]):
(crydie)
)
);
blue crystal(WEIGH)=15;
blue crystal(POINT)=25;
blue crystal(LDESC) = ($say "There is a beautiful blue crystal here!\n");
blue crystal(SDESC) = ($say "a blue crystal");
blue crystal(ACTION) =
(($eq ($verb) touch):
(($eq ($dobj) [red crystal]) :
($say "The red and blue crystals flare briefly!\n")
($exit 1)
)
(($eq ($dobj) [green crystal]) :
($say "The blue and green crystals flare briefly!\n")
($move .ME toolbox)
(Shrink)
($setg LOOKP TRUE)
($exit 1)
)
)
(($eq ($verb) break):
(($eq ($dobj) [blue crystal]):
(crydie)
)
);
CRout = ($say "The glowing magical crystal seems to have gone dark.\n> ")
($setp [clear crystal] LIGHT FALSE)
;
clear crystal(WEIGH)=15;
clear crystal(POINT)=25;
clear crystal(LDESC) = ($say "There is a beautiful clear crystal here")
(($prop [clear crystal] LIGHT): ($say " (GLOWING!)"))
($say "!\n");
clear crystal(SDESC) = ($say "a clear crystal")
(($prop [clear crystal] LIGHT): ($say " (GLOWING!)"))
;
clear crystal(ACTION) =
(($eq ($verb) touch):
(($eq ($dobj) [red crystal]) :
(($not ($prop [clear crystal] WORKD)):
($say "The red and clear crystals flare briefly!\n")
($setp [clear crystal] WORKD TRUE)
($setp [clear crystal] LIGHT TRUE)
($say
"The clear crystal blazes forth with a magical incandescence brilliant
enough to penetrate even the deepest darkness!!\n\n")
($setg LOOKP TRUE)
($sfus CRout 4)
($exit 1)
{else} :
($say
"The clear crystal seems curiously inert now.\n")
($exit 1)
)
)
)
(($eq ($verb) break):
(($eq ($dobj) [red crystal]):
(crydie)
)
);
ROUTINE DRdem; { Dragon Daemon. Increases temper in .my presence }
DRdem= (($not ($prop dragon AWAKE)): ($exit 0))
(($eq ($loc .ME) ($loc dragon)):
(($eq ($loc [green crystal]) .ME): { even worse! }
($setg Tempr ($plus @Tempr 1)))
($setg Tempr ($plus @Tempr 1)) )
{ ($say "His temper is now at ")($num @Tempr)($say "\n") }
(($ge @Tempr 7):
($say
"Jeez, I didn't know ice dragons could reach their boiling point!
In a final flare of rage, he opens his mouth and breathes his frigid
breath in a blast in your direction. It's a bit much for you.\n")
(die)
)
(($ge @Tempr 6) :
($say "Gee, he looks like he's really at the edge!\n")
($exit 0))
(($ge @Tempr 5) :
($say "This is one upset dragon! Be careful!\n")
($exit 0))
(($ge @Tempr 3) :
($say "He's getting angrier...\n")($exit 0))
;
dragon(WEIGH)=CAPAC;
dragon(LDESC)=
(($prop dragon AWAKE):
($say
"There is a fierce ice dragon glaring balefully in your direction.\n")
:{else}
($say
"There is a large white dragon sleeping peacefully in the middle
of the cavern floor.\n")
)
(DRdem);
dragon(SDESC)=
(($prop dragon AWAKE): ($say "a fierce dragon")
: ($say "a somnolent dragon")
)
(@LOOKP: ($say "\n") (DRdem))
;
dragon(ACTION)= { Man, the things you can try here... }
(($prop dragon AWAKE): { This is the harder stuff }
(($eq ($verb) strike):
($say "This just seems to get him angrier!\n")
($setg Tempr ($plus @Tempr 1))
($exit 1))
(($eq ($verb) throw):
(($eq ($iobj) dragon):
(($gt ($prop ($dobj) WEIGH) 75):
($say
"This just bruises him! Now he's getting mad!\n")
($setg Tempr ($plus @Tempr 1))
($exit 1) :
{else}
($say
"That object is just too light to hurt him.\n")
($exit 1)
)
: ($say "This amuses the dragon no end!\n")
($exit 1)
)) { end of Throw case}
:{else}
{ he's snoozing}
(($eq ($verb) wake):
($say "You manage to waken him. He's not happy.\n")
($setg Tempr 1)
($setp dragon AWAKE TRUE)
($exit 1))
(($eq ($verb) strike):
($say "Now you woke him up! He's upset, too!\n")
($setg Tempr 2)
($setp dragon AWAKE TRUE)
($exit 1))
(($eq ($verb) throw):
(($eq ($iobj) dragon):
(($gt ($prop ($dobj) WEIGH) 75):
($say
"It's just heavy enough to waken him. The bruise doesn't help
his temper any either.\n")
($setp dragon AWAKE TRUE)
($setg Tempr 3)
($exit 1) :
{else}
($say
"That object is just too light to wake him.\n")
($exit 1)
)
: ($say "Don't hurt yourself trying!\n")
($exit 1)
)) { end of Throw case}
);
NOUN bed (farm7);
bed(WEIGH) = CAPAC;
bed(SDESC) = ($say "an old, rickety bed");
bed(ACTION) =
(($eq ($verb) move):
(($prop bed OPEN) :
($say "Stop messing with the bed, it's fragile!\n")
($exit 1)
)
($say
"Moving the bed seems to have loosened one of the wall panels
on the west wall.\n")
($setp bed OPEN TRUE)
($exit 1)
);
NOUN panel (farm7);
panel(OPENS) = TRUE;
panel(WEIGH) = CAPAC;
panel(ACTION) =
(($or ($eq ($verb) open)
($eq ($verb) pry) ):
(($and ($eq ($iobj) crowbar)
($eq ($loc crowbar) .ME)):
(($not ($prop bed OPEN)):
($say "There aren't any loose enough.\n")
($exit 1))
($say
"The loose panel comes away, revealing a secret stairway down, down...\n")
($setp panel OPEN TRUE)
{else}:
($say "You can't seem to get the panel open.\n")
)
($exit 1)
);
NOUN knife (farm6);
knife(LDESC)=
(($prop farm6 VISIT):
($say "There is a carving knife here.\n")
:{else} ($say "However,
on the table is a large carving knife (suitable for blind mice).\n")
);
knife(SDESC)=($say "a carving knife");
NOUN bottle(town6);
bottle (LDESC) = ($say "There is a bottle here.\n");
bottle (SDESC) = ($say "a bottle");
bottle (TRANS) = TRUE;
bottle (ACTION) =
(($eq ($verb) open):
($say "Hm, the bottle is somehow sealed shut.\n")
($exit 1))
(($eq ($verb) break):
($say "Wow, is that heavy glass! It won't break!\n")
($exit 1))
(($eq ($verb) strike):
(($eq ($iobj) bottle):
($say "Weird thing to do with it.\n")
: ($say "Nice try, but it isn't even scratched.\n")
)
($exit 1));
NOUN ship(bottle);
ship (LDESC) = ($say "There is a model ship here.\n");
ship (SDESC) = ($say "a model ship");
ship (POINT) = 50;
ROUTINE TWN5y;
NOUN well(town5);
well (WEIGH) = CAPAC;
well (ACTION) =
(($eq ($iobj) well):
(($eq ($verb) put):
(cdrop)
(TWN5y)
($exit 1)
)
);
NOUN insignia;
insignia (WEIGH) = CAPAC;
insignia (ACTION) = ($say "There's nothing useful to do with the insignia.\n")
($exit 1);
square=insignia;
NOUN glass box(cel08);
glass box(HOLDS)=1;
glass box(TRANS)=TRUE;
glass box(OPENS)=TRUE;
glass box(OPEN)=FALSE;
glass box(SHRNK)=TRUE; { First seen as a tiny box }
glass box(LDESC) =
(($eq ($prop .ME SHRNK) ($prop [glass box] SHRNK)):
($say "There is a big glass case here.\n")
($setp [glass box] WEIGH CAPAC)
($setp [glass box] HOLDS 50)
{else}:
(($prop .ME SHRNK):
($say
"Before you looms a huge glass wall, inscribed with the words,
'program error!'\n")
{else} :
($say
"There is a tiny glass box with a snap lid here.\n")
($setp [glass box] WEIGH 5)
($setp [glass box] HOLDS 1)
)
);
glass box(SDESC) =
(($eq ($prop .ME SHRNK) ($prop [glass box] SHRNK)):
($say "a glass case")
($setp [glass box] WEIGH CAPAC)
($setp [glass box] HOLDS 50)
{else}:
(($prop .ME SHRNK):
($say
"a huge glass wall, inscribed with the words,
'program error'")
{else} :
($say "a tiny glass box")
($setp [glass box] WEIGH 5)
($setp [glass box] HOLDS 1)
)
);
case=glass box;
NOUN sand(glass box);
sand(SHRNK)=TRUE;
sand(WEIGH)=1;
sand(LDESC)=(($and ($prop sand SHRNK)
($not ($prop .ME SHRNK))):
($setp sand POINT 0)
($say "There is a grain of sand here.\n")
{else}: ($say "There is a beautiful porcelain statue here!\n")
($setp sand POINT 50)
);
sand(SDESC)=(($and ($prop sand SHRNK)
($not ($prop .ME SHRNK))):
($setp sand POINT 0)
($say "a grain of sand") :
($say "a porcelain statue")
($setp sand POINT 50)
);
statue=sand;
sand(ACTION)=(($eq ($verb) take):
(($and ($prop sand SHRNK)
($not ($prop .ME SHRNK))):
($say "You fumble the grain of sand and lose it on the ground.\n")
($move sand .ALL)
($exit 1)
)
);
NOUN hole;
NOUN rock(road5);
rock(LDESC)=($say "There is a plain-looking rock here.\n");
rock(SDESC)=($say "an ordinary rock");
rock(ACTION)=
(($and ($eq ($verb) take)
($eq ($dobj) rock)):
($say "Mmph! Heavy!\n"));
rock(WEIGH)=100;
{
{NOUN saw(toolbox);
{saw(WEIGH) = 20;
{saw(LDESC) = ($say "There is a saw here.\n");
{saw(SDESC) = ($say "a saw");
{saw(ACTION) = (($eq ($verb) cut):
{ (($eq ($dobj) hole):
{ (($eq ($loc .ME) cel13):
{ (($prop cel13 HOLED):
{ ($say "There's already one here!\n")
{ ($exit 1)
{ :{else}
{ ($say
{"You cut a hole in the thick ice; icy water sloshes about two feet down.\n")
{ ($setp cel13 HOLED TRUE)
{ ($move hole cel13)
{ ($exit 1)
{ )
{ )
{ { cutting a hole somewhere else }
{ ($say "There's nowhere to cut a hole.\n")
{ ($exit 1)
{ )
{ ($say "The saw isn't used that way.\n")
{ ($exit 1)
{ ); /* I Know A better way to make a Hole */}