summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/tilepick-p.cc
diff options
context:
space:
mode:
authorAdam Borowski <kilobyte@angband.pl>2013-05-29 04:01:42 +0200
committerAdam Borowski <kilobyte@angband.pl>2013-05-29 04:01:42 +0200
commitaff44e3dcf63bf0a5426c8d6998c8954bb44d26d (patch)
tree1708e320052e6631f93e85301ff6d2ad75ebb1ef /crawl-ref/source/tilepick-p.cc
parent30cd027a1c26d7375360584f5df8ec9f57a09c85 (diff)
parent1ef5305b68a6936247e5ee2a4aa7516222258490 (diff)
downloadcrawl-ref-aff44e3dcf63bf0a5426c8d6998c8954bb44d26d.tar.gz
crawl-ref-aff44e3dcf63bf0a5426c8d6998c8954bb44d26d.zip
Merge branch 'master' into lava_orcs
Diffstat (limited to 'crawl-ref/source/tilepick-p.cc')
-rw-r--r--crawl-ref/source/tilepick-p.cc313
1 files changed, 222 insertions, 91 deletions
diff --git a/crawl-ref/source/tilepick-p.cc b/crawl-ref/source/tilepick-p.cc
index 0fca2d220b..b70865de70 100644
--- a/crawl-ref/source/tilepick-p.cc
+++ b/crawl-ref/source/tilepick-p.cc
@@ -16,6 +16,7 @@
#include "tiledoll.h"
#include "tilepick.h"
#include "transform.h"
+#include "traps.h"
static tileidx_t _modrng(int mod, tileidx_t first, tileidx_t last)
{
@@ -30,6 +31,9 @@ static tileidx_t _mon_mod(tileidx_t tile, int offset)
tileidx_t tilep_equ_weapon(const item_def &item)
{
+ if (item.props.exists("worn_tile"))
+ return item.props["worn_tile"].get_short();
+
if (item.base_type == OBJ_STAVES)
{
int orig_special = you.item_description[IDESC_STAVES][item.sub_type];
@@ -45,8 +49,8 @@ tileidx_t tilep_equ_weapon(const item_def &item)
switch (item.sub_type)
{
case MISC_BOTTLED_EFREET: return TILEP_HAND1_BOTTLE;
- case MISC_AIR_ELEMENTAL_FAN: return TILEP_HAND1_FAN;
- case MISC_STONE_OF_EARTH_ELEMENTALS: return TILEP_HAND1_STONE;
+ case MISC_FAN_OF_GALES: return TILEP_HAND1_FAN;
+ case MISC_STONE_OF_TREMORS: return TILEP_HAND1_STONE;
case MISC_DISC_OF_STORMS: return TILEP_HAND1_DISC;
case MISC_CRYSTAL_BALL_OF_ENERGY: return TILEP_HAND1_CRYSTAL;
@@ -55,8 +59,10 @@ tileidx_t tilep_equ_weapon(const item_def &item)
case MISC_LANTERN_OF_SHADOWS: return TILEP_HAND1_BONE_LANTERN;
case MISC_HORN_OF_GERYON: return TILEP_HAND1_HORN;
- case MISC_BOX_OF_BEASTS:
- case MISC_EMPTY_EBONY_CASKET: return TILEP_HAND1_BOX;
+#if TAG_MAJOR_VERSION == 34
+ case MISC_EMPTY_EBONY_CASKET:
+#endif
+ case MISC_BOX_OF_BEASTS: return TILEP_HAND1_BOX;
case MISC_DECK_OF_ESCAPE:
case MISC_DECK_OF_DESTRUCTION:
@@ -80,78 +86,190 @@ tileidx_t tilep_equ_weapon(const item_def &item)
return tile;
}
+ tileidx_t tile = 0;
+
switch (item.sub_type)
{
// Blunt
- case WPN_CLUB: return TILEP_HAND1_CLUB_SLANT;
- case WPN_MACE: return TILEP_HAND1_MACE;
- case WPN_GREAT_MACE: return TILEP_HAND1_GREAT_MACE;
- case WPN_FLAIL: return TILEP_HAND1_FLAIL;
- case WPN_SPIKED_FLAIL: return TILEP_HAND1_SPIKED_FLAIL;
- case WPN_DIRE_FLAIL: return TILEP_HAND1_GREAT_FLAIL;
- case WPN_MORNINGSTAR: return TILEP_HAND1_MORNINGSTAR;
- case WPN_EVENINGSTAR: return TILEP_HAND1_EVENINGSTAR;
- case WPN_GIANT_CLUB: return TILEP_HAND1_GIANT_CLUB_PLAIN;
- case WPN_GIANT_SPIKED_CLUB: return TILEP_HAND1_GIANT_CLUB_SPIKE_SLANT;
- case WPN_WHIP: return TILEP_HAND1_WHIP;
- case WPN_DEMON_WHIP: return TILEP_HAND1_BLACK_WHIP;
- case WPN_SACRED_SCOURGE: return TILEP_HAND1_SACRED_SCOURGE;
+ case WPN_CLUB:
+ tile = TILEP_HAND1_CLUB_SLANT;
+ break;
+ case WPN_MACE:
+ tile = TILEP_HAND1_MACE;
+ break;
+ case WPN_GREAT_MACE:
+ tile = TILEP_HAND1_GREAT_MACE;
+ break;
+ case WPN_FLAIL:
+ tile = TILEP_HAND1_FLAIL;
+ break;
+#if TAG_MAJOR_VERSION == 34
+ case WPN_SPIKED_FLAIL:
+ tile = TILEP_HAND1_SPIKED_FLAIL;
+ break;
+#endif
+ case WPN_DIRE_FLAIL:
+ tile = TILEP_HAND1_GREAT_FLAIL;
+ break;
+ case WPN_MORNINGSTAR:
+ tile = TILEP_HAND1_MORNINGSTAR;
+ break;
+ case WPN_EVENINGSTAR:
+ tile = TILEP_HAND1_EVENINGSTAR;
+ break;
+ case WPN_GIANT_CLUB:
+ tile = TILEP_HAND1_GIANT_CLUB_PLAIN;
+ break;
+ case WPN_GIANT_SPIKED_CLUB:
+ tile = TILEP_HAND1_GIANT_CLUB_SPIKE_SLANT;
+ break;
+ case WPN_WHIP:
+ tile = TILEP_HAND1_WHIP;
+ break;
+ case WPN_DEMON_WHIP:
+ tile = TILEP_HAND1_BLACK_WHIP;
+ break;
+ case WPN_SACRED_SCOURGE:
+ tile = TILEP_HAND1_SACRED_SCOURGE;
+ break;
// Edge
- case WPN_DAGGER: return TILEP_HAND1_DAGGER_SLANT;
- case WPN_SHORT_SWORD: return TILEP_HAND1_SHORT_SWORD_SLANT;
- case WPN_LONG_SWORD: return TILEP_HAND1_LONG_SWORD_SLANT;
- case WPN_GREAT_SWORD: return TILEP_HAND1_GREAT_SWORD_SLANT;
- case WPN_SCIMITAR: return TILEP_HAND1_SCIMITAR;
- case WPN_FALCHION: return TILEP_HAND1_FALCHION;
- case WPN_SABRE: return TILEP_HAND1_SABRE;
- case WPN_DEMON_BLADE: return TILEP_HAND1_DEMON_BLADE;
- case WPN_QUICK_BLADE: return TILEP_HAND1_DAGGER;
- case WPN_DOUBLE_SWORD: return TILEP_HAND1_DOUBLE_SWORD;
- case WPN_TRIPLE_SWORD: return TILEP_HAND1_TRIPLE_SWORD;
- case WPN_EUDEMON_BLADE: return TILEP_HAND1_BLESSED_BLADE;
+ case WPN_DAGGER:
+ tile = TILEP_HAND1_DAGGER_SLANT;
+ break;
+ case WPN_SHORT_SWORD:
+ tile = TILEP_HAND1_SHORT_SWORD_SLANT;
+ break;
+ case WPN_LONG_SWORD:
+ tile = TILEP_HAND1_LONG_SWORD_SLANT;
+ break;
+ case WPN_GREAT_SWORD:
+ tile = TILEP_HAND1_GREAT_SWORD_SLANT;
+ break;
+ case WPN_SCIMITAR:
+ tile = TILEP_HAND1_SCIMITAR;
+ break;
+ case WPN_FALCHION:
+ tile = TILEP_HAND1_FALCHION;
+ break;
+ case WPN_SABRE:
+ tile = TILEP_HAND1_SABRE;
+ break;
+ case WPN_DEMON_BLADE:
+ tile = TILEP_HAND1_DEMON_BLADE;
+ break;
+ case WPN_QUICK_BLADE:
+ tile = TILEP_HAND1_DAGGER;
+ break;
+ case WPN_DOUBLE_SWORD:
+ tile = TILEP_HAND1_DOUBLE_SWORD;
+ break;
+ case WPN_TRIPLE_SWORD:
+ tile = TILEP_HAND1_TRIPLE_SWORD;
+ break;
+ case WPN_EUDEMON_BLADE:
+ tile = TILEP_HAND1_BLESSED_BLADE;
+ break;
+
// new blessed weapons
- case WPN_BLESSED_LONG_SWORD: return TILEP_HAND1_LONG_SWORD_SLANT;
- case WPN_BLESSED_GREAT_SWORD: return TILEP_HAND1_GREAT_SWORD_SLANT;
- case WPN_BLESSED_SCIMITAR: return TILEP_HAND1_SCIMITAR;
- case WPN_BLESSED_FALCHION: return TILEP_HAND1_FALCHION;
- case WPN_BLESSED_DOUBLE_SWORD: return TILEP_HAND1_DOUBLE_SWORD;
- case WPN_BLESSED_TRIPLE_SWORD: return TILEP_HAND1_TRIPLE_SWORD;
+ case WPN_BLESSED_LONG_SWORD:
+ tile = TILEP_HAND1_LONG_SWORD_SLANT;
+ break;
+ case WPN_BLESSED_GREAT_SWORD:
+ tile = TILEP_HAND1_GREAT_SWORD_SLANT;
+ break;
+ case WPN_BLESSED_SCIMITAR:
+ tile = TILEP_HAND1_SCIMITAR;
+ break;
+ case WPN_BLESSED_FALCHION:
+ tile = TILEP_HAND1_FALCHION;
+ break;
+ case WPN_BLESSED_DOUBLE_SWORD:
+ tile = TILEP_HAND1_DOUBLE_SWORD;
+ break;
+ case WPN_BLESSED_TRIPLE_SWORD:
+ tile = TILEP_HAND1_TRIPLE_SWORD;
+ break;
// Axe
- case WPN_HAND_AXE: return TILEP_HAND1_HAND_AXE;
- case WPN_BATTLEAXE: return TILEP_HAND1_BATTLEAXE;
- case WPN_BROAD_AXE: return TILEP_HAND1_BROAD_AXE;
- case WPN_WAR_AXE: return TILEP_HAND1_WAR_AXE;
- case WPN_EXECUTIONERS_AXE: return TILEP_HAND1_EXECUTIONERS_AXE;
- case WPN_BARDICHE: return TILEP_HAND1_GLAIVE3;
+ case WPN_HAND_AXE:
+ tile = TILEP_HAND1_HAND_AXE;
+ break;
+ case WPN_BATTLEAXE:
+ tile = TILEP_HAND1_BATTLEAXE;
+ break;
+ case WPN_BROAD_AXE:
+ tile = TILEP_HAND1_BROAD_AXE;
+ break;
+ case WPN_WAR_AXE:
+ tile = TILEP_HAND1_WAR_AXE;
+ break;
+ case WPN_EXECUTIONERS_AXE:
+ tile = TILEP_HAND1_EXECUTIONERS_AXE;
+ break;
+ case WPN_BARDICHE:
+ tile = TILEP_HAND1_GLAIVE3;
+ break;
// Pole
- case WPN_SPEAR: return TILEP_HAND1_SPEAR;
- case WPN_HALBERD: return TILEP_HAND1_HALBERD;
- case WPN_GLAIVE: return TILEP_HAND1_GLAIVE;
+ case WPN_SPEAR:
+ tile = TILEP_HAND1_SPEAR;
+ break;
+ case WPN_HALBERD:
+ tile = TILEP_HAND1_HALBERD;
+ break;
+ case WPN_GLAIVE:
+ tile = TILEP_HAND1_GLAIVE;
+ break;
#if TAG_MAJOR_VERSION == 34
- case WPN_STAFF: return TILEP_HAND1_STAFF;
+ case WPN_STAFF:
+ tile = TILEP_HAND1_STAFF;
+ break;
#endif
- case WPN_QUARTERSTAFF: return TILEP_HAND1_QUARTERSTAFF1;
+ case WPN_QUARTERSTAFF:
+ tile = TILEP_HAND1_QUARTERSTAFF1;
+ break;
case WPN_LAJATANG:
- return tileidx_enchant_equ(item, TILEP_HAND1_LAJATANG, true);
-
- case WPN_SCYTHE: return TILEP_HAND1_SCYTHE;
- case WPN_HAMMER: return TILEP_HAND1_HAMMER;
- case WPN_TRIDENT: return TILEP_HAND1_TRIDENT2;
- case WPN_DEMON_TRIDENT: return TILEP_HAND1_DEMON_TRIDENT;
- case WPN_TRISHULA: return TILEP_HAND1_TRISHULA;
+ tile = TILEP_HAND1_LAJATANG;
+ break;
+
+ case WPN_SCYTHE:
+ tile = TILEP_HAND1_SCYTHE;
+ break;
+ case WPN_HAMMER:
+ tile = TILEP_HAND1_HAMMER;
+ break;
+ case WPN_TRIDENT:
+ tile = TILEP_HAND1_TRIDENT2;
+ break;
+ case WPN_DEMON_TRIDENT:
+ tile = TILEP_HAND1_DEMON_TRIDENT;
+ break;
+ case WPN_TRISHULA:
+ tile = TILEP_HAND1_TRISHULA;
+ break;
// Ranged
- case WPN_SLING: return TILEP_HAND1_SLING;
- case WPN_BOW: return TILEP_HAND1_BOW2;
- case WPN_CROSSBOW: return TILEP_HAND1_CROSSBOW;
- case WPN_BLOWGUN: return TILEP_HAND1_BLOWGUN;
- case WPN_LONGBOW: return TILEP_HAND1_BOW3;
-
- default: return 0;
+ case WPN_SLING:
+ tile = TILEP_HAND1_SLING;
+ break;
+ case WPN_BOW:
+ tile = TILEP_HAND1_BOW2;
+ break;
+ case WPN_CROSSBOW:
+ tile = TILEP_HAND1_CROSSBOW;
+ break;
+ case WPN_BLOWGUN:
+ tile = TILEP_HAND1_BLOWGUN;
+ break;
+ case WPN_LONGBOW:
+ tile = TILEP_HAND1_BOW3;
+ break;
+
+ default: tile = 0;
}
+
+ return tile ? tileidx_enchant_equ(item, tile, true) : 0;
}
tileidx_t tilep_equ_shield(const item_def &item)
@@ -171,9 +289,15 @@ tileidx_t tilep_equ_shield(const item_def &item)
switch (item.sub_type)
{
- case ARM_SHIELD: return TILEP_HAND2_SHIELD_KNIGHT_BLUE;
- case ARM_BUCKLER: return TILEP_HAND2_SHIELD_ROUND_SMALL;
- case ARM_LARGE_SHIELD: return TILEP_HAND2_SHIELD_LONG_RED;
+ case ARM_SHIELD:
+ return _modrng(item.rnd, TILEP_HAND2_SHIELD_FIRST_NORM,
+ TILEP_HAND2_SHIELD_LAST_NORM);
+ case ARM_BUCKLER:
+ return _modrng(item.rnd, TILEP_HAND2_BUCKLER_FIRST_NORM,
+ TILEP_HAND2_BUCKLER_LAST_NORM);
+ case ARM_LARGE_SHIELD:
+ return _modrng(item.rnd, TILEP_HAND2_LSHIELD_FIRST_NORM,
+ TILEP_HAND2_LSHIELD_LAST_NORM);
default: return 0;
}
}
@@ -183,6 +307,9 @@ tileidx_t tilep_equ_armour(const item_def &item)
if (item.base_type != OBJ_ARMOUR)
return 0;
+ if (item.props.exists("worn_tile"))
+ return item.props["worn_tile"].get_short();
+
if (is_unrandom_artefact(item))
{
const tileidx_t tile = unrandart_to_doll_tile(find_unrandart_index(item));
@@ -200,7 +327,6 @@ tileidx_t tilep_equ_armour(const item_def &item)
case ARM_RING_MAIL: return TILEP_BODY_RINGMAIL;
case ARM_CHAIN_MAIL: return TILEP_BODY_CHAINMAIL;
case ARM_SCALE_MAIL: return TILEP_BODY_SCALEMAIL;
- case ARM_SPLINT_MAIL: return TILEP_BODY_SPLINT;
case ARM_PLATE_ARMOUR: return TILEP_BODY_PLATE_BLACK;
case ARM_CRYSTAL_PLATE_ARMOUR:
return tileidx_enchant_equ(item, TILEP_BODY_CRYSTAL_PLATE, true);
@@ -236,6 +362,9 @@ tileidx_t tilep_equ_cloak(const item_def &item)
if (item.base_type != OBJ_ARMOUR || item.sub_type != ARM_CLOAK)
return 0;
+ if (item.props.exists("worn_tile"))
+ return item.props["worn_tile"].get_short();
+
if (is_unrandom_artefact(item))
{
const tileidx_t tile = unrandart_to_doll_tile(find_unrandart_index(item));
@@ -251,6 +380,9 @@ tileidx_t tilep_equ_helm(const item_def &item)
if (item.base_type != OBJ_ARMOUR)
return 0;
+ if (item.props.exists("worn_tile"))
+ return item.props["worn_tile"].get_short();
+
if (is_unrandom_artefact(item))
{
const tileidx_t tile = unrandart_to_doll_tile(find_unrandart_index(item));
@@ -327,6 +459,9 @@ tileidx_t tilep_equ_gloves(const item_def &item)
if (item.base_type != OBJ_ARMOUR || item.sub_type != ARM_GLOVES)
return 0;
+ if (item.props.exists("worn_tile"))
+ return item.props["worn_tile"].get_short();
+
if (is_unrandom_artefact(item))
{
const tileidx_t tile = unrandart_to_doll_tile(find_unrandart_index(item));
@@ -342,6 +477,9 @@ tileidx_t tilep_equ_boots(const item_def &item)
if (item.base_type != OBJ_ARMOUR)
return 0;
+ if (item.props.exists("worn_tile"))
+ return item.props["worn_tile"].get_short();
+
int etype = enchant_to_int(item);
if (is_unrandom_artefact(item))
@@ -370,24 +508,21 @@ tileidx_t tileidx_player()
// Handle shapechange first
switch (you.form)
{
+ // equipment-using forms are handled regularly
+ case TRAN_STATUE:
+ case TRAN_LICH:
+ case TRAN_TREE:
+ break;
// animals
case TRAN_BAT: ch = TILEP_TRAN_BAT; break;
case TRAN_SPIDER: ch = TILEP_TRAN_SPIDER; break;
case TRAN_PIG: ch = TILEP_TRAN_PIG; break;
+ case TRAN_PORCUPINE: ch = TILEP_MONS_PORCUPINE; break;
// non-animals
case TRAN_ICE_BEAST: ch = TILEP_TRAN_ICE_BEAST; break;
- case TRAN_STATUE:
- {
- switch (you.species)
- {
- case SP_CENTAUR: ch = TILEP_TRAN_STATUE_CENTAUR; break;
- case SP_NAGA: ch = TILEP_TRAN_STATUE_NAGA; break;
- case SP_FELID: ch = TILEP_TRAN_STATUE_FELID; break;
- case SP_OCTOPODE:ch = TILEP_TRAN_STATUE_OCTOPODE; break;
- default: ch = TILEP_TRAN_STATUE_HUMANOID; break;
- }
- break;
- }
+ case TRAN_WISP: ch = TILEP_MONS_INSUBSTANTIAL_WISP; break;
+ case TRAN_JELLY: ch = TILEP_MONS_JELLY; break;
+ case TRAN_FUNGUS: ch = TILEP_MONS_WANDERING_MUSHROOM; break;
case TRAN_DRAGON:
{
switch (you.species)
@@ -405,22 +540,12 @@ tileidx_t tileidx_player()
}
break;
}
- case TRAN_LICH:
- {
- switch (you.species)
- {
- case SP_CENTAUR: ch = TILEP_TRAN_LICH_CENTAUR; break;
- case SP_NAGA: ch = TILEP_TRAN_LICH_NAGA; break;
- case SP_FELID: ch = TILEP_TRAN_LICH_FELID; break;
- case SP_OCTOPODE:ch = TILEP_TRAN_LICH_OCTOPODE; break;
- default: ch = TILEP_TRAN_LICH_HUMANOID; break;
- }
- break;
- }
// no special tile
case TRAN_BLADE_HANDS: break;
case TRAN_APPENDAGE:
- case TRAN_NONE: break;
+ case TRAN_NONE:
+ default:
+ break;
}
// Currently, the flying flag is only used for not drawing the tile in the
@@ -430,7 +555,12 @@ tileidx_t tileidx_player()
ch |= TILE_FLAG_FLYING;
if (you.attribute[ATTR_HELD])
- ch |= TILE_FLAG_NET;
+ {
+ if (get_trapping_net(you.pos()) == NON_ITEM)
+ ch |= TILE_FLAG_WEB;
+ else
+ ch |= TILE_FLAG_NET;
+ }
if (you.duration[DUR_POISONING])
ch |= TILE_FLAG_POISON;
@@ -1114,7 +1244,8 @@ void tilep_print_parts(char *fbuf, const dolls_data &doll)
else if (idx != 0)
{
idx = doll.parts[p] - tile_player_part_start[p] + 1;
- if (idx < 0 || idx > tile_player_part_count[p])
+ ASSERT(idx >= 0);
+ if (idx > tile_player_part_count[p])
idx = 0;
}
}