summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/source/itemname.cc8
-rw-r--r--crawl-ref/source/player.cc253
-rw-r--r--crawl-ref/source/player.h22
3 files changed, 158 insertions, 125 deletions
diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc
index 7e7a897242..41fabbd8bc 100644
--- a/crawl-ref/source/itemname.cc
+++ b/crawl-ref/source/itemname.cc
@@ -2427,6 +2427,9 @@ bool is_useless_item(const item_def &item, bool temp)
if (!item_type_known(item))
return (false);
+ if (is_artefact(item))
+ return false;
+
if (is_bad_item(item, temp))
return (true);
@@ -2450,7 +2453,7 @@ bool is_useless_item(const item_def &item, bool temp)
return (player_mutation_level(MUT_ACUTE_VISION));
case RING_POISON_RESISTANCE:
- return (player_res_poison()
+ return (player_res_poison(true, temp, false)
&& (temp || you.species != SP_VAMPIRE));
case AMU_CONTROLLED_FLIGHT:
@@ -2459,6 +2462,9 @@ bool is_useless_item(const item_def &item, bool temp)
case RING_WIZARDRY:
return (you.religion == GOD_TROG);
+ case RING_TELEPORT_CONTROL:
+ return (player_control_teleport(true, temp, false));
+
default:
return (false);
}
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index 904c252929..d83e4b0e1d 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -1190,17 +1190,17 @@ int player_res_magic(void)
}
// If temp is set to false, temporary sources or resistance won't be counted.
-int player_res_steam(bool calc_unid, bool temp)
+int player_res_steam(bool calc_unid, bool temp, bool items)
{
int res = 0;
if (you.species == SP_PALE_DRACONIAN && you.experience_level > 5)
res += 2;
- if (player_equip(EQ_BODY_ARMOUR, ARM_STEAM_DRAGON_ARMOUR))
+ if (items && player_equip(EQ_BODY_ARMOUR, ARM_STEAM_DRAGON_ARMOUR))
res += 2;
- return (res + player_res_fire(calc_unid, temp) / 2);
+ return (res + player_res_fire(calc_unid, temp, items) / 2);
}
bool player_can_smell()
@@ -1209,31 +1209,34 @@ bool player_can_smell()
}
// If temp is set to false, temporary sources or resistance won't be counted.
-int player_res_fire(bool calc_unid, bool temp)
+int player_res_fire(bool calc_unid, bool temp, bool items)
{
int rf = 0;
- /* rings of fire resistance/fire */
- rf += player_equip( EQ_RINGS, RING_PROTECTION_FROM_FIRE, calc_unid );
- rf += player_equip( EQ_RINGS, RING_FIRE, calc_unid );
+ if (items)
+ {
+ /* rings of fire resistance/fire */
+ rf += player_equip( EQ_RINGS, RING_PROTECTION_FROM_FIRE, calc_unid );
+ rf += player_equip( EQ_RINGS, RING_FIRE, calc_unid );
- /* rings of ice */
- rf -= player_equip( EQ_RINGS, RING_ICE, calc_unid );
+ /* rings of ice */
+ rf -= player_equip( EQ_RINGS, RING_ICE, calc_unid );
- /* Staves */
- rf += player_equip( EQ_STAFF, STAFF_FIRE, calc_unid );
+ /* Staves */
+ rf += player_equip( EQ_STAFF, STAFF_FIRE, calc_unid );
- // body armour:
- rf += 2 * player_equip( EQ_BODY_ARMOUR, ARM_DRAGON_ARMOUR );
- rf += player_equip( EQ_BODY_ARMOUR, ARM_GOLD_DRAGON_ARMOUR );
- rf -= player_equip( EQ_BODY_ARMOUR, ARM_ICE_DRAGON_ARMOUR );
+ // body armour:
+ rf += 2 * player_equip( EQ_BODY_ARMOUR, ARM_DRAGON_ARMOUR );
+ rf += player_equip( EQ_BODY_ARMOUR, ARM_GOLD_DRAGON_ARMOUR );
+ rf -= player_equip( EQ_BODY_ARMOUR, ARM_ICE_DRAGON_ARMOUR );
- // ego armours
- rf += player_equip_ego_type( EQ_ALL_ARMOUR, SPARM_FIRE_RESISTANCE );
- rf += player_equip_ego_type( EQ_ALL_ARMOUR, SPARM_RESISTANCE );
+ // ego armours
+ rf += player_equip_ego_type( EQ_ALL_ARMOUR, SPARM_FIRE_RESISTANCE );
+ rf += player_equip_ego_type( EQ_ALL_ARMOUR, SPARM_RESISTANCE );
- // randart weapons:
- rf += scan_randarts(RAP_FIRE, calc_unid);
+ // randart weapons:
+ rf += scan_randarts(RAP_FIRE, calc_unid);
+ }
// species:
if (you.species == SP_MUMMY)
@@ -1277,43 +1280,70 @@ int player_res_fire(bool calc_unid, bool temp)
return (rf);
}
-int player_res_cold(bool calc_unid)
+int player_res_cold(bool calc_unid, bool temp, bool items)
{
int rc = 0;
- if (you.species == SP_VAMPIRE)
+ if (temp)
{
- if (you.hunger_state <= HS_NEAR_STARVING)
- rc += 2;
- else if (you.hunger_state < HS_SATIATED)
+ // spells:
+ if (you.duration[DUR_RESIST_COLD] > 0)
rc++;
- }
- // rings of fire resistance/fire
- rc += player_equip( EQ_RINGS, RING_PROTECTION_FROM_COLD, calc_unid );
- rc += player_equip( EQ_RINGS, RING_ICE, calc_unid );
+ if (you.duration[DUR_FIRE_SHIELD])
+ rc -= 2;
- // rings of ice
- rc -= player_equip( EQ_RINGS, RING_FIRE, calc_unid );
+ // transformations:
+ switch (you.attribute[ATTR_TRANSFORMATION])
+ {
+ case TRAN_ICE_BEAST:
+ rc += 3;
+ break;
+ case TRAN_DRAGON:
+ rc--;
+ break;
+ case TRAN_LICH:
+ rc++;
+ break;
+ case TRAN_AIR:
+ rc -= 2;
+ break;
+ }
- // Staves
- rc += player_equip( EQ_STAFF, STAFF_COLD, calc_unid );
- // body armour:
- rc += 2 * player_equip( EQ_BODY_ARMOUR, ARM_ICE_DRAGON_ARMOUR );
- rc += player_equip( EQ_BODY_ARMOUR, ARM_GOLD_DRAGON_ARMOUR );
- rc -= player_equip( EQ_BODY_ARMOUR, ARM_DRAGON_ARMOUR );
+ if (you.species == SP_VAMPIRE)
+ {
+ if (you.hunger_state <= HS_NEAR_STARVING)
+ rc += 2;
+ else if (you.hunger_state < HS_SATIATED)
+ rc++;
+ }
+ }
- // ego armours
- rc += player_equip_ego_type( EQ_ALL_ARMOUR, SPARM_COLD_RESISTANCE );
- rc += player_equip_ego_type( EQ_ALL_ARMOUR, SPARM_RESISTANCE );
+ if (items)
+ {
+ // rings of fire resistance/fire
+ rc += player_equip( EQ_RINGS, RING_PROTECTION_FROM_COLD, calc_unid );
+ rc += player_equip( EQ_RINGS, RING_ICE, calc_unid );
- // randart weapons:
- rc += scan_randarts(RAP_COLD, calc_unid);
+ // rings of ice
+ rc -= player_equip( EQ_RINGS, RING_FIRE, calc_unid );
- // spells:
- if (you.duration[DUR_RESIST_COLD] > 0)
- rc++;
+ // Staves
+ rc += player_equip( EQ_STAFF, STAFF_COLD, calc_unid );
+
+ // body armour:
+ rc += 2 * player_equip( EQ_BODY_ARMOUR, ARM_ICE_DRAGON_ARMOUR );
+ rc += player_equip( EQ_BODY_ARMOUR, ARM_GOLD_DRAGON_ARMOUR );
+ rc -= player_equip( EQ_BODY_ARMOUR, ARM_DRAGON_ARMOUR );
+
+ // ego armours
+ rc += player_equip_ego_type( EQ_ALL_ARMOUR, SPARM_COLD_RESISTANCE );
+ rc += player_equip_ego_type( EQ_ALL_ARMOUR, SPARM_RESISTANCE );
+
+ // randart weapons:
+ rc += scan_randarts(RAP_COLD, calc_unid);
+ }
// mutations:
rc += player_mutation_level(MUT_COLD_RESISTANCE);
@@ -1321,26 +1351,6 @@ int player_res_cold(bool calc_unid)
if (player_mutation_level(MUT_SHAGGY_FUR) == 3)
rc++;
- if (you.duration[DUR_FIRE_SHIELD])
- rc -= 2;
-
- // transformations:
- switch (you.attribute[ATTR_TRANSFORMATION])
- {
- case TRAN_ICE_BEAST:
- rc += 3;
- break;
- case TRAN_DRAGON:
- rc--;
- break;
- case TRAN_LICH:
- rc++;
- break;
- case TRAN_AIR:
- rc -= 2;
- break;
- }
-
if (rc < -3)
rc = -3;
else if (rc > 3)
@@ -1349,7 +1359,7 @@ int player_res_cold(bool calc_unid)
return (rc);
}
-int player_res_acid(bool consider_unidentified_gear)
+int player_res_acid(bool calc_unid, bool items)
{
int res = 0;
if (!transform_changed_physiology())
@@ -1361,7 +1371,7 @@ int player_res_acid(bool consider_unidentified_gear)
res += player_mutation_level(MUT_YELLOW_SCALES) * 2 / 3;
}
- if (wearing_amulet(AMU_RESIST_CORROSION, consider_unidentified_gear))
+ if (items && wearing_amulet(AMU_RESIST_CORROSION, calc_unid))
res++;
return (res);
@@ -1389,21 +1399,39 @@ int player_acid_resist_factor()
return (factor);
}
-int player_res_electricity(bool calc_unid)
+int player_res_electricity(bool calc_unid, bool temp, bool items)
{
int re = 0;
- if (you.duration[DUR_INSULATION])
- re++;
+ if (temp)
+ {
+ if (you.duration[DUR_INSULATION])
+ re++;
- // staff
- re += player_equip( EQ_STAFF, STAFF_AIR, calc_unid );
+ // transformations:
+ if (you.attribute[ATTR_TRANSFORMATION] == TRAN_STATUE)
+ re += 1;
- // body armour:
- re += player_equip( EQ_BODY_ARMOUR, ARM_STORM_DRAGON_ARMOUR );
+ if (you.attribute[ATTR_TRANSFORMATION] == TRAN_AIR)
+ re += 2; // multiple levels currently meaningless
+
+ if (you.attribute[ATTR_DIVINE_LIGHTNING_PROTECTION])
+ re = 3;
+ else if (re > 1)
+ re = 1;
+ }
- // randart weapons:
- re += scan_randarts(RAP_ELECTRICITY, calc_unid);
+ if (items)
+ {
+ // staff
+ re += player_equip( EQ_STAFF, STAFF_AIR, calc_unid );
+
+ // body armour:
+ re += player_equip( EQ_BODY_ARMOUR, ARM_STORM_DRAGON_ARMOUR );
+
+ // randart weapons:
+ re += scan_randarts(RAP_ELECTRICITY, calc_unid);
+ }
// species:
if (you.species == SP_BLACK_DRACONIAN && you.experience_level > 17)
@@ -1413,18 +1441,6 @@ int player_res_electricity(bool calc_unid)
if (player_mutation_level(MUT_SHOCK_RESISTANCE))
re++;
- // transformations:
- if (you.attribute[ATTR_TRANSFORMATION] == TRAN_STATUE)
- re += 1;
-
- if (you.attribute[ATTR_TRANSFORMATION] == TRAN_AIR)
- re += 2; // multiple levels currently meaningless
-
- if (you.attribute[ATTR_DIVINE_LIGHTNING_PROTECTION])
- re = 3;
- else if (re > 1)
- re = 1;
-
return (re);
} // end player_res_electricity()
@@ -1446,10 +1462,11 @@ bool player_res_asphyx()
return (false);
}
-bool player_control_teleport(bool calc_unid)
+bool player_control_teleport(bool calc_unid, bool temp, bool items)
{
- return ( you.duration[DUR_CONTROL_TELEPORT]
- || player_equip(EQ_RINGS, RING_TELEPORT_CONTROL, calc_unid)
+ return ( (you.duration[DUR_CONTROL_TELEPORT] && temp)
+ || (player_equip(EQ_RINGS, RING_TELEPORT_CONTROL, calc_unid)
+ && items)
|| player_mutation_level(MUT_TELEPORT_CONTROL) );
}
@@ -1462,43 +1479,46 @@ int player_res_torment(bool)
// Funny that no races are susceptible to poisons. {dlb}
// If temp is set to false, temporary sources or resistance won't be counted.
-int player_res_poison(bool calc_unid, bool temp)
+int player_res_poison(bool calc_unid, bool temp, bool items)
{
int rp = 0;
- // Only thirsty vampires are naturally poison resistant.
- if (you.species == SP_VAMPIRE && you.hunger_state < HS_SATIATED)
- rp++;
+ if (items)
+ {
+ // rings of poison resistance
+ rp += player_equip( EQ_RINGS, RING_POISON_RESISTANCE, calc_unid );
- // rings of poison resistance
- rp += player_equip( EQ_RINGS, RING_POISON_RESISTANCE, calc_unid );
+ // Staves
+ rp += player_equip( EQ_STAFF, STAFF_POISON, calc_unid );
- // Staves
- rp += player_equip( EQ_STAFF, STAFF_POISON, calc_unid );
-
- // the staff of Olgreb:
- if (you.equip[EQ_WEAPON] != -1
- && you.inv[you.equip[EQ_WEAPON]].base_type == OBJ_WEAPONS
- && you.inv[you.equip[EQ_WEAPON]].special == SPWPN_STAFF_OF_OLGREB)
- {
- rp++;
- }
+ // the staff of Olgreb:
+ if (you.equip[EQ_WEAPON] != -1
+ && you.inv[you.equip[EQ_WEAPON]].base_type == OBJ_WEAPONS
+ && you.inv[you.equip[EQ_WEAPON]].special == SPWPN_STAFF_OF_OLGREB)
+ {
+ rp++;
+ }
- // ego armour:
- rp += player_equip_ego_type( EQ_ALL_ARMOUR, SPARM_POISON_RESISTANCE );
+ // ego armour:
+ rp += player_equip_ego_type( EQ_ALL_ARMOUR, SPARM_POISON_RESISTANCE );
- // body armour:
- rp += player_equip( EQ_BODY_ARMOUR, ARM_GOLD_DRAGON_ARMOUR );
- rp += player_equip( EQ_BODY_ARMOUR, ARM_SWAMP_DRAGON_ARMOUR );
+ // body armour:
+ rp += player_equip( EQ_BODY_ARMOUR, ARM_GOLD_DRAGON_ARMOUR );
+ rp += player_equip( EQ_BODY_ARMOUR, ARM_SWAMP_DRAGON_ARMOUR );
- // randart weapons:
- rp += scan_randarts(RAP_POISON, calc_unid);
+ // randart weapons:
+ rp += scan_randarts(RAP_POISON, calc_unid);
+ }
// mutations:
rp += player_mutation_level(MUT_POISON_RESISTANCE);
if (temp)
{
+ // Only thirsty vampires are naturally poison resistant.
+ if (you.species == SP_VAMPIRE && you.hunger_state < HS_SATIATED)
+ rp++;
+
// spells:
if (you.duration[DUR_RESIST_POISON] > 0)
rp++;
@@ -4159,9 +4179,10 @@ bool player_item_conserve(bool calc_unid)
|| player_equip_ego_type(EQ_CLOAK, SPARM_PRESERVATION));
}
-int player_mental_clarity(bool calc_unid)
+int player_mental_clarity(bool calc_unid, bool items)
{
- const int ret = 3 * player_equip(EQ_AMULET, AMU_CLARITY, calc_unid)
+ const int ret = (3 * player_equip(EQ_AMULET, AMU_CLARITY, calc_unid)
+ * items)
+ player_mutation_level(MUT_CLARITY);
return ((ret > 3) ? 3 : ret);
diff --git a/crawl-ref/source/player.h b/crawl-ref/source/player.h
index 664d2c7a05..bae81da50e 100644
--- a/crawl-ref/source/player.h
+++ b/crawl-ref/source/player.h
@@ -161,15 +161,16 @@ int player_regen(void);
/* ***********************************************************************
* called from: fight - files - it_use2 - misc - ouch - spells - spells2
* *********************************************************************** */
-int player_res_cold(bool calc_unid = true);
-int player_res_acid(bool consider_unidentified_gear = true);
+int player_res_cold(bool calc_unid = true, bool temp = true,
+ bool items = true);
+int player_res_acid(bool calc_unid = true, bool items = true);
int player_acid_resist_factor();
int player_res_torment(bool calc_unid = true);
bool player_res_corrosion(bool calc_unid = true);
bool player_item_conserve(bool calc_unid = true);
-int player_mental_clarity(bool calc_unid = true);
+int player_mental_clarity(bool calc_unid = true, bool items = true);
bool player_can_smell();
bool player_can_swim();
@@ -180,23 +181,28 @@ int player_mutation_level(mutation_type mut);
/* ***********************************************************************
* called from: fight - files - ouch
* *********************************************************************** */
-int player_res_electricity(bool calc_unid = true);
+int player_res_electricity(bool calc_unid = true, bool temp = true,
+ bool items = true);
/* ***********************************************************************
* called from: acr - fight - misc - ouch - spells
* *********************************************************************** */
-int player_res_fire(bool calc_unid = true, bool temp = true);
-int player_res_steam(bool calc_unid = true, bool temp = true);
+int player_res_fire(bool calc_unid = true, bool temp = true,
+ bool items = true);
+int player_res_steam(bool calc_unid = true, bool temp = true,
+ bool items = true);
/* ***********************************************************************
* called from: beam - decks - fight - fod - it_use2 - misc - ouch -
* spells - spells2
* *********************************************************************** */
-int player_res_poison(bool calc_unid = true, bool temp = true);
+int player_res_poison(bool calc_unid = true, bool temp = true,
+ bool items = true);
-bool player_control_teleport(bool calc_unid = true);
+bool player_control_teleport(bool calc_unid = true, bool temp = true,
+ bool items = true);
int player_res_magic(void);