/* * 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" ... */ string * dest_dir; /* Short description of the room */ string short_desc; /* Long description of the room */ string long_desc; /* Special items in the room. "table", "A nice table", "window", "A window" */ string * items; /* Fact about this room. ex: "no_fight", "no_steal" */ mixed property; /* No castles are allowed to be dropped here */ int no_castle_flag; string convert_number(int n); string * query_numbers(); void init() { int i; if (!dest_dir) return; i = 1; while(i < sizeof(dest_dir)) { add_action("move", dest_dir[i]); i += 2; } } int id(string str) { int i; if (!items) return 0; while(i < sizeof(items)) { if (items[i] == str) return 1; i += 2; } return 0; } void long(string 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. */ mixed query_property(string 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; } int move(string 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; } return 1; } string short() { if (set_light(0)) return short_desc; return "Dark room"; } string * query_dest_dir() { return dest_dir; } string 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. */ string * numbers; string convert_number(int n) { if (!pointerp(numbers)) numbers = query_numbers(); if (n > 9) return "lot of"; return numbers[n]; } string * query_numbers() { if (!numbers) { if (object_name(this_object()) == "room/room") numbers = ({"no", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }); else numbers = "room/room"->query_numbers(); } return numbers; } int query_drop_castle() { return no_castle_flag; }