diff --git a/android/Images/BuildingIcons/Courthouse.png b/android/Images/BuildingIcons/Courthouse.png new file mode 100644 index 0000000000..e40506e165 Binary files /dev/null and b/android/Images/BuildingIcons/Courthouse.png differ diff --git a/android/Images/OtherIcons/Puppet.png b/android/Images/OtherIcons/Puppet.png new file mode 100644 index 0000000000..b2cc0f637f Binary files /dev/null and b/android/Images/OtherIcons/Puppet.png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index 8a7daacd50..a264dcac80 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -1,3330 +1,3344 @@ game.png -size: 2481,1840 +size: 2462,1866 format: RGBA8888 filter: MipMapLinearLinear,MipMapLinearLinear repeat: none BuildingIcons/Alhambra rotate: false - xy: 1882, 1738 + xy: 1240, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Angkor Wat rotate: false - xy: 2290, 1738 + xy: 1648, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Apollo Program rotate: false - xy: 587, 1608 + xy: 2056, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Aqueduct rotate: false - xy: 689, 1608 + xy: 2158, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Armory rotate: false - xy: 1301, 1608 + xy: 2, 1408 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Bank rotate: false - xy: 2219, 1636 + xy: 1366, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Barracks rotate: false - xy: 485, 1506 + xy: 1774, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Bazaar rotate: false - xy: 689, 1506 + xy: 1978, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Big Ben rotate: false - xy: 791, 1506 + xy: 2080, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Broadcast Tower rotate: false - xy: 1199, 1506 + xy: 206, 1318 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Burial Tomb rotate: false - xy: 1505, 1534 + xy: 2, 1306 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/CN Tower rotate: false - xy: 1607, 1534 + xy: 512, 1294 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Castle rotate: false - xy: 2219, 1534 + xy: 1124, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Chichen Itza rotate: false - xy: 685, 1404 + xy: 1736, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Circus rotate: false - xy: 1093, 1404 + xy: 2144, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Circus Maximus rotate: false - xy: 1195, 1404 + xy: 2246, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Colosseum rotate: false - xy: 1709, 1432 + xy: 614, 1192 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Colossus rotate: false - xy: 1811, 1432 + xy: 716, 1192 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +BuildingIcons/Courthouse + rotate: false + xy: 1634, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Cristo Redentor rotate: false - xy: 1807, 1330 + xy: 1736, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Eiffel Tower rotate: false - xy: 610, 1302 + xy: 716, 1090 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Factory rotate: false - xy: 406, 894 + xy: 1226, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Forbidden Palace rotate: false - xy: 814, 1200 + xy: 2144, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Forge rotate: false - xy: 610, 894 + xy: 104, 1012 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Granary rotate: false - xy: 1120, 1302 + xy: 920, 952 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Great Wall rotate: false - xy: 1120, 1200 + xy: 1634, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hagia Sophia rotate: false - xy: 1222, 1200 + xy: 2246, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hanging Gardens rotate: false - xy: 1324, 1302 + xy: 2348, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hanse rotate: false - xy: 916, 792 + xy: 104, 910 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Harbor rotate: false - xy: 1018, 894 + xy: 206, 910 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hermitage rotate: false - xy: 1222, 1098 + xy: 410, 910 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Himeji Castle rotate: false - xy: 1018, 792 + xy: 512, 886 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hospital rotate: false - xy: 1222, 894 + xy: 920, 850 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hubble Space Telescope rotate: false - xy: 1324, 996 + xy: 1328, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hydro Plant rotate: false - xy: 1324, 894 + xy: 1226, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Ironworks rotate: false - xy: 1528, 1024 + xy: 2246, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Kremlin rotate: false - xy: 1630, 922 + xy: 716, 784 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Krepost rotate: false - xy: 1732, 1024 + xy: 1022, 770 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Leaning Tower of Pisa rotate: false - xy: 1936, 1126 + xy: 1430, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Library rotate: false - xy: 1732, 820 + xy: 1634, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Lighthouse rotate: false - xy: 1834, 922 + xy: 1736, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Longhouse rotate: false - xy: 2038, 1126 + xy: 1940, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Machu Picchu rotate: false - xy: 2140, 1126 + xy: 104, 706 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Market rotate: false - xy: 2038, 922 + xy: 410, 706 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Military Academy rotate: false - xy: 2344, 1228 + xy: 1124, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Mint rotate: false - xy: 2344, 820 + xy: 1634, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Monastery rotate: false - xy: 1834, 718 + xy: 2144, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Monument rotate: false - xy: 1936, 718 + xy: 2246, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Mughal Fort rotate: false - xy: 2140, 718 + xy: 104, 604 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Museum rotate: false - xy: 2242, 718 + xy: 206, 604 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/National College rotate: false - xy: 590, 690 + xy: 512, 580 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Neuschwanstein rotate: false - xy: 794, 690 + xy: 716, 580 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Notre Dame rotate: false - xy: 896, 690 + xy: 1022, 566 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Nuclear Plant rotate: false - xy: 1100, 690 + xy: 920, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Observatory rotate: false - xy: 1304, 690 + xy: 1124, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Opera House rotate: false - xy: 794, 588 + xy: 1532, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Oxford University rotate: false - xy: 998, 588 + xy: 1736, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Palace rotate: false - xy: 1100, 588 + xy: 1838, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Paper Maker rotate: false - xy: 1304, 588 + xy: 2042, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Pentagon rotate: false - xy: 692, 486 + xy: 2348, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Porcelain Tower rotate: false - xy: 792, 384 + xy: 818, 442 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Public School rotate: false - xy: 1098, 384 + xy: 1124, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Research Lab rotate: false - xy: 1610, 514 + xy: 2144, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Booster rotate: false - xy: 2120, 514 + xy: 716, 376 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Cockpit rotate: false - xy: 2222, 616 + xy: 1022, 362 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Engine rotate: false - xy: 2222, 514 + xy: 818, 340 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Stasis Chamber rotate: false - xy: 2324, 616 + xy: 920, 340 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Satrap's Court rotate: false - xy: 1610, 412 + xy: 1430, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Seaport rotate: false - xy: 1916, 412 + xy: 1736, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Sistine Chapel rotate: false - xy: 1710, 310 + xy: 104, 298 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Solar Plant rotate: false - xy: 1914, 310 + xy: 308, 298 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Spaceship Factory rotate: false - xy: 2016, 310 + xy: 2, 286 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stable rotate: false - xy: 436, 208 + xy: 1022, 260 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stadium rotate: false - xy: 436, 106 + xy: 818, 238 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Statue of Liberty rotate: false - xy: 436, 4 + xy: 920, 238 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stock Exchange rotate: false - xy: 640, 282 + xy: 1430, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stone Works rotate: false - xy: 742, 282 + xy: 1634, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stonehenge rotate: false - xy: 640, 78 + xy: 1736, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Sydney Opera House rotate: false - xy: 946, 282 + xy: 2246, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Taj Mahal rotate: false - xy: 844, 78 + xy: 2348, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Temple rotate: false - xy: 1048, 282 + xy: 104, 196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Terracotta Army rotate: false - xy: 946, 78 + xy: 206, 196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Great Library rotate: false - xy: 1048, 180 + xy: 308, 196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Great Lighthouse rotate: false - xy: 1150, 282 + xy: 2, 184 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Louvre rotate: false - xy: 1048, 78 + xy: 512, 172 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Oracle rotate: false - xy: 1150, 180 + xy: 614, 172 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Pyramids rotate: false - xy: 1150, 78 + xy: 1022, 158 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Theatre rotate: false - xy: 1252, 78 + xy: 920, 136 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/University rotate: false - xy: 1660, 106 + xy: 1838, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Walls rotate: false - xy: 1762, 106 + xy: 2042, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Walls of Babylon rotate: false - xy: 1864, 208 + xy: 2144, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Windmill rotate: false - xy: 2170, 208 + xy: 308, 94 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Workshop rotate: false - xy: 2374, 208 + xy: 716, 70 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 FlagIcons/Dutch rotate: false - xy: 204, 190 + xy: 1240, 1534 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/English rotate: false - xy: 204, 60 + xy: 1370, 1534 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/French rotate: false - xy: 304, 1710 + xy: 1500, 1534 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/German rotate: false - xy: 434, 1710 + xy: 1630, 1534 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Italian rotate: false - xy: 564, 1710 + xy: 1760, 1534 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Polish rotate: false - xy: 694, 1710 + xy: 1890, 1534 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Portuguese rotate: false - xy: 824, 1710 + xy: 2020, 1534 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Romanian rotate: false - xy: 954, 1710 + xy: 2150, 1534 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Russian rotate: false - xy: 1084, 1710 + xy: 2280, 1534 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Simplified_Chinese rotate: false - xy: 1214, 1710 + xy: 583, 1498 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 FlagIcons/Spanish rotate: false - xy: 1344, 1710 + xy: 713, 1498 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 ImprovementIcons/Academy rotate: false - xy: 1474, 1738 + xy: 204, 1522 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Ancient ruins rotate: false - xy: 2188, 1738 + xy: 1546, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Barbarian encampment rotate: false - xy: 383, 1506 + xy: 1672, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Camp rotate: false - xy: 1913, 1534 + xy: 1022, 1280 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City ruins rotate: false - xy: 1297, 1404 + xy: 2348, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Customs house rotate: false - xy: 2215, 1330 + xy: 2144, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Farm rotate: false - xy: 508, 996 + xy: 1328, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fishing Boats rotate: false - xy: 508, 894 + xy: 1838, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Landmark rotate: false - xy: 1630, 820 + xy: 1328, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Lumber mill rotate: false - xy: 1834, 820 + xy: 2144, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Manufactory rotate: false - xy: 2242, 1228 + xy: 206, 706 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Mine rotate: false - xy: 2344, 1024 + xy: 1430, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Oil well rotate: false - xy: 692, 588 + xy: 1430, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Plantation rotate: false - xy: 588, 384 + xy: 716, 478 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Quarry rotate: false - xy: 1200, 384 + xy: 1430, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Railroad rotate: false - xy: 1406, 514 + xy: 1736, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Railroad rotate: false - xy: 1406, 514 + xy: 1736, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/FantasyHex/Railroad rotate: false - xy: 1406, 514 + xy: 1736, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Road rotate: false - xy: 1814, 514 + xy: 104, 400 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Trading post rotate: false - xy: 1354, 106 + xy: 1124, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/America rotate: false - xy: 2086, 1738 + xy: 1444, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Arabia rotate: false - xy: 791, 1608 + xy: 2260, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Babylon rotate: false - xy: 1811, 1636 + xy: 818, 1360 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/China rotate: false - xy: 787, 1404 + xy: 1838, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/CityState rotate: false - xy: 334, 116 + xy: 308, 1216 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Egypt rotate: false - xy: 508, 1200 + xy: 614, 1090 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/England rotate: false - xy: 712, 1302 + xy: 1124, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/France rotate: false - xy: 712, 996 + xy: 206, 1012 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Germany rotate: false - xy: 916, 1098 + xy: 1022, 974 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Greece rotate: false - xy: 916, 894 + xy: 1940, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/India rotate: false - xy: 1426, 1126 + xy: 1634, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Iroquois rotate: false - xy: 1630, 1126 + xy: 2348, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Japan rotate: false - xy: 1528, 922 + xy: 308, 808 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Korea rotate: false - xy: 1528, 820 + xy: 614, 784 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Persia rotate: false - xy: 896, 486 + xy: 104, 502 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Rome rotate: false - xy: 2018, 514 + xy: 512, 376 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Russia rotate: false - xy: 2120, 616 + xy: 614, 376 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/The Ottomans rotate: false - xy: 1252, 282 + xy: 716, 172 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Aircraft rotate: false - xy: 406, 740 + xy: 204, 1645 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/BackArrow rotate: false - xy: 1456, 54 + xy: 104, 1560 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Banner rotate: false - xy: 281, 1506 + xy: 1570, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Circle rotate: false - xy: 204, 320 + xy: 1060, 1484 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 OtherIcons/Crosshair rotate: false - xy: 2011, 1330 + xy: 1940, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DisbandUnit rotate: false - xy: 386, 498 + xy: 104, 1114 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Fire rotate: false - xy: 814, 1302 + xy: 1634, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Hexagon rotate: false - xy: 2, 1546 + xy: 304, 1624 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 TileSets/Default/Hexagon rotate: false - xy: 2, 1546 + xy: 304, 1624 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 TileSets/FantasyHex/Hexagon rotate: false - xy: 2, 1546 + xy: 304, 1624 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 OtherIcons/MenuIcon rotate: false - xy: 2140, 820 + xy: 818, 646 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pentagon rotate: false - xy: 794, 486 + xy: 410, 503 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pillage rotate: false - xy: 486, 385 + xy: 614, 478 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +OtherIcons/Puppet + rotate: false + xy: 1226, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Shield rotate: false - xy: 2222, 412 + xy: 2042, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Sleep rotate: false - xy: 1812, 310 + xy: 206, 298 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Stop rotate: false - xy: 742, 180 + xy: 1838, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/civTableBackground rotate: false - xy: 2, 1788 + xy: 2, 1814 size: 300, 50 orig: 300, 50 offset: 0, 0 index: -1 OtherIcons/tileTableBackground rotate: false - xy: 204, 500 + xy: 2272, 1664 size: 180, 200 orig: 180, 200 offset: 0, 0 index: -1 OtherIcons/whiteDot rotate: false - xy: 2478, 1837 + xy: 2454, 1863 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 PolicyIcons/Aristocracy rotate: false - xy: 640, 26 + xy: 510, 1572 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Citizenship rotate: false - xy: 848, 26 + xy: 2386, 1404 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Civil Society rotate: false - xy: 900, 26 + xy: 2386, 1352 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Collective Rule rotate: false - xy: 1004, 26 + xy: 1328, 60 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Constitution rotate: false - xy: 1056, 26 + xy: 1124, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Democracy rotate: false - xy: 1160, 26 + xy: 1228, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Entrepreneurship rotate: false - xy: 1264, 26 + xy: 1432, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Facism rotate: false - xy: 2426, 614 + xy: 1536, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Religion rotate: false - xy: 2426, 510 + xy: 1788, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Speech rotate: false - xy: 2426, 458 + xy: 1840, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Thought rotate: false - xy: 2426, 406 + xy: 1892, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Humanism rotate: false - xy: 65, 44 + xy: 1996, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Landed Elite rotate: false - xy: 1560, 53 + xy: 2204, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Legalism rotate: false - xy: 1612, 53 + xy: 2256, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mandate Of Heaven rotate: false - xy: 1664, 2 + xy: 2360, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mercantilism rotate: false - xy: 1768, 54 + xy: 410, 43 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Meritocracy rotate: false - xy: 1768, 2 + xy: 104, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Militarism rotate: false - xy: 1820, 54 + xy: 156, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Caste rotate: false - xy: 1820, 2 + xy: 208, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Tradition rotate: false - xy: 1872, 54 + xy: 260, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Monarchy rotate: false - xy: 1924, 54 + xy: 920, 32 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Oligarchy rotate: false - xy: 1976, 54 + xy: 462, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Organized Religion rotate: false - xy: 2028, 54 + xy: 566, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Patronage rotate: false - xy: 2028, 2 + xy: 618, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Police State rotate: false - xy: 2080, 54 + xy: 670, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Populism rotate: false - xy: 2080, 2 + xy: 722, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Professional Army rotate: false - xy: 2132, 54 + xy: 1280, 8 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Protectionism rotate: false - xy: 2132, 2 + xy: 972, 4 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Reformation rotate: false - xy: 2236, 54 + xy: 1128, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Representation rotate: false - xy: 2236, 2 + xy: 1180, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Republic rotate: false - xy: 2288, 54 + xy: 1332, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scientific Revolution rotate: false - xy: 2288, 2 + xy: 1384, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Secularism rotate: false - xy: 2340, 2 + xy: 1488, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Sovereignty rotate: false - xy: 488, 333 + xy: 1848, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Theocracy rotate: false - xy: 169, 8 + xy: 1952, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Total War rotate: false - xy: 221, 8 + xy: 2004, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Trade Unions rotate: false - xy: 273, 8 + xy: 2056, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Universal Suffrage rotate: false - xy: 2423, 1736 + xy: 2108, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Warrior Code rotate: false - xy: 2423, 1632 + xy: 2212, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ResourceIcons/Aluminum rotate: false - xy: 1984, 1738 + xy: 1342, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Bananas rotate: false - xy: 2117, 1636 + xy: 1264, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cattle rotate: false - xy: 277, 1404 + xy: 1328, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Coal rotate: false - xy: 1607, 1432 + xy: 512, 1192 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cotton rotate: false - xy: 1705, 1330 + xy: 1532, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Deer rotate: false - xy: 2317, 1330 + xy: 2246, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Dyes rotate: false - xy: 384, 396 + xy: 206, 1114 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Fish rotate: false - xy: 406, 792 + xy: 1736, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Furs rotate: false - xy: 916, 1200 + xy: 410, 1012 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gems rotate: false - xy: 814, 996 + xy: 716, 988 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gold rotate: false - xy: 1018, 1200 + xy: 818, 952 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Horses rotate: false - xy: 1120, 792 + xy: 818, 850 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Incense rotate: false - xy: 1426, 1228 + xy: 1532, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Iron rotate: false - xy: 1528, 1126 + xy: 1940, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Ivory rotate: false - xy: 1732, 1228 + xy: 104, 808 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Marble rotate: false - xy: 1936, 820 + xy: 308, 706 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Oil rotate: false - xy: 590, 588 + xy: 1226, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Pearls rotate: false - xy: 590, 486 + xy: 2246, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sheep rotate: false - xy: 2120, 412 + xy: 1940, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silk rotate: false - xy: 1404, 310 + xy: 2246, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silver rotate: false - xy: 1506, 310 + xy: 2348, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Spices rotate: false - xy: 2322, 310 + xy: 716, 274 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Stone rotate: false - xy: 640, 180 + xy: 1532, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sugar rotate: false - xy: 742, 78 + xy: 2042, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Uranium rotate: false - xy: 1762, 208 + xy: 1940, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Whales rotate: false - xy: 2068, 208 + xy: 104, 94 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wheat rotate: false - xy: 2068, 106 + xy: 206, 94 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wine rotate: false - xy: 2170, 106 + xy: 2, 82 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Acquire rotate: false - xy: 1678, 1738 + xy: 408, 1522 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/CityConnection rotate: false - xy: 1399, 1404 + xy: 104, 1216 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/City_Center_(Civ6) rotate: false - xy: 334, 14 + xy: 410, 1216 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Culture rotate: false - xy: 2, 1106 + xy: 858, 1664 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Food rotate: false - xy: 2, 904 + xy: 1060, 1664 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Gold rotate: false - xy: 2, 702 + xy: 1262, 1664 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Happiness rotate: false - xy: 2, 500 + xy: 1464, 1664 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/InterceptRange rotate: false - xy: 2419, 1380 + xy: 2100, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Malcontent rotate: false - xy: 2, 96 + xy: 1868, 1664 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Movement rotate: false - xy: 1924, 2 + xy: 2, 30 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Population rotate: false - xy: 204, 1106 + xy: 2070, 1664 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Production rotate: false - xy: 204, 904 + xy: 2, 1612 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Range rotate: false - xy: 2184, 54 + xy: 1024, 4 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/RangedStrength rotate: false - xy: 2184, 2 + xy: 1076, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Resistance rotate: false - xy: 1712, 616 + xy: 2246, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Science rotate: false - xy: 204, 702 + xy: 858, 1462 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Specialist rotate: false - xy: 2220, 310 + xy: 614, 274 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Acoustics rotate: false - xy: 1576, 1738 + xy: 306, 1522 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Agriculture rotate: false - xy: 1780, 1738 + xy: 2, 1510 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Animal Husbandry rotate: false - xy: 281, 1608 + xy: 1750, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Pasture rotate: false - xy: 281, 1608 + xy: 1750, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archaeology rotate: false - xy: 893, 1608 + xy: 104, 1420 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archery rotate: false - xy: 1097, 1608 + xy: 308, 1420 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Architecture rotate: false - xy: 1199, 1608 + xy: 410, 1420 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Astronomy rotate: false - xy: 1505, 1636 + xy: 614, 1396 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Atomic Theory rotate: false - xy: 1607, 1636 + xy: 716, 1396 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Ballistics rotate: false - xy: 2015, 1636 + xy: 1162, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Banking rotate: false - xy: 2321, 1636 + xy: 1468, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Biology rotate: false - xy: 893, 1506 + xy: 2182, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Bronze Working rotate: false - xy: 1301, 1506 + xy: 308, 1318 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Calendar rotate: false - xy: 1709, 1534 + xy: 614, 1294 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chemistry rotate: false - xy: 583, 1404 + xy: 1634, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Medical Lab rotate: false - xy: 583, 1404 + xy: 1634, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chivalry rotate: false - xy: 889, 1404 + xy: 1940, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Civil Service rotate: false - xy: 1505, 1432 + xy: 2, 1204 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Combined Arms rotate: false - xy: 1913, 1432 + xy: 1022, 1178 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Combustion rotate: false - xy: 2015, 1432 + xy: 818, 1156 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Compass rotate: false - xy: 2219, 1432 + xy: 1124, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Computers rotate: false - xy: 2321, 1432 + xy: 1226, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Construction rotate: false - xy: 1501, 1330 + xy: 1328, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Currency rotate: false - xy: 2113, 1330 + xy: 2042, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Dynamite rotate: false - xy: 406, 1302 + xy: 308, 1114 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Ecology rotate: false - xy: 406, 1200 + xy: 410, 1114 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Economics rotate: false - xy: 508, 1302 + xy: 2, 1102 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Education rotate: false - xy: 406, 1098 + xy: 512, 1090 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Electricity rotate: false - xy: 406, 996 + xy: 1022, 1076 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Electronics rotate: false - xy: 508, 1098 + xy: 818, 1054 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Engineering rotate: false - xy: 610, 1200 + xy: 920, 1054 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Fertilizer rotate: false - xy: 610, 1098 + xy: 1430, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Flight rotate: false - xy: 610, 996 + xy: 1940, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Future Tech rotate: false - xy: 1018, 1302 + xy: 2, 1000 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Guilds rotate: false - xy: 1018, 996 + xy: 2042, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Gunpowder rotate: false - xy: 1120, 1098 + xy: 2144, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Horseback Riding rotate: false - xy: 1222, 996 + xy: 716, 886 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Industrialization rotate: false - xy: 1528, 1228 + xy: 1736, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Iron Working rotate: false - xy: 1630, 1228 + xy: 2042, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Lasers rotate: false - xy: 2, 298 + xy: 1666, 1664 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 TechIcons/Machinery rotate: false - xy: 2038, 1024 + xy: 2348, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Masonry rotate: false - xy: 2242, 1126 + xy: 512, 682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mass Media (retired) rotate: false - xy: 2038, 820 + xy: 614, 682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mathematics rotate: false - xy: 2140, 922 + xy: 716, 682 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metal Casting rotate: false - xy: 2242, 922 + xy: 920, 646 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metallurgy rotate: false - xy: 2242, 820 + xy: 1328, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Military Science rotate: false - xy: 2344, 1126 + xy: 1226, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mining rotate: false - xy: 2344, 922 + xy: 1532, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mobile Tactics rotate: false - xy: 1528, 718 + xy: 1838, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nanotechnology rotate: false - xy: 488, 589 + xy: 2, 592 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Navigation rotate: false - xy: 692, 690 + xy: 614, 580 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nuclear Fission rotate: false - xy: 998, 690 + xy: 818, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Optics rotate: false - xy: 896, 588 + xy: 1634, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Particle Physics rotate: false - xy: 488, 487 + xy: 2144, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pharmaceuticals rotate: false - xy: 998, 486 + xy: 206, 502 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Philosophy rotate: false - xy: 1100, 486 + xy: 308, 502 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Physics rotate: false - xy: 1202, 486 + xy: 2, 490 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Plastics rotate: false - xy: 690, 384 + xy: 1022, 464 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pottery rotate: false - xy: 894, 384 + xy: 920, 442 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Printing Press rotate: false - xy: 996, 384 + xy: 1328, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Radar rotate: false - xy: 1302, 384 + xy: 1532, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Radio rotate: false - xy: 1406, 616 + xy: 1634, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Railroad rotate: false - xy: 1508, 616 + xy: 1838, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Refrigeration rotate: false - xy: 1508, 514 + xy: 1940, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Replaceable Parts rotate: false - xy: 1610, 616 + xy: 2042, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rifling rotate: false - xy: 1814, 616 + xy: 410, 401 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Robotics rotate: false - xy: 1916, 616 + xy: 206, 400 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rocketry rotate: false - xy: 2018, 616 + xy: 2, 388 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Sailing rotate: false - xy: 2324, 514 + xy: 1328, 316 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Satellites rotate: false - xy: 1508, 412 + xy: 1226, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Scientific Theory rotate: false - xy: 1712, 412 + xy: 1532, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steam Power rotate: false - xy: 538, 106 + xy: 1124, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steel rotate: false - xy: 538, 4 + xy: 1226, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/The Wheel rotate: false - xy: 1252, 180 + xy: 818, 136 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Theology rotate: false - xy: 1354, 208 + xy: 1328, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Trapping rotate: false - xy: 1456, 208 + xy: 1226, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Writing rotate: false - xy: 2374, 106 + xy: 1022, 56 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/CityOverlay rotate: false - xy: 334, 218 + xy: 206, 1216 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/CrosshatchHexagon rotate: false - xy: 2, 1308 + xy: 583, 1628 size: 273, 236 orig: 273, 236 offset: 0, 0 index: -1 TileSets/FantasyHex/CrosshatchHexagon rotate: false - xy: 2, 1308 + xy: 583, 1628 size: 273, 236 orig: 273, 236 offset: 0, 0 index: -1 TileSets/Default/Flood plainsOverlay rotate: false - xy: 712, 1098 + xy: 2042, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/ForestOverlay rotate: false - xy: 508, 792 + xy: 2348, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/HillOverlay rotate: false - xy: 1324, 1200 + xy: 2, 898 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/JungleOverlay rotate: false - xy: 1732, 1126 + xy: 2, 796 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/LakesOverlay rotate: false - xy: 1834, 1126 + xy: 818, 748 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/MarshOverlay rotate: false - xy: 2140, 1024 + xy: 2, 694 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/MountainOverlay rotate: false - xy: 2038, 718 + xy: 2348, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/OasisOverlay rotate: false - xy: 1202, 690 + xy: 1328, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/road rotate: false - xy: 2, 83 + xy: 204, 1801 size: 61, 11 orig: 61, 11 offset: 0, 0 index: -1 TileSets/FantasyHex/road rotate: false - xy: 2, 83 + xy: 204, 1801 size: 61, 11 orig: 61, 11 offset: 0, 0 index: -1 TileSets/FantasyHex/City rotate: false - xy: 1354, 347 + xy: 267, 1777 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Grassland+City rotate: false - xy: 1354, 347 + xy: 267, 1777 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Hill+City rotate: false - xy: 1354, 347 + xy: 267, 1777 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Coast rotate: false - xy: 406, 710 + xy: 256, 1747 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Desert rotate: false - xy: 1316, 48 + xy: 256, 1717 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Desert+City rotate: false - xy: 2424, 319 + xy: 256, 1682 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Desert+Flood plains rotate: false - xy: 2419, 1350 + xy: 256, 1652 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Desert+Oasis rotate: false - xy: 1508, 23 + xy: 156, 1582 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Grassland rotate: false - xy: 592, 354 + xy: 156, 1552 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/TopRightBorder rotate: false - xy: 592, 354 + xy: 156, 1552 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Grassland+Forest rotate: false - xy: 88, 13 + xy: 2412, 38 size: 31, 29 orig: 31, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Grassland+Jungle rotate: false - xy: 169, 60 + xy: 104, 1524 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Grassland+Marsh rotate: false - xy: 2444, 1809 + xy: 2414, 1477 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Hill rotate: false - xy: 2423, 1494 + xy: 818, 1464 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Hill+Forest rotate: false - xy: 2423, 1447 + xy: 1022, 1415 size: 32, 45 orig: 32, 45 offset: 0, 0 index: -1 TileSets/FantasyHex/Lakes rotate: false - xy: 1354, 317 + xy: 138, 1522 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Mountain rotate: false - xy: 440, 702 + xy: 1124, 1344 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Ocean rotate: false - xy: 1542, 23 + xy: 1022, 1385 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Plains rotate: false - xy: 1576, 23 + xy: 972, 106 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Plains+City rotate: false - xy: 2444, 69 + xy: 972, 69 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Plains+Forest rotate: false - xy: 2444, 34 + xy: 1280, 71 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Plains+Jungle rotate: false - xy: 1610, 16 + xy: 2412, 69 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/TopBorder rotate: false - xy: 2444, 4 + xy: 1692, 75 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tundra rotate: false - xy: 1316, 14 + xy: 364, 60 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tundra+City rotate: false - xy: 592, 317 + xy: 54, 45 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tundra+Forest rotate: false - xy: 54, 10 + xy: 774, 36 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 UnitIcons/Anti-Aircraft Gun rotate: false - xy: 383, 1608 + xy: 1852, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Anti-Tank Gun rotate: false - xy: 485, 1608 + xy: 1954, 1432 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Archer rotate: false - xy: 995, 1608 + xy: 206, 1420 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Artillery rotate: false - xy: 1403, 1608 + xy: 512, 1396 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/B17 rotate: false - xy: 1709, 1636 + xy: 1060, 1382 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ballista rotate: false - xy: 1913, 1636 + xy: 920, 1360 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Battleship rotate: false - xy: 587, 1506 + xy: 1876, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Bomber rotate: false - xy: 995, 1506 + xy: 2284, 1330 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Bowman rotate: false - xy: 1097, 1506 + xy: 104, 1318 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Brute rotate: false - xy: 1403, 1506 + xy: 410, 1318 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Camel Archer rotate: false - xy: 1811, 1534 + xy: 716, 1294 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cannon rotate: false - xy: 2015, 1534 + xy: 818, 1258 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Caravel rotate: false - xy: 2117, 1534 + xy: 920, 1258 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Catapult rotate: false - xy: 2321, 1534 + xy: 1226, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cavalry rotate: false - xy: 379, 1404 + xy: 1430, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Chariot Archer rotate: false - xy: 481, 1404 + xy: 1532, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Chu-Ko-Nu rotate: false - xy: 991, 1404 + xy: 2042, 1228 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Companion Cavalry rotate: false - xy: 2117, 1432 + xy: 920, 1156 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cossack rotate: false - xy: 1603, 1330 + xy: 1430, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Crossbowman rotate: false - xy: 1909, 1330 + xy: 1838, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Destroyer rotate: false - xy: 386, 600 + xy: 2348, 1126 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Fighter rotate: false - xy: 712, 1200 + xy: 1532, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Foreign Legion rotate: false - xy: 916, 1302 + xy: 2246, 1024 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Frigate rotate: false - xy: 814, 1098 + xy: 308, 1012 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Galleass rotate: false - xy: 610, 792 + xy: 512, 988 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Gatling Gun rotate: false - xy: 712, 894 + xy: 614, 988 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Artist rotate: false - xy: 712, 792 + xy: 1124, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Engineer rotate: false - xy: 814, 894 + xy: 1226, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great General rotate: false - xy: 277, 1308 + xy: 1328, 928 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 OtherIcons/Star rotate: false - xy: 277, 1308 + xy: 1328, 928 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 UnitIcons/Great Merchant rotate: false - xy: 916, 996 + xy: 1430, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Scientist rotate: false - xy: 1018, 1098 + xy: 1532, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great War Bomber rotate: false - xy: 1222, 1302 + xy: 1736, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great War Infantry rotate: false - xy: 814, 792 + xy: 1838, 922 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Helicopter rotate: false - xy: 1120, 996 + xy: 308, 910 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Hoplite rotate: false - xy: 1120, 894 + xy: 614, 886 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Horseman rotate: false - xy: 1324, 1098 + xy: 1022, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Hwach'a rotate: false - xy: 1222, 792 + xy: 1124, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Immortal rotate: false - xy: 1324, 792 + xy: 1430, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Infantry rotate: false - xy: 1426, 1024 + xy: 1838, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ironclad rotate: false - xy: 1426, 922 + xy: 2144, 820 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Janissary rotate: false - xy: 1426, 820 + xy: 206, 808 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Jet Fighter rotate: false - xy: 1630, 1024 + xy: 410, 808 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Knight rotate: false - xy: 1834, 1228 + xy: 512, 784 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Lancer rotate: false - xy: 1936, 1228 + xy: 920, 748 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Landship rotate: false - xy: 1732, 922 + xy: 1124, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Landsknecht rotate: false - xy: 1834, 1024 + xy: 1226, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Legion rotate: false - xy: 2038, 1228 + xy: 1532, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Longbowman rotate: false - xy: 1936, 1024 + xy: 1838, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Longswordsman rotate: false - xy: 2140, 1228 + xy: 2042, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Machine Gun rotate: false - xy: 1936, 922 + xy: 2246, 718 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Mechanized Infantry rotate: false - xy: 2242, 1024 + xy: 1022, 668 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Minuteman rotate: false - xy: 1426, 718 + xy: 1736, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Modern Armor rotate: false - xy: 1630, 718 + xy: 1940, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Mohawk Warrior rotate: false - xy: 1732, 718 + xy: 2042, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Musketeer rotate: false - xy: 2344, 718 + xy: 308, 604 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Musketman rotate: false - xy: 488, 691 + xy: 410, 605 size: 100, 99 orig: 100, 99 offset: 0, 0 index: -1 UnitIcons/Panzer rotate: false - xy: 1202, 588 + xy: 1940, 514 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Pikeman rotate: false - xy: 1304, 486 + xy: 512, 478 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Rifleman rotate: false - xy: 1712, 514 + xy: 2348, 412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Rocket Artillery rotate: false - xy: 1916, 514 + xy: 308, 400 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Samurai rotate: false - xy: 1406, 412 + xy: 1124, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Scout rotate: false - xy: 1814, 412 + xy: 1634, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Settler rotate: false - xy: 2018, 412 + xy: 1838, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ship of the Line rotate: false - xy: 2324, 412 + xy: 2144, 310 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Sipahi rotate: false - xy: 1608, 310 + xy: 410, 299 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Spearman rotate: false - xy: 2118, 310 + xy: 512, 274 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Stealth Bomber rotate: false - xy: 538, 208 + xy: 1328, 214 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Submarine rotate: false - xy: 844, 282 + xy: 1940, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Swordsman rotate: false - xy: 844, 180 + xy: 2144, 208 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Tank rotate: false - xy: 946, 180 + xy: 410, 197 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Trebuchet rotate: false - xy: 1456, 106 + xy: 1430, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Triplane rotate: false - xy: 1558, 208 + xy: 1532, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Trireme rotate: false - xy: 1558, 105 + xy: 1634, 105 size: 100, 101 orig: 100, 101 offset: 0, 0 index: -1 UnitIcons/Turtle Ship rotate: false - xy: 1660, 208 + xy: 1736, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/War Chariot rotate: false - xy: 1864, 106 + xy: 2246, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/War Elephant rotate: false - xy: 1966, 208 + xy: 2348, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Warrior rotate: false - xy: 1966, 106 + xy: 410, 95 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Work Boats rotate: false - xy: 2272, 208 + xy: 512, 70 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Worker rotate: false - xy: 2272, 106 + xy: 614, 70 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Zero rotate: false - xy: 1354, 4 + xy: 818, 34 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitPromotionIcons/Accuracy rotate: false - xy: 2392, 1788 + xy: 204, 1749 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Air Repair rotate: false - xy: 1426, 1352 + xy: 204, 1697 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Ambush rotate: false - xy: 384, 344 + xy: 2410, 1612 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage rotate: false - xy: 1456, 2 + xy: 2410, 1560 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Blitz rotate: false - xy: 2, 31 + xy: 512, 1520 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding Party rotate: false - xy: 692, 26 + xy: 2410, 1508 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment rotate: false - xy: 744, 26 + xy: 2362, 1456 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Charge rotate: false - xy: 796, 26 + xy: 1162, 1432 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal_Raider rotate: false - xy: 952, 26 + xy: 920, 84 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Cover rotate: false - xy: 1108, 26 + xy: 1176, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Discipline rotate: false - xy: 1108, 26 + xy: 1176, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Strength rotate: false - xy: 1108, 26 + xy: 1176, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Drill rotate: false - xy: 1212, 26 + xy: 1380, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Evasion rotate: false - xy: 2426, 666 + xy: 1484, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Formation rotate: false - xy: 2426, 562 + xy: 1736, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Heal Instantly rotate: false - xy: 2424, 354 + xy: 1944, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Indirect Fire rotate: false - xy: 117, 44 + xy: 2048, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Interception rotate: false - xy: 1508, 53 + xy: 2152, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Logistics rotate: false - xy: 1664, 54 + xy: 2308, 54 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/March rotate: false - xy: 1716, 54 + xy: 1588, 53 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Medic rotate: false - xy: 1716, 2 + xy: 1640, 53 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Mobility rotate: false - xy: 1872, 2 + xy: 312, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Operational Range rotate: false - xy: 1976, 2 + xy: 514, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Range rotate: false - xy: 1976, 2 + xy: 514, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting rotate: false - xy: 2340, 54 + xy: 1436, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sentry rotate: false - xy: 2340, 54 + xy: 1436, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Shock rotate: false - xy: 2392, 54 + xy: 1692, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Siege rotate: false - xy: 2392, 2 + xy: 1744, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sortie rotate: false - xy: 436, 333 + xy: 1796, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting rotate: false - xy: 540, 332 + xy: 1900, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting I (air) rotate: false - xy: 540, 332 + xy: 1900, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Volley rotate: false - xy: 2423, 1684 + xy: 2160, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Wolfpack rotate: false - xy: 2423, 1580 + xy: 2264, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Woodsman rotate: false - xy: 2423, 1528 + xy: 2316, 2 size: 50, 50 orig: 50, 50 offset: 0, 0 diff --git a/android/assets/game.png b/android/assets/game.png index 15556e1a8e..05fa787869 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/Buildings.json b/android/assets/jsons/Buildings.json index 9ab69f2e0d..9a114a1e89 100644 --- a/android/assets/jsons/Buildings.json +++ b/android/assets/jsons/Buildings.json @@ -178,6 +178,14 @@ requiredTech:"Mathematics", quote:"'I think that if ever a mortal heard the word of God it would be in a garden at the cool of the day.' - F. Frankfort Moore" }, + { + name:"Courthouse", + maintenance:4, + hurryCostModifier:25, + uniques:["Remove extra unhappiness from annexed cities", + "Can only be built in annexed cities"], + requiredTech:"Mathematics" + }, { name:"Colosseum", maintenance:1, diff --git a/android/assets/jsons/Translations/Buildings.json b/android/assets/jsons/Translations/Buildings.json index 67126e0f3b..541c61d9d6 100644 --- a/android/assets/jsons/Translations/Buildings.json +++ b/android/assets/jsons/Translations/Buildings.json @@ -425,19 +425,21 @@ Russian:"Все военно-морские юниты получают +1 к движению и обзору" } - /* "Courthouse":{ Italian:"Palazzo di giustizia" French:"Palais de justice" Polish:"Sąd" } - "Eliminates extra Unhappiness from an Occupied City":{ - Italian:"Elimina l'Infelicità supplementare proveniente da una Città occupata" + "Remove extra unhappiness from annexed cities":{ + Italian:"Elimina l'Infelicità extra proveniente dalle Città occupate" French:"Enlève le mécontentement supplémentaire des villes occupées" Polish:"Usuwa niezadowolenie z okupowanych miast" } - */ + + "Can only be built in annexed cities":{ + Italian:"Costruibile solamente nelle città annesse" + } "Stable":{ Italian:"Scuderia" diff --git a/core/src/com/unciv/logic/automation/ConstructionAutomation.kt b/core/src/com/unciv/logic/automation/ConstructionAutomation.kt index 5f4d1f26ee..e39b84682f 100644 --- a/core/src/com/unciv/logic/automation/ConstructionAutomation.kt +++ b/core/src/com/unciv/logic/automation/ConstructionAutomation.kt @@ -185,7 +185,9 @@ class ConstructionAutomation(val cityConstructions: CityConstructions){ } private fun addHappinessBuildingChoice() { - val happinessBuilding = buildableNotWonders.filter { it.isStatRelated(Stat.Happiness) } + val happinessBuilding = buildableNotWonders + .filter { it.isStatRelated(Stat.Happiness) + || it.uniques.contains("Remove extra unhappiness from annexed cities") } .minBy { it.cost } if (happinessBuilding != null) { var modifier = 1f diff --git a/core/src/com/unciv/logic/automation/NextTurnAutomation.kt b/core/src/com/unciv/logic/automation/NextTurnAutomation.kt index 28689e74be..c3b2c14e9f 100644 --- a/core/src/com/unciv/logic/automation/NextTurnAutomation.kt +++ b/core/src/com/unciv/logic/automation/NextTurnAutomation.kt @@ -429,10 +429,7 @@ class NextTurnAutomation{ private fun reassignWorkedTiles(civInfo: CivilizationInfo) { for (city in civInfo.cities) { - city.workedTiles = hashSetOf() - city.population.specialists.clear() - for (i in 0..city.population.population) - city.population.autoAssignPopulation() + city.reassignWorkers() city.cityConstructions.chooseNextConstruction() if (city.health < city.getMaxHealth()) diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index b7a528f427..953ef5c635 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -7,12 +7,10 @@ import com.unciv.logic.automation.UnitAutomation import com.unciv.logic.city.CityInfo import com.unciv.logic.civilization.AlertType import com.unciv.logic.civilization.PopupAlert -import com.unciv.logic.civilization.diplomacy.DiplomaticModifiers import com.unciv.logic.map.TileInfo import com.unciv.models.gamebasics.unit.UnitType import java.util.* import kotlin.math.max -import kotlin.math.roundToInt /** * Damage calculations according to civ v wiki and https://steamcommunity.com/sharedfiles/filedetails/?id=170194443 @@ -96,12 +94,6 @@ class Battle(val gameInfo:GameInfo) { } } - if(defender.isDefeated() - && defender is CityCombatant - && attacker.isMelee()){ - conquerCity(defender.city, attacker) - } - // German unique - needs to be checked before we try to move to the enemy tile, since the encampment disappears after we move in if(defender.isDefeated() && defender.getCivInfo().isBarbarian() @@ -151,6 +143,11 @@ class Battle(val gameInfo:GameInfo) { } + if(defender.isDefeated() + && defender is CityCombatant + && attacker.isMelee()) + conquerCity(defender.city, attacker) + if(attacker.isMelee()){ if(!defender.getUnitType().isCivilian()) // unit was not captured but actually attacked @@ -204,69 +201,22 @@ class Battle(val gameInfo:GameInfo) { } private fun conquerCity(city: CityInfo, attacker: ICombatant) { - val cityCiv = city.civInfo val attackerCiv = attacker.getCivInfo() - attackerCiv.addNotification("We have conquered the city of [${city.name}]!",city.location, Color.RED) - attackerCiv.popupAlerts.add(PopupAlert(AlertType.CityConquered,city.name)) + attackerCiv.addNotification("We have conquered the city of [${city.name}]!", city.location, Color.RED) city.getCenterTile().apply { if(militaryUnit!=null) militaryUnit!!.destroy() - if(civilianUnit!=null) captureCivilianUnit(attacker,MapUnitCombatant(civilianUnit!!)) + if(civilianUnit!=null) captureCivilianUnit(attacker, MapUnitCombatant(civilianUnit!!)) for(airUnit in airUnits.toList()) airUnit.destroy() } - if (!attackerCiv.isMajorCiv()){ - city.destroyCity() + + if (attacker.getCivInfo().isPlayerCivilization()) { + attackerCiv.popupAlerts.add(PopupAlert(AlertType.CityConquered, city.name)) + } else { + city.annexCity(attacker.getCivInfo()) } - else { - val currentPopulation = city.population.population - - val percentageOfCivPopulationInThatCity = currentPopulation*100f / cityCiv.cities.sumBy { it.population.population } - val aggroGenerated = 10f+percentageOfCivPopulationInThatCity.roundToInt() - cityCiv.getDiplomacyManager(attacker.getCivInfo()) - .addModifier(DiplomaticModifiers.CapturedOurCities, -aggroGenerated) - - for(thirdPartyCiv in attackerCiv.getKnownCivs().filter { it.isMajorCiv() }){ - val aggroGeneratedForOtherCivs = (aggroGenerated/10).roundToInt().toFloat() - if(thirdPartyCiv.isAtWarWith(cityCiv)) // You annoyed our enemy? - thirdPartyCiv.getDiplomacyManager(attackerCiv) - .addModifier(DiplomaticModifiers.SharedEnemy, aggroGeneratedForOtherCivs) // Cool, keep at at! =D - else thirdPartyCiv.getDiplomacyManager(attackerCiv) - .addModifier(DiplomaticModifiers.WarMongerer, -aggroGeneratedForOtherCivs) // Uncool bro. - } - - if(currentPopulation>1) city.population.population -= 1 + currentPopulation/4 // so from 2-4 population, remove 1, from 5-8, remove 2, etc. - city.population.unassignExtraPopulation() - - city.health = city.getMaxHealth() / 2 // I think that cities recover to half health when conquered? - - if(!attacker.getCivInfo().policies.isAdopted("Police State")) { - city.expansion.cultureStored = 0 - city.expansion.reset() - } - - city.moveToCiv(attacker.getCivInfo()) - city.resistanceCounter = city.population.population - city.workedTiles = hashSetOf() //reassign 1st working tile - city.population.specialists.clear() - for (i in 0..city.population.population) - city.population.autoAssignPopulation() - city.cityStats.update() - } - - if(city.cityConstructions.isBuilt("Palace")){ - city.cityConstructions.removeBuilding("Palace") - if(cityCiv.isDefeated()) { - cityCiv.destroy() - attacker.getCivInfo().popupAlerts.add(PopupAlert(AlertType.Defeated,cityCiv.civName)) - } - else if(cityCiv.cities.isNotEmpty()){ - cityCiv.cities.first().cityConstructions.addBuilding("Palace") // relocate palace - } - } - - (attacker as MapUnitCombatant).unit.movement.moveToTile(city.getCenterTile()) } fun getMapCombatantOfTile(tile:TileInfo): ICombatant? { diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 7e7f8c6a54..8ab996aa9e 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -3,8 +3,12 @@ package com.unciv.logic.city import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.math.Vector2 import com.unciv.Constants +import com.unciv.UnCivGame +import com.unciv.logic.civilization.AlertType import com.unciv.logic.civilization.CivilizationInfo +import com.unciv.logic.civilization.PopupAlert import com.unciv.logic.civilization.diplomacy.DiplomacyFlags +import com.unciv.logic.civilization.diplomacy.DiplomaticModifiers import com.unciv.logic.map.RoadStatus import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileMap @@ -14,6 +18,7 @@ import com.unciv.models.gamebasics.tile.ResourceType import com.unciv.models.stats.Stats import com.unciv.ui.utils.withoutItem import kotlin.math.min +import kotlin.math.roundToInt class CityInfo { @Transient lateinit var civInfo: CivilizationInfo @@ -38,6 +43,7 @@ class CityInfo { var isBeingRazed = false var attackedThisTurn = false var hasSoldBuildingThisTurn = false + var isPuppet = false constructor() // for json parsing, we need to have a default constructor constructor(civInfo: CivilizationInfo, cityLocation: Vector2) { // new city! @@ -99,6 +105,8 @@ class CityInfo { toReturn.isBeingRazed=isBeingRazed toReturn.attackedThisTurn = attackedThisTurn toReturn.resistanceCounter = resistanceCounter + toReturn.foundingCiv = foundingCiv + toReturn.isPuppet = isPuppet return toReturn } @@ -210,6 +218,16 @@ class CityInfo { tryUpdateRoadStatus() attackedThisTurn = false if (resistanceCounter > 0) resistanceCounter-- + + if (isPuppet) reassignWorkers() + } + + fun reassignWorkers() { + workedTiles = hashSetOf() + population.specialists.clear() + for (i in 0..population.population) + population.autoAssignPopulation() + cityStats.update() } fun endTurn() { @@ -221,22 +239,21 @@ class CityInfo { cityConstructions.endTurn(stats) expansion.nextTurn(stats.culture) - if(isBeingRazed){ + if (isBeingRazed) { population.population-- - if(population.population<=0){ // there are strange cases where we geet to -1 - civInfo.addNotification("[$name] has been razed to the ground!",location, Color.RED) + if (population.population <= 0) { // there are strange cases where we geet to -1 + civInfo.addNotification("[$name] has been razed to the ground!", location, Color.RED) destroyCity() - if(isCapital() && civInfo.cities.isNotEmpty()) // Yes, we actually razed the capital. Some people do this. + if (isCapital() && civInfo.cities.isNotEmpty()) // Yes, we actually razed the capital. Some people do this. civInfo.cities.first().cityConstructions.addBuilding("Palace") - }else{//if not razed yet: - if(population.foodStored>=population.getFoodToNextPopulation()) {//if surplus in the granary... - population.foodStored=population.getFoodToNextPopulation()-1//...reduce below the new growth treshold + } else {//if not razed yet: + if (population.foodStored >= population.getFoodToNextPopulation()) {//if surplus in the granary... + population.foodStored = population.getFoodToNextPopulation() - 1//...reduce below the new growth treshold } } - } - else population.nextTurn(stats.food) + } else population.nextTurn(stats.food) - if(this in civInfo.cities) { // city was not destroyed + if (this in civInfo.cities) { // city was not destroyed health = min(health + 20, getMaxHealth()) population.unassignExtraPopulation() } @@ -254,7 +271,99 @@ class CityInfo { getCenterTile().improvement="City ruins" } + fun annexCity(conqueringCiv: CivilizationInfo) { + puppetCity(conqueringCiv) + + if(!conqueringCiv.policies.isAdopted("Police State")) { + expansion.cultureStored = 0 + expansion.reset() + } + + isPuppet=false + + UnCivGame.Current.worldScreen.shouldUpdate=true + } + + /** This happens when we either puppet OR annex, basically whenever we conquer a city and don't liberate it */ + fun puppetCity(conqueringCiv: CivilizationInfo) { + if (!conqueringCiv.isMajorCiv()){ + destroyCity() + } + + val oldCiv = civInfo + moveToCiv(conqueringCiv) + if(oldCiv.isDefeated()) { + oldCiv.destroy() + conqueringCiv.popupAlerts.add(PopupAlert(AlertType.Defeated,oldCiv.civName)) + } + + diplomaticRepercussionsForConqueringCity(oldCiv, conqueringCiv) + + if(population.population>1) population.population -= 1 + population.population/4 // so from 2-4 population, remove 1, from 5-8, remove 2, etc. + reassignWorkers() + + resistanceCounter = population.population // I checked, and even if you puppet there's resistance for conquering + isPuppet = true + health = getMaxHealth() / 2 // I think that cities recover to half health when conquered? + } + + private fun diplomaticRepercussionsForConqueringCity(oldCiv: CivilizationInfo, conqueringCiv: CivilizationInfo) { + val currentPopulation = population.population + val percentageOfCivPopulationInThatCity = currentPopulation * 100f / civInfo.cities.sumBy { it.population.population } + val aggroGenerated = 10f + percentageOfCivPopulationInThatCity.roundToInt() + oldCiv.getDiplomacyManager(conqueringCiv) + .addModifier(DiplomaticModifiers.CapturedOurCities, -aggroGenerated) + + for (thirdPartyCiv in conqueringCiv.getKnownCivs().filter { it.isMajorCiv() }) { + val aggroGeneratedForOtherCivs = (aggroGenerated / 10).roundToInt().toFloat() + if (thirdPartyCiv.isAtWarWith(civInfo)) // You annoyed our enemy? + thirdPartyCiv.getDiplomacyManager(conqueringCiv) + .addModifier(DiplomaticModifiers.SharedEnemy, aggroGeneratedForOtherCivs) // Cool, keep at at! =D + else thirdPartyCiv.getDiplomacyManager(conqueringCiv) + .addModifier(DiplomaticModifiers.WarMongerer, -aggroGeneratedForOtherCivs) // Uncool bro. + } + } + + /* Liberating is returning a city to its founder - makes you LOSE warmongering points **/ + fun liberateCity(conqueringCiv: CivilizationInfo) { + if (foundingCiv == "") { // this should never happen but just in case... + annexCity(conqueringCiv) + return + } + + + diplomaticRepercussionsForLiberatingCity(conqueringCiv) + + val foundingCiv = civInfo.gameInfo.civilizations.first { it.civName == foundingCiv } + + moveToCiv(foundingCiv) + health = getMaxHealth() / 2 // I think that cities recover to half health when conquered? + + reassignWorkers() + + if(foundingCiv.cities.size == 1) cityConstructions.addBuilding("Palace") // Resurrection! + + UnCivGame.Current.worldScreen.shouldUpdate=true + } + + private fun diplomaticRepercussionsForLiberatingCity(conqueringCiv: CivilizationInfo) { + val oldOwningCiv = civInfo + val foundingCiv = civInfo.gameInfo.civilizations.first { it.civName == foundingCiv } + val percentageOfCivPopulationInThatCity = population.population * + 100f / (foundingCiv.cities.sumBy { it.population.population } + population.population) + val respecForLiberatingOurCity = 10f + percentageOfCivPopulationInThatCity.roundToInt() + foundingCiv.getDiplomacyManager(conqueringCiv) + .addModifier(DiplomaticModifiers.CapturedOurCities, respecForLiberatingOurCity) + + val otherCivsRespecForLiberating = (respecForLiberatingOurCity / 10).roundToInt().toFloat() + for (thirdPartyCiv in conqueringCiv.getKnownCivs().filter { it.isMajorCiv() && it != oldOwningCiv }) { + thirdPartyCiv.getDiplomacyManager(conqueringCiv) + .addModifier(DiplomaticModifiers.WarMongerer, otherCivsRespecForLiberating) // Cool, keep at at! =D + } + } + fun moveToCiv(newCivInfo: CivilizationInfo){ + val oldCiv = civInfo civInfo.cities = civInfo.cities.toMutableList().apply { remove(this@CityInfo) } newCivInfo.cities = newCivInfo.cities.toMutableList().apply { add(this@CityInfo) } civInfo = newCivInfo @@ -266,6 +375,15 @@ class CityInfo { // Remove all national wonders for(building in cityConstructions.getBuiltBuildings().filter { it.requiredBuildingInAllCities!=null }) cityConstructions.removeBuilding(building.name) + + // Remove/relocate palace + if(cityConstructions.isBuilt("Palace")){ + cityConstructions.removeBuilding("Palace") + if(oldCiv.cities.isNotEmpty()){ + oldCiv.cities.first().cityConstructions.addBuilding("Palace") // relocate palace + } + } + isBeingRazed=false // Transfer unique buildings diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index 5f30626942..8f457cf2f6 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -165,6 +165,14 @@ class CityStats { return stats } + private fun getStatPercentBonusesFromPuppetCity(): Stats { + val stats = Stats() + if (cityInfo.isPuppet) { + stats.science -= 25f + stats.culture -= 25f + } + return stats + } fun getGrowthBonusFromPolicies(): Float { var bonus = 0f @@ -194,6 +202,11 @@ class CityStats { var unhappinessFromCitizens = cityInfo.population.population.toFloat() if (civInfo.policies.isAdopted("Democracy")) unhappinessFromCitizens -= cityInfo.population.getNumberOfSpecialists() * 0.5f + + if (cityInfo.isPuppet) + unhappinessFromCitizens *= 1.5f + else if (hasExtraAnnexUnhappiness()) + unhappinessFromCitizens *= 2f if (civInfo.containsBuildingUnique("Unhappiness from population decreased by 10%")) unhappinessFromCitizens *= 0.9f if (civInfo.policies.isAdopted("Meritocracy")) @@ -215,6 +228,8 @@ class CityStats { newHappinessList["Policies"] = happinessFromPolicies + if (hasExtraAnnexUnhappiness()) newHappinessList["Occupied City"] = -2f //annexed city + val happinessFromBuildings = cityInfo.cityConstructions.getStats().happiness.toInt().toFloat() newHappinessList["Buildings"] = happinessFromBuildings @@ -226,6 +241,12 @@ class CityStats { happinessList = newHappinessList } + + private fun hasExtraAnnexUnhappiness() : Boolean { + if (cityInfo.civInfo.civName == cityInfo.foundingCiv || cityInfo.foundingCiv == "" || cityInfo.isPuppet) return false + return !cityInfo.containsBuildingUnique("Remove extra unhappiness from annexed cities") + } + fun getStatsOfSpecialist(stat: Stat, policies: HashSet): Stats { val stats = Stats() if (stat == Stat.Culture || stat == Stat.Science) stats.add(stat, 3f) @@ -373,6 +394,7 @@ class CityStats { newStatPercentBonusList["Computers"]=getStatPercentBonusesFromComputers() newStatPercentBonusList["Difficulty"]=getStatPercentBonusesFromDifficulty() newStatPercentBonusList["National ability"]=getStatPercentBonusesFromNationUnique() + newStatPercentBonusList["Puppet City"]=getStatPercentBonusesFromPuppetCity() if(UnCivGame.Current.superchargedForDebug) { val stats = Stats() diff --git a/core/src/com/unciv/models/gamebasics/Building.kt b/core/src/com/unciv/models/gamebasics/Building.kt index 8b0f2b5add..c922963fa2 100644 --- a/core/src/com/unciv/models/gamebasics/Building.kt +++ b/core/src/com/unciv/models/gamebasics/Building.kt @@ -240,6 +240,11 @@ class Building : NamedStats(), IConstruction{ && !construction.cityInfo.getCenterTile().neighbors.any { it.baseTerrain==Constants.coast }) return "Can only be built in coastal cities" + if("Can only be built in annexed cities" in uniques + && (construction.cityInfo.isPuppet || construction.cityInfo.foundingCiv == "" + || construction.cityInfo.civInfo.civName == construction.cityInfo.foundingCiv)) + return "Can only be built in annexed cities" + val civInfo = construction.cityInfo.civInfo if (uniqueTo!=null && uniqueTo!=civInfo.civName) return "Unique to $uniqueTo" if (GameBasics.Buildings.values.any { it.uniqueTo==civInfo.civName && it.replaces==name }) return "Our unique building replaces this" diff --git a/core/src/com/unciv/ui/cityscreen/CityInfoTable.kt b/core/src/com/unciv/ui/cityscreen/CityInfoTable.kt index 229b894242..75db4c478f 100644 --- a/core/src/com/unciv/ui/cityscreen/CityInfoTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityInfoTable.kt @@ -176,7 +176,10 @@ class CityInfoTable(private val cityScreen: CityScreen) : Table(CameraStageBaseS if(specificStatValue==0f) continue statValuesTable.add(entry.key.toLabel()) val decimal = DecimalFormat("0.#").format(specificStatValue) - statValuesTable.add("+$decimal%".toLabel()).row() + if (specificStatValue > 0) + statValuesTable.add("+$decimal%".toLabel()).row() + else + statValuesTable.add("$decimal%".toLabel()).row() } if(stat==Stat.Food){ statValuesTable.add("Food eaten".toLabel()) @@ -223,7 +226,7 @@ class CityInfoTable(private val cityScreen: CityScreen) : Table(CameraStageBaseS // these two are conflictingly named compared to above... val assignedSpecialists = currentSpecialists[stat]!!.toInt() val maxSpecialists = statToMaximumSpecialist.value.toInt() - if (assignedSpecialists > 0) { + if (assignedSpecialists > 0 && !cityInfo.isPuppet) { val unassignButton = TextButton("-", skin) unassignButton.label.setFontSize(24) unassignButton.onClick { @@ -241,7 +244,7 @@ class CityInfoTable(private val cityScreen: CityScreen) : Table(CameraStageBaseS specialistIconTable.add(icon).size(30f) } specialistPickerTable.add(specialistIconTable) - if (assignedSpecialists < maxSpecialists) { + if (assignedSpecialists < maxSpecialists && !cityInfo.isPuppet) { val assignButton = TextButton("+", skin) assignButton.label.setFontSize(24) assignButton.onClick { diff --git a/core/src/com/unciv/ui/cityscreen/CityScreen.kt b/core/src/com/unciv/ui/cityscreen/CityScreen.kt index c60ab71d89..99de1b8526 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreen.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreen.kt @@ -79,7 +79,7 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { cityPickerTable.centerX(stage) constructionsTable.update() - updateRazeCityButton() + updateAnnexAndRazeCityButton() tileTable.update(selectedTile) tileTable.setPosition(stage.width-5, 5f,Align.bottomRight) updateTileGroups() @@ -161,10 +161,21 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { return table.addBorder(2f, beige) } - private fun updateRazeCityButton() { + private fun updateAnnexAndRazeCityButton() { razeCityButtonHolder.clear() - if(!city.isBeingRazed) { + if(city.isPuppet) { + val annexCityButton = TextButton("Annex city".tr(), skin) + annexCityButton.labelCell.pad(10f) + annexCityButton.onClick { + city.isPuppet=false + city.isBeingRazed=false + city.resistanceCounter = city.population.population + update() + } + razeCityButtonHolder.add(annexCityButton).colspan(cityPickerTable.columns) + } + else if(!city.isBeingRazed) { val razeCityButton = TextButton("Raze city".tr(), skin) razeCityButton.labelCell.pad(10f) razeCityButton.onClick { city.isBeingRazed=true; update() } @@ -197,14 +208,16 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() { val tileInfo = tileGroup.tileInfo tileGroup.onClick { - selectedTile = tileInfo - if (tileGroup.isWorkable && UnCivGame.Current.worldScreen.isPlayersTurn) { - if (!tileInfo.isWorked() && city.population.getFreePopulation() > 0) - city.workedTiles.add(tileInfo.position) - else if (tileInfo.isWorked()) city.workedTiles.remove(tileInfo.position) - city.cityStats.update() + if (!city.isPuppet) { + selectedTile = tileInfo + if (tileGroup.isWorkable && UnCivGame.Current.worldScreen.isPlayersTurn) { + if (!tileInfo.isWorked() && city.population.getFreePopulation() > 0) + city.workedTiles.add(tileInfo.position) + else if (tileInfo.isWorked()) city.workedTiles.remove(tileInfo.position) + city.cityStats.update() + } + update() } - update() } tileGroups.add(tileGroup) diff --git a/core/src/com/unciv/ui/cityscreen/CityScreenCityPickerTable.kt b/core/src/com/unciv/ui/cityscreen/CityScreenCityPickerTable.kt index 10b01259f5..8a7d690683 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreenCityPickerTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreenCityPickerTable.kt @@ -38,6 +38,17 @@ class CityScreenCityPickerTable(val cityScreen: CityScreen) : Table(){ cityNameTable.add(starImage).size(20f).padRight(5f) } + if(city.isPuppet){ + val starImage = Image(ImageGetter.getDrawable("OtherIcons/Puppet").tint(Color.LIGHT_GRAY)) + cityNameTable.add(starImage).size(20f).padRight(5f) + } + + + if (city.resistanceCounter > 0) { + val resistanceImage = ImageGetter.getImage("StatIcons/Resistance") + cityNameTable.add(resistanceImage).size(20f).padRight(5f) + } + val currentCityLabel = Label(city.name + " (" + city.population.population + ")", CameraStageBaseScreen.skin) currentCityLabel.setFontSize(30) currentCityLabel.onClick { diff --git a/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt b/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt index 69b415937d..f440a45e2a 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt @@ -53,7 +53,7 @@ class CityScreenTileTable(val city: CityInfo): Table(){ city.expansion.buyTile(selectedTile) UnCivGame.Current.screen = CityScreen(city) } - if(goldCostOfTile>city.civInfo.gold || !UnCivGame.Current.worldScreen.isPlayersTurn) + if(goldCostOfTile>city.civInfo.gold || city.isPuppet || !UnCivGame.Current.worldScreen.isPlayersTurn) buyTileButton.disable() innerTable.add(buyTileButton) diff --git a/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt b/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt index d7415a39d0..7a1c3f2f1d 100644 --- a/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt +++ b/core/src/com/unciv/ui/cityscreen/ConstructionsTable.kt @@ -50,11 +50,13 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre if(rejectionReason=="" && UnCivGame.Current.worldScreen.isPlayersTurn) { // no rejection reason means we can build it! pickProductionButton.onClick { - lastConstruction = cityScreen.city.cityConstructions.currentConstruction - cityScreen.city.cityConstructions.currentConstruction = construction - cityScreen.city.cityConstructions.currentConstructionIsUserSet=true - cityScreen.city.cityStats.update() - cityScreen.update() + if (!cityScreen.city.isPuppet) { + lastConstruction = cityScreen.city.cityConstructions.currentConstruction + cityScreen.city.cityConstructions.currentConstruction = construction + cityScreen.city.cityConstructions.currentConstructionIsUserSet = true + cityScreen.city.cityStats.update() + cityScreen.update() + } } } @@ -147,7 +149,7 @@ class ConstructionsTable(val cityScreen: CityScreen) : Table(CameraStageBaseScre row() val purchaseConstructionButton: TextButton - if (construction.canBePurchased()) { + if (construction.canBePurchased() && !city.isPuppet) { val constructionGoldCost = construction.getGoldCost(city.civInfo) purchaseConstructionButton = TextButton("Buy for [$constructionGoldCost] gold".tr(), CameraStageBaseScreen.skin) purchaseConstructionButton.onClick("coin") { diff --git a/core/src/com/unciv/ui/tilegroups/CityButton.kt b/core/src/com/unciv/ui/tilegroups/CityButton.kt index cc7a58b362..7514d4ef0e 100644 --- a/core/src/com/unciv/ui/tilegroups/CityButton.kt +++ b/core/src/com/unciv/ui/tilegroups/CityButton.kt @@ -100,6 +100,12 @@ class CityButton(val city: CityInfo, internal val tileGroup: WorldTileGroup, ski iconTable.add(resistanceImage).size(20f).pad(2f).padLeft(5f) } + if (city.isPuppet) { + val puppetImage = ImageGetter.getImage("OtherIcons/Puppet") + puppetImage.setColor(secondaryColor) + iconTable.add(puppetImage).size(20f).pad(2f).padLeft(5f) + } + if (city.isBeingRazed) { val fireImage = ImageGetter.getImage("OtherIcons/Fire") iconTable.add(fireImage).size(20f).pad(2f).padLeft(5f) @@ -116,7 +122,7 @@ class CityButton(val city: CityInfo, internal val tileGroup: WorldTileGroup, ski } else if (city.civInfo.isCurrentPlayer() && city.isConnectedToCapital()) { val connectionImage = ImageGetter.getStatIcon("CityConnection") connectionImage.color = secondaryColor - iconTable.add(connectionImage).size(20f).pad(2f).padLeft(10f) + iconTable.add(connectionImage).size(20f).pad(2f).padLeft(5f) } val cityButtonText = city.population.population.toString() + " | " + city.name diff --git a/core/src/com/unciv/ui/worldscreen/AlertPopup.kt b/core/src/com/unciv/ui/worldscreen/AlertPopup.kt index 954ca2c918..feb9099ced 100644 --- a/core/src/com/unciv/ui/worldscreen/AlertPopup.kt +++ b/core/src/com/unciv/ui/worldscreen/AlertPopup.kt @@ -59,10 +59,31 @@ class AlertPopup(val worldScreen: WorldScreen, val popupAlert: PopupAlert): Popu } } AlertType.CityConquered -> { + val city = worldScreen.gameInfo.civilizations.flatMap { it.cities }.first { it.name == popupAlert.value} addGoodSizedLabel("What would you like to do with the city?").row() - add(getCloseButton("Annex")).row() + val conqueringCiv = worldScreen.gameInfo.currentPlayerCiv + if (city.foundingCiv != "" + && city.civInfo.civName != city.foundingCiv // can't liberate if the city actually belongs to those guys + && conqueringCiv.civName != city.foundingCiv) { // or belongs originally to us + add(TextButton("Liberate".tr(), skin).onClick { + city.liberateCity(conqueringCiv) + worldScreen.shouldUpdate=true + close() + }).row() + } + add(TextButton("Annex".tr(), skin).onClick { + city.annexCity(conqueringCiv) + worldScreen.shouldUpdate=true + close() + }).row() + add(TextButton("Puppet City".tr(), skin).onClick { + city.puppetCity(conqueringCiv) + worldScreen.shouldUpdate=true + close() + }).row() add(TextButton("Raze".tr(), skin).onClick { - worldScreen.viewingCiv.cities.first { it.name==popupAlert.value }.isBeingRazed=true + city.annexCity(conqueringCiv) + city.isBeingRazed = true worldScreen.shouldUpdate=true close() }) diff --git a/docs/Credits.md b/docs/Credits.md index 2cd4a2b2ff..7a5431665a 100644 --- a/docs/Credits.md +++ b/docs/Credits.md @@ -41,6 +41,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Roman Helmet](https://thenounproject.com/search/?q=legion&i=440134) By parkjisun for Legion * [Horse](https://thenounproject.com/search/?q=Horse&i=1373793) By AFY Studio for Horseman * [Horse Head](https://thenounproject.com/search/?q=Cavalry&i=374037) By Juan Pablo Bravo for Companion Cavalry +* [Judge](https://thenounproject.com/search/?q=judge&i=1076388) By Krisztián Mátyás for Courthouse ### Medieval Era @@ -490,6 +491,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Aircraft](https://thenounproject.com/search/?q=aircraft&i=1629000) By Tom Fricker for aircraft icon in city button * [radar scan](https://thenounproject.com/search/?q=range&i=1500234) By icon 54 for Range * [short range radar](https://thenounproject.com/search/?q=air%20range&i=2612731) by Vectors Point for Intercept range +* [Puppet](https://thenounproject.com/search/?q=puppet&i=285735) By Ben Davis for puppeted cities # Sound credits