diff --git a/android/Images/OtherIcons/Pillage.png b/android/Images/OtherIcons/Pillage.png index dfa9e31dd0..490aaa13a5 100644 Binary files a/android/Images/OtherIcons/Pillage.png and b/android/Images/OtherIcons/Pillage.png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index 1cb04a2e28..49772994e0 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -6,497 +6,497 @@ filter: MipMapLinearLinear,MipMapLinearLinear repeat: none BuildingIcons/Angkor Wat rotate: false - xy: 383, 1741 + xy: 281, 1741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Apollo Program rotate: false - xy: 587, 1741 + xy: 485, 1741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Aqueduct rotate: false - xy: 689, 1741 + xy: 587, 1741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Armory rotate: false - xy: 277, 1639 + xy: 1097, 1741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Bank rotate: false - xy: 787, 1639 + xy: 685, 1639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Barracks rotate: false - xy: 1093, 1639 + xy: 991, 1639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Bazaar rotate: false - xy: 1195, 1639 + xy: 1199, 1741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Broadcast Tower rotate: false - xy: 1833, 1841 + xy: 1403, 1761 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Burial Tomb rotate: false - xy: 143, 404 + xy: 1531, 1841 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Castle rotate: false - xy: 234, 200 + xy: 1709, 1739 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Chichen Itza rotate: false - xy: 1811, 1739 + xy: 334, 1537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Circus rotate: false - xy: 306, 813 + xy: 436, 1537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Circus Maximus rotate: false - xy: 306, 711 + xy: 334, 1333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Colloseum rotate: false - xy: 334, 1231 + xy: 334, 1129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Cristo Redentor rotate: false - xy: 640, 1435 + xy: 538, 1231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Eiffel Tower rotate: false - xy: 844, 1435 + xy: 640, 1129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Factory rotate: false - xy: 640, 1129 + xy: 1048, 1537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Forbidden Palace rotate: false - xy: 844, 1231 + xy: 640, 925 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Forge rotate: false - xy: 1048, 1435 + xy: 844, 1129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Granary rotate: false - xy: 742, 925 + xy: 1150, 1333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hagia Sophia rotate: false - xy: 946, 925 + xy: 1150, 1027 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hanging Gardens rotate: false - xy: 1048, 1027 + xy: 1150, 925 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Harbor rotate: false - xy: 1150, 1129 + xy: 408, 823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hermitage rotate: false - xy: 1048, 925 + xy: 408, 721 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hospital rotate: false - xy: 510, 721 + xy: 714, 721 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hydro Plant rotate: false - xy: 612, 823 + xy: 816, 823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Ironworks rotate: false - xy: 918, 823 + xy: 1122, 823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Krepost rotate: false - xy: 1122, 823 + xy: 1252, 1333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Leaning Tower of Pisa rotate: false - xy: 1252, 1231 + xy: 1224, 823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Library rotate: false - xy: 1252, 1129 + xy: 1224, 721 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Lighthouse rotate: false - xy: 1252, 1027 + xy: 1297, 1639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Machu Pichu rotate: false - xy: 1399, 1659 + xy: 1807, 1637 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Market rotate: false - xy: 1705, 1637 + xy: 1354, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Military Academy rotate: false - xy: 1354, 1027 + xy: 1456, 1535 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Mint rotate: false - xy: 1456, 1557 + xy: 1558, 1433 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Monastery rotate: false - xy: 1558, 1557 + xy: 1456, 1229 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Monument rotate: false - xy: 1456, 1353 + xy: 1558, 1331 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Museum rotate: false - xy: 1558, 1353 + xy: 1456, 1127 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/National College rotate: false - xy: 1456, 1047 + xy: 1762, 1433 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Notre Dame rotate: false - xy: 1456, 945 + xy: 1456, 1025 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Nuclear Plant rotate: false - xy: 1558, 945 + xy: 1660, 1229 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Observatory rotate: false - xy: 1660, 1433 + xy: 1864, 1433 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Opera House rotate: false - xy: 1762, 1433 + xy: 1762, 1229 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Oxford University rotate: false - xy: 1660, 1229 + xy: 1660, 1025 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Palace rotate: false - xy: 1762, 1331 + xy: 1762, 1127 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Paper Maker rotate: false - xy: 1864, 1433 + xy: 1864, 1229 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Porcelain Tower rotate: false - xy: 1762, 923 + xy: 1632, 821 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Public School rotate: false - xy: 1428, 721 + xy: 1530, 719 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Research Lab rotate: false - xy: 1734, 719 + xy: 245, 506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Booster rotate: false - xy: 1938, 719 + xy: 132, 67 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Cockpit rotate: false - xy: 1938, 617 + xy: 245, 302 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Engine rotate: false - xy: 286, 608 + xy: 347, 302 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Stasis Chamber rotate: false - xy: 286, 506 + xy: 234, 200 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Seaport rotate: false - xy: 388, 609 + xy: 488, 619 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Sistine Chapel rotate: false - xy: 592, 517 + xy: 1100, 619 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Solar Plant rotate: false - xy: 694, 517 + xy: 1304, 619 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Spaceship Factory rotate: false - xy: 898, 619 + xy: 1406, 618 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stable rotate: false - xy: 1102, 619 + xy: 1814, 617 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stadium rotate: false - xy: 1000, 517 + xy: 1916, 617 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stock Exchange rotate: false - xy: 1306, 619 + xy: 449, 303 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stone Works rotate: false - xy: 1408, 619 + xy: 653, 517 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stonehenge rotate: false - xy: 1306, 517 + xy: 551, 415 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Sydney Opera House rotate: false - xy: 1918, 515 + xy: 755, 415 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Taj Mahal rotate: false - xy: 1510, 435 + xy: 959, 517 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Temple rotate: false - xy: 1612, 414 + xy: 755, 313 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Great Library rotate: false - xy: 1714, 413 + xy: 857, 415 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Great Lighthouse rotate: false - xy: 1816, 413 + xy: 1061, 517 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Louvre rotate: false - xy: 1918, 413 + xy: 857, 313 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Oracle rotate: false - xy: 449, 405 + xy: 959, 415 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Pyramids rotate: false - xy: 551, 415 + xy: 1163, 517 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Theatre rotate: false - xy: 755, 415 + xy: 1061, 415 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -510,56 +510,56 @@ BuildingIcons/University index: -1 BuildingIcons/Walls rotate: false - xy: 438, 302 + xy: 1367, 516 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Windmill rotate: false - xy: 653, 313 + xy: 1469, 413 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Workshop rotate: false - xy: 1061, 313 + xy: 1673, 413 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 FlagIcons/Dutch rotate: false - xy: 2, 303 + xy: 1271, 1863 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/English rotate: false - xy: 2, 173 + xy: 2, 325 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/French rotate: false - xy: 2, 43 + xy: 1401, 1863 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/German rotate: false - xy: 1471, 1863 + xy: 2, 195 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Italian rotate: false - xy: 1601, 1863 + xy: 2, 65 size: 128, 128 orig: 128, 128 offset: 0, 0 @@ -608,735 +608,735 @@ ImprovementIcons/Academy index: -1 ImprovementIcons/Ancient ruins rotate: false - xy: 281, 1741 + xy: 1879, 1943 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Camp rotate: false - xy: 132, 98 + xy: 1837, 1841 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City ruins rotate: false - xy: 334, 1435 + xy: 538, 1537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Customs house rotate: false - xy: 538, 1231 + xy: 334, 925 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Farm rotate: false - xy: 742, 1231 + xy: 538, 925 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fishing Boats rotate: false - xy: 538, 925 + xy: 946, 1333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Landmark rotate: false - xy: 1252, 1435 + xy: 1252, 1027 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Lumber mill rotate: false - xy: 1224, 721 + xy: 1603, 1637 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Manufactory rotate: false - xy: 1501, 1659 + xy: 1909, 1637 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Mine rotate: false - xy: 1326, 823 + xy: 1558, 1535 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Oil well rotate: false - xy: 1660, 1331 + xy: 1660, 1127 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Plantation rotate: false - xy: 1864, 1127 + xy: 1428, 720 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Quarry rotate: false - xy: 1530, 843 + xy: 1632, 719 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Railroad rotate: false - xy: 1632, 822 + xy: 1836, 719 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Railroad rotate: false - xy: 1632, 822 + xy: 1836, 719 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Road rotate: false - xy: 1734, 617 + xy: 143, 373 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Trading post rotate: false - xy: 959, 415 + xy: 1061, 313 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/BackArrow rotate: false - xy: 234, 46 + xy: 277, 1587 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Banner rotate: false - xy: 991, 1639 + xy: 889, 1639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Circle rotate: false - xy: 1291, 1865 + xy: 2, 577 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 OtherIcons/City rotate: false - xy: 334, 1537 + xy: 436, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Crosshair rotate: false - xy: 334, 1027 + xy: 742, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DisbandUnit rotate: false - xy: 844, 1537 + xy: 640, 1231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Fire rotate: false - xy: 946, 1435 + xy: 742, 1129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MenuIcon rotate: false - xy: 1354, 1333 + xy: 1354, 925 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pentagon rotate: false - xy: 1864, 1331 + xy: 1864, 1025 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pillage rotate: false - xy: 2, 959 - size: 200, 200 - orig: 200, 200 + xy: 1428, 822 + size: 100, 100 + orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Shield rotate: false - xy: 592, 619 + xy: 794, 619 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Sleep rotate: false - xy: 796, 619 + xy: 1202, 619 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Star rotate: false - xy: 132, 2 + xy: 234, 2 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 OtherIcons/Stop rotate: false - xy: 1408, 517 + xy: 755, 517 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/civTableBackground rotate: false - xy: 1471, 1993 + xy: 1271, 1993 size: 300, 50 orig: 300, 50 offset: 0, 0 index: -1 OtherIcons/tileTableBackground rotate: false - xy: 2, 555 + xy: 1089, 1843 size: 180, 200 orig: 180, 200 offset: 0, 0 index: -1 OtherIcons/whiteDot rotate: false - xy: 184, 754 + xy: 182, 710 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 PolicyIcons/Aristocracy rotate: false - xy: 1977, 1993 + xy: 1981, 1993 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Citizenship rotate: false - xy: 277, 1587 + xy: 2, 13 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Civil Society rotate: false - xy: 1265, 363 + xy: 336, 46 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Collective Rule rotate: false - xy: 286, 46 + xy: 1469, 361 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Constitution rotate: false - xy: 1317, 363 + xy: 1775, 463 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Democracy rotate: false - xy: 338, 46 + xy: 1877, 565 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Discipline rotate: false - xy: 1369, 363 + xy: 54, 13 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Entrepreneurship rotate: false - xy: 390, 46 + xy: 1521, 361 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Facism rotate: false - xy: 442, 46 + xy: 1929, 565 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Religion rotate: false - xy: 1265, 311 + xy: 1573, 361 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Speech rotate: false - xy: 1317, 311 + xy: 1625, 361 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Thought rotate: false - xy: 1369, 311 + xy: 1677, 361 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Humanism rotate: false - xy: 1421, 363 + xy: 388, 46 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Landed Elite rotate: false - xy: 1421, 311 + xy: 1775, 411 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Legalism rotate: false - xy: 494, 46 + xy: 1827, 463 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mandate Of Heaven rotate: false - xy: 1966, 1585 + xy: 1827, 411 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mercantilism rotate: false - xy: 1966, 1533 + xy: 1469, 309 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Meritocracy rotate: false - xy: 1966, 1481 + xy: 1521, 309 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Militarism rotate: false - xy: 1966, 1429 + xy: 1573, 309 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Caste rotate: false - xy: 1966, 1377 + xy: 1625, 309 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Tradition rotate: false - xy: 1966, 1325 + xy: 1677, 309 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Monarchy rotate: false - xy: 1966, 1273 + xy: 1966, 1585 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Oligarchy rotate: false - xy: 1966, 1221 + xy: 1966, 1533 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Organized Religion rotate: false - xy: 1966, 1169 + xy: 1966, 1481 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Patronage rotate: false - xy: 1966, 1117 + xy: 1966, 1429 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Police State rotate: false - xy: 1966, 1065 + xy: 1966, 1377 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Populism rotate: false - xy: 1966, 1013 + xy: 1966, 1325 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Professional Army rotate: false - xy: 1966, 961 + xy: 1966, 1273 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Protectionism rotate: false - xy: 540, 261 + xy: 1966, 1221 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Reformation rotate: false - xy: 540, 209 + xy: 1966, 1169 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Representation rotate: false - xy: 592, 261 + xy: 1966, 1117 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Republic rotate: false - xy: 540, 157 + xy: 1966, 1065 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scientific Revolution rotate: false - xy: 592, 209 + xy: 1966, 1013 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Secularism rotate: false - xy: 644, 261 + xy: 1966, 961 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Sovereignty rotate: false - xy: 540, 105 + xy: 1981, 565 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Theocracy rotate: false - xy: 592, 157 + xy: 106, 13 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Total War rotate: false - xy: 644, 209 + xy: 158, 15 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Trade Unions rotate: false - xy: 696, 261 + xy: 438, 250 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Universal Suffrage rotate: false - xy: 592, 105 + xy: 438, 198 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Warrior Code rotate: false - xy: 644, 157 + xy: 438, 146 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ResourceIcons/Aluminum rotate: false - xy: 1875, 1943 + xy: 1777, 1943 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Bananas rotate: false - xy: 685, 1639 + xy: 583, 1639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cattle rotate: false - xy: 1403, 1761 + xy: 1939, 1841 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Coal rotate: false - xy: 538, 1537 + xy: 640, 1537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cotton rotate: false - xy: 538, 1333 + xy: 436, 1129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Deer rotate: false - xy: 640, 1333 + xy: 436, 1027 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Dyes rotate: false - xy: 334, 925 + xy: 742, 1333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Fish rotate: false - xy: 1048, 1537 + xy: 844, 1231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Furs rotate: false - xy: 640, 925 + xy: 1048, 1333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gems rotate: false - xy: 1048, 1333 + xy: 946, 1129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gold rotate: false - xy: 1150, 1435 + xy: 1048, 1231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Horses rotate: false - xy: 510, 823 + xy: 714, 823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Incense rotate: false - xy: 612, 721 + xy: 816, 721 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Iron rotate: false - xy: 714, 721 + xy: 918, 721 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Ivory rotate: false - xy: 918, 721 + xy: 1122, 721 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Marble rotate: false - xy: 1603, 1659 + xy: 1354, 1537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Oil rotate: false - xy: 1762, 1535 + xy: 1558, 1025 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Pearls rotate: false - xy: 1762, 1229 + xy: 1864, 1127 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sheep rotate: false - xy: 490, 619 + xy: 692, 619 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silk rotate: false - xy: 490, 517 + xy: 896, 619 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silver rotate: false - xy: 694, 619 + xy: 998, 619 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Spices rotate: false - xy: 898, 517 + xy: 1712, 617 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Stone rotate: false - xy: 1204, 517 + xy: 551, 517 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sugar rotate: false - xy: 1714, 515 + xy: 857, 517 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Uranium rotate: false - xy: 1367, 415 + xy: 1265, 313 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Whales rotate: false - xy: 438, 98 + xy: 1367, 312 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wheat rotate: false - xy: 551, 313 + xy: 1469, 515 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wine rotate: false - xy: 755, 313 + xy: 1571, 515 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Acquire rotate: false - xy: 184, 506 + xy: 1573, 1943 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/CityConnection rotate: false - xy: 436, 1537 + xy: 334, 1231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/City_Center_(Civ6) rotate: false - xy: 334, 1333 + xy: 436, 1333 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1378,546 +1378,546 @@ StatIcons/Malcontent index: -1 StatIcons/Movement rotate: false - xy: 1456, 1251 + xy: 1762, 1535 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Population rotate: false - xy: 887, 1843 + xy: 2, 959 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Production rotate: false - xy: 2, 757 + xy: 887, 1843 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/RangedStrength rotate: false - xy: 1632, 720 + xy: 1938, 821 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Resistance rotate: false - xy: 1836, 719 + xy: 347, 506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Science rotate: false - xy: 1089, 1843 + xy: 2, 757 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Specialist rotate: false - xy: 1000, 619 + xy: 1610, 617 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Strength rotate: false - xy: 1510, 537 + xy: 551, 313 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Acoustics rotate: false - xy: 184, 608 + xy: 182, 608 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Agriculture rotate: false - xy: 1773, 1943 + xy: 1675, 1943 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Animal Husbandry rotate: false - xy: 485, 1741 + xy: 383, 1741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Pasture rotate: false - xy: 485, 1741 + xy: 383, 1741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archaeology rotate: false - xy: 791, 1741 + xy: 689, 1741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archery rotate: false - xy: 995, 1741 + xy: 893, 1741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Architecture rotate: false - xy: 1097, 1741 + xy: 995, 1741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Astronomy rotate: false - xy: 481, 1639 + xy: 379, 1639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Banking rotate: false - xy: 889, 1639 + xy: 787, 1639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Biology rotate: false - xy: 1301, 1763 + xy: 1195, 1639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Bronze Working rotate: false - xy: 1935, 1841 + xy: 143, 475 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Calendar rotate: false - xy: 132, 302 + xy: 1633, 1841 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chemistry rotate: false - xy: 1709, 1739 + xy: 306, 711 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Medical Lab rotate: false - xy: 1709, 1739 + xy: 306, 711 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chivalry rotate: false - xy: 1913, 1739 + xy: 334, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Civil Service rotate: false - xy: 436, 1435 + xy: 538, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Combustion rotate: false - xy: 436, 1333 + xy: 436, 1231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Compass rotate: false - xy: 640, 1537 + xy: 640, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Computers rotate: false - xy: 334, 1129 + xy: 742, 1537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Construction rotate: false - xy: 436, 1231 + xy: 334, 1027 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Currency rotate: false - xy: 436, 1129 + xy: 844, 1537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Dynamite rotate: false - xy: 436, 1027 + xy: 844, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Ecology rotate: false - xy: 538, 1129 + xy: 946, 1537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Economics rotate: false - xy: 640, 1231 + xy: 436, 925 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Education rotate: false - xy: 742, 1333 + xy: 538, 1027 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Electricity rotate: false - xy: 946, 1537 + xy: 742, 1231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Electronics rotate: false - xy: 436, 925 + xy: 844, 1333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Engineering rotate: false - xy: 538, 1027 + xy: 946, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Fertilizer rotate: false - xy: 844, 1333 + xy: 640, 1027 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Flight rotate: false - xy: 640, 1027 + xy: 1048, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Future Tech rotate: false - xy: 742, 1027 + xy: 1150, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Guilds rotate: false - xy: 1048, 1129 + xy: 1150, 1129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Gunpowder rotate: false - xy: 1150, 1231 + xy: 1048, 925 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Horseback Riding rotate: false - xy: 408, 823 + xy: 612, 823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Industrialization rotate: false - xy: 714, 823 + xy: 918, 823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Iron Working rotate: false - xy: 816, 823 + xy: 1020, 823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Machinery rotate: false - xy: 1297, 1639 + xy: 1705, 1637 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Masonry rotate: false - xy: 1909, 1637 + xy: 1354, 1231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mass Media (retired) rotate: false - xy: 1354, 1537 + xy: 1354, 1129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mathematics rotate: false - xy: 1354, 1435 + xy: 1354, 1027 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metal Casting rotate: false - xy: 1354, 1231 + xy: 1326, 823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metallurgy rotate: false - xy: 1354, 1129 + xy: 1326, 721 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Military Science rotate: false - xy: 1354, 925 + xy: 1456, 1433 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mining rotate: false - xy: 1326, 721 + xy: 1456, 1331 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nanotechnology rotate: false - xy: 1558, 1251 + xy: 1660, 1331 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Navigation rotate: false - xy: 1558, 1149 + xy: 1864, 1535 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nuclear Fission rotate: false - xy: 1558, 1047 + xy: 1558, 1127 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Optics rotate: false - xy: 1864, 1535 + xy: 1864, 1331 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Particle Physics rotate: false - xy: 1660, 1127 + xy: 1762, 1025 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pharmaceuticals rotate: false - xy: 1660, 1025 + xy: 1558, 923 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Philosophy rotate: false - xy: 1762, 1127 + xy: 1660, 923 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Physics rotate: false - xy: 1864, 1229 + xy: 1762, 923 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Plastics rotate: false - xy: 1864, 1025 + xy: 1530, 821 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pottery rotate: false - xy: 1864, 923 + xy: 1734, 821 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Printing Press rotate: false - xy: 1428, 823 + xy: 1836, 821 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Radio rotate: false - xy: 1530, 741 + xy: 1734, 719 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Refrigeration rotate: false - xy: 1734, 821 + xy: 1938, 719 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Replacable Parts rotate: false - xy: 1836, 821 + xy: 284, 608 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rifling rotate: false - xy: 1632, 618 + xy: 347, 404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Robotics rotate: false - xy: 1836, 617 + xy: 132, 271 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rocketry rotate: false - xy: 1938, 821 + xy: 132, 169 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Sailing rotate: false - xy: 347, 404 + xy: 234, 98 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Satellites rotate: false - xy: 336, 302 + xy: 336, 200 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Scientific Theory rotate: false - xy: 336, 200 + xy: 336, 98 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steam Power rotate: false - xy: 1204, 619 + xy: 449, 507 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steel rotate: false - xy: 1102, 517 + xy: 449, 405 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/The Wheel rotate: false - xy: 653, 415 + xy: 959, 313 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Theology rotate: false - xy: 857, 415 + xy: 1265, 517 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Trapping rotate: false - xy: 1061, 415 + xy: 1163, 415 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Writing rotate: false - xy: 1163, 313 + xy: 1775, 515 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1931,14 +1931,14 @@ TerrainIcons/CrosshatchHexagon index: -1 TerrainIcons/Flood plains rotate: false - xy: 742, 1129 + xy: 1150, 1537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Forest rotate: false - xy: 946, 1333 + xy: 742, 1027 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1952,350 +1952,350 @@ TerrainIcons/Hexagon index: -1 TerrainIcons/HexagonBorder rotate: false - xy: 2, 433 + xy: 2, 455 size: 139, 120 orig: 139, 120 offset: 0, 0 index: -1 TerrainIcons/Hill rotate: false - xy: 1150, 1027 + xy: 510, 823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Jungle rotate: false - xy: 1020, 823 + xy: 1252, 1537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Lakes rotate: false - xy: 1122, 721 + xy: 1252, 1231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Marsh rotate: false - xy: 1807, 1637 + xy: 1354, 1333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Mountain rotate: false - xy: 1558, 1455 + xy: 1660, 1433 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Oasis rotate: false - xy: 1660, 1535 + xy: 1762, 1331 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/road rotate: false - xy: 2, 30 + xy: 182, 595 size: 61, 11 orig: 61, 11 offset: 0, 0 index: -1 UnitIcons/Archer rotate: false - xy: 893, 1741 + xy: 791, 1741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Artillery rotate: false - xy: 379, 1639 + xy: 277, 1639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ballista rotate: false - xy: 583, 1639 + xy: 481, 1639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Battleship rotate: false - xy: 1199, 1741 + xy: 1093, 1639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Bowman rotate: false - xy: 1731, 1841 + xy: 1301, 1761 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Camel Archer rotate: false - xy: 132, 200 + xy: 1735, 1841 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cannon rotate: false - xy: 245, 404 + xy: 1505, 1739 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Caravel rotate: false - xy: 234, 302 + xy: 1607, 1739 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Catapult rotate: false - xy: 234, 98 + xy: 1811, 1739 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cavalry rotate: false - xy: 1505, 1761 + xy: 1913, 1739 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Chariot Archer rotate: false - xy: 1607, 1761 + xy: 306, 813 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Companion Cavalry rotate: false - xy: 538, 1435 + xy: 538, 1333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Crossbowman rotate: false - xy: 742, 1537 + xy: 640, 1333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Destroyer rotate: false - xy: 742, 1435 + xy: 538, 1129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Frigate rotate: false - xy: 1150, 1537 + xy: 946, 1231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Galleass rotate: false - xy: 844, 1129 + xy: 742, 925 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Gatling Gun rotate: false - xy: 946, 1231 + xy: 844, 1027 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Artist rotate: false - xy: 844, 1027 + xy: 844, 925 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Engineer rotate: false - xy: 946, 1129 + xy: 946, 1027 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great General rotate: false - xy: 1048, 1231 + xy: 1048, 1129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Merchant rotate: false - xy: 1150, 1333 + xy: 1150, 1231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Scientist rotate: false - xy: 844, 925 + xy: 946, 925 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great War Infantry rotate: false - xy: 946, 1027 + xy: 1048, 1027 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Hoplite rotate: false - xy: 1150, 925 + xy: 510, 721 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Horseman rotate: false - xy: 408, 721 + xy: 612, 721 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ironclad rotate: false - xy: 816, 721 + xy: 1020, 721 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Knight rotate: false - xy: 1020, 721 + xy: 1252, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Lancer rotate: false - xy: 1252, 1537 + xy: 1252, 1129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Landship rotate: false - xy: 1252, 1333 + xy: 1252, 925 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Longbowman rotate: false - xy: 1252, 925 + xy: 1399, 1659 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Longswordsman rotate: false - xy: 1224, 823 + xy: 1501, 1637 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Minuteman rotate: false - xy: 1456, 1455 + xy: 1660, 1535 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Musketeer rotate: false - xy: 1456, 1149 + xy: 1558, 1229 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Musketman rotate: false - xy: 1660, 924 + xy: 1456, 924 size: 100, 99 orig: 100, 99 offset: 0, 0 index: -1 UnitIcons/Pikeman rotate: false - xy: 1762, 1025 + xy: 1864, 923 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Rifleman rotate: false - xy: 1530, 639 + xy: 245, 404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Scout rotate: false - xy: 336, 98 + xy: 386, 609 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Settler rotate: false - xy: 388, 507 + xy: 590, 619 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Spearman rotate: false - xy: 796, 517 + xy: 1508, 617 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Submarine rotate: false - xy: 1612, 516 + xy: 653, 415 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Swordsman rotate: false - xy: 1816, 515 + xy: 653, 313 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Trebuchet rotate: false - xy: 1163, 415 + xy: 1163, 313 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -2309,329 +2309,329 @@ UnitIcons/Trireme index: -1 UnitIcons/Warrior rotate: false - xy: 438, 200 + xy: 1367, 414 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Work Boats rotate: false - xy: 857, 313 + xy: 1571, 413 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Worker rotate: false - xy: 959, 313 + xy: 1673, 515 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitPromotionIcons/Accuracy_III_(Civ5) rotate: false - xy: 1709, 1841 + xy: 182, 735 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Accuracy_II_(Civ5) rotate: false - xy: 1301, 1741 + xy: 1505, 1841 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Accuracy_I_(Civ5) rotate: false - xy: 1660, 1637 + xy: 277, 1565 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage_III_(Civ5) rotate: false - xy: 277, 1565 + xy: 182, 713 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage_II_(Civ5) rotate: false - xy: 1323, 1741 + xy: 299, 1565 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage_I_(Civ5) rotate: false - xy: 1682, 1637 + xy: 1456, 1637 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Blitz_(Civ5) rotate: false - xy: 299, 1565 + xy: 1478, 1637 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding_Party_III_(Civ5) rotate: false - xy: 1345, 1741 + xy: 1531, 1971 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding_Party_II_(Civ5) rotate: false - xy: 1367, 1741 + xy: 1981, 1971 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding_Party_I_(Civ5) rotate: false - xy: 1731, 1971 + xy: 336, 24 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment_III_(Civ5) rotate: false - xy: 143, 533 + xy: 1729, 391 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment_II_(Civ5) rotate: false - xy: 1977, 1971 + xy: 1877, 543 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment_I_(Civ5) rotate: false - xy: 234, 24 + xy: 2015, 1819 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Charge_(Civ5) rotate: false - xy: 1469, 495 + xy: 1966, 939 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal_Raider_III_(Civ5) rotate: false - xy: 2015, 1819 + xy: 2018, 697 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal_Raider_II_(Civ5) rotate: false - xy: 1966, 939 + xy: 210, 45 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal_Raider_I_(Civ5) rotate: false - xy: 696, 239 + xy: 438, 124 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Cover_II_(Civ5) rotate: false - xy: 748, 291 + xy: 1531, 1949 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Cover_I_(Civ5) rotate: false - xy: 644, 135 + xy: 1981, 1949 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Drill_III_(Civ5) rotate: false - xy: 2, 8 + xy: 2003, 1971 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Drill_II_(Civ5) rotate: false - xy: 1731, 1949 + xy: 336, 2 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Drill_I_(Civ5) rotate: false - xy: 143, 511 + xy: 358, 24 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Formation_II_(Civ5) rotate: false - xy: 1977, 1949 + xy: 1729, 369 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Formation_I_(Civ5) rotate: false - xy: 1999, 1971 + xy: 1751, 391 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Indirect_Fire_(Civ5) rotate: false - xy: 234, 2 + xy: 1877, 521 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Logistics_(Civ5) rotate: false - xy: 256, 24 + xy: 1899, 543 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/March_(Civ5) rotate: false - xy: 1469, 473 + xy: 2015, 1797 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Mobility_(Civ5) rotate: false - xy: 2015, 1797 + xy: 1988, 939 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Range_(Civ5) rotate: false - xy: 1988, 939 + xy: 2018, 675 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting_III_(Civ5) rotate: false - xy: 696, 217 + xy: 210, 23 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting_II_(Civ5) rotate: false - xy: 718, 239 + xy: 438, 102 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting_I_(Civ5) rotate: false - xy: 748, 269 + xy: 460, 124 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Sentry_(Civ5) rotate: false - xy: 770, 291 + xy: 2003, 1949 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Shock_III_(Civ5) rotate: false - xy: 644, 113 + xy: 358, 2 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Shock_II_(Civ5) rotate: false - xy: 666, 135 + xy: 380, 24 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Shock_I_(Civ5) rotate: false - xy: 24, 8 + xy: 1729, 347 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Siege_(Civ5) rotate: false - xy: 1999, 1949 + xy: 1751, 369 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting_III_(Civ5) rotate: false - xy: 256, 2 + xy: 1899, 521 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting_II_(Civ5) rotate: false - xy: 278, 24 + xy: 1921, 543 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting_I_(Civ5) rotate: false - xy: 1469, 451 + xy: 2015, 1775 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Volley_(Civ5) rotate: false - xy: 2015, 1775 + xy: 2018, 653 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Wolfpack_III_(Civ5) rotate: false - xy: 696, 195 + xy: 460, 102 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Wolfpack_II_(Civ5) rotate: false - xy: 718, 217 + xy: 380, 2 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Wolfpack_I_(Civ5) rotate: false - xy: 770, 269 + xy: 402, 24 size: 20, 20 orig: 20, 20 offset: 0, 0 diff --git a/android/assets/game.png b/android/assets/game.png index c50ceba397..f7e76661de 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/Translations.json b/android/assets/jsons/Translations.json index 72c63ceeb2..1f834e48af 100644 --- a/android/assets/jsons/Translations.json +++ b/android/assets/jsons/Translations.json @@ -503,6 +503,8 @@ Simplified_Chinese:"社会政策" Portuguese:"Políticas sociais" } + + "Options":{} "Display options":{ Italian:"Opzioni" diff --git a/android/build.gradle b/android/build.gradle index ce0039609f..366b548c67 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -21,8 +21,8 @@ android { applicationId "com.unciv.app" minSdkVersion 14 targetSdkVersion 28 - versionCode 188 - versionName "2.11.6" + versionCode 189 + versionName "2.11.7" } // Had to add this crap for Travis to build, it wanted to sign the app diff --git a/core/src/com/unciv/GameStarter.kt b/core/src/com/unciv/GameStarter.kt index 837629daf6..327c54f489 100644 --- a/core/src/com/unciv/GameStarter.kt +++ b/core/src/com/unciv/GameStarter.kt @@ -16,6 +16,7 @@ class GameParameters{ var difficulty="Prince" var nation="Babylon" var mapRadius=20 + var humanPlayers=1 var numberOfEnemies=3 var mapType= MapType.Perlin } @@ -27,26 +28,31 @@ class GameStarter{ gameInfo.gameParameters = newGameParameters gameInfo.tileMap = TileMap(newGameParameters.mapRadius, newGameParameters.mapType) gameInfo.tileMap.gameInfo = gameInfo // need to set this transient before placing units in the map - val startingLocations = getStartingLocations(newGameParameters.numberOfEnemies+1,gameInfo.tileMap) + val startingLocations = getStartingLocations( + newGameParameters.numberOfEnemies+newGameParameters.humanPlayers, gameInfo.tileMap) + val availableCivNames = Stack() + availableCivNames.addAll(GameBasics.Nations.keys.shuffled()) + availableCivNames.remove(newGameParameters.nation) - val playerCiv = CivilizationInfo(newGameParameters.nation) - gameInfo.difficulty=newGameParameters.difficulty - playerCiv.playerType=PlayerType.Human - gameInfo.civilizations.add(playerCiv) // first one is player civ + for(i in 1..newGameParameters.humanPlayers) { + val playerCiv = + if(i==1) CivilizationInfo(newGameParameters.nation) + else CivilizationInfo(availableCivNames.pop()) + gameInfo.difficulty = newGameParameters.difficulty + playerCiv.playerType = PlayerType.Human + gameInfo.civilizations.add(playerCiv) + } - val barbarianCivilization = CivilizationInfo() + val barbarianCivilization = CivilizationInfo("Barbarians") gameInfo.civilizations.add(barbarianCivilization)// second is barbarian civ - for (nationName in GameBasics.Nations.keys.filterNot { it=="Barbarians" || it==newGameParameters.nation }.shuffled() - .take(newGameParameters.numberOfEnemies)) { + for (nationName in availableCivNames.take(newGameParameters.numberOfEnemies)) { val civ = CivilizationInfo(nationName) gameInfo.civilizations.add(civ) } - barbarianCivilization.civName = "Barbarians" - gameInfo.setTransients() // needs to be before placeBarbarianUnit because it depends on the tilemap having its gameinfo set for (civInfo in gameInfo.civilizations.filter {!it.isBarbarianCivilization() && !it.isPlayerCivilization()}) { diff --git a/core/src/com/unciv/UnCivGame.kt b/core/src/com/unciv/UnCivGame.kt index edbe309f62..c98d93a2ea 100644 --- a/core/src/com/unciv/UnCivGame.kt +++ b/core/src/com/unciv/UnCivGame.kt @@ -64,6 +64,7 @@ class UnCivGame : Game() { } override fun resume() { + super.resume() ImageGetter.refreshAltas() // This is to solve a rare problem that I still on't understand its cause - diff --git a/core/src/com/unciv/logic/GameInfo.kt b/core/src/com/unciv/logic/GameInfo.kt index 81a9b7f3b2..0a55b340d3 100644 --- a/core/src/com/unciv/logic/GameInfo.kt +++ b/core/src/com/unciv/logic/GameInfo.kt @@ -17,64 +17,72 @@ class GameInfo { var gameParameters=GameParameters() var turns = 0 var oneMoreTurnMode=false + var currentPlayer="" //region pure functions fun clone(): GameInfo { val toReturn = GameInfo() toReturn.tileMap = tileMap.clone() toReturn.civilizations.addAll(civilizations.map { it.clone() }) + toReturn.currentPlayer=currentPlayer toReturn.turns = turns toReturn.difficulty=difficulty toReturn.gameParameters = gameParameters return toReturn } - fun getPlayerCivilization(): CivilizationInfo = civilizations[0] - fun getBarbarianCivilization(): CivilizationInfo = civilizations[1] + fun getCurrentPlayerCivilization(): CivilizationInfo = civilizations.first { it.civName==currentPlayer } + fun getBarbarianCivilization(): CivilizationInfo = civilizations.first { it.civName=="Barbarians" } fun getDifficulty() = GameBasics.Difficulties[difficulty]!! //endregion fun nextTurn() { - val player = getPlayerCivilization() + val previousHumanPlayer = getCurrentPlayerCivilization() + var thisPlayer = previousHumanPlayer // not calling is currentPlayer because that's alreay taken and I can't think of a better name + var currentPlayerIndex = civilizations.indexOf(thisPlayer) - for (civInfo in civilizations) { - if (civInfo.tech.techsToResearch.isEmpty()) { // should belong in automation? yes/no? - val researchableTechs = GameBasics.Technologies.values - .filter { !civInfo.tech.isResearched(it.name) && civInfo.tech.canBeResearched(it.name) } - civInfo.tech.techsToResearch.add(researchableTechs.minBy { it.cost }!!.name) + fun switchTurn(){ + thisPlayer.endTurn() + currentPlayerIndex = (currentPlayerIndex+1) % civilizations.size + if(currentPlayerIndex==0){ + turns++ + if (turns % 10 == 0) { // every 10 turns add a barbarian in a random place + placeBarbarianUnit(null) + } } - civInfo.endTurn() + thisPlayer = civilizations[currentPlayerIndex] + thisPlayer.startTurn() } - // We need to update the stats after ALL the cities are done updating because - // maybe one of them has a wonder that affects the stats of all the rest of the cities + switchTurn() - for (civInfo in civilizations.filterNot { it == player || (it.isDefeated() && !it.isBarbarianCivilization()) }) { - civInfo.startTurn() - NextTurnAutomation().automateCivMoves(civInfo) + while(thisPlayer.playerType==PlayerType.AI){ + NextTurnAutomation().automateCivMoves(thisPlayer) + if (thisPlayer.tech.techsToResearch.isEmpty()) { // should belong in automation? yes/no? + val researchableTechs = GameBasics.Technologies.values + .filter { !thisPlayer.tech.isResearched(it.name) && thisPlayer.tech.canBeResearched(it.name) } + thisPlayer.tech.techsToResearch.add(researchableTechs.minBy { it.cost }!!.name) + } + switchTurn() } - if (turns % 10 == 0) { // every 10 turns add a barbarian in a random place - placeBarbarianUnit(null) - } + currentPlayer=thisPlayer.civName // Start our turn immediately before the player can made decisions - affects whether our units can commit automated actions and then be attacked immediately etc. - player.startTurn() - - val enemyUnitsCloseToTerritory = player.viewableTiles + val enemyUnitsCloseToTerritory = thisPlayer.viewableTiles .filter { - it.militaryUnit != null && it.militaryUnit!!.civInfo != player - && player.isAtWarWith(it.militaryUnit!!.civInfo) - && (it.getOwner() == player || it.neighbors.any { neighbor -> neighbor.getOwner() == player }) + it.militaryUnit != null && it.militaryUnit!!.civInfo != thisPlayer + && thisPlayer.isAtWarWith(it.militaryUnit!!.civInfo) + && (it.getOwner() == thisPlayer || it.neighbors.any { neighbor -> neighbor.getOwner() == thisPlayer }) } + for (enemyUnitTile in enemyUnitsCloseToTerritory) { - val inOrNear = if (enemyUnitTile.getOwner() == player) "in" else "near" + val inOrNear = if (enemyUnitTile.getOwner() == thisPlayer) "in" else "near" val unitName = enemyUnitTile.militaryUnit!!.name - player.addNotification("An enemy [$unitName] was spotted $inOrNear our territory", enemyUnitTile.position, Color.RED) + thisPlayer.addNotification("An enemy [$unitName] was spotted $inOrNear our territory", enemyUnitTile.position, Color.RED) } - turns++ } fun placeBarbarianUnit(tileToPlace: TileInfo?) { @@ -94,15 +102,17 @@ class GameInfo { tileMap.gameInfo = this tileMap.setTransients() + if(currentPlayer=="") currentPlayer=civilizations[0].civName + // this is separated into 2 loops because when we activate updateViewableTiles in civ.setTransients, // we try to find new civs, and we check if civ is barbarian, which we can't know unless the gameInfo is already set. for (civInfo in civilizations) civInfo.gameInfo = this // PlayerType was only added in 2.11.1, so we need to adjust for older saved games if(civilizations.all { it.playerType==PlayerType.AI }) - getPlayerCivilization().playerType=PlayerType.Human - if(getPlayerCivilization().difficulty!="Chieftain") - difficulty= getPlayerCivilization().difficulty + getCurrentPlayerCivilization().playerType=PlayerType.Human + if(getCurrentPlayerCivilization().difficulty!="Chieftain") + difficulty= getCurrentPlayerCivilization().difficulty for (civInfo in civilizations) civInfo.setTransients() diff --git a/core/src/com/unciv/logic/automation/WorkerAutomation.kt b/core/src/com/unciv/logic/automation/WorkerAutomation.kt index 1c35d5609f..b5bd141ae6 100644 --- a/core/src/com/unciv/logic/automation/WorkerAutomation.kt +++ b/core/src/com/unciv/logic/automation/WorkerAutomation.kt @@ -102,7 +102,7 @@ class WorkerAutomation(val unit: MapUnit) { && (it.improvement == null || (it.hasViewableResource(unit.civInfo) && !it.containsGreatImprovement() && it.getTileResource().improvement != it.improvement)) && it.isLand() && !it.getBaseTerrain().impassable - && it.canBuildImprovement(chooseImprovement(it, unit.civInfo), unit.civInfo) + && (it.containsUnfinishedGreatImprovement() || it.canBuildImprovement(chooseImprovement(it, unit.civInfo), unit.civInfo)) && {val city=it.getCity(); city==null || it.getCity()?.civInfo == unit.civInfo}() // don't work tiles belonging to another civ }.sortedByDescending { getPriority(it, unit.civInfo) }.toMutableList() @@ -145,6 +145,7 @@ class WorkerAutomation(val unit: MapUnit) { tile.improvementInProgress != null -> tile.improvementInProgress improvementStringForResource != null -> improvementStringForResource tile.containsGreatImprovement() -> null + tile.containsUnfinishedGreatImprovement() -> null tile.terrainFeature == "Jungle" -> "Trading post" tile.terrainFeature == "Marsh" -> "Remove Marsh" tile.terrainFeature == "Forest" -> "Lumber mill" diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index 42b88b6253..f69f3bd1ed 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -93,7 +93,7 @@ class CityStats { val civ = cityInfo.civInfo if (!civ.isPlayerCivilization()) { - val modifier = civ.gameInfo.getPlayerCivilization().getDifficulty().aiYieldModifier + val modifier = civ.gameInfo.getCurrentPlayerCivilization().getDifficulty().aiYieldModifier stats.production += modifier stats.science += modifier stats.food += modifier @@ -143,7 +143,7 @@ class CityStats { val newHappinessList = LinkedHashMap() var unhappinessModifier = civInfo.getDifficulty().unhappinessModifier if(!civInfo.isPlayerCivilization()) - unhappinessModifier *= civInfo.gameInfo.getPlayerCivilization().getDifficulty().aiUnhappinessModifier + unhappinessModifier *= civInfo.gameInfo.getDifficulty().aiUnhappinessModifier newHappinessList ["Cities"] = -3f * unhappinessModifier diff --git a/core/src/com/unciv/logic/city/PopulationManager.kt b/core/src/com/unciv/logic/city/PopulationManager.kt index 4031f193ca..2a9ec6800f 100644 --- a/core/src/com/unciv/logic/city/PopulationManager.kt +++ b/core/src/com/unciv/logic/city/PopulationManager.kt @@ -40,7 +40,7 @@ class PopulationManager { // civ v math, civilization.wikia var foodRequired = 15 + 6 * (population - 1) + Math.floor(Math.pow((population - 1).toDouble(), 1.8)) if(!cityInfo.civInfo.isPlayerCivilization()) - foodRequired *= cityInfo.civInfo.gameInfo.getPlayerCivilization().getDifficulty().aiCityGrowthModifier + foodRequired *= cityInfo.civInfo.gameInfo.getDifficulty().aiCityGrowthModifier return foodRequired.toInt() } diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 68ea0787f3..02136cb660 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -87,13 +87,13 @@ class CivilizationInfo { //region pure functions fun getDifficulty():Difficulty { - if(playerType==PlayerType.AI) return GameBasics.Difficulties["Chieftain"]!! - else return gameInfo.getDifficulty() + if (isPlayerCivilization()) return gameInfo.getDifficulty() + return GameBasics.Difficulties["Chieftain"]!! } fun getNation() = GameBasics.Nations[civName]!! fun getCapital()=cities.first { it.isCapital() } - fun isPlayerCivilization() = gameInfo.getPlayerCivilization()==this + fun isPlayerCivilization() = playerType==PlayerType.Human fun isBarbarianCivilization() = gameInfo.getBarbarianCivilization()==this fun getStatsForNextTurn():Stats{ @@ -152,7 +152,7 @@ class CivilizationInfo { var cost = baseUnitCost*totalPaidUnits*(1+gameProgress) cost = cost.pow(1+gameProgress/3) // Why 3? To spread 1 to 1.33 if(!isPlayerCivilization()) - cost *= gameInfo.getPlayerCivilization().getDifficulty().aiUnitMaintenanceModifier + cost *= gameInfo.getDifficulty().aiUnitMaintenanceModifier if(policies.isAdopted("Autocracy")) cost *= 0.66f return cost.toInt() } @@ -313,7 +313,7 @@ class CivilizationInfo { victoryManager.currentsSpaceshipParts = scienceVictory.currentParts for (cityInfo in cities) { - cityInfo.civInfo = this // must be before the city's setTransients because it depends on the tilemap, that comes from the playerCivInfo + cityInfo.civInfo = this // must be before the city's setTransients because it depends on the tilemap, that comes from the currentPlayerCivInfo cityInfo.setTransients() } setCitiesConnectedToCapitalTransients() diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 27e4988a78..72b79e576c 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -7,6 +7,7 @@ import com.unciv.logic.automation.WorkerAutomation import com.unciv.logic.civilization.CivilizationInfo import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tech.TechEra +import com.unciv.models.gamebasics.tile.TerrainType import com.unciv.models.gamebasics.unit.BaseUnit import com.unciv.models.gamebasics.unit.UnitType import com.unciv.ui.utils.getRandom @@ -189,7 +190,7 @@ class MapUnit { fun isEmbarked(): Boolean { if(!type.isLandUnit()) return false - return currentTile.baseTerrain=="Ocean"||currentTile.baseTerrain=="Coast" + return currentTile.getBaseTerrain().type==TerrainType.Water } fun isInvisible(): Boolean { diff --git a/core/src/com/unciv/logic/map/TileInfo.kt b/core/src/com/unciv/logic/map/TileInfo.kt index 99de44f996..cc99003770 100644 --- a/core/src/com/unciv/logic/map/TileInfo.kt +++ b/core/src/com/unciv/logic/map/TileInfo.kt @@ -45,8 +45,13 @@ open class TileInfo { } fun containsGreatImprovement(): Boolean { - if (getTileImprovement() == null) return false - return getTileImprovement()!!.name in listOf("Academy", "Landmark", "Manufactory", "Customs house") + if (improvement in listOf("Academy", "Landmark", "Manufactory", "Customs house")) return true + return false + } + + fun containsUnfinishedGreatImprovement(): Boolean { + if (improvementInProgress in listOf("Academy", "Landmark", "Manufactory", "Customs house")) return true + return false } //region pure functions @@ -232,7 +237,7 @@ open class TileInfo { override fun toString(): String { val lineList = ArrayList() // more readable than StringBuilder, with same performance for our use-case val isViewableToPlayer = UnCivGame.Current.viewEntireMapForDebug - || UnCivGame.Current.gameInfo.getPlayerCivilization().viewableTiles.contains(this) + || UnCivGame.Current.gameInfo.getCurrentPlayerCivilization().viewableTiles.contains(this) if (isCityCenter()) { val city = getCity()!! @@ -244,7 +249,7 @@ open class TileInfo { } lineList += baseTerrain.tr() if (terrainFeature != null) lineList += terrainFeature!!.tr() - if (hasViewableResource(tileMap.gameInfo.getPlayerCivilization())) lineList += resource!!.tr() + if (hasViewableResource(tileMap.gameInfo.getCurrentPlayerCivilization())) lineList += resource!!.tr() if (roadStatus !== RoadStatus.None && !isCityCenter()) lineList += roadStatus.toString().tr() if (improvement != null) lineList += improvement!!.tr() if (improvementInProgress != null && isViewableToPlayer) diff --git a/core/src/com/unciv/models/gamebasics/Building.kt b/core/src/com/unciv/models/gamebasics/Building.kt index 411b0152cb..a3b51d75d8 100644 --- a/core/src/com/unciv/models/gamebasics/Building.kt +++ b/core/src/com/unciv/models/gamebasics/Building.kt @@ -169,11 +169,14 @@ class Building : NamedStats(), IConstruction{ if (uniqueTo!=null && uniqueTo!=civInfo.civName) return false if (GameBasics.Buildings.values.any { it.uniqueTo==civInfo.civName && it.replaces==name }) return false if (requiredTech != null && !civInfo.tech.isResearched(requiredTech!!)) return false - if (isWonder && requiredBuildingInAllCities==null - && civInfo.gameInfo.civilizations.flatMap { it.cities }.any { - it.cityConstructions.isBuilding(name) || it.cityConstructions.isBuilt(name) - }) - return false + if (isWonder && requiredBuildingInAllCities==null){ + if(civInfo.gameInfo.civilizations.flatMap { it.cities } + .any {it.cityConstructions.isBuilt(name)}) + return false + + if(civInfo.cities.any { it!=construction.cityInfo && it.cityConstructions.isBuilding(name) }) + return false + } if (requiredBuilding != null && !construction.containsBuildingOrEquivalent(requiredBuilding!!)) return false if (requiredBuildingInAllCities != null && civInfo.cities.any { !it.cityConstructions.containsBuildingOrEquivalent(requiredBuildingInAllCities!!) }) diff --git a/core/src/com/unciv/models/gamebasics/tech/Technology.kt b/core/src/com/unciv/models/gamebasics/tech/Technology.kt index 274e710071..70dd9040cc 100644 --- a/core/src/com/unciv/models/gamebasics/tech/Technology.kt +++ b/core/src/com/unciv/models/gamebasics/tech/Technology.kt @@ -20,10 +20,10 @@ class Technology : ICivilopedia { lineList += impimpString.tr() } - val playerCiv = UnCivGame.Current.gameInfo.getPlayerCivilization().civName + val currentPlayerCiv = UnCivGame.Current.gameInfo.currentPlayer var enabledUnits = GameBasics.Units.values.filter { it.requiredTech == name && - (it.uniqueTo == null || it.uniqueTo == playerCiv) + (it.uniqueTo == null || it.uniqueTo == currentPlayerCiv) } val replacedUnits = enabledUnits.mapNotNull { it.replaces } enabledUnits = enabledUnits.filter { it.name !in replacedUnits } @@ -35,7 +35,7 @@ class Technology : ICivilopedia { var enabledBuildings = GameBasics.Buildings.values.filter { it.requiredTech == name && - (it.uniqueTo == null || it.uniqueTo == playerCiv) + (it.uniqueTo == null || it.uniqueTo == currentPlayerCiv) } val replacedBuildings = enabledBuildings.mapNotNull { it.replaces } enabledBuildings = enabledBuildings.filter { it.name !in replacedBuildings } diff --git a/core/src/com/unciv/ui/EmpireOverviewScreen.kt b/core/src/com/unciv/ui/EmpireOverviewScreen.kt index 6e38ddeba1..16e92d2639 100644 --- a/core/src/com/unciv/ui/EmpireOverviewScreen.kt +++ b/core/src/com/unciv/ui/EmpireOverviewScreen.kt @@ -21,7 +21,7 @@ import kotlin.math.roundToInt class EmpireOverviewScreen : CameraStageBaseScreen(){ - val playerCivInfo = UnCivGame.Current.gameInfo.getPlayerCivilization() + val currentPlayerCivInfo = UnCivGame.Current.gameInfo.getCurrentPlayerCivilization() init { onBackButtonClicked { UnCivGame.Current.setWorldScreen(); dispose() } val topTable = Table().apply { defaults().pad(10f) } @@ -92,7 +92,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){ private fun getTradesTable(): Table { val tradesTable = Table().apply { defaults().pad(10f) } - for(diplomacy in playerCivInfo.diplomacy.values) + for(diplomacy in currentPlayerCivInfo.diplomacy.values) for(trade in diplomacy.trades) tradesTable.add(createTradeTable(trade,diplomacy.otherCiv())).row() @@ -101,7 +101,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){ private fun createTradeTable(trade: Trade, otherCiv:CivilizationInfo): Table { val generalTable = Table(skin) - generalTable.add(createOffersTable(playerCivInfo,trade.ourOffers, trade.theirOffers.size)) + generalTable.add(createOffersTable(currentPlayerCivInfo,trade.ourOffers, trade.theirOffers.size)) generalTable.add(createOffersTable(otherCiv, trade.theirOffers, trade.ourOffers.size)) return generalTable } @@ -128,12 +128,12 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){ happinessTable.defaults().pad(5f) happinessTable.add(Label("Happiness".tr(), skin).setFontSize(24)).colspan(2).row() happinessTable.addSeparator() - for (entry in playerCivInfo.getHappinessForNextTurn()) { + for (entry in currentPlayerCivInfo.getHappinessForNextTurn()) { happinessTable.add(entry.key.tr()) happinessTable.add(entry.value.toString()).row() } happinessTable.add("Total".tr()) - happinessTable.add(playerCivInfo.getHappinessForNextTurn().values.sum().toString()) + happinessTable.add(currentPlayerCivInfo.getHappinessForNextTurn().values.sum().toString()) happinessTable.pack() return happinessTable } @@ -144,7 +144,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){ goldTable.add(Label("Gold".tr(), skin).setFontSize(24)).colspan(2).row() goldTable.addSeparator() var total=0f - for (entry in playerCivInfo.getStatMapForNextTurn()) { + for (entry in currentPlayerCivInfo.getStatMapForNextTurn()) { if(entry.value.gold==0f) continue goldTable.add(entry.key.tr()) goldTable.add(entry.value.gold.toString()).row() @@ -160,9 +160,9 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){ private fun getGreatPeopleTable(): Table { val greatPeopleTable = Table(skin) - val greatPersonPoints = playerCivInfo.greatPeople.greatPersonPoints.toHashMap() - val greatPersonPointsPerTurn = playerCivInfo.getGreatPersonPointsForNextTurn().toHashMap() - val pointsToGreatPerson = playerCivInfo.greatPeople.pointsForNextGreatPerson + val greatPersonPoints = currentPlayerCivInfo.greatPeople.greatPersonPoints.toHashMap() + val greatPersonPointsPerTurn = currentPlayerCivInfo.getGreatPersonPointsForNextTurn().toHashMap() + val pointsToGreatPerson = currentPlayerCivInfo.greatPeople.pointsForNextGreatPerson greatPeopleTable.defaults().pad(5f) greatPeopleTable.add(Label("Great person points".tr(), skin).setFontSize(24)).colspan(3).row() @@ -171,14 +171,14 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){ greatPeopleTable.add("Current points") greatPeopleTable.add("Points per turn").row() - val mapping = playerCivInfo.greatPeople.statToGreatPersonMapping + val mapping = currentPlayerCivInfo.greatPeople.statToGreatPersonMapping for(entry in mapping){ greatPeopleTable.add(entry.value.tr()) greatPeopleTable.add(greatPersonPoints[entry.key]!!.toInt().toString()+"/"+pointsToGreatPerson) greatPeopleTable.add(greatPersonPointsPerTurn[entry.key]!!.toInt().toString()).row() } - val pointsForGreatGeneral = playerCivInfo.greatPeople.greatGeneralPoints.toInt().toString() - val pointsForNextGreatGeneral = playerCivInfo.greatPeople.pointsForNextGreatGeneral.toInt().toString() + val pointsForGreatGeneral = currentPlayerCivInfo.greatPeople.greatGeneralPoints.toInt().toString() + val pointsForNextGreatGeneral = currentPlayerCivInfo.greatPeople.pointsForNextGreatGeneral.toInt().toString() greatPeopleTable.add("Great General".tr()) greatPeopleTable.add(pointsForGreatGeneral+"/"+pointsForNextGreatGeneral).row() greatPeopleTable.pack() @@ -208,7 +208,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){ val cityInfoTableDetails = Table(skin) cityInfoTableDetails.defaults().pad(padding).minWidth(iconSize).align(Align.left)//we need the min width so we can align the different tables - for (city in playerCivInfo.cities) { + for (city in currentPlayerCivInfo.cities) { cityInfoTableDetails.add(city.name) cityInfoTableDetails.add(city.cityConstructions.getCityProductionTextForCityButton()).actor!!.setAlignment(Align.left) cityInfoTableDetails.add(city.population.population.toString()).actor!!.setAlignment(Align.center) @@ -230,13 +230,13 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){ cityInfoTableTotal.defaults().pad(padding).minWidth(iconSize)//we need the min width so we can align the different tables cityInfoTableTotal.add("Total".tr()) - cityInfoTableTotal.add(playerCivInfo.cities.sumBy { it.population.population }.toString()).actor!!.setAlignment(Align.center) + cityInfoTableTotal.add(currentPlayerCivInfo.cities.sumBy { it.population.population }.toString()).actor!!.setAlignment(Align.center) cityInfoTableTotal.add()//an intended empty space - cityInfoTableTotal.add(playerCivInfo.cities.sumBy { it.cityStats.currentCityStats.gold.toInt() }.toString()).actor!!.setAlignment(Align.center) - cityInfoTableTotal.add(playerCivInfo.cities.sumBy { it.cityStats.currentCityStats.science.toInt() }.toString()).actor!!.setAlignment(Align.center) + cityInfoTableTotal.add(currentPlayerCivInfo.cities.sumBy { it.cityStats.currentCityStats.gold.toInt() }.toString()).actor!!.setAlignment(Align.center) + cityInfoTableTotal.add(currentPlayerCivInfo.cities.sumBy { it.cityStats.currentCityStats.science.toInt() }.toString()).actor!!.setAlignment(Align.center) cityInfoTableTotal.add()//an intended empty space - cityInfoTableTotal.add(playerCivInfo.cities.sumBy { it.cityStats.currentCityStats.culture.toInt() }.toString()).actor!!.setAlignment(Align.center) - cityInfoTableTotal.add(playerCivInfo.cities.sumBy { it.cityStats.currentCityStats.happiness.toInt() }.toString()).actor!!.setAlignment(Align.center) + cityInfoTableTotal.add(currentPlayerCivInfo.cities.sumBy { it.cityStats.currentCityStats.culture.toInt() }.toString()).actor!!.setAlignment(Align.center) + cityInfoTableTotal.add(currentPlayerCivInfo.cities.sumBy { it.cityStats.currentCityStats.happiness.toInt() }.toString()).actor!!.setAlignment(Align.center) cityInfoTableTotal.pack() @@ -265,7 +265,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){ table.row() table.addSeparator() - for(unit in playerCivInfo.getCivUnits()){ + for(unit in currentPlayerCivInfo.getCivUnits()){ val baseUnit = unit.baseUnit() table.add(unit.name.tr()) if(baseUnit.strength>0) table.add(baseUnit.strength.toString()) else table.add() @@ -281,10 +281,10 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){ fun playerKnows(civ:CivilizationInfo) = civ.isPlayerCivilization() || - playerCivInfo.diplomacy.containsKey(civ.civName) + currentPlayerCivInfo.diplomacy.containsKey(civ.civName) fun createDiplomacyGroup(): Group { - val relevantCivs = playerCivInfo.gameInfo.civilizations.filter { !it.isBarbarianCivilization() } + val relevantCivs = currentPlayerCivInfo.gameInfo.civilizations.filter { !it.isBarbarianCivilization() } val groupSize = 500f val group = Group() group.setSize(groupSize,groupSize) diff --git a/core/src/com/unciv/ui/VictoryScreen.kt b/core/src/com/unciv/ui/VictoryScreen.kt index 7f340441c6..5e3042c0fe 100644 --- a/core/src/com/unciv/ui/VictoryScreen.kt +++ b/core/src/com/unciv/ui/VictoryScreen.kt @@ -12,7 +12,7 @@ import com.unciv.ui.utils.onClick class VictoryScreen : PickerScreen() { - val playerCivInfo = UnCivGame.Current.gameInfo.getPlayerCivilization() + val playerCivInfo = UnCivGame.Current.gameInfo.getCurrentPlayerCivilization() init { topTable.skin=skin diff --git a/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt b/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt index 90ac763efb..9afc78eda9 100644 --- a/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt +++ b/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt @@ -38,7 +38,7 @@ class CityTileGroup(private val city: CityInfo, tileInfo: TileInfo) : TileGroup( } private fun updateYieldGroup() { - yieldGroup.setStats(tileInfo.getTileStats(city, city.civInfo.gameInfo.getPlayerCivilization())) + yieldGroup.setStats(tileInfo.getTileStats(city, city.civInfo.gameInfo.getCurrentPlayerCivilization())) yieldGroup.setOrigin(Align.center) yieldGroup.setScale(0.7f) yieldGroup.toFront() diff --git a/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt index c570ece46f..9e0364a33c 100644 --- a/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt @@ -31,7 +31,7 @@ class ConstructionPickerScreen(val city: CityInfo) : PickerScreen() { } init { - val civInfo = game.gameInfo.getPlayerCivilization() + val currentPlayerCiv = game.gameInfo.getCurrentPlayerCivilization() closeButton.onClick { game.screen = CityScreen(this@ConstructionPickerScreen.city) @@ -60,7 +60,7 @@ class ConstructionPickerScreen(val city: CityInfo) : PickerScreen() { if (!building.isBuildable(cityConstructions) && building.name!=cityConstructions.currentConstruction) continue val productionTextButton = getProductionButton(building.name, building.name + "\r\n" + cityConstructions.turnsToConstruction(building.name) + " {turns}".tr(), - building.getDescription(true, civInfo.policies.getAdoptedPolicies()), + building.getDescription(true, currentPlayerCiv.policies.getAdoptedPolicies()), "Build [${building.name}]".tr()) if (building.isWonder) wonders.addActor(productionTextButton) diff --git a/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt index c920f05db7..86ea338000 100644 --- a/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt @@ -34,9 +34,9 @@ class GreatPersonPickerScreen : PickerScreen() { } rightSideButton.onClick("choir") { - val civInfo = UnCivGame.Current.gameInfo.getPlayerCivilization() - civInfo.placeUnitNearTile(civInfo.cities[0].location, theChosenOne!!.name) - civInfo.greatPeople.freeGreatPeople-- + val currentPlayerCiv = UnCivGame.Current.gameInfo.getCurrentPlayerCivilization() + currentPlayerCiv.placeUnitNearTile(currentPlayerCiv.cities[0].location, theChosenOne!!.name) + currentPlayerCiv.greatPeople.freeGreatPeople-- UnCivGame.Current.setWorldScreen() } diff --git a/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt index ce121e4d78..347b1df9dc 100644 --- a/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt @@ -16,12 +16,12 @@ class ImprovementPickerScreen(tileInfo: TileInfo) : PickerScreen() { private var selectedImprovement: TileImprovement? = null init { - val civInfo = game.gameInfo.getPlayerCivilization() + val currentPlayerCiv = game.gameInfo.getCurrentPlayerCivilization() setDefaultCloseAction() rightSideButton.setText("Pick improvement") rightSideButton.onClick { - tileInfo.startWorkingOnImprovement(selectedImprovement!!, civInfo) + tileInfo.startWorkingOnImprovement(selectedImprovement!!, currentPlayerCiv) if(tileInfo.civilianUnit!=null) tileInfo.civilianUnit!!.action=null // this is to "wake up" the worker if it's sleeping game.setWorldScreen() dispose() @@ -30,7 +30,7 @@ class ImprovementPickerScreen(tileInfo: TileInfo) : PickerScreen() { val regularImprovements = VerticalGroup() regularImprovements.space(10f) for (improvement in GameBasics.TileImprovements.values) { - if (!tileInfo.canBuildImprovement(improvement, civInfo)) continue + if (!tileInfo.canBuildImprovement(improvement, currentPlayerCiv)) continue if(improvement.name == tileInfo.improvement) continue if(improvement.name==tileInfo.improvementInProgress) continue @@ -40,7 +40,7 @@ class ImprovementPickerScreen(tileInfo: TileInfo) : PickerScreen() { improvementButton.add(ImageGetter.getImage("OtherIcons/Stop.png")).size(30f).pad(10f) else improvementButton.add(ImageGetter.getImprovementIcon(improvement.name,30f)).pad(10f) - improvementButton.add(Label(improvement.name + " - " + improvement.getTurnsToBuild(civInfo) + " {turns}".tr(),skin) + improvementButton.add(Label(improvement.name + " - " + improvement.getTurnsToBuild(currentPlayerCiv) + " {turns}".tr(),skin) .setFontColor(Color.WHITE)).pad(10f) improvementButton.onClick { diff --git a/core/src/com/unciv/ui/saves/LoadScreen.kt b/core/src/com/unciv/ui/saves/LoadScreen.kt index 2f5dcee3b0..cc96db2bb8 100644 --- a/core/src/com/unciv/ui/saves/LoadScreen.kt +++ b/core/src/com/unciv/ui/saves/LoadScreen.kt @@ -44,7 +44,8 @@ class LoadScreen : PickerScreen() { textToSet+="\n{Saved at}: ".tr()+ SimpleDateFormat("dd-MM-yy HH.mm").format(savedAt) try{ val game = GameSaver().loadGame(it) - textToSet+="\n"+game.getPlayerCivilization().civName.tr()+ + val playerCivNames = game.civilizations.filter { it.isPlayerCivilization() }.joinToString{it.civName.tr()} + textToSet+="\n"+playerCivNames+ ", "+game.difficulty.tr()+", {Turn} ".tr()+game.turns }catch (ex:Exception){ textToSet+="\n{Could not load game}!".tr() diff --git a/core/src/com/unciv/ui/tilegroups/TileGroup.kt b/core/src/com/unciv/ui/tilegroups/TileGroup.kt index 16178dc601..702ba942d4 100644 --- a/core/src/com/unciv/ui/tilegroups/TileGroup.kt +++ b/core/src/com/unciv/ui/tilegroups/TileGroup.kt @@ -136,7 +136,7 @@ open class TileGroup(var tileInfo: TileInfo) : Group() { open fun update(isViewable: Boolean, showResourcesAndImprovements:Boolean, showSubmarine: Boolean) { hideCircle() if (!UnCivGame.Current.viewEntireMapForDebug - && !tileInfo.tileMap.gameInfo.getPlayerCivilization().exploredTiles.contains(tileInfo.position)) { + && !tileInfo.tileMap.gameInfo.getCurrentPlayerCivilization().exploredTiles.contains(tileInfo.position)) { hexagon.color = Color.BLACK return } @@ -321,7 +321,7 @@ open class TileGroup(var tileInfo: TileInfo) : Group() { private fun updateResourceImage(showResourcesAndImprovements: Boolean) { val shouldDisplayResource = showResourcesAndImprovements - && tileInfo.hasViewableResource(tileInfo.tileMap.gameInfo.getPlayerCivilization()) + && tileInfo.hasViewableResource(tileInfo.tileMap.gameInfo.getCurrentPlayerCivilization()) if (resourceImage != null && !shouldDisplayResource) { resourceImage!!.remove() diff --git a/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt b/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt index dbd91baca4..e75a08a419 100644 --- a/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt +++ b/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt @@ -32,8 +32,9 @@ class WorldTileGroup(internal val worldScreen: WorldScreen, tileInfo: TileInfo) && city!!.civInfo.isPlayerCivilization()) addPopulationIcon() + val currentPlayerCiv = UnCivGame.Current.gameInfo.getCurrentPlayerCivilization() if (UnCivGame.Current.viewEntireMapForDebug - || tileInfo.tileMap.gameInfo.getPlayerCivilization().exploredTiles.contains(tileInfo.position)) + || currentPlayerCiv.exploredTiles.contains(tileInfo.position)) updateCityButton(city, isViewable || UnCivGame.Current.viewEntireMapForDebug) // needs to be before the update so the units will be above the city button super.update(isViewable || UnCivGame.Current.viewEntireMapForDebug, @@ -41,7 +42,7 @@ class WorldTileGroup(internal val worldScreen: WorldScreen, tileInfo: TileInfo) yieldGroup.isVisible = !UnCivGame.Current.settings.showResourcesAndImprovements if (yieldGroup.isVisible) - yieldGroup.setStats(tileInfo.getTileStats(UnCivGame.Current.gameInfo.getPlayerCivilization())) + yieldGroup.setStats(tileInfo.getTileStats(currentPlayerCiv)) // order by z index! cityImage?.toFront() diff --git a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt index a6d528af5f..076e4b3f34 100644 --- a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt +++ b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt @@ -31,11 +31,11 @@ class DiplomacyScreen:CameraStageBaseScreen(){ private fun updateLeftSideTable() { leftSideTable.clear() - val playerCiv = UnCivGame.Current.gameInfo.getPlayerCivilization() + val currentPlayerCiv = UnCivGame.Current.gameInfo.getCurrentPlayerCivilization() for (civ in UnCivGame.Current.gameInfo.civilizations .filterNot { it.isDefeated() || it.isPlayerCivilization() || it.isBarbarianCivilization() }) { - if (!playerCiv.diplomacy.containsKey(civ.civName)) continue - val civDiplomacy = playerCiv.diplomacy[civ.civName]!! + if (!currentPlayerCiv.diplomacy.containsKey(civ.civName)) continue + val civDiplomacy = currentPlayerCiv.diplomacy[civ.civName]!! val civTable = Table().apply { background = ImageGetter.getBackground(civ.getNation().getColor()) } civTable.pad(10f) @@ -52,7 +52,7 @@ class DiplomacyScreen:CameraStageBaseScreen(){ } civTable.add(tradeButton).row() - if (!playerCiv.isAtWarWith(civ)) { + if (!currentPlayerCiv.isAtWarWith(civ)) { val declareWarButton = TextButton("Declare war".tr(), skin) declareWarButton.color = Color.RED val turnsToPeaceTreaty = civDiplomacy.turnsToPeaceTreaty() diff --git a/core/src/com/unciv/ui/trade/TradeTable.kt b/core/src/com/unciv/ui/trade/TradeTable.kt index 18a48c2c29..5998a43fa6 100644 --- a/core/src/com/unciv/ui/trade/TradeTable.kt +++ b/core/src/com/unciv/ui/trade/TradeTable.kt @@ -4,7 +4,6 @@ import com.badlogic.gdx.scenes.scene2d.Stage import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.TextButton -import com.unciv.UnCivGame import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.trade.TradeLogic import com.unciv.models.gamebasics.tr @@ -12,7 +11,8 @@ import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.onClick class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage, onTradeComplete: () -> Unit): Table(CameraStageBaseScreen.skin){ - var tradeLogic = TradeLogic(UnCivGame.Current.gameInfo.getPlayerCivilization(),otherCivilization) + val currentPlayerCiv = otherCivilization.gameInfo.getCurrentPlayerCivilization() + var tradeLogic = TradeLogic(currentPlayerCiv,otherCivilization) var offerColumnsTable = OfferColumnsTable(tradeLogic, stage) { onChange() } var offerColumnsTableWrapper = Table() // This is so that after a trade has been traded, we can switch out the offers to start anew - this is the easiest way val tradeText = Label("What do you have in mind?".tr(), CameraStageBaseScreen.skin) @@ -42,7 +42,7 @@ class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage, onTradeC } else if(offerButton.text.toString() == "Accept".tr()){ tradeLogic.acceptTrade() - tradeLogic = TradeLogic(UnCivGame.Current.gameInfo.getPlayerCivilization(),otherCivilization) + tradeLogic = TradeLogic(currentPlayerCiv,otherCivilization) offerColumnsTable = OfferColumnsTable(tradeLogic, stage) { onChange() } offerColumnsTableWrapper.clear() offerColumnsTableWrapper.add(offerColumnsTable) diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt index 31072a0581..98879ce654 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt @@ -26,7 +26,7 @@ import com.unciv.ui.worldscreen.unit.UnitActionsTable class WorldScreen : CameraStageBaseScreen() { val gameInfo = game.gameInfo - internal val civInfo: CivilizationInfo = gameInfo.getPlayerCivilization() + internal val currentPlayerCiv: CivilizationInfo = gameInfo.getCurrentPlayerCivilization() val tileMapHolder: TileMapHolder = TileMapHolder(this, gameInfo.tileMap) val minimapWrapper = MinimapHolder(tileMapHolder) @@ -56,7 +56,7 @@ class WorldScreen : CameraStageBaseScreen() { techButton.touchable=Touchable.enabled techButton.onClick("paper") { - game.screen = TechPickerScreen(civInfo) + game.screen = TechPickerScreen(currentPlayerCiv) } stage.addActor(tileMapHolder) @@ -80,8 +80,8 @@ class WorldScreen : CameraStageBaseScreen() { val tileToCenterOn: Vector2 = when { - civInfo.cities.isNotEmpty() -> civInfo.getCapital().location - civInfo.getCivUnits().isNotEmpty() -> civInfo.getCivUnits().first().getTile().position + currentPlayerCiv.cities.isNotEmpty() -> currentPlayerCiv.getCapital().location + currentPlayerCiv.getCivUnits().isNotEmpty() -> currentPlayerCiv.getCivUnits().first().getTile().position else -> Vector2.Zero } tileMapHolder.setCenterPosition(tileToCenterOn) @@ -97,9 +97,9 @@ class WorldScreen : CameraStageBaseScreen() { val gameClone = gameInfo.clone() gameClone.setTransients() - val cloneCivilization = gameClone.getPlayerCivilization() + val cloneCivilization = gameClone.getCurrentPlayerCivilization() kotlin.concurrent.thread { - civInfo.happiness = gameClone.getPlayerCivilization().getHappinessForNextTurn().values.sum().toInt() + currentPlayerCiv.happiness = gameClone.getCurrentPlayerCivilization().getHappinessForNextTurn().values.sum().toInt() gameInfo.civilizations.forEach { it.setCitiesConnectedToCapitalTransients() } } @@ -127,10 +127,10 @@ class WorldScreen : CameraStageBaseScreen() { } } - if(gameClone.getPlayerCivilization().getCivUnits().any { it.health<100 }) + if(gameClone.getCurrentPlayerCivilization().getCivUnits().any { it.health<100 }) displayTutorials("InjuredUnits") - if(gameClone.getPlayerCivilization().getCivUnits().any { it.name=="Worker" }) + if(gameClone.getCurrentPlayerCivilization().getCivUnits().any { it.name=="Worker" }) displayTutorials("WorkerTrained") updateTechButton(cloneCivilization) @@ -146,17 +146,17 @@ class WorldScreen : CameraStageBaseScreen() { // if we use the clone, then when we update viewable tiles // it doesn't update the explored tiles of the civ... need to think about that harder // it causes a bug when we move a unit to an unexplored tile (for instance a cavalry unit which can move far) - tileMapHolder.updateTiles(civInfo) + tileMapHolder.updateTiles(currentPlayerCiv) topBar.update(cloneCivilization) - notificationsScroll.update(civInfo.notifications) + notificationsScroll.update(currentPlayerCiv.notifications) notificationsScroll.width = stage.width/3 notificationsScroll.setPosition(stage.width - notificationsScroll.width - 5f, nextTurnButton.y - notificationsScroll.height - 5f) - if(!gameInfo.oneMoreTurnMode && civInfo.victoryManager.hasWon()) game.screen = VictoryScreen() - else if(civInfo.policies.freePolicies>0) game.screen = PolicyPickerScreen(civInfo) - else if(civInfo.greatPeople.freeGreatPeople>0) game.screen = GreatPersonPickerScreen() + if(!gameInfo.oneMoreTurnMode && currentPlayerCiv.victoryManager.hasWon()) game.screen = VictoryScreen() + else if(currentPlayerCiv.policies.freePolicies>0) game.screen = PolicyPickerScreen(currentPlayerCiv) + else if(currentPlayerCiv.greatPeople.freeGreatPeople>0) game.screen = GreatPersonPickerScreen() } private fun updateDiplomacyButton(civInfo: CivilizationInfo) { @@ -200,16 +200,16 @@ class WorldScreen : CameraStageBaseScreen() { private fun createNextTurnButton(): TextButton { val nextTurnButton = TextButton("Next turn".tr(), CameraStageBaseScreen.skin) nextTurnButton.onClick { - if (civInfo.tech.freeTechs != 0) { - game.screen = TechPickerScreen(true, civInfo) + if (currentPlayerCiv.tech.freeTechs != 0) { + game.screen = TechPickerScreen(true, currentPlayerCiv) return@onClick - } else if (civInfo.policies.shouldOpenPolicyPicker) { - game.screen = PolicyPickerScreen(civInfo) - civInfo.policies.shouldOpenPolicyPicker = false + } else if (currentPlayerCiv.policies.shouldOpenPolicyPicker) { + game.screen = PolicyPickerScreen(currentPlayerCiv) + currentPlayerCiv.policies.shouldOpenPolicyPicker = false return@onClick } - else if (civInfo.tech.currentTechnology() == null && civInfo.cities.isNotEmpty()) { - game.screen = TechPickerScreen(civInfo) + else if (currentPlayerCiv.tech.currentTechnology() == null && currentPlayerCiv.cities.isNotEmpty()) { + game.screen = TechPickerScreen(currentPlayerCiv) return@onClick } @@ -264,30 +264,37 @@ class WorldScreen : CameraStageBaseScreen() { var shouldUpdate=false override fun render(delta: Float) { if(shouldUpdate){ // This is so that updates happen in the MAIN THREAD, where there is a GL Context, + if(currentPlayerCiv!=gameInfo.getCurrentPlayerCivilization()){ + UnCivGame.Current.worldScreen= WorldScreen().apply { + shouldUpdate=true + } + UnCivGame.Current.setWorldScreen() + } + // otherwise images will not load properly! update() val shownTutorials = UnCivGame.Current.settings.tutorialsShown displayTutorials("NextTurn") if("BarbarianEncountered" !in shownTutorials - && civInfo.viewableTiles.any { it.getUnits().any { unit -> unit.civInfo.isBarbarianCivilization() } }) + && currentPlayerCiv.viewableTiles.any { it.getUnits().any { unit -> unit.civInfo.isBarbarianCivilization() } }) displayTutorials("BarbarianEncountered") - if(civInfo.cities.size > 2) displayTutorials("SecondCity") - if(civInfo.happiness < 0) displayTutorials("Unhappiness") - if(civInfo.goldenAges.isGoldenAge()) displayTutorials("GoldenAge") + if(currentPlayerCiv.cities.size > 2) displayTutorials("SecondCity") + if(currentPlayerCiv.happiness < 0) displayTutorials("Unhappiness") + if(currentPlayerCiv.goldenAges.isGoldenAge()) displayTutorials("GoldenAge") if(gameInfo.turns >= 100) displayTutorials("ContactMe") - val resources = civInfo.getCivResources() + val resources = currentPlayerCiv.getCivResources() if(resources.keys.any { it.resourceType==ResourceType.Luxury }) displayTutorials("LuxuryResource") if(resources.keys.any { it.resourceType==ResourceType.Strategic}) displayTutorials("StrategicResource") if("EnemyCity" !in shownTutorials - && civInfo.exploredTiles.asSequence().map { gameInfo.tileMap[it] } - .any { it.isCityCenter() && it.getOwner()!=civInfo }) + && currentPlayerCiv.exploredTiles.asSequence().map { gameInfo.tileMap[it] } + .any { it.isCityCenter() && it.getOwner()!=currentPlayerCiv }) displayTutorials("EnemyCity") - if("Enables construction of Spaceship parts" in civInfo.getBuildingUniques()) + if("Enables construction of Spaceship parts" in currentPlayerCiv.getBuildingUniques()) displayTutorials("ApolloProgram") - if(civInfo.getCivUnits().any { it.type == UnitType.Siege }) + if(currentPlayerCiv.getCivUnits().any { it.type == UnitType.Siege }) displayTutorials("SiegeUnitTrained") - if(civInfo.tech.getUniques().contains("Enables embarkation for land units")) + if(currentPlayerCiv.tech.getUniques().contains("Enables embarkation for land units")) displayTutorials("CanEmbark") shouldUpdate=false diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt b/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt index e1159c7875..115c215992 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt @@ -58,7 +58,7 @@ class WorldScreenTopBar(val screen: WorldScreen) : Table() { val resourceTable = Table() resourceTable.defaults().pad(5f) val revealedStrategicResources = GameBasics.TileResources.values - .filter { it.resourceType == ResourceType.Strategic } // && playerCivInfo.tech.isResearched(it.revealedBy!!) } + .filter { it.resourceType == ResourceType.Strategic } // && currentPlayerCivInfo.tech.isResearched(it.revealedBy!!) } for (resource in revealedStrategicResources) { val resourceImage = ImageGetter.getResourceImage(resource.name,20f) resourceImages[resource.name] = resourceImage diff --git a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt index 435038d3f8..950eeb352c 100644 --- a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt +++ b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt @@ -15,7 +15,7 @@ import kotlin.math.max class BattleTable(val worldScreen: WorldScreen): Table() { - private val battle = Battle(worldScreen.civInfo.gameInfo) + private val battle = Battle(worldScreen.currentPlayerCiv.gameInfo) init{ skin = CameraStageBaseScreen.skin background = ImageGetter.getBackground(ImageGetter.getBlue()) @@ -44,7 +44,7 @@ class BattleTable(val worldScreen: WorldScreen): Table() { val defender: ICombatant? = Battle(worldScreen.gameInfo).getMapCombatantOfTile(selectedTile) if(defender==null || - defender.getCivilization()==worldScreen.civInfo + defender.getCivilization()==worldScreen.currentPlayerCiv || !(UnCivGame.Current.viewEntireMapForDebug || attacker.getCivilization().exploredTiles.contains(selectedTile.position))) { hide() diff --git a/core/src/com/unciv/ui/worldscreen/bottombar/TileInfoTable.kt b/core/src/com/unciv/ui/worldscreen/bottombar/TileInfoTable.kt index 5f3433e044..adca99b19c 100644 --- a/core/src/com/unciv/ui/worldscreen/bottombar/TileInfoTable.kt +++ b/core/src/com/unciv/ui/worldscreen/bottombar/TileInfoTable.kt @@ -16,7 +16,7 @@ class TileInfoTable(private val worldScreen: WorldScreen) : Table() { internal fun updateTileTable(tile: TileInfo) { clearChildren() - val civInfo = worldScreen.civInfo + val civInfo = worldScreen.currentPlayerCiv columnDefaults(0).padRight(10f) if (UnCivGame.Current.viewEntireMapForDebug || civInfo.exploredTiles.contains(tile.position)) { @@ -34,7 +34,7 @@ class TileInfoTable(private val worldScreen: WorldScreen) : Table() { table.pad(10f) table.defaults().pad(2f) - for (entry in tile.getTileStats(worldScreen.civInfo).toHashMap().filterNot { it.value == 0f }) { + for (entry in tile.getTileStats(worldScreen.currentPlayerCiv).toHashMap().filterNot { it.value == 0f }) { table.add(ImageGetter.getStatIcon(entry.key.toString())).size(20f).align(Align.right) table.add(Label(entry.value.toInt().toString(), skin)).align(Align.left) table.row() diff --git a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt index 8d6bb7d7ec..1c34613463 100644 --- a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt +++ b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt @@ -33,7 +33,7 @@ class WorldScreenOptionsTable internal constructor() : PopupTable() { addButton("Victory status".tr()) { UnCivGame.Current.screen = VictoryScreen() } addButton("Social policies".tr()){ - UnCivGame.Current.screen = PolicyPickerScreen(UnCivGame.Current.gameInfo.getPlayerCivilization()) + UnCivGame.Current.screen = PolicyPickerScreen(UnCivGame.Current.gameInfo.getCurrentPlayerCivilization()) } diff --git a/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt b/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt index c6115f62ad..42db7df7d0 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt @@ -16,7 +16,7 @@ class IdleUnitButton (internal val unitTable: UnitTable, val image = ImageGetter.getImage("OtherIcons/BackArrow") fun getTilesWithIdleUnits() = tileMapHolder.tileMap.values - .filter { it.hasIdleUnit() && it.getUnits().first().owner == unitTable.worldScreen.civInfo.civName } + .filter { it.hasIdleUnit() && it.getUnits().first().owner == unitTable.worldScreen.currentPlayerCiv.civName } init { val imageSize = 25f diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt index c49e90fc44..f17ad5dc57 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt @@ -96,7 +96,7 @@ class UnitActions { } } - if(!unit.type.isCivilian() && tile.improvement !=null && unit.health<100){ + if(!unit.type.isCivilian() && tile.improvement !=null){ actionList += UnitAction("Pillage", unit.currentMovement>0) { tile.improvementInProgress = tile.improvement diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt index 416c44d32a..3e9a747922 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt @@ -44,7 +44,7 @@ class UnitTable(val worldScreen: WorldScreen) : Table(){ fun update() { if(selectedUnit!=null) { - if (selectedUnit!!.civInfo != worldScreen.civInfo) { // The unit that was selected, was captured. It exists but is no longer ours. + if (selectedUnit!!.civInfo != worldScreen.currentPlayerCiv) { // The unit that was selected, was captured. It exists but is no longer ours. selectedUnit = null selectedCity = null currentlyExecutingAction = null @@ -170,14 +170,13 @@ class UnitTable(val worldScreen: WorldScreen) : Table(){ currentlyExecutingAction = null } - else if(selectedTile.militaryUnit!=null && selectedTile.militaryUnit!!.civInfo == worldScreen.civInfo - && selectedUnit!=selectedTile.militaryUnit) { + else if(selectedTile.militaryUnit!=null && selectedTile.militaryUnit!!.civInfo == worldScreen.currentPlayerCiv + && selectedUnit!=selectedTile.militaryUnit){ selectedUnit = selectedTile.militaryUnit selectedCity = null } - - else if (selectedTile.civilianUnit!=null && selectedTile.civilianUnit!!.civInfo == worldScreen.civInfo - && selectedUnit!=selectedTile.civilianUnit) { + else if (selectedTile.civilianUnit!=null && selectedTile.civilianUnit!!.civInfo == worldScreen.currentPlayerCiv + && selectedUnit!=selectedTile.civilianUnit){ selectedUnit = selectedTile.civilianUnit selectedCity = null }