summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/tilereg.cc
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/tilereg.cc
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/tilereg.cc')
-rw-r--r--crawl-ref/source/tilereg.cc44
1 files changed, 39 insertions, 5 deletions
diff --git a/crawl-ref/source/tilereg.cc b/crawl-ref/source/tilereg.cc
index fa27a506bb..c628ab2f37 100644
--- a/crawl-ref/source/tilereg.cc
+++ b/crawl-ref/source/tilereg.cc
@@ -490,7 +490,9 @@ void DungeonRegion::draw_mcache(mcache_entry *entry, unsigned int x, unsigned in
ASSERT(draw_info_count <= sizeof(dinfo) / (sizeof(dinfo[0])));
for (unsigned int i = 0; i < draw_info_count; i++)
+ {
add_quad(TEX_DOLL, dinfo[i].idx, x, y, dinfo[i].ofs_x, dinfo[i].ofs_y);
+ }
}
void DungeonRegion::draw_foreground(unsigned int bg, unsigned int fg, unsigned int x, unsigned int y)
@@ -2283,7 +2285,8 @@ static void _copy_onto(unsigned char *pixels, unsigned int width,
// Copy an image at inf from pixels into dest.
static void _copy_into(unsigned char *dest, unsigned char *pixels,
unsigned int width,
- unsigned int height, const tile_info &inf)
+ unsigned int height, const tile_info &inf,
+ int ofs_x = 0, int ofs_y = 0)
{
unsigned char *src = &pixels[4 * (inf.sy * width + inf.sx)];
@@ -2292,10 +2295,26 @@ static void _copy_into(unsigned char *dest, unsigned char *pixels,
memset(dest, 0, 4 * inf.width * inf.height);
- dest += inf.offset_x * 4 + inf.offset_y * dest_row_size;
-
+ int total_ofs_x = inf.offset_x + ofs_x;
+ int total_ofs_y = inf.offset_y + ofs_y;
int src_height = inf.ey - inf.sy;
int src_width = inf.ex - inf.sx;
+
+ if (total_ofs_x < 0)
+ {
+ src_width += total_ofs_x;
+ src -= 4 * total_ofs_x;
+ total_ofs_x = 0;
+ }
+ if (total_ofs_y < 0)
+ {
+ src_height += total_ofs_y;
+ src -= 4 * width * total_ofs_y;
+ total_ofs_y = 0;
+ }
+
+ dest += total_ofs_x * 4 + total_ofs_y * dest_row_size;
+
for (int r = 0; r < src_height; r++)
{
memcpy(dest, src, src_width * 4);
@@ -2307,7 +2326,8 @@ static void _copy_into(unsigned char *dest, unsigned char *pixels,
// Stores "over" on top of "under" in the location of "over".
static bool _copy_under(unsigned char *pixels, unsigned int width,
- unsigned int height, int idx_under, int idx_over)
+ unsigned int height, int idx_under, int idx_over,
+ int uofs_x = 0, int uofs_y = 0)
{
const tile_info &under = tile_main_info(idx_under);
const tile_info &over = tile_main_info(idx_over);
@@ -2325,7 +2345,7 @@ static bool _copy_under(unsigned char *pixels, unsigned int width,
// Make a copy of the original images.
unsigned char *under_pixels = new unsigned char[image_size];
- _copy_into(under_pixels, pixels, width, height, under);
+ _copy_into(under_pixels, pixels, width, height, under, uofs_x, uofs_y);
unsigned char *over_pixels = new unsigned char[image_size];
_copy_into(over_pixels, pixels, width, height, over);
@@ -2374,6 +2394,20 @@ static bool _process_item_image(unsigned char *pixels,
int tile1 = TILE_ROD_SMITING + i - STAFF_SMITING;
success &= _copy_under(pixels, width, height, tile0, tile1);
}
+ for (int i = RING_FIRST_RING; i < NUM_RINGS; i++)
+ {
+ int special = you.item_description[IDESC_RINGS][i];
+ int tile0 = TILE_RING_NORMAL_OFFSET + special % 13;
+ int tile1 = TILE_RING_REGENERATION + i - RING_FIRST_RING;
+ success &= _copy_under(pixels, width, height, tile0, tile1, -5, -6);
+ }
+ for (int i = AMU_FIRST_AMULET; i < NUM_JEWELLERY; i++)
+ {
+ int special = you.item_description[IDESC_RINGS][i];
+ int tile0 = TILE_AMU_NORMAL_OFFSET + special % 13;
+ int tile1 = TILE_AMU_RAGE + i - AMU_FIRST_AMULET;
+ success &= _copy_under(pixels, width, height, tile0, tile1);
+ }
return true;
}