… | |
… | |
778 | * Remove and free all objects in the given map. |
778 | * Remove and free all objects in the given map. |
779 | */ |
779 | */ |
780 | void |
780 | void |
781 | maptile::clear () |
781 | maptile::clear () |
782 | { |
782 | { |
783 | sfree (regions, size ()); regions = 0; |
|
|
784 | delete [] regionmap; regionmap = 0; |
|
|
785 | |
|
|
786 | if (spaces) |
783 | if (spaces) |
787 | { |
784 | { |
788 | for (mapspace *ms = spaces + size (); ms-- > spaces; ) |
785 | for (mapspace *ms = spaces + size (); ms-- > spaces; ) |
789 | while (object *op = ms->bot) |
786 | while (object *op = ms->bot) |
790 | { |
787 | { |
|
|
788 | // manually remove, as to not trigger anything |
|
|
789 | if (ms->bot = op->above) |
|
|
790 | ms->bot->below = 0; |
|
|
791 | |
|
|
792 | op->flag [FLAG_REMOVED] = true; |
|
|
793 | |
791 | op = op->head_ (); |
794 | if (op == op->head_ ()) |
|
|
795 | { |
792 | op->destroy_inv (false); |
796 | op->destroy_inv (false); |
793 | op->destroy (); |
797 | op->destroy (); |
|
|
798 | } |
794 | } |
799 | } |
795 | |
800 | |
796 | sfree (spaces, size ()), spaces = 0; |
801 | sfree (spaces, size ()), spaces = 0; |
797 | } |
802 | } |
798 | |
803 | |
799 | if (buttons) |
804 | if (buttons) |
800 | free_objectlinkpt (buttons), buttons = 0; |
805 | free_objectlinkpt (buttons), buttons = 0; |
|
|
806 | |
|
|
807 | sfree (regions, size ()); regions = 0; |
|
|
808 | delete [] regionmap; regionmap = 0; |
801 | } |
809 | } |
802 | |
810 | |
803 | void |
811 | void |
804 | maptile::clear_header () |
812 | maptile::clear_header () |
805 | { |
813 | { |
… | |
… | |
1596 | { |
1604 | { |
1597 | if (!sound) |
1605 | if (!sound) |
1598 | return; |
1606 | return; |
1599 | |
1607 | |
1600 | for_all_players (pl) |
1608 | for_all_players (pl) |
1601 | if (pl->ob->map == this) |
1609 | if (pl->observe->map == this) |
1602 | if (client *ns = pl->ns) |
1610 | if (client *ns = pl->ns) |
1603 | { |
1611 | { |
1604 | int dx = x - pl->ob->x; |
1612 | int dx = x - pl->observe->x; |
1605 | int dy = y - pl->ob->y; |
1613 | int dy = y - pl->observe->y; |
1606 | |
1614 | |
1607 | int distance = idistance (dx, dy); |
1615 | int distance = idistance (dx, dy); |
1608 | |
1616 | |
1609 | if (distance <= MAX_SOUND_DISTANCE) |
1617 | if (distance <= MAX_SOUND_DISTANCE) |
1610 | ns->play_sound (sound, dx, dy); |
1618 | ns->play_sound (sound, dx, dy); |