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

View File

@ -347,7 +347,7 @@ class TileMap : IsPartOfGameInfoSerialization {
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
if (i == sightDistance+1 && cTileHeight <= aUnitHeight)
if (i == sightDistance+1 && (cTileHeight <= aUnitHeight || forAttack))
continue
/*