diff --git a/core/src/com/unciv/models/ruleset/Ruleset.kt b/core/src/com/unciv/models/ruleset/Ruleset.kt index 968550b4d6..e548e56542 100644 --- a/core/src/com/unciv/models/ruleset/Ruleset.kt +++ b/core/src/com/unciv/models/ruleset/Ruleset.kt @@ -24,6 +24,7 @@ import com.unciv.models.stats.INamed import com.unciv.models.stats.NamedStats import com.unciv.models.stats.Stats import com.unciv.models.translations.fillPlaceholders +import com.unciv.models.translations.getPlaceholderParameters import com.unciv.models.translations.tr import com.unciv.ui.utils.colorFromRGB import com.unciv.ui.utils.getRelativeTextDistance @@ -373,9 +374,25 @@ class Ruleset { val deprecationAnnotation = unique.type.declaringClass.getField(unique.type.name) .getAnnotation(Deprecated::class.java) if (deprecationAnnotation != null) { + var replacementUniqueText = deprecationAnnotation.replaceWith.expression + val deprecatedUniquePlaceholders = unique.type.text.getPlaceholderParameters() + + // Here, for once, we DO want the conditional placeholder parameters together with the regular ones, + // so we cheat the conditional detector by removing the '<' + for (parameter in replacementUniqueText.replace('<',' ').getPlaceholderParameters()) { + val parameterNumberInDeprecatedUnique = + deprecatedUniquePlaceholders.indexOf(parameter.removePrefix("+").removePrefix("-")) + if (parameterNumberInDeprecatedUnique == -1) continue + var replacementText = unique.params[parameterNumberInDeprecatedUnique] + if (parameter.startsWith('+')) replacementText = "+$replacementText" + else if(parameter.startsWith('-')) replacementText = "-$replacementText" + replacementUniqueText = + replacementUniqueText.replace("[$parameter]", "[$replacementText]") + } + val deprecationText = "$name's unique \"${unique.text}\" is deprecated ${deprecationAnnotation.message}," + - if (deprecationAnnotation.replaceWith.expression != "") " replace with \"${deprecationAnnotation.replaceWith.expression}\"" else "" + if (deprecationAnnotation.replaceWith.expression != "") " replace with \"${replacementUniqueText}\"" else "" val severity = if (deprecationAnnotation.level == DeprecationLevel.WARNING) RulesetErrorSeverity.WarningOptionsOnly // Not user-visible else RulesetErrorSeverity.Warning // User visible diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index e912715b3f..d3ffdaeec2 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -93,7 +93,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: StatPercentBonus("[amount]% [stat]", UniqueTarget.Global, UniqueTarget.FollowerBelief), StatPercentBonusCities("[amount]% [stat] [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), StatPercentFromObject("[amount]% [stat] from every [tileFilter/specialist/buildingName]", UniqueTarget.Global, UniqueTarget.FollowerBelief), - @Deprecated("As of 3.18.17", ReplaceWith("[amount]% [stat] from every [tileFilter/specialist/buildingName]")) + @Deprecated("As of 3.18.17", ReplaceWith("[+amount]% [stat] from every [tileFilter/specialist/buildingName]")) StatPercentSignedFromObject("+[amount]% [stat] from every [tileFilter/specialist/buildingName]", UniqueTarget.Global, UniqueTarget.FollowerBelief), AllStatsPercentFromObject("[amount]% Yield from every [tileFilter]", UniqueTarget.FollowerBelief, UniqueTarget.Global), @Deprecated("As of 3.18.17", ReplaceWith("[+amount]% Yield from every [tileFilter]")) @@ -108,7 +108,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: PercentProductionBuildings("[amount]% Production when constructing [buildingFilter] buildings [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), PercentProductionUnits("[amount]% Production when constructing [baseUnitFilter] units [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), PercentProductionBuildingsInCapital("[amount]% Production towards any buildings that already exist in the Capital", UniqueTarget.Global, UniqueTarget.FollowerBelief), - @Deprecated("As of 3.19.3", ReplaceWith("[amount]% Production towards any buildings that already exist in the Capital")) + @Deprecated("As of 3.19.3", ReplaceWith("[+25]% Production towards any buildings that already exist in the Capital")) PercentProductionBuildingsInCapitalDeprecated("+25% Production towards any buildings that already exist in the Capital", UniqueTarget.Global, UniqueTarget.FollowerBelief), //endregion Stat providing uniques @@ -218,7 +218,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: DecreasedRoadMaintenanceDeprecated("Maintenance on roads & railroads reduced by [amount]%", UniqueTarget.Global), BuildingMaintenance("[amount]% maintenance cost for buildings [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), - @Deprecated("As of 3.18.17", ReplaceWith("[-amount]% maintenace cost for buildings [cityFilter]")) + @Deprecated("As of 3.18.17", ReplaceWith("[-amount]% maintenance cost for buildings [cityFilter]")) DecreasedBuildingMaintenanceDeprecated("-[amount]% maintenance cost for buildings [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), // This should probably support conditionals, e.g. @@ -231,7 +231,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: BonusHappinessFromLuxuryDeprecated("+[amount] happiness from each type of luxury resource", UniqueTarget.Global), LessPolicyCostFromCities("Each city founded increases culture cost of policies [amount]% less than normal", UniqueTarget.Global), LessPolicyCost("[amount]% Culture cost of adopting new Policies", UniqueTarget.Global), - @Deprecated("As of 3.18.17", ReplaceWith("[amount]% Culture cost of adopting new Policies")) + @Deprecated("As of 3.18.17", ReplaceWith("[-amount]% Culture cost of adopting new Policies")) LessPolicyCostDeprecated("Culture cost of adopting new Policies reduced by [amount]%", UniqueTarget.Global), @Deprecated("As of 3.19.1", ReplaceWith("[amount]% Culture cost of adopting new Policies")) LessPolicyCostDeprecated2("[amount]% Culture cost of adopting new policies", UniqueTarget.Global), @@ -266,9 +266,9 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: StrengthForCities("[amount]% Strength for cities", UniqueTarget.Global, UniqueTarget.FollowerBelief), @Deprecated("As of 3.18.17", ReplaceWith("[+amount]% Strength for cities ")) StrengthForCitiesDefending("+[amount]% Defensive Strength for cities", UniqueTarget.Global), - @Deprecated("As of 3.18.17", ReplaceWith("[amount]% Strength for cities ")) + @Deprecated("As of 3.18.17", ReplaceWith("[+amount]% Strength for cities ")) StrengthForCitiesAttacking("[amount]% Attacking Strength for cities", UniqueTarget.Global), - @Deprecated("As of 3.19.1", ReplaceWith("[amount]% Strength for cities ")) + @Deprecated("As of 3.19.1", ReplaceWith("[+amount]% Strength for cities ")) StrengthForGarrisonedCitiesAttacking("+[amount]% attacking strength for cities with garrisoned units", UniqueTarget.Global), UnitStartingExperience("New [baseUnitFilter] units start with [amount] Experience [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), @@ -525,7 +525,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: DefensiveBonus("Gives a defensive bonus of [amount]%", UniqueTarget.Improvement), ImprovementMaintenance("Costs [amount] gold per turn when in your territory", UniqueTarget.Improvement), // Unused DamagesAdjacentEnemyUnits("Adjacent enemy units ending their turn take [amount] damage", UniqueTarget.Improvement), - @Deprecated("As of 3.18.17", ReplaceWith("Adjacent enemy units ending their turn take [30] damage"), DeprecationLevel.WARNING) + @Deprecated("As of 3.18.17", ReplaceWith("Adjacent enemy units ending their turn take [amount] damage"), DeprecationLevel.WARNING) DamagesAdjacentEnemyUnitsOld("Deal [amount] damage to adjacent enemy units", UniqueTarget.Improvement), GreatImprovement("Great Improvement", UniqueTarget.Improvement), @@ -671,13 +671,13 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: - @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[amount]% Strength "), DeprecationLevel.ERROR) + @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[+amount]% Strength "), DeprecationLevel.ERROR) StrengthAttacking("+[amount]% Strength when attacking", UniqueTarget.Unit), - @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[amount]% Strength "), DeprecationLevel.ERROR) + @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[+amount]% Strength "), DeprecationLevel.ERROR) StrengthDefending("+[amount]% Strength when defending", UniqueTarget.Unit), @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[amount]% Strength "), DeprecationLevel.ERROR) StrengthDefendingUnitFilter("[amount]% Strength when defending vs [mapUnitFilter] units", UniqueTarget.Unit), - @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[amount]% Strength "), DeprecationLevel.ERROR) + @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[+amount]% Strength "), DeprecationLevel.ERROR) DamageForUnits("[mapUnitFilter] units deal +[amount]% damage", UniqueTarget.Global), @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[+10]% Strength "), DeprecationLevel.ERROR) StrengthGoldenAge("+10% Strength for all units during Golden Age", UniqueTarget.Global), @@ -691,9 +691,9 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: StrengthVsCities("+15% Combat Strength for all units when attacking Cities", UniqueTarget.Global), - @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[amount] Movement "), DeprecationLevel.ERROR) + @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[+amount] Movement "), DeprecationLevel.ERROR) MovementUnits("+[amount] Movement for all [mapUnitFilter] units", UniqueTarget.Global), - @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[amount] Movement "), DeprecationLevel.ERROR) + @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[+1] Movement "), DeprecationLevel.ERROR) MovementGoldenAge("+1 Movement for all units during Golden Age", UniqueTarget.Global), @Deprecated("As of 3.17.5 - removed 3.18.5", ReplaceWith("[amount] Sight "), DeprecationLevel.ERROR) @@ -709,9 +709,9 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: @Deprecated("As of 3.17.10 - removed 3.18.5", ReplaceWith("[+amount]% Production when constructing [baseUnitFilter] units [cityFilter]"), DeprecationLevel.ERROR) PercentProductionUnitsDeprecated("+[amount]% Production when constructing [baseUnitFilter] units [cityFilter]", UniqueTarget.Global), - @Deprecated("As of 3.17.10 - removed 3.18.5", ReplaceWith("[amount]% Production when constructing [buildingFilter] buildings [cityFilter]"), DeprecationLevel.ERROR) + @Deprecated("As of 3.17.10 - removed 3.18.5", ReplaceWith("[+amount]% Production when constructing [buildingFilter] buildings [cityFilter]"), DeprecationLevel.ERROR) PercentProductionStatBuildings("+[amount]% Production when constructing [stat] buildings", UniqueTarget.Global), - @Deprecated("As of 3.17.10 - removed 3.18.5", ReplaceWith("[amount]% Production when constructing [buildingFilter] buildings [cityFilter]"), DeprecationLevel.ERROR) + @Deprecated("As of 3.17.10 - removed 3.18.5", ReplaceWith("[+amount]% Production when constructing [buildingFilter] buildings [cityFilter]"), DeprecationLevel.ERROR) PercentProductionConstructions("+[amount]% Production when constructing [constructionFilter]", UniqueTarget.Global), @Deprecated("As of 3.17.10 - removed 3.18.5", ReplaceWith("[amount]% Production when constructing [buildingFilter] buildings [cityFilter]"), DeprecationLevel.ERROR) PercentProductionBuildingName("+[amount]% Production when constructing a [buildingName]", UniqueTarget.Global), diff --git a/docs/uniques.md b/docs/uniques.md index f2d89cf9e8..49acd13f64 100644 --- a/docs/uniques.md +++ b/docs/uniques.md @@ -347,8 +347,8 @@ Example: "Retain [20]% of the happiness from a luxury after the last copy has be Applicable to: Global -#### [amount] Happiness from each type of luxury resource -Example: "[20] Happiness from each type of luxury resource" +#### [+amount] Happiness from each type of luxury resource +Example: "[+amount] Happiness from each type of luxury resource" Applicable to: Global @@ -1420,9 +1420,9 @@ Applicable to: Conditional - "[stats] per turn from cities before [tech/policy]" - Deprecated As of 3.18.14, replace with "[stats] [in all cities] OR [stats] [in all cities] " - "[stats] from every Wonder" - Deprecated As of 3.19.1, replace with "[stats] from every [Wonder]" - "[stats] from every [buildingFilter] in cities where this religion has at least [amount] followers" - Deprecated As of 3.19.3, replace with "[stats] from every [buildingFilter] " - - "+[amount]% [stat] from every [tileFilter/specialist/buildingName]" - Deprecated As of 3.18.17, replace with "[amount]% [stat] from every [tileFilter/specialist/buildingName]" + - "+[amount]% [stat] from every [tileFilter/specialist/buildingName]" - Deprecated As of 3.18.17, replace with "[+amount]% [stat] from every [tileFilter/specialist/buildingName]" - "+[amount]% yield from every [tileFilter]" - Deprecated As of 3.18.17, replace with "[+amount]% Yield from every [tileFilter]" - - "+25% Production towards any buildings that already exist in the Capital" - Deprecated As of 3.19.3, replace with "[amount]% Production towards any buildings that already exist in the Capital" + - "+25% Production towards any buildings that already exist in the Capital" - Deprecated As of 3.19.3, replace with "[+25]% Production towards any buildings that already exist in the Capital" - "City-State Influence degrades [amount]% slower" - Deprecated As of 3.18.17, replace with "[-amount]% City-State Influence degradation" - "Quantity of Resources gifted by City-States increased by [amount]%" - Deprecated As of 3.18.17, replace with "[+amount]% resources gifted by City-States" - "Happiness from Luxury Resources gifted by City-States increased by [amount]%" - Deprecated As of 3.18.17, replace with "[+amount]% Happiness from luxury resources gifted by City-States" @@ -1435,9 +1435,9 @@ Applicable to: Conditional - "[amount]% cost of natural border growth" - Deprecated As of 3.19.1, replace with "[amount]% Culture cost of natural border growth [cityFilter]" - "-[amount]% Gold cost of acquiring tiles [cityFilter]" - Deprecated As of 3.19.1, replace with "[-amount]% Gold cost of acquiring tiles [cityFilter]" - "Maintenance on roads & railroads reduced by [amount]%" - Deprecated As of 3.18.17, replace with "[-amount]% maintenance on road & railroads" - - "-[amount]% maintenance cost for buildings [cityFilter]" - Deprecated As of 3.18.17, replace with "[-amount]% maintenace cost for buildings [cityFilter]" + - "-[amount]% maintenance cost for buildings [cityFilter]" - Deprecated As of 3.18.17, replace with "[-amount]% maintenance cost for buildings [cityFilter]" - "+[amount] happiness from each type of luxury resource" - Deprecated As of 3.18.17, replace with "[+amount] Happiness from each type of luxury resource" - - "Culture cost of adopting new Policies reduced by [amount]%" - Deprecated As of 3.18.17, replace with "[amount]% Culture cost of adopting new Policies" + - "Culture cost of adopting new Policies reduced by [amount]%" - Deprecated As of 3.18.17, replace with "[-amount]% Culture cost of adopting new Policies" - "[amount]% Culture cost of adopting new policies" - Deprecated As of 3.19.1, replace with "[amount]% Culture cost of adopting new Policies" - "Defensive buildings in all cities are 25% more effective" - Deprecated As of 3.18.17, replace with "[+25]% City Strength from defensive buildings" - "[amount]% Strength for [mapUnitFilter] units which have another [mapUnitFilter] unit in an adjacent tile" - Deprecated As of 3.18.17, replace with "[amount]% Strength " @@ -1445,8 +1445,8 @@ Applicable to: Conditional - "Double gold from Great Merchant trade missions" - Deprecated As of 3.18.17, replace with "[+100]% Gold from Great Merchant trade missions" - "Golden Age length increased by [amount]%" - Deprecated As of 3.18.17, replace with "[+amount]% Golden Age length" - "+[amount]% Defensive Strength for cities" - Deprecated As of 3.18.17, replace with "[+amount]% Strength for cities " - - "[amount]% Attacking Strength for cities" - Deprecated As of 3.18.17, replace with "[amount]% Strength for cities " - - "+[amount]% attacking strength for cities with garrisoned units" - Deprecated As of 3.19.1, replace with "[amount]% Strength for cities " + - "[amount]% Attacking Strength for cities" - Deprecated As of 3.18.17, replace with "[+amount]% Strength for cities " + - "+[amount]% attacking strength for cities with garrisoned units" - Deprecated As of 3.19.1, replace with "[+amount]% Strength for cities " - "Population loss from nuclear attacks -[amount]%" - Deprecated As of 3.19.2, replace with "Population loss from nuclear attacks [-amount]% [in this city]" - "[amount]% Natural religion spread [cityFilter] with [tech/policy]" - Deprecated As of 3.19.3, replace with "[amount]% Natural religion spread [cityFilter] OR [amount]% natural religion spread [cityFilter] " - "Melee units pay no movement cost to pillage" - Deprecated As of 3.18.17, replace with "No movement cost to pillage " @@ -1459,31 +1459,31 @@ Applicable to: Conditional - "[amount]% [stat] while the empire is happy" - Deprecated As of 3.17.1 - removed 3.18.18, replace with "[amount]% [stat] [in all cities] " - "Immediately creates the cheapest available cultural building in each of your first [amount] cities for free" - Deprecated As of 3.16.15 - removed 3.18.4, replace with "Provides the cheapest [stat] building in your first [amount] cities for free" - "Immediately creates a [buildingName] in each of your first [amount] cities for free" - Deprecated As of 3.16.15 - removed 3.18.4, replace with "Provides a [buildingName] in your first [amount] cities for free" - - "[mapUnitFilter] units deal +[amount]% damage" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount]% Strength " + - "[mapUnitFilter] units deal +[amount]% damage" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[+amount]% Strength " - "+10% Strength for all units during Golden Age" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[+10]% Strength " - "[amount]% Strength for [mapUnitFilter] units in [tileFilter]" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount]% Strength " - "+15% Combat Strength for all units when attacking Cities" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[+15]% Strength " - - "+[amount] Movement for all [mapUnitFilter] units" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount] Movement " - - "+1 Movement for all units during Golden Age" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount] Movement " + - "+[amount] Movement for all [mapUnitFilter] units" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[+amount] Movement " + - "+1 Movement for all units during Golden Age" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[+1] Movement " - "[amount] Sight for all [mapUnitFilter] units" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount] Sight " - "[amount]% Spread Religion Strength for [mapUnitFilter] units" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount]% Spread Religion Strength " - "+[amount]% Production when constructing [baseUnitFilter] units [cityFilter]" - Deprecated As of 3.17.10 - removed 3.18.5, replace with "[+amount]% Production when constructing [baseUnitFilter] units [cityFilter]" - - "+[amount]% Production when constructing [stat] buildings" - Deprecated As of 3.17.10 - removed 3.18.5, replace with "[amount]% Production when constructing [buildingFilter] buildings [cityFilter]" - - "+[amount]% Production when constructing [constructionFilter]" - Deprecated As of 3.17.10 - removed 3.18.5, replace with "[amount]% Production when constructing [buildingFilter] buildings [cityFilter]" + - "+[amount]% Production when constructing [stat] buildings" - Deprecated As of 3.17.10 - removed 3.18.5, replace with "[+amount]% Production when constructing [buildingFilter] buildings [cityFilter]" + - "+[amount]% Production when constructing [constructionFilter]" - Deprecated As of 3.17.10 - removed 3.18.5, replace with "[+amount]% Production when constructing [buildingFilter] buildings [cityFilter]" - "+[amount]% Production when constructing a [buildingName]" - Deprecated As of 3.17.10 - removed 3.18.5, replace with "[amount]% Production when constructing [buildingFilter] buildings [cityFilter]" - "+[amount]% Production when constructing [constructionFilter] [cityFilter]" - Deprecated As of 3.17.10 - removed 3.18.5, replace with "[amount]% Production when constructing [buildingFilter] buildings [cityFilter]" - "Not displayed as an available construction unless [buildingName] is built" - Deprecated As of 3.16.11, replace with "Not displayed as an available construction without [buildingName]" - "[stats] once [tech] is discovered" - Deprecated As of 3.17.10 - removed 3.18.19, replace with "[stats] " - "Cannot enter ocean tiles until Astronomy" - Deprecated As of 3.18.6, replace with "Cannot enter ocean tiles " - "[amount]% Bonus XP gain" - Deprecated As of 3.18.12, replace with "[amount]% XP gained from combat" - - "+[amount]% Strength when attacking" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount]% Strength " - - "+[amount]% Strength when defending" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount]% Strength " + - "+[amount]% Strength when attacking" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[+amount]% Strength " + - "+[amount]% Strength when defending" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[+amount]% Strength " - "[amount]% Strength when defending vs [mapUnitFilter] units" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount]% Strength " - "+[amount]% defence in [tileFilter] tiles" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount]% Strength " - "+[amount]% Strength in [tileFilter]" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount]% Strength " - "[amount] Visibility Range" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[amount] Sight" - "Limited Visibility" - Deprecated As of 3.17.5 - removed 3.18.5, replace with "[-1] Sight" - "Cannot be built on [tileFilter] tiles until [tech] is discovered" - Deprecated As of 3.18.5, replace with "Cannot be built on [tileFilter] tiles " - - "Deal [amount] damage to adjacent enemy units" - Deprecated As of 3.18.17, replace with "Adjacent enemy units ending their turn take [30] damage" + - "Deal [amount] damage to adjacent enemy units" - Deprecated As of 3.18.17, replace with "Adjacent enemy units ending their turn take [amount] damage" - "[stats] on [tileFilter] tiles once [tech] is discovered" - Deprecated As of 3.17.10 - removed 3.18.19, replace with "[stats] from [tileFilter] tiles " - "Deal 30 damage to adjacent enemy units" - Deprecated As of 3.17.10 - removed 3.18.19, replace with "Adjacent enemy units ending their turn take [30] damage" \ No newline at end of file