modding: Negative tile damage cannot heal more than max health

This commit is contained in:
Yair Morgenstern 2023-11-07 10:35:54 +02:00
parent c9212e19c2
commit 75c4be39a2
2 changed files with 8 additions and 5 deletions

View File

@ -25,6 +25,7 @@ class MapUnitCombatant(val unit: MapUnit) : ICombatant {
override fun takeDamage(damage: Int) { override fun takeDamage(damage: Int) {
unit.health -= damage unit.health -= damage
if (unit.health > 100) unit.health = 100 // For cheating modders, e.g. negative tile damage
if (unit.health < 0) unit.health = 0 if (unit.health < 0) unit.health = 0
if (isDefeated()) unit.destroy() if (isDefeated()) unit.destroy()
} }

View File

@ -1,6 +1,7 @@
package com.unciv.logic.map.mapunit package com.unciv.logic.map.mapunit
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.logic.battle.MapUnitCombatant
import com.unciv.logic.civilization.LocationAction import com.unciv.logic.civilization.LocationAction
import com.unciv.logic.civilization.NotificationCategory import com.unciv.logic.civilization.NotificationCategory
import com.unciv.logic.civilization.NotificationIcon import com.unciv.logic.civilization.NotificationIcon
@ -83,7 +84,7 @@ class UnitTurnManager(val unit: MapUnit) {
}.maxByOrNull { it.second } }.maxByOrNull { it.second }
?: return ?: return
if (damage == 0) return if (damage == 0) return
unit.health -= damage MapUnitCombatant(unit).takeDamage(damage)
val improvementName = citadelTile.improvement!! // guarded by `getUnpillagedImprovement() != null` above val improvementName = citadelTile.improvement!! // guarded by `getUnpillagedImprovement() != null` above
val improvementIcon = "ImprovementIcons/$improvementName" val improvementIcon = "ImprovementIcons/$improvementName"
val locations = LocationAction(citadelTile.position, unit.currentTile.position) val locations = LocationAction(citadelTile.position, unit.currentTile.position)
@ -112,9 +113,11 @@ class UnitTurnManager(val unit: MapUnit) {
private fun doTerrainDamage() { private fun doTerrainDamage() {
val tileDamage = unit.getDamageFromTerrain() val tileDamage = unit.getDamageFromTerrain()
unit.health -= tileDamage if (tileDamage == 0) return
if (unit.health <= 0) { MapUnitCombatant(unit).takeDamage(tileDamage)
if (unit.isDestroyed) {
unit.civ.addNotification( unit.civ.addNotification(
"Our [${unit.name}] took [$tileDamage] tile damage and was destroyed", "Our [${unit.name}] took [$tileDamage] tile damage and was destroyed",
unit.currentTile.position, unit.currentTile.position,
@ -122,8 +125,7 @@ class UnitTurnManager(val unit: MapUnit) {
unit.name, unit.name,
NotificationIcon.Death NotificationIcon.Death
) )
unit.destroy() } else unit.civ.addNotification(
} else if (tileDamage > 0) unit.civ.addNotification(
"Our [${unit.name}] took [$tileDamage] tile damage", "Our [${unit.name}] took [$tileDamage] tile damage",
unit.currentTile.position, unit.currentTile.position,
NotificationCategory.Units, NotificationCategory.Units,