!--------------------------------------------------------------------------
! Example demonstrating "property_list", an exciting new feature in Library
! release 5/9.
!
! Graham Nelson, 2/95
!--------------------------------------------------------------------------
Constant Story "LIST PROPERTY";
Constant Headline "^An Interactive Example^Copyright (c) 1995 by Graham \
Nelson.^";
Constant MAX_CARRIED 8;
Include "parser";
Object travel_bag "travel bag"
has container openable open
with name "travel" "bag";
Constant SACK_OBJECT travel_bag;
Include "verblib";
Include "grammar";
[ Initialise;
location = Lost_Property;
move travel_bag to player;
print "^^^^^Fancy inspecting a miscellany? Go on, you know you \
do...^^";
];
Object Lost_Property "Lost Property Office"
has light
with description "A dusty, echoing room with a green baize table.";
Nearby table "green baize table"
has scenery supporter
with name "green" "baize" "table";
Class plastic_cutlery
with name "plastic" "cutlery", article "a plastic",
list_together [;
if (inventory_stage ~= 1) rfalse;
if (c_style & NOARTICLE_BIT == 0) c_style=c_style+NOARTICLE_BIT;
if (c_style & ENGLISH_BIT == 0) c_style=c_style+ENGLISH_BIT;
if (c_style & NEWLINE_BIT ~= 0) c_style=c_style-NEWLINE_BIT;
if (c_style & INDENT_BIT ~= 0) c_style=c_style-INDENT_BIT;
print "a plastic ";
];
Nearby fork "fork" class plastic_cutlery with name "fork";
Nearby knife "knife" class plastic_cutlery with name "knife";
Nearby spook "spoon" class plastic_cutlery with name "spoon";
Class hat_class has clothing with list_together "hats", name "hat" "hats";
Nearby hat1 "fez" class hat_class with name "fez";
Nearby hat2 "Panama" class hat_class with name "panama";
Nearby hat3 "sombrero" class hat_class with name "sombrero";
Attribute is_letter;
Class letter
has is_letter
with list_together [;
if (inventory_stage==1) {
print "the letters ";
c_style = c_style | (ENGLISH_BIT + NOARTICLE_BIT);
if (c_style & NEWLINE_BIT ~= 0) c_style = c_style-NEWLINE_BIT;
if (c_style & INDENT_BIT ~= 0) c_style = c_style-INDENT_BIT;
}
else
print " from a Scrabble set";
],
short_name [;
if (listing_together has is_letter) rfalse;
print "letter ", object self, " from a Scrabble set";
rtrue;
],
article "the";
Nearby s1 "X" class letter with name "x";
Nearby s2 "Y" class letter with name "y";
Nearby s3 "Z" class letter with name "z";
Nearby s4 "P" class letter with name "p";
Nearby s5 "Q" class letter with name "q";
Nearby s6 "R" class letter with name "r";
Nearby cake "defrosting Black Forest gateau"
with name "black" "forest" "gateau" "cake",
has edible;
Nearby punch "Punch magazine"
has proper
with name "punch" "magazine",
description "Five years out of date by the cover, a hundred by \
the contents.",
list_together 1;
Nearby spectator "issue of the Spectator"
with name "spectator" "issue" "magazine", article "a recent",
description "Up to date by the cover, a nightmare view of the \
future within.",
list_together 1;
Nearby die "die"
with name "die" "dice",
after [;
Drop: print "It comes up ", random(6); "!";
];
Attribute is_coin;
Class coin_class
has is_coin
with name "coin",
description "A round unstamped disc, presumably local currency.",
parse_name [ i j w;
if (parser_action==##TheSame) {
if ((parser_one.&name)-->0 == (parser_two.&name)-->0)
return -1;
return -2;
}
w = (self.&name)-->0;
for (: : i++) {
j = NextWord();
if (j == 'coins') parser_action = ##PluralFound;
else if (j ~= 'coin' or w) return i;
}
],
list_together "coins",
plural [;
print_addr (self.&name)-->0;
if (listing_together hasnt is_coin) print " coins";
],
short_name [;
if (listing_together has is_coin) {
print_addr (self.&name)-->0;
rtrue;
}
],
article [;
if (listing_together has is_coin) print "one";
else print "a";
];
Class gold_coin_class class coin_class with name "gold";
Class silver_coin_class class coin_class with name "silver";
Class bronze_coin_class class coin_class with name "bronze";
Nearby coin1 "silver coin" class silver_coin_class;
Nearby coin2 "silver coin" class silver_coin_class;
Nearby coin3 "silver coin" class silver_coin_class;
Nearby coin4 "silver coin" class silver_coin_class;
Nearby coin5 "bronze coin" class bronze_coin_class;
Nearby coin6 "gold coin" class gold_coin_class;
Nearby coin7 "gold coin" class gold_coin_class;
Nearby coin8 "gold coin" class gold_coin_class;