diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-03-18 16:01:17 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-03-18 16:01:17 +0100 |
commit | 88f34628e2ca069d1d384c11f2c3d9de6cf2f39d (patch) | |
tree | 41067eb3530daf28e378c669b72ebeeb86877ba6 | |
parent | 1aeaf9b9a98470f81bc41b1242474389cbcf3391 (diff) |
serialize/save: fix inverted flag condition
-rw-r--r-- | serialize/world-impl.hpp | 4 | ||||
-rw-r--r-- | serialize/world-reader.cpp | 4 | ||||
-rw-r--r-- | serialize/world-writer.cpp | 4 |
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) |