[nostalgia/core/gba] Fix TileSheetSet loading
All checks were successful
Build / build (push) Successful in 2m47s

This commit is contained in:
Gary Talent 2024-07-09 22:18:52 -05:00
parent 531d930985
commit c501fc048f

View File

@ -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<CompactTileSheet>(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<size_t>(s.tiles) * PixelsPerTile) / (1 + (set.bpp == 4));
auto const cnt = (static_cast<size_t>(s.tiles) * PixelsPerTile) >> bppMod;
for (size_t i = 0; i < cnt; ++i) {
auto const srcIdx = static_cast<size_t>(s.begin) + i * 2;
auto const begin = static_cast<size_t>(s.begin) * (PixelsPerTile >> bppMod);
auto const srcIdx = begin + i * 2;
auto const v = static_cast<uint16_t>(
static_cast<uint16_t>(ts->pixels[srcIdx]) |
(static_cast<uint16_t>(ts->pixels[srcIdx + 1]) << 8));
tileMapTargetMem[tileWriteIdx + i] = v;
}
tileWriteIdx += cnt;
tileWriteIdx += cnt >> bppMod;
}
}
return {};