diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-04-08 22:20:20 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-04-08 22:20:20 +0200 |
commit | e301c700764f2eca2498c5e95e5cc44dab2f5b5c (patch) | |
tree | c0ae2582392799f294745933cb2858e6121c3bd4 /serialize/world-writer.cpp | |
parent | 9cca30206a8de348bde4bddfa8ae10bd35ea8b66 (diff) |
serialize/save: add RLE for empty tiles
Diffstat (limited to 'serialize/world-writer.cpp')
-rw-r--r-- | serialize/world-writer.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/serialize/world-writer.cpp b/serialize/world-writer.cpp index ee955c47..8ffe1883 100644 --- a/serialize/world-writer.cpp +++ b/serialize/world-writer.cpp @@ -422,6 +422,24 @@ void writer_state::serialize_chunk(const chunk& c, chunk_coords_ coord) auto img_n = maybe_intern_atlas(wall_north); auto img_w = maybe_intern_atlas(wall_west); + if (img_g == null_atlas && img_n == null_atlas && img_w == null_atlas) + { + size_t j, max = std::min(TILE_COUNT, i + 0x80); + for (j = i+1; j < max; j++) + { + auto tile = c[j]; + if (tile.ground_atlas || tile.wall_north_atlas || tile.wall_west_atlas) + break; + } + j -= i + 1; + fm_assert(j == (j & 0x7fuz)); + i += j; + tilemeta flags = meta_rle | (tilemeta)j; + s << flags; + + continue; + } + tilemeta flags = {}; flags |= meta_ground * (img_g != null_atlas); flags |= meta_wall_n * (img_n != null_atlas); |