diff --git a/build_rom.sh b/build_rom.sh index 867ee362..cf25db89 100755 --- a/build_rom.sh +++ b/build_rom.sh @@ -5,6 +5,6 @@ set -e padbin 32 build/gba-release/src/player/nostalgia.bin echo NOSTALGIA_MEDIA_HEADER_________ > media_header.txt oxfs format 32 1m nostalgia_media.oxfs -./build/current/src/tools/nost-pack -fs nostalgia_media.oxfs -img charset.png -inode 1 -c +./build/current/src/tools/nost-pack -fs nostalgia_media.oxfs -img charset.png -inode 1 -tiles 40 -c cat build/gba-release/src/player/nostalgia.bin media_header.txt nostalgia_media.oxfs > nostalgia.gba gbafix nostalgia.gba diff --git a/src/core/gba/gba.hpp b/src/core/gba/gba.hpp index d5789897..4e3fdd04 100644 --- a/src/core/gba/gba.hpp +++ b/src/core/gba/gba.hpp @@ -23,6 +23,8 @@ typedef Tile8 CharBlock8[256]; struct GbaImageData { Pallete pal; + uint16_t tileCount; + uint8_t bpp; uint8_t tiles[1]; }; diff --git a/src/core/gba/gfx.cpp b/src/core/gba/gfx.cpp index 7186684c..21c4754c 100644 --- a/src/core/gba/gfx.cpp +++ b/src/core/gba/gfx.cpp @@ -71,16 +71,16 @@ static char charMap[128] = { 0, 0, 0, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, + 27, // 0 + 28, // 1 + 29, // 2 + 30, // 3 + 31, // 4 + 32, // 5 + 33, // 6 + 34, // 7 + 35, // 8 + 36, // 9 0, 0, 0, @@ -133,7 +133,7 @@ void initConsole() { REG_BG0CNT |= (1 << 7); // set to use 8 bits per pixel if (fs) { FileStore32::FsSize_t readSize = 0; - fs->read(1, 512, 8 * 64 * 36, &TILE8_ADDR[0][1], nullptr); + fs->read(1, 516, 64 * 38, &TILE8_ADDR[0][1], nullptr); fs->read(1, 0, 512, &MEM_PALLETE_BG[0], &readSize); } } diff --git a/src/tools/pack.cpp b/src/tools/pack.cpp index e4e79a8d..0f64bddb 100644 --- a/src/tools/pack.cpp +++ b/src/tools/pack.cpp @@ -63,26 +63,35 @@ int run(ClArgs args) { QString argInPath = args.getString("img").c_str(); QString argFsPath = args.getString("fs").c_str(); auto argCompact = args.getBool("c"); + auto argTiles = args.getInt("tiles"); QImage src(argInPath); if (!src.isNull()) { + if (argTiles == 0) { + argTiles = (src.width() * src.height()) / 64; + } + QMap colors; - const auto imgDataBuffSize = sizeof(Pallete) + src.width() * src.height(); + const auto imgDataBuffSize = sizeof(Pallete) + argTiles * 64; uint8_t imgDataBuff[imgDataBuffSize]; GbaImageData *id = (GbaImageData*) imgDataBuff; + id->bpp = 8; + id->tileCount = argTiles; int colorId = 0; // copy pixels as color ids for (int x = 0; x < src.colorCount(); x++) { for (int y = 0; y < src.colorCount(); y++) { auto destI = pointToIdx(src.width(), x, y); - auto c = src.pixel(x, y); - if (!colors.contains(c)) { - colors[c] = colorId; - colorId++; + if (destI <= argTiles * 64) { + auto c = src.pixel(x, y); + if (!colors.contains(c)) { + colors[c] = colorId; + colorId++; + } + ((uint8_t*) &id->tiles)[destI] = colors[c]; } - ((uint8_t*) &id->tiles)[destI] = colors[c]; } }