--- deliantra/server/common/map.C 2008/09/29 10:31:32 1.148 +++ deliantra/server/common/map.C 2008/12/23 01:51:27 1.152 @@ -27,6 +27,8 @@ #include "loader.h" #include "path.h" +sint8 maptile::outdoor_darkness; + /* This rolls up wall, blocks_magic, blocks_view, etc, all into * one function that just returns a P_.. value (see map.h) * it will also do map translation for tiled maps, returning @@ -932,7 +934,7 @@ /* adjust overall chance below */ if (destroy && rndm (0, 1)) - op->destroy (true); + op->destroy (); } } @@ -1063,7 +1065,8 @@ mapspace::update_ () { object *last = 0; - uint8 flags = P_UPTODATE, light = 0, anywhere = 0; + uint8 flags = P_UPTODATE, anywhere = 0; + sint8 light = 0; MoveType move_block = 0, move_slow = 0, move_on = 0, move_off = 0, move_allow = 0; //object *middle = 0; @@ -1076,12 +1079,8 @@ for (object *tmp = bot; tmp; last = tmp, tmp = tmp->above) { - /* This could be made additive I guess (two lights better than - * one). But if so, it shouldn't be a simple additive - 2 - * light bulbs do not illuminate twice as far as once since - * it is a dissapation factor that is cubed. - */ - light = max (light, tmp->glow_radius); + // Lights are additive, up to MAX_LIGHT_RADIUS, see los.C) + light += tmp->glow_radius; /* This call is needed in order to update objects the player * is standing in that have animations (ie, grass, fire, etc). @@ -1139,7 +1138,7 @@ if (QUERY_FLAG (tmp, FLAG_DAMNED)) flags |= P_NO_CLERIC; } - this->light = light; + this->light = min (light, MAX_LIGHT_RADIUS); this->flags_ = flags; this->move_block = move_block & ~move_allow; this->move_on = move_on; @@ -1630,17 +1629,16 @@ if (!sound) return; - for_all_players (pl) - if (pl->ob->map == this) - if (client *ns = pl->ns) - { - int dx = x - pl->ob->x; - int dy = y - pl->ob->y; + for_all_players_on_map (pl, this) + if (client *ns = pl->ns) + { + int dx = x - pl->ob->x; + int dy = y - pl->ob->y; - int distance = idistance (dx, dy); + int distance = idistance (dx, dy); - if (distance <= MAX_SOUND_DISTANCE) - ns->play_sound (sound, dx, dy); - } + if (distance <= MAX_SOUND_DISTANCE) + ns->play_sound (sound, dx, dy); + } }