| 31048 | } |
| 31049 | |
| 31050 | real_t Entity::getDamageTableMultiplier(Entity* my, Stat& myStats, DamageTableType damageType, int* magicResistance, int* outNumSources) |
| 31051 | { |
| 31052 | real_t damageMultiplier = damagetables[myStats.type][damageType]; |
| 31053 | if ( myStats.getEffectActive(EFF_SHADOW_TAGGED) ) |
| 31054 | { |
| 31055 | if ( myStats.type == LICH || myStats.type == LICH_FIRE || myStats.type == LICH_ICE |
| 31056 | || myStats.type == DEVIL ) |
| 31057 | { |
| 31058 | return 1.5; // rough average. |
| 31059 | } |
| 31060 | else |
| 31061 | { |
| 31062 | return 1.0; |
| 31063 | } |
| 31064 | } |
| 31065 | |
| 31066 | std::vector<real_t> allBonuses; |
| 31067 | |
| 31068 | //messagePlayer(0, "%f", damageMultiplier); |
| 31069 | if ( myStats.type == GOATMAN && myStats.getEffectActive(EFF_DRUNK) ) |
| 31070 | { |
| 31071 | allBonuses.push_back(-.2); |
| 31072 | } |
| 31073 | if ( damageType == DamageTableType::DAMAGE_TABLE_MAGIC |
| 31074 | && myStats.type == BUGBEAR && myStats.defending && myStats.shield ) |
| 31075 | { |
| 31076 | damageMultiplier = 0.1; |
| 31077 | } |
| 31078 | int followerResist = my ? my->getFollowerBonusDamageResist() : 0; |
| 31079 | if ( followerResist != 0 ) |
| 31080 | { |
| 31081 | allBonuses.push_back(-followerResist / 100.0); |
| 31082 | } |
| 31083 | |
| 31084 | if ( damageType == DAMAGE_TABLE_MAGIC ) |
| 31085 | { |
| 31086 | if ( myStats.getEffectActive(EFF_RATION_HERBAL) ) |
| 31087 | { |
| 31088 | allBonuses.push_back(-0.2); |
| 31089 | } |
| 31090 | |
| 31091 | if ( myStats.getEffectActive(EFF_GUARD_SPIRIT) || myStats.getEffectActive(EFF_DIVINE_GUARD) ) |
| 31092 | { |
| 31093 | real_t guardBonus = -0.1 * myStats.getEffectActive(EFF_GUARD_SPIRIT); |
| 31094 | guardBonus = std::min(guardBonus, -0.025 * myStats.getEffectActive(EFF_DIVINE_GUARD)); |
| 31095 | allBonuses.push_back(guardBonus); |
| 31096 | } |
| 31097 | } |
| 31098 | |
| 31099 | if ( damageType != DAMAGE_TABLE_MAGIC ) |
| 31100 | { |
| 31101 | if ( myStats.type == MYCONID ) |
| 31102 | { |
| 31103 | if ( !myStats.helmet && myStats.getEffectActive(EFF_GROWTH) > 1 ) |
| 31104 | { |
| 31105 | int bonus = std::min(3, myStats.getEffectActive(EFF_GROWTH) - 1); |
| 31106 | allBonuses.push_back(-0.05 * bonus); |
| 31107 | } |
nothing calls this directly
no test coverage detected