Add support for writing a smaller number of tiles
This commit is contained in:
parent
36124a1738
commit
6b1ccc7ed2
@ -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
|
||||
|
@ -23,6 +23,8 @@ typedef Tile8 CharBlock8[256];
|
||||
|
||||
struct GbaImageData {
|
||||
Pallete pal;
|
||||
uint16_t tileCount;
|
||||
uint8_t bpp;
|
||||
uint8_t tiles[1];
|
||||
};
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -63,20 +63,28 @@ 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<QRgb, int> 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);
|
||||
if (destI <= argTiles * 64) {
|
||||
auto c = src.pixel(x, y);
|
||||
if (!colors.contains(c)) {
|
||||
colors[c] = colorId;
|
||||
@ -85,6 +93,7 @@ int run(ClArgs args) {
|
||||
((uint8_t*) &id->tiles)[destI] = colors[c];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// store colors in palette with the corresponding color id
|
||||
for (auto key : colors.keys()) {
|
||||
|
Loading…
Reference in New Issue
Block a user