summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-04-23 07:41:29 +0000
committerdolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-04-23 07:41:29 +0000
commit974643d2eec4610d68ed781b91a01ecd461969f5 (patch)
treeddc6f14577ed6596e41f6407315027339d8601f5
parentd1f4c8f4477bdc2fbe60bfd00aebc344b7932dfd (diff)
downloadcrawl-ref-974643d2eec4610d68ed781b91a01ecd461969f5.tar.gz
crawl-ref-974643d2eec4610d68ed781b91a01ecd461969f5.zip
Take monster shields into account when calculating resistances.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@4526 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/mon-util.cc45
1 files changed, 45 insertions, 0 deletions
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 8bb569fdeb..f79cd33f65 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -796,6 +796,7 @@ int mons_resist_magic( const monsters *mon )
// ego armour resistance
const int armour = mon->inv[MSLOT_ARMOUR];
+ const int shield = mon->inv[MSLOT_SHIELD];
if (armour != NON_ITEM
&& get_armour_ego_type( mitm[armour] ) == SPARM_MAGIC_RESISTANCE )
@@ -803,6 +804,12 @@ int mons_resist_magic( const monsters *mon )
u += 30;
}
+ if (shield != NON_ITEM
+ && get_armour_ego_type( mitm[shield] ) == SPARM_MAGIC_RESISTANCE )
+ {
+ u += 30;
+ }
+
return (u);
} // end mon_resist_magic()
@@ -903,6 +910,8 @@ int mons_res_poison( const monsters *mon )
u += _scan_mon_inv_randarts( mon, RAP_POISON );
const int armour = mon->inv[MSLOT_ARMOUR];
+ const int shield = mon->inv[MSLOT_SHIELD];
+
if (armour != NON_ITEM && mitm[armour].base_type == OBJ_ARMOUR)
{
// intrinsic armour abilities
@@ -917,6 +926,13 @@ int mons_res_poison( const monsters *mon )
if (get_armour_ego_type( mitm[armour] ) == SPARM_POISON_RESISTANCE)
u += 1;
}
+
+ if (shield != NON_ITEM && mitm[shield].base_type == OBJ_ARMOUR)
+ {
+ // ego armour resistance
+ if (get_armour_ego_type( mitm[shield] ) == SPARM_POISON_RESISTANCE)
+ u += 1;
+ }
}
return (u);
@@ -949,6 +965,8 @@ int mons_res_fire( const monsters *mon )
u += _scan_mon_inv_randarts( mon, RAP_FIRE );
const int armour = mon->inv[MSLOT_ARMOUR];
+ const int shield = mon->inv[MSLOT_SHIELD];
+
if (armour != NON_ITEM && mitm[armour].base_type == OBJ_ARMOUR)
{
// intrinsic armour abilities
@@ -965,6 +983,14 @@ int mons_res_fire( const monsters *mon )
if (ego == SPARM_FIRE_RESISTANCE || ego == SPARM_RESISTANCE)
u += 1;
}
+
+ if (shield != NON_ITEM && mitm[shield].base_type == OBJ_ARMOUR)
+ {
+ // check ego resistance
+ const int ego = get_armour_ego_type( mitm[shield] );
+ if (ego == SPARM_FIRE_RESISTANCE || ego == SPARM_RESISTANCE)
+ u += 1;
+ }
}
return (u);
@@ -981,6 +1007,8 @@ int mons_res_cold( const monsters *mon )
u += _scan_mon_inv_randarts( mon, RAP_COLD );
const int armour = mon->inv[MSLOT_ARMOUR];
+ const int shield = mon->inv[MSLOT_SHIELD];
+
if (armour != NON_ITEM && mitm[armour].base_type == OBJ_ARMOUR)
{
// intrinsic armour abilities
@@ -997,6 +1025,14 @@ int mons_res_cold( const monsters *mon )
if (ego == SPARM_COLD_RESISTANCE || ego == SPARM_RESISTANCE)
u += 1;
}
+
+ if (shield != NON_ITEM && mitm[shield].base_type == OBJ_ARMOUR)
+ {
+ // check ego resistance
+ const int ego = get_armour_ego_type( mitm[shield] );
+ if (ego == SPARM_COLD_RESISTANCE || ego == SPARM_RESISTANCE)
+ u += 1;
+ }
}
return (u);
@@ -1031,12 +1067,21 @@ int mons_res_negative_energy( const monsters *mon )
u += _scan_mon_inv_randarts( mon, RAP_NEGATIVE_ENERGY );
const int armour = mon->inv[MSLOT_ARMOUR];
+ const int shield = mon->inv[MSLOT_SHIELD];
+
if (armour != NON_ITEM && mitm[armour].base_type == OBJ_ARMOUR)
{
// check for ego resistance
if (get_armour_ego_type( mitm[armour] ) == SPARM_POSITIVE_ENERGY)
u += 1;
}
+
+ if (shield != NON_ITEM && mitm[shield].base_type == OBJ_ARMOUR)
+ {
+ // check for ego resistance
+ if (get_armour_ego_type( mitm[shield] ) == SPARM_POSITIVE_ENERGY)
+ u += 1;
+ }
}
return (u);