From 520cc2a80d1f1586d8e6fe7ffbabcacae1228370 Mon Sep 17 00:00:00 2001 From: Rangi Date: Sat, 12 Sep 2026 15:38:34 -0400 Subject: [PATCH] Fix reversing a tilemapped image with `-x` trimmed tiles --- src/gfx/reverse.cpp | 6 ++++-- test/gfx/reverse_trimmed.2bpp | Bin 0 -> 16 bytes test/gfx/reverse_trimmed.flags | 2 ++ test/gfx/reverse_trimmed.tilemap | Bin 0 -> 2 bytes test/gfx/reverse_trimmed_attributes.2bpp | Bin 0 -> 16 bytes test/gfx/reverse_trimmed_attributes.attrmap | Bin 0 -> 2 bytes test/gfx/reverse_trimmed_attributes.flags | 3 +++ test/gfx/reverse_trimmed_attributes.tilemap | Bin 0 -> 2 bytes 8 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 test/gfx/reverse_trimmed.2bpp create mode 100644 test/gfx/reverse_trimmed.flags create mode 100644 test/gfx/reverse_trimmed.tilemap create mode 100644 test/gfx/reverse_trimmed_attributes.2bpp create mode 100644 test/gfx/reverse_trimmed_attributes.attrmap create mode 100644 test/gfx/reverse_trimmed_attributes.flags create mode 100644 test/gfx/reverse_trimmed_attributes.tilemap diff --git a/src/gfx/reverse.cpp b/src/gfx/reverse.cpp index a99609e7..85b2db53 100644 --- a/src/gfx/reverse.cpp +++ b/src/gfx/reverse.cpp @@ -353,7 +353,7 @@ void reverse() { } } - if (nbTilesInBank[0] + nbTilesInBank[1] > nbTiles) { + if (nbTilesInBank[0] + nbTilesInBank[1] > nbTiles + options.trim) { fatal( "The tilemap references %" PRIu16 " tiles in bank 0 and %" PRIu16 " in bank 1, but only %zu have been read in total", @@ -390,7 +390,9 @@ void reverse() { } } } else { - size_t const limit = std::min(nbTiles, options.maxNbTiles[0]); + // Tiles trimmed with `-x` were never written to the tile data file, but are + // still referenced by the tilemap. + size_t const limit = std::min(nbTiles + options.trim, options.maxNbTiles[0]); for (size_t index = 0; index < mapSize; ++index) { size_t tx = index % width, ty = index / width; uint8_t tileID = (*tilemap)[index]; diff --git a/test/gfx/reverse_trimmed.2bpp b/test/gfx/reverse_trimmed.2bpp new file mode 100644 index 0000000000000000000000000000000000000000..b353746f222e10f05617d07f5942d8eff88a0deb GIT binary patch literal 16 TcmZQzkdUaTkN|_aItB&+6$%2a literal 0 HcmV?d00001 diff --git a/test/gfx/reverse_trimmed.flags b/test/gfx/reverse_trimmed.flags new file mode 100644 index 00000000..42b82846 --- /dev/null +++ b/test/gfx/reverse_trimmed.flags @@ -0,0 +1,2 @@ +-x 1 +-t reverse_trimmed.tilemap diff --git a/test/gfx/reverse_trimmed.tilemap b/test/gfx/reverse_trimmed.tilemap new file mode 100644 index 0000000000000000000000000000000000000000..bdc955b7b2e610ad5a72302b139a2e6cb325519a GIT binary patch literal 2 JcmZQz1ONa700IC2 literal 0 HcmV?d00001 diff --git a/test/gfx/reverse_trimmed_attributes.2bpp b/test/gfx/reverse_trimmed_attributes.2bpp new file mode 100644 index 0000000000000000000000000000000000000000..b353746f222e10f05617d07f5942d8eff88a0deb GIT binary patch literal 16 TcmZQzkdUaTkN|_aItB&+6$%2a literal 0 HcmV?d00001 diff --git a/test/gfx/reverse_trimmed_attributes.attrmap b/test/gfx/reverse_trimmed_attributes.attrmap new file mode 100644 index 0000000000000000000000000000000000000000..09f370e38f498a462e1ca0faa724559b6630c04f GIT binary patch literal 2 JcmZQz0000200961 literal 0 HcmV?d00001 diff --git a/test/gfx/reverse_trimmed_attributes.flags b/test/gfx/reverse_trimmed_attributes.flags new file mode 100644 index 00000000..da4f1828 --- /dev/null +++ b/test/gfx/reverse_trimmed_attributes.flags @@ -0,0 +1,3 @@ +-x 1 +-t reverse_trimmed_attributes.tilemap +-a reverse_trimmed_attributes.attrmap diff --git a/test/gfx/reverse_trimmed_attributes.tilemap b/test/gfx/reverse_trimmed_attributes.tilemap new file mode 100644 index 0000000000000000000000000000000000000000..bdc955b7b2e610ad5a72302b139a2e6cb325519a GIT binary patch literal 2 JcmZQz1ONa700IC2 literal 0 HcmV?d00001