From 72d5ef329b1a0ec07f8fb6c5e23011b7e1a45b61 Mon Sep 17 00:00:00 2001 From: heinrich5991 Date: Sat, 26 Nov 2011 20:19:57 +0100 Subject: added tileset_borderrem and renamed tileset_bordercopy -> tileset_borderset --- src/tools/tileset_bordercopy.cpp | 78 ------------------------------------ src/tools/tileset_borderrem.cpp | 86 ++++++++++++++++++++++++++++++++++++++++ src/tools/tileset_borderset.cpp | 78 ++++++++++++++++++++++++++++++++++++ 3 files changed, 164 insertions(+), 78 deletions(-) delete mode 100644 src/tools/tileset_bordercopy.cpp create mode 100644 src/tools/tileset_borderrem.cpp create mode 100644 src/tools/tileset_borderset.cpp diff --git a/src/tools/tileset_bordercopy.cpp b/src/tools/tileset_bordercopy.cpp deleted file mode 100644 index b0d9280b..00000000 --- a/src/tools/tileset_bordercopy.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ -/* If you are missing that file, acquire a complete release at teeworlds.com. */ -#include -#include -#include - -typedef struct -{ - unsigned char r, g, b, a; -} CPixel; - -static void TilesetBordercopy(int w, int h, CPixel *pSrc, CPixel *pDest) -{ - int TileW = w/16; - int TileH = h/16; - - for(int tx = 0; tx < 16; tx++) - { - for(int ty = 0; ty < 16; ty++) - { - for(int x = 0; x < TileW; x++) - { - for(int y = 0; y < TileH; y++) - { - #define TILE_INDEX(tx_, ty_, x_, y_) (((ty_) * TileH + (y_)) * w + (tx_) * TileW + (x_)) - pDest[TILE_INDEX(tx, ty, x, y)] = pSrc[TILE_INDEX(tx, ty, clamp(x, 2, TileW - 3), clamp(y, 2, TileH - 3))]; - } - } - } - } -} - - -int FixFile(const char *pFileName) -{ - png_t Png; - CPixel *pBuffer[2] = {0,0}; - - png_init(0, 0); - png_open_file(&Png, pFileName); - - if(Png.color_type != PNG_TRUECOLOR_ALPHA) - { - dbg_msg("tileset_bordercopy", "%s: not an RGBA image", pFileName); - return 1; - } - - int w = Png.width; - int h = Png.height; - - pBuffer[0] = (CPixel*)mem_alloc(w*h*sizeof(CPixel), 1); - pBuffer[1] = (CPixel*)mem_alloc(w*h*sizeof(CPixel), 1); - png_get_data(&Png, (unsigned char *)pBuffer[0]); - png_close_file(&Png); - - TilesetBordercopy(w, h, pBuffer[0], pBuffer[1]); - - // save here - png_open_file_write(&Png, pFileName); - png_set_data(&Png, w, h, 8, PNG_TRUECOLOR_ALPHA, (unsigned char *)pBuffer[1]); - png_close_file(&Png); - - return 0; -} - -int main(int argc, const char **argv) -{ - dbg_logger_stdout(); - if(argc == 1) - { - dbg_msg("Usage", "%s FILE1 [ FILE2... ]", argv[0]); - return -1; - } - - for(int i = 1; i < argc; i++) - FixFile(argv[i]); - return 0; -} diff --git a/src/tools/tileset_borderrem.cpp b/src/tools/tileset_borderrem.cpp new file mode 100644 index 00000000..d604ecbd --- /dev/null +++ b/src/tools/tileset_borderrem.cpp @@ -0,0 +1,86 @@ +/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ +/* If you are missing that file, acquire a complete release at teeworlds.com. */ +#include +#include +#include + +typedef struct +{ + unsigned char r, g, b, a; +} CPixel; + +static void TilesetBorderrem(int w, int h, CPixel *pSrc, CPixel *pDest) +{ + int TileW = w/16; + int TileH = h/16; + + for(int tx = 0; tx < 16; tx++) + { + for(int ty = 0; ty < 16; ty++) + { + for(int x = 0; x < TileW - 4; x++) + { + for(int y = 0; y < TileH - 4; y++) + { + int SourceX = tx * TileW + x + 2; + int SourceY = ty * TileH + y + 2; + int DestX = tx * (TileW - 4) + x; + int DestY = ty * (TileH - 4) + y; + + int SourceI = SourceY * w + SourceX; + int DestI = DestY * (w - 16 * 4) + DestX; + + pDest[DestI] = pSrc[SourceI]; + + } + } + } + } +} + + +int FixFile(const char *pFileName) +{ + png_t Png; + CPixel *pBuffer[2] = {0,0}; + + png_init(0, 0); + png_open_file(&Png, pFileName); + + if(Png.color_type != PNG_TRUECOLOR_ALPHA) + { + dbg_msg("tileset_borderrem", "%s: not an RGBA image", pFileName); + return 1; + } + + int w = Png.width; + int h = Png.height; + + pBuffer[0] = (CPixel*)mem_alloc(w*h*sizeof(CPixel), 1); + pBuffer[1] = (CPixel*)mem_alloc((w-16*4)*(h-16*4)*sizeof(CPixel), 1); + png_get_data(&Png, (unsigned char *)pBuffer[0]); + png_close_file(&Png); + + TilesetBorderrem(w, h, pBuffer[0], pBuffer[1]); + + // save here + png_open_file_write(&Png, pFileName); + png_set_data(&Png, w - 16 * 4, h - 16 * 4, 8, PNG_TRUECOLOR_ALPHA, (unsigned char *)pBuffer[1]); + png_close_file(&Png); + + return 0; +} + +int main(int argc, const char **argv) +{ + dbg_logger_stdout(); + if(argc == 1) + { + dbg_msg("Usage", "%s FILE1 [ FILE2... ]", argv[0]); + return -1; + } + + for(int i = 1; i < argc; i++) + FixFile(argv[i]); + return 0; +} diff --git a/src/tools/tileset_borderset.cpp b/src/tools/tileset_borderset.cpp new file mode 100644 index 00000000..8b3e2996 --- /dev/null +++ b/src/tools/tileset_borderset.cpp @@ -0,0 +1,78 @@ +/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ +/* If you are missing that file, acquire a complete release at teeworlds.com. */ +#include +#include +#include + +typedef struct +{ + unsigned char r, g, b, a; +} CPixel; + +static void TilesetBorderset(int w, int h, CPixel *pSrc, CPixel *pDest) +{ + int TileW = w/16; + int TileH = h/16; + + for(int tx = 0; tx < 16; tx++) + { + for(int ty = 0; ty < 16; ty++) + { + for(int x = 0; x < TileW; x++) + { + for(int y = 0; y < TileH; y++) + { + #define TILE_INDEX(tx_, ty_, x_, y_) (((ty_) * TileH + (y_)) * w + (tx_) * TileW + (x_)) + pDest[TILE_INDEX(tx, ty, x, y)] = pSrc[TILE_INDEX(tx, ty, clamp(x, 2, TileW - 3), clamp(y, 2, TileH - 3))]; + } + } + } + } +} + + +int FixFile(const char *pFileName) +{ + png_t Png; + CPixel *pBuffer[2] = {0,0}; + + png_init(0, 0); + png_open_file(&Png, pFileName); + + if(Png.color_type != PNG_TRUECOLOR_ALPHA) + { + dbg_msg("tileset_borderset", "%s: not an RGBA image", pFileName); + return 1; + } + + int w = Png.width; + int h = Png.height; + + pBuffer[0] = (CPixel*)mem_alloc(w*h*sizeof(CPixel), 1); + pBuffer[1] = (CPixel*)mem_alloc(w*h*sizeof(CPixel), 1); + png_get_data(&Png, (unsigned char *)pBuffer[0]); + png_close_file(&Png); + + TilesetBorderset(w, h, pBuffer[0], pBuffer[1]); + + // save here + png_open_file_write(&Png, pFileName); + png_set_data(&Png, w, h, 8, PNG_TRUECOLOR_ALPHA, (unsigned char *)pBuffer[1]); + png_close_file(&Png); + + return 0; +} + +int main(int argc, const char **argv) +{ + dbg_logger_stdout(); + if(argc == 1) + { + dbg_msg("Usage", "%s FILE1 [ FILE2... ]", argv[0]); + return -1; + } + + for(int i = 1; i < argc; i++) + FixFile(argv[i]); + return 0; +} -- cgit 1.4.1