From 5d3cf6f42e991af7de220a1f2b6b530e8f06cc31 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 1 Dec 2022 16:13:01 +0100 Subject: serialize/save: fix serializing proto 1 flags --- serialize/world-impl.hpp | 3 ++- serialize/world-reader.cpp | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/serialize/world-impl.hpp b/serialize/world-impl.hpp index dcd379a9..ea2a9cde 100644 --- a/serialize/world-impl.hpp +++ b/serialize/world-impl.hpp @@ -57,7 +57,8 @@ enum : tilemeta { meta_wall_n = 1 << (pass_bits + 1), meta_wall_w = 1 << (pass_bits + 2), meta_short_atlasid = 1 << (pass_bits + 3), - meta_scenery = 1 << (pass_bits + 4), + meta_short_variant_ = 1 << (pass_bits + 4), + meta_scenery = 1 << (pass_bits + 5), }; } // namespace floormat::Serialize diff --git a/serialize/world-reader.cpp b/serialize/world-reader.cpp index d61a574a..eb775e77 100644 --- a/serialize/world-reader.cpp +++ b/serialize/world-reader.cpp @@ -136,7 +136,13 @@ void reader_state::read_chunks(reader_t& s) using uchar = std::uint8_t; const auto make_atlas = [&]() -> tile_image_proto { auto id = flags & meta_short_atlasid ? atlasid{s.read()} : s.read(); - auto v = s.read(); + variant_t v; + if (PROTO >= 2) [[likely]] + s >> v; + else + v = flags & meta_short_variant_ + ? s.read() + : std::uint8_t(s.read()); auto atlas = lookup_atlas(id); fm_assert(v < atlas->num_tiles()); return { atlas, v }; -- cgit v1.2.3