From f5c222adb9194161ee1a86d82781c850d66a222b Mon Sep 17 00:00:00 2001 From: j-p-e-g Date: Sat, 14 Mar 2009 20:51:20 +0000 Subject: * Fix tiles 'V' crashing for mimics and dancing weapons. * Display wound/attitude overlays. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9480 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/directn.cc | 20 +++++++++++++++-- crawl-ref/source/invent.cc | 6 +++++ crawl-ref/source/menu.cc | 54 ++++++++++++++++++++++++++++++++++++++++++++- crawl-ref/source/tilereg.cc | 2 -- 4 files changed, 77 insertions(+), 5 deletions(-) diff --git a/crawl-ref/source/directn.cc b/crawl-ref/source/directn.cc index 30432cd59a..c004d28f99 100644 --- a/crawl-ref/source/directn.cc +++ b/crawl-ref/source/directn.cc @@ -563,6 +563,7 @@ void full_describe_view() std::vector fss; std::string str = get_monster_equipment_desc(list_mons[i], true, DESC_CAP_A, true); + if (player_mesmerised_by(list_mons[i])) str += ", keeping you mesmerised"; @@ -3041,10 +3042,25 @@ std::string get_monster_equipment_desc(const monsters *mon, bool full_desc, if (print_attitude) { + std::string str = ""; if (mons_friendly(mon)) - desc += " (friendly)"; + str = "friendly"; else if (mons_neutral(mon)) - desc += " (neutral)"; + str = "neutral"; + + if (mon->type == MONS_DANCING_WEAPON + || mons_is_known_mimic(mon)) + { + if (!str.empty()) + str += " "; + + if (mon->type == MONS_DANCING_WEAPON) + str += "dancing weapon"; + else + str += "mimic"; + } + if (!str.empty()) + desc += " (" + str + ")"; } } diff --git a/crawl-ref/source/invent.cc b/crawl-ref/source/invent.cc index 616b348e5f..55b4cf3747 100644 --- a/crawl-ref/source/invent.cc +++ b/crawl-ref/source/invent.cc @@ -495,6 +495,12 @@ bool InvEntry::get_tiles(std::vector& tileset) const tileset.push_back(tile_def(ch, TEX_DUNGEON)); tileset.push_back(tile_def(idx, TEX_DEFAULT)); + + // Needs to be displayed so as to not give away mimics in shallow water. + if (ch == TILE_DNGN_SHALLOW_WATER) + tileset.push_back(tile_def(TILE_MASK_SHALLOW_WATER, TEX_DEFAULT)); + else if (ch == TILE_DNGN_SHALLOW_WATER_MURKY) + tileset.push_back(tile_def(TILE_MASK_SHALLOW_WATER_MURKY, TEX_DEFAULT)); } int brand = tile_known_weapon_brand(*item); if (brand) diff --git a/crawl-ref/source/menu.cc b/crawl-ref/source/menu.cc index 23f9829fd2..f760fd2c13 100644 --- a/crawl-ref/source/menu.cc +++ b/crawl-ref/source/menu.cc @@ -16,6 +16,7 @@ REVISION("$Rev$"); #include "macro.h" #include "message.h" #ifdef USE_TILE + #include "monstuff.h" #include "mon-util.h" #endif #include "player.h" @@ -704,7 +705,18 @@ bool MenuEntry::get_tiles(std::vector& tileset) const ch = env.tile_flv(c).wall; tileset.push_back(tile_def(ch, TEX_DUNGEON)); - tileset.push_back(tile_def(tileidx_monster_base(m), TEX_PLAYER)); + + if (m->type == MONS_DANCING_WEAPON) + { + item_def item = mitm[m->inv[MSLOT_WEAPON]]; + tileset.push_back(tile_def(tileidx_item(item), TEX_DEFAULT)); + tileset.push_back(tile_def(TILE_ANIMATED_WEAPON, TEX_DEFAULT)); + + } + else if (mons_is_mimic(m->type)) + tileset.push_back(tile_def(tileidx_monster_base(m), TEX_DEFAULT)); + else + tileset.push_back(tile_def(tileidx_monster_base(m), TEX_PLAYER)); if (!mons_flies(m)) { @@ -720,6 +732,46 @@ bool MenuEntry::get_tiles(std::vector& tileset) const tileset.push_back(tile_def(TILE_MASK_DEEP_WATER_MURKY, TEX_DEFAULT)); } + if (!monster_descriptor(m->type, MDSC_NOMSG_WOUNDS)) + { + std::string damage_desc; + mon_dam_level_type damage_level; + mons_get_damage_level(m, damage_desc, damage_level); + + switch (damage_level) + { + case MDAM_DEAD: + case MDAM_ALMOST_DEAD: + tileset.push_back(tile_def(TILE_MDAM_ALMOST_DEAD, TEX_DEFAULT)); + break; + case MDAM_SEVERELY_DAMAGED: + tileset.push_back(tile_def(TILE_MDAM_SEVERELY_DAMAGED, TEX_DEFAULT)); + break; + case MDAM_HEAVILY_DAMAGED: + tileset.push_back(tile_def(TILE_MDAM_HEAVILY_DAMAGED, TEX_DEFAULT)); + break; + case MDAM_MODERATELY_DAMAGED: + tileset.push_back(tile_def(TILE_MDAM_MODERATELY_DAMAGED, TEX_DEFAULT)); + break; + case MDAM_LIGHTLY_DAMAGED: + tileset.push_back(tile_def(TILE_MDAM_LIGHTLY_DAMAGED, TEX_DEFAULT)); + break; + case MDAM_OKAY: + default: + // no flag for okay. + break; + } + } + + if (mons_friendly_real(m)) + tileset.push_back(tile_def(TILE_HEART, TEX_DEFAULT)); + else if (mons_neutral(m)) + tileset.push_back(tile_def(TILE_NEUTRAL, TEX_DEFAULT)); + else if (mons_looks_stabbable(m)) + tileset.push_back(tile_def(TILE_STAB_BRAND, TEX_DEFAULT)); + else if (mons_looks_distracted(m)) + tileset.push_back(tile_def(TILE_MAY_STAB_BRAND, TEX_DEFAULT)); + return (true); } #endif diff --git a/crawl-ref/source/tilereg.cc b/crawl-ref/source/tilereg.cc index f4fc7ea097..a08cf54b79 100644 --- a/crawl-ref/source/tilereg.cc +++ b/crawl-ref/source/tilereg.cc @@ -537,9 +537,7 @@ void DungeonRegion::pack_foreground(unsigned int bg, unsigned int fg, int x, int } if (fg & TILE_FLAG_ANIM_WEP) - { m_buf_main.add(TILE_ANIMATED_WEAPON, x, y); - } if (bg & TILE_FLAG_UNSEEN && (bg != TILE_FLAG_UNSEEN || fg)) m_buf_main.add(TILE_MESH, x, y); -- cgit v1.2.3-54-g00ecf