… | |
… | |
499 | if (thawer.get_sint32 ()) \ |
499 | if (thawer.get_sint32 ()) \ |
500 | SET_FLAG (op, flag); \ |
500 | SET_FLAG (op, flag); \ |
501 | else \ |
501 | else \ |
502 | CLEAR_FLAG (op, flag) \ |
502 | CLEAR_FLAG (op, flag) \ |
503 | |
503 | |
504 | int parse_object (object * op, object_thawer & thawer, int map_flags) |
504 | int parse_object (object *op, object_thawer &thawer, int map_flags) |
505 | { |
505 | { |
506 | bool ismore = 0; |
506 | bool ismore = 0; |
|
|
507 | object *op_inv = op->inv; |
507 | |
508 | |
508 | for (;;) |
509 | for (;;) |
509 | { |
510 | { |
510 | keyword kw = thawer.get_kv (); |
511 | keyword kw = thawer.get_kv (); |
511 | |
512 | |
… | |
… | |
558 | |
559 | |
559 | if (tmp->arch) |
560 | if (tmp->arch) |
560 | { |
561 | { |
561 | // was: insert_ob_in_ob (tmp, op); |
562 | // was: insert_ob_in_ob (tmp, op); |
562 | // but manually adding it can improve map loading times a lot |
563 | // but manually adding it can improve map loading times a lot |
|
|
564 | // also, appending instead of prepending keeps the |
|
|
565 | // save ordering the same between repeated load/saves. |
563 | CLEAR_FLAG (tmp, FLAG_OBJ_ORIGINAL); |
566 | CLEAR_FLAG (tmp, FLAG_OBJ_ORIGINAL); |
564 | CLEAR_FLAG (tmp, FLAG_REMOVED); |
567 | CLEAR_FLAG (tmp, FLAG_REMOVED); |
565 | tmp->env = op; |
|
|
566 | |
568 | |
567 | if (!op->inv) |
569 | if (!op_inv) |
|
|
570 | { |
568 | op->inv = tmp; |
571 | op->inv = tmp; |
|
|
572 | tmp->above = 0; |
|
|
573 | } |
569 | else |
574 | else |
570 | { |
575 | { |
|
|
576 | while (op_inv->below) |
|
|
577 | op_inv = op_inv->below; |
|
|
578 | |
|
|
579 | op_inv->below = tmp; |
571 | tmp->below = op->inv; |
580 | tmp->above = op_inv; |
572 | tmp->below->above = tmp; |
|
|
573 | op->inv = tmp; |
|
|
574 | } |
581 | } |
|
|
582 | |
|
|
583 | tmp->below = 0; |
|
|
584 | tmp->env = op; |
|
|
585 | op_inv = tmp; |
575 | } |
586 | } |
576 | else |
587 | else |
577 | { |
588 | { |
578 | LOG (llevDebug, "Discarding object without arch: %s\n", |
589 | LOG (llevDebug, "Discarding object without arch: %s\n", |
579 | tmp->name ? (const char *) tmp->name : "(null)"); |
590 | tmp->name ? (const char *) tmp->name : "(null)"); |