/*
* This is a proposal of a replacement to std.h. It is used with
* 'inherit "room/room";'.
* All global variables below are supposed to be setup by the reset()
* in the function that inherits this file.
*/
/* An array with destinations and directions: "room/church", "north" ... */
static string dest_dir;
/* Short description of the room */
static string short_desc;
/* Long description of the room */
static string long_desc;
/* Special items in the room. "table", "A nice table", "window", "A window" */
static string items;
/* Fact about this room. ex: "no_fight", "no_steal" */
static string property;
/* No castles are allowed to be dropped here */
static int no_castle_flag;
init() {
int i;
if (!dest_dir)
return;
i = 1;
while(i < sizeof(dest_dir)) {
add_action("move", dest_dir[i]);
i += 2;
}
}
id(str) {
int i;
if (!items)
return;
while(i < sizeof(items)) {
if (items[i] == str)
return 1;
i += 2;
}
return 0;
}
long(str) {
int i;
if (set_light(0) == 0){
write("It is dark.\n");
return;
}
if (!str) {
write(long_desc);
if (!dest_dir)
write(" No obvious exits.\n");
else {
i = 1;
if (sizeof(dest_dir) == 2)
write(" There is one obvious exit:");
else
write(" There are " + convert_number(sizeof(dest_dir)/2) +
" obvious exits:");
while(i < sizeof(dest_dir)) {
write(" " + dest_dir[i]);
i += 2;
if (i == sizeof(dest_dir) - 1)
write(" and");
else if (i < sizeof(dest_dir))
write(",");
}
write("\n");
}
return;
}
if (!items)
return;
i = 0;
while(i < sizeof(items)) {
if (items[i] == str) {
write(items[i+1] + ".\n");
return;
}
i += 2;
}
}
/*
* Does this room has a special property ?
* The 'property' variable can be both a string and array of strings.
* If no argument is given, return the 'property' variable.
*/
query_property(str) {
int i;
if (str == 0)
return property;
if (!property)
return 0;
if (stringp(property))
return str == property;
while(i < sizeof(property)) {
if (property[i] == str)
return 1;
i += 1;
}
return 0;
}
move(str) {
int i;
i = 1;
while(i < sizeof(dest_dir)) {
if (query_verb() == dest_dir[i]) {
this_player()->move_player(dest_dir[i] + "#" + dest_dir[i-1]);
return 1;
}
i += 2;
}
}
short() {
if (set_light(0))
return short_desc;
return "Dark room";
}
query_dest_dir() {
return dest_dir;
}
query_long() {
return long_desc;
}
/*
* Convert a number to a word. The array is being created by the
* standard room/room, and shared by all rooms.
*/
static string numbers;
convert_number(n) {
if (!pointerp(numbers))
numbers = query_numbers();
if (n > 9)
return "lot of";
return numbers[n];
}
query_numbers() {
if (!numbers) {
if (file_name(this_object()) == "room/room")
numbers = ({"no", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine" });
else
numbers = call_other("room/room", "query_numbers");
}
return numbers;
}
query_drop_castle() {
return no_castle_flag;
}