From c501fc048f8c32f46bcdfdfee9fbaa6eafef1357 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Tue, 9 Jul 2024 22:18:52 -0500 Subject: [PATCH] [nostalgia/core/gba] Fix TileSheetSet loading --- src/nostalgia/modules/core/src/gba/gfx.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/nostalgia/modules/core/src/gba/gfx.cpp b/src/nostalgia/modules/core/src/gba/gfx.cpp index 553cbaba..7255f558 100644 --- a/src/nostalgia/modules/core/src/gba/gfx.cpp +++ b/src/nostalgia/modules/core/src/gba/gfx.cpp @@ -84,21 +84,23 @@ static ox::Error loadTileSheetSet( uint16_t *tileMapTargetMem, TileSheetSet const&set) noexcept { size_t tileWriteIdx = 0; + size_t const bppMod = set.bpp == 4; for (auto const&entry : set.entries) { oxRequire(ts, keel::readObj(keelCtx(ctx), entry.tilesheet)); if (set.bpp != ts->bpp && ts->bpp == 8) { return OxError(1, "cannot load an 8 BPP tilesheet into a 4 BPP CBB"); } for (auto const&s : entry.sections) { - auto const cnt = (static_cast(s.tiles) * PixelsPerTile) / (1 + (set.bpp == 4)); + auto const cnt = (static_cast(s.tiles) * PixelsPerTile) >> bppMod; for (size_t i = 0; i < cnt; ++i) { - auto const srcIdx = static_cast(s.begin) + i * 2; + auto const begin = static_cast(s.begin) * (PixelsPerTile >> bppMod); + auto const srcIdx = begin + i * 2; auto const v = static_cast( static_cast(ts->pixels[srcIdx]) | (static_cast(ts->pixels[srcIdx + 1]) << 8)); tileMapTargetMem[tileWriteIdx + i] = v; } - tileWriteIdx += cnt; + tileWriteIdx += cnt >> bppMod; } } return {};