#include <terrain_map.h> inherit TERRAIN_MAP_AIR_BASE; void setup() { set_long("Flying up high in the air."); set_short("air room"); } void terrain_setup() { int* coords; int* ground_coords; string ground_room; string ground_base_str; coords = query_terrain_coords(); ground_room = query_terrain_handler()->query_ground_room(coords[0], coords[1]); ground_coords = ground_room->query_terrain_coords(); switch (coords[2] - ground_coords[2]) { case 0..100 : ground_base_str = ground_room->query_long(); set_long("Down below you see: " + ground_base_str); break; case 101..200 : set_long("Flying up high above " + ground_room->query_short() + "."); break; default : set_long("High up in the sky."); break; } } void event_enter(object ob) { // Flying or floating. if (ob->query_property("flying")) { return ; } call_out("plumet_down", 2, ob); } void plumet_down(object ob) { int* coords; int* ground_coords; class coord coords_real; class coord ground_coords_real; int z; int damage; int dist; object room; if (environment(ob) != this_object() || ob->query_property("flying")) { return ; } coords = query_terrain_coords(); ground_coords = query_terrain_handler()->query_ground_room_co_ords(coords[0], coords[1]); coords_real = query_terrain_handler()->query_real_from_terrain_coord(coords[0], coords[1], coords[2]); ground_coords_real = query_terrain_handler()->query_real_from_terrain_coord(ground_coords[0], ground_coords[1], ground_coords[2]); dist = coords_real->z - ground_coords_real->z; for (z = coords[2] - 1; z > ground_coords[2]; z--) { room = query_terrain_handler()->query_room_at(coords[0], coords[1], z); if (room) { tell_room(room, ob->the_short() + " plumets by on the way to the " "ground.\n"); } } // Hit the ground :) room = query_terrain_handler()->load_room_at(coords[0], coords[1], ground_coords[2]); tell_object(ob, "%^BOLD%^%^RED%^You find it hard to float and make a quick trip " + query_terrain_handler()->query_distance_str(dist) + " downwards.%^RESET%^\n"); // Figure out the damage. ob->move_with_look(room, "$N plumets down out of the sky.", "$N plumets down out of the sky."); damage = 2 * dist; damage -= ob->query_ac( "blunt", damage ); ob->adjust_hp(damage, this_object(), this_object()); tell_object(ob, "%^BOLD%^%^RED%^Ouch, that hurt.%^RESET%^\n"); } string query_death_message() { return "from forgetting they cannot fly"; } int query_theft_command() { return 1; } int can_enter_from(string key, string direc) { return 0; } int can_exit_to(string key, string direc) { return 0; }