summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-03-18 16:01:17 +0100
committerStanislaw Halik <sthalik@misaki.pl>2023-03-18 16:01:17 +0100
commit88f34628e2ca069d1d384c11f2c3d9de6cf2f39d (patch)
tree41067eb3530daf28e378c669b72ebeeb86877ba6
parent1aeaf9b9a98470f81bc41b1242474389cbcf3391 (diff)
serialize/save: fix inverted flag condition
-rw-r--r--serialize/world-impl.hpp4
-rw-r--r--serialize/world-reader.cpp4
-rw-r--r--serialize/world-writer.cpp4
3 files changed, 6 insertions, 6 deletions
diff --git a/serialize/world-impl.hpp b/serialize/world-impl.hpp
index 6d3f73cf..3487d854 100644
--- a/serialize/world-impl.hpp
+++ b/serialize/world-impl.hpp
@@ -62,9 +62,9 @@ template<typename T> constexpr inline auto highbit = T(1) << sizeof(T)*8-1;
template<typename T, std::size_t N, std::size_t off>
constexpr inline auto highbits = (T(1) << N)-1 << sizeof(T)*8-N-off;
-constexpr inline atlasid meta_long_scenery_bit = highbit<atlasid>;
+constexpr inline atlasid meta_short_scenery_bit = highbit<atlasid>;
constexpr inline atlasid meta_rotation_bits = highbits<atlasid, rotation_BITS, 1>;
-constexpr inline atlasid scenery_id_flag_mask = meta_long_scenery_bit | meta_rotation_bits;
+constexpr inline atlasid scenery_id_flag_mask = meta_short_scenery_bit | meta_rotation_bits;
constexpr inline atlasid scenery_id_max = int_max<atlasid> & ~scenery_id_flag_mask;
} // namespace
diff --git a/serialize/world-reader.cpp b/serialize/world-reader.cpp
index ed256172..6dcd93ae 100644
--- a/serialize/world-reader.cpp
+++ b/serialize/world-reader.cpp
@@ -219,7 +219,7 @@ void reader_state::read_chunks(reader_t& s)
offset_frac[1] << s;
const auto name = s.read_asciiz_string<character_name_max>();
proto.name = StringView{name.buf, name.len, StringViewFlag::Global|StringViewFlag::NullTerminated};
- if (id & meta_long_scenery_bit)
+ if (!(id & meta_short_scenery_bit))
read_offsets(s, proto);
auto e = _world->make_entity<character>(oid, {ch, local}, proto);
(void)e;
@@ -227,7 +227,7 @@ void reader_state::read_chunks(reader_t& s)
}
case entity_type::scenery: {
atlasid id; id << s;
- const bool exact = id & meta_long_scenery_bit;
+ const bool exact = id & meta_short_scenery_bit;
const auto r = rotation(id >> sizeof(id)*8-1-rotation_BITS & rotation_MASK);
id &= ~scenery_id_flag_mask;
auto sc = lookup_scenery(id);
diff --git a/serialize/world-writer.cpp b/serialize/world-writer.cpp
index 799e386f..129a9e08 100644
--- a/serialize/world-writer.cpp
+++ b/serialize/world-writer.cpp
@@ -383,7 +383,7 @@ void writer_state::serialize_chunk(const chunk& c, chunk_coords coord)
const auto sc_exact =
C.offset.isZero() && C.bbox_offset.isZero() &&
C.bbox_size == def_char_bbox_size;
- id |= meta_long_scenery_bit * sc_exact;
+ id |= meta_short_scenery_bit * sc_exact;
id |= static_cast<decltype(id)>(C.r) << sizeof(id)*8-1-rotation_BITS;
s << id;
write_entity_flags(s, C);
@@ -409,7 +409,7 @@ void writer_state::serialize_chunk(const chunk& c, chunk_coords coord)
atlasid id = img_s;
static_assert(rotation_BITS == 3);
fm_assert((id & (1 << 16-3-1)-1) == id);
- id |= meta_long_scenery_bit * sc_exact;
+ id |= meta_short_scenery_bit * sc_exact;
id |= static_cast<decltype(id)>(sc.r) << sizeof(id)*8-1-rotation_BITS;
s << id;
if (!sc_exact)