summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/tilemcache.cc
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-25 00:46:44 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-25 00:46:44 +0000
commitec10a140445d6736900358f65d9a47e881d5f4d8 (patch)
tree3f0827a404337e20e2f4fadb7a0f65a2812295fc /crawl-ref/source/tilemcache.cc
parent937e2dced0087e7a0faf29b984a741e2b469aa06 (diff)
downloadcrawl-ref-ec10a140445d6736900358f65d9a47e881d5f4d8.tar.gz
crawl-ref-ec10a140445d6736900358f65d9a47e881d5f4d8.zip
Added new monster draconian tiles. Improved ring and amulet graphics. Fixed issue where the deep elf blademaster did not appear with weapons. (These graphics are all from Mitsuhiro Itakura.)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6974 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/tilemcache.cc')
-rw-r--r--crawl-ref/source/tilemcache.cc101
1 files changed, 47 insertions, 54 deletions
diff --git a/crawl-ref/source/tilemcache.cc b/crawl-ref/source/tilemcache.cc
index 6002254d16..9d3397bb96 100644
--- a/crawl-ref/source/tilemcache.cc
+++ b/crawl-ref/source/tilemcache.cc
@@ -77,14 +77,16 @@ public:
mcache_draco(const monsters *mon);
mcache_draco(reader &th);
- virtual const dolls_data *doll() const;
+ virtual unsigned int info(tile_draw_info *dinfo) const;
static bool valid(const monsters *mon);
virtual void construct(writer &th);
protected:
- dolls_data m_doll;
+ int m_mon_tile;
+ int m_job_tile;
+ int m_equ_tile;
};
class mcache_ghost : public mcache_entry
@@ -338,6 +340,7 @@ bool mcache_monster::get_weapon_offset(int mon_tile, int &ofs_x, int &ofs_y)
case TILEP_MONS_VAULT_GUARD:
case TILEP_MONS_HOBGOBLIN:
case TILEP_MONS_DEEP_ELF_MASTER_ARCHER:
+ case TILEP_MONS_DEEP_ELF_BLADEMASTER:
case TILEP_MONS_IMP:
case TILEP_MONS_ANGEL:
case TILEP_MONS_NORRIS:
@@ -459,10 +462,8 @@ bool mcache_monster::get_weapon_offset(int mon_tile, int &ofs_x, int &ofs_y)
case TILEP_MONS_DEEP_ELF_SUMMONER:
case TILEP_MONS_DEEP_ELF_CONJURER:
case TILEP_MONS_DEEP_ELF_PRIEST:
- case TILEP_MONS_DEEP_ELF_HIGH_PRIEST:
case TILEP_MONS_DEEP_ELF_DEMONOLOGIST:
case TILEP_MONS_DEEP_ELF_ANNIHILATOR:
- case TILEP_MONS_DEEP_ELF_SORCERER:
ofs_x = -1;
ofs_y = -2;
break;
@@ -470,6 +471,15 @@ bool mcache_monster::get_weapon_offset(int mon_tile, int &ofs_x, int &ofs_y)
ofs_x = -1;
ofs_y = 0;
break;
+ case TILEP_MONS_DEEP_ELF_SORCERER:
+ case TILEP_MONS_DEEP_ELF_HIGH_PRIEST:
+ ofs_x = 0;
+ ofs_y = -1;
+ break;
+ case TILEP_MONS_TIAMAT:
+ ofs_x = -2;
+ ofs_y = 0;
+ break;
default:
// This monster cannot be displayed with a weapon.
return false;
@@ -557,79 +567,58 @@ mcache_draco::mcache_draco(const monsters *mon)
case MONS_DRACONIAN: colour = 0; break;
case MONS_BLACK_DRACONIAN: colour = 1; break;
case MONS_YELLOW_DRACONIAN: colour = 2; break;
- case MONS_GREEN_DRACONIAN: colour = 4; break;
- case MONS_MOTTLED_DRACONIAN:colour = 5; break;
- case MONS_PALE_DRACONIAN: colour = 6; break;
- case MONS_PURPLE_DRACONIAN: colour = 7; break;
- case MONS_RED_DRACONIAN: colour = 8; break;
- case MONS_WHITE_DRACONIAN: colour = 9; break;
+ case MONS_GREEN_DRACONIAN: colour = 3; break;
+ case MONS_MOTTLED_DRACONIAN:colour = 4; break;
+ case MONS_PALE_DRACONIAN: colour = 5; break;
+ case MONS_PURPLE_DRACONIAN: colour = 6; break;
+ case MONS_RED_DRACONIAN: colour = 7; break;
+ case MONS_WHITE_DRACONIAN: colour = 8; break;
}
- m_doll.parts[TILEP_PART_SHADOW] = TILEP_SHADOW_SHADOW;
- m_doll.parts[TILEP_PART_BASE] = TILEP_BASE_DRACONIAN + colour * 2;
- m_doll.parts[TILEP_PART_DRCWING] =
- tile_player_part_start[TILEP_PART_DRCWING] + colour;
- m_doll.parts[TILEP_PART_DRCHEAD] =
- tile_player_part_start[TILEP_PART_DRCHEAD] + colour;
-
+ m_mon_tile = TILEP_DRACO_BASE + colour;
int mon_wep = mon->inv[MSLOT_WEAPON];
- int equ_tile = (mon_wep != NON_ITEM) ? tilep_equ_weapon(mitm[mon_wep]) : 0;
+ m_equ_tile = (mon_wep != NON_ITEM) ? tilep_equ_weapon(mitm[mon_wep]) : 0;
switch (mon->type)
{
case MONS_DRACONIAN_CALLER:
- m_doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_STAFF_EVIL;
- m_doll.parts[TILEP_PART_HAND2] = TILEP_HAND2_BOOK_YELLOW;
- m_doll.parts[TILEP_PART_BODY] = TILEP_BODY_ROBE_BROWN;
+ m_job_tile = TILEP_DRACO_CALLER;
break;
-
case MONS_DRACONIAN_MONK:
- m_doll.parts[TILEP_PART_ARM] = TILEP_ARM_GLOVE_SHORT_BLUE;
- m_doll.parts[TILEP_PART_BODY] = TILEP_BODY_KARATE2;
+ m_job_tile = TILEP_DRACO_MONK;
break;
-
case MONS_DRACONIAN_ZEALOT:
- m_doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_MACE;
- m_doll.parts[TILEP_PART_HAND2] = TILEP_HAND2_BOOK_CYAN;
- m_doll.parts[TILEP_PART_BODY] = TILEP_BODY_MONK_BLUE;
+ m_job_tile = TILEP_DRACO_ZEALOT;
break;
-
case MONS_DRACONIAN_SHIFTER:
- m_doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_STAFF_LARGE;
- m_doll.parts[TILEP_PART_HAND2] = TILEP_HAND2_BOOK_GREEN;
- m_doll.parts[TILEP_PART_BODY] = TILEP_BODY_ROBE_CYAN;
+ m_job_tile = TILEP_DRACO_SHIFTER;
break;
-
case MONS_DRACONIAN_ANNIHILATOR:
- m_doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_STAFF_RUBY;
- m_doll.parts[TILEP_PART_HAND2] = TILEP_HAND2_FIRE_CYAN;
- m_doll.parts[TILEP_PART_BODY] = TILEP_BODY_ROBE_GREEN_GOLD;
+ m_job_tile = TILEP_DRACO_ANNIHILATOR;
break;
-
case MONS_DRACONIAN_KNIGHT:
- m_doll.parts[TILEP_PART_HAND1] = equ_tile;
- m_doll.parts[TILEP_PART_HAND2] = TILEP_HAND2_SHIELD_KNIGHT_GRAY;
- m_doll.parts[TILEP_PART_BODY] = TILEP_BODY_BPLATE_METAL1;
- m_doll.parts[TILEP_PART_LEG] = TILEP_LEG_BELT_GRAY;
+ m_job_tile = TILEP_DRACO_KNIGHT;
break;
-
case MONS_DRACONIAN_SCORCHER:
- m_doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_FIRE_RED;
- m_doll.parts[TILEP_PART_HAND2] = TILEP_HAND2_BOOK_RED;
- m_doll.parts[TILEP_PART_BODY] = TILEP_BODY_ROBE_RED;
+ m_job_tile = TILEP_DRACO_SCORCHER;
break;
-
default:
- m_doll.parts[TILEP_PART_HAND1] = equ_tile;
- m_doll.parts[TILEP_PART_BODY] = TILEP_BODY_BELT2;
- m_doll.parts[TILEP_PART_LEG] = TILEP_LEG_LOINCLOTH_RED;
+ m_job_tile = 0;
break;
}
}
-const dolls_data *mcache_draco::doll() const
+unsigned int mcache_draco::info(tile_draw_info *dinfo) const
{
- return &m_doll;
+ unsigned int i = 0;
+
+ dinfo[i++].set(m_mon_tile);
+ if (m_job_tile)
+ dinfo[i++].set(m_job_tile);
+ if (m_equ_tile)
+ dinfo[i++].set(m_equ_tile, -2, 0);
+
+ return i;
}
bool mcache_draco::valid(const monsters *mon)
@@ -640,14 +629,18 @@ bool mcache_draco::valid(const monsters *mon)
mcache_draco::mcache_draco(reader &th) : mcache_entry(th)
{
- unmarshallDoll(th, m_doll);
+ m_mon_tile = unmarshallLong(th);
+ m_job_tile = unmarshallLong(th);
+ m_equ_tile = unmarshallLong(th);
}
void mcache_draco::construct(writer &th)
{
mcache_entry::construct(th);
-
- marshallDoll(th, m_doll);
+
+ marshallLong(th, m_mon_tile);
+ marshallLong(th, m_job_tile);
+ marshallLong(th, m_equ_tile);
}
/////////////////////////////////////////////////////////////////////////////