/* * 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; }