Apollo Program is now a NATIONAL wonder, so multiple civs can compete for Science Victory

This commit is contained in:
Yair Morgenstern
2019-06-13 22:10:52 +03:00
parent d49b33f0c7
commit 5943d1e12e
9 changed files with 31 additions and 21 deletions

View File

@ -2,7 +2,7 @@
// Ancient Era
{
name:"Palace",
isWonder:true,
isNationalWonder:true,
production:3,
science:3,
gold:3,
@ -159,7 +159,7 @@
name:"Circus Maximus",
happiness:5,
culture:1,
isWonder:true,
isNationalWonder:true,
requiredBuildingInAllCities:"Colosseum",
requiredTech:"Horseback Riding"
},
@ -292,7 +292,7 @@
name:"National College",
science:3,
culture:1,
isWonder:true,
isNationalWonder:true,
percentStatBonus:{science:50},
requiredBuildingInAllCities:"Library",
requiredTech:"Civil Service"
@ -367,7 +367,7 @@
science:3,
culture:1,
freeTechs:1,
isWonder:true,
isNationalWonder:true,
percentStatBonus:{science:50},
requiredBuildingInAllCities:"University",
requiredTech:"Education"
@ -555,7 +555,7 @@
name:"Hermitage",
percentStatBonus:{culture:50},
culture:5,
isWonder:true,
isNationalWonder:true,
requiredBuildingInAllCities:"Opera House",
requiredTech:"Archaeology"
},
@ -794,7 +794,7 @@
{
name:"Apollo Program",
cost:1500,
isWonder:true,
isNationalWonder:true,
uniques:["Enables construction of Spaceship parts"],
requiredTech:"Rocketry"
},

View File

@ -1090,6 +1090,8 @@
Japanese:"ワンダー"
}
"National Wonder":{}
"Wonders enabled":{
Italian:"Meraviglie sbloccate"
Russian:"Активные чудеса"
@ -1561,6 +1563,8 @@
Simplified_Chinese:"奇观"
Portuguese:"Maravilhas"
}
"National Wonders":{}
"Specialist Buildings":{
Italian:"Edifici specialisti"

View File

@ -87,8 +87,8 @@ class Automation {
cityConstructions.run {
if (getCurrentConstruction() !is SpecialConstruction) return // don't want to be stuck on these forever
val buildableNotWonders = getBuildableBuildings().filterNot { it.isWonder }
val buildableWonders = getBuildableBuildings().filter { it.isWonder }
val buildableNotWonders = getBuildableBuildings().filterNot { it.isWonder || it.isNationalWonder }
val buildableWonders = getBuildableBuildings().filter { it.isWonder || it.isNationalWonder }
val civUnits = cityInfo.civInfo.getCivUnits()
val militaryUnits = civUnits.filter { !it.type.isCivilian()}.size

View File

@ -182,7 +182,7 @@ class CityConstructions {
construction.postBuildEvent(this)
inProgressConstructions.remove(currentConstruction)
if (construction is Building && construction.isWonder && construction.requiredBuildingInAllCities == null) {
if (construction is Building && construction.requiredBuildingInAllCities == null) {
for (civ in cityInfo.civInfo.gameInfo.civilizations) {
if (civ.exploredTiles.contains(cityInfo.location))
civ.addNotification("[$currentConstruction] has been built in [${cityInfo.name}]", cityInfo.location, Color.BROWN)

View File

@ -24,6 +24,7 @@ class Building : NamedStats(), IConstruction{
/** Extra cost percentage when purchasing */
var hurryCostModifier: Int = 0
var isWonder = false
var isNationalWonder = false
var requiredBuilding: String? = null
var requiredBuildingInAllCities: String? = null
/** A strategic resource that will be consumed by this building */
@ -78,6 +79,7 @@ class Building : NamedStats(), IConstruction{
if(uniqueTo!=null) stringBuilder.appendln("Unique to [$uniqueTo], replaces [$replaces]".tr())
if (!forBuildingPickerScreen) stringBuilder.appendln("{Cost}: $cost".tr())
if (isWonder) stringBuilder.appendln("Wonder".tr())
if(isNationalWonder) stringBuilder.appendln("National Wonder".tr())
if (!forBuildingPickerScreen && requiredTech != null)
stringBuilder.appendln("Required tech: [$requiredTech]".tr())
if (!forBuildingPickerScreen && requiredBuilding != null)
@ -165,7 +167,7 @@ class Building : NamedStats(), IConstruction{
}
override fun canBePurchased(): Boolean {
return !isWonder
return !isWonder && !isNationalWonder
}
override fun getProductionCost(adoptedPolicies: HashSet<String>): Int {
@ -219,7 +221,7 @@ class Building : NamedStats(), IConstruction{
if (requiredTech != null && !civInfo.tech.isResearched(requiredTech!!)) return "$requiredTech not researched"
// Regular wonders
if (isWonder && requiredBuildingInAllCities==null){
if (isWonder){
if(civInfo.gameInfo.civilizations.flatMap { it.cities }
.any {it.cityConstructions.isBuilt(name)})
return "Wonder is already built"
@ -233,16 +235,15 @@ class Building : NamedStats(), IConstruction{
// National wonders
if(requiredBuildingInAllCities!=null) {
if(isNationalWonder) {
if (civInfo.cities.any {it.cityConstructions.isBuilt(name) })
return "Wonder is already built"
return "National Wonder is already built"
if (civInfo.cities.any { !it.cityConstructions.containsBuildingOrEquivalent(requiredBuildingInAllCities!!) })
return "Requires a [$requiredBuildingInAllCities] in all cities"
if (civInfo.cities.any {it!=construction.cityInfo && it.cityConstructions.isBeingConstructed(name) })
return "Wonder is being built elsewhere"
return "National Wonder is being built elsewhere"
if(civInfo.isCityState())
return "No world wonders for city-states"
return "No national wonders for city-states"
}
if (requiredBuilding != null && !construction.containsBuildingOrEquivalent(requiredBuilding!!))

View File

@ -60,7 +60,7 @@ object GameBasics {
if (building.requiredTech == null) continue
val column = building.getRequiredTech().column
if (building.cost == 0)
building.cost = if (building.isWonder) column!!.wonderCost else column!!.buildingCost
building.cost = if (building.isWonder || building.isNationalWonder) column!!.wonderCost else column!!.buildingCost
}
for (branch in PolicyBranches.values) {

View File

@ -39,13 +39,13 @@ class Technology : ICivilopedia {
}
val replacedBuildings = enabledBuildings.mapNotNull { it.replaces }
enabledBuildings = enabledBuildings.filter { it.name !in replacedBuildings }
val regularBuildings = enabledBuildings.filter { !it.isWonder }
val regularBuildings = enabledBuildings.filter { !it.isWonder && !it.isNationalWonder }
if (regularBuildings.isNotEmpty()) {
lineList += "{Buildings enabled}: "
for (building in regularBuildings)
lineList += "* " + building.name.tr() + " (" + building.getShortDescription() + ")"
}
val wonders = enabledBuildings.filter { it.isWonder }
val wonders = enabledBuildings.filter { it.isWonder || it.isNationalWonder }
if (wonders.isNotEmpty()) {
lineList += "{Wonders enabled}: "
for (wonder in wonders)

View File

@ -63,7 +63,7 @@ class CityInfoTable(private val cityScreen: CityScreen) : Table(CameraStageBaseS
cityScreen.city.civInfo)
wonderDetailsTable.add(detailsString.toLabel().apply { setWrap(true)})
.width(cityScreen.stage.width/4 - 2*pad ).row() // when you set wrap, then you need to manually set the size of the label
if(!building.isWonder) {
if(!building.isWonder && !building.isNationalWonder) {
val sellAmount = cityScreen.city.getGoldForSellingBuilding(building.name)
val sellBuildingButton = TextButton("Sell for [$sellAmount] gold".tr(),skin)
wonderDetailsTable.add(sellBuildingButton).pad(5f).row()
@ -90,7 +90,7 @@ class CityInfoTable(private val cityScreen: CityScreen) : Table(CameraStageBaseS
for (building in cityInfo.cityConstructions.getBuiltBuildings()) {
when {
building.isWonder -> wonders.add(building)
building.isWonder || building.isNationalWonder -> wonders.add(building)
building.specialistSlots != null -> specialistBuildings.add(building)
else -> otherBuildings.add(building)
}

View File

@ -97,7 +97,9 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre
constructionPickerTable.addCategory("Units",units)
val buildableWonders = ArrayList<Table>()
val buildableNationalWonders = ArrayList<Table>()
val buildableBuildings = ArrayList<Table>()
for (building in GameBasics.Buildings.values) {
if (!building.shouldBeDisplayed(cityConstructions) && building.name != cityConstructions.currentConstruction) continue
val productionTextButton = getProductionButton(building.name,
@ -106,11 +108,14 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre
)
if (building.isWonder)
buildableWonders += productionTextButton
else if(building.isNationalWonder)
buildableNationalWonders += productionTextButton
else
buildableBuildings += productionTextButton
}
constructionPickerTable.addCategory("Wonders",buildableWonders)
constructionPickerTable.addCategory("National Wonders",buildableNationalWonders)
constructionPickerTable.addCategory("Buildings",buildableBuildings)
val specialConstructions = ArrayList<Table>()