/** * This contains all the terrain specific code of rooms. * @author Sandoz, 2002 */ #include <dirs.h> #include <terrain.h> private nosave string terrain_name; /** @ignore yes */ void set_terrain( string name ) { TERRAIN_MAP->setup_location( TO, name ); terrain_name = name; } /* set_terrain() */ /** * This method returns the name of the terrain this room is part of. * @return the name of the terrain we are in */ string query_terrain() { return terrain_name; } /** @ignore yes */ void dest_me() { TERRAIN_MAP->delete_cloned_location( terrain_name, file_name(TO) ); } /* dest_me() */ /** @ignore yes */ void event_exit( object thing, string message, object to ) { if( clonep() && !sizeof(INV(TO)) && find_call_out("real_clean") == -1 ) call_out("real_clean", 5 + random( 5 ) ); } /* event_exit() */ /** @ignore yes */ void set_destination( string direc ) { int i, j, delta, *co_ords, *new_co_ords = allocate(3); string dest_name; object destination; if( ( i = member_array( direc, STD_ORDERS ) ) == -1 ) return; dest_name = TO->query_destination(direc); delta = TO->query_room_size() + TERRAIN_MAP->get_room_size(dest_name); co_ords = TO->query_co_ord(); for( j = 0; j < 3; j++ ) new_co_ords[j] = co_ords[j] - delta * STD_ORDERS[i+1][j]; destination = TERRAIN_MAP->find_location( terrain_name, new_co_ords ); if( destination ) TO->modify_exit( direc, ({"dest", file_name(destination) }) ); } /* set_destination() */ /** @ignore yes */ string query_quit_handler() { return TERRAIN_LOG; } /** @ignore yes */ mixed *query_cloning_info() { return ({ TERRAIN_MAP, "find_location", terrain_name, TO->query_co_ord() }); } /* query_cloning_info() */ /** @ignore yes */ mixed stats() { return ({ ({"terrain name", terrain_name }) }); }