From 253c669ba9b0d462b68cd2af47fc5607590b6ffe Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Fri, 3 Mar 2023 16:37:11 +0200 Subject: [PATCH] Added 'after which this unit is consumed' for units whose only purpose is limited actions --- .../assets/jsons/Civ V - Gods & Kings/Units.json | 2 +- .../com/unciv/models/ruleset/unique/UniqueType.kt | 1 + .../screens/worldscreen/unit/actions/UnitActions.kt | 13 +++++++++++-- docs/Modders/uniques.md | 6 ++++++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/android/assets/jsons/Civ V - Gods & Kings/Units.json b/android/assets/jsons/Civ V - Gods & Kings/Units.json index d934521377..30c041db86 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/Units.json +++ b/android/assets/jsons/Civ V - Gods & Kings/Units.json @@ -1610,7 +1610,7 @@ "unitType": "Civilian", "uniques": [ "Can hurry technology research", - "Can instantly construct a [Academy] improvement <[2] times>", + "Can instantly construct a [Academy] improvement ", "Great Person - [Science]", "Unbuildable", "Uncapturable"], "movement": 2 }, diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index b1048b9c62..e70b186cec 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -511,6 +511,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: UnitActionMovementCost("for [amount] movement", UniqueTarget.UnitActionModifier), UnitActionOnce("once", UniqueTarget.UnitActionModifier), UnitActionLimitedTimes("[amount] times", UniqueTarget.UnitActionModifier), + UnitActionAfterWhichConsumed("after which this unit is consumed", UniqueTarget.UnitActionModifier), // endregion diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt index 29a07e80b3..e4c734cd89 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt @@ -704,6 +704,11 @@ object UnitActions { when (conditional.type){ UniqueType.UnitActionConsumeUnit -> unit.consume() UniqueType.UnitActionLimitedTimes -> { + if (usagesLeft(unit, actionUnique) == 1 + && actionUnique.conditionals.any { it.type==UniqueType.UnitActionAfterWhichConsumed }) { + unit.consume() + continue + } val usagesSoFar = unit.abilityToTimesUsed[actionUnique.placeholderText] ?: 0 unit.abilityToTimesUsed[actionUnique.placeholderText] = usagesSoFar + 1 } @@ -736,12 +741,16 @@ object UnitActions { fun getSideEffectString(unit:MapUnit, actionUnique: Unique): String { val effects = ArrayList() - if (actionUnique.conditionals.any { it.type == UniqueType.UnitActionConsumeUnit }) effects += Fonts.death.toString() - else effects += getMovementPointsToUse(actionUnique).toString() + Fonts.movement val maxUsages = getMaxUsages(actionUnique) if (maxUsages!=null) effects += "${usagesLeft(unit, actionUnique)}/$maxUsages" + if (actionUnique.conditionals.any { it.type == UniqueType.UnitActionConsumeUnit } + || actionUnique.conditionals.any { it.type == UniqueType.UnitActionAfterWhichConsumed } && usagesLeft(unit, actionUnique) == 1 + ) effects += Fonts.death.toString() + else effects += getMovementPointsToUse(actionUnique).toString() + Fonts.movement + + return if (effects.isEmpty()) "" else "(${effects.joinToString { it.tr() }})" } diff --git a/docs/Modders/uniques.md b/docs/Modders/uniques.md index 95d325d0f7..f2f8840baf 100644 --- a/docs/Modders/uniques.md +++ b/docs/Modders/uniques.md @@ -1983,11 +1983,17 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl Applicable to: UnitActionModifier +??? example "<once>" + Applicable to: UnitActionModifier + ??? example "<[amount] times>" Example: "<[3] times>" Applicable to: UnitActionModifier +??? example "<after which this unit is consumed>" + Applicable to: UnitActionModifier + *[action]: An action that a unit can perform. Currently, there are only two actions part of this: 'Spread Religion' and 'Remove Foreign religions from your own cities' *[amount]: This indicates a whole number, possibly with a + or - sign, such as `2`, `+13`, or `-3`.