diff options
Diffstat (limited to 'serialize/world-writer.cpp')
-rw-r--r-- | serialize/world-writer.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/serialize/world-writer.cpp b/serialize/world-writer.cpp index 3d16505c..23381ab8 100644 --- a/serialize/world-writer.cpp +++ b/serialize/world-writer.cpp @@ -244,8 +244,8 @@ constexpr auto atlasbuf_size1 = sizeof(uint8_t) + atlasbuf_size0*int_max<uint8_t void writer_state::serialize_scenery_names() { - fm_assert(scenery_map_size < scenery_id_max_); const size_t sz = scenery_map_size; + fm_assert(sz == (atlasid)sz); std::vector<interned_scenery> vec; vec.reserve(scenery_map_size); for (const auto& x : scenery_map) for (const auto& s : x.second) @@ -269,7 +269,6 @@ void writer_state::serialize_scenery_names() auto s = binary_writer{scenery_buf.begin()}; s << uint16_t{scenery_magic}; - fm_assert(sz < scenery_id_max_); s << (atlasid)sz; StringView last; @@ -358,7 +357,7 @@ void writer_state::serialize_scenery(const chunk& c, writer_t& s) const auto sc_exact = C.bbox_offset.isZero() && C.bbox_size == def_char_bbox_size; - id |= meta_short_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_object_flags(s, C); @@ -384,12 +383,11 @@ void writer_state::serialize_scenery(const chunk& c, writer_t& s) sc.interactive == ss->interactive && sc.delta == 0 && sc.frame == ss->frame; fm_assert(img_s != null_atlas); - atlasid id = img_s; - static_assert(rotation_BITS == 3); - fm_assert(id == (id & lowbits<16-3-1, atlasid>)); - id |= meta_short_scenery_bit_ * sc_exact; - id |= static_cast<decltype(id)>(sc.r) << sizeof(id)*8-1-rotation_BITS; - s << id; + s << img_s; + uint8_t bits = 0; + bits |= meta_short_scenery_bit * sc_exact; + bits |= std::to_underlying(sc.r) << sizeof(bits)*8-1-rotation_BITS; + s << bits; if (!sc_exact) { write_object_flags(s, sc); |