mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-09 23:39:40 +07:00
Apollo Program is now a NATIONAL wonder, so multiple civs can compete for Science Victory
This commit is contained in:
@ -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"
|
||||
},
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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!!))
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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>()
|
||||
|
Reference in New Issue
Block a user