… | |
… | |
737 | } |
737 | } |
738 | |
738 | |
739 | mapspace &m = op->ms (); |
739 | mapspace &m = op->ms (); |
740 | |
740 | |
741 | if (!(m.flags_ & P_UPTODATE)) |
741 | if (!(m.flags_ & P_UPTODATE)) |
742 | /* nop */; |
742 | m.update_up (); // nothing to do except copy up |
743 | else if (action == UP_OBJ_INSERT) |
743 | else if (action == UP_OBJ_INSERT) |
744 | { |
744 | { |
745 | #if 0 |
745 | #if 0 |
746 | // this is likely overkill, TODO: revisit (schmorp) |
746 | // this is likely overkill, TODO: revisit (schmorp) |
747 | if ((op->flag [FLAG_BLOCKSVIEW] && !(m.flags_ & P_BLOCKSVIEW)) |
747 | if ((op->flag [FLAG_BLOCKSVIEW] && !(m.flags_ & P_BLOCKSVIEW)) |
… | |
… | |
768 | * that is being removed. |
768 | * that is being removed. |
769 | */ |
769 | */ |
770 | else if (action == UP_OBJ_CHANGE || action == UP_OBJ_REMOVE) |
770 | else if (action == UP_OBJ_CHANGE || action == UP_OBJ_REMOVE) |
771 | m.invalidate (); |
771 | m.invalidate (); |
772 | else if (action == UP_OBJ_FACE) |
772 | else if (action == UP_OBJ_FACE) |
773 | /* Nothing to do for that case */ ; |
773 | m.update_up (); // nothing to do for that case, except copy up |
774 | else |
774 | else |
775 | LOG (llevError, "update_object called with invalid action: %d\n", action); |
775 | LOG (llevError, "update_object called with invalid action: %d\n", action); |
776 | |
776 | |
777 | if (op->more) |
777 | if (op->more) |
778 | update_object (op->more, action); |
778 | update_object (op->more, action); |
… | |
… | |
898 | * if some form of movement is allowed, let objects |
898 | * if some form of movement is allowed, let objects |
899 | * drop on that space. |
899 | * drop on that space. |
900 | */ |
900 | */ |
901 | if (!drop_to_ground |
901 | if (!drop_to_ground |
902 | || !map |
902 | || !map |
903 | || map->in_memory != MAP_ACTIVE |
903 | || !map->linkable () |
904 | || map->no_drop |
904 | || map->no_drop |
905 | || ms ().move_block == MOVE_ALL) |
905 | || ms ().move_block == MOVE_ALL) |
906 | { |
906 | { |
907 | while (inv) |
907 | while (inv) |
908 | inv->destroy (); |
908 | inv->destroy (); |
… | |
… | |
1015 | path = "<freed objects map>"; |
1015 | path = "<freed objects map>"; |
1016 | name = "/internal/freed_objects_map"; |
1016 | name = "/internal/freed_objects_map"; |
1017 | no_drop = 1; |
1017 | no_drop = 1; |
1018 | no_reset = 1; |
1018 | no_reset = 1; |
1019 | |
1019 | |
1020 | in_memory = MAP_ACTIVE; |
1020 | state = MAP_ACTIVE; |
1021 | } |
1021 | } |
1022 | |
1022 | |
1023 | ~freed_map () |
1023 | ~freed_map () |
1024 | { |
1024 | { |
1025 | destroy (); |
1025 | destroy (); |
… | |
… | |
1198 | |
1198 | |
1199 | above = 0; |
1199 | above = 0; |
1200 | below = 0; |
1200 | below = 0; |
1201 | |
1201 | |
1202 | ms.invalidate (); |
1202 | ms.invalidate (); |
1203 | |
|
|
1204 | if (map->in_memory == MAP_SAVING) |
|
|
1205 | return; |
|
|
1206 | |
1203 | |
1207 | int check_walk_off = !flag [FLAG_NO_APPLY]; |
1204 | int check_walk_off = !flag [FLAG_NO_APPLY]; |
1208 | |
1205 | |
1209 | if (object *pl = ms.player ()) |
1206 | if (object *pl = ms.player ()) |
1210 | { |
1207 | { |
… | |
… | |
1345 | { |
1342 | { |
1346 | op->remove (); |
1343 | op->remove (); |
1347 | |
1344 | |
1348 | if (m == &freed_map)//D TODO: remove soon |
1345 | if (m == &freed_map)//D TODO: remove soon |
1349 | {//D |
1346 | {//D |
1350 | LOG (llevError | logBacktrace, "tries to insret object on freed objects map: %s", op->debug_desc ());//D |
1347 | LOG (llevError | logBacktrace, "tries to insert object on freed objects map: %s", op->debug_desc ());//D |
1351 | }//D |
1348 | }//D |
1352 | |
1349 | |
1353 | /* Ideally, the caller figures this out. However, it complicates a lot |
1350 | /* Ideally, the caller figures this out. However, it complicates a lot |
1354 | * of areas of callers (eg, anything that uses find_free_spot would now |
1351 | * of areas of callers (eg, anything that uses find_free_spot would now |
1355 | * need extra work |
1352 | * need extra work |
… | |
… | |
2731 | object::force_add (shstr_tmp name, int duration) |
2728 | object::force_add (shstr_tmp name, int duration) |
2732 | { |
2729 | { |
2733 | if (object *force = force_find (name)) |
2730 | if (object *force = force_find (name)) |
2734 | force->destroy (); |
2731 | force->destroy (); |
2735 | |
2732 | |
2736 | object *force = get_archetype (FORCE_NAME); |
2733 | object *force = archetype::get (FORCE_NAME); |
2737 | |
2734 | |
2738 | force->slaying = name; |
2735 | force->slaying = name; |
2739 | force->force_set_timer (duration); |
2736 | force->force_set_timer (duration); |
2740 | force->flag [FLAG_APPLIED] = true; |
2737 | force->flag [FLAG_APPLIED] = true; |
2741 | |
2738 | |