diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-10-14 13:23:48 -0500 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-10-14 13:23:48 -0500 |
commit | 67af64e101b23e6e0e3de8e642719810882b5ce2 (patch) | |
tree | 8769b4f816944d564e3cd8c5a86f8aa78734f891 /tools/gbagfx/gfx.c | |
parent | 051a218980ba5bd3540ba1f3a47295de6f5cf6c7 (diff) |
Add -pinball-hatch-sprite option to gbagfx because it's a non-generalizable format
Diffstat (limited to 'tools/gbagfx/gfx.c')
-rwxr-xr-x | tools/gbagfx/gfx.c | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index f927dee..04ee19c 100755 --- a/tools/gbagfx/gfx.c +++ b/tools/gbagfx/gfx.c @@ -35,6 +35,32 @@ static void AdvanceMetatilePosition(int *subTileX, int *subTileY, int *metatileX } } +static void AdvancePinballHatchSpriteMetatilePosition(int *subTileX, int *subTileY, int *metatileX, int *metatileY, int metatilesWide) +{ + int subTileCoords[9][2] = { + {1, 0}, + {0, 1}, + {2, 1}, + {1, 1}, + {2, 0}, + {0, 2}, + {1, 2}, + {2, 2}, + {0, 0}, + }; + + int tileIndex = *subTileX + (*subTileY) * 3; + *subTileX = subTileCoords[tileIndex][0]; + *subTileY = subTileCoords[tileIndex][1]; + if (tileIndex == 8) { + (*metatileX)++; + if (*metatileX == metatilesWide) { + *metatileX = 0; + (*metatileY)++; + } + } +} + static void ConvertFromTiles1Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors) { int subTileX = 0; @@ -61,7 +87,7 @@ static void ConvertFromTiles1Bpp(unsigned char *src, unsigned char *dest, int nu } } -static void ConvertFromTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors) +static void ConvertFromTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool pinballHatchSprite, bool invertColors) { int subTileX = 0; int subTileY = 0; @@ -88,7 +114,11 @@ static void ConvertFromTiles4Bpp(unsigned char *src, unsigned char *dest, int nu } } - AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); + if (pinballHatchSprite) { + AdvancePinballHatchSpriteMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide); + } else { + AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); + } } } @@ -145,7 +175,7 @@ static void ConvertToTiles1Bpp(unsigned char *src, unsigned char *dest, int numT } } -static void ConvertToTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors) +static void ConvertToTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool pinballHatchSprite, bool invertColors) { int subTileX = 0; int subTileY = 0; @@ -172,7 +202,11 @@ static void ConvertToTiles4Bpp(unsigned char *src, unsigned char *dest, int numT } } - AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); + if (pinballHatchSprite) { + AdvancePinballHatchSpriteMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide); + } else { + AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); + } } } @@ -203,7 +237,7 @@ static void ConvertToTiles8Bpp(unsigned char *src, unsigned char *dest, int numT } } -void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) +void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, bool pinballHatchSprite, struct Image *image, bool invertColors) { int tileSize = bitDepth * 8; @@ -235,7 +269,7 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int ConvertFromTiles1Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; case 4: - ConvertFromTiles4Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); + ConvertFromTiles4Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, pinballHatchSprite, invertColors); break; case 8: ConvertFromTiles8Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); @@ -245,7 +279,7 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int free(buffer); } -void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) +void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, bool pinballHatchSprite, struct Image *image, bool invertColors) { int tileSize = bitDepth * 8; @@ -284,7 +318,7 @@ void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int m ConvertToTiles1Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; case 4: - ConvertToTiles4Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); + ConvertToTiles4Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, pinballHatchSprite, invertColors); break; case 8: ConvertToTiles8Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); |