summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/rltiles/tool
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-12 03:55:34 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-12 03:55:34 +0000
commit7c1e0016bfbaf83edc7ced6c18525b02cef706e8 (patch)
tree77d315f9f55aba8bb2372974b17b8f7dbc26a1b6 /crawl-ref/source/rltiles/tool
parentb1c63e6499689b802d76caa64f766a36ec081ec2 (diff)
downloadcrawl-ref-7c1e0016bfbaf83edc7ced6c18525b02cef706e8.tar.gz
crawl-ref-7c1e0016bfbaf83edc7ced6c18525b02cef706e8.zip
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
Diffstat (limited to 'crawl-ref/source/rltiles/tool')
-rw-r--r--crawl-ref/source/rltiles/tool/tile_colour.cc55
-rw-r--r--crawl-ref/source/rltiles/tool/tile_colour.h3
-rw-r--r--crawl-ref/source/rltiles/tool/tile_convert.cc49
-rw-r--r--crawl-ref/source/rltiles/tool/tile_page.cc51
4 files changed, 107 insertions, 51 deletions
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 <vector>
+#include <stdio.h>
+#include <png.h>
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 <stdio.h>
+#include <string.h>
+
+// 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 <png.h>
-
-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)
{