diff options
author | dolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-04-23 07:41:29 +0000 |
---|---|---|
committer | dolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-04-23 07:41:29 +0000 |
commit | 974643d2eec4610d68ed781b91a01ecd461969f5 (patch) | |
tree | ddc6f14577ed6596e41f6407315027339d8601f5 | |
parent | d1f4c8f4477bdc2fbe60bfd00aebc344b7932dfd (diff) | |
download | crawl-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.cc | 45 |
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); |