Bonus damage additive

Fixed 'melee attack from 2 tiles away'
This commit is contained in:
Yair Morgenstern 2023-01-15 22:51:24 +02:00
parent 280d3da933
commit 6df871a8bc
2 changed files with 6 additions and 8 deletions

View File

@ -202,18 +202,16 @@ object BattleDamage {
} }
private fun modifiersToMultiplicationBonus(modifiers: Counter<String>): Float { private fun modifiersToFinalBonus(modifiers: Counter<String>): Float {
var finalModifier = 1f var finalModifier = 1f
for (modifierValue in modifiers.values) finalModifier *= modifierValue.toPercent() for (modifierValue in modifiers.values) finalModifier += modifierValue / 100f
return finalModifier return finalModifier
} }
private fun getHealthDependantDamageRatio(combatant: ICombatant): Float { private fun getHealthDependantDamageRatio(combatant: ICombatant): Float {
return if (combatant !is MapUnitCombatant return if (combatant !is MapUnitCombatant
|| combatant.unit.hasUnique(UniqueType.NoDamagePenalty, checkCivInfoUniques = true) || combatant.unit.hasUnique(UniqueType.NoDamagePenalty, checkCivInfoUniques = true)
) { ) 1f
1f
}
// Each 3 points of health reduces damage dealt by 1% // Each 3 points of health reduces damage dealt by 1%
else 1 - (100 - combatant.getHealth()) / 300f else 1 - (100 - combatant.getHealth()) / 300f
} }
@ -226,7 +224,7 @@ object BattleDamage {
attacker: ICombatant, attacker: ICombatant,
defender: ICombatant defender: ICombatant
): Float { ): Float {
val attackModifier = modifiersToMultiplicationBonus(getAttackModifiers(attacker, defender)) val attackModifier = modifiersToFinalBonus(getAttackModifiers(attacker, defender))
return max(1f, attacker.getAttackingStrength() * attackModifier) return max(1f, attacker.getAttackingStrength() * attackModifier)
} }
@ -235,7 +233,7 @@ object BattleDamage {
* Includes defence modifiers * Includes defence modifiers
*/ */
fun getDefendingStrength(attacker: ICombatant, defender: ICombatant): Float { fun getDefendingStrength(attacker: ICombatant, defender: ICombatant): Float {
val defenceModifier = modifiersToMultiplicationBonus(getDefenceModifiers(attacker, defender)) val defenceModifier = modifiersToFinalBonus(getDefenceModifiers(attacker, defender))
return max(1f, defender.getDefendingStrength(attacker.isRanged()) * defenceModifier) return max(1f, defender.getDefendingStrength(attacker.isRanged()) * defenceModifier)
} }

View File

@ -347,7 +347,7 @@ class TileMap : IsPartOfGameInfoSerialization {
val cTileHeight = cTile.tileHeight val cTileHeight = cTile.tileHeight
// For the sightdistance+1 layer - that's "one out of sight" - it's only visible if it's higher than the current tile // For the sightdistance+1 layer - that's "one out of sight" - it's only visible if it's higher than the current tile
if (i == sightDistance+1 && cTileHeight <= aUnitHeight) if (i == sightDistance+1 && (cTileHeight <= aUnitHeight || forAttack))
continue continue
/* /*