… | |
… | |
919 | if (!QUERY_FLAG (this, FLAG_REMOVED)) |
919 | if (!QUERY_FLAG (this, FLAG_REMOVED)) |
920 | remove_ob (this); |
920 | remove_ob (this); |
921 | |
921 | |
922 | SET_FLAG (this, FLAG_FREED); |
922 | SET_FLAG (this, FLAG_FREED); |
923 | |
923 | |
924 | // hack to ensure that freed objects still have a valid map |
|
|
925 | { |
|
|
926 | static maptile *freed_map; // freed objects are moved here to avoid crashes |
|
|
927 | |
|
|
928 | if (!freed_map) |
|
|
929 | { |
|
|
930 | freed_map = get_empty_map (3, 3); |
|
|
931 | freed_map->name = "freed objects map"; |
|
|
932 | allocate_map (freed_map); |
|
|
933 | } |
|
|
934 | |
|
|
935 | map = freed_map; |
|
|
936 | x = 1; |
|
|
937 | y = 1; |
|
|
938 | } |
|
|
939 | |
|
|
940 | if (more) |
924 | if (more) |
941 | { |
925 | { |
942 | more->destroy (destroy_inventory); |
926 | more->destroy (destroy_inventory); |
943 | more = 0; |
927 | more = 0; |
944 | } |
928 | } |
… | |
… | |
982 | |
966 | |
983 | op = tmp; |
967 | op = tmp; |
984 | } |
968 | } |
985 | } |
969 | } |
986 | } |
970 | } |
|
|
971 | |
|
|
972 | // hack to ensure that freed objects still have a valid map |
|
|
973 | { |
|
|
974 | static maptile *freed_map; // freed objects are moved here to avoid crashes |
|
|
975 | |
|
|
976 | if (!freed_map) |
|
|
977 | { |
|
|
978 | freed_map = new maptile; |
|
|
979 | |
|
|
980 | freed_map->name = "/internal/freed_objects_map"; |
|
|
981 | freed_map->width = 3; |
|
|
982 | freed_map->height = 3; |
|
|
983 | |
|
|
984 | freed_map->allocate (); |
|
|
985 | } |
|
|
986 | |
|
|
987 | map = freed_map; |
|
|
988 | x = 1; |
|
|
989 | y = 1; |
|
|
990 | } |
987 | |
991 | |
988 | // clear those pointers that likely might have circular references to us |
992 | // clear those pointers that likely might have circular references to us |
989 | owner = 0; |
993 | owner = 0; |
990 | enemy = 0; |
994 | enemy = 0; |
991 | attacked_by = 0; |
995 | attacked_by = 0; |