mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-24 03:53:12 -04:00
Add configurable natural wonder discovery stat bonuses (#11249)
* Added configurable natural wonder discovery stats * Shortened the code * Updated the base rulesets with new unique * Updated the El Dorado unique * Applied the suggestions * Reintroduced the implementation for deprecated uniques * Changed tile.naturalWonder to naturalWonder
This commit is contained in:
parent
0474755a0d
commit
0caf0cb4fa
@ -597,7 +597,7 @@
|
|||||||
"innerColor": [255,168,168],
|
"innerColor": [255,168,168],
|
||||||
"favoredReligion": "Christianity",
|
"favoredReligion": "Christianity",
|
||||||
"uniqueName": "Seven Cities of Gold",
|
"uniqueName": "Seven Cities of Gold",
|
||||||
"uniques": ["100 Gold for discovering a Natural Wonder (bonus enhanced to 500 Gold if first to discover it)",
|
"uniques": ["[+100 Gold] for discovering a Natural Wonder (bonus enhanced to [+500 Gold] if first to discover it)",
|
||||||
"[+1 Happiness] for every known Natural Wonder", "[+100]% Yield from every [Natural Wonder]"],
|
"[+1 Happiness] for every known Natural Wonder", "[+100]% Yield from every [Natural Wonder]"],
|
||||||
"cities": ["Madrid","Barcelona","Seville","Cordoba","Toledo","Santiago","Salamanca","Murcia","Valencia","Zaragoza","Pamplona",
|
"cities": ["Madrid","Barcelona","Seville","Cordoba","Toledo","Santiago","Salamanca","Murcia","Valencia","Zaragoza","Pamplona",
|
||||||
"Vitoria","Santander","Oviedo","Jaen","Logroño","Valladolid","Palma","Teruel","Almeria","Leon","Zamora","Mida",
|
"Vitoria","Santander","Oviedo","Jaen","Logroño","Valladolid","Palma","Teruel","Almeria","Leon","Zamora","Mida",
|
||||||
|
@ -375,7 +375,7 @@
|
|||||||
"unbuildable": true,
|
"unbuildable": true,
|
||||||
"uniques": ["Must be adjacent to [0] [Coast] tiles",
|
"uniques": ["Must be adjacent to [0] [Coast] tiles",
|
||||||
"Must be adjacent to [1] to [6] [Jungle] tiles",
|
"Must be adjacent to [1] to [6] [Jungle] tiles",
|
||||||
"Grants 500 Gold to the first civilization to discover it"],
|
"Grants [+500 Gold] to the first civilization to discover it"],
|
||||||
"weight": 2
|
"weight": 2
|
||||||
},
|
},
|
||||||
{ // This will count as "Fresh water" in civ 6
|
{ // This will count as "Fresh water" in civ 6
|
||||||
|
@ -555,7 +555,7 @@
|
|||||||
"outerColor": [84,26,26],
|
"outerColor": [84,26,26],
|
||||||
"innerColor": [255,168,168],
|
"innerColor": [255,168,168],
|
||||||
"uniqueName": "Seven Cities of Gold",
|
"uniqueName": "Seven Cities of Gold",
|
||||||
"uniques": ["100 Gold for discovering a Natural Wonder (bonus enhanced to 500 Gold if first to discover it)",
|
"uniques": ["[+100 Gold] for discovering a Natural Wonder (bonus enhanced to [+500 Gold] if first to discover it)",
|
||||||
"[+1 Happiness] for every known Natural Wonder", "[+100]% Yield from every [Natural Wonder]"],
|
"[+1 Happiness] for every known Natural Wonder", "[+100]% Yield from every [Natural Wonder]"],
|
||||||
"cities": ["Madrid","Barcelona","Seville","Cordoba","Toledo","Santiago","Salamanca","Murcia","Valencia","Zaragoza","Pamplona",
|
"cities": ["Madrid","Barcelona","Seville","Cordoba","Toledo","Santiago","Salamanca","Murcia","Valencia","Zaragoza","Pamplona",
|
||||||
"Vitoria","Santander","Oviedo","Jaen","Logroño","Valladolid","Palma","Teruel","Almeria","Leon","Zamora","Mida",
|
"Vitoria","Santander","Oviedo","Jaen","Logroño","Valladolid","Palma","Teruel","Almeria","Leon","Zamora","Mida",
|
||||||
|
@ -376,7 +376,7 @@
|
|||||||
"unbuildable": true,
|
"unbuildable": true,
|
||||||
"uniques": ["Must be adjacent to [0] [Coast] tiles",
|
"uniques": ["Must be adjacent to [0] [Coast] tiles",
|
||||||
"Must be adjacent to [1] to [6] [Jungle] tiles",
|
"Must be adjacent to [1] to [6] [Jungle] tiles",
|
||||||
"Grants 500 Gold to the first civilization to discover it"],
|
"Grants [+500 Gold] to the first civilization to discover it"],
|
||||||
"weight": 2
|
"weight": 2
|
||||||
},
|
},
|
||||||
{ // This will count as "Fresh water" in civ 6
|
{ // This will count as "Fresh water" in civ 6
|
||||||
|
@ -4,6 +4,7 @@ import com.badlogic.gdx.math.Vector2
|
|||||||
import com.unciv.Constants
|
import com.unciv.Constants
|
||||||
import com.unciv.logic.city.City
|
import com.unciv.logic.city.City
|
||||||
import com.unciv.logic.civilization.Civilization
|
import com.unciv.logic.civilization.Civilization
|
||||||
|
import com.unciv.logic.civilization.Notification
|
||||||
import com.unciv.logic.civilization.NotificationCategory
|
import com.unciv.logic.civilization.NotificationCategory
|
||||||
import com.unciv.logic.civilization.NotificationIcon
|
import com.unciv.logic.civilization.NotificationIcon
|
||||||
import com.unciv.logic.civilization.PlayerType
|
import com.unciv.logic.civilization.PlayerType
|
||||||
@ -18,6 +19,7 @@ import com.unciv.models.ruleset.unique.UniqueTarget
|
|||||||
import com.unciv.models.ruleset.unique.UniqueTriggerActivation
|
import com.unciv.models.ruleset.unique.UniqueTriggerActivation
|
||||||
import com.unciv.models.ruleset.unique.UniqueType
|
import com.unciv.models.ruleset.unique.UniqueType
|
||||||
import com.unciv.models.ruleset.unit.BaseUnit
|
import com.unciv.models.ruleset.unit.BaseUnit
|
||||||
|
import com.unciv.models.stats.Stats
|
||||||
import com.unciv.utils.DebugUtils
|
import com.unciv.utils.DebugUtils
|
||||||
|
|
||||||
/** CivInfo class was getting too crowded */
|
/** CivInfo class was getting too crowded */
|
||||||
@ -215,23 +217,72 @@ class CivInfoTransientCache(val civInfo: Civilization) {
|
|||||||
civInfo.addNotification("We have discovered [${tile.naturalWonder}]!",
|
civInfo.addNotification("We have discovered [${tile.naturalWonder}]!",
|
||||||
tile.position, NotificationCategory.General, "StatIcons/Happiness")
|
tile.position, NotificationCategory.General, "StatIcons/Happiness")
|
||||||
|
|
||||||
var goldGained = 0
|
val statsGained = Stats()
|
||||||
|
|
||||||
val discoveredNaturalWonders = civInfo.gameInfo.civilizations.filter { it != civInfo && it.isMajorCiv() }
|
val discoveredNaturalWonders = civInfo.gameInfo.civilizations.filter { it != civInfo && it.isMajorCiv() }
|
||||||
.flatMap { it.naturalWonders }
|
.flatMap { it.naturalWonders }
|
||||||
if (tile.terrainHasUnique(UniqueType.GrantsGoldToFirstToDiscover)
|
if (tile.terrainHasUnique(UniqueType.GrantsStatsToFirstToDiscover)
|
||||||
&& !discoveredNaturalWonders.contains(tile.naturalWonder!!)) {
|
&& !discoveredNaturalWonders.contains(tile.naturalWonder!!)) {
|
||||||
goldGained += 500
|
|
||||||
|
for (unique in tile.getTerrainMatchingUniques(UniqueType.GrantsStatsToFirstToDiscover)) {
|
||||||
|
statsGained.add(unique.stats)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (civInfo.hasUnique(UniqueType.GoldWhenDiscoveringNaturalWonder)) {
|
for (unique in civInfo.getMatchingUniques(UniqueType.StatBonusWhenDiscoveringNaturalWonder)) {
|
||||||
goldGained += if (discoveredNaturalWonders.contains(tile.naturalWonder!!)) 100 else 500
|
|
||||||
|
val normalBonus = Stats.parse(unique.params[0])
|
||||||
|
val firstDiscoveredBonus = Stats.parse(unique.params[1])
|
||||||
|
|
||||||
|
if (discoveredNaturalWonders.contains(tile.naturalWonder!!))
|
||||||
|
statsGained.add(normalBonus)
|
||||||
|
else
|
||||||
|
statsGained.add(firstDiscoveredBonus)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Variable for support of twooo deprecated uniques
|
||||||
|
var goldGained = 0
|
||||||
|
|
||||||
|
// Support for depreciated GoldWhenDiscoveringNaturalWonder unique
|
||||||
|
for (unique in civInfo.getMatchingUniques(UniqueType.GoldWhenDiscoveringNaturalWonder)) {
|
||||||
|
|
||||||
|
goldGained += if (discoveredNaturalWonders.contains(tile.naturalWonder!!)) {
|
||||||
|
100
|
||||||
|
} else {
|
||||||
|
500
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Support for depreciated GrantsGoldToFirstToDiscover unique
|
||||||
|
if (tile.terrainHasUnique(UniqueType.GrantsGoldToFirstToDiscover)
|
||||||
|
&& !discoveredNaturalWonders.contains(tile.naturalWonder!!)) {
|
||||||
|
|
||||||
|
for (unique in tile.getTerrainMatchingUniques(UniqueType.GoldWhenDiscoveringNaturalWonder)) {
|
||||||
|
goldGained += 500
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var naturalWonder: String? = null
|
||||||
|
|
||||||
|
if (!statsGained.isEmpty()) {
|
||||||
|
naturalWonder = tile.naturalWonder!!
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!statsGained.isEmpty() && naturalWonder != null) {
|
||||||
|
civInfo.addStats(statsGained)
|
||||||
|
civInfo.addNotification("We have received [${statsGained}] for discovering [${naturalWonder}]",
|
||||||
|
Notification.NotificationCategory.General, statsGained.toString()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (goldGained > 0) {
|
if (goldGained > 0) {
|
||||||
|
naturalWonder = tile.naturalWonder
|
||||||
|
}
|
||||||
|
|
||||||
|
if (goldGained > 0 && naturalWonder != null) {
|
||||||
civInfo.addGold(goldGained)
|
civInfo.addGold(goldGained)
|
||||||
civInfo.addNotification("We have received [$goldGained] Gold for discovering [${tile.naturalWonder}]",
|
civInfo.addNotification("We have received [$goldGained] Gold for discovering [${naturalWonder}]",
|
||||||
NotificationCategory.General, NotificationIcon.Gold
|
Notification.NotificationCategory.General, NotificationIcon.Gold)
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponDiscoveringNaturalWonder,
|
for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponDiscoveringNaturalWonder,
|
||||||
|
@ -150,8 +150,9 @@ enum class UniqueType(
|
|||||||
|
|
||||||
/// Natural Wonders
|
/// Natural Wonders
|
||||||
StatsFromNaturalWonders("[stats] for every known Natural Wonder", UniqueTarget.Global),
|
StatsFromNaturalWonders("[stats] for every known Natural Wonder", UniqueTarget.Global),
|
||||||
// TODO: moddability of the numbers
|
@Deprecated("as of 4.10.17", ReplaceWith("[+100 Gold] for discovering a Natural Wonder (bonus enhanced to [+500 Gold] if first to discover it)"))
|
||||||
GoldWhenDiscoveringNaturalWonder("100 Gold for discovering a Natural Wonder (bonus enhanced to 500 Gold if first to discover it)", UniqueTarget.Global),
|
GoldWhenDiscoveringNaturalWonder("100 Gold for discovering a Natural Wonder (bonus enhanced to 500 Gold if first to discover it)", UniqueTarget.Global),
|
||||||
|
StatBonusWhenDiscoveringNaturalWonder("[stats] for discovering a Natural Wonder (bonus enhanced to [stats] if first to discover it)", UniqueTarget.Global),
|
||||||
|
|
||||||
/// Great Persons
|
/// Great Persons
|
||||||
GreatPersonPointPercentage("[relativeAmount]% Great Person generation [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief),
|
GreatPersonPointPercentage("[relativeAmount]% Great Person generation [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief),
|
||||||
@ -532,7 +533,9 @@ enum class UniqueType(
|
|||||||
NaturalWonderConvertNeighbors("Neighboring tiles will convert to [baseTerrain]", UniqueTarget.Terrain, flags = UniqueFlag.setOfHiddenToUsers),
|
NaturalWonderConvertNeighbors("Neighboring tiles will convert to [baseTerrain]", UniqueTarget.Terrain, flags = UniqueFlag.setOfHiddenToUsers),
|
||||||
// The "Except [terrainFilter]" could theoretically be implemented with a conditional
|
// The "Except [terrainFilter]" could theoretically be implemented with a conditional
|
||||||
NaturalWonderConvertNeighborsExcept("Neighboring tiles except [baseTerrain] will convert to [baseTerrain]", UniqueTarget.Terrain, flags = UniqueFlag.setOfHiddenToUsers),
|
NaturalWonderConvertNeighborsExcept("Neighboring tiles except [baseTerrain] will convert to [baseTerrain]", UniqueTarget.Terrain, flags = UniqueFlag.setOfHiddenToUsers),
|
||||||
|
@Deprecated("As of 4.10.17", ReplaceWith("Grants [+500 Gold] to the first civilization to discover it"))
|
||||||
GrantsGoldToFirstToDiscover("Grants 500 Gold to the first civilization to discover it", UniqueTarget.Terrain),
|
GrantsGoldToFirstToDiscover("Grants 500 Gold to the first civilization to discover it", UniqueTarget.Terrain),
|
||||||
|
GrantsStatsToFirstToDiscover("Grants [stats] to the first civilization to discover it", UniqueTarget.Terrain),
|
||||||
|
|
||||||
// General terrain
|
// General terrain
|
||||||
DamagesContainingUnits("Units ending their turn on this terrain take [amount] damage", UniqueTarget.Terrain),
|
DamagesContainingUnits("Units ending their turn on this terrain take [amount] damage", UniqueTarget.Terrain),
|
||||||
|
@ -550,7 +550,9 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl
|
|||||||
|
|
||||||
Applicable to: Global
|
Applicable to: Global
|
||||||
|
|
||||||
??? example "100 Gold for discovering a Natural Wonder (bonus enhanced to 500 Gold if first to discover it)"
|
??? example "[stats] for discovering a Natural Wonder (bonus enhanced to [stats] if first to discover it)"
|
||||||
|
Example: "[+1 Gold, +2 Production] for discovering a Natural Wonder (bonus enhanced to [+1 Gold, +2 Production] if first to discover it)"
|
||||||
|
|
||||||
Applicable to: Global
|
Applicable to: Global
|
||||||
|
|
||||||
??? example "[relativeAmount]% Great Person generation [cityFilter]"
|
??? example "[relativeAmount]% Great Person generation [cityFilter]"
|
||||||
@ -1550,7 +1552,9 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl
|
|||||||
|
|
||||||
Applicable to: Terrain
|
Applicable to: Terrain
|
||||||
|
|
||||||
??? example "Grants 500 Gold to the first civilization to discover it"
|
??? example "Grants [stats] to the first civilization to discover it"
|
||||||
|
Example: "Grants [+1 Gold, +2 Production] to the first civilization to discover it"
|
||||||
|
|
||||||
Applicable to: Terrain
|
Applicable to: Terrain
|
||||||
|
|
||||||
??? example "Units ending their turn on this terrain take [amount] damage"
|
??? example "Units ending their turn on this terrain take [amount] damage"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user