diff --git a/android/ImagesToPackSeparately/BuildingIcons/Cathedral.png b/android/ImagesToPackSeparately/BuildingIcons/Cathedral.png new file mode 100644 index 0000000000000..1245a0a8ae411 Binary files /dev/null and b/android/ImagesToPackSeparately/BuildingIcons/Cathedral.png differ diff --git a/android/ImagesToPackSeparately/BuildingIcons/Mosque.png b/android/ImagesToPackSeparately/BuildingIcons/Mosque.png new file mode 100644 index 0000000000000..53ca65c142637 Binary files /dev/null and b/android/ImagesToPackSeparately/BuildingIcons/Mosque.png differ diff --git a/android/ImagesToPackSeparately/BuildingIcons/Pagoda.png b/android/ImagesToPackSeparately/BuildingIcons/Pagoda.png new file mode 100644 index 0000000000000..0d71367c169df Binary files /dev/null and b/android/ImagesToPackSeparately/BuildingIcons/Pagoda.png differ diff --git a/android/assets/BuildingIcons.atlas b/android/assets/BuildingIcons.atlas index 75223d23ae012..415c50cc66655 100644 --- a/android/assets/BuildingIcons.atlas +++ b/android/assets/BuildingIcons.atlas @@ -123,689 +123,710 @@ Castle orig: 100, 100 offset: 0, 0 index: -1 -Chichen Itza +Cathedral rotate: false xy: 220, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Circus +Chichen Itza rotate: false xy: 328, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Circus Maximus +Circus rotate: false xy: 436, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Colosseum +Circus Maximus rotate: false xy: 544, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Colossus +Colosseum rotate: false xy: 4, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Courthouse +Colossus rotate: false xy: 112, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Cristo Redentor +Courthouse rotate: false xy: 220, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Eiffel Tower +Cristo Redentor rotate: false xy: 328, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Factory +Eiffel Tower rotate: false xy: 436, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Floating Gardens +Factory rotate: false xy: 544, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Forbidden Palace +Floating Gardens rotate: false xy: 652, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Forge +Forbidden Palace rotate: false xy: 4, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Garden +Forge rotate: false xy: 112, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Granary +Garden rotate: false xy: 220, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Great Wall +Granary rotate: false xy: 328, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Hagia Sophia +Great Wall rotate: false xy: 436, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Hanging Gardens +Hagia Sophia rotate: false xy: 544, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Hanse +Hanging Gardens rotate: false xy: 652, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Harbor +Hanse rotate: false xy: 760, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Hermitage +Harbor rotate: false xy: 4, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Heroic Epic +Hermitage rotate: false xy: 112, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Himeji Castle +Heroic Epic rotate: false xy: 220, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Hospital +Himeji Castle rotate: false xy: 328, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Hubble Space Telescope +Hospital rotate: false xy: 436, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Hydro Plant +Hubble Space Telescope rotate: false xy: 544, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Ironworks +Hydro Plant rotate: false xy: 652, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Kremlin +Ironworks rotate: false xy: 760, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Krepost +Kremlin rotate: false xy: 868, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Leaning Tower of Pisa +Krepost rotate: false xy: 112, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Library +Leaning Tower of Pisa rotate: false xy: 220, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Lighthouse +Library rotate: false xy: 328, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Longhouse +Lighthouse rotate: false xy: 436, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Machu Picchu +Longhouse rotate: false xy: 544, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Manhattan Project +Machu Picchu rotate: false xy: 652, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Market +Manhattan Project rotate: false xy: 760, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Mausoleum of Halicarnassus +Market rotate: false xy: 868, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Medical Lab +Mausoleum of Halicarnassus rotate: false xy: 976, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Military Academy +Medical Lab rotate: false xy: 220, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Military Base +Military Academy rotate: false xy: 328, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Mint +Military Base rotate: false xy: 436, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Monastery +Mint rotate: false xy: 544, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Monument +Monastery rotate: false xy: 652, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Mud Pyramid Mosque +Monument rotate: false xy: 760, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Mughal Fort +Mosque rotate: false xy: 868, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Museum +Mud Pyramid Mosque rotate: false xy: 976, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -National College +Mughal Fort rotate: false xy: 1084, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -National Epic +Museum rotate: false xy: 328, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -National Treasury +National College rotate: false xy: 436, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Neuschwanstein +National Epic rotate: false xy: 544, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Notre Dame +National Treasury rotate: false xy: 652, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Nuclear Plant +Neuschwanstein rotate: false xy: 760, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Observatory +Notre Dame rotate: false xy: 868, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Opera House +Nuclear Plant rotate: false xy: 976, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Oxford University +Observatory rotate: false xy: 1084, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Palace +Opera House rotate: false xy: 1192, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Paper Maker +Oxford University rotate: false xy: 436, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Pentagon +Pagoda rotate: false xy: 544, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Petra +Palace rotate: false xy: 652, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Porcelain Tower +Paper Maker rotate: false xy: 760, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Public School +Pentagon rotate: false xy: 868, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Research Lab +Petra rotate: false xy: 976, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -SS Booster +Porcelain Tower rotate: false xy: 1084, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -SS Cockpit +Public School rotate: false xy: 1192, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -SS Engine +Research Lab rotate: false xy: 1300, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -SS Stasis Chamber +SS Booster rotate: false xy: 544, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Satrap's Court +SS Cockpit rotate: false xy: 652, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Seaport +SS Engine rotate: false xy: 760, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Shrine +SS Stasis Chamber rotate: false xy: 868, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Sistine Chapel +Satrap's Court rotate: false xy: 976, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Solar Plant +Seaport rotate: false xy: 1084, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Spaceship Factory +Shrine rotate: false xy: 1192, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Stable +Sistine Chapel rotate: false xy: 1300, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Stadium +Solar Plant rotate: false xy: 1408, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Statue of Liberty +Spaceship Factory rotate: false xy: 652, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Statue of Zeus +Stable rotate: false xy: 760, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Stock Exchange +Stadium rotate: false xy: 868, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Stone Works +Statue of Liberty rotate: false xy: 976, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Stonehenge +Statue of Zeus rotate: false xy: 1084, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Sydney Opera House +Stock Exchange rotate: false xy: 1192, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Taj Mahal +Stone Works rotate: false xy: 1300, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Temple +Stonehenge rotate: false xy: 1408, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Temple of Artemis +Sydney Opera House rotate: false xy: 1516, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Terracotta Army +Taj Mahal rotate: false xy: 760, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -The Great Library +Temple rotate: false xy: 868, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -The Great Lighthouse +Temple of Artemis rotate: false xy: 976, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -The Louvre +Terracotta Army rotate: false xy: 1084, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -The Oracle +The Great Library rotate: false xy: 1192, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -The Pyramids +The Great Lighthouse rotate: false xy: 1300, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Theatre +The Louvre rotate: false xy: 1408, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -United Nations +The Oracle rotate: false xy: 1516, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -University +The Pyramids rotate: false xy: 1624, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Utopia Project +Theatre rotate: false xy: 868, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Walls +United Nations rotate: false xy: 976, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Walls of Babylon +University rotate: false xy: 1084, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Wat +Utopia Project rotate: false xy: 1192, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Water Mill +Walls rotate: false xy: 1300, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Windmill +Walls of Babylon rotate: false xy: 1408, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Workshop +Wat rotate: false xy: 1516, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 +Water Mill + rotate: false + xy: 1624, 760 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +Windmill + rotate: false + xy: 1732, 868 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +Workshop + rotate: false + xy: 976, 4 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 diff --git a/android/assets/BuildingIcons.png b/android/assets/BuildingIcons.png index 03eee2d0d439a..cc8d62958844b 100644 Binary files a/android/assets/BuildingIcons.png and b/android/assets/BuildingIcons.png differ diff --git a/android/assets/jsons/Civ V - Vanilla/Beliefs.json b/android/assets/jsons/Civ V - Vanilla/Beliefs.json index 1c5abfb2cb994..5ae66902aeeb3 100644 --- a/android/assets/jsons/Civ V - Vanilla/Beliefs.json +++ b/android/assets/jsons/Civ V - Vanilla/Beliefs.json @@ -121,7 +121,11 @@ ///////////////////////////////////////// Follower beliefs ///////////////////////////////////////// // Missing: asceticism (requires followers) - // Missing: cathedrals (requires purchasing with faith) + { + "name": "Cathedrals", + "type": "Follower", + "uniques": ["May buy [Cathedral] buildings for [200] [Faith] [in cities following this religion]"] + }, // Missing: choral music (requires followers) { "name": "Divine inspiration", @@ -140,9 +144,21 @@ }, // Missing: Holy Warriors (requires purchasing with faith) // Missing: Liturgical drama (requires followers) - // Missing: Monasteries (requires purchasing with faith) - // Missing: Mosques (requires purchasing with faith) - // Missing: Pagodas (requires purchasing with faith) + { + "name": "Monasteries", + "type": "Follower", + "uniques": ["May buy [Monastery] buildings for [200] [Faith] [in cities following this religion]"] + }, + { + "name": "Mosques", + "type": "Follower", + "uniques": ["May buy [Mosque] buildings for [200] [Faith] [in cities following this religion]"] + }, + { + "name": "Pagodas", + "type": "Follower", + "uniques": ["May buy [Pagoda] buildings for [200] [Faith] [in cities following this religion]"] + }, { "name": "Peace Gardens", "type": "Follower", diff --git a/android/assets/jsons/Civ V - Vanilla/Buildings.json b/android/assets/jsons/Civ V - Vanilla/Buildings.json index e0f93c17b1981..8c6e9e11575ff 100644 --- a/android/assets/jsons/Civ V - Vanilla/Buildings.json +++ b/android/assets/jsons/Civ V - Vanilla/Buildings.json @@ -442,14 +442,6 @@ "maintenance": 1, "requiredTech": "Theology" }, - { - "name": "Monastery", - "maintenance": 0, - "requiredNearbyImprovedResources": ["Wine","Incense"], - "uniques": ["[+2 Culture] from [Wine] tiles [in this city]", "[+2 Culture] from [Incense] tiles [in this city]"], - "hurryCostModifier": 25, - "requiredTech": "Theology" - }, { "name": "Hagia Sophia", "culture": 1, @@ -1122,5 +1114,41 @@ "isNationalWonder": true, "uniques": ["Hidden until [5] social policy branches have been completed", "Triggers a global alert upon build start", "Triggers a Cultural Victory upon completion", "Hidden when [Cultural] Victory is disabled"] - } + }, + + // Religious buildings + + { + "name": "Cathedral", + "cost": 0, + "faith": 1, + "culture": 3, + "happiness": 1, + "specialistSlots": {"Artist": 1}, + "uniques": ["Unbuildable"] + }, + { + "name": "Monastery", + "cost": 0, + "culture": 2, + "faith": 2, + "uniques": ["[+1 Culture, +1 Faith] from [Wine] tiles [in this city]", + "[+1 Culture, +1 Faith] from [Incense] tiles [in this city]","Unbuildable"] + }, + { + "name": "Mosque", + "cost": 0, + "culture": 2, + "faith": 3, + "happiness": 1, + "uniques": ["Unbuildable"] + }, + { + "name": "Pagoda", + "cost": 0, + "culture": 2, + "faith": 2, + "happiness": 2, + "uniques": ["Unbuildable"] + }, ] diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index a61040ccc39e6..1abd571bf4686 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -595,6 +595,10 @@ class CityInfo { "in all cities in which the majority religion is a major religion" -> religion.getMajorityReligion() != null && civInfo.gameInfo.religions[religion.getMajorityReligion()]!!.isMajorReligion() + // This is only used in communication to the user indicating that only in cities with this + // religion a unique is active. However, since religion uniques only come from the city itself, + // this will always be true when checked. + "in cities following this religion" -> true else -> false } } diff --git a/core/src/com/unciv/logic/city/IConstruction.kt b/core/src/com/unciv/logic/city/IConstruction.kt index 5b1e77e24d484..83477d4f76503 100644 --- a/core/src/com/unciv/logic/city/IConstruction.kt +++ b/core/src/com/unciv/logic/city/IConstruction.kt @@ -23,7 +23,7 @@ interface INonPerpetualConstruction : IConstruction, INamed, IHasUniques { fun getStatBuyCost(cityInfo: CityInfo, stat: Stat): Int? fun getRejectionReason(cityConstructions: CityConstructions): String - private fun getMatchingUniques(uniqueTemplate: String): Sequence { + fun getMatchingUniques(uniqueTemplate: String): Sequence { return uniqueObjects.asSequence().filter { it.placeholderText == uniqueTemplate } } @@ -58,7 +58,6 @@ interface INonPerpetualConstruction : IConstruction, INamed, IHasUniques { return (30.0 * getProductionCost(civInfo)).pow(0.75) * (1 + hurryCostModifier / 100f) } - // I can't make this function protected or private :( fun getBaseBuyCost(cityInfo: CityInfo, stat: Stat): Int? { if (stat == Stat.Gold) return getBaseGoldCost(cityInfo.civInfo).toInt() diff --git a/core/src/com/unciv/models/ruleset/Building.kt b/core/src/com/unciv/models/ruleset/Building.kt index 22bf8d3bacc88..8fa82946b2a08 100644 --- a/core/src/com/unciv/models/ruleset/Building.kt +++ b/core/src/com/unciv/models/ruleset/Building.kt @@ -202,9 +202,36 @@ class Building : NamedStats(), INonPerpetualConstruction, ICivilopediaText { override fun canBePurchasedWithStat(cityInfo: CityInfo, stat: Stat, ignoreCityRequirements: Boolean): Boolean { if (stat == Stat.Gold && isAnyWonder()) return false + // May buy [buildingFilter] buildings for [amount] [Stat] [cityFilter] + if (cityInfo.getMatchingUniques("May buy [] buildings for [] [] []") + .any { it.params[2] == stat.name && matchesFilter(it.params[0]) && cityInfo.matchesFilter(it.params[3]) } + ) return true return super.canBePurchasedWithStat(cityInfo, stat, ignoreCityRequirements) } + override fun getBaseBuyCost(cityInfo: CityInfo, stat: Stat): Int? { + if (stat == Stat.Gold) return getBaseGoldCost(cityInfo.civInfo).toInt() + + val lowestCostFromUnique = + ( + // Can be purchased for [amount] [Stat] [cityFilter] + getMatchingUniques("Can be purchased for [] [] []") + .filter { it.params[1] == stat.name && cityInfo.matchesFilter(it.params[2]) } + .map { it.params[0].toInt() } + // May buy [buildingFilter] buildings for [amount] [Stat] [cityFilter] + + cityInfo.getMatchingUniques("May buy [] buildings for [] [] []") + .filter { it.params[2] == stat.name && matchesFilter(it.params[0]) && cityInfo.matchesFilter(it.params[3])} + .map { it.params[1].toInt() } + ).minOrNull() + if (lowestCostFromUnique != null) return lowestCostFromUnique + + // Can be purchased with [Stat] [cityFilter] + if (getMatchingUniques("Can be purchased with [] []") + .any { it.params[0] == stat.name && cityInfo.matchesFilter(it.params[1])} + ) return cityInfo.civInfo.gameInfo.ruleSet.eras[cityInfo.civInfo.getEra()]!!.baseUnitBuyCost + return null + } + override fun getCivilopediaTextHeader() = FormattedLine(name, header=2, icon=makeLink()) override fun makeLink() = if (isAnyWonder()) "Wonder/$name" else "Building/$name" override fun hasCivilopediaTextLines() = true diff --git a/core/src/com/unciv/models/ruleset/Ruleset.kt b/core/src/com/unciv/models/ruleset/Ruleset.kt index 00c903fac5214..0538dc28edd68 100644 --- a/core/src/com/unciv/models/ruleset/Ruleset.kt +++ b/core/src/com/unciv/models/ruleset/Ruleset.kt @@ -237,9 +237,9 @@ class Ruleset { * */ fun updateBuildingCosts() { for (building in buildings.values) { - if (building.cost == 0) { + if (building.cost == 0 && !building.uniques.contains("Unbuildable")) { val column = technologies[building.requiredTech]?.column - ?: throw UncivShowableException("Building (${building.name}) must either have an explicit cost or reference an existing tech") + ?: throw UncivShowableException("Building (${building.name}) is buildable and therefore must either have an explicit cost or reference an existing tech") building.cost = if (building.isAnyWonder()) column.wonderCost else column.buildingCost } } @@ -311,8 +311,8 @@ class Ruleset { } for (building in buildings.values) { - if (building.requiredTech == null && building.cost == 0) - lines += "${building.name} must either have an explicit cost or reference an existing tech!" + if (building.requiredTech == null && building.cost == 0 && !building.uniques.contains("Unbuildable")) + lines += "${building.name} is buildable and therefore must either have an explicit cost or reference an existing tech!" } for (nation in nations.values) { diff --git a/core/src/com/unciv/models/translations/TranslationFileWriter.kt b/core/src/com/unciv/models/translations/TranslationFileWriter.kt index 894648688ac42..1269f7671a3a6 100644 --- a/core/src/com/unciv/models/translations/TranslationFileWriter.kt +++ b/core/src/com/unciv/models/translations/TranslationFileWriter.kt @@ -213,19 +213,20 @@ object TranslationFileWriter { "water units", "air units", "military units", - "submarine units" + "submarine units", // Note: this can't handle combinations of parameters (e.g. [{Military} {Water}]) )) } val cityFilterMap = setOf( "in this city", - "in all cities", - "in all coastal cities", - "in capital", - "in all non-occupied cities", - "in all cities with a world wonder", - "in all cities connected to capital", - "in all cities with a garrison", - "in all cities in which the majority religion is a major religion" + "in all cities", + "in all coastal cities", + "in capital", + "in all non-occupied cities", + "in all cities with a world wonder", + "in all cities connected to capital", + "in all cities with a garrison", + "in all cities in which the majority religion is a major religion", + "in cities following this religion", ) val startMillis = System.currentTimeMillis() diff --git a/docs/Credits.md b/docs/Credits.md index 2521cd097f98b..d756093f3ae52 100644 --- a/docs/Credits.md +++ b/docs/Credits.md @@ -231,7 +231,6 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Wat Arun Ratchawararam Ratchawaramahawihan](https://thenounproject.com/term/wat-arun-ratchawararam-ratchawaramahawihan/320664/) By József Balázs-Hegedüs for Wat * [College](https://thenounproject.com/term/college/1203703/) By Vectors Market for National College * [Chichen Itza](https://thenounproject.com/term/chichen-itza/668065/) By Hea Poh Lin -* [Christian Church](https://thenounproject.com/term/christian-church/1174183/) By Andrejs Kirma for Monastery * [Castle](https://thenounproject.com/search/?q=castle&i=390189) By Mint Shirt * [Red Fort](https://thenounproject.com/arunabh.jain.0fficial/collection/famous-indian-monuments/?i=2092466), [Gateway of India](https://thenounproject.com/arunabh.jain.0fficial/collection/famous-indian-monuments/?i=2092468) By Arunabh Jain, IN for Mughal Fort * [Angkor Wat](https://thenounproject.com/search/?q=angkor%20wat&i=2412873) By Phạm Thanh Lộc for Angkor Wat @@ -312,6 +311,11 @@ Unless otherwise specified, all the following are from [the Noun Project](https: ### All Era's * [Illuminati](https://thenounproject.com/term/illuminati/1617812) by emilegraphics for the Utopia Project +* [Christian Church](https://thenounproject.com/term/christian-church/1174183/) by Andrejs Kirma for Monastery +* [cathedral](https://thenounproject.com/search/?q=Cathedral&i=4136407) by Pixel Bazaar for Cathedral +* [Mosque](https://thenounproject.com/search/?q=mosque&i=4139519) by Ahmad Roaayala for Mosque +* [Pagoda](https://thenounproject.com/search/?q=pagoda&i=446665) by Xinh Studio for Pagoda + ## Social Policies