--- deliantra/server/common/map.C 2007/01/15 21:06:18 1.76 +++ deliantra/server/common/map.C 2007/01/27 23:59:29 1.81 @@ -230,7 +230,6 @@ return 0; } - /* * Returns true if the given object can't fit in the given spot. * This is meant for multi space objects - for single space objecs, @@ -795,7 +794,7 @@ case KW_per_player: thawer.get (per_player); break; case KW_per_party: thawer.get (per_party); break; - case KW_region: get_region_by_name (thawer.get_str ()); break; + case KW_region: default_region = region::find (thawer.get_str ()); break; case KW_shopitems: shopitems = parse_shop_string (thawer.get_str ()); break; // old names new names @@ -874,7 +873,7 @@ MAP_OUT (fixed_resettime); MAP_OUT (difficulty); - if (region) MAP_OUT2 (region, region->name); + if (default_region) MAP_OUT2 (region, default_region->name); if (shopitems) { @@ -935,20 +934,23 @@ void maptile::clear () { - if (!spaces) - return; + sfree (regions, size ()), regions = 0; + free (regionmap), regionmap = 0; - for (mapspace *ms = spaces + size (); ms-- > spaces; ) - while (object *op = ms->bot) - { - if (op->head) - op = op->head; + if (spaces) + { + for (mapspace *ms = spaces + size (); ms-- > spaces; ) + while (object *op = ms->bot) + { + if (op->head) + op = op->head; - op->destroy_inv (false); - op->destroy (); - } + op->destroy_inv (false); + op->destroy (); + } - sfree (spaces, size ()), spaces = 0; + sfree (spaces, size ()), spaces = 0; + } if (buttons) free_objectlinkpt (buttons), buttons = 0; @@ -1113,7 +1115,7 @@ { object *tmp, *last = 0; uint8 flags = P_UPTODATE, light = 0, anywhere = 0; - New_Face *top, *floor, *middle; + facetile *top, *floor, *middle; object *top_obj, *floor_obj, *middle_obj; MoveType move_block = 0, move_slow = 0, move_on = 0, move_off = 0, move_allow = 0; @@ -1553,7 +1555,7 @@ * creature is. get_rangevector takes into account map tiling, * so you just can not look the the map coordinates and get the * righte value. distance_x/y are distance away, which - * can be negativbe. direction is the crossfire direction scheme + * can be negative. direction is the crossfire direction scheme * that the creature should head. part is the part of the * monster that is closest. * @@ -1683,3 +1685,18 @@ return insert_ob_in_map_at (op, this, originator, flags, x, y); } +region * +maptile::region (int x, int y) const +{ + if (regions + && regionmap + && !OUT_OF_REAL_MAP (this, x, y)) + if (struct region *reg = regionmap [regions [y * width + x]]) + return reg; + + if (default_region) + return default_region; + + return ::region::default_region (); +} +