summaryrefslogtreecommitdiffhomepage
path: root/serialize
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-12-02 03:51:37 +0100
committerStanislaw Halik <sthalik@misaki.pl>2022-12-02 03:51:37 +0100
commite76fae1b2f007efc58ef46ecc248d271676c6673 (patch)
tree30c166d3cb93e01f3d2aa514983fb5cfd451f996 /serialize
parent0ef0c4c70ae012986d07788ddde862087d300de3 (diff)
serialize: fix logic error with scenery atlases
Diffstat (limited to 'serialize')
-rw-r--r--serialize/world-writer.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/serialize/world-writer.cpp b/serialize/world-writer.cpp
index fb1eee85..8ff6314c 100644
--- a/serialize/world-writer.cpp
+++ b/serialize/world-writer.cpp
@@ -136,7 +136,7 @@ scenery_pair writer_state::intern_scenery(scenery_proto s, bool create)
auto it = scenery_map.find(ptr);
fm_assert(it != scenery_map.end() && !it->second.empty());
auto& vec = it->second;
- interned_scenery* ret = nullptr;
+ interned_scenery *ret = nullptr, *ret2 = nullptr;
for (interned_scenery& x : vec)
{
fm_debug_assert(s.frame.type == x.s->proto.frame.type);
@@ -148,6 +148,8 @@ scenery_pair writer_state::intern_scenery(scenery_proto s, bool create)
else
ret = &x;
}
+ else if (x.index != null_atlas)
+ ret2 = &x;
}
if (ret)
@@ -156,7 +158,15 @@ scenery_pair writer_state::intern_scenery(scenery_proto s, bool create)
return { ret->s, ret->index, true };
}
else if (create)
- return { vec[0].s, vec[0].index = scenery_map_size++, false };
+ {
+ if (ret2)
+ return { ret2->s, ret2->index, false };
+ else
+ {
+ fm_assert(!vec[0].s->proto);
+ return { vec[0].s, vec[0].index = scenery_map_size++, false };
+ }
+ }
else
return {};
}