--- deliantra/server/common/map.C 2009/11/10 05:11:05 1.176 +++ deliantra/server/common/map.C 2010/02/07 04:22:33 1.182 @@ -1,7 +1,7 @@ /* * This file is part of Deliantra, the Roguelike Realtime MMORPG. * - * Copyright (©) 2005,2006,2007,2008,2009 Marc Alexander Lehmann / Robin Redeker / the Deliantra team + * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team * Copyright (©) 2001-2003,2007 Mark Wedel & Crossfire Development Team * Copyright (©) 1992,2007 Frank Tore Johansen * @@ -25,7 +25,6 @@ #include #include "global.h" -#include "loader.h" #include "path.h" //+GPL @@ -152,8 +151,7 @@ if (tmp->flag [FLAG_ALIVE] && tmp->head_ () != ob && tmp != ob - && tmp->type != DOOR - && !tmp->flag [FLAG_WIZPASS]) + && tmp->type != DOOR) return 1; } } @@ -632,12 +630,6 @@ case KW_shopmax: thawer.get (shopmax); break; case KW_shoprace: thawer.get (shoprace); break; case KW_outdoor: thawer.get (outdoor); break; - case KW_temp: thawer.get (temp); break; - case KW_pressure: thawer.get (pressure); break; - case KW_humid: thawer.get (humid); break; - case KW_windspeed: thawer.get (windspeed); break; - case KW_winddir: thawer.get (winddir); break; - case KW_sky: thawer.get (sky); break; case KW_per_player: thawer.get (per_player); break; case KW_per_party: thawer.get (per_party); break; @@ -716,10 +708,10 @@ bool maptile::_save_header (object_freezer &freezer) { -#define MAP_OUT(k) freezer.put (KW_ ## k, k) -#define MAP_OUT2(k,v) freezer.put (KW_ ## k, v) +#define MAP_OUT(k) freezer.put (KW(k), k) +#define MAP_OUT2(k,v) freezer.put (KW(k), v) - MAP_OUT2 (arch, "map"); + MAP_OUT2 (arch, CS(map)); if (name) MAP_OUT (name); MAP_OUT (swap_time); @@ -737,22 +729,15 @@ MAP_OUT (shopmax); if (shoprace) MAP_OUT (shoprace); - MAP_OUT (darkness); MAP_OUT (width); MAP_OUT (height); MAP_OUT (enter_x); MAP_OUT (enter_y); - - if (msg) freezer.put (KW_msg , KW_endmsg , msg); - if (maplore) freezer.put (KW_maplore, KW_endmaplore, maplore); - + MAP_OUT (darkness); MAP_OUT (outdoor); - MAP_OUT (temp); - MAP_OUT (pressure); - MAP_OUT (humid); - MAP_OUT (windspeed); - MAP_OUT (winddir); - MAP_OUT (sky); + + if (msg) freezer.put (KW(msg) , KW(endmsg) , msg); + if (maplore) freezer.put (KW(maplore), KW(endmaplore), maplore); MAP_OUT (per_player); MAP_OUT (per_party); @@ -763,7 +748,7 @@ if (tile_path [3]) MAP_OUT2 (tile_path_4, tile_path [3]); freezer.put (this); - freezer.put (KW_end); + freezer.put (KW(end)); return true; } @@ -858,6 +843,7 @@ } /* decay and destroy perishable items in a map */ +// TODO: should be done regularly, not on map load? void maptile::do_decay_objects () { @@ -869,12 +855,12 @@ { above = op->above; - bool destroy = 0; - // do not decay anything above unique floor tiles (yet :) if (QUERY_FLAG (op, FLAG_IS_FLOOR) && QUERY_FLAG (op, FLAG_UNIQUE)) break; + bool destroy = 0; + if (QUERY_FLAG (op, FLAG_IS_FLOOR) || QUERY_FLAG (op, FLAG_OBJ_ORIGINAL) || QUERY_FLAG (op, FLAG_UNIQUE) @@ -914,7 +900,8 @@ || (mat & M_GLASS && rndm (1, 2) == 1) || ((mat & M_STONE || mat & M_ADAMANT) && rndm (1, 10) == 1) || ((mat & M_SOFT_METAL || mat & M_BONE) && rndm (1, 3) == 1) - || (mat & M_ICE && temp > 32)) + //|| (mat & M_ICE && temp > 32) + ) destroy = 1; } @@ -1624,6 +1611,8 @@ } } +dynbuf mapwalk_buf (sizeof (maprect) * 25, sizeof (maprect) * 25); + static void split_to_tiles (dynbuf &buf, maptile *m, int x0, int y0, int x1, int y1, int dx, int dy) { @@ -1688,9 +1677,8 @@ } maprect * -maptile::split_to_tiles (int x0, int y0, int x1, int y1) +maptile::split_to_tiles (dynbuf &buf, int x0, int y0, int x1, int y1) { - static dynbuf buf (sizeof (maprect) * 8, sizeof (maprect) * 8); buf.clear (); ::split_to_tiles (buf, this, x0, y0, x1, y1, 0, 0);