From c18cc2476f8a14bb45bdcfe8a2b9d15716b884ef Mon Sep 17 00:00:00 2001 From: Duan Tao Date: Fri, 25 Jan 2019 19:31:19 +0800 Subject: [PATCH 1/4] Generate different type of barbarians. --- core/src/com/unciv/logic/GameInfo.kt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/src/com/unciv/logic/GameInfo.kt b/core/src/com/unciv/logic/GameInfo.kt index 056a15a8f0..cf25376f09 100644 --- a/core/src/com/unciv/logic/GameInfo.kt +++ b/core/src/com/unciv/logic/GameInfo.kt @@ -90,7 +90,14 @@ class GameInfo { if (viableTiles.isEmpty()) return // no place for more barbs =( tile = viableTiles.getRandom() } - tileMap.placeUnitNearTile(tile!!.position, "Warrior", getBarbarianCivilization()) + + val allResearchedTechs = civilizations.filterNot { it.isBarbarianCivilization() } + .flatMap { it.tech.researchedTechnologies }.map{ it.name } + val unitList = GameBasics.BarbarianUnitsList.keys + .filter{ allResearchedTechs.contains(GameBasics.Units[it]?.requiredTech) } + val unit = if (unitList.isEmpty()) "Warrior" else unitList.getRandom() + + tileMap.placeUnitNearTile(tile!!.position, unit, getBarbarianCivilization()) } fun setTransients() { @@ -131,4 +138,4 @@ class GameInfo { } } -} \ No newline at end of file +} From ddcf3dd83e09621386ecdaabc93955d420ae8343 Mon Sep 17 00:00:00 2001 From: Duan Tao Date: Sat, 26 Jan 2019 18:58:12 +0800 Subject: [PATCH 2/4] Remove unit list for barbarians. --- core/src/com/unciv/logic/GameInfo.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/com/unciv/logic/GameInfo.kt b/core/src/com/unciv/logic/GameInfo.kt index cf25376f09..f7d7f986ed 100644 --- a/core/src/com/unciv/logic/GameInfo.kt +++ b/core/src/com/unciv/logic/GameInfo.kt @@ -93,9 +93,9 @@ class GameInfo { val allResearchedTechs = civilizations.filterNot { it.isBarbarianCivilization() } .flatMap { it.tech.researchedTechnologies }.map{ it.name } - val unitList = GameBasics.BarbarianUnitsList.keys - .filter{ allResearchedTechs.contains(GameBasics.Units[it]?.requiredTech) } - val unit = if (unitList.isEmpty()) "Warrior" else unitList.getRandom() + val unitList = GameBasics.Units.values.filter { !it.unitType.isCivilian() } + .filter{ allResearchedTechs.contains(it.requiredTech) } + val unit = if (unitList.isEmpty()) "Warrior" else unitList.getRandom().name tileMap.placeUnitNearTile(tile!!.position, unit, getBarbarianCivilization()) } From 624f83d10996d5772c32a4685a98c159ce41d355 Mon Sep 17 00:00:00 2001 From: Duan Tao Date: Sat, 26 Jan 2019 19:04:13 +0800 Subject: [PATCH 3/4] Remove unique units from barbarians. --- core/src/com/unciv/logic/GameInfo.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/com/unciv/logic/GameInfo.kt b/core/src/com/unciv/logic/GameInfo.kt index f7d7f986ed..fb35d0dd9e 100644 --- a/core/src/com/unciv/logic/GameInfo.kt +++ b/core/src/com/unciv/logic/GameInfo.kt @@ -93,7 +93,7 @@ class GameInfo { val allResearchedTechs = civilizations.filterNot { it.isBarbarianCivilization() } .flatMap { it.tech.researchedTechnologies }.map{ it.name } - val unitList = GameBasics.Units.values.filter { !it.unitType.isCivilian() } + val unitList = GameBasics.Units.values.filter { !it.unitType.isCivilian() && it.uniqueTo == null } .filter{ allResearchedTechs.contains(it.requiredTech) } val unit = if (unitList.isEmpty()) "Warrior" else unitList.getRandom().name From edc53171ccceb1f1db98e0c354b3e9af64ee3cef Mon Sep 17 00:00:00 2001 From: Duan Tao Date: Sun, 27 Jan 2019 21:34:40 +0800 Subject: [PATCH 4/4] Barbarian generation improvement. --- core/src/com/unciv/logic/GameInfo.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/src/com/unciv/logic/GameInfo.kt b/core/src/com/unciv/logic/GameInfo.kt index fb35d0dd9e..1cb346c635 100644 --- a/core/src/com/unciv/logic/GameInfo.kt +++ b/core/src/com/unciv/logic/GameInfo.kt @@ -91,10 +91,13 @@ class GameInfo { tile = viableTiles.getRandom() } - val allResearchedTechs = civilizations.filterNot { it.isBarbarianCivilization() } - .flatMap { it.tech.researchedTechnologies }.map{ it.name } + var allResearchedTechs = GameBasics.Technologies.keys + for (civ in civilizations.filter { !it.isBarbarianCivilization() && !it.isDefeated() }) { + allResearchedTechs.retainAll(civ.tech.techsResearched) + } val unitList = GameBasics.Units.values.filter { !it.unitType.isCivilian() && it.uniqueTo == null } - .filter{ allResearchedTechs.contains(it.requiredTech) } + .filter{ allResearchedTechs.contains(it.requiredTech) + && (it.obsoleteTech == null || !allResearchedTechs.contains(it.obsoleteTech!!)) } val unit = if (unitList.isEmpty()) "Warrior" else unitList.getRandom().name tileMap.placeUnitNearTile(tile!!.position, unit, getBarbarianCivilization())