summaryrefslogtreecommitdiffhomepage
path: root/serialize
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-04-10 00:14:47 +0200
committerStanislaw Halik <sthalik@misaki.pl>2023-04-10 00:16:43 +0200
commit2b9e97e28ed0504de15d73ff5e1dd0ff9deb6d09 (patch)
treeeee807781ce6584eaa16ebe254e27016d7422fa1 /serialize
parent3212ca62361da55e8eec4cb97ee1698b534daad6 (diff)
src/world: pre-initialize entity ctr to 1024
This way, rtree object_id can only be equal to entity's id if it's an entity and not static geometry.
Diffstat (limited to 'serialize')
-rw-r--r--serialize/world-impl.hpp3
-rw-r--r--serialize/world-reader.cpp9
2 files changed, 7 insertions, 5 deletions
diff --git a/serialize/world-impl.hpp b/serialize/world-impl.hpp
index 840cc6b3..88844869 100644
--- a/serialize/world-impl.hpp
+++ b/serialize/world-impl.hpp
@@ -25,6 +25,7 @@
* 10) Chunk Z level.
* 11) RLE empty tiles.
* 12) Don't write entity name twice.
+ * 13) Entity counter initialized to 1024.
*/
namespace floormat {
@@ -51,7 +52,7 @@ constexpr inline auto null_atlas = (atlasid)-1LL;
constexpr inline size_t character_name_max = 128;
constexpr inline size_t string_max = 512;
-constexpr inline proto_t proto_version = 11;
+constexpr inline proto_t proto_version = 13;
constexpr inline proto_t min_proto_version = 1;
constexpr inline auto chunk_magic = (uint16_t)~0xc0d3;
constexpr inline auto scenery_magic = (uint16_t)~0xb00b;
diff --git a/serialize/world-reader.cpp b/serialize/world-reader.cpp
index b9a6a528..09566afa 100644
--- a/serialize/world-reader.cpp
+++ b/serialize/world-reader.cpp
@@ -382,7 +382,7 @@ void reader_state::deserialize_world(ArrayView<const char> buf)
(size_t)proto, (size_t)min_proto_version, (size_t)proto_version);
PROTO = proto;
fm_assert(PROTO > 0);
- object_id entity_counter = 0;
+ object_id entity_counter = world::entity_counter_init;
read_atlases(s);
if (PROTO >= 3) [[likely]]
read_sceneries(s);
@@ -393,10 +393,11 @@ void reader_state::deserialize_world(ArrayView<const char> buf)
read_chunks(s);
s.assert_end();
if (PROTO >= 8) [[likely]]
- {
- fm_assert(_world->entity_counter() == 0);
+ fm_assert(_world->entity_counter() == world::entity_counter_init);
+ if (PROTO >= 13) [[likely]]
_world->set_entity_counter(entity_counter);
- }
+ else if (PROTO >= 8) [[likely]]
+ _world->set_entity_counter(std::max(world::entity_counter_init, entity_counter));
_world = nullptr;
}