diff --git a/.gitignore b/.gitignore index 67772027..62d35ff6 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,5 @@ gradle.properties SaveFiles/ android/android-release.apk android/assets/GameSettings.json +android/release/output.json +android/release/android-release.apk diff --git a/Credits.md b/Credits.md index 4deb71af..b52b3558 100644 --- a/Credits.md +++ b/Credits.md @@ -57,6 +57,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc ### Modern +* [Helmet](https://thenounproject.com/term/helmet/25216/) By Daniel Turner for Great War Infantry * [Tank](https://thenounproject.com/term/tank/1287510/) By corpus delicti for Landship ### Great People diff --git a/README.md b/README.md index 46756407..c5080b98 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ ![](https://travis-ci.org/yairm210/UnCiv.svg?branch=master) -[![LibGDX](https://img.shields.io/badge/libgdx-1.9.6-red.svg)](https://libgdx.badlogicgames.com/) -[![Kotlin](https://img.shields.io/badge/kotlin-1.2.41-orange.svg)](http://kotlinlang.org/) +[![LibGDX](https://img.shields.io/badge/libgdx-1.9.9-red.svg)](https://libgdx.badlogicgames.com/) +[![Kotlin](https://img.shields.io/badge/kotlin-1.3.10-orange.svg)](http://kotlinlang.org/) ## What is this? diff --git a/android/Images/TechIcons/Replacable Parts.png b/android/Images/TechIcons/Replacable Parts.png new file mode 100644 index 00000000..7b05a756 Binary files /dev/null and b/android/Images/TechIcons/Replacable Parts.png differ diff --git a/android/Images/UnitIcons/Great War Infantry.png b/android/Images/UnitIcons/Great War Infantry.png new file mode 100644 index 00000000..90dc01df Binary files /dev/null and b/android/Images/UnitIcons/Great War Infantry.png differ diff --git a/android/Images/UnitIcons/Landship.png b/android/Images/UnitIcons/Landship.png index 9113e90e..5527a58e 100644 Binary files a/android/Images/UnitIcons/Landship.png and b/android/Images/UnitIcons/Landship.png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index 8738a4ff..ff879d96 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -6,2471 +6,2485 @@ filter: MipMapLinearLinear,MipMapLinearLinear repeat: none BuildingIcons/Angkor Wat rotate: false - xy: 143, 447 + xy: 1777, 1946 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Apollo Program rotate: false - xy: 383, 1735 + xy: 281, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Aqueduct rotate: false - xy: 485, 1735 + xy: 383, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Armory rotate: false - xy: 995, 1735 + xy: 893, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Bank rotate: false - xy: 583, 1633 + xy: 481, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Barracks rotate: false - xy: 889, 1633 + xy: 787, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Bazaar rotate: false - xy: 991, 1633 + xy: 889, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Broadcast Tower rotate: false - xy: 1195, 1633 + xy: 1199, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Burial Tomb rotate: false - xy: 1731, 1835 + xy: 1301, 1764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Castle rotate: false - xy: 1607, 1755 + xy: 1735, 1844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Chichen Itza rotate: false - xy: 306, 863 + xy: 1939, 1844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Circus rotate: false - xy: 334, 1531 + xy: 306, 1076 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Circus Maximus rotate: false - xy: 334, 1429 + xy: 306, 974 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Colloseum rotate: false - xy: 538, 1429 + xy: 436, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Cristo Redentor rotate: false - xy: 640, 1327 + xy: 538, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Eiffel Tower rotate: false - xy: 946, 1327 + xy: 844, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Factory rotate: false - xy: 946, 1225 + xy: 844, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Forbidden Palace rotate: false - xy: 510, 1123 + xy: 1150, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Forge rotate: false - xy: 510, 1021 + xy: 408, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Granary rotate: false - xy: 612, 919 + xy: 510, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hagia Sophia rotate: false - xy: 714, 817 + xy: 714, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hanging Gardens rotate: false - xy: 816, 919 + xy: 816, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Harbor rotate: false - xy: 918, 1021 + xy: 918, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hermitage rotate: false - xy: 1020, 1123 + xy: 714, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hospital rotate: false - xy: 918, 817 + xy: 918, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hydro Plant rotate: false - xy: 1020, 919 + xy: 1020, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Ironworks rotate: false - xy: 510, 715 + xy: 1122, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Library rotate: false - xy: 1122, 715 + xy: 918, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Lighthouse rotate: false - xy: 306, 659 + xy: 1020, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Machu Pichu rotate: false - xy: 612, 613 + xy: 510, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Market rotate: false - xy: 918, 613 + xy: 816, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Military Academy rotate: false - xy: 816, 511 + xy: 714, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Mint rotate: false - xy: 1252, 1531 + xy: 1122, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Monastery rotate: false - xy: 1252, 1429 + xy: 1252, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Monument rotate: false - xy: 1252, 1327 + xy: 1252, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Museum rotate: false - xy: 1224, 1021 + xy: 1224, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/National College rotate: false - xy: 1224, 715 + xy: 1224, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Notre Dame rotate: false - xy: 1224, 511 + xy: 1224, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Nuclear Plant rotate: false - xy: 1399, 1653 + xy: 1297, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Observatory rotate: false - xy: 1603, 1653 + xy: 1603, 1640 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Opera House rotate: false - xy: 1354, 1531 + xy: 1909, 1640 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Oxford University rotate: false - xy: 1354, 1327 + xy: 1354, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Palace rotate: false - xy: 1354, 1225 + xy: 1354, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Paper Maker rotate: false - xy: 1326, 1123 + xy: 1354, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Porcelain Tower rotate: false - xy: 1456, 1347 + xy: 1456, 1335 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Public School rotate: false - xy: 1558, 1347 + xy: 1428, 1029 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Research Lab rotate: false - xy: 1660, 1224 + xy: 1558, 1538 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Booster rotate: false - xy: 1864, 1325 + xy: 1660, 1334 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Cockpit rotate: false - xy: 1762, 1223 + xy: 1762, 1436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Engine rotate: false - xy: 1864, 1223 + xy: 1864, 1538 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Stasis Chamber rotate: false - xy: 245, 454 + xy: 1762, 1334 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Seaport rotate: false - xy: 1428, 715 + xy: 1762, 1232 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Sistine Chapel rotate: false - xy: 1530, 837 + xy: 1632, 1028 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Solar Plant rotate: false - xy: 1530, 633 + xy: 1530, 824 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Spaceship Factory rotate: false - xy: 1530, 531 + xy: 1632, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stable rotate: false - xy: 1632, 816 + xy: 1632, 824 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stadium rotate: false - xy: 1632, 714 + xy: 1734, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stock Exchange rotate: false - xy: 1734, 1019 + xy: 1632, 722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stone Works rotate: false - xy: 1734, 917 + xy: 1836, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stonehenge rotate: false - xy: 1836, 1019 + xy: 1632, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Sydney Opera House rotate: false - xy: 1734, 611 + xy: 1836, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Taj Mahal rotate: false - xy: 1836, 713 + xy: 1530, 518 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Temple rotate: false - xy: 1836, 611 + xy: 1632, 518 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Great Library rotate: false - xy: 1734, 509 + xy: 1734, 518 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Great Lighthouse rotate: false - xy: 1836, 509 + xy: 1836, 518 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Louvre rotate: false - xy: 1530, 429 + xy: 1938, 1130 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Oracle rotate: false - xy: 1632, 414 + xy: 1938, 1028 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Pyramids rotate: false - xy: 1734, 407 + xy: 1938, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Theatre rotate: false - xy: 1938, 1121 + xy: 1938, 722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/University rotate: false - xy: 1938, 611 + xy: 132, 274 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Walls rotate: false - xy: 1938, 407 + xy: 132, 70 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Windmill rotate: false - xy: 132, 141 + xy: 347, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Workshop rotate: false - xy: 551, 409 + xy: 755, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 FlagIcons/Dutch rotate: false - xy: 2, 297 + xy: 1271, 1866 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/English rotate: false - xy: 2, 167 + xy: 2, 328 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/French rotate: false - xy: 2, 37 + xy: 1401, 1866 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/German rotate: false - xy: 1471, 1857 + xy: 2, 198 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Italian rotate: false - xy: 1601, 1857 + xy: 2, 68 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Romanian rotate: false - xy: 204, 1429 + xy: 204, 1438 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Russian rotate: false - xy: 204, 1299 + xy: 204, 1308 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Spanish rotate: false - xy: 204, 1169 + xy: 204, 1178 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 ImprovementIcons/Academy rotate: false - xy: 204, 964 + xy: 204, 973 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Ancient ruins rotate: false - xy: 1875, 1937 + xy: 1675, 1946 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Camp rotate: false - xy: 1935, 1835 + xy: 143, 478 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City ruins rotate: false - xy: 334, 1327 + xy: 306, 770 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Customs house rotate: false - xy: 742, 1327 + xy: 640, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Farm rotate: false - xy: 1048, 1327 + xy: 946, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fishing Boats rotate: false - xy: 1150, 1225 + xy: 1048, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Landmark rotate: false - xy: 1020, 715 + xy: 714, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Lumber mill rotate: false - xy: 408, 613 + xy: 204, 667 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Manufactory rotate: false - xy: 714, 613 + xy: 612, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Mine rotate: false - xy: 1020, 511 + xy: 918, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Oil well rotate: false - xy: 1909, 1631 + xy: 1807, 1640 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Plantation rotate: false - xy: 1558, 1551 + xy: 1456, 1539 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Quarry rotate: false - xy: 1558, 1245 + xy: 1428, 927 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Railroad rotate: false - xy: 1660, 1428 + xy: 1428, 723 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Railroad rotate: false - xy: 1660, 1428 + xy: 1428, 723 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Road rotate: false - xy: 1864, 1529 + xy: 1558, 1334 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Trading post rotate: false - xy: 1938, 917 + xy: 1938, 518 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/BackArrow rotate: false - xy: 277, 1581 + xy: 277, 1590 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Banner rotate: false - xy: 787, 1633 + xy: 685, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Circle rotate: false - xy: 1291, 1859 + xy: 2, 580 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 OtherIcons/City rotate: false - xy: 436, 1531 + xy: 306, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Crosshair rotate: false - xy: 844, 1531 + xy: 742, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DisbandUnit rotate: false - xy: 946, 1531 + xy: 844, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Fire rotate: false - xy: 1048, 1225 + xy: 1150, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MenuIcon rotate: false - xy: 510, 511 + xy: 408, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pentagon rotate: false - xy: 1326, 817 + xy: 1326, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Shield rotate: false - xy: 1530, 1143 + xy: 1530, 1028 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Sleep rotate: false - xy: 1530, 735 + xy: 1734, 1130 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Star rotate: false - xy: 1632, 516 + xy: 245, 470 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 OtherIcons/Stop rotate: false - xy: 1734, 815 + xy: 1734, 722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/civTableBackground rotate: false - xy: 1471, 1987 + xy: 1271, 1996 size: 300, 50 orig: 300, 50 offset: 0, 0 index: -1 OtherIcons/tileTableBackground rotate: false - xy: 2, 549 + xy: 1089, 1846 size: 180, 200 orig: 180, 200 offset: 0, 0 index: -1 OtherIcons/whiteDot rotate: false - xy: 1527, 508 + xy: 277, 1803 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 PolicyIcons/Aristocracy rotate: false - xy: 1977, 1987 + xy: 1981, 1996 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Citizenship rotate: false - xy: 334, 1173 + xy: 334, 1182 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Civil Society rotate: false - xy: 347, 357 + xy: 2, 16 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Collective Rule rotate: false - xy: 755, 459 + xy: 959, 468 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Constitution rotate: false - xy: 399, 357 + xy: 54, 16 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Democracy rotate: false - xy: 807, 459 + xy: 1011, 468 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Discipline rotate: false - xy: 451, 357 + xy: 1063, 468 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Entrepreneurship rotate: false - xy: 859, 459 + xy: 1115, 468 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Facism rotate: false - xy: 503, 357 + xy: 1167, 468 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Religion rotate: false - xy: 911, 459 + xy: 1219, 468 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Speech rotate: false - xy: 555, 357 + xy: 1271, 468 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Thought rotate: false - xy: 963, 459 + xy: 1323, 468 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Humanism rotate: false - xy: 607, 357 + xy: 1375, 468 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Landed Elite rotate: false - xy: 1015, 459 + xy: 347, 366 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Legalism rotate: false - xy: 659, 357 + xy: 399, 366 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mandate Of Heaven rotate: false - xy: 1067, 459 + xy: 451, 366 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mercantilism rotate: false - xy: 1119, 459 + xy: 503, 366 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Meritocracy rotate: false - xy: 1171, 459 + xy: 555, 366 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Militarism rotate: false - xy: 1223, 459 + xy: 607, 366 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Caste rotate: false - xy: 1275, 459 + xy: 659, 366 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Tradition rotate: false - xy: 1327, 459 + xy: 711, 366 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Monarchy rotate: false - xy: 1379, 459 + xy: 763, 366 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Oligarchy rotate: false - xy: 1431, 459 + xy: 815, 366 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Organized Religion rotate: false - xy: 755, 407 + xy: 867, 366 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Patronage rotate: false - xy: 807, 407 + xy: 959, 416 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Police State rotate: false - xy: 859, 407 + xy: 1011, 416 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Populism rotate: false - xy: 911, 407 + xy: 1063, 416 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Professional Army rotate: false - xy: 963, 407 + xy: 1115, 416 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Protectionism rotate: false - xy: 1015, 407 + xy: 1167, 416 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Reformation rotate: false - xy: 1067, 407 + xy: 1219, 416 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Representation rotate: false - xy: 1119, 407 + xy: 1271, 416 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Republic rotate: false - xy: 1171, 407 + xy: 1323, 416 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scientific Revolution rotate: false - xy: 1223, 407 + xy: 1375, 416 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Secularism rotate: false - xy: 1275, 407 + xy: 1427, 467 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Sovereignty rotate: false - xy: 1327, 407 + xy: 1427, 415 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Theocracy rotate: false - xy: 1379, 407 + xy: 1966, 1588 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Total War rotate: false - xy: 1431, 407 + xy: 1966, 1536 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Trade Unions rotate: false - xy: 1966, 1579 + xy: 1966, 1484 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Universal Suffrage rotate: false - xy: 1966, 1527 + xy: 1966, 1432 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Warrior Code rotate: false - xy: 1966, 1475 + xy: 1966, 1380 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ResourceIcons/Aluminum rotate: false - xy: 1773, 1937 + xy: 1573, 1946 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Bananas rotate: false - xy: 481, 1633 + xy: 379, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cattle rotate: false - xy: 1811, 1733 + xy: 1505, 1742 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Coal rotate: false - xy: 436, 1327 + xy: 334, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cotton rotate: false - xy: 538, 1225 + xy: 436, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Deer rotate: false - xy: 844, 1429 + xy: 742, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Dyes rotate: false - xy: 742, 1225 + xy: 640, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Fish rotate: false - xy: 1150, 1327 + xy: 946, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Furs rotate: false - xy: 408, 817 + xy: 510, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gems rotate: false - xy: 714, 1123 + xy: 612, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gold rotate: false - xy: 510, 817 + xy: 408, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Horses rotate: false - xy: 1122, 1123 + xy: 816, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Incense rotate: false - xy: 1122, 1021 + xy: 1122, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Iron rotate: false - xy: 1122, 919 + xy: 1020, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Ivory rotate: false - xy: 612, 715 + xy: 1122, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Marble rotate: false - xy: 816, 613 + xy: 714, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Oil rotate: false - xy: 1807, 1631 + xy: 1705, 1640 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Pearls rotate: false - xy: 1326, 919 + xy: 1326, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sheep rotate: false - xy: 1428, 511 + xy: 1530, 1130 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silk rotate: false - xy: 1530, 1041 + xy: 1632, 1130 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silver rotate: false - xy: 1530, 939 + xy: 1530, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Spices rotate: false - xy: 1632, 918 + xy: 1530, 722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Stone rotate: false - xy: 1836, 1121 + xy: 1734, 824 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sugar rotate: false - xy: 1734, 713 + xy: 1734, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Uranium rotate: false - xy: 1938, 509 + xy: 132, 172 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Whales rotate: false - xy: 245, 352 + xy: 234, 164 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wheat rotate: false - xy: 132, 243 + xy: 234, 62 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wine rotate: false - xy: 132, 39 + xy: 449, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/CityConnection rotate: false - xy: 436, 1429 + xy: 334, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/City_Center_(Civ6) rotate: false - xy: 538, 1531 + xy: 334, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Culture rotate: false - xy: 281, 1837 + xy: 281, 1846 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Food rotate: false - xy: 2, 1357 + xy: 2, 1366 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Gold rotate: false - xy: 483, 1837 + xy: 483, 1846 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Happiness rotate: false - xy: 2, 1155 + xy: 2, 1164 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Malcontent rotate: false - xy: 2, 953 + xy: 685, 1846 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Movement rotate: false - xy: 1224, 1123 + xy: 1252, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Population rotate: false - xy: 887, 1837 + xy: 2, 962 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Production rotate: false - xy: 2, 751 + xy: 887, 1846 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/RangedStrength rotate: false - xy: 1660, 1326 + xy: 1428, 621 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Science rotate: false - xy: 1089, 1837 + xy: 2, 760 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Specialist rotate: false - xy: 1632, 1020 + xy: 1836, 1130 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Strength rotate: false - xy: 1836, 917 + xy: 1836, 824 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Acoustics rotate: false - xy: 204, 862 + xy: 204, 871 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Agriculture rotate: false - xy: 204, 760 + xy: 204, 769 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Animal Husbandry rotate: false - xy: 281, 1735 + xy: 1879, 1946 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Pasture rotate: false - xy: 281, 1735 + xy: 1879, 1946 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archaeology rotate: false - xy: 587, 1735 + xy: 485, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archery rotate: false - xy: 791, 1735 + xy: 689, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Architecture rotate: false - xy: 893, 1735 + xy: 791, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Astronomy rotate: false - xy: 277, 1633 + xy: 1097, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Banking rotate: false - xy: 685, 1633 + xy: 583, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Biology rotate: false - xy: 1093, 1633 + xy: 991, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Bronze Working rotate: false - xy: 1301, 1757 + xy: 1195, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Calendar rotate: false - xy: 1833, 1835 + xy: 1403, 1764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chemistry rotate: false - xy: 306, 965 + xy: 1811, 1742 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Medical Lab rotate: false - xy: 306, 965 + xy: 1811, 1742 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chivalry rotate: false - xy: 306, 761 + xy: 1913, 1742 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Civil Service rotate: false - xy: 334, 1225 + xy: 436, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Combustion rotate: false - xy: 640, 1531 + xy: 538, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Compass rotate: false - xy: 538, 1327 + xy: 436, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Computers rotate: false - xy: 640, 1429 + xy: 538, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Construction rotate: false - xy: 742, 1531 + xy: 640, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Currency rotate: false - xy: 640, 1225 + xy: 538, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Dynamite rotate: false - xy: 844, 1327 + xy: 742, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Ecology rotate: false - xy: 946, 1429 + xy: 844, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Economics rotate: false - xy: 1048, 1531 + xy: 946, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Education rotate: false - xy: 844, 1225 + xy: 742, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Electricity rotate: false - xy: 1048, 1429 + xy: 946, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Engineering rotate: false - xy: 1150, 1531 + xy: 1048, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Fertilizer rotate: false - xy: 1150, 1429 + xy: 1048, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Flight rotate: false - xy: 408, 1123 + xy: 1150, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Future Tech rotate: false - xy: 510, 919 + xy: 408, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Guilds rotate: false - xy: 816, 1021 + xy: 816, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Gunpowder rotate: false - xy: 918, 1123 + xy: 612, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Horseback Riding rotate: false - xy: 918, 919 + xy: 918, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Industrialization rotate: false - xy: 1020, 817 + xy: 918, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Iron Working rotate: false - xy: 1122, 817 + xy: 1122, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Machinery rotate: false - xy: 510, 613 + xy: 408, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Masonry rotate: false - xy: 1122, 613 + xy: 1020, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mass Media rotate: false - xy: 306, 557 + xy: 1122, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mathematics rotate: false - xy: 408, 511 + xy: 306, 566 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metal Casting rotate: false - xy: 612, 511 + xy: 510, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metallurgy rotate: false - xy: 714, 511 + xy: 612, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Military Science rotate: false - xy: 918, 511 + xy: 816, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mining rotate: false - xy: 1122, 511 + xy: 1020, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nanotechnology rotate: false - xy: 1224, 817 + xy: 1224, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Navigation rotate: false - xy: 1224, 613 + xy: 1224, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nuclear Fission rotate: false - xy: 1297, 1633 + xy: 1224, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Optics rotate: false - xy: 1354, 1429 + xy: 1354, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Particle Physics rotate: false - xy: 1326, 1021 + xy: 1326, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pharmaceuticals rotate: false - xy: 1326, 715 + xy: 1326, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Philosophy rotate: false - xy: 1326, 613 + xy: 1326, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Physics rotate: false - xy: 1326, 511 + xy: 1326, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Plastics rotate: false - xy: 1456, 1449 + xy: 1456, 1437 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pottery rotate: false - xy: 1558, 1449 + xy: 1456, 1233 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Printing Press rotate: false - xy: 1456, 1245 + xy: 1428, 1131 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Radio rotate: false - xy: 1660, 1530 + xy: 1428, 825 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +TechIcons/Replacable Parts + rotate: false + xy: 1428, 519 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rifling rotate: false - xy: 1762, 1427 + xy: 1660, 1538 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Robotics rotate: false - xy: 1762, 1325 + xy: 1660, 1436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rocketry rotate: false - xy: 1864, 1427 + xy: 1762, 1538 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Sailing rotate: false - xy: 1428, 1123 + xy: 1864, 1436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Satellites rotate: false - xy: 1428, 1021 + xy: 1864, 1334 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Scientific Theory rotate: false - xy: 1428, 919 + xy: 1558, 1232 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steam Power rotate: false - xy: 1632, 612 + xy: 1836, 1028 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steel rotate: false - xy: 1734, 1121 + xy: 1530, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/The Wheel rotate: false - xy: 1836, 407 + xy: 1938, 824 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Theology rotate: false - xy: 1938, 1019 + xy: 1938, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Trapping rotate: false - xy: 1938, 815 + xy: 143, 376 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Writing rotate: false - xy: 653, 409 + xy: 857, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/CrosshatchHexagon rotate: false - xy: 2, 1559 + xy: 2, 1568 size: 273, 236 orig: 273, 236 offset: 0, 0 index: -1 TerrainIcons/Flood plains rotate: false - xy: 408, 1021 + xy: 1048, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Forest rotate: false - xy: 408, 919 + xy: 1150, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Hexagon rotate: false - xy: 2, 1797 + xy: 2, 1806 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 TerrainIcons/HexagonBorder rotate: false - xy: 2, 427 + xy: 2, 458 size: 139, 120 orig: 139, 120 offset: 0, 0 index: -1 TerrainIcons/Hill rotate: false - xy: 816, 817 + xy: 816, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Jungle rotate: false - xy: 714, 715 + xy: 408, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Marsh rotate: false - xy: 1020, 613 + xy: 918, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Mountain rotate: false - xy: 1252, 1225 + xy: 1252, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Oasis rotate: false - xy: 1501, 1653 + xy: 1399, 1662 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/road rotate: false - xy: 2, 24 + xy: 1301, 1751 size: 61, 11 orig: 61, 11 offset: 0, 0 index: -1 UnitIcons/Archer rotate: false - xy: 689, 1735 + xy: 587, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Artillery rotate: false - xy: 1097, 1735 + xy: 995, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ballista rotate: false - xy: 379, 1633 + xy: 277, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Bowman rotate: false - xy: 1199, 1735 + xy: 1093, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cannon rotate: false - xy: 1403, 1755 + xy: 1531, 1844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Caravel rotate: false - xy: 1505, 1755 + xy: 1633, 1844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Catapult rotate: false - xy: 1709, 1733 + xy: 1837, 1844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cavalry rotate: false - xy: 1913, 1733 + xy: 1607, 1742 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Chariot Archer rotate: false - xy: 306, 1067 + xy: 1709, 1742 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Companion Cavalry rotate: false - xy: 436, 1225 + xy: 334, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Crossbowman rotate: false - xy: 742, 1429 + xy: 640, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Frigate rotate: false - xy: 612, 1123 + xy: 408, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Galleass rotate: false - xy: 612, 1021 + xy: 510, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Artist rotate: false - xy: 714, 1021 + xy: 612, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Engineer rotate: false - xy: 816, 1123 + xy: 714, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Merchant rotate: false - xy: 612, 817 + xy: 510, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Scientist rotate: false - xy: 714, 919 + xy: 612, 928 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +UnitIcons/Great War Infantry + rotate: false + xy: 714, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Horseman rotate: false - xy: 1020, 1021 + xy: 1020, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ironclad rotate: false - xy: 408, 715 + xy: 1020, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Knight rotate: false - xy: 816, 715 + xy: 510, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Lancer rotate: false - xy: 918, 715 + xy: 612, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Landship rotate: false - xy: 685, 1837 - size: 200, 200 - orig: 200, 200 + xy: 816, 724 + size: 100, 100 + orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Longbowman rotate: false - xy: 204, 658 + xy: 1122, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Longswordsman rotate: false - xy: 184, 556 + xy: 306, 668 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Musketeer rotate: false - xy: 1224, 919 + xy: 1224, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Musketman rotate: false - xy: 1705, 1632 + xy: 1501, 1641 size: 100, 99 orig: 100, 99 offset: 0, 0 index: -1 UnitIcons/Pikeman rotate: false - xy: 1456, 1551 + xy: 1326, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Rifleman rotate: false - xy: 1762, 1529 + xy: 1558, 1436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Scout rotate: false - xy: 1428, 817 + xy: 1660, 1232 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Settler rotate: false - xy: 1428, 613 + xy: 1864, 1232 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Spearman rotate: false - xy: 1632, 1122 + xy: 1734, 1028 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Swordsman rotate: false - xy: 1836, 815 + xy: 1836, 722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Trebuchet rotate: false - xy: 1938, 713 + xy: 245, 368 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Trireme rotate: false - xy: 204, 1066 + xy: 204, 1075 size: 100, 101 orig: 100, 101 offset: 0, 0 index: -1 UnitIcons/Warrior rotate: false - xy: 143, 345 + xy: 234, 266 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Work Boats rotate: false - xy: 347, 409 + xy: 551, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Worker rotate: false - xy: 449, 409 + xy: 653, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitPromotionIcons/Accuracy_III_(Civ5) rotate: false - xy: 1709, 1835 + xy: 1505, 1844 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Accuracy_II_(Civ5) rotate: false - xy: 1301, 1735 + xy: 182, 738 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Accuracy_I_(Civ5) rotate: false - xy: 277, 1559 + xy: 277, 1568 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage_III_(Civ5) rotate: false - xy: 386, 1203 + xy: 386, 1212 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage_II_(Civ5) rotate: false - xy: 1323, 1735 + xy: 182, 716 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage_I_(Civ5) rotate: false - xy: 299, 1559 + xy: 299, 1568 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Blitz_(Civ5) rotate: false - xy: 386, 1181 + xy: 386, 1190 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding_Party_III_(Civ5) rotate: false - xy: 1345, 1735 + xy: 182, 694 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding_Party_II_(Civ5) rotate: false - xy: 1367, 1735 + xy: 182, 672 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding_Party_I_(Civ5) rotate: false - xy: 1731, 1965 + xy: 182, 650 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment_III_(Civ5) rotate: false - xy: 1977, 1965 + xy: 1531, 1974 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment_II_(Civ5) rotate: false - xy: 1483, 489 + xy: 347, 544 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment_I_(Civ5) rotate: false - xy: 711, 387 + xy: 1981, 1974 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Charge_(Civ5) rotate: false - xy: 733, 387 + xy: 106, 46 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal_Raider_III_(Civ5) rotate: false - xy: 2015, 1813 + xy: 919, 396 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal_Raider_II_(Civ5) rotate: false - xy: 1966, 1453 + xy: 1479, 497 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal_Raider_I_(Civ5) rotate: false - xy: 2, 2 + xy: 2015, 1822 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Cover_II_(Civ5) rotate: false - xy: 1731, 1943 + xy: 1966, 1358 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Cover_I_(Civ5) rotate: false - xy: 1977, 1943 + xy: 182, 628 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Drill_III_(Civ5) rotate: false - xy: 1999, 1965 + xy: 204, 645 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Drill_II_(Civ5) rotate: false - xy: 1483, 467 + xy: 1531, 1952 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Drill_I_(Civ5) rotate: false - xy: 1505, 489 + xy: 347, 522 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Formation_II_(Civ5) rotate: false - xy: 711, 365 + xy: 369, 544 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Formation_I_(Civ5) rotate: false - xy: 2015, 1791 + xy: 1981, 1952 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Indirect_Fire_(Civ5) rotate: false - xy: 1966, 1431 + xy: 2003, 1974 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Logistics_(Civ5) rotate: false - xy: 1988, 1453 + xy: 106, 24 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/March_(Civ5) rotate: false - xy: 24, 2 + xy: 106, 2 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Mobility_(Civ5) rotate: false - xy: 1999, 1943 + xy: 919, 374 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Range_(Civ5) rotate: false - xy: 1483, 445 + xy: 1479, 475 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting_III_(Civ5) rotate: false - xy: 1505, 467 + xy: 1501, 497 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting_II_(Civ5) rotate: false - xy: 733, 365 + xy: 2015, 1800 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting_I_(Civ5) rotate: false - xy: 755, 385 + xy: 1966, 1336 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Sentry_(Civ5) rotate: false - xy: 2015, 1769 + xy: 1988, 1358 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Shock_III_(Civ5) rotate: false - xy: 1966, 1409 + xy: 182, 606 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Shock_II_(Civ5) rotate: false - xy: 1988, 1431 + xy: 204, 623 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Shock_I_(Civ5) rotate: false - xy: 1483, 423 + xy: 226, 645 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Siege_(Civ5) rotate: false - xy: 1505, 445 + xy: 369, 522 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting_III_(Civ5) rotate: false - xy: 777, 385 + xy: 2003, 1952 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting_II_(Civ5) rotate: false - xy: 2015, 1747 + xy: 1479, 453 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting_I_(Civ5) rotate: false - xy: 1966, 1387 + xy: 1501, 475 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Volley_(Civ5) rotate: false - xy: 1988, 1409 + xy: 2015, 1778 size: 20, 20 orig: 20, 20 offset: 0, 0 diff --git a/android/assets/game.png b/android/assets/game.png index 38388c61..56547b3a 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/Techs.json b/android/assets/jsons/Techs.json index a53f1d63..5f89b483 100644 --- a/android/assets/jsons/Techs.json +++ b/android/assets/jsons/Techs.json @@ -363,6 +363,11 @@ prerequisites:["Electricity"], baseDescription:"Does nothing since we have no sea tiles - In theory, allows construction of offshore platforms and submarines" },*/ + { + name:"Replacable Parts", + row:4, + prerequisites:["Electricity","Steam Power"] + }, { name:"Radio", row:5, @@ -385,7 +390,7 @@ { name:"Plastics", row:3, - prerequisites:["Biology"] + prerequisites:["Biology","Replacable Parts"] },/* { name:"Electronics", diff --git a/android/assets/jsons/Units.json b/android/assets/jsons/Units.json index 08fe4f41..dd4e5c45 100644 --- a/android/assets/jsons/Units.json +++ b/android/assets/jsons/Units.json @@ -292,6 +292,8 @@ strength:24, cost: 150, requiredTech:"Gunpowder", + upgradesTo:"Rifleman," + obsoleteTech:"Rifling", hurryCostModifier:20 }, { @@ -303,6 +305,8 @@ strength:28, cost: 150, requiredTech:"Gunpowder", + upgradesTo:"Rifleman," + obsoleteTech:"Rifling", hurryCostModifier:20 }, { @@ -337,6 +341,8 @@ strength:34, cost: 225, requiredTech:"Rifling", + obsoleteTech:"Replacable Parts", + upgradesTo:"Great War Infantry", hurryCostModifier:20 }, { @@ -347,6 +353,7 @@ cost: 225, requiredTech:"Military Science", requiredResource:"Horses", + upgradesTo:"Landship", uniques:["Can move after attacking","No defensive terrain bonus","Penalty vs City 33%" ], hurryCostModifier:20 }, @@ -359,7 +366,8 @@ range:3, cost: 320, requiredTech:"Dynamite", - uniques:["Bonus vs City 200%","No defensive terrain bonus","Must set up to ranged attack","Limited Visibility","Indirect Fire"], + uniques:["Bonus vs City 200%","No defensive terrain bonus", + "Must set up to ranged attack","Limited Visibility","Indirect Fire"], hurryCostModifier:20 }, { @@ -387,6 +395,15 @@ uniques:["Can move after attacking","No defensive terrain bonus"], hurryCostModifier:20 }, + { + name:"Great War Infantry", + unitType:"Melee", + movement:2, + strength:50, + cost: 320, + requiredTech:"Replacable Parts", + hurryCostModifier:20 + }, /* Great people */ diff --git a/android/build.gradle b/android/build.gradle index 113426ca..eb9234c4 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -21,8 +21,8 @@ android { applicationId "com.unciv.game" minSdkVersion 14 targetSdkVersion 26 - versionCode 169 - versionName "2.10.8" + versionCode 170 + versionName "2.10.9" } // Had to add this crap for Travis to build, it wanted to sign the app diff --git a/core/src/com/unciv/UnCivGame.kt b/core/src/com/unciv/UnCivGame.kt index 59ef15b2..afeb5b51 100644 --- a/core/src/com/unciv/UnCivGame.kt +++ b/core/src/com/unciv/UnCivGame.kt @@ -62,7 +62,7 @@ class UnCivGame : Game() { fun setWorldScreen() { setScreen(worldScreen) Gdx.input.inputProcessor = worldScreen.stage - worldScreen.update() // This can set the screen to the policy picker or tech picker screen, so the input processor must come before + worldScreen.shouldUpdate=true // This can set the screen to the policy picker or tech picker screen, so the input processor must come before } override fun resume() { diff --git a/core/src/com/unciv/logic/automation/UnitAutomation.kt b/core/src/com/unciv/logic/automation/UnitAutomation.kt index a841e8b8..b0ae7cac 100644 --- a/core/src/com/unciv/logic/automation/UnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/UnitAutomation.kt @@ -34,7 +34,8 @@ class UnitAutomation{ return SpecificUnitAutomation().automateWorkBoats(unit) } - if(unit.name.startsWith("Great")){ + if(unit.name.startsWith("Great") + && unit.name in GreatPersonManager().statToGreatPersonMapping.values){ // So "Great War Infantry" isn't caught here return SpecificUnitAutomation().automateGreatPerson(unit)// I don't know what to do with you yet. } @@ -357,10 +358,8 @@ class SpecificUnitAutomation{ if (unit.currentMovement > 0 && unit.currentTile == closestReachableResource) { val createImprovementAction = UnitActions().getUnitActions(unit, UnCivGame.Current.worldScreen) .firstOrNull { it.name.startsWith("Create") } // could be either fishing boats or oil well - if (createImprovementAction != null) { - createImprovementAction.action() - return // unit is already gone, can't "explore" - } + if (createImprovementAction != null) + return createImprovementAction.action() // unit is already gone, can't "explore" } } else UnitAutomation().explore(unit, unit.getDistanceToTiles()) @@ -402,10 +401,7 @@ class SpecificUnitAutomation{ .firstOrNull { unit.movementAlgs().canReach(it) } if(bestCityLocation==null) // We got a badass over here, all tiles within 5 are taken? Screw it, random walk. - { - UnitAutomation().explore(unit, unit.getDistanceToTiles()) - return - } + return UnitAutomation().explore(unit, unit.getDistanceToTiles()) if(bestCityLocation.getTilesInDistance(3).any { it.isCityCenter() }) throw Exception("City within distance") @@ -430,7 +426,7 @@ class SpecificUnitAutomation{ for(city in citiesByStatBoost){ val pathToCity =unit.movementAlgs().getShortestPath(city.getCenterTile()) if(pathToCity.isEmpty()) continue - if(pathToCity.size>2) { + if(pathToCity.size>2){ unit.movementAlgs().headTowards(city.getCenterTile()) return } diff --git a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt index bf058540..f8b4f581 100644 --- a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt @@ -84,7 +84,7 @@ class TechPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen() } else civTech.techsToResearch = techsToResearch game.setWorldScreen() - game.worldScreen.update() + game.worldScreen.shouldUpdate=true dispose() } diff --git a/core/src/com/unciv/ui/worldscreen/Minimap.kt b/core/src/com/unciv/ui/worldscreen/Minimap.kt index 7ffc9eeb..ebe03eb7 100644 --- a/core/src/com/unciv/ui/worldscreen/Minimap.kt +++ b/core/src/com/unciv/ui/worldscreen/Minimap.kt @@ -118,7 +118,7 @@ class MinimapHolder(val tileMapHolder: TileMapHolder): Table(){ populationImage.onClick { settings.showWorkedTiles = !settings.showWorkedTiles populationImage.image.color.a = if(settings.showWorkedTiles) 1f else 0.5f - worldScreen.update() + worldScreen.shouldUpdate=true } toggleIconTable.add(populationImage).row() @@ -128,7 +128,7 @@ class MinimapHolder(val tileMapHolder: TileMapHolder): Table(){ resourceImage.onClick { settings.showResourcesAndImprovements = !settings.showResourcesAndImprovements resourceImage.image.color.a = if(settings.showResourcesAndImprovements) 1f else 0.5f - worldScreen.update() + worldScreen.shouldUpdate=true } toggleIconTable.add(resourceImage) toggleIconTable.pack() diff --git a/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt b/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt index 8fd7f2d9..57ca61af 100644 --- a/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt +++ b/core/src/com/unciv/ui/worldscreen/TileMapHolder.kt @@ -102,7 +102,7 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap: } worldScreen.bottomBar.unitTable.tileSelected(tileInfo) - worldScreen.update() + worldScreen.shouldUpdate=true } private fun addMoveHereButtonToTile(selectedUnit: MapUnit, tileInfo: TileInfo, tileGroup: WorldTileGroup) { @@ -114,7 +114,8 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap: val turnsToGetThere = selectedUnit.movementAlgs().getShortestPath(tileInfo).size val numberCircle = ImageGetter.getImage("OtherIcons/Circle").apply { width = size / 2; height = size / 2;color = Color.BLUE } moveHereButton.addActor(numberCircle) - moveHereButton.addActor(Label(turnsToGetThere.toString(), CameraStageBaseScreen.skin).apply { center(numberCircle); setFontColor(Color.WHITE) }) + moveHereButton.addActor(Label(turnsToGetThere.toString(), CameraStageBaseScreen.skin) + .apply { center(numberCircle); setFontColor(Color.WHITE) }) val unitIcon = ImageGetter.getUnitImage(selectedUnit, size / 2) unitIcon.y = size - unitIcon.height @@ -132,7 +133,7 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap: // we don't update it directly because we're on a different thread; instead, we tell it to update itself worldScreen.shouldUpdate = true - moveToOverlay!!.remove() + moveToOverlay?.remove() moveToOverlay = null } } @@ -220,7 +221,7 @@ class TileMapHolder(internal val worldScreen: WorldScreen, internal val tileMap: // Here it's the same, only the Y axis is inverted - when at 0 we're at the top, not bottom - so we invert it back. scrollY = maxY - (tileGroup.y + tileGroup.width / 2 - worldScreen.stage.height / 2) updateVisualScroll() - worldScreen.update() + worldScreen.shouldUpdate=true } diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt index 058d2bbc..8aca5a34 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt @@ -86,8 +86,10 @@ class WorldScreen : CameraStageBaseScreen() { createNextTurnButton() // needs civ table to be positioned } - - fun update() { + // This is private so that we will set the shouldUpdate to true instead. + // That way, not only do we save a lot of unneccesary updates, we also ensure that all updates are called from the main GL thread + // and we don't get any silly concurrency problems! + private fun update() { // many of the display functions will be called with the game clone and not the actual game, // because that's guaranteed to stay the exact same and so we won't get any concurrent modification exceptions diff --git a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt index accc98f3..76e7398a 100644 --- a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt +++ b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt @@ -137,7 +137,7 @@ class BattleTable(val worldScreen: WorldScreen): Table() { attackButton.onClick { attacker.unit.moveToTile(attackableEnemy.tileToAttackFrom) battle.attack(attacker, defender) - worldScreen.update() + worldScreen.shouldUpdate=true } } diff --git a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenDisplayOptionsTable.kt b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenDisplayOptionsTable.kt index 482c5a09..60228e57 100644 --- a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenDisplayOptionsTable.kt +++ b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenDisplayOptionsTable.kt @@ -89,6 +89,6 @@ class WorldScreenDisplayOptionsTable() : PopupTable(){ pack() // Needed to show the background. center(UnCivGame.Current.worldScreen.stage) - UnCivGame.Current.worldScreen.update() + UnCivGame.Current.worldScreen.shouldUpdate=true } } \ No newline at end of file diff --git a/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt b/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt index f7892a65..c6115f62 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/IdleUnitButton.kt @@ -41,7 +41,7 @@ class IdleUnitButton (internal val unitTable: UnitTable, tileToSelect = tilesWithIdleUnits[index] } tileMapHolder.setCenterPosition(tileToSelect.position) - unitTable.worldScreen.update() + unitTable.worldScreen.shouldUpdate=true } } diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt index a96da925..ffff8704 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt @@ -185,7 +185,7 @@ class UnitActions { actionList += UnitAction("Disband unit",unit.currentMovement != 0f ) { YesNoPopupTable("Do you really want to disband this unit?".tr(), - {unit.destroy(); worldScreen.update()} ) + {unit.destroy(); worldScreen.shouldUpdate=true} ) } return actionList diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt index 0568f585..29808b2d 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt @@ -14,7 +14,9 @@ class UnitActionsTable(val worldScreen: WorldScreen) : Table(){ fun getIconForUnitAction(unitAction:String): Actor { if(unitAction.startsWith("Upgrade to")){ - val unitToUpgradeTo = Regex("""Upgrade to \[(\S*)\]""").find(unitAction)!!.groups[1]!!.value + // Regexplaination: start with a [, take as many non-] chars as you can, until you reach a ]. + // What you find between the first [ and the first ] that comes after it, will be group no. 1 + val unitToUpgradeTo = Regex("""Upgrade to \[([^\]]*)\]""").find(unitAction)!!.groups[1]!!.value return ImageGetter.getUnitIcon(unitToUpgradeTo) } when(unitAction){ @@ -60,7 +62,7 @@ class UnitActionsTable(val worldScreen: WorldScreen) : Table(){ actionButton.add(Label(unitAction.name.tr(),CameraStageBaseScreen.skin) .setFontColor(Color.WHITE)).pad(5f) actionButton.pack() - actionButton.onClick({ unitAction.action(); UnCivGame.Current.worldScreen.update() }) + actionButton.onClick { unitAction.action(); UnCivGame.Current.worldScreen.shouldUpdate=true } if (!unitAction.canAct) actionButton.disable() return actionButton }