git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

commit 2aeda94c55d5cbbcc2c37e0317ebccce64d98b36
parent 69c2b057e2e4206a774f35043e44da35b1c5d592
Author: Toxa <untoxa@mail.ru>
Date:   Mon, 23 Aug 2021 18:32:55 +0300

remove png2mtspr; fix examples; fix png2asset headers: make them platform independent

Diffstat:
Mgbdk-lib/examples/ap/metasprites/Makefile8++++----
Mgbdk-lib/examples/ap/metasprites/metasprites.c2+-
Mgbdk-lib/examples/gg/metasprites/Makefile8++++----
Mgbdk-lib/examples/gg/metasprites/metasprites.c2+-
Mgbdk-lib/examples/sms/metasprites/Makefile8++++----
Mgbdk-lib/examples/sms/metasprites/metasprites.c2+-
Mgbdk-lib/include/gbdk/platform.h2++
Mgbdk-support/png2asset/png2asset.cpp3+--
Dgbdk-support/png2mtspr/png2mtspr.cpp387-------------------------------------------------------------------------------
9 files changed, 18 insertions(+), 404 deletions(-)

diff --git a/gbdk-lib/examples/ap/metasprites/Makefile b/gbdk-lib/examples/ap/metasprites/Makefile @@ -1,5 +1,5 @@ LCC = ../../../bin/lcc -PNG2MTSPR = ../../../bin/png2mtspr +PNG2ASSET = ../../../bin/png2asset CFLAGS = -mgbz80:ap -Wl-j -Wm-yS @@ -11,7 +11,7 @@ PNGSOURCES = sprite.png PNG_CSOURCES = $(PNGSOURCES:%.png=%.c) PNG_CHEADERS = $(PNGSOURCES:%.png=%.h) -# List of all C source files except those generated by png2mtspr +# List of all C source files except those generated by png2asset CSOURCES = $(filter-out $(PNGSOURCES:%.png=%.c), $(wildcard *.c)) all: $(BINS) @@ -20,12 +20,12 @@ compile.bat: Makefile @echo "REM Automatically generated from Makefile" > compile.bat @make -sn | sed y/\\//\\\\/ | grep -v make >> compile.bat -# Use png2mtspr to convert the png into C formatted metasprite data +# Use png2asset to convert the png into C formatted metasprite data # -sh 48 : Sets sprite height to 48 (width remains automatic) # -spr8x16 : Use 8x16 hardware sprites # -c ... : Set C output file %.c: %.png - $(PNG2MTSPR) $< -sh 48 -spr8x16 -c $@ + $(PNG2ASSET) $< -sh 48 -spr8x16 -c $@ # Compile all C sources, including converted png metasprites $(BINS): $(CSOURCES) $(PNG_CSOURCES) diff --git a/gbdk-lib/examples/ap/metasprites/metasprites.c b/gbdk-lib/examples/ap/metasprites/metasprites.c @@ -36,7 +36,7 @@ void main(void) { set_bkg_data(0, 1, pattern); // Load metasprite tile data into VRAM - set_sprite_data(TILE_NUM_START, sizeof(sprite_data) >> 4, sprite_data); + set_sprite_data(TILE_NUM_START, sizeof(sprite_tiles) >> 4, sprite_tiles); // show bkg and sprites SHOW_BKG; SHOW_SPRITES; diff --git a/gbdk-lib/examples/gg/metasprites/Makefile b/gbdk-lib/examples/gg/metasprites/Makefile @@ -1,5 +1,5 @@ LCC = ../../../bin/lcc -PNG2MTSPR = ../../../bin/png2mtspr +PNG2ASSET = ../../../bin/png2asset CFLAGS = -mz80:gg @@ -11,7 +11,7 @@ PNGSOURCES = sprite.png PNG_CSOURCES = $(PNGSOURCES:%.png=%.c) PNG_CHEADERS = $(PNGSOURCES:%.png=%.h) -# List of all C source files except those generated by png2mtspr +# List of all C source files except those generated by png2asset CSOURCES = $(filter-out $(PNGSOURCES:%.png=%.c), $(wildcard *.c)) all: $(BINS) @@ -20,12 +20,12 @@ compile.bat: Makefile @echo "REM Automatically generated from Makefile" > compile.bat @make -sn | sed y/\\//\\\\/ | grep -v make >> compile.bat -# Use png2mtspr to convert the png into C formatted metasprite data +# Use png2asset to convert the png into C formatted metasprite data # -sh 48 : Sets sprite height to 48 (width remains automatic) # -spr8x16 : Use 8x16 hardware sprites # -c ... : Set C output file %.c: %.png - $(PNG2MTSPR) $< -sh 48 -spr8x16 -noflip -c $@ + $(PNG2ASSET) $< -sh 48 -spr8x16 -noflip -c $@ # Compile all C sources, including converted png metasprites $(BINS): $(CSOURCES) $(PNG_CSOURCES) diff --git a/gbdk-lib/examples/gg/metasprites/metasprites.c b/gbdk-lib/examples/gg/metasprites/metasprites.c @@ -32,7 +32,7 @@ void main(void) { set_bkg_2bpp_data(0, 1, pattern); // Load metasprite tile data into VRAM - set_sprite_2bpp_data(TILE_NUM_START, sizeof(sprite_data) >> 4, sprite_data); + set_sprite_2bpp_data(TILE_NUM_START, sizeof(sprite_tiles) >> 4, sprite_tiles); // show bkg and sprites SHOW_SPRITES; diff --git a/gbdk-lib/examples/sms/metasprites/Makefile b/gbdk-lib/examples/sms/metasprites/Makefile @@ -1,5 +1,5 @@ LCC = ../../../bin/lcc -PNG2MTSPR = ../../../bin/png2mtspr +PNG2ASSET = ../../../bin/png2asset CFLAGS = -mz80:sms @@ -11,7 +11,7 @@ PNGSOURCES = sprite.png PNG_CSOURCES = $(PNGSOURCES:%.png=%.c) PNG_CHEADERS = $(PNGSOURCES:%.png=%.h) -# List of all C source files except those generated by png2mtspr +# List of all C source files except those generated by png2asset CSOURCES = $(filter-out $(PNGSOURCES:%.png=%.c), $(wildcard *.c)) all: $(BINS) @@ -20,12 +20,12 @@ compile.bat: Makefile @echo "REM Automatically generated from Makefile" > compile.bat @make -sn | sed y/\\//\\\\/ | grep -v make >> compile.bat -# Use png2mtspr to convert the png into C formatted metasprite data +# Use png2asset to convert the png into C formatted metasprite data # -sh 48 : Sets sprite height to 48 (width remains automatic) # -spr8x16 : Use 8x16 hardware sprites # -c ... : Set C output file %.c: %.png - $(PNG2MTSPR) $< -sh 48 -spr8x16 -noflip -c $@ + $(PNG2ASSET) $< -sh 48 -spr8x16 -noflip -c $@ # Compile all C sources, including converted png metasprites $(BINS): $(CSOURCES) $(PNG_CSOURCES) diff --git a/gbdk-lib/examples/sms/metasprites/metasprites.c b/gbdk-lib/examples/sms/metasprites/metasprites.c @@ -32,7 +32,7 @@ void main(void) { set_bkg_2bpp_data(0, 1, pattern); // Load metasprite tile data into VRAM - set_sprite_2bpp_data(TILE_NUM_START, sizeof(sprite_data) >> 4, sprite_data); + set_sprite_2bpp_data(TILE_NUM_START, sizeof(sprite_tiles) >> 4, sprite_tiles); // show bkg and sprites SHOW_SPRITES; diff --git a/gbdk-lib/include/gbdk/platform.h b/gbdk-lib/include/gbdk/platform.h @@ -3,6 +3,8 @@ #if defined(__TARGET_gb) || defined(__TARGET_ap) #include <gb/gb.h> + #include <gb/cgb.h> + #include <gb/sgb.h> #elif defined(__TARGET_sms) || defined(__TARGET_gg) #include <sms/sms.h> #else diff --git a/gbdk-support/png2asset/png2asset.cpp b/gbdk-support/png2asset/png2asset.cpp @@ -657,10 +657,9 @@ int main(int argc, char *argv[]) fprintf(file, "//AUTOGENERATED FILE FROM png2asset\n\n"); - fprintf(file, "#include <gb/gb.h>\n"); fprintf(file, "#include <stdint.h>\n"); + fprintf(file, "#include <gbdk/platform.h>\n"); fprintf(file, "#include <gbdk/metasprites.h>\n"); - fprintf(file, "#include <gb/cgb.h>\n"); fprintf(file, "\n"); fprintf(file, "const void __at(%d) __bank_%s;\n\n", bank, data_name.c_str()); diff --git a/gbdk-support/png2mtspr/png2mtspr.cpp b/gbdk-support/png2mtspr/png2mtspr.cpp @@ -1,387 +0,0 @@ -#include <vector> -#include <iostream> -#include <fstream> -#include <string> -#include <algorithm> -#include <cstring> - -using namespace std; - -int decodePNG(vector<unsigned char>& out_image, unsigned long& image_width, unsigned long& image_height, const unsigned char* in_png, size_t in_size, bool convert_to_rgba32 = true); -void loadFile(vector<unsigned char>& buffer, const std::string& filename); - -#define BIT(VALUE, INDEX) (1 & ((VALUE) >> (INDEX))) - -typedef vector< unsigned char > Tile; - -struct PNGImage -{ - vector< unsigned char > data; - unsigned long w; - unsigned long h; - - unsigned char* GetColor(int x, int y) - { - return &data[(w * y + x) * 4]; - } - - unsigned char GetGBColor(int x, int y) - { - unsigned char* color = GetColor(x, y); - if(color[3] == 0) //alpha == 0 - return 0; - float col = 255 - ((color[0] * 0.3f) + (color[1] * 0.59f) + (color[2] * 0.11f)); - unsigned char ret = ((unsigned char) col) >> 6; - if(ret < 2) - return ret < 1 ? 1 : 2; - else - return ret; - } - - bool ExtractGBTile(int x, int y, int tile_h, Tile& tile) - { - bool all_zero = true; - for(int j = 0; j < tile_h; ++ j) - { - unsigned char& l = tile[j * 2]; - unsigned char& h = tile[j * 2 + 1]; - l = h = 0; - - for(int i = 0; i < 8; ++i) - { - unsigned char color = GetGBColor(x + i, y + j); - l |= BIT(color, 0) << (7 - i); - h |= BIT(color, 1) << (7 - i); - } - - all_zero = all_zero && (l == 0) && (h == 0); - } - return !all_zero; - } -}; - -struct MTTile -{ - char offset_x; - char offset_y; - unsigned char offset_idx; - unsigned char props; - - MTTile(char offset_x, char offset_y, unsigned char offset_idx, unsigned char props) : offset_x(offset_x), offset_y(offset_y), offset_idx(offset_idx), props(props) {} - MTTile() : offset_x(0), offset_y(0), offset_idx(0), props(0) {} -}; - -typedef vector< MTTile > MetaSprite; -vector< Tile > tiles; -vector< MetaSprite > sprites; -PNGImage image; -int tile_h; -int props_default = 0x00; // Default Sprite props has no attributes enabled - -Tile FlipH(const Tile& tile) -{ - Tile ret; - for(unsigned int i = 0; i < tile.size(); i += 2) - { - ret.push_back(tile[tile.size() - 1 - i - 1]); - ret.push_back(tile[tile.size() - 1 - i]); - } - return ret; -} - -Tile FlipV(const Tile& tile) -{ - Tile ret; - for(unsigned int i = 0; i < tile.size(); ++i) - { - const unsigned char& c0 = tile[i]; - unsigned char c1 = 0; - for(int j = 0; j < 8; ++j) - { - c1 |= BIT(c0, 7 - j) << j; - } - ret.push_back(c1); - } - return ret; -} - -bool FindTile(const Tile& t, unsigned char& idx, unsigned char& props, bool tryflip) -{ - vector< Tile >::iterator it; - it = find(tiles.begin(), tiles.end(), t); - if(it != tiles.end()) - { - idx = (unsigned char)(it - tiles.begin()); - props = props_default; - return true; - } - - if (!tryflip) return false; - - Tile tile = FlipV(t); - it = find(tiles.begin(), tiles.end(), tile); - if(it != tiles.end()) - { - idx = (unsigned char)(it - tiles.begin()); - props = props_default | (1 << 5); - return true; - } - - tile = FlipH(tile); - it = find(tiles.begin(), tiles.end(), tile); - if(it != tiles.end()) - { - idx = (unsigned char)(it - tiles.begin()); - props = props_default | (1 << 5) | (1 << 6); - return true; - } - - tile = FlipV(tile); - it = find(tiles.begin(), tiles.end(), tile); - if(it != tiles.end()) - { - idx = (unsigned char)(it - tiles.begin()); - props = props_default | (1 << 6); - return true; - } - - return false; -} - -void GetMetaSprite(int _x, int _y, int _w, int _h, int pivot_x, int pivot_y, bool tryflip) -{ - int last_x = _x + pivot_x; - int last_y = _y + pivot_y; - - sprites.push_back(MetaSprite()); - MetaSprite& mt_sprite = sprites.back(); - for(int y = _y; y < _y + _h && y < (int)image.h; y += tile_h) - { - for(int x = _x; x < _x + _w && x < (int)image.w; x += 8) - { - Tile tile(tile_h * 2); - if (image.ExtractGBTile(x, y, tile_h, tile)) - { - unsigned char idx; - unsigned char props; - if(!FindTile(tile, idx, props, tryflip)) - { - tiles.push_back(tile); - idx = (unsigned char)tiles.size() - 1; - props = props_default; - } - - if(tile_h == 16) - idx *= 2; - - mt_sprite.push_back(MTTile(x - last_x, y - last_y, idx, props)); - - last_x = x; - last_y = y; - } - } - } - // Changed this code so empty metasprites are no longer dropped - // - // Metasprite was empty (made entirely of transparent tiles) - // if(mt_sprite.size() == 0) { - // sprites.pop_back(); - // } -} - -int main(int argc, char *argv[]) -{ - if(argc < 2) - { - printf("usage: png2mtspr <file>.png [options]\n"); - printf("-c ouput file (default: <png file>.c)\n"); - printf("-sw <width> metasprites width size (default: png width)\n"); - printf("-sh <height> metasprites height size (default: png height)\n"); - printf("-sp <props> change default for sprite OAM property bytes (in hex) (default: 0x00)\n"); - printf("-px <x coord> metasprites pivot x coordinate (default: metasprites width / 2)\n"); - printf("-py <y coord> metasprites pivot y coordinate (default: metasprites height / 2)\n"); - printf("-spr8x8 use SPRITES_8x8 (default: SPRITES_8x16)\n"); - printf("-spr8x16 use SPRITES_8x16 (default: SPRITES_8x16)\n"); - printf("-b <bank> bank (default 0)\n"); - printf("-noflip disable flipping"); - return 0; - } - - //default params - int sprite_w = 0; - int sprite_h = 0; - int pivot_x = 0xFFFFFF; - int pivot_y = 0xFFFFFF; - tile_h = 16; - string output_filename = argv[1]; - output_filename = output_filename.substr(0, output_filename.size() - 4) + ".c"; - int bank = 0; - bool tryflip = true; - - //Parse argv - for(int i = 2; i < argc; ++i) - { - if(!strcmp(argv[i], "-sw")) - { - sprite_w = atoi(argv[++ i]); - } - else if(!strcmp(argv[i], "-sh")) - { - sprite_h = atoi(argv[++ i]); - } - else if(!strcmp(argv[i], "-sp")) - { - props_default = strtol(argv[++ i], NULL, 16); - } - if(!strcmp(argv[i], "-px")) - { - pivot_x = atoi(argv[++ i]); - } - else if(!strcmp(argv[i], "-py")) - { - pivot_y = atoi(argv[++ i]); - } - else if(!strcmp(argv[i], "-spr8x8")) - { - tile_h = 8; - } - else if(!strcmp(argv[i],"-spr8x16")) - { - tile_h = 16; - } - else if(!strcmp(argv[i], "-c")) - { - output_filename = argv[++ i]; - } - else if(!strcmp(argv[i], "-b")) - { - bank = atoi(argv[++ i]); - } - else if(!strcmp(argv[i], "-noflip")) - { - tryflip = false; - } - } - - int slash_pos = (int)output_filename.find_last_of('/'); - if(slash_pos == -1) - slash_pos = (int)output_filename.find_last_of('\\'); - int dot_pos = (int)output_filename.find_last_of('.'); - - if(slash_pos == -1) slash_pos = -1; - if(dot_pos == -1) dot_pos = -1; - - string output_filename_h = output_filename.substr(0, dot_pos) + ".h"; - string data_name = output_filename.substr(slash_pos + 1, dot_pos - 1 - slash_pos); - replace(data_name.begin(), data_name.end(), '-', '_'); - printf("data_name:%s", data_name.c_str()); - printf("\n"); // End of output - - //load and decode png - vector<unsigned char> buffer; - loadFile(buffer, argv[1]); - if(decodePNG(image.data, image.w, image.h, buffer.empty() ? 0 : &buffer[0], (unsigned long)buffer.size()) != 0) - { - printf("Error decoding PNG"); - return 0; - } - - if(sprite_w == 0) sprite_w = (int)image.w; - if(sprite_h == 0) sprite_h = (int)image.h; - if(pivot_x == 0xFFFFFF) pivot_x = sprite_w / 2; - if(pivot_y == 0xFFFFFF) pivot_y = sprite_h / 2; - - //Extract metasprites - for(int y = 0; y < (int)image.h; y += sprite_h) - { - for(int x = 0; x < (int)image.w; x += sprite_w) - { - GetMetaSprite(x, y, sprite_w, sprite_h, pivot_x, pivot_y, tryflip); - } - } - - //Output .h FILE - FILE* file = fopen(output_filename_h.c_str(), "w"); - if(!file) { - printf("Error writing file"); - return 1; - } - - fprintf(file, "//AUTOGENERATED FILE FROM png2mtspr\n"); - fprintf(file, "#ifndef __%s_H_INCLUDE\n", data_name.c_str()); - fprintf(file, "#define __%s_H_INCLUDE\n", data_name.c_str()); - fprintf(file, "\n"); - fprintf(file, "#include <stdint.h>\n"); - fprintf(file, "#include <gbdk/metasprites.h>\n"); - fprintf(file, "\n"); - fprintf(file, "#define %s_TILE_H %d\n", data_name.c_str(), tile_h); - fprintf(file, "#define %s_WIDTH %d\n", data_name.c_str(), sprite_w); - fprintf(file, "#define %s_HEIGHT %d\n", data_name.c_str(), sprite_h); - fprintf(file, "#define %s_PIVOT_X %d\n", data_name.c_str(), pivot_x); - fprintf(file, "#define %s_PIVOT_Y %d\n", data_name.c_str(), pivot_y); - fprintf(file, "\n"); - fprintf(file, "extern const uint8_t %s_data[%d];\n", data_name.c_str(), (int)(tiles.size() * tile_h * 2)); - fprintf(file, "extern const metasprite_t* const %s_metasprites[%d];\n", data_name.c_str(), (int)sprites.size()); - - if(bank) { - fprintf(file, "extern const void __bank_%s_metasprite;\n", data_name.c_str()); - } - fprintf(file, "#endif"); - - fclose(file); - - //Output .c FILE - file = fopen(output_filename.c_str(), "w"); - if(!file) { - printf("Error writing file"); - return 1; - } - - fprintf(file, "//AUTOGENERATED FILE FROM png2mtspr\n\n"); - fprintf(file, "#include <stdint.h>\n"); - fprintf(file, "#include <gbdk/metasprites.h>\n"); - fprintf(file, "\n"); - - if(bank) { - fprintf(file, "#pragma bank %d\n", bank); - fprintf(file, "const void __at(%d) __bank_%s_metasprite;\n\n", bank, data_name.c_str()); - } - - fprintf(file, "const uint8_t %s_data[%d] = {\n", data_name.c_str(), (int)(tiles.size() * tile_h * 2)); - for(vector< Tile >::iterator it = tiles.begin(); it != tiles.end(); ++ it) - { - for(Tile::iterator it2 = (*it).begin(); it2 != (*it).end(); ++ it2) - { - fprintf(file, "0x%02x", (*it2)); - if((it + 1) != tiles.end() || (it2 + 1) != (*it).end()) - fprintf(file, ","); - } - - if(it != tiles.end()) - fprintf(file, "\n"); - } - fprintf(file, "};\n\n"); - - for(vector< MetaSprite >::iterator it = sprites.begin(); it != sprites.end(); ++ it) - { - fprintf(file, "const metasprite_t %s_metasprite%d[] = {\n", data_name.c_str(), (int)(it - sprites.begin())); - fprintf(file, "\t"); - for(MetaSprite::iterator it2 = (*it).begin(); it2 != (*it).end(); ++ it2) - { - fprintf(file, "METASPR_ITEM(%d, %d, %d, %d), ", (*it2).offset_y, (*it2).offset_x, (*it2).offset_idx, (*it2).props); - } - fprintf(file, "METASPR_TERM\n"); - fprintf(file, "};\n\n"); - } - - fprintf(file, "const metasprite_t* const %s_metasprites[%d] = {\n\t", data_name.c_str(), (int)sprites.size()); - for(vector< MetaSprite >::iterator it = sprites.begin(); it != sprites.end(); ++ it) - { - fprintf(file, "%s_metasprite%d", data_name.c_str(), (int)(it - sprites.begin())); - if(it + 1 != sprites.end()) - fprintf(file, ", "); - } - fprintf(file, "\n};\n"); - - fclose(file); -}

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.