Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update CityLocationTileRanker and Automation.kt #12343

Draft
wants to merge 178 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
178 commits
Select commit Hold shift + click to select a range
7ed4c0d
AI behaviour changes
EmperorPinguin Jun 23, 2024
47184b0
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Jun 23, 2024
e856a76
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Jun 23, 2024
b571e76
Update Automation.kt
EmperorPinguin Jun 23, 2024
cee0287
Update Automation.kt
EmperorPinguin Jun 23, 2024
16ae6d9
Update Automation.kt
EmperorPinguin Jun 23, 2024
a769a52
Update Automation.kt
EmperorPinguin Jun 23, 2024
9c8f2e2
Update Automation.kt
EmperorPinguin Jun 23, 2024
777b828
Update ConstructionAutomation.kt
EmperorPinguin Jun 23, 2024
2a4f9b0
Update Automation.kt
EmperorPinguin Jun 23, 2024
33b9fc7
Reverting some changes
EmperorPinguin Jun 23, 2024
e311e17
Changes
EmperorPinguin Jun 24, 2024
cade007
revert changes
EmperorPinguin Jun 24, 2024
318c396
revert changes
EmperorPinguin Jun 24, 2024
012afb5
revert changes
EmperorPinguin Jun 24, 2024
f4d02c8
revert changes
EmperorPinguin Jun 24, 2024
cae12b6
Update CityLocationTileRanker.kt
EmperorPinguin Jun 24, 2024
9040bab
Citizen assignment for stat conversion
EmperorPinguin Jun 24, 2024
a33d7f4
Merge branch 'yairm210:master' into master
EmperorPinguin Jun 25, 2024
e53f887
Merge branch 'yairm210:master' into master
EmperorPinguin Jun 25, 2024
3f540a8
Update CityLocationTileRanker.kt
EmperorPinguin Jun 25, 2024
0e5db36
Merge branch 'yairm210:master' into master
EmperorPinguin Jun 26, 2024
43cf8a3
Merge branch 'yairm210:master' into master
EmperorPinguin Jun 26, 2024
85743fb
Merge branch 'yairm210:master' into master
EmperorPinguin Jun 27, 2024
a1f5905
Reduce AI settling
EmperorPinguin Jun 27, 2024
d061b67
Merge branch 'yairm210:master' into master
EmperorPinguin Jun 27, 2024
4257a0f
Avoid AI building units when in negative Supply
EmperorPinguin Jun 27, 2024
44c8a90
Merge branch 'yairm210:master' into master
EmperorPinguin Jun 27, 2024
5f42454
Update CityLocationTileRanker.kt
EmperorPinguin Jun 27, 2024
6b49cdc
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Jun 27, 2024
383a083
Update CityLocationTileRanker.kt
EmperorPinguin Jun 27, 2024
31e3c44
Update CityLocationTileRanker.kt
EmperorPinguin Jun 27, 2024
cd7c911
Merge branch 'yairm210:master' into master
EmperorPinguin Jun 28, 2024
958b646
Update ConstructionAutomation.kt
EmperorPinguin Jun 28, 2024
5f91c79
Merge branch 'yairm210:master' into master
EmperorPinguin Jun 28, 2024
809b0fc
Update build.gradle.kts
EmperorPinguin Jun 28, 2024
f2573d8
Update gradle-wrapper.properties
EmperorPinguin Jun 28, 2024
9bef165
Update CityLocationTileRanker.kt
EmperorPinguin Jun 28, 2024
3239649
Update CityLocationTileRanker.kt
EmperorPinguin Jun 28, 2024
6f7c7c8
Merge branch 'yairm210:master' into master
EmperorPinguin Jun 28, 2024
301ab4e
Update ConstructionAutomation.kt
EmperorPinguin Jun 28, 2024
f8f364e
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Jun 28, 2024
df80b10
Update CityLocationTileRanker.kt
EmperorPinguin Jun 28, 2024
ef4f189
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Jun 30, 2024
0fda42b
Merge branch 'yairm210:master' into master
EmperorPinguin Jun 30, 2024
55e1f7c
Merge branch 'yairm210:master' into master
EmperorPinguin Jul 2, 2024
bc6172b
Merge branch 'yairm210:master' into master
EmperorPinguin Jul 2, 2024
213c896
AI changes for humans
EmperorPinguin Jul 2, 2024
5f4e093
Fix puppet focus
EmperorPinguin Jul 3, 2024
61d8299
Merge branch 'yairm210:master' into master
EmperorPinguin Jul 4, 2024
7ff9018
Merge branch 'yairm210:master' into master
EmperorPinguin Jul 6, 2024
428193b
Merge branch 'yairm210:master' into master
EmperorPinguin Jul 15, 2024
001269a
Update Automation.kt
EmperorPinguin Jul 17, 2024
344dd81
Puppet focus
EmperorPinguin Jul 17, 2024
bf0a8e7
Update Automation.kt
EmperorPinguin Jul 17, 2024
545f8c2
Update Automation.kt
EmperorPinguin Jul 17, 2024
395ac8f
Update Automation.kt
EmperorPinguin Jul 18, 2024
96acd16
Update Automation.kt
EmperorPinguin Jul 18, 2024
9e73243
Update Automation.kt
EmperorPinguin Jul 18, 2024
5de758d
Merge branch 'yairm210:master' into master
EmperorPinguin Jul 18, 2024
6fc1b0c
Update Automation.kt
EmperorPinguin Jul 18, 2024
53057d9
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Jul 18, 2024
d5e270b
Update Automation.kt
EmperorPinguin Jul 19, 2024
c34b62b
Update Automation.kt
EmperorPinguin Jul 19, 2024
611378b
Update Automation.kt
EmperorPinguin Jul 19, 2024
1e4d88b
Update Stats.kt
EmperorPinguin Jul 23, 2024
5863788
Merge branch 'yairm210:master' into master
EmperorPinguin Jul 24, 2024
c896436
Update CityTurnManager.kt
EmperorPinguin Jul 24, 2024
8bb6b37
Remove specialist science modifier
EmperorPinguin Jul 25, 2024
0d3d37b
Merge branch 'yairm210:master' into master
EmperorPinguin Jul 25, 2024
a73bf52
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Jul 25, 2024
0a75ccb
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Jul 28, 2024
a730dce
Update ReligionAutomation.kt
EmperorPinguin Jul 30, 2024
b0fb0f2
Merge branch 'yairm210:master' into master
EmperorPinguin Jul 30, 2024
2797b0d
Update ReligionAutomation.kt
EmperorPinguin Jul 30, 2024
c7e4323
Update ReligionAutomation.kt
EmperorPinguin Jul 30, 2024
1660de3
Update CivilianUnitAutomation.kt
EmperorPinguin Jul 30, 2024
c2e6324
Merge branch 'yairm210:master' into master
EmperorPinguin Jul 31, 2024
21c5a30
Update ReligionAutomation.kt
EmperorPinguin Jul 31, 2024
4251043
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Jul 31, 2024
82a6221
Merge branch 'yairm210:master' into master
EmperorPinguin Aug 4, 2024
c431226
Worker prioritization
EmperorPinguin Aug 4, 2024
1871dbd
Update ConstructionAutomation.kt
EmperorPinguin Aug 4, 2024
0c8768e
Update ConstructionAutomation.kt
EmperorPinguin Aug 4, 2024
ee23862
Merge branch 'yairm210:master' into master
EmperorPinguin Aug 13, 2024
143a247
Update Automation.kt
EmperorPinguin Aug 13, 2024
31055c5
Update ConstructionAutomation.kt
EmperorPinguin Aug 13, 2024
db855b2
Update Policies.json
EmperorPinguin Aug 13, 2024
8a1c8b5
Update Policies.json
EmperorPinguin Aug 13, 2024
6b75cdb
Update Policies.json
EmperorPinguin Aug 13, 2024
16278a4
Update ConstructionAutomation.kt
EmperorPinguin Aug 13, 2024
f1dcea1
Update Policies.json
EmperorPinguin Aug 13, 2024
3cc9bf9
Update ReligionAutomation.kt
EmperorPinguin Aug 14, 2024
6fc896b
Update ReligionAutomation.kt
EmperorPinguin Aug 14, 2024
2f171a8
Update ReligionAutomation.kt
EmperorPinguin Aug 14, 2024
f90a4f8
Update ReligionAutomation.kt
EmperorPinguin Aug 14, 2024
90075e7
Merge branch 'yairm210:master' into master
EmperorPinguin Aug 16, 2024
9c2ba52
Rename Crop Yield to Growth
EmperorPinguin Aug 16, 2024
06f730c
Merge branch 'yairm210:master' into master
EmperorPinguin Aug 17, 2024
1f36661
Merge branch 'yairm210:master' into master
EmperorPinguin Aug 21, 2024
443074a
Merge branch 'yairm210:master' into master
EmperorPinguin Aug 22, 2024
1ee9432
Merge branch 'yairm210:master' into master
EmperorPinguin Aug 24, 2024
e8d2e81
Update worker usage
EmperorPinguin Aug 24, 2024
5c228b0
Merge branch 'yairm210:master' into master
EmperorPinguin Aug 28, 2024
44062df
Update UnitAutomation.kt
EmperorPinguin Aug 29, 2024
089919e
Merge branch 'yairm210:master' into master
EmperorPinguin Aug 29, 2024
b45d857
Merge branch 'yairm210:master' into master
EmperorPinguin Aug 31, 2024
9163062
Merge branch 'yairm210:master' into master
EmperorPinguin Sep 6, 2024
c8dbff7
Merge branch 'yairm210:master' into master
EmperorPinguin Sep 8, 2024
8b2d813
Tutorials update
EmperorPinguin Sep 8, 2024
8da7927
Update Tutorials.json
EmperorPinguin Sep 8, 2024
d8b06ff
Merge branch 'yairm210:master' into master
EmperorPinguin Sep 8, 2024
0e8b1d1
Fix spelling error
EmperorPinguin Sep 8, 2024
2e415e0
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Sep 8, 2024
aa2712c
Update Tutorials.json
EmperorPinguin Sep 8, 2024
a339192
Update Tutorials.json
EmperorPinguin Sep 8, 2024
195390d
Update Tutorials.json
EmperorPinguin Sep 8, 2024
777fb8f
Update Tutorials.json
EmperorPinguin Sep 8, 2024
4556892
Update Tutorials.json
EmperorPinguin Sep 8, 2024
2c1523a
Update Tutorials.json
EmperorPinguin Sep 8, 2024
04e49f2
Update Tutorials.json
EmperorPinguin Sep 9, 2024
344cd13
Update Tutorials.json
EmperorPinguin Sep 14, 2024
d25f898
Merge branch 'yairm210:master' into master
EmperorPinguin Sep 14, 2024
6e7ccdc
Merge branch 'yairm210:master' into master
EmperorPinguin Sep 19, 2024
fee8469
AI tech and policy choices
EmperorPinguin Sep 20, 2024
44adb88
Update Techs.json
EmperorPinguin Sep 21, 2024
12f934e
Update Policies.json
EmperorPinguin Sep 21, 2024
451cf95
Merge branch 'yairm210:master' into master
EmperorPinguin Sep 21, 2024
58e079d
Update ConstructionAutomation.kt
EmperorPinguin Sep 21, 2024
4c5b5c2
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Sep 21, 2024
fd9960a
Update UnitPromotions.json
EmperorPinguin Sep 21, 2024
ca9fdd7
Update
EmperorPinguin Sep 22, 2024
324472e
Update Policies.json
EmperorPinguin Sep 22, 2024
bb20a74
Update Tutorials.json
EmperorPinguin Sep 22, 2024
bb5d15e
Merge branch 'yairm210:master' into master
EmperorPinguin Sep 23, 2024
9b9df46
ReligionAutomation bugfix
EmperorPinguin Sep 23, 2024
d0d347b
Update ReligionAutomation.kt
EmperorPinguin Sep 23, 2024
bfcc10c
Merge branch 'yairm210:master' into master
EmperorPinguin Sep 24, 2024
daae674
Update ReligionAutomation.kt
EmperorPinguin Sep 24, 2024
c44969e
Update ReligionAutomation.kt
EmperorPinguin Sep 25, 2024
6eac918
Update ReligionAutomation.kt
EmperorPinguin Sep 25, 2024
bf8328c
Update ReligionAutomation.kt
EmperorPinguin Sep 25, 2024
85d5c33
Update ReligionAutomation.kt
EmperorPinguin Sep 25, 2024
b0b16bb
Update ReligionAutomation.kt
EmperorPinguin Sep 25, 2024
e3f77e4
Merge branch 'yairm210:master' into master
EmperorPinguin Sep 26, 2024
0015806
Merge branch 'yairm210:master' into master
EmperorPinguin Oct 2, 2024
7600041
Update AI city settling and science game
EmperorPinguin Oct 2, 2024
9a1bfa8
Update ReligionAutomation.kt
EmperorPinguin Oct 5, 2024
75fd6f1
Maybe revert this now the belief picking has improved
EmperorPinguin Oct 5, 2024
f5f88d1
Update ReligionAutomation.kt
EmperorPinguin Oct 5, 2024
b235948
Merge branch 'yairm210:master' into master
EmperorPinguin Oct 6, 2024
52b43f9
Merge branch 'yairm210:master' into master
EmperorPinguin Oct 7, 2024
fd03fc2
Remove some if-statements
EmperorPinguin Oct 7, 2024
f26e19a
Update Automation.kt
EmperorPinguin Oct 7, 2024
fc8d3f9
Update Automation.kt
EmperorPinguin Oct 7, 2024
42f9792
Update ConsoleLauncher.kt
EmperorPinguin Oct 9, 2024
2755492
Update
EmperorPinguin Oct 9, 2024
07f8e70
Merge branch 'yairm210:master' into master
EmperorPinguin Oct 11, 2024
956b62f
Update Automation.kt
EmperorPinguin Oct 11, 2024
2751318
Merge branch 'yairm210:master' into master
EmperorPinguin Oct 15, 2024
15918e8
Update TileImprovements.json
EmperorPinguin Oct 15, 2024
6163f09
Merge branch 'yairm210:master' into master
EmperorPinguin Oct 16, 2024
747d924
Update AI trading
EmperorPinguin Oct 16, 2024
77f4d2c
Merge branch 'master' of https://github.com/EmperorPinguin/Unciv
EmperorPinguin Oct 16, 2024
9126a54
Update TradeAutomation.kt
EmperorPinguin Oct 17, 2024
40fbcbb
Merge branch 'yairm210:master' into master
EmperorPinguin Oct 22, 2024
b70e99b
Update CityLocationTileRanker.kt
EmperorPinguin Oct 22, 2024
b97247f
Merge branch 'yairm210:master' into master
EmperorPinguin Oct 22, 2024
f57f3bf
Update Automation.kt
EmperorPinguin Oct 24, 2024
b6e742b
Update Automation.kt
EmperorPinguin Oct 24, 2024
faba023
Update TradeEvaluation.kt
EmperorPinguin Oct 24, 2024
7384362
Update CityLocationTileRanker.kt
EmperorPinguin Oct 24, 2024
507f113
Merge branch 'yairm210:master' into master
EmperorPinguin Oct 25, 2024
ee53616
Update ConstructionAutomation.kt
EmperorPinguin Oct 25, 2024
8bd8845
Update ConstructionAutomation.kt
EmperorPinguin Oct 25, 2024
2a5c904
Update ConstructionAutomation.kt
EmperorPinguin Oct 25, 2024
f2122ca
Update ConstructionAutomation.kt
EmperorPinguin Oct 25, 2024
9e4e971
Update Automation.kt
EmperorPinguin Oct 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions core/src/com/unciv/logic/automation/Automation.kt
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,15 @@ object Automation {
// NoFocus or Food/Growth Focus.
if (surplusFood < 0)
yieldStats.food *= 8 // Starving, need Food, get to 0
else if (city.civ.getHappiness() > -1)
else if (city.civ.getHappiness() > 0)
yieldStats.food *= 2 //1.5f is preferred, but 2 provides more protection against badly configured personalities
else if (city.civ.getHappiness() < 0) {
else if (city.civ.getHappiness() < 9)
// Going below -10 happiness yields very severe penalties, let's try to avoid it
yieldStats.food *= 0
else if (city.civ.getHappiness() < 1)
// 75% of excess food is wasted when in negative happiness
// 0 Happiness is positive happiness, but let's keep a 1-Happiness margin to account for e.g. Rationalism opener
yieldStats.food /= 4
}
}

if (city.population.population < 10) {
Expand All @@ -104,8 +107,16 @@ object Automation {
yieldStats.gold *= 2
}

if (city.civ.getHappiness() < 0) {
yieldStats.happiness *= 2
if (city.civ.getHappiness() < 10) {
//We've got an severe problem, try to get happiness by any means
yieldStats.happiness *= 8 }
else if (city.civ.getHappiness() < 0) {
yieldStats.happiness *= 3
}

if (city.civ.getHappiness() < 10) {
//Base game and most mods apply a -50% production penalty when in negative happiness
yieldStats.production /= 2
}

if (allTechsAreResearched) {
Expand Down
16 changes: 13 additions & 3 deletions core/src/com/unciv/logic/automation/city/ConstructionAutomation.kt
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ class ConstructionAutomation(val cityConstructions: CityConstructions) {
val surplusFood = city.cityStats.currentCityStats[Stat.Food]
if (surplusFood < 0) {
buildingStats.food *= 8 // Starving, need Food, get to 0
} else buildingStats.food *= 3
} else buildingStats.food *= 2

if (civInfo.stats.statsForNextTurn.gold < 10) {
buildingStats.gold *= 2 // We have a gold problem and need to adjust build queue accordingly
Expand Down Expand Up @@ -375,9 +375,19 @@ class ConstructionAutomation(val cityConstructions: CityConstructions) {
for (unique in building.getMatchingUniques(UniqueType.CarryOverFood, cityState)) {
if (city.matchesFilter(unique.params[1]) && unique.params[0].toInt() != 0) {
val foodGain = cityStats.currentCityStats.food + buildingStats.food
val relativeAmount = unique.params[0].toFloat() / 100f
buildingStats[Stat.Food] += foodGain * relativeAmount // Essentialy gives us the food per turn this unique saves us
val relativeAmount = 1 / ( 1 - unique.params[0].toFloat() / 100f) - 1
buildingStats[Stat.Food] += foodGain * relativeAmount // Essentialy gives us the food per turn this unique gives us
}
}
for (unique in building.getMatchingUniques(UniqueType.CreatesOneImprovement)) {
val tileImprovementValue = 5f
// Placeholder, let's for now assume the tile improvement yields 5 science, to let the AI in Civ6 mod build Campuses etc.
buildingStats[Stat.Science] += tileImprovementValue
}
for (unique in building.getMatchingUniques(UniqueType.StatsFromTiles)) {
val extraTileYields = 2f
// Placeholder, let's for now assume it yields 2 food, to let the AI build Lighthouses
buildingStats[Stat.Food] += extraTileYields
}
}
}
24 changes: 17 additions & 7 deletions core/src/com/unciv/logic/automation/unit/CityLocationTileRanker.kt
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ object CityLocationTileRanker {

val onCoast = newCityTile.isCoastalTile()
val onHill = newCityTile.isHill()
val onGrassland = !onHill && newCityTile.baseTerrain == "Grassland"
val onPlainsOrHill = onHill || newCityTile.baseTerrain == "Plains" // Also Mycelium in AF
val onSnowOrDesert = !onHill && (newCityTile.baseTerrain == "Snow" || newCityTile.baseTerrain == "Desert")
val isNextToMountain = newCityTile.isAdjacentTo("Mountain")
// Only count a luxary resource that we don't have yet as unique once
val newUniqueLuxuryResources = HashSet<String>()
Expand All @@ -100,13 +103,20 @@ object CityLocationTileRanker {
if (isNextToMountain) tileValue += 5
// This bonus for settling on river is a bit outsized for the importance, but otherwise they have a habit of settling 1 tile away
if (newCityTile.isAdjacentToRiver()) tileValue += 20
// We want to found the city on an oasis because it can't be improved otherwise
if (newCityTile.terrainHasUnique(UniqueType.Unbuildable)) tileValue += 3
// If we build the city on a resource tile, then we can't build any special improvements on it
if (newCityTile.resource != null) tileValue -= 4
if (newCityTile.resource != null && newCityTile.tileResource.resourceType == ResourceType.Bonus) tileValue -= 8
// Settling on bonus resources tends to waste a food
// Settling on luxuries generally speeds up our game, and settling on strategics as well, as the AI cheats and can see them.
// A city centre is the only good tile improvement on these tiles
if (onSnowOrDesert) tileValue += 4
if (newCityTile.resource != null) {
tileValue -= 10
// Applying a penalty, so we don't overvalue settling on resources by too much
if (newCityTile.tileResource.resourceType == ResourceType.Bonus && onGrassland) tileValue += 7
// Food resources on grassland increase our city centre yields
// Not as much in Rekmod, however...
if (newCityTile.tileResource.resourceType == ResourceType.Strategic && !onPlainsOrHill) tileValue -= 10
// Production resources on hills/plains increase or city centre yields
if (newCityTile.tileResource.resourceType == ResourceType.Luxury && newCityTile.tileResource.matchesFilter("Salt")) tileValue -= 30
// Players don't like seeing the AI build cities on Salt in G&K
// Settling on other generally is generally good (arguably also on Salt if BNW unhappiness penalties would apply)
}

var tiles = 0
for (i in 0..3) {
Expand Down
8 changes: 4 additions & 4 deletions core/src/com/unciv/logic/trade/TradeEvaluation.kt
Original file line number Diff line number Diff line change
Expand Up @@ -247,10 +247,10 @@ class TradeEvaluation {
TradeOfferType.Luxury_Resource -> {
return when {
civInfo.getResourceAmount(offer.name) > 1 -> 250 // fair price
civInfo.hasUnique(UniqueType.RetainHappinessFromLuxury) -> // If we retain 50% happiness, value at 375
750 - (civInfo.getMatchingUniques(UniqueType.RetainHappinessFromLuxury)
.first().params[0].toPercent() * 250).toInt()
else -> 500 // you want to take away our last lux of this type?!
civInfo.hasUnique(UniqueType.RetainHappinessFromLuxury) -> // If we retain 100% happiness, value it as a duplicate lux
600 - (civInfo.getMatchingUniques(UniqueType.RetainHappinessFromLuxury)
.first().params[0].toPercent() * 350).toInt()
else -> 600 // you want to take away our last lux of this type?!
}
}
TradeOfferType.Strategic_Resource -> {
Expand Down
Loading