From e61d4647b5757a16751c712cb411dd6255c95a8b Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Mon, 28 Jul 2025 21:54:50 -0500 Subject: [PATCH] [nostalgia/gfx] Fix BG tilesheet loading, add background offset functions --- .../modules/gfx/include/nostalgia/gfx/gfx.hpp | 8 ++++++-- src/nostalgia/modules/gfx/src/gfx-gba.cpp | 20 +++++++++++++------ src/nostalgia/modules/gfx/src/gfx.cpp | 2 +- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/nostalgia/modules/gfx/include/nostalgia/gfx/gfx.hpp b/src/nostalgia/modules/gfx/include/nostalgia/gfx/gfx.hpp index 978c0a96..792bd822 100644 --- a/src/nostalgia/modules/gfx/include/nostalgia/gfx/gfx.hpp +++ b/src/nostalgia/modules/gfx/include/nostalgia/gfx/gfx.hpp @@ -238,6 +238,10 @@ void setBgCbb(Context &ctx, unsigned bgIdx, unsigned cbbIdx) noexcept; void setBgPriority(Context &ctx, uint_t bgIdx, uint_t priority) noexcept; +void setBgOffset(Context &ctx, uint16_t bg, int16_t x, int16_t y) noexcept; + +void scrollBgOffset(Context &ctx, uint16_t bg, int16_t x, int16_t y) noexcept; + void hideSprite(Context &ctx, unsigned) noexcept; void showSprite(Context &ctx, unsigned) noexcept; @@ -260,8 +264,8 @@ constexpr ox::CStringView GlslVersion = "#version 330"; [[nodiscard]] ox::Size drawSize(int scale = 5) noexcept; -void draw(gfx::Context &ctx, ox::Size const &renderSz) noexcept; +void draw(Context &ctx, ox::Size const &renderSz) noexcept; -void draw(gfx::Context&, int scale = 5) noexcept; +void draw(Context&, int scale = 5) noexcept; } diff --git a/src/nostalgia/modules/gfx/src/gfx-gba.cpp b/src/nostalgia/modules/gfx/src/gfx-gba.cpp index ad67b35b..bb6ad6f1 100644 --- a/src/nostalgia/modules/gfx/src/gfx-gba.cpp +++ b/src/nostalgia/modules/gfx/src/gfx-gba.cpp @@ -169,8 +169,8 @@ ox::Error loadBgTileSheet( unsigned const cbb, CompactTileSheet const &ts, ox::Optional const &paletteBank) noexcept { - auto const cnt = (ts.pixels.size() * PixelsPerTile) / (1 + (ts.bpp == 4)); - for (size_t i = 0; i < cnt; ++i) { + auto const cnt = ts.pixels.size() >> (ts.bpp == 4); + for (size_t i{}; i < cnt; ++i) { auto const srcIdx = i * 2; auto const p1 = static_cast(ts.pixels[srcIdx]); auto const p2 = static_cast(ts.pixels[srcIdx + 1]); @@ -218,10 +218,10 @@ ox::Error loadSpriteTileSheet( Context &ctx, CompactTileSheet const &ts, bool const loadDefaultPalette) noexcept { - for (size_t i = 0; i < ts.pixels.size(); i += 2) { - uint16_t v = ts.pixels[i]; - v |= static_cast(ts.pixels[i + 1] << 8); - MEM_SPRITE_TILES[i] = v; + for (size_t i{}; i < ts.pixels.size(); i += 2) { + MEM_SPRITE_TILES[i >> 1] = + static_cast(ts.pixels[i]) | + (static_cast(ts.pixels[i + 1]) << 8); } if (loadDefaultPalette && ts.defaultPalette) { OX_RETURN_ERROR(loadSpritePalette(ctx, ts.defaultPalette)); @@ -294,6 +294,14 @@ void setBgPriority(Context&, uint_t const bgIdx, uint_t const priority) noexcept bgCtl = (bgCtl & 0b1111'1111'1111'1100u) | (priority & 0b11); } +void setBgOffset(Context&, uint16_t const bg, int16_t const x, int16_t const y) noexcept { + teagba::setBgOffset(bg, x, y); +} + +void scrollBgOffset(Context&, uint16_t const bg, int16_t const x, int16_t const y) noexcept { + teagba::scrollBgOffset(bg, x, y); +} + void hideSprite(Context&, unsigned const idx) noexcept { //oxAssert(g_spriteUpdates < config::GbaSpriteBufferLen, "Sprite update buffer overflow"); teagba::addSpriteUpdate({ diff --git a/src/nostalgia/modules/gfx/src/gfx.cpp b/src/nostalgia/modules/gfx/src/gfx.cpp index e52ac87b..4c93a2c2 100644 --- a/src/nostalgia/modules/gfx/src/gfx.cpp +++ b/src/nostalgia/modules/gfx/src/gfx.cpp @@ -249,7 +249,7 @@ void setBgTile( } ox::Error initConsole(Context &ctx) noexcept { - constexpr ox::FileAddress TilesheetAddr = ox::StringLiteral("/TileSheets/Charset.ng"); + constexpr ox::FileAddress TilesheetAddr = ox::StringLiteral("/TileSheets/Charset.nts"); constexpr ox::FileAddress PaletteAddr = ox::StringLiteral("/Palettes/Charset.npal"); setBgStatus(ctx, 0b0001); setBgCbb(ctx, 0, 0);