… | |
… | |
487 | } |
487 | } |
488 | |
488 | |
489 | bool |
489 | bool |
490 | maptile::save_objects (object_freezer &freezer, int flags) |
490 | maptile::save_objects (object_freezer &freezer, int flags) |
491 | { |
491 | { |
|
|
492 | static int cede_count = 0; |
|
|
493 | |
492 | if (flags & IO_HEADER) |
494 | if (flags & IO_HEADER) |
493 | save_header (freezer); |
495 | save_header (freezer); |
494 | |
496 | |
495 | if (!spaces) |
497 | if (!spaces) |
496 | return false; |
498 | return false; |
497 | |
499 | |
498 | for (int i = 0; i < size (); ++i) |
500 | for (int i = 0; i < size (); ++i) |
499 | { |
501 | { |
|
|
502 | if (cede_count >= 500) |
|
|
503 | { |
|
|
504 | cede_count = 0; |
|
|
505 | coroapi::cede (); |
|
|
506 | } |
|
|
507 | |
500 | int unique = 0; |
508 | int unique = 0; |
501 | for (object *op = spaces [i].bot; op; op = op->above) |
509 | for (object *op = spaces [i].bot; op; op = op->above) |
502 | { |
510 | { |
|
|
511 | // count per-object, but cede only when modification-safe |
|
|
512 | cede_count++; |
|
|
513 | |
503 | if (op->flag [FLAG_UNIQUE] && op->flag [FLAG_IS_FLOOR]) |
514 | if (op->flag [FLAG_UNIQUE] && op->flag [FLAG_IS_FLOOR]) |
504 | unique = 1; |
515 | unique = 1; |
505 | |
516 | |
506 | if (!op->can_map_save ()) |
517 | if (!op->can_map_save ()) |
507 | continue; |
518 | continue; |