… | |
… | |
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 | { |