summaryrefslogtreecommitdiffhomepage
path: root/serialize/world-reader.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-10-29 02:33:29 +0200
committerStanislaw Halik <sthalik@misaki.pl>2022-10-29 02:33:29 +0200
commit9c9d02e674231dca8f9b75ea23a0efa0b28f970b (patch)
treeb5c1110aaa585d753ae1a37c205ae1a08de01e9a /serialize/world-reader.cpp
parente50377a10642426f96a28c2d20d33966c47f2ed6 (diff)
a
Diffstat (limited to 'serialize/world-reader.cpp')
-rw-r--r--serialize/world-reader.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/serialize/world-reader.cpp b/serialize/world-reader.cpp
index b999b5d4..6172703b 100644
--- a/serialize/world-reader.cpp
+++ b/serialize/world-reader.cpp
@@ -65,19 +65,23 @@ void reader_state::read_chunks(reader_t& s)
for (std::size_t i = 0; i < TILE_COUNT; i++)
{
const tilemeta flags = s.read<tilemeta>();
+ tile& t = chunk[i];
+ using uchar = std::uint8_t;
const auto make_atlas = [&]() -> tile_image {
- auto atlas = lookup_atlas(s.read<atlasid>());
- auto id = s.read<imgvar>();
- fm_assert(id < atlas->num_tiles());
- return { atlas, id };
+ auto id = flags & meta_short_atlasid ? (atlasid)(s.read<uchar>()) : s.read<atlasid>();
+ auto v = flags & meta_short_variant ? (varid) (s.read<uchar>()) : s.read<varid>();
+ auto atlas = lookup_atlas(id);
+ fm_assert(v < atlas->num_tiles());
+ return { atlas, v };
};
- tile& t = chunk[i];
+
if (flags & meta_ground)
t.ground = make_atlas();
if (flags & meta_wall_n)
t.wall_north = make_atlas();
if (flags & meta_wall_w)
t.wall_west = make_atlas();
+
switch (auto x = flags & pass_mask)
{
case tile::pass_shoot_through: