From 7c1e0016bfbaf83edc7ced6c18525b02cef706e8 Mon Sep 17 00:00:00 2001 From: ennewalker Date: Fri, 12 Sep 2008 03:55:34 +0000 Subject: Incorporating new tiles from Denzi/Mitsuhiro. Rings and amulets now have labels when identified. Centaurs/yaktaurs now display the weapon they're wielding (and look better too). Variations of weapons and armor (i.e. normal, shiny, randart) are now determined automatically from the tile definitions, rather than being hardcoded. Also, improved axe tiles. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6910 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/rltiles/tool/tile_colour.cc | 55 +++++++++++++++++++++++++++ crawl-ref/source/rltiles/tool/tile_colour.h | 3 ++ crawl-ref/source/rltiles/tool/tile_convert.cc | 49 ++++++++++++++++++++++++ crawl-ref/source/rltiles/tool/tile_page.cc | 51 ------------------------- 4 files changed, 107 insertions(+), 51 deletions(-) create mode 100644 crawl-ref/source/rltiles/tool/tile_convert.cc (limited to 'crawl-ref/source/rltiles/tool') diff --git a/crawl-ref/source/rltiles/tool/tile_colour.cc b/crawl-ref/source/rltiles/tool/tile_colour.cc index 88cb69c75f..69df5e97f7 100644 --- a/crawl-ref/source/rltiles/tool/tile_colour.cc +++ b/crawl-ref/source/rltiles/tool/tile_colour.cc @@ -1,4 +1,7 @@ #include "tile_colour.h" +#include +#include +#include tile_colour tile_colour::background(71, 108, 108, 255); tile_colour tile_colour::transparent(0, 0, 0, 0); @@ -23,3 +26,55 @@ const tile_colour &tile_colour::operator=(const tile_colour &rhs) return *this; } + +bool write_png(const char *filename, tile_colour *pixels, + int width, int height) +{ + FILE *fp = fopen(filename, "wb"); + if (!fp) + { + fprintf(stderr, "Error: Can't open file '%s' for write.\n", filename); + return false; + } + + png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, + NULL, NULL, NULL); + if (!png_ptr) + return false; + + png_infop info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) + { + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + return false; + } + + png_init_io(png_ptr, fp); + + int bit_depth = 8; + int colour_type = PNG_COLOR_TYPE_RGB_ALPHA; + int interlace_type = PNG_INTERLACE_NONE; + int compression_type = PNG_COMPRESSION_TYPE_DEFAULT; + int filter_method = PNG_FILTER_TYPE_DEFAULT; + png_set_IHDR(png_ptr, info_ptr, width, height, + bit_depth, colour_type, interlace_type, + compression_type, filter_method); + + png_bytep* row_pointers = (png_bytep*)malloc(sizeof(png_bytep) * height); + for (unsigned int y = 0; y < height; y++) + row_pointers[y] = (png_byte*)&pixels[y * width]; + + png_set_rows(png_ptr, info_ptr, row_pointers); + + int png_transforms = PNG_TRANSFORM_IDENTITY; + png_write_png(png_ptr, info_ptr, png_transforms, NULL); + png_write_end(png_ptr, info_ptr); + png_destroy_write_struct(&png_ptr, &info_ptr); + + free(row_pointers); + fclose(fp); + + return true; +} + + diff --git a/crawl-ref/source/rltiles/tool/tile_colour.h b/crawl-ref/source/rltiles/tool/tile_colour.h index f994010bac..f7b5c75dea 100644 --- a/crawl-ref/source/rltiles/tool/tile_colour.h +++ b/crawl-ref/source/rltiles/tool/tile_colour.h @@ -22,4 +22,7 @@ public: static tile_colour black; }; +bool write_png(const char *filename, tile_colour *pixels, + int width, int height); + #endif diff --git a/crawl-ref/source/rltiles/tool/tile_convert.cc b/crawl-ref/source/rltiles/tool/tile_convert.cc new file mode 100644 index 0000000000..b65518cfb2 --- /dev/null +++ b/crawl-ref/source/rltiles/tool/tile_convert.cc @@ -0,0 +1,49 @@ +#include +#include + +// This is a standalone utility to convert old-style palettized BMPs +// to transparent PNGs. + +#include "tile.h" + +int main(int argc, char **argv) +{ + if (argc < 2) + { + printf("Usage: %s (filename.bmp)\n", argv[0]); + return -1; + } + + char dest[1024]; + strcpy(dest, argv[1]); + + size_t len = strlen(dest); + if (strcmp(&dest[len-4], ".bmp")) + { + printf("File '%s' does not end in bmp.\n", argv[1]); + return -2; + } + + dest[len-3] = 'p'; + dest[len-2] = 'n'; + dest[len-1] = 'g'; + + tile conv; + if (!conv.load(argv[1])) + { + printf("Failed to load '%s'.\n", argv[1]); + return -3; + } + + conv.replace_colour(tile_colour::background, tile_colour::transparent); + + if (!write_png(dest, &conv.get_pixel(0,0), conv.width(), conv.height())) + { + printf("Failed to write dest '%s'.\n", dest); + return -4; + } + + printf("Converted '%s'.\n", argv[1]); + + return 0; +} diff --git a/crawl-ref/source/rltiles/tool/tile_page.cc b/crawl-ref/source/rltiles/tool/tile_page.cc index 1d0474d592..29c9ecf65b 100644 --- a/crawl-ref/source/rltiles/tool/tile_page.cc +++ b/crawl-ref/source/rltiles/tool/tile_page.cc @@ -1,57 +1,6 @@ #include "tile_page.h" #include "tile_colour.h" #include "tile.h" -#include - -static bool write_png(const char *filename, tile_colour *pixels, - int width, int height) -{ - FILE *fp = fopen(filename, "wb"); - if (!fp) - { - fprintf(stderr, "Error: Can't open file '%s' for write.\n", filename); - return false; - } - - png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, - NULL, NULL, NULL); - if (!png_ptr) - return false; - - png_infop info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) - { - png_destroy_write_struct(&png_ptr, (png_infopp)NULL); - return false; - } - - png_init_io(png_ptr, fp); - - int bit_depth = 8; - int colour_type = PNG_COLOR_TYPE_RGB_ALPHA; - int interlace_type = PNG_INTERLACE_NONE; - int compression_type = PNG_COMPRESSION_TYPE_DEFAULT; - int filter_method = PNG_FILTER_TYPE_DEFAULT; - png_set_IHDR(png_ptr, info_ptr, width, height, - bit_depth, colour_type, interlace_type, - compression_type, filter_method); - - png_bytep* row_pointers = (png_bytep*)malloc(sizeof(png_bytep) * height); - for (unsigned int y = 0; y < height; y++) - row_pointers[y] = (png_byte*)&pixels[y * width]; - - png_set_rows(png_ptr, info_ptr, row_pointers); - - int png_transforms = PNG_TRANSFORM_IDENTITY; - png_write_png(png_ptr, info_ptr, png_transforms, NULL); - png_write_end(png_ptr, info_ptr); - png_destroy_write_struct(&png_ptr, &info_ptr); - - free(row_pointers); - fclose(fp); - - return true; -} tile_page::tile_page() : m_width(1024), m_height(0) { -- cgit v1.2.3-54-g00ecf