Adding religous city states to unciv! (#5136)

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!

* Adding religous city states to unciv!
This commit is contained in:
Interdice
2021-09-14 17:49:38 +10:00
committed by GitHub
parent 0f805fbac4
commit 297618706c
9 changed files with 85 additions and 5 deletions

View File

@ -1 +1 @@
[Tech,Flags,Skin,Construction]
[Construction,Flags,Skin,Tech]

View File

@ -16,12 +16,14 @@
"Cultured": ["Provides [3] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]"],
"Mercantile": ["Provides [2] Happiness"],
"Religious": ["Provides [3] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[20] turns"]
},
"allyBonus": {
"Cultured": ["Provides [6] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]", "Provides [1] [Food] [in all cities]"],
"Mercantile": ["Provides [2] Happiness", "Provides a unique luxury"],
"Religious": ["Provides [6] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[17] turns"]
},
"iconRGB": [255, 87, 35]
@ -42,12 +44,14 @@
"Cultured": ["Provides [3] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]"],
"Mercantile": ["Provides [2] Happiness"],
"Religious": ["Provides [3] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[20] turns"]
},
"allyBonus": {
"Cultured": ["Provides [6] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]", "Provides [1] [Food] [in all cities]"],
"Mercantile": ["Provides [2] Happiness", "Provides a unique luxury"],
"Religious": ["Provides [6] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[17] turns"]
},
"iconRGB": [233, 31, 99]
@ -70,12 +74,14 @@
"Cultured": ["Provides [6] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]"],
"Mercantile": ["Provides [3] Happiness"],
"Religious": ["Provides [6] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[20] turns"]
},
"allyBonus": {
"Cultured": ["Provides [12] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]", "Provides [1] [Food] [in all cities]"],
"Mercantile": ["Provides [3] Happiness", "Provides a unique luxury"],
"Religious": ["Provides [12] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[17] turns"]
},
"iconRGB": [157, 39, 176]
@ -99,12 +105,14 @@
"Cultured": ["Provides [6] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]"],
"Mercantile": ["Provides [3] Happiness"],
"Religious": ["Provides [6] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[20] turns"]
},
"allyBonus": {
"Cultured": ["Provides [12] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]", "Provides [1] [Food] [in all cities]"],
"Mercantile": ["Provides [3] Happiness", "Provides a unique luxury"],
"Religious": ["Provides [12] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[17] turns"]
},
"iconRGB": [104, 58, 183]
@ -129,12 +137,14 @@
"Cultured": ["Provides [13] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]"],
"Mercantile": ["Provides [3] Happiness"],
"Religious": ["Provides [13] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[20] turns"]
},
"allyBonus": {
"Cultured": ["Provides [26] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]", "Provides [1] [Food] [in all cities]"],
"Mercantile": ["Provides [3] Happiness", "Provides a unique luxury"],
"Religious": ["Provides [26] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[17] turns"]
},
"iconRGB": [63, 81, 182],
@ -164,12 +174,15 @@
"Cultured": ["Provides [13] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]"],
"Mercantile": ["Provides [3] Happiness"],
"Religious": ["Provides [13] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[20] turns"]
},
"allyBonus": {
"Cultured": ["Provides [26] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]", "Provides [1] [Food] [in all cities]"],
"Mercantile": ["Provides [3] Happiness", "Provides a unique luxury"],
"Religious": ["Provides [26] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[17] turns"]
},
"iconRGB": [33, 150, 243],
@ -200,12 +213,14 @@
"Cultured": ["Provides [13] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]"],
"Mercantile": ["Provides [3] Happiness"],
"Religious": ["Provides [13] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[20] turns"]
},
"allyBonus": {
"Cultured": ["Provides [26] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]", "Provides [1] [Food] [in all cities]"],
"Mercantile": ["Provides [3] Happiness", "Provides a unique luxury"],
"Religious": ["Provides [26] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[17] turns"]
},
"iconRGB": [0, 150, 136],
@ -240,13 +255,16 @@
"Cultured": ["Provides [13] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]"],
"Mercantile": ["Provides [3] Happiness"],
"Religious": ["Provides [13] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[20] turns"]
},
"allyBonus": {
"Cultured": ["Provides [26] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]", "Provides [1] [Food] [in all cities]"],
"Mercantile": ["Provides [3] Happiness", "Provides a unique luxury"],
"Religious": ["Provides [26] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[17] turns"]
},
"iconRGB": [76, 176, 81],
"uniques": ["May not generate great prophet equivalents naturally",
@ -279,13 +297,17 @@
"Cultured": ["Provides [13] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]"],
"Mercantile": ["Provides [3] Happiness"],
"Religious": ["Provides [13] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[20] turns"]
},
"allyBonus": {
"Cultured": ["Provides [26] [Culture] per turn"],
"Maritime": ["Provides [2] [Food] [in capital]", "Provides [1] [Food] [in all cities]"],
"Mercantile": ["Provides [3] Happiness", "Provides a unique luxury"],
"Religious": ["Provides [26] [Faith] per turn"],
"Militaristic": ["Provides military units every ≈[17] turns"]
},
"iconRGB": [76, 176, 81],
"uniques": ["May not generate great prophet equivalents naturally",

View File

@ -1121,6 +1121,42 @@
"innerColor": [224,224,224],
"cities": ["Mogadishu"]
},
{
"name": "Bratislava",
"adjective": ["Bratislava"],
"cityStateType": "Religious",
"declaringWar": "I didn't want to do this. We declare war.",
"attacked": "I will fear no evil. For god is with me!",
"defeated": "Why have you forsaken us my lord?",
"outerColor": [0, 0, 0],
"innerColor": [255,255,255],
"cities": ["Bratislava"]
},
{
"name": "Cahokia",
"adjective": ["Cahokia"],
"cityStateType": "Religious",
"declaringWar": "We have wanted this for a LONG time. War it shall be.",
"attacked": "Very well, we will kick you back to the ancient era!",
"defeated": "This isn't how it is supposed to be!",
"outerColor": [0, 0, 0],
"innerColor": [203, 253, 232],
"cities": ["Cahokia"]
},
{
"name": "Jerusalem",
"adjective": ["Jerusalem"],
"cityStateType": "Religious",
"declaringWar": "By god's grace we will not allow these atrocities to occur any longer. We declare war!",
"attacked": "May god have mercy on your evil soul.",
"defeated": "I for one welcome our new conquer overlord!",
"outerColor": [0, 0, 0],
"innerColor": [198,255,192],
"cities": ["Jerusalem"]
},

View File

@ -499,6 +499,7 @@ A [greatPerson] has been born in [cityName]! =
We have encountered [civName]! =
[cityStateName] has given us [stats] as a token of goodwill for meeting us =
[cityStateName] has given us [stats] as we are the first major civ to meet them =
[cityStateName] has also given us [stats] =
Cannot provide unit upkeep for [unitName] - unit has been disbanded! =
[cityName] has grown! =
[cityName] is starving! =

View File

@ -191,16 +191,26 @@ object GameStarter {
val availableCityStatesNames = Stack<String>()
// since we shuffle and then order by, we end up with all the City-States with starting tiles first in a random order,
// and then all the other City-States in a random order! Because the sortedBy function is stable!
availableCityStatesNames.addAll(ruleset.nations.filter { it.value.isCityState() }.keys
.shuffled().sortedByDescending { it in civNamesWithStartingLocations })
availableCityStatesNames.addAll( ruleset.nations
.filter { it.value.isCityState() && (it.value.cityStateType != CityStateType.Religious || newGameParameters.religionEnabled) }
.keys
.shuffled()
.sortedByDescending { it in civNamesWithStartingLocations } )
val allMercantileResources = ruleset.tileResources.values.filter { it.unique == "Can only be created by Mercantile City-States" }.map { it.name }
val unusedMercantileResources = Stack<String>()
unusedMercantileResources.addAll(allMercantileResources.shuffled())
var addedCityStates = 0
// Keep trying to add city states until we reach the target number.
while (addedCityStates < newGameParameters.numberOfCityStates) {
if (availableCityStatesNames.isEmpty()) // We ran out of city-states somehow
break
val cityStateName = availableCityStatesNames.pop()
val civ = CivilizationInfo(cityStateName)
if (civ.initCityState(ruleset, newGameParameters.startingEra, availableCivNames)) { // true if successful init
if (civ.initCityState(ruleset, newGameParameters.startingEra, availableCivNames)) {
gameInfo.civilizations.add(civ)
addedCityStates++
}

View File

@ -425,6 +425,7 @@ class CityStateFunctions(val civInfo: CivilizationInfo) {
civInfo.cityStateType == CityStateType.Mercantile && statType == Stat.Happiness -> true
civInfo.cityStateType == CityStateType.Cultured && statType == Stat.Culture -> true
civInfo.cityStateType == CityStateType.Maritime && statType == Stat.Food -> true
civInfo.cityStateType == CityStateType.Religious && statType == Stat.Faith ->true
else -> false
}
}

View File

@ -5,7 +5,7 @@ enum class CityStateType(val color: String = "", val icon: String) {
Maritime("#38ff70", "OtherIcons/Maritime"),
Mercantile("#ffd800", "OtherIcons/Mercantile"),
Militaristic("#ff0000", "OtherIcons/Militaristic"),
//Religious("#FFFFFF", "OtherIcons/Religious")
Religious("#FFFFFF", "OtherIcons/Religious")
}
enum class CityStatePersonality {

View File

@ -406,9 +406,11 @@ class CivilizationInfo {
val cityStateLocation = if (cities.isEmpty()) null else getCapital().location
val giftAmount = Stats(gold = 15f)
val faithAmount = Stats(faith = 4f)
// Later, religious city-states will also gift gold, making this the better implementation
// For now, it might be overkill though.
var meetString = "[${civName}] has given us [${giftAmount}] as a token of goodwill for meeting us"
val religionMeetString = "[${civName}] has also given us [${faithAmount}]"
if (diplomacy.filter { it.value.otherCiv().isMajorCiv() }.count() == 1) {
giftAmount.timesInPlace(2f)
meetString = "[${civName}] has given us [${giftAmount}] as we are the first major civ to meet them"
@ -418,6 +420,12 @@ class CivilizationInfo {
else
otherCiv.addNotification(meetString, NotificationIcon.Gold)
if (otherCiv.isCityState() && otherCiv.canGiveStat(Stat.Faith)){
otherCiv.addNotification(religionMeetString, NotificationIcon.Faith)
for ((key, value) in faithAmount)
otherCiv.addStat(key, value.toInt())
}
for ((key, value) in giftAmount)
otherCiv.addStat(key, value.toInt())
}

View File

@ -1,9 +1,11 @@
package com.unciv.logic.civilization
import com.unciv.logic.civilization.diplomacy.RelationshipLevel
import com.unciv.logic.map.MapUnit
import com.unciv.models.Religion
import com.unciv.models.ruleset.Belief
import com.unciv.models.ruleset.BeliefType
import com.unciv.models.ruleset.Era
import com.unciv.ui.pickerscreens.BeliefContainer
import com.unciv.ui.utils.toPercent
import kotlin.random.Random