From c3a4a18bba5aaa67843507bdeb2780e124249cd4 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Fri, 3 Mar 2023 14:13:00 +0200 Subject: [PATCH] Replace unit action for timed golden ages with a generic triggered unique Triggered uniques display side effects --- .../jsons/Civ V - Gods & Kings/Units.json | 14 ++++++++++---- .../assets/jsons/Civ V - Vanilla/Units.json | 11 ++++++++--- .../ruleset/unique/UniqueTriggerActivation.kt | 5 +++-- .../unciv/models/ruleset/unique/UniqueType.kt | 4 ++++ .../worldscreen/unit/actions/UnitActions.kt | 19 +++++++++++-------- docs/Modders/uniques.md | 10 +++++----- 6 files changed, 41 insertions(+), 22 deletions(-) diff --git a/android/assets/jsons/Civ V - Gods & Kings/Units.json b/android/assets/jsons/Civ V - Gods & Kings/Units.json index 3cfcaca21f..30c041db86 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/Units.json +++ b/android/assets/jsons/Civ V - Gods & Kings/Units.json @@ -1599,7 +1599,8 @@ { "name": "Great Artist", "unitType": "Civilian", - "uniques": ["Can start an [8]-turn golden age", + "uniques": [ + "Empire enters a [8]-turn Golden Age ", "Can instantly construct a [Landmark] improvement ", "Great Person - [Culture]", "Unbuildable", "Uncapturable"], "movement": 2 @@ -1607,7 +1608,8 @@ { "name": "Great Scientist", "unitType": "Civilian", - "uniques": ["Can hurry technology research", + "uniques": [ + "Can hurry technology research", "Can instantly construct a [Academy] improvement ", "Great Person - [Science]", "Unbuildable", "Uncapturable"], "movement": 2 @@ -1646,7 +1648,9 @@ { "name": "Great General", "unitType": "Civilian", - "uniques": ["Can start an [8]-turn golden age", "[+15]% Strength bonus for [Military] units within [2] tiles", + "uniques": [ + "Empire enters a [8]-turn Golden Age ", + "[+15]% Strength bonus for [Military] units within [2] tiles", "Can instantly construct a [Citadel] improvement ", "Great Person - [War]", "Unbuildable", "Uncapturable"], "movement": 2 @@ -1656,7 +1660,9 @@ "unitType": "Civilian", "uniqueTo": "Mongolia", "replaces": "Great General", - "uniques": ["Can start an [8]-turn golden age","[+15]% Strength bonus for [Military] units within [2] tiles", + "uniques": [ + "Empire enters a [8]-turn Golden Age ", + "[+15]% Strength bonus for [Military] units within [2] tiles", "All adjacent units heal [+15] HP when healing", "[+15] HP when healing", "Can instantly construct a [Citadel] improvement ", "Great Person - [War]", "Unbuildable", "Uncapturable"], diff --git a/android/assets/jsons/Civ V - Vanilla/Units.json b/android/assets/jsons/Civ V - Vanilla/Units.json index 2b7bc7b702..5f03e53d67 100644 --- a/android/assets/jsons/Civ V - Vanilla/Units.json +++ b/android/assets/jsons/Civ V - Vanilla/Units.json @@ -1258,7 +1258,8 @@ { "name": "Great Artist", "unitType": "Civilian", - "uniques": ["Can start an [8]-turn golden age", + "uniques": [ + "Empire enters a [8]-turn Golden Age ", "Can instantly construct a [Landmark] improvement ", "Great Person - [Culture]", "Unbuildable", "Uncapturable"], "movement": 2 @@ -1305,7 +1306,9 @@ { "name": "Great General", "unitType": "Civilian", - "uniques": ["Can start an [8]-turn golden age", "[+15]% Strength bonus for [Military] units within [2] tiles", + "uniques": [ + "Empire enters a [8]-turn Golden Age ", + "[+15]% Strength bonus for [Military] units within [2] tiles", "Can instantly construct a [Citadel] improvement ", "Great Person - [War]", "Unbuildable", "Uncapturable"], "movement": 2 @@ -1315,7 +1318,9 @@ "unitType": "Civilian", "uniqueTo": "Mongolia", "replaces": "Great General", - "uniques": ["Can start an [8]-turn golden age", "[+15]% Strength bonus for [Military] units within [2] tiles", + "uniques": [ + "Empire enters a [8]-turn Golden Age ", + "[+15]% Strength bonus for [Military] units within [2] tiles", "All adjacent units heal [+15] HP when healing", "[+15] HP when healing", "Can instantly construct a [Citadel] improvement ", "Great Person - [War]", "Unbuildable", "Uncapturable"], diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt index e001df24f4..13e6a73ce2 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt @@ -164,8 +164,9 @@ object UniqueTriggerActivation { civInfo.addNotification(notificationText, NotificationCategory.General, NotificationIcon.Culture) return true } - UniqueType.OneTimeEnterGoldenAge -> { - civInfo.goldenAges.enterGoldenAge() + UniqueType.OneTimeEnterGoldenAge, UniqueType.OneTimeEnterGoldenAgeTurns -> { + if (unique.type == UniqueType.OneTimeEnterGoldenAgeTurns) civInfo.goldenAges.enterGoldenAge(unique.params[0].toInt()) + else civInfo.goldenAges.enterGoldenAge() val notificationText = getNotificationText(notification, triggerNotificationText, "You enter a Golden Age") diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index dceb18a44d..8180d01d7b 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -360,6 +360,9 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: MayFoundReligion("May found a religion", UniqueTarget.Unit), MayEnhanceReligion("May enhance a religion", UniqueTarget.Unit), + + + @Deprecated("as of 4.5.3", ReplaceWith("Empire enters a [amount]-turn Golden Age ")) StartGoldenAge("Can start an [amount]-turn golden age", UniqueTarget.Unit), AddInCapital("Can be added to [comment] in the Capital", UniqueTarget.Unit), PreventSpreadingReligion("Prevents spreading of religion to the city it is next to", UniqueTarget.Unit), @@ -701,6 +704,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: OneTimeFreePolicy("Free Social Policy", UniqueTarget.Triggerable), // used in Buildings OneTimeAmountFreePolicies("[amount] Free Social Policies", UniqueTarget.Triggerable), // Not used in Vanilla OneTimeEnterGoldenAge("Empire enters golden age", UniqueTarget.Triggerable), // used in Policies, Buildings + OneTimeEnterGoldenAgeTurns("Empire enters a [amount]-turn Golden Age", UniqueTarget.Triggerable), OneTimeFreeGreatPerson("Free Great Person", UniqueTarget.Triggerable), // used in Policies, Buildings OneTimeGainPopulation("[amount] population [cityFilter]", UniqueTarget.Triggerable), // used in CN tower OneTimeGainPopulationRandomCity("[amount] population in a random city", UniqueTarget.Triggerable), 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 030a0867d1..14c5b86f12 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 @@ -202,8 +202,7 @@ object UnitActions { return UnitAction( type = UnitActionType.FoundCity, - title = if (!hasActionModifiers) UnitActionType.FoundCity.value - else "${UnitActionType.FoundCity.value} ${getSideEffectString(unique)}", + title = actionTextWithSideEffects(UnitActionType.FoundCity.value, unique), uncivSound = UncivSound.Chimes, action = { // check if we would be breaking a promise @@ -474,12 +473,8 @@ object UnitActions { (civResources[unique.params[1]] ?: 0) < unique.params[0].toInt() } - val sideEffectsString = getSideEffectString(unique) - val title = if (sideEffectsString.isEmpty()) "Create [$improvementName]" - else "{Create [$improvementName]} {$sideEffectsString}" - finalActions += UnitAction(UnitActionType.Create, - title = title, + title = actionTextWithSideEffects("Create [$improvementName]", unique), action = { val unitTile = unit.getTile() unitTile.improvementFunctions.removeCreatesOneImprovementMarker() @@ -658,7 +653,9 @@ object UnitActions { if (unique.conditionals.none { it.type?.targetTypes?.contains(UniqueTarget.UnitActionModifier) == true }) continue if (unique.type?.targetTypes?.any { it in triggerableTypes }!=true) continue - val unitAction = UnitAction(type = UnitActionType.TriggerUnique, unique.text.removeConditionals()){ + val unitAction = UnitAction(type = UnitActionType.TriggerUnique, + title = actionTextWithSideEffects(unique.text.removeConditionals(), unique) + ){ UniqueTriggerActivation.triggerUnitwideUnique(unique, unit) activateSideEffects(unit, unique) } @@ -707,6 +704,12 @@ object UnitActions { } } + fun actionTextWithSideEffects(originalText:String, actionUnique: Unique): String { + val sideEffectString = getSideEffectString(actionUnique) + if (sideEffectString == "") return originalText + else return "$originalText $sideEffectString" + } + fun getSideEffectString(actionUnique: Unique): String { val effects = ArrayList() if (actionUnique.conditionals.any { it.type == UniqueType.UnitActionConsumeUnit }) effects += Fonts.death.toString() diff --git a/docs/Modders/uniques.md b/docs/Modders/uniques.md index 1763ac47d8..6717d1ce8a 100644 --- a/docs/Modders/uniques.md +++ b/docs/Modders/uniques.md @@ -22,6 +22,11 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl ??? example "Empire enters golden age" Applicable to: Triggerable +??? example "Empire enters a [amount]-turn Golden Age" + Example: "Empire enters a [3]-turn Golden Age" + + Applicable to: Triggerable + ??? example "Free Great Person" Applicable to: Triggerable @@ -1058,11 +1063,6 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl ??? example "May enhance a religion" Applicable to: Unit -??? example "Can start an [amount]-turn golden age" - Example: "Can start an [3]-turn golden age" - - Applicable to: Unit - ??? example "Can be added to [comment] in the Capital" Example: "Can be added to [comment] in the Capital"