All policies converted!

This commit is contained in:
Yair Morgenstern 2020-07-31 19:09:56 +03:00
parent 28f51a2050
commit fbf4312973
12 changed files with 63 additions and 66 deletions

View File

@ -346,7 +346,7 @@
{ {
"name": "Rationalism Complete", "name": "Rationalism Complete",
"effect": "+1 gold from all science buildings", "effect": "+1 gold from all science buildings",
"unique": ["[+1 Gold] from all [Science] buildings"] "uniques": ["[+1 Gold] from all [Science] buildings"]
} }
] ]
}, },
@ -397,7 +397,7 @@
"name": "Freedom", "name": "Freedom",
"era": "Renaissance era", "era": "Renaissance era",
"effect": "+25% great people rate", "effect": "+25% great people rate",
"unique": "+[25]% great person generation in all cities", "uniques": ["+[25]% great person generation in all cities"],
"policies": [ "policies": [
{ {
"name": "Constitution", "name": "Constitution",
@ -416,6 +416,7 @@
{ {
"name": "Civil Society", "name": "Civil Society",
"effect": "-50% food consumption by specialists", "effect": "-50% food consumption by specialists",
"uniques": ["-50% food consumption by specialists"],
"row": 1, "row": 1,
"column": 5 "column": 5
}, },
@ -430,13 +431,15 @@
{ {
"name": "Democracy", "name": "Democracy",
"effect": "Specialists produce half normal unhappiness", "effect": "Specialists produce half normal unhappiness",
"uniques": ["Specialists produce half normal unhappiness"],
"requires": ["Civil Society"], "requires": ["Civil Society"],
"row": 2, "row": 2,
"column": 5 "column": 5
}, },
{ {
"name": "Freedom Complete", "name": "Freedom Complete",
"effect": "Tile yield from great improvement +100%, golden ages increase by 50%" "effect": "Tile yield from great improvement +100%, golden ages increase by 50%",
"uniques": ["Tile yield from Great Improvements +100%", "Golden Age length increases +50%"]
} }
] ]
}, },
@ -444,22 +447,26 @@
"name": "Autocracy", "name": "Autocracy",
"era": "Industrial era", "era": "Industrial era",
"effect": "-33% unit upkeep costs", "effect": "-33% unit upkeep costs",
"uniques": ["-33% unit upkeep costs"],
"policies": [ "policies": [
{ {
"name": "Populism", "name": "Populism",
"effect": "Wounded military units deal +25% damage", "effect": "Wounded military units deal +25% damage",
"uniques": ["Wounded military units deal +25% damage"],
"row": 1, "row": 1,
"column": 1 "column": 1
}, },
{ {
"name": "Militarism", "name": "Militarism",
"effect": "Gold cost of purchasing units -33%", "effect": "Gold cost of purchasing units -33%",
"uniques": ["Gold cost of purchasing units -33%"],
"row": 1, "row": 1,
"column": 5 "column": 5
}, },
{ {
"name": "Fascism", "name": "Fascism",
"effect": "Quantity of strategic resources produced by the empire increased by 100%", "effect": "Quantity of strategic resources produced by the empire increased by 100%",
"uniques": ["Quantity of strategic resources produced by the empire increased by 100%"],
"requires": ["Populism","Militarism"], "requires": ["Populism","Militarism"],
"row": 2, "row": 2,
"column": 3 "column": 3
@ -467,6 +474,7 @@
{ {
"name": "Police State", "name": "Police State",
"effect": "+3 Happiness from every Courthouse. Build Courthouses in half the usual time.", "effect": "+3 Happiness from every Courthouse. Build Courthouses in half the usual time.",
"uniques": ["[+3 Happiness] from every [Courthouse]", "+[100]% Production when constructing [Courthouse]"],
"requires": ["Militarism"], "requires": ["Militarism"],
"row": 2, "row": 2,
"column": 5 "column": 5
@ -474,6 +482,7 @@
{ {
"name": "Total War", "name": "Total War",
"effect": "+15% production when building military units and new military units start with 15 Experience", "effect": "+15% production when building military units and new military units start with 15 Experience",
"uniques": ["+[15]% Production when constructing [military units]", "New military units start with [15] Experience"],
"requires": ["Police State","Fascism"], "requires": ["Police State","Fascism"],
"row": 3, "row": 3,
"column": 4 "column": 4
@ -481,6 +490,7 @@
{ {
"name": "Autocracy Complete", "name": "Autocracy Complete",
"effect": "+20% attack bonus to all Military Units for 30 turns" "effect": "+20% attack bonus to all Military Units for 30 turns"
"uniques": ["+20% attack bonus to all Military Units for 30 turns"]
} }
] ]
} }

View File

@ -67,8 +67,8 @@ object BattleDamage {
if (civHappiness < 0) if (civHappiness < 0)
modifiers["Unhappiness"] = max(0.02f * civHappiness, -0.9f) // otherwise it could exceed -100% and start healing enemy units... modifiers["Unhappiness"] = max(0.02f * civHappiness, -0.9f) // otherwise it could exceed -100% and start healing enemy units...
if (civInfo.policies.hasEffect("Wounded military units deal +25% damage") && combatant.getHealth() < 100) { if (civInfo.hasUnique("Wounded military units deal +25% damage") && combatant.getHealth() < 100) {
modifiers["Populism"] = 0.25f modifiers["Wounded unit"] = 0.25f
} }
if (civInfo.hasUnique("+15% combat strength for melee units which have another military unit in an adjacent tile") if (civInfo.hasUnique("+15% combat strength for melee units which have another military unit in an adjacent tile")
@ -103,7 +103,7 @@ object BattleDamage {
if (enemy.getCivInfo().isBarbarian()) { if (enemy.getCivInfo().isBarbarian()) {
modifiers["Difficulty"] = civInfo.gameInfo.getDifficulty().barbarianBonus modifiers["Difficulty"] = civInfo.gameInfo.getDifficulty().barbarianBonus
if (civInfo.policies.hasEffect("+25% bonus vs Barbarians")) if (civInfo.hasUnique("+25% bonus vs Barbarians"))
modifiers["vs Barbarians"] = 0.25f modifiers["vs Barbarians"] = 0.25f
} }

View File

@ -76,7 +76,7 @@ class CityConstructions {
fun getMaintenanceCosts(): Int { fun getMaintenanceCosts(): Int {
var maintenanceCost = getBuiltBuildings().sumBy { it.maintenance } var maintenanceCost = getBuiltBuildings().sumBy { it.maintenance }
val policyManager = cityInfo.civInfo.policies val policyManager = cityInfo.civInfo.policies
if (policyManager.isAdopted("Legalism") && cityInfo.id in policyManager.legalismState) { if (cityInfo.id in policyManager.legalismState) {
val buildingName = policyManager.legalismState[cityInfo.id] val buildingName = policyManager.legalismState[cityInfo.id]
maintenanceCost -= cityInfo.getRuleset().buildings[buildingName]!!.maintenance maintenanceCost -= cityInfo.getRuleset().buildings[buildingName]!!.maintenance
} }

View File

@ -197,7 +197,7 @@ class CityInfo {
var amountToAdd = 1 var amountToAdd = 1
if(resource.resourceType == ResourceType.Strategic) { if(resource.resourceType == ResourceType.Strategic) {
amountToAdd = 2 amountToAdd = 2
if (civInfo.policies.hasEffect("Quantity of strategic resources produced by the empire increased by 100%")) if (civInfo.hasUnique("Quantity of strategic resources produced by the empire increased by 100%"))
amountToAdd *= 2 amountToAdd *= 2
if (civInfo.nation.unique == UniqueAbility.SIBERIAN_RICHES && resource.name in listOf("Horses", "Iron", "Uranium")) if (civInfo.nation.unique == UniqueAbility.SIBERIAN_RICHES && resource.name in listOf("Horses", "Iron", "Uranium"))
amountToAdd *= 2 amountToAdd *= 2

View File

@ -4,8 +4,6 @@ import com.unciv.Constants
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.UniqueAbility import com.unciv.UniqueAbility
import com.unciv.logic.civilization.CityStateType import com.unciv.logic.civilization.CityStateType
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.civilization.PolicyManager
import com.unciv.logic.civilization.diplomacy.RelationshipLevel import com.unciv.logic.civilization.diplomacy.RelationshipLevel
import com.unciv.logic.map.RoadStatus import com.unciv.logic.map.RoadStatus
import com.unciv.models.ruleset.Building import com.unciv.models.ruleset.Building
@ -195,7 +193,7 @@ class CityStats {
newHappinessList["Cities"] = unhappinessFromCity * unhappinessModifier newHappinessList["Cities"] = unhappinessFromCity * unhappinessModifier
var unhappinessFromCitizens = cityInfo.population.population.toFloat() var unhappinessFromCitizens = cityInfo.population.population.toFloat()
if (civInfo.policies.hasEffect("Specialists produce half normal unhappiness")) if (civInfo.hasUnique("Specialists produce half normal unhappiness"))
unhappinessFromCitizens -= cityInfo.population.getNumberOfSpecialists() * 0.5f unhappinessFromCitizens -= cityInfo.population.getNumberOfSpecialists() * 0.5f
if (cityInfo.isPuppet) if (cityInfo.isPuppet)
@ -249,7 +247,7 @@ class CityStats {
return !cityInfo.containsBuildingUnique("Remove extra unhappiness from annexed cities") return !cityInfo.containsBuildingUnique("Remove extra unhappiness from annexed cities")
} }
fun getStatsOfSpecialist(stat: Stat, policies: HashSet<String>): Stats { fun getStatsOfSpecialist(stat: Stat): Stats {
val stats = Stats() val stats = Stats()
if (stat == Stat.Culture || stat == Stat.Science) stats.add(stat, 3f) if (stat == Stat.Culture || stat == Stat.Science) stats.add(stat, 3f)
else stats.add(stat, 2f) // science and gold specialists else stats.add(stat, 2f) // science and gold specialists
@ -266,14 +264,14 @@ class CityStats {
private fun getStatsFromSpecialists(specialists: Stats, policies: HashSet<String>): Stats { private fun getStatsFromSpecialists(specialists: Stats, policies: HashSet<String>): Stats {
val stats = Stats() val stats = Stats()
for (entry in specialists.toHashMap().filter { it.value > 0 }) for (entry in specialists.toHashMap().filter { it.value > 0 })
stats.add(getStatsOfSpecialist(entry.key, policies) * entry.value) stats.add(getStatsOfSpecialist(entry.key) * entry.value)
return stats return stats
} }
private fun getStatsFromUniques(uniques: Sequence<String>):Stats{ private fun getStatsFromUniques(uniques: Sequence<String>):Stats {
val stats = Stats() val stats = Stats()
for(unique in uniques) { for (unique in uniques) {
val placeholderText = unique.getPlaceholderText() val placeholderText = unique.getPlaceholderText()
if ((placeholderText == "[] in capital" && cityInfo.isCapital()) if ((placeholderText == "[] in capital" && cityInfo.isCapital())
|| placeholderText == "[] in all cities" || placeholderText == "[] in all cities"
@ -284,24 +282,14 @@ class CityStats {
val amountOfEffects = (cityInfo.population.population / placeholderParams[1].toInt()).toFloat() val amountOfEffects = (cityInfo.population.population / placeholderParams[1].toInt()).toFloat()
stats.add(Stats.parse(placeholderParams[0]).times(amountOfEffects)) stats.add(Stats.parse(placeholderParams[0]).times(amountOfEffects))
} }
if (unique == "+1 gold and -1 unhappiness for every 2 citizens in capital" && cityInfo.isCapital())
stats.gold += (cityInfo.population.population / 2).toFloat()
} }
return stats
}
private fun getStatsFromPolicies(adoptedPolicies: PolicyManager): Stats {
val stats = Stats()
stats.add(getStatsFromUniques(adoptedPolicies.policyEffects.asSequence()))
if (adoptedPolicies.hasEffect("+1 gold and -1 unhappiness for every 2 citizens in capital") && cityInfo.isCapital())
stats.gold += (cityInfo.population.population / 2).toFloat()
if (adoptedPolicies.hasEffect("+1 production in every city, +5% production when constructing buildings"))
stats.production += 1f
if (adoptedPolicies.hasEffect("+1 culture for every 2 citizens"))
stats.culture += (cityInfo.population.population / 2).toFloat()
return stats return stats
} }
private fun getStatPercentBonusesFromGoldenAge(isGoldenAge: Boolean): Stats { private fun getStatPercentBonusesFromGoldenAge(isGoldenAge: Boolean): Stats {
val stats = Stats() val stats = Stats()
if (isGoldenAge) { if (isGoldenAge) {
@ -363,9 +351,13 @@ class CityStats {
stats.production += placeholderParams[0].toInt() stats.production += placeholderParams[0].toInt()
} }
if (currentConstruction is Building && currentConstruction.name == "Courthouse" for(unique in cityInfo.civInfo.getMatchingUniques("+[]% Production when constructing []")) {
&& cityInfo.civInfo.policies.hasEffect("+3 Happiness from every Courthouse. Build Courthouses in half the usual time.")) val placeholderParams = unique.getPlaceholderParameters()
stats.production += 100 val filter = placeholderParams[1]
if (currentConstruction.name == filter
|| (filter=="military units" && currentConstruction is BaseUnit && !currentConstruction.unitType.isCivilian()))
stats.production += placeholderParams[0].toInt()
}
if (cityConstructions.getBuiltBuildings().any { it.isWonder } if (cityConstructions.getBuiltBuildings().any { it.isWonder }
&& cityInfo.civInfo.hasUnique("+33% culture in all cities with a world wonder")) && cityInfo.civInfo.hasUnique("+33% culture in all cities with a world wonder"))
@ -374,8 +366,6 @@ class CityStats {
stats.gold += 25f stats.gold += 25f
if (cityInfo.civInfo.getHappiness() >= 0 && cityInfo.civInfo.hasUnique("+15% science while empire is happy")) if (cityInfo.civInfo.getHappiness() >= 0 && cityInfo.civInfo.hasUnique("+15% science while empire is happy"))
stats.science += 15f stats.science += 15f
if (policies.contains("Total War") && currentConstruction is BaseUnit && !currentConstruction.unitType.isCivilian())
stats.production += 15f
if (cityInfo.civInfo.hasUnique("+15% production when constructing wonders") if (cityInfo.civInfo.hasUnique("+15% production when constructing wonders")
&& currentConstruction is Building && currentConstruction is Building
&& currentConstruction.isWonder) && currentConstruction.isWonder)
@ -405,7 +395,7 @@ class CityStats {
newBaseStatList["Specialists"] = getStatsFromSpecialists(cityInfo.population.specialists, civInfo.policies.adoptedPolicies) newBaseStatList["Specialists"] = getStatsFromSpecialists(cityInfo.population.specialists, civInfo.policies.adoptedPolicies)
newBaseStatList["Trade routes"] = getStatsFromTradeRoute() newBaseStatList["Trade routes"] = getStatsFromTradeRoute()
newBaseStatList["Buildings"] = cityInfo.cityConstructions.getStats() newBaseStatList["Buildings"] = cityInfo.cityConstructions.getStats()
newBaseStatList["Policies"] = getStatsFromPolicies(civInfo.policies) newBaseStatList["Policies"] = getStatsFromUniques(civInfo.policies.policyEffects.asSequence())
newBaseStatList["National ability"] = getStatsFromNationUnique() newBaseStatList["National ability"] = getStatsFromNationUnique()
newBaseStatList["Wonders"] = getStatsFromUniques(civInfo.cities.asSequence().flatMap { it.getBuildingUniques() }) newBaseStatList["Wonders"] = getStatsFromUniques(civInfo.cities.asSequence().flatMap { it.getBuildingUniques() })
newBaseStatList["City-States"] = getStatsFromCityStates() newBaseStatList["City-States"] = getStatsFromCityStates()
@ -414,24 +404,24 @@ class CityStats {
} }
fun updateStatPercentBonusList(){ fun updateStatPercentBonusList() {
val newStatPercentBonusList = LinkedHashMap<String,Stats>() val newStatPercentBonusList = LinkedHashMap<String, Stats>()
newStatPercentBonusList["Golden Age"]=getStatPercentBonusesFromGoldenAge(cityInfo.civInfo.goldenAges.isGoldenAge()) newStatPercentBonusList["Golden Age"] = getStatPercentBonusesFromGoldenAge(cityInfo.civInfo.goldenAges.isGoldenAge())
newStatPercentBonusList["Policies"]=getStatPercentBonusesFromPolicies(cityInfo.civInfo.policies.adoptedPolicies, cityInfo.cityConstructions) newStatPercentBonusList["Policies"] = getStatPercentBonusesFromPolicies(cityInfo.civInfo.policies.adoptedPolicies, cityInfo.cityConstructions)
newStatPercentBonusList["Buildings"]=getStatPercentBonusesFromBuildings() newStatPercentBonusList["Buildings"] = getStatPercentBonusesFromBuildings()
newStatPercentBonusList["Railroad"]=getStatPercentBonusesFromRailroad() newStatPercentBonusList["Railroad"] = getStatPercentBonusesFromRailroad()
newStatPercentBonusList["Marble"]=getStatPercentBonusesFromMarble() newStatPercentBonusList["Marble"] = getStatPercentBonusesFromMarble()
newStatPercentBonusList["Computers"]=getStatPercentBonusesFromComputers() newStatPercentBonusList["Computers"] = getStatPercentBonusesFromComputers()
newStatPercentBonusList["National ability"]=getStatPercentBonusesFromNationUnique() newStatPercentBonusList["National ability"] = getStatPercentBonusesFromNationUnique()
newStatPercentBonusList["Puppet City"]=getStatPercentBonusesFromPuppetCity() newStatPercentBonusList["Puppet City"] = getStatPercentBonusesFromPuppetCity()
if(UncivGame.Current.superchargedForDebug) { if (UncivGame.Current.superchargedForDebug) {
val stats = Stats() val stats = Stats()
for(stat in Stat.values()) stats.add(stat,10000f) for (stat in Stat.values()) stats.add(stat, 10000f)
newStatPercentBonusList["Supercharged"] = stats newStatPercentBonusList["Supercharged"] = stats
} }
statPercentBonusList=newStatPercentBonusList statPercentBonusList = newStatPercentBonusList
} }
fun update() { fun update() {
@ -526,7 +516,7 @@ class CityStats {
private fun updateFoodEaten() { private fun updateFoodEaten() {
foodEaten = (cityInfo.population.population * 2).toFloat() foodEaten = (cityInfo.population.population * 2).toFloat()
if (cityInfo.civInfo.policies.hasEffect("Specialists produce half normal unhappiness")) if (cityInfo.civInfo.hasUnique("-50% food consumption by specialists"))
foodEaten -= cityInfo.population.getNumberOfSpecialists() foodEaten -= cityInfo.population.getNumberOfSpecialists()
} }

View File

@ -7,7 +7,6 @@ import com.unciv.models.stats.Stat
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
import com.unciv.ui.utils.withItem import com.unciv.ui.utils.withItem
import com.unciv.ui.utils.withoutItem import com.unciv.ui.utils.withoutItem
import kotlin.math.roundToInt
class PopulationManager { class PopulationManager {
@Transient @Transient
@ -86,14 +85,13 @@ class PopulationManager {
//evaluate specialists //evaluate specialists
val maxSpecialistsMap = getMaxSpecialists().toHashMap() val maxSpecialistsMap = getMaxSpecialists().toHashMap()
val policies = cityInfo.civInfo.policies.adoptedPolicies
val bestJob: Stat? = specialists.toHashMap() val bestJob: Stat? = specialists.toHashMap()
.filter { maxSpecialistsMap.containsKey(it.key) && it.value < maxSpecialistsMap[it.key]!! } .filter { maxSpecialistsMap.containsKey(it.key) && it.value < maxSpecialistsMap[it.key]!! }
.map { it.key } .map { it.key }
.maxBy { Automation.rankSpecialist(cityInfo.cityStats.getStatsOfSpecialist(it, policies), cityInfo) } .maxBy { Automation.rankSpecialist(cityInfo.cityStats.getStatsOfSpecialist(it), cityInfo) }
var valueBestSpecialist = 0f var valueBestSpecialist = 0f
if (bestJob != null) { if (bestJob != null) {
val specialistStats = cityInfo.cityStats.getStatsOfSpecialist(bestJob, policies) val specialistStats = cityInfo.cityStats.getStatsOfSpecialist(bestJob)
valueBestSpecialist = Automation.rankSpecialist(specialistStats, cityInfo) valueBestSpecialist = Automation.rankSpecialist(specialistStats, cityInfo)
} }
@ -137,10 +135,10 @@ class PopulationManager {
val worstJob: Stat? = specialists.toHashMap() val worstJob: Stat? = specialists.toHashMap()
.filter { it.value > 0 } .filter { it.value > 0 }
.map {it.key} .map {it.key}
.minBy { Automation.rankSpecialist(cityInfo.cityStats.getStatsOfSpecialist(it, policies), cityInfo) } .minBy { Automation.rankSpecialist(cityInfo.cityStats.getStatsOfSpecialist(it), cityInfo) }
var valueWorstSpecialist = 0f var valueWorstSpecialist = 0f
if (worstJob != null) if (worstJob != null)
valueWorstSpecialist = Automation.rankSpecialist(cityInfo.cityStats.getStatsOfSpecialist(worstJob, policies), cityInfo) valueWorstSpecialist = Automation.rankSpecialist(cityInfo.cityStats.getStatsOfSpecialist(worstJob), cityInfo)
//un-assign population //un-assign population
if ((worstWorkedTile != null && valueWorstTile < valueWorstSpecialist) if ((worstWorkedTile != null && valueWorstTile < valueWorstSpecialist)

View File

@ -38,7 +38,7 @@ class CivInfoStats(val civInfo: CivilizationInfo){
cost = cost.pow(1+gameProgress/3) // Why 3? To spread 1 to 1.33 cost = cost.pow(1+gameProgress/3) // Why 3? To spread 1 to 1.33
if(!civInfo.isPlayerCivilization()) if(!civInfo.isPlayerCivilization())
cost *= civInfo.gameInfo.getDifficulty().aiUnitMaintenanceModifier cost *= civInfo.gameInfo.getDifficulty().aiUnitMaintenanceModifier
if(civInfo.policies.hasEffect("-33% unit upkeep costs")) cost *= 0.66f if(civInfo.hasUnique("-33% unit upkeep costs")) cost *= 0.66f
return cost.toInt() return cost.toInt()
} }

View File

@ -27,10 +27,10 @@ class GoldenAgeManager{
fun enterGoldenAge() { fun enterGoldenAge() {
var turnsToGoldenAge = 10.0 var turnsToGoldenAge = 10.0
if (civInfo.hasUnique("Golden Age length increases +50%")) turnsToGoldenAge *= 1.5 for(unique in civInfo.getMatchingUniques("Golden Age length increases +50%"))
turnsToGoldenAge *= 1.5
if(civInfo.nation.unique == UniqueAbility.ACHAEMENID_LEGACY ) if(civInfo.nation.unique == UniqueAbility.ACHAEMENID_LEGACY )
turnsToGoldenAge*=1.5 turnsToGoldenAge*=1.5
if (civInfo.policies.isAdopted("Freedom Complete")) turnsToGoldenAge *= 1.5
turnsToGoldenAge *= civInfo.gameInfo.gameParameters.gameSpeed.modifier turnsToGoldenAge *= civInfo.gameInfo.gameParameters.gameSpeed.modifier
turnsLeftForCurrentGoldenAge += turnsToGoldenAge.toInt() turnsLeftForCurrentGoldenAge += turnsToGoldenAge.toInt()
civInfo.addNotification("You have entered a golden age!", null, Color.GOLD) civInfo.addNotification("You have entered a golden age!", null, Color.GOLD)

View File

@ -43,9 +43,8 @@ class PolicyManager {
fun getPolicyByName(name:String): Policy = getAllPolicies().first { it.name==name } fun getPolicyByName(name:String): Policy = getAllPolicies().first { it.name==name }
fun setTransients(){ fun setTransients(){
val effectsOfCurrentPolicies = adoptedPolicies.map { getPolicyByName(it).effect } for(policy in adoptedPolicies)
policyEffects.addAll(effectsOfCurrentPolicies) policyEffects.addAll(getPolicyByName(policy).uniques)
adoptedPolicies.map { getPolicyByName(it).uniques }.forEach { policyEffects.addAll(it) }
} }
private fun getAllPolicies() = civInfo.gameInfo.ruleSet.policyBranches.values.asSequence() private fun getAllPolicies() = civInfo.gameInfo.ruleSet.policyBranches.values.asSequence()
@ -118,7 +117,6 @@ class PolicyManager {
} }
adoptedPolicies.add(policy.name) adoptedPolicies.add(policy.name)
policyEffects.add(policy.effect)
policyEffects.addAll(policy.uniques) policyEffects.addAll(policy.uniques)
if (!branchCompletion) { if (!branchCompletion) {
@ -130,7 +128,7 @@ class PolicyManager {
val hasCapital = civInfo.cities.any { it.isCapital() } val hasCapital = civInfo.cities.any { it.isCapital() }
for(effect in policy.uniques.withItem(policy.effect)) for(effect in policy.uniques)
when (effect.getPlaceholderText()) { when (effect.getPlaceholderText()) {
"Free [] appears" -> { "Free [] appears" -> {
val unitName = effect.getPlaceholderParameters()[0] val unitName = effect.getPlaceholderParameters()[0]

View File

@ -262,7 +262,7 @@ open class TileInfo {
stats.science += 1f stats.science += 1f
if (containsGreatImprovement() if (containsGreatImprovement()
&& observingCiv.policies.hasEffect("Tile yield from great improvement +100%, golden ages increase by 50%")) && observingCiv.hasUnique("Tile yield from Great Improvements +100%"))
stats.add(improvement) // again, for the double effect stats.add(improvement) // again, for the double effect
if (containsGreatImprovement() && city != null && city.civInfo.nation.unique == UniqueAbility.SCHOLARS_OF_THE_JADE_HALL) if (containsGreatImprovement() && city != null && city.civInfo.nation.unique == UniqueAbility.SCHOLARS_OF_THE_JADE_HALL)
stats.science += 2 stats.science += 2

View File

@ -103,7 +103,7 @@ class BaseUnit : INamed, IConstruction {
override fun getGoldCost(civInfo: CivilizationInfo): Int { override fun getGoldCost(civInfo: CivilizationInfo): Int {
var cost = getBaseGoldCost() var cost = getBaseGoldCost()
if (civInfo.policies.adoptedPolicies.contains("Militarism")) cost *= 0.66f if (civInfo.hasUnique("Gold cost of purchasing units -33%")) cost *= 0.66f
for(unique in civInfo.getMatchingUniques("Cost of purchasing items in cities reduced by []%")) for(unique in civInfo.getMatchingUniques("Cost of purchasing items in cities reduced by []%"))
cost *= 1-(unique.getPlaceholderParameters()[0].toFloat()) cost *= 1-(unique.getPlaceholderParameters()[0].toFloat())
return (cost / 10).toInt() * 10 // rounded down o nearest ten return (cost / 10).toInt() * 10 // rounded down o nearest ten
@ -159,7 +159,8 @@ class BaseUnit : INamed, IConstruction {
if (this.unitType.isCivilian()) return true // tiny optimization makes save files a few bytes smaller if (this.unitType.isCivilian()) return true // tiny optimization makes save files a few bytes smaller
var XP = construction.getBuiltBuildings().sumBy { it.xpForNewUnits } var XP = construction.getBuiltBuildings().sumBy { it.xpForNewUnits }
if (construction.cityInfo.civInfo.policies.isAdopted("Total War")) XP += 15 for (unique in construction.cityInfo.civInfo.getMatchingUniques("New military units start with [] Experience"))
XP += unique.getPlaceholderParameters()[0].toInt()
unit.promotions.XP = XP unit.promotions.XP = XP
if (unit.type in listOf(UnitType.Melee,UnitType.Mounted,UnitType.Armor) if (unit.type in listOf(UnitType.Melee,UnitType.Mounted,UnitType.Armor)

View File

@ -76,7 +76,7 @@ class SpecialistAllocationTable(val cityScreen: CityScreen): Table(CameraStageBa
private fun getSpecialistStatsTable(stat: Stat): Table { private fun getSpecialistStatsTable(stat: Stat): Table {
val specialistStatTable = Table().apply { defaults().pad(5f) } val specialistStatTable = Table().apply { defaults().pad(5f) }
val specialistStats = cityInfo.cityStats.getStatsOfSpecialist(stat, cityInfo.civInfo.policies.adoptedPolicies).toHashMap() val specialistStats = cityInfo.cityStats.getStatsOfSpecialist(stat).toHashMap()
for (entry in specialistStats) { for (entry in specialistStats) {
if (entry.value == 0f) continue if (entry.value == 0f) continue
specialistStatTable.add(ImageGetter.getStatIcon(entry.key.toString())).size(20f) specialistStatTable.add(ImageGetter.getStatIcon(entry.key.toString())).size(20f)