/* -*- LPC -*- */ /* * $Locker: $ * $Id: water_inside_base.c,v 1.4 2002/08/27 00:21:44 presto Exp $ * */ /** * @main * Base inherit for an inside water room using the terrain map system. * <p> * This file should be inherited by any inside room within a terrain mapped * virtual area, and by any file with an exit to one of said areas. * <p> * When inheriting from this file, it is essential that the function * query_handler_path() be overriden to return the full pathname of * the handler associated with this area. * <p> * To inherit from this file, use the following lines: * <ul> * <li>#include <terrain_map.h> * <li> * <li>inherit TERRAIN_MAP_OUTSIDE_BASE * </ul> * * @index terrain_map_inside * @see terrain_map_handler * @see terrain_map_intro * @see terrain_map_example * @author Dek * @started Thurs April 12 2001 Too Damn Early BST **/ #include <room.h> #include <login_handler.h> #include <terrain_map.h> inherit "/std/room/water_inside"; inherit TERRAIN_MAP_ROOM_BASE; void create() { set_not_replaceable(1); terrain_room::create(); water_inside::create(); } void init() { terrain_room::init(); water_inside::init(); } /* init() */ /* @ignore yes */ varargs mixed* query_dest_other(string exit) { mixed* data; data = water_inside::query_dest_other(exit); return terrain_room::query_dest_other(exit, data); } /* @ignore yes */ mixed* query_dest_dir(object thing) { mixed* data; data = water_inside::query_dest_dir(thing); return terrain_room::query_dest_dir(data); } /** @ignore yes */ mixed stats() { return water_inside::stats() + terrain_room::stats(); } /** @ignore yes */ string query_terrain_map_walk_exit() { return "swim "; } /** @ignore yes */ object query_surface_room() { string dest_path; object destination; if (query_surface()) { return this_object(); } dest_path = file_name(this_object()); dest_path = implode(explode(dest_path, ":")[0..<2], ":")+":0"; destination = load_object(dest_path); if (destination && destination->query_water()) { return destination->query_surface_room(); } return ::query_surface_room(); } /** @ignore yes */ int get_water_surface_light() { float their_light, their_clarity, our_depth; string above_path = file_name(this_object()); object above; above_path = implode(explode(above_path, ":")[0..<2], ":")+":0"; above = load_object(above_path); if (!above) { return 0; } if (function_exists("query_water_surface_light", above)) { their_light = to_float(above->query_water_surface_light()); } else { their_light = to_float(above->query_my_light()); } their_clarity = to_float(above->query_clarity())/100.0; our_depth = to_float(-query_terrain_coords()[2]); return to_int(their_light * pow(their_clarity, our_depth)); }