diff --git a/C7/Text/c7-static-map-save-standalone.json b/C7/Text/c7-static-map-save-standalone.json index 9258bcd2..fa025dd6 100644 --- a/C7/Text/c7-static-map-save-standalone.json +++ b/C7/Text/c7-static-map-save-standalone.json @@ -71983,7 +71983,18 @@ "Kushite", "Barbarian" ], - "isBarbarian": true + "isBarbarian": true, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Rome", @@ -72046,7 +72057,18 @@ "militaristic", "commercial" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Egypt", @@ -72094,7 +72116,18 @@ "religious", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Greece", @@ -72142,7 +72175,18 @@ "commercial", "scientific" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Babylon", @@ -72188,7 +72232,18 @@ "scientific", "religious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Germany", @@ -72223,7 +72278,18 @@ "militaristic", "scientific" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Russia", @@ -72281,7 +72347,18 @@ "expansionist", "scientific" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "China", @@ -72318,7 +72395,18 @@ "militaristic", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "America", @@ -72377,7 +72465,18 @@ "expansionist", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Japan", @@ -72422,7 +72521,18 @@ "militaristic", "religious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "France", @@ -72462,7 +72572,18 @@ "commercial", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "India", @@ -72498,7 +72619,18 @@ "commercial", "religious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Persia", @@ -72546,7 +72678,18 @@ "scientific", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Aztecs", @@ -72601,7 +72744,18 @@ "militaristic", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Zululand", @@ -72636,7 +72790,18 @@ "militaristic", "expansionist" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Iroquois", @@ -72684,7 +72849,18 @@ "commercial", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "England", @@ -72732,7 +72908,18 @@ "commercial", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Mongols", @@ -72781,7 +72968,18 @@ "militaristic", "expansionist" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Spain", @@ -72831,7 +73029,18 @@ "religious", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Scandinavia", @@ -72883,7 +73092,18 @@ "militaristic", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Ottomans", @@ -72931,7 +73151,18 @@ "scientific", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Celts", @@ -72980,7 +73211,18 @@ "religious", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Arabia", @@ -73027,7 +73269,18 @@ "expansionist", "religious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Carthage", @@ -73076,7 +73329,18 @@ "industrious", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Korea", @@ -73125,7 +73389,18 @@ "commercial", "scientific" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Sumeria", @@ -73169,7 +73444,18 @@ "scientific", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Hittites", @@ -73213,7 +73499,18 @@ "commercial", "expansionist" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Netherlands", @@ -73257,7 +73554,18 @@ "agricultural", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Portugal", @@ -73312,7 +73620,18 @@ "expansionist", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Byzantines", @@ -73356,7 +73675,18 @@ "scientific", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Inca", @@ -73400,7 +73730,18 @@ "expansionist", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Maya", @@ -73445,7 +73786,18 @@ "industrious", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } } ], "strengthBonuses": [ @@ -73492,8 +73844,8 @@ "startUnitType1": "Settler", "startUnitType2": "Worker", "scoutUnitType": "Scout", - "maxRankOfWorkableTiles": 2, - "maxRankOfBarbarianCampTiles": 2, + "maxRankOfWorkableTiles": 2, + "maxRankOfBarbarianCampTiles": 2, "defaultDealDuration": 20 }, "techs": [ @@ -73811,7 +74163,7 @@ "smallIconPath": "Art\\tech chooser\\Icons\\22-engineering-small.pcx", "x": 73, "y": 610, - "flags": [ + "flags": [ "enablesBridges" ] }, @@ -75215,4 +75567,4 @@ "corruptionPercentage": 100, "militaryLaw": 1 } -} +} \ No newline at end of file diff --git a/C7/Text/c7-static-map-save.json b/C7/Text/c7-static-map-save.json index eff2c8ec..15c5e76e 100644 --- a/C7/Text/c7-static-map-save.json +++ b/C7/Text/c7-static-map-save.json @@ -74556,7 +74556,18 @@ "Kushite", "Barbarian" ], - "isBarbarian": true + "isBarbarian": true, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Rome", @@ -74619,7 +74630,18 @@ "militaristic", "commercial" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Egypt", @@ -74667,7 +74689,18 @@ "religious", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Greece", @@ -74715,7 +74748,18 @@ "commercial", "scientific" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Babylon", @@ -74761,7 +74805,18 @@ "scientific", "religious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Germany", @@ -74796,7 +74851,18 @@ "militaristic", "scientific" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Russia", @@ -74854,7 +74920,18 @@ "expansionist", "scientific" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "China", @@ -74891,7 +74968,18 @@ "militaristic", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "America", @@ -74950,7 +75038,18 @@ "expansionist", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Japan", @@ -74995,7 +75094,18 @@ "militaristic", "religious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "France", @@ -75035,7 +75145,18 @@ "commercial", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "India", @@ -75071,7 +75192,18 @@ "commercial", "religious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Persia", @@ -75119,7 +75251,18 @@ "scientific", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Aztecs", @@ -75174,7 +75317,18 @@ "militaristic", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Zululand", @@ -75209,7 +75363,18 @@ "militaristic", "expansionist" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Iroquois", @@ -75257,7 +75422,18 @@ "commercial", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "England", @@ -75305,7 +75481,18 @@ "commercial", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Mongols", @@ -75354,7 +75541,18 @@ "militaristic", "expansionist" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Spain", @@ -75404,7 +75602,18 @@ "religious", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Scandinavia", @@ -75456,7 +75665,18 @@ "militaristic", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Ottomans", @@ -75504,7 +75724,18 @@ "scientific", "industrious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Celts", @@ -75553,7 +75784,18 @@ "religious", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Arabia", @@ -75600,7 +75842,18 @@ "expansionist", "religious" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Carthage", @@ -75649,7 +75902,18 @@ "industrious", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Korea", @@ -75698,7 +75962,18 @@ "commercial", "scientific" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Sumeria", @@ -75742,7 +76017,18 @@ "scientific", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Hittites", @@ -75786,7 +76072,18 @@ "commercial", "expansionist" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Netherlands", @@ -75830,7 +76127,18 @@ "agricultural", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Portugal", @@ -75885,7 +76193,18 @@ "expansionist", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Byzantines", @@ -75929,7 +76248,18 @@ "scientific", "seafaring" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Inca", @@ -75973,7 +76303,18 @@ "expansionist", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } }, { "name": "Maya", @@ -76018,7 +76359,18 @@ "industrious", "agricultural" ], - "isBarbarian": false + "isBarbarian": false, + "adjustments": { + "distancePenaltyRadius": 4, + "commerceYieldBonus": 2, + "distancePenalty": -2, + "foodYieldBonus": 5, + "productionYieldBonus": 3, + "hillsBonus": 10, + "luxuryResourceBonus": 15, + "strategicResourceBonus": 20, + "waterBonus": 10 + } } ], "strengthBonuses": [ @@ -76065,8 +76417,8 @@ "startUnitType1": "Settler", "startUnitType2": "Worker", "scoutUnitType": "Scout", - "maxRankOfWorkableTiles": 2, - "maxRankOfBarbarianCampTiles": 2, + "maxRankOfWorkableTiles": 2, + "maxRankOfBarbarianCampTiles": 2, "defaultDealDuration": 20 }, "techs": [ @@ -76384,7 +76736,7 @@ "smallIconPath": "Art\\tech chooser\\Icons\\22-engineering-small.pcx", "x": 73, "y": 610, - "flags": [ + "flags": [ "enablesBridges" ] }, @@ -77788,4 +78140,4 @@ "corruptionPercentage": 100, "militaryLaw": 1 } -} +} \ No newline at end of file diff --git a/C7Engine/AI/ChooseProducible.cs b/C7Engine/AI/ChooseProducible.cs index 9e8d1d82..f5b0313e 100644 --- a/C7Engine/AI/ChooseProducible.cs +++ b/C7Engine/AI/ChooseProducible.cs @@ -73,9 +73,9 @@ private static float ScoreUnit(ProducibleStats stats, City city, Player player, temp.location = city.location; //////////////////////////////////////////////////////////////////// - /// + /// /// Raw score adjustments based on unit stats. - /// + /// // Weight the unit's attack and defense score by comparing it to the // best stat available. @@ -89,9 +89,9 @@ private static float ScoreUnit(ProducibleStats stats, City city, Player player, score -= populationCostPenalty; //////////////////////////////////////////////////////////////////// - /// + /// /// Naval units - /// + /// if (unit.categories.Contains("Sea")) { // Don't bother building naval units unless we border the ocean. @@ -108,9 +108,9 @@ private static float ScoreUnit(ProducibleStats stats, City city, Player player, } //////////////////////////////////////////////////////////////////// - /// + /// /// Adjustments based on the city situation. - /// + /// // Prioritize defending the city if it is unguarded. if (!cityGuarded && unit.defense == 0) { @@ -129,9 +129,9 @@ private static float ScoreUnit(ProducibleStats stats, City city, Player player, } //////////////////////////////////////////////////////////////////// - /// + /// /// Adjustments for settlers and workers. - /// + /// // Don't built a worker or settler if we don't have enough population. if (CityIsTooSmall(city, unit)) { @@ -315,10 +315,10 @@ private static int NumberOfReachableOpenCitySpots(City city) { // Note: GetScoredSettlerCandidates already excludes tiles with // settlers moving towards them. - Dictionary scoredLocations = SettlerLocationAI.GetScoredSettlerCandidates(city.location, city.owner); - List> orderedScores = scoredLocations.OrderByDescending(t => t.Value).ToList(); + Dictionary scoredLocations = SettlerLocationAI.GetScoredSettlerCandidates(city.location, city.owner); + List> orderedScores = scoredLocations.OrderByDescending(t => t.Value).ToList(); - foreach ((Tile tile, int score) in orderedScores) { + foreach ((Tile tile, float score) in orderedScores) { if (scoredLocations.ContainsKey(tile)) { ++result; diff --git a/C7Engine/AI/StrategicAI/UtilityCalculations.cs b/C7Engine/AI/StrategicAI/UtilityCalculations.cs index 781b317d..2560de50 100644 --- a/C7Engine/AI/StrategicAI/UtilityCalculations.cs +++ b/C7Engine/AI/StrategicAI/UtilityCalculations.cs @@ -10,15 +10,15 @@ namespace C7Engine.AI.StrategicAI { /// public class UtilityCalculations { - private static readonly int POSSIBLE_CITY_LOCATION_SCORE = 2; //how much weight to give to each possible city location - private static readonly int TILE_SCORE_DIVIDER = 10; //how much to divide each location's tile score by + private static readonly int PossibleCityLocationScore = 2; //how much weight to give to each possible city location + private static readonly int TileScoreDivider = 10; //how much to divide each location's tile score by public static int CalculateAvailableLandScore(Player player) { //Figure out if there's land to settle, and how much - Dictionary possibleLocations = SettlerLocationAI.GetScoredSettlerCandidates(player.cities[0].location, player); - int score = possibleLocations.Count * POSSIBLE_CITY_LOCATION_SCORE; + Dictionary possibleLocations = SettlerLocationAI.GetScoredSettlerCandidates(player.cities[0].location, player); + int score = possibleLocations.Count * PossibleCityLocationScore; foreach (int i in possibleLocations.Values) { - score += i / TILE_SCORE_DIVIDER; + score += i / TileScoreDivider; } return score; } diff --git a/C7Engine/AI/UnitAI/SettlerAI.cs b/C7Engine/AI/UnitAI/SettlerAI.cs index e90dfd03..34d94697 100644 --- a/C7Engine/AI/UnitAI/SettlerAI.cs +++ b/C7Engine/AI/UnitAI/SettlerAI.cs @@ -1,11 +1,10 @@ -using System; using C7Engine.Pathing; using C7GameData; using C7GameData.AIData; using Serilog; namespace C7Engine { - public class SettlerAI : C7GameData.UnitAI { + public class SettlerAI : UnitAI { private static ILogger log = Log.ForContext(); public SettlerAIData data; @@ -17,7 +16,7 @@ public static SettlerAIData MakeAiData(MapUnit unit, Player player) { settlerAiData.destination = unit.location; log.Information("No cities yet! Set AI for unit to settler AI with destination of " + settlerAiData.destination); } else { - settlerAiData.destination = SettlerLocationAI.findSettlerLocation(unit.location, player); + settlerAiData.destination = SettlerLocationAI.FindSettlerLocation(unit.location, player); if (settlerAiData.destination == Tile.NONE) { //This is possible if all tiles within 4 tiles of a city are either not land, or already claimed //by another colonist. Longer-term, the AI shouldn't be building settlers if that is the case, diff --git a/C7Engine/AI/UnitAI/SettlerLocationAI.cs b/C7Engine/AI/UnitAI/SettlerLocationAI.cs index 97e18dcb..3ff32db9 100644 --- a/C7Engine/AI/UnitAI/SettlerLocationAI.cs +++ b/C7Engine/AI/UnitAI/SettlerLocationAI.cs @@ -1,24 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; using C7GameData; +using System.Collections.Generic; using System.Linq; -using C7GameData.AIData; -using Serilog; namespace C7Engine { public class SettlerLocationAI { - private static ILogger log = Log.ForContext(); - - //Eventually, there should be different weights based on whether the AI already - //has the resource or not (more important to secure ones that they don't have). - //But since we don't have trade networks yet, for now there's only one value. - static int STRATEGIC_RESOURCE_BONUS = 20; - static int LUXURY_RESOURCE_BONUS = 15; + private static readonly Serilog.ILogger Log = Serilog.Log.ForContext(); //Figures out where to plant Settlers - public static Tile findSettlerLocation(Tile start, Player player) { - Dictionary scores = GetScoredSettlerCandidates(start, player); + public static Tile FindSettlerLocation(Tile start, Player player) { + Dictionary scores = GetScoredSettlerCandidates(start, player); if (scores.Count == 0 || scores.Values.Max() <= 0) { return Tile.NONE; //nowhere to settle } @@ -27,39 +17,39 @@ public static Tile findSettlerLocation(Tile start, Player player) { return result; } - public static Dictionary GetScoredSettlerCandidates(Tile start, Player player) { + public static Dictionary GetScoredSettlerCandidates(Tile start, Player player) { List playerUnits = player.units; // TODO: handle settling other continents IEnumerable candidates = player.tileKnowledge.AllKnownTiles().Where(t => !IsInvalidCityLocation(t) && t.continent == start.continent); - Dictionary scores = AssignTileScores(start, player, candidates, playerUnits.FindAll(u => u.unitType.name == "Settler")); + Dictionary scores = AssignTileScores(start, player, candidates, playerUnits.FindAll(u => u.unitType.name == "Settler")); return scores; } - private static Dictionary AssignTileScores(Tile startTile, Player player, IEnumerable candidates, List playerSettlers) { - Dictionary scores = new Dictionary(); + private static Dictionary AssignTileScores(Tile startTile, Player player, IEnumerable candidates, List playerSettlers) { + Dictionary scores = new(); candidates = candidates.Where(t => !SettlerAlreadyMovingTowardsTile(t, playerSettlers) && t.IsAllowCities()); foreach (Tile t in candidates) { - int score = GetTileYieldScore(t, player); + float score = GetTileYieldScore(t, player); //For simplicity's sake, I'm only going to look at immediate neighbors here, but //a lot more things should be considered over time. foreach (Tile nt in t.neighbors.Values) { score += GetTileYieldScore(nt, player); } - //TODO: Also look at the next ring out, with lower weights. + //TODO #802: Also look at the next ring out, with lower weights. //Prefer hills for defense, and coast for boats and such. if (t.baseTerrainType.Key == "hills") { - score += 10; + score += player.civilization.Adjustments.HillsBonus; } if (t.NeighborsWater()) { - score += 10; + score += player.civilization.Adjustments.WaterBonus; } //Lower scores if they are far away - int preDistanceScore = score; + float preDistanceScore = score; int distance = startTile.distanceTo(t); - if (distance > 4) { - score -= distance * 2; + if (distance > player.civilization.Adjustments.DistancePenaltyRadius) { + score += player.civilization.Adjustments.DistancePenalty * distance; } if (distance > 8) { score -= distance * 4; @@ -75,15 +65,15 @@ private static Dictionary AssignTileScores(Tile startTile, Player pla return scores; } - private static int GetTileYieldScore(Tile t, Player owner) { - int score = t.foodYield(owner).yield * 5; - score += t.productionYield(owner).yield * 3; - score += t.commerceYield(owner).yield * 2; + private static float GetTileYieldScore(Tile t, Player owner) { + float score = owner.civilization.Adjustments.FoodYieldBonus * t.foodYield(owner).yield; + score += owner.civilization.Adjustments.ProductionYieldBonus * t.productionYield(owner).yield; + score += owner.civilization.Adjustments.CommerceYieldBonus * t.commerceYield(owner).yield; if (owner.KnowsAboutResource(t.Resource)) { if (t.Resource.Category == ResourceCategory.STRATEGIC) { - score += STRATEGIC_RESOURCE_BONUS; + score += owner.civilization.Adjustments.StrategicResourceBonus; } else if (t.Resource.Category == ResourceCategory.LUXURY) { - score += LUXURY_RESOURCE_BONUS; + score += owner.civilization.Adjustments.LuxuryResourceBonus; } } return score; diff --git a/C7Engine/C7GameData/Civilization.cs b/C7Engine/C7GameData/Civilization.cs index 010a33be..30ac842d 100644 --- a/C7Engine/C7GameData/Civilization.cs +++ b/C7Engine/C7GameData/Civilization.cs @@ -49,6 +49,28 @@ public Civilization(string name) { public bool isBarbarian = false; + public class SettlerTileAdjustments { + public int DistancePenaltyRadius = 4; + + // TODO: Eventually, there should be different weights based on whether the AI already + // has the resource or not (more important to secure ones that they don't have). + // But since we don't have trade networks yet, for now there's only one value. + + // multipliers + public float CommerceYieldBonus = 2; + public float DistancePenalty = -2; + public float FoodYieldBonus = 5; + public float ProductionYieldBonus = 3; + + // constants + public float HillsBonus = 10; + public float LuxuryResourceBonus = 15; + public float StrategicResourceBonus = 20; + public float WaterBonus = 10; + } + + public SettlerTileAdjustments Adjustments = new(); + [JsonIgnore] public UnitPrototype uniqueUnit;