summaryrefslogtreecommitdiffhomepage
path: root/serialize/world-writer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'serialize/world-writer.cpp')
-rw-r--r--serialize/world-writer.cpp16
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);