git.y1.nz

gbdk-2020

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

commit 5f8c5a6ec0aad2f78757b6d23df7df739d6cf920
parent 0963857d941cf35b6e728ab2a198dae72453da84
Author: bbbbbr <bbbbbr@users.noreply.github.com>
Date:   Sun, 17 Aug 2025 17:09:45 -0700

Merge pull request #811 from bbbbbr/png2asset/fix_sgb_border_palette_transparency

png2asset: fix broken transparency for SGB borders with more than one 16 color palette #810
Diffstat:
Mgbdk-lib/examples/gb/sgb_border/Readme.md2++
Mgbdk-support/png2asset/cmp_int_color.cpp25+++++++++++++++++++++++--
Mgbdk-support/png2asset/cmp_int_color.h26++++++++++++++++++--------
Mgbdk-support/png2asset/image_data.cpp2+-
Mgbdk-support/png2asset/palettes.cpp10+++++++---
Mgbdk-support/png2asset/palettes.h4++--
Mgbdk-support/png2asset/png_image.h18++++++++++++++++++
Mgbdk-support/png2asset/testing/Makefile1+
Agbdk-support/png2asset/testing/ref/sgb_border_multi_pal.c165+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agbdk-support/png2asset/testing/ref/sgb_border_multi_pal.h31+++++++++++++++++++++++++++++++
Agbdk-support/png2asset/testing/res/SGB/sgb_border_multi_pal.png0
11 files changed, 268 insertions(+), 16 deletions(-)

diff --git a/gbdk-lib/examples/gb/sgb_border/Readme.md b/gbdk-lib/examples/gb/sgb_border/Readme.md @@ -9,6 +9,8 @@ png2asset is used for converting the border. * The game area in the center should be: * 160 x 144 pixels, from (48,40) to (207,183) * The pixels in the game area at the center of the image should be set to 100% Alpha Transparency (as in the example image). If this is not done then the game area may share a palette color with other parts of the border leading to tile pattern flashing while the border loads. + * The palette will be sorted from lightest to darkest. There may be up to 4 SGB palettes. For Each SGB 16 color palette the first color (zero) is reserved as transparent. + * If the image is indexed and you want the palette order preserved, use `-keep_palette_order` with png2asset (but make sure color zero is used for transparent areas) * See the pandocs for additional details * https://gbdev.io/pandocs/SGB_Functions.html * https://gbdev.io/pandocs/SGB_Color_Palettes.html diff --git a/gbdk-support/png2asset/cmp_int_color.cpp b/gbdk-support/png2asset/cmp_int_color.cpp @@ -18,15 +18,36 @@ using namespace std; #include "png_image.h" #include "image_utils.h" -SetPal GetPaletteColors(const PNGImage& image, int x, int y, int w, int h) +SetPal GetPaletteColors(const PNGImage& image, bool isPackModeSGB, int x, int y, int w, int h) { SetPal ret; + + // If this is SGB mode then every 16 color palette must have a + // transparent color as the first entry. + // + // For most SGB Borders the Game Boy screen region is transparent and those + // tiles will all be uniform and therefore using only the first palette where + // they already have a transparent entry. Which means any additional SGB palettes + // will lack the needed transparent entry at their start. + // + // The solution is to automatically insert a transparent color to every palette + // created for an SGB tile. If another transparent entry is present then they + // will get automatically merged (regardless of RGB value *fully* transparent + // colors are now considered identical. see the CmpIntColor functor for details). + // + // The use of RGB(255,255,255) (0xFFFFFF) for the color is due to colors being sorted + // light to dark, and historical use of transparent white in existing examples. + if (isPackModeSGB) { + ret.insert( RGBA32_TRANSPARENT_WHITE ); + } + + // Now scan the tile for colors for(int j = y; j < (y + h); ++j) { for(int i = x; i < (x + w); ++i) { const unsigned char* color = &image.data[(j * image.w + i) * RGBA32_SZ]; - int color_int = (color[0] << 24) | (color[1] << 16) | (color[2] << 8) | color[3]; + int color_int = RGBA32(color[RGBA8_R], color[RGBA8_G], color[RGBA8_B], color[RGBA8_ALPHA]); ret.insert(color_int); } } diff --git a/gbdk-support/png2asset/cmp_int_color.h b/gbdk-support/png2asset/cmp_int_color.h @@ -7,25 +7,36 @@ using namespace std; //Functor to compare entries in SetPal struct CmpIntColor { + // Values accessed as bytes here will be in ABGR8 byte array format. This is + // due to RGBA:32 packed ints being accessed as bytes on what is assumed to + // be a little-endian system. + // So, [3] = Red ... [0] = Alpha + bool operator() (unsigned int const& c1, unsigned int const& c2) const { unsigned char* c1_ptr = (unsigned char*)&c1; unsigned char* c2_ptr = (unsigned char*)&c2; //Compare alpha first, transparent color is considered smaller - if(c1_ptr[0] != c2_ptr[0]) + if(c1_ptr[ABGR8_ALPHA] != c2_ptr[ABGR8_ALPHA]) { - return c1_ptr[0] < c2_ptr[0]; + return c1_ptr[ABGR8_ALPHA] < c2_ptr[ABGR8_ALPHA]; } else { + // If a color is fully transparent then consider it identical to any other + // fully transparent color and do not insert. + // If this test is reached then alpha channels are identical for the two entries + // and entry c1 is the one being tested for insertion. + if (c1_ptr[ABGR8_ALPHA] == ALPHA_FULLY_TRANSPARENT) return false; + // Do a compare with luminance in upper bits, and original rgb24 in lower bits. // This prefers luminance, but considers RGB values for equal-luminance cases to // make sure the compare functor satisifed the strictly weak ordering requirement - uint64_t lum_1 = (unsigned int)(c1_ptr[3] * 299 + c1_ptr[2] * 587 + c1_ptr[1] * 114); - uint64_t lum_2 = (unsigned int)(c2_ptr[3] * 299 + c2_ptr[2] * 587 + c2_ptr[1] * 114); - uint64_t rgb_1 = (c1_ptr[3] << 16) | (c1_ptr[2] << 8) | c1_ptr[1]; - uint64_t rgb_2 = (c2_ptr[3] << 16) | (c2_ptr[2] << 8) | c2_ptr[1]; + uint64_t lum_1 = (unsigned int)(c1_ptr[ABGR8_R] * 299 + c1_ptr[ABGR8_G] * 587 + c1_ptr[ABGR8_B] * 114); + uint64_t lum_2 = (unsigned int)(c2_ptr[ABGR8_R] * 299 + c2_ptr[ABGR8_G] * 587 + c2_ptr[ABGR8_B] * 114); + uint64_t rgb_1 = RGB24(c1_ptr[ABGR8_R], c1_ptr[ABGR8_G], c1_ptr[ABGR8_B]); + uint64_t rgb_2 = RGB24(c2_ptr[ABGR8_R], c2_ptr[ABGR8_G], c2_ptr[ABGR8_B]); uint64_t all_1 = (lum_1 << 24) | rgb_1; uint64_t all_2 = (lum_2 << 24) | rgb_2; return all_1 > all_2; @@ -38,4 +49,4 @@ struct CmpIntColor { typedef set< unsigned int, CmpIntColor > SetPal; -SetPal GetPaletteColors(const PNGImage& image, int x, int y, int w, int h); - +SetPal GetPaletteColors(const PNGImage& image, bool packModeSGB, int x, int y, int w, int h); diff --git a/gbdk-support/png2asset/image_data.cpp b/gbdk-support/png2asset/image_data.cpp @@ -145,7 +145,7 @@ int ReadImageData_Default(PNG2AssetData* assetData, string input_filename) { return EXIT_FAILURE; } - int* palettes_per_tile = BuildPalettesAndAttributes(image32, assetData->palettes, assetData->args->use_2x2_map_attributes); + int* palettes_per_tile = BuildPalettesAndAttributes(image32, assetData); // Create the indexed image // Clearing is needed to ensure loading the png works diff --git a/gbdk-support/png2asset/palettes.cpp b/gbdk-support/png2asset/palettes.cpp @@ -76,8 +76,11 @@ int FindOrCreateSubPalette(const SetPal& pal, vector< SetPal >& palettes, size_t // // Returns: array of attributes. This always has *per-tile* dimensions, even when half_resolution is true. // -int* BuildPalettesAndAttributes(const PNGImage& image32, vector< SetPal >& palettes, bool half_resolution) +int* BuildPalettesAndAttributes(const PNGImage& image32, PNG2AssetData* assetData) { + bool half_resolution = assetData->args->use_2x2_map_attributes; + vector< SetPal >& palettes = assetData->palettes; + int* palettes_per_tile = new int[(image32.w / image32.tile_w) * (image32.h / image32.tile_h)]; int sx = half_resolution ? 2 : 1; int sy = half_resolution ? 2 : 1; @@ -85,8 +88,9 @@ int* BuildPalettesAndAttributes(const PNGImage& image32, vector< SetPal >& palet { for(unsigned int x = 0; x < image32.w; x += image32.tile_w * sx) { - //Get palette colors on (x, y, image32.tile_w, image32.tile_h) - SetPal pal = GetPaletteColors(image32, (x / sx) * sx, (y / sy) * sy, sx * image32.tile_w, sy * image32.tile_h); + // Get palette colors on (x, y, image32.tile_w, image32.tile_h) + const bool isPackModeSGB = assetData->args->pack_mode == Tile::SGB; + SetPal pal = GetPaletteColors(image32, isPackModeSGB, (x / sx) * sx, (y / sy) * sy, sx * image32.tile_w, sy * image32.tile_h); int subPalIndex = FindOrCreateSubPalette(pal, palettes, image32.colors_per_pal); if(subPalIndex < 0) diff --git a/gbdk-support/png2asset/palettes.h b/gbdk-support/png2asset/palettes.h @@ -12,4 +12,4 @@ unsigned int PaletteCountApplyMaxLimit(unsigned int max_palettes, unsigned int c int FindOrCreateSubPalette(const SetPal& pal, vector< SetPal >& palettes, size_t colors_per_pal); -int* BuildPalettesAndAttributes(const PNGImage& image32, vector< SetPal >& palettes, bool half_resolution); - +int* BuildPalettesAndAttributes(const PNGImage& image32, PNG2AssetData* assetData); + diff --git a/gbdk-support/png2asset/png_image.h b/gbdk-support/png2asset/png_image.h @@ -5,6 +5,24 @@ using namespace std; #define RGBA32_SZ 4 // RGBA 8:8:8:8 is 4 bytes per pixel +// ABGR:8888 (in 8 bit array format, OR RGBA:32 packed int on little-endian systems when accessed as bytes) +#define ABGR8_R 3 // Alpha channel is [3] +#define ABGR8_G 2 // Alpha channel in [2] +#define ABGR8_B 1 // Alpha channel in [1] +#define ABGR8_ALPHA 0 // Alpha channel in [0] + +// RGBA:8888 (in 8 bit array format) +#define RGBA8_R 0 // Alpha channel is [0] +#define RGBA8_G 1 // Alpha channel in [1] +#define RGBA8_B 2 // Alpha channel in [2] +#define RGBA8_ALPHA 3 // Alpha channel in [3] + +#define RGBA32(R,G,B,A) ((R << 24) | (G << 16) | (B << 8) | A) +#define RGB24(R,G,B) ((R << 16) | (G << 8) | B) + +#define ALPHA_FULLY_TRANSPARENT 0 // Full alpha channel transparency +#define RGBA32_TRANSPARENT_WHITE (RGBA32(255,255,255,ALPHA_FULLY_TRANSPARENT)) // White, full transparency + enum { SPR_NONE, SPR_8x8, diff --git a/gbdk-support/png2asset/testing/Makefile b/gbdk-support/png2asset/testing/Makefile @@ -143,6 +143,7 @@ generate-assets: # SGB Border $(PNG2ASSET) $(RES)/SGB/sgb_border.png -c $(OUTDIR)/sgb_border_1.c -map -bpp 4 -max_palettes 4 -pack_mode sgb -use_map_attributes $(PNG2ASSET) $(RES)/SGB/sgb_border.png -c $(OUTDIR)/sgb_border_2.c -map -bpp 4 -max_palettes 4 -pack_mode sgb -use_map_attributes -no_palettes + $(PNG2ASSET) $(RES)/SGB/sgb_border_multi_pal.png -c $(OUTDIR)/sgb_border_multi_pal.c -map -bpp 4 -max_palettes 4 -pack_mode sgb -use_map_attributes # -bin output $(PNG2ASSET) $(RES)/gameboy.png -c $(OUTDIR)/binout.1.bin -bin -tiles_only diff --git a/gbdk-support/png2asset/testing/ref/sgb_border_multi_pal.c b/gbdk-support/png2asset/testing/ref/sgb_border_multi_pal.c @@ -0,0 +1,165 @@ +//AUTOGENERATED FILE FROM png2asset + +#include <stdint.h> +#include <gbdk/platform.h> +#include <gbdk/metasprites.h> + +BANKREF(sgb_border_multi_pal) + +const palette_color_t sgb_border_multi_pal_palettes[48] = { + RGB8(255,255,255), RGB8(231,222,231), RGB8(206,198,198), RGB8(165,165,165), + RGB8(255,115,181), RGB8(198, 99,115), RGB8(123,123,140), RGB8(115,115,132), + RGB8(107,107,123), RGB8( 90,107,165), RGB8(140, 66, 99), RGB8( 74, 82, 57), + RGB8(107, 57, 90), RGB8( 49, 66,123), RGB8( 0, 0, 0), RGB8( 0, 0, 0), + RGB8(255,255,255), RGB8( 0,255, 0), RGB8( 33,222, 0), RGB8( 74,181, 0), + RGB8(107,148, 0), RGB8(140,115, 0), RGB8(181, 74, 0), RGB8(214, 41, 0), + RGB8(247, 8, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), + RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), + RGB8(255,255,255), RGB8(255, 0, 0), RGB8(227, 0, 28), RGB8(189, 0, 66), + RGB8(151, 0,104), RGB8(113, 0,142), RGB8( 76, 0,179), RGB8( 38, 0,217), + RGB8( 0, 0,255), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), + RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0) + }; + +const uint8_t sgb_border_multi_pal_tiles[3456] = { + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x3f,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xfe,0x03,0xfb,0x0f,0xfc,0x1c,0xf0,0x30,0xe1,0x61,0xa2,0x63,0xc4,0xc7,0x49,0xcf,0x01,0x00,0x04,0x03,0x00,0x0f,0x00,0x1f,0x01,0x3e,0x43,0x3c,0x07,0x78,0x8f,0x70, + 0x7f,0x7f,0x80,0x80,0x00,0x00,0x38,0x3f,0x80,0xff,0x1c,0xfc,0xc0,0xc0,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0xff,0x3f,0xc0,0xff,0x00,0xfc,0x03,0xc0,0x3f,0x00,0xff, + 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0xff,0xff,0x00,0xff,0x00,0x00,0xff,0x00,0xff,0x00,0xff, + 0xfe,0x01,0xfe,0x01,0xff,0x01,0xff,0x01,0xff,0x01,0xff,0x01,0xff,0x01,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x4a,0x4e,0x82,0x8e,0x90,0x9c,0x94,0x9c,0x94,0x9c,0x84,0x9c,0x80,0x98,0x80,0x98,0x0e,0xf1,0x0e,0xf1,0x1c,0xe3,0x1c,0xe3,0x1c,0xe3,0x1c,0xe3,0x18,0xe7,0x18,0xe7, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff, + 0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0xff,0xff,0x00,0xff, + 0x00,0x00,0x00,0x00,0x06,0x0f,0x00,0x0b,0x00,0x09,0x00,0x0b,0x06,0x0f,0x00,0x00,0x00,0xff,0x00,0xff,0x01,0xf0,0x02,0xf4,0x00,0xf6,0x02,0xf4,0x01,0xf0,0x00,0xff, + 0x00,0x00,0x00,0x00,0x31,0x7b,0x00,0x79,0x00,0x49,0x00,0x79,0x30,0x79,0x00,0x00,0x00,0xff,0x00,0xff,0x48,0x84,0x30,0x86,0x00,0xb6,0x30,0x86,0x48,0x86,0x00,0xff, + 0x00,0x00,0x00,0x00,0x01,0x81,0x00,0x03,0x03,0x03,0x00,0x03,0x00,0x02,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0x7e,0x02,0xfc,0x00,0xfc,0x01,0xfc,0x00,0xfd,0x00,0xff, + 0x00,0x00,0x00,0x00,0x40,0x47,0x05,0xe7,0xe0,0xed,0x0a,0xef,0x00,0x28,0x00,0x00,0x00,0xff,0x00,0xff,0x05,0xb8,0xa2,0x18,0x08,0x12,0x40,0x10,0x00,0xd7,0x00,0xff, + 0x00,0x00,0x00,0x00,0x11,0x3b,0x00,0x12,0x01,0x93,0x80,0x92,0x00,0x92,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0xc4,0x00,0xed,0x80,0x6c,0x00,0x6d,0x00,0x6d,0x00,0xff, + 0x00,0x00,0x00,0x00,0x00,0xd6,0x02,0xd7,0x80,0xd3,0x02,0xd7,0x00,0xd6,0x00,0x00,0x00,0xff,0x00,0xff,0x42,0x29,0x85,0x28,0x42,0x2c,0x45,0x28,0x82,0x29,0x00,0xff, + 0x00,0x00,0x00,0x00,0x00,0xc1,0x80,0xc1,0x01,0x81,0x80,0xc1,0x00,0xc0,0x00,0x00,0x00,0xff,0x00,0xff,0x80,0x3e,0x40,0x3e,0x80,0x7e,0x41,0x3e,0x80,0x3f,0x00,0xff, + 0x00,0x00,0x00,0x00,0x00,0x15,0x00,0x14,0x10,0xf4,0xa0,0xf4,0x00,0xa4,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0xea,0x00,0xeb,0xa0,0x0b,0x50,0x0b,0x00,0x5b,0x00,0xff, + 0x00,0x00,0x00,0x00,0x80,0xd2,0x00,0x92,0x0c,0x9e,0x00,0x92,0x00,0x92,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0x2d,0x00,0x6d,0x00,0x61,0x00,0x6d,0x00,0x6d,0x00,0xff, + 0x00,0x00,0x00,0x00,0x05,0x0f,0x00,0x0c,0x00,0x0f,0x00,0x03,0x0a,0x0f,0x00,0x00,0x00,0xff,0x00,0xff,0x08,0xf0,0x04,0xf3,0x09,0xf0,0x02,0xfc,0x01,0xf0,0x00,0xff, + 0x00,0x00,0x00,0x00,0x22,0x77,0x00,0x24,0x01,0x27,0x00,0x24,0x02,0x27,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0x88,0x00,0xdb,0x00,0xd8,0x00,0xdb,0x00,0xd8,0x00,0xff, + 0x00,0x00,0x00,0x00,0x21,0x7b,0x00,0x5a,0x30,0x7b,0x00,0x5a,0x01,0x5b,0x00,0x00,0x00,0xff,0x00,0xff,0x08,0x84,0x10,0xa5,0x08,0x84,0x08,0xa5,0x10,0xa4,0x00,0xff, + 0x00,0x00,0x00,0x00,0x18,0xbc,0x00,0x3c,0x80,0xa4,0x00,0x3c,0x18,0xbc,0x00,0x00,0x00,0xff,0x00,0xff,0x24,0x43,0x18,0xc3,0x00,0x5b,0x18,0xc3,0x24,0x43,0x00,0xff, + 0x00,0x00,0x00,0x00,0x0a,0x1e,0x00,0x18,0x00,0x1e,0x00,0x06,0x14,0x1e,0x00,0x00,0x00,0xff,0x00,0xff,0x10,0xe1,0x08,0xe7,0x12,0xe1,0x04,0xf9,0x02,0xe1,0x00,0xff, + 0x00,0x00,0x00,0x00,0x64,0xf4,0x00,0xf4,0x00,0x94,0x00,0xf7,0x63,0xf7,0x00,0x00,0x00,0xff,0x00,0xff,0x90,0x0b,0x60,0x0b,0x00,0x6b,0x63,0x08,0x94,0x08,0x00,0xff, + 0x00,0x00,0x00,0x00,0x84,0xa5,0x00,0xb5,0x18,0xbd,0x00,0xad,0x20,0xa5,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0x5a,0x00,0x4a,0x00,0x42,0x00,0x52,0x80,0x5a,0x00,0xff, + 0x00,0x00,0x00,0x00,0xc0,0xe0,0x00,0x60,0x00,0x20,0x00,0x60,0xc0,0xe0,0x00,0x00,0x00,0xff,0x00,0xff,0x20,0x1f,0x40,0x9f,0x00,0xdf,0x40,0x9f,0x20,0x1f,0x00,0xff, + 0xff,0x01,0xff,0x01,0xff,0x01,0xff,0x01,0xff,0x01,0xff,0x01,0xff,0x01,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x80,0x98,0x80,0x98,0x80,0x98,0x80,0x98,0x80,0x98,0x80,0x98,0x80,0x98,0x80,0x98,0x18,0xe7,0x18,0xe7,0x18,0xe7,0x18,0xe7,0x18,0xe7,0x18,0xe7,0x18,0xe7,0x18,0xe7, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff, + 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x3c,0x3c,0x68,0x44,0xd4,0x83,0xc4,0x83,0xed,0x83,0x39,0x45,0x02,0x7a,0x18,0x3c,0x00,0xff,0x38,0xc7,0x6d,0x82,0x7d,0x82,0x7c,0x82,0x38,0xc6,0x40,0xbd,0x24,0xc3, + 0x00,0x00,0x00,0x00,0x40,0xee,0x2e,0xae,0xc0,0xea,0x2e,0xae,0x40,0xea,0x00,0x00,0x00,0xff,0x00,0xff,0x2a,0x11,0x00,0x51,0x20,0x15,0x00,0x51,0x20,0x15,0x00,0xff, + 0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x44,0x00,0x44,0x00,0x44,0x44,0x44,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0x11,0x00,0xbb,0x00,0xbb,0x00,0xbb,0x00,0xbb,0x00,0xff, + 0x00,0x00,0x00,0x00,0x66,0xee,0x00,0x8a,0xec,0xee,0x02,0x8e,0x60,0xea,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0x11,0x00,0x75,0x02,0x11,0x04,0x71,0x00,0x15,0x00,0xff, + 0x03,0x03,0x03,0x03,0xa3,0xa3,0x03,0xe3,0xe3,0xe3,0x03,0x43,0x03,0x43,0x03,0x03,0x00,0xff,0x00,0xff,0x00,0x5f,0x40,0x1f,0x00,0x1f,0x00,0xbf,0x00,0xbf,0x00,0xff, + 0xff,0x80,0xff,0x80,0xff,0x80,0xff,0x80,0x7f,0x80,0x7f,0x80,0x7f,0x80,0x7f,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x29,0x39,0x2a,0x3b,0x2a,0x3b,0x0a,0x3b,0x03,0x33,0x43,0x73,0x52,0x73,0x54,0x77,0x38,0xc7,0x39,0xc6,0x39,0xc6,0x39,0xc6,0x30,0xce,0x70,0x8e,0x70,0x8e,0x72,0x8c, + 0x7f,0x80,0x7f,0x80,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x01,0xfe,0x01,0xfe, + 0x14,0x77,0x07,0x66,0xa7,0xe6,0xa9,0xee,0x2b,0xec,0x0f,0xcc,0x4f,0xcc,0x53,0xdc,0x72,0x8c,0x60,0x9c,0xe0,0x1c,0xe4,0x18,0xe4,0x18,0xc0,0x38,0xc0,0x38,0xc8,0x30, + 0x00,0x01,0x02,0x03,0x00,0x03,0x01,0x07,0x08,0x0e,0x00,0x0c,0x04,0x1c,0x21,0x39,0x01,0xfe,0x03,0xfc,0x03,0xfc,0x07,0xf8,0x0e,0xf1,0x0c,0xf3,0x1c,0xe3,0x38,0xc7, + 0x17,0x98,0x9f,0x98,0x2f,0x30,0x3f,0x30,0x5f,0x60,0x5f,0x60,0xff,0xc0,0x3f,0xc0,0x88,0x70,0x80,0x70,0x10,0xe0,0x00,0xe0,0x20,0xc0,0x00,0xc0,0x00,0x80,0x80,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x03,0xfc, + 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x08,0x0f,0x02,0x1e,0x40,0x78,0x11,0xf1,0x00,0xff,0x00,0xff,0x01,0xfe,0x03,0xfc,0x0f,0xf0,0x1e,0xe1,0x78,0x87,0xf0,0x0f, + 0x41,0x71,0x93,0xf3,0x26,0xe7,0x49,0xce,0x13,0x1c,0x27,0x38,0x6f,0x70,0xff,0xc0,0x70,0x8f,0xf0,0x0e,0xe0,0x1c,0xc4,0x38,0x08,0xf0,0x10,0xe0,0x00,0xc0,0x00,0x80, + 0xff,0x80,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x07,0x07,0xe0,0xff,0x03,0xff,0xf0,0xf0,0x01,0x01,0x7e,0x7f,0x8c,0xff,0x00,0xff,0x07,0xf8,0xff,0x00,0xff,0x00,0xf0,0x0f,0x00,0xff,0x01,0xfe,0x70,0x80, + 0x30,0x3f,0x03,0xff,0x38,0xf8,0x81,0x81,0x1e,0x1f,0xe6,0xff,0x6f,0xf0,0x7f,0x80,0x3f,0xc0,0xff,0x00,0xf8,0x07,0x80,0x7f,0x01,0xfe,0x18,0xe0,0x80,0x00,0x00,0x00, + 0x42,0xc3,0x0e,0x0f,0x33,0x3c,0xdf,0xf0,0x7f,0xc0,0xff,0x00,0xff,0x00,0xff,0x00,0xc1,0x3e,0x00,0xfc,0x08,0xf0,0x20,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x7f,0x80,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x80,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x7f,0xff,0xff,0xf3,0xff, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x80,0xff,0x08,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xc7,0xc7,0x87,0xcf, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x80,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x40,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x30,0x38,0x38,0x78, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x10,0xff,0x00,0xff,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x08,0x1c,0x1c,0x1c, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x20,0xff,0x20,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x3f, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x10,0xff,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xf0,0xe0,0xe0,0xc0,0xe0, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x20,0xff,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x1f,0x1f,0x1f,0x1b,0x1f, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x40,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xe0,0xf1, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x42,0xff,0x01,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x3c,0x7e,0xfe,0xff,0xff, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x08,0xff,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x70,0x30,0x70,0x30,0x38, + 0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x04,0xff,0x40,0xff,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x38,0x30,0x38,0x30,0x70, + 0xf0,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x3f,0xc0,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x04,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x78,0x78,0x78,0x78,0x7c, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xec,0xee,0xec,0xee,0xe0,0xe0, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x70,0xf8,0xf8, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x0e,0x0e,0x0e, + 0xff,0x08,0xff,0x00,0xff,0x00,0xff,0x02,0xff,0x20,0xff,0x04,0xff,0x04,0xff,0x00,0x07,0x07,0x0e,0x0f,0x0c,0x1e,0x1c,0x1c,0x18,0x1c,0x18,0x38,0x38,0x38,0x38,0x38, + 0xff,0x63,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x01,0xff,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x7e,0x7e,0x7e, + 0xff,0x40,0xff,0x10,0xff,0x00,0xff,0x00,0xff,0x22,0xff,0x00,0xff,0x04,0xff,0x47,0x0f,0x8f,0x0f,0x0f,0x0f,0x1f,0x1d,0x1f,0x1d,0x1d,0x18,0x3d,0x38,0x39,0x30,0x38, + 0xff,0x40,0xff,0x40,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x20,0xff,0x21,0xff,0x00,0x80,0x80,0x80,0x80,0x80,0xc0,0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xe1, + 0xff,0x04,0xff,0x04,0xff,0x80,0xff,0x00,0xff,0x00,0xff,0x03,0xff,0x02,0xff,0x20,0x38,0x78,0x78,0x78,0x78,0x7c,0x78,0xfc,0x7c,0xfc,0xdc,0xfc,0xdc,0xfd,0xcd,0xdf, + 0xff,0x00,0xff,0x42,0xff,0x02,0xff,0x82,0xff,0x00,0xff,0x00,0xff,0x20,0xff,0x10,0x1c,0x3c,0x3c,0x3c,0x3c,0x7c,0x7c,0x7c,0x6c,0xfe,0xcc,0xfe,0xcc,0xde,0x8e,0xce, + 0xff,0x04,0xff,0x04,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x40,0xff,0x40,0xff,0x40,0x18,0x38,0x18,0x38,0x38,0x38,0x30,0x38,0x30,0x38,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x20,0xff,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xe0,0xc0,0xc0,0x80,0xc0, + 0xff,0x04,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x46,0xff,0x40,0xff,0x00,0xff,0x00,0x18,0x38,0x18,0x38,0x38,0x38,0x30,0x38,0x30,0x39,0x3f,0x3f,0x3f,0x7f,0x3f,0x7f, + 0xff,0x02,0xff,0x80,0xff,0x80,0xff,0x04,0xff,0x10,0xff,0x00,0xff,0x10,0xff,0x00,0x71,0xf1,0x71,0x73,0x71,0x73,0x63,0xf3,0xe3,0xe7,0xc3,0xe7,0xe3,0xe7,0xe7,0xf7, + 0xff,0x00,0xff,0x20,0xff,0x04,0xff,0x40,0xff,0x00,0xff,0x80,0xff,0x80,0xff,0x04,0xe7,0xff,0xc3,0xc7,0x83,0xc3,0x83,0x83,0x03,0x83,0x03,0x03,0x03,0x03,0x03,0x03, + 0xff,0x80,0xff,0x80,0xff,0x25,0xff,0x00,0xff,0x02,0xff,0x10,0xff,0x00,0xff,0x00,0x30,0x38,0x18,0x38,0x18,0x98,0x18,0x9d,0x8d,0x9d,0x8f,0x8f,0x8f,0x8f,0x06,0x8f, + 0xff,0x80,0xff,0x10,0xff,0x00,0xff,0x20,0xff,0x00,0xff,0x40,0xff,0x00,0xff,0x80,0x60,0x70,0x60,0xe0,0xc0,0xe0,0xc0,0xc0,0x80,0xc0,0x80,0x80,0x00,0x80,0x00,0x00, + 0xff,0x00,0x00,0xff,0xff,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0xff, + 0xff,0x02,0xff,0x08,0xff,0x01,0xff,0x04,0xff,0x00,0xff,0x02,0xff,0x00,0xff,0x00,0x74,0x7c,0x74,0x76,0x72,0x76,0x72,0x73,0x71,0x73,0x71,0x71,0x70,0x71,0x00,0x00, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xe0,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x00,0x00, + 0xff,0x08,0xff,0x00,0xff,0x08,0xff,0x10,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xe0,0xe6,0xfe,0xff,0xe6,0xf7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0x00,0x00, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x61,0x73,0x63,0x77,0x63,0x77,0x67,0x77,0x63,0x77,0x63,0x77,0x61,0x73,0x00,0x00, + 0xff,0x00,0xff,0xc0,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x40,0xff,0x00,0xff,0x00,0xe3,0xf3,0x33,0x3b,0x33,0x3b,0xfb,0xfb,0x03,0x03,0x13,0x3b,0xe3,0xf3,0x00,0x00, + 0xff,0x20,0xff,0x00,0xff,0x20,0xff,0x40,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x80,0x98,0xf8,0xfd,0x98,0xdd,0x9d,0x9d,0x9c,0x9d,0x9c,0x9d,0x9c,0x9c,0x00,0x00, + 0xff,0x00,0xff,0x30,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x30,0xff,0x00,0xff,0x00,0x7e,0xfe,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0x7e,0xfe,0x00,0x00, + 0xff,0x00,0xff,0x18,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x18,0xff,0x00,0xff,0x00,0x3c,0x7e,0x66,0xe7,0x66,0xe7,0xe7,0xe7,0x66,0xe7,0x66,0xe7,0x3c,0x7e,0x00,0x00, + 0xff,0x00,0xff,0x04,0xff,0x04,0xff,0x00,0xff,0x21,0xff,0x00,0xff,0x00,0xff,0x04,0x38,0x38,0x38,0x38,0x38,0x38,0x18,0x3c,0x1c,0x1e,0x0f,0x1f,0x07,0x0f,0x01,0x03, + 0xff,0x00,0xff,0x02,0xff,0x00,0xff,0x20,0xff,0x44,0xff,0x01,0xff,0x00,0xff,0x10,0x7c,0xfe,0x0c,0x1c,0x1c,0x1c,0x18,0x1c,0x38,0x38,0x78,0xf8,0xf0,0xf9,0xc1,0xe1, + 0xff,0x00,0xff,0x00,0xff,0x8f,0xff,0x10,0xff,0x00,0xff,0x00,0xff,0x20,0xff,0x00,0x3f,0x7f,0x7f,0x7f,0x60,0x70,0x60,0xe0,0xe0,0xe0,0xc0,0xe0,0xc0,0xc0,0xc0,0xc0, + 0xff,0x00,0xff,0x00,0xff,0x12,0xff,0x10,0xff,0x80,0xff,0x80,0xff,0x0c,0xff,0x08,0xc0,0xe1,0xe1,0xe1,0x61,0xe1,0x61,0xe3,0x61,0x73,0x63,0x73,0x73,0x73,0x33,0x77, + 0xff,0x00,0xff,0x10,0xff,0x00,0xff,0x40,0xff,0x01,0xff,0x08,0xff,0x0a,0xff,0x80,0xcd,0xdf,0x8f,0xcf,0x8f,0xcf,0x86,0x8f,0x86,0x8e,0x04,0x86,0x04,0x84,0x00,0x04, + 0xff,0x50,0xff,0x01,0xff,0x81,0xff,0x01,0xff,0x00,0xff,0x00,0xff,0x08,0xff,0x08,0x8e,0x8e,0x0e,0x8e,0x0e,0x0e,0x06,0x0e,0x06,0x0f,0x06,0x0f,0x06,0x07,0x07,0x07, + 0xff,0x08,0xff,0x08,0xff,0x80,0xff,0x80,0xff,0x80,0xff,0x80,0xff,0x80,0xff,0x80,0x30,0x70,0x30,0x70,0x30,0x70,0x60,0x70,0x60,0x70,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x10,0xff,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xf0,0xe0,0xe0,0xc0,0xe0, + 0xff,0x09,0xff,0x08,0xff,0x80,0xff,0x80,0xff,0x0c,0xff,0x00,0xff,0x00,0xff,0x01,0x70,0x70,0x70,0x70,0x70,0x70,0x60,0x70,0x61,0xf3,0x7f,0xff,0xff,0xff,0xf8,0xfe, + 0xff,0x00,0xff,0x80,0xff,0x80,0xff,0x00,0xff,0x14,0xff,0x00,0xff,0x02,0xff,0x81,0x77,0xf7,0x77,0x77,0x73,0x77,0x63,0xf7,0xe3,0xe3,0xc3,0xe3,0x81,0xc1,0x00,0x00, + 0xff,0x04,0xff,0x00,0xff,0x88,0xff,0x10,0xff,0x21,0xff,0x00,0xff,0x00,0xff,0x08,0x03,0x03,0x03,0x07,0x07,0x07,0x06,0x8f,0x8e,0xde,0xfc,0xfe,0xf8,0xfc,0x40,0xf0, + 0xff,0x08,0xff,0x88,0xff,0x81,0xff,0x01,0xff,0x00,0xff,0x00,0xff,0x10,0xff,0x10,0x06,0x87,0x06,0x07,0x06,0x0e,0x06,0x0e,0x0e,0x0e,0x0e,0x0e,0x0c,0x0e,0x0c,0x0e, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x1c,0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x08, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x20,0xff,0x00,0xff,0x00,0xff,0x20,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0xd8,0xd8,0xd8,0xa8,0xf8,0xa8,0xa8,0x00,0x88 + }; + + +const unsigned char sgb_border_multi_pal_map[1792] = { + 0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10, + 0x00,0x10,0x00,0x10,0x01,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x01,0x50,0x00,0x10,0x00,0x10, + 0x00,0x10,0x03,0x10,0x04,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x05,0x10,0x04,0x50,0x03,0x50,0x00,0x10, + 0x06,0x10,0x07,0x10,0x08,0x10,0x09,0x10,0x09,0x10,0x09,0x10,0x09,0x10,0x09,0x10,0x09,0x10,0x09,0x10,0x0a,0x10,0x0b,0x10,0x0c,0x10,0x0d,0x10,0x0e,0x10,0x0f,0x10,0x10,0x10,0x11,0x10,0x12,0x10,0x13,0x10,0x14,0x10,0x15,0x10,0x16,0x10,0x17,0x10,0x18,0x10,0x19,0x10,0x1a,0x10,0x09,0x10,0x09,0x10,0x08,0x10,0x07,0x50,0x06,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1d,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1e,0x10,0x1d,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x21,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x22,0x10,0x23,0x10,0x24,0x10,0x25,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x1b,0x50, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x1c,0x50,0x26,0x10, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x08,0x10,0x27,0x10,0x28,0x10, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x29,0x10,0x2a,0x10,0x00,0x10, + 0x1b,0x10,0x1c,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x1f,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x1f,0x50,0x08,0x10,0x08,0x10,0x2b,0x10,0x2c,0x10,0x00,0x10, + 0x06,0x90,0x07,0x90,0x08,0x10,0x08,0x10,0x08,0x10,0x1d,0x90,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1e,0xd0,0x1d,0xd0,0x2d,0x10,0x2e,0x10,0x2f,0x10,0x30,0x10,0x00,0x10, + 0x00,0x10,0x03,0x90,0x04,0x90,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x05,0xd0,0x31,0x10,0x32,0x10,0x33,0x10,0x34,0x10,0x00,0x10,0x00,0x10, + 0x00,0x10,0x00,0x10,0x01,0x90,0x02,0xd0,0x02,0xd0,0x02,0xd0,0x02,0xd0,0x02,0xd0,0x02,0xd0,0x02,0xd0,0x35,0x10,0x36,0x10,0x37,0x10,0x38,0x10,0x39,0x10,0x3a,0x10,0x3b,0x10,0x3c,0x10,0x3d,0x10,0x3e,0x10,0x3f,0x10,0x40,0x10,0x41,0x10,0x02,0xd0,0x02,0xd0,0x42,0x10,0x43,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10, + 0x00,0x10,0x00,0x10,0x44,0x10,0x45,0x10,0x00,0x10,0x46,0x10,0x00,0x10,0x00,0x10,0x47,0x10,0x00,0x10,0x48,0x10,0x49,0x10,0x4a,0x10,0x4b,0x10,0x4c,0x10,0x4d,0x10,0x4e,0x10,0x4f,0x10,0x50,0x10,0x51,0x10,0x52,0x10,0x53,0x10,0x54,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x55,0x14,0x55,0x14,0x55,0x14, + 0x00,0x10,0x00,0x10,0x56,0x10,0x57,0x10,0x58,0x10,0x59,0x10,0x5a,0x10,0x5b,0x10,0x5c,0x10,0x5d,0x10,0x5e,0x10,0x5f,0x10,0x60,0x10,0x61,0x10,0x62,0x10,0x63,0x10,0x64,0x10,0x65,0x10,0x66,0x10,0x67,0x10,0x68,0x10,0x69,0x10,0x6a,0x10,0x6b,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x55,0xd8,0x55,0xd8,0x55,0xd8, +}; diff --git a/gbdk-support/png2asset/testing/ref/sgb_border_multi_pal.h b/gbdk-support/png2asset/testing/ref/sgb_border_multi_pal.h @@ -0,0 +1,31 @@ +//AUTOGENERATED FILE FROM png2asset +#ifndef METASPRITE_sgb_border_multi_pal_H +#define METASPRITE_sgb_border_multi_pal_H + +#include <stdint.h> +#include <gbdk/platform.h> +#include <gbdk/metasprites.h> + +#define sgb_border_multi_pal_TILE_ORIGIN 0 +#define sgb_border_multi_pal_TILE_W 8 +#define sgb_border_multi_pal_TILE_H 8 +#define sgb_border_multi_pal_WIDTH 256 +#define sgb_border_multi_pal_HEIGHT 224 +#define sgb_border_multi_pal_TILE_COUNT 108 +#define sgb_border_multi_pal_PALETTE_COUNT 3 +#define sgb_border_multi_pal_COLORS_PER_PALETTE 16 +#define sgb_border_multi_pal_TOTAL_COLORS 48 +#define sgb_border_multi_pal_MAP_ATTRIBUTES 0 +#define sgb_border_multi_pal_MAP_ATTRIBUTES_WIDTH 32 +#define sgb_border_multi_pal_MAP_ATTRIBUTES_HEIGHT 28 +#define sgb_border_multi_pal_MAP_ATTRIBUTES_PACKED_WIDTH 32 +#define sgb_border_multi_pal_MAP_ATTRIBUTES_PACKED_HEIGHT 28 +extern const unsigned char sgb_border_multi_pal_map[1792]; +#define sgb_border_multi_pal_map_attributes sgb_border_multi_pal_map + +BANKREF_EXTERN(sgb_border_multi_pal) + +extern const palette_color_t sgb_border_multi_pal_palettes[48]; +extern const uint8_t sgb_border_multi_pal_tiles[3456]; + +#endif diff --git a/gbdk-support/png2asset/testing/res/SGB/sgb_border_multi_pal.png b/gbdk-support/png2asset/testing/res/SGB/sgb_border_multi_pal.png Binary files differ.

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