diff --git a/android/Images/OtherIcons/Pencil.png b/android/Images/OtherIcons/Pencil.png new file mode 100644 index 0000000000..2257f206c0 Binary files /dev/null and b/android/Images/OtherIcons/Pencil.png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index d8cea59548..6275e3c386 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -6,4144 +6,4151 @@ filter: MipMapLinearLinear, MipMapLinearLinear repeat: none EmojiIcons/Culture rotate: false - xy: 436, 183 + xy: 436, 178 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Faith rotate: false - xy: 1896, 1345 + xy: 1896, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Food rotate: false - xy: 710, 913 + xy: 818, 1016 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Gold rotate: false - xy: 1034, 1237 + xy: 494, 584 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Happiness rotate: false - xy: 436, 125 + xy: 494, 410 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Production rotate: false - xy: 1614, 1287 + xy: 1042, 1116 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Science rotate: false - xy: 1324, 1229 + xy: 1440, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Turn rotate: false - xy: 552, 587 + xy: 992, 942 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ImprovementIcons/Academy rotate: false - xy: 475, 1943 + xy: 475, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Ancient ruins rotate: false - xy: 691, 1943 + xy: 691, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Barbarian encampment rotate: false - xy: 1123, 1943 + xy: 1123, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Camp rotate: false - xy: 1231, 1943 + xy: 1231, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Citadel rotate: false - xy: 1447, 1943 + xy: 1447, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City center rotate: false - xy: 4, 185 + xy: 4, 180 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City ruins rotate: false - xy: 1663, 1943 + xy: 1663, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Customs house rotate: false - xy: 1231, 1835 + xy: 1231, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Farm rotate: false - xy: 112, 833 + xy: 112, 828 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fishing Boats rotate: false - xy: 112, 509 + xy: 112, 504 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fort rotate: false - xy: 289, 1757 + xy: 289, 1752 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Holy site rotate: false - xy: 1041, 1727 + xy: 1041, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Landmark rotate: false - xy: 946, 1619 + xy: 946, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Lumber mill rotate: false - xy: 1054, 1511 + xy: 1054, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Manufactory rotate: false - xy: 1162, 1511 + xy: 1162, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Mine rotate: false - xy: 1486, 1619 + xy: 1486, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Moai rotate: false - xy: 1486, 1511 + xy: 1486, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Oil well rotate: false - xy: 514, 1403 + xy: 514, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Pasture rotate: false - xy: 838, 1403 + xy: 838, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Plantation rotate: false - xy: 1378, 1403 + xy: 1486, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Polder rotate: false - xy: 1486, 1403 + xy: 1594, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Quarry rotate: false - xy: 220, 1079 + xy: 220, 966 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Road rotate: false - xy: 220, 107 + xy: 328, 1320 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Terrace farm rotate: false - xy: 652, 1079 + xy: 760, 1182 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Trading post rotate: false - xy: 544, 869 + xy: 652, 972 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/America rotate: false - xy: 4, 1157 + xy: 4, 1152 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Arabia rotate: false - xy: 4, 1049 + xy: 4, 1044 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Austria rotate: false - xy: 4, 941 + xy: 4, 936 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Aztecs rotate: false - xy: 907, 1943 + xy: 907, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Babylon rotate: false - xy: 4, 833 + xy: 4, 828 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/China rotate: false - xy: 1339, 1943 + xy: 1339, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/CityState rotate: false - xy: 1879, 1943 + xy: 1879, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Denmark rotate: false - xy: 1447, 1835 + xy: 1447, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Egypt rotate: false - xy: 112, 1265 + xy: 112, 1260 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/England rotate: false - xy: 112, 1157 + xy: 112, 1152 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/France rotate: false - xy: 298, 1541 + xy: 298, 1536 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Germany rotate: false - xy: 406, 1541 + xy: 406, 1536 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Greece rotate: false - xy: 609, 1727 + xy: 609, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Inca rotate: false - xy: 1473, 1727 + xy: 1473, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/India rotate: false - xy: 1689, 1727 + xy: 1689, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Iroquois rotate: false - xy: 1905, 1727 + xy: 1905, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Japan rotate: false - xy: 622, 1619 + xy: 622, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Korea rotate: false - xy: 838, 1619 + xy: 838, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Mongolia rotate: false - xy: 1594, 1511 + xy: 1594, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Persia rotate: false - xy: 1162, 1403 + xy: 1270, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Polynesia rotate: false - xy: 1594, 1403 + xy: 1702, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Rome rotate: false - xy: 328, 1325 + xy: 328, 1212 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Russia rotate: false - xy: 328, 1217 + xy: 328, 1104 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Siam rotate: false - xy: 328, 569 + xy: 328, 456 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Songhai rotate: false - xy: 436, 1295 + xy: 436, 1182 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Spain rotate: false - xy: 436, 1187 + xy: 544, 1290 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Sweden rotate: false - xy: 760, 1295 + xy: 436, 858 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/The Huns rotate: false - xy: 760, 1187 + xy: 868, 1290 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/The Netherlands rotate: false - xy: 868, 1295 + xy: 436, 750 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/The Ottomans rotate: false - xy: 436, 755 + xy: 544, 858 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Aircraft rotate: false - xy: 976, 1237 + xy: 1084, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/ArrowLeft rotate: false - xy: 1987, 1935 + xy: 1987, 1930 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/ArrowRight rotate: false - xy: 652, 855 + xy: 760, 958 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Movement rotate: false - xy: 652, 855 + xy: 760, 958 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/BackArrow rotate: false - xy: 1142, 1345 + xy: 1142, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Banner rotate: false - xy: 4, 725 + xy: 4, 720 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Border-inner rotate: false - xy: 436, 1410 + xy: 436, 1405 size: 31, 15 orig: 31, 15 offset: 0, 0 index: -1 OtherIcons/Border-outer rotate: false - xy: 475, 1410 + xy: 475, 1405 size: 31, 15 orig: 31, 15 offset: 0, 0 index: -1 OtherIcons/Camera rotate: false - xy: 840, 988 + xy: 1340, 1141 size: 25, 25 orig: 25, 25 offset: 0, 0 index: -1 OtherIcons/Circle rotate: false - xy: 289, 1865 + xy: 289, 1860 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 OtherIcons/Cities rotate: false - xy: 4, 293 + xy: 4, 288 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Close rotate: false - xy: 190, 1451 + xy: 190, 1446 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Crosshair rotate: false - xy: 1015, 1835 + xy: 1015, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Diplomacy rotate: false - xy: 1555, 1835 + xy: 1555, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DiplomacyW rotate: false - xy: 1663, 1835 + xy: 1663, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DisbandUnit rotate: false - xy: 1771, 1835 + xy: 1771, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Down rotate: false - xy: 1606, 1345 + xy: 1606, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Fire rotate: false - xy: 112, 725 + xy: 112, 720 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Hexagon rotate: false - xy: 4, 1803 + xy: 4, 1798 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 TileSets/Default/Hexagon rotate: false - xy: 4, 1803 + xy: 4, 1798 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 TileSets/FantasyHex/Hexagon rotate: false - xy: 4, 1803 + xy: 4, 1798 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 OtherIcons/Link rotate: false - xy: 718, 681 + xy: 494, 120 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Load rotate: false - xy: 946, 1511 + xy: 946, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Lock rotate: false - xy: 1054, 1619 + xy: 1054, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MapEditor rotate: false - xy: 1270, 1619 + xy: 1270, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MenuIcon rotate: false - xy: 1378, 1511 + xy: 1378, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Mods rotate: false - xy: 1594, 1619 + xy: 1594, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Multiplayer rotate: false - xy: 1702, 1511 + xy: 1702, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/New rotate: false - xy: 1810, 1511 + xy: 1810, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Options rotate: false - xy: 622, 1403 + xy: 622, 1398 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +OtherIcons/Pencil + rotate: false + xy: 1054, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pentagon rotate: false - xy: 1054, 1403 + xy: 1162, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pillage rotate: false - xy: 1270, 1403 + xy: 1378, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Present rotate: false - xy: 1918, 1403 + xy: 220, 1290 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Puppet rotate: false - xy: 220, 1187 + xy: 220, 1074 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Quest rotate: false - xy: 220, 971 + xy: 220, 858 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Quickstart rotate: false - xy: 220, 863 + xy: 220, 750 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Remove Heresy rotate: false - xy: 220, 431 + xy: 220, 318 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Resume rotate: false - xy: 220, 215 + xy: 220, 102 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Shield rotate: false - xy: 328, 785 + xy: 328, 672 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Sleep rotate: false - xy: 328, 137 + xy: 436, 1290 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Star rotate: false - xy: 544, 1193 + xy: 652, 1296 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 OtherIcons/Stop rotate: false - xy: 436, 971 + xy: 544, 1074 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Swap rotate: false - xy: 652, 1187 + xy: 760, 1290 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Triangle rotate: false - xy: 4, 1373 + xy: 4, 1368 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 OtherIcons/Up rotate: false - xy: 494, 413 + xy: 1050, 942 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/whiteDot rotate: false - xy: 694, 208 + xy: 285, 1635 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 PolicyIcons/Aesthetics rotate: false - xy: 652, 913 + xy: 760, 1016 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Aristocracy rotate: false - xy: 544, 703 + xy: 652, 806 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Citizenship rotate: false - xy: 436, 415 + xy: 436, 410 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Civil Society rotate: false - xy: 1316, 1345 + xy: 1316, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Collective Rule rotate: false - xy: 1374, 1345 + xy: 1374, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Communism rotate: false - xy: 436, 299 + xy: 436, 294 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Constitution rotate: false - xy: 1432, 1345 + xy: 1432, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Cultural Diplomacy rotate: false - xy: 1490, 1345 + xy: 1490, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Democracy rotate: false - xy: 1548, 1345 + xy: 1548, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Educated Elite rotate: false - xy: 1722, 1345 + xy: 1722, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Fascism rotate: false - xy: 1954, 1345 + xy: 1954, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Religion rotate: false - xy: 710, 797 + xy: 818, 900 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Speech rotate: false - xy: 818, 1021 + xy: 926, 1124 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Thought rotate: false - xy: 926, 1129 + xy: 1034, 1232 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Humanism rotate: false - xy: 278, 49 + xy: 494, 294 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Landed Elite rotate: false - xy: 660, 681 + xy: 710, 748 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Legalism rotate: false - xy: 718, 739 + xy: 436, 120 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mandate Of Heaven rotate: false - xy: 718, 623 + xy: 278, 44 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mercantilism rotate: false - xy: 394, 67 + xy: 768, 842 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Merchant Navy rotate: false - xy: 394, 9 + xy: 768, 784 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Meritocracy rotate: false - xy: 452, 67 + xy: 826, 842 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Militarism rotate: false - xy: 452, 9 + xy: 826, 784 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Caste rotate: false - xy: 876, 1071 + xy: 768, 726 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Tradition rotate: false - xy: 876, 1013 + xy: 826, 726 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Monarchy rotate: false - xy: 934, 1013 + xy: 131, 14 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Nationalism rotate: false - xy: 1150, 1287 + xy: 452, 62 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Naval Tradition rotate: false - xy: 1208, 1287 + xy: 394, 4 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Oligarchy rotate: false - xy: 1266, 1287 + xy: 452, 4 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Organized Religion rotate: false - xy: 1324, 1287 + xy: 510, 62 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Philantropy rotate: false - xy: 1382, 1287 + xy: 510, 4 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Planned Economy rotate: false - xy: 1440, 1287 + xy: 984, 1174 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Police State rotate: false - xy: 1498, 1287 + xy: 984, 1116 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Populism rotate: false - xy: 1556, 1287 + xy: 1042, 1174 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Professional Army rotate: false - xy: 1672, 1287 + xy: 876, 1066 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Protectionism rotate: false - xy: 1730, 1287 + xy: 876, 1008 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Reformation rotate: false - xy: 1904, 1287 + xy: 1150, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Representation rotate: false - xy: 1150, 1229 + xy: 1266, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Republic rotate: false - xy: 1208, 1229 + xy: 1324, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scholasticism rotate: false - xy: 1266, 1229 + xy: 1382, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scientific Revolution rotate: false - xy: 1382, 1229 + xy: 1498, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Secularism rotate: false - xy: 1498, 1229 + xy: 1614, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Socialism rotate: false - xy: 1672, 1229 + xy: 1788, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Sovereignty rotate: false - xy: 1788, 1229 + xy: 1904, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Theocracy rotate: false - xy: 1962, 1229 + xy: 992, 1058 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Total War rotate: false - xy: 494, 587 + xy: 992, 1000 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Trade Unions rotate: false - xy: 494, 529 + xy: 934, 942 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/United Front rotate: false - xy: 494, 471 + xy: 1050, 1058 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Universal Suffrage rotate: false - xy: 552, 529 + xy: 1050, 1000 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Warrior Code rotate: false - xy: 494, 355 + xy: 1100, 1166 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ReligionIcons/Buddhism rotate: false - xy: 4, 617 + xy: 4, 612 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Christianity rotate: false - xy: 4, 401 + xy: 4, 396 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Confucianism rotate: false - xy: 583, 1835 + xy: 583, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Follower rotate: false - xy: 112, 293 + xy: 112, 288 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Founder rotate: false - xy: 285, 1649 + xy: 285, 1644 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Hinduism rotate: false - xy: 933, 1727 + xy: 933, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Islam rotate: false - xy: 514, 1619 + xy: 514, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Judaism rotate: false - xy: 730, 1619 + xy: 730, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Pantheon rotate: false - xy: 730, 1403 + xy: 730, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Religion rotate: false - xy: 220, 647 + xy: 220, 534 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Shinto rotate: false - xy: 328, 677 + xy: 328, 564 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Sikhism rotate: false - xy: 328, 461 + xy: 328, 348 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Taoism rotate: false - xy: 436, 863 + xy: 544, 966 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Tengriism rotate: false - xy: 544, 977 + xy: 652, 1080 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Zoroastrianism rotate: false - xy: 544, 761 + xy: 652, 864 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Aluminum rotate: false - xy: 583, 1943 + xy: 583, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Bananas rotate: false - xy: 1015, 1943 + xy: 1015, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cattle rotate: false - xy: 4, 509 + xy: 4, 504 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Citrus rotate: false - xy: 1555, 1943 + xy: 1555, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Coal rotate: false - xy: 475, 1835 + xy: 475, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Copper rotate: false - xy: 691, 1835 + xy: 691, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cotton rotate: false - xy: 799, 1835 + xy: 799, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Crab rotate: false - xy: 907, 1835 + xy: 907, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Deer rotate: false - xy: 1339, 1835 + xy: 1339, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Dyes rotate: false - xy: 1879, 1835 + xy: 1879, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Fish rotate: false - xy: 112, 617 + xy: 112, 612 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Furs rotate: false - xy: 298, 1433 + xy: 298, 1428 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gems rotate: false - xy: 393, 1649 + xy: 393, 1644 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gold Ore rotate: false - xy: 501, 1727 + xy: 501, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Horses rotate: false - xy: 1149, 1727 + xy: 1149, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Incense rotate: false - xy: 1581, 1727 + xy: 1581, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Iron rotate: false - xy: 1797, 1727 + xy: 1797, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Ivory rotate: false - xy: 514, 1511 + xy: 514, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Jewelry rotate: false - xy: 622, 1511 + xy: 622, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Marble rotate: false - xy: 1270, 1511 + xy: 1270, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Oil rotate: false - xy: 1918, 1511 + xy: 1918, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Pearls rotate: false - xy: 946, 1403 + xy: 946, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Porcelain rotate: false - xy: 1810, 1403 + xy: 1918, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Salt rotate: false - xy: 328, 1109 + xy: 328, 996 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sheep rotate: false - xy: 328, 893 + xy: 328, 780 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silk rotate: false - xy: 328, 353 + xy: 328, 240 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silver rotate: false - xy: 328, 245 + xy: 328, 132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Spices rotate: false - xy: 436, 1079 + xy: 544, 1182 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Stone rotate: false - xy: 652, 1295 + xy: 436, 966 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sugar rotate: false - xy: 544, 1085 + xy: 652, 1188 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Truffles rotate: false - xy: 652, 971 + xy: 760, 1074 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Uranium rotate: false - xy: 760, 1079 + xy: 868, 1182 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Whales rotate: false - xy: 868, 1187 + xy: 976, 1290 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wheat rotate: false - xy: 976, 1295 + xy: 436, 642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wine rotate: false - xy: 436, 647 + xy: 544, 750 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Acquire rotate: false - xy: 4, 1265 + xy: 4, 1260 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/CityConnection rotate: false - xy: 4, 77 + xy: 4, 72 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Culture rotate: false - xy: 1123, 1835 + xy: 1123, 1830 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Faith rotate: false - xy: 112, 1049 + xy: 112, 1044 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Food rotate: false - xy: 112, 185 + xy: 112, 180 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Gold rotate: false - xy: 406, 1433 + xy: 406, 1428 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Happiness rotate: false - xy: 717, 1727 + xy: 717, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/InterceptRange rotate: false - xy: 336, 21 + xy: 494, 178 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Malcontent rotate: false - xy: 1162, 1619 + xy: 1162, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Population rotate: false - xy: 1702, 1403 + xy: 1810, 1398 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Production rotate: false - xy: 220, 1295 + xy: 220, 1182 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Range rotate: false - xy: 1788, 1287 + xy: 876, 950 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/RangedStrength rotate: false - xy: 1846, 1287 + xy: 1092, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/ReligiousStrength rotate: false - xy: 220, 539 + xy: 220, 426 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Resistance rotate: false - xy: 220, 323 + xy: 220, 210 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Science rotate: false - xy: 328, 1001 + xy: 328, 888 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Specialist rotate: false - xy: 544, 1295 + xy: 436, 1074 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Strength rotate: false - xy: 1846, 1229 + xy: 1962, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 TileSets/Default/AtollOverlay rotate: false - xy: 799, 1943 + xy: 799, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/CityOverlay rotate: false - xy: 1771, 1943 + xy: 1771, 1938 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/CrosshatchHexagon rotate: false - xy: 4, 1559 + xy: 4, 1554 size: 273, 236 orig: 273, 236 offset: 0, 0 index: -1 TileSets/FantasyHex/CrosshatchHexagon rotate: false - xy: 4, 1559 + xy: 4, 1554 size: 273, 236 orig: 273, 236 offset: 0, 0 index: -1 TileSets/Default/FalloutOverlay rotate: false - xy: 112, 941 + xy: 112, 936 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Flood plainsOverlay rotate: false - xy: 112, 401 + xy: 112, 396 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/ForestOverlay rotate: false - xy: 112, 77 + xy: 112, 72 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/HillOverlay rotate: false - xy: 825, 1727 + xy: 825, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/IceOverlay rotate: false - xy: 1257, 1727 + xy: 1257, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/JungleOverlay rotate: false - xy: 730, 1511 + xy: 730, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/LakesOverlay rotate: false - xy: 838, 1511 + xy: 838, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/MarshOverlay rotate: false - xy: 1378, 1619 + xy: 1378, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/MountainOverlay rotate: false - xy: 1702, 1619 + xy: 1702, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/NaturalWonderOverlay rotate: false - xy: 1810, 1619 + xy: 1810, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/OasisOverlay rotate: false - xy: 1918, 1619 + xy: 1918, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Railroad rotate: false - xy: 220, 755 + xy: 220, 642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Railroad rotate: false - xy: 220, 755 + xy: 220, 642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Road rotate: false - xy: 4, 58 + xy: 4, 53 size: 61, 11 orig: 61, 11 offset: 0, 0 index: -1 TileSets/Default/Tiles/River-Bottom rotate: false - xy: 970, 572 + xy: 632, 192 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/Default/Tiles/River-BottomLeft rotate: false - xy: 1050, 610 + xy: 632, 156 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/Default/Tiles/River-BottomRight rotate: false - xy: 930, 532 + xy: 672, 161 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Railroad rotate: false - xy: 397, 1825 + xy: 397, 1820 size: 60, 32 orig: 60, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Road rotate: false - xy: 190, 1411 + xy: 190, 1406 size: 60, 32 orig: 60, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Academy rotate: false - xy: 2012, 1359 + xy: 2012, 1354 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Academy-Snow rotate: false - xy: 258, 1408 + xy: 258, 1403 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Aluminum rotate: false - xy: 4, 22 + xy: 602, 714 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins rotate: false - xy: 760, 985 + xy: 544, 656 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Jungle rotate: false - xy: 610, 605 + xy: 876, 910 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Sand rotate: false - xy: 552, 377 + xy: 1100, 1130 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Snow rotate: false - xy: 494, 261 + xy: 1216, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins2 rotate: false - xy: 976, 1201 + xy: 4, 17 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Atoll rotate: false - xy: 552, 305 + xy: 1256, 1174 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Bananas rotate: false - xy: 494, 153 + xy: 1296, 1174 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barbarian encampment rotate: false - xy: 610, 461 + xy: 1336, 1210 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barbarian encampment-Snow rotate: false - xy: 610, 424 + xy: 1376, 1245 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barringer Crater rotate: false - xy: 650, 587 + xy: 1336, 1174 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Bison rotate: false - xy: 650, 479 + xy: 1496, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Bison+Camp rotate: false - xy: 690, 515 + xy: 1496, 1210 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cattle rotate: false - xy: 768, 805 + xy: 1936, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cattle+Pasture rotate: false - xy: 808, 945 + xy: 1976, 1242 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cerro de Potosi rotate: false - xy: 808, 873 + xy: 1416, 1174 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citadel rotate: false - xy: 984, 1158 + xy: 1536, 1167 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citadel-Snow rotate: false - xy: 1024, 1163 + xy: 1576, 1207 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citrus rotate: false - xy: 650, 407 + xy: 1616, 1210 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citrus+Plantation rotate: false - xy: 690, 406 + xy: 1576, 1171 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center rotate: false - xy: 730, 394 + xy: 1616, 1167 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Ancient era rotate: false - xy: 610, 384 + xy: 1656, 1200 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Atomic era rotate: false - xy: 650, 365 + xy: 1696, 1204 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Classical era rotate: false - xy: 690, 366 + xy: 1736, 1206 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Future era rotate: false - xy: 730, 352 + xy: 1776, 1204 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Industrial era rotate: false - xy: 592, 343 + xy: 1816, 1205 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Information era rotate: false - xy: 592, 299 + xy: 1856, 1202 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Medieval era rotate: false - xy: 632, 325 + xy: 1896, 1206 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Modern era rotate: false - xy: 632, 283 + xy: 1936, 1204 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Renaissance era rotate: false - xy: 672, 325 + xy: 1976, 1202 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City ruins rotate: false - xy: 672, 289 + xy: 1656, 1164 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Coal rotate: false - xy: 712, 280 + xy: 1736, 1170 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Coast rotate: false - xy: 672, 253 + xy: 1776, 1168 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cocoa rotate: false - xy: 712, 244 + xy: 1816, 1169 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cocoa+Plantation rotate: false - xy: 552, 269 + xy: 1856, 1166 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Copper rotate: false - xy: 534, 161 + xy: 1220, 1138 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cotton rotate: false - xy: 574, 190 + xy: 1300, 1138 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Crab rotate: false - xy: 574, 154 + xy: 642, 712 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Customs house rotate: false - xy: 614, 133 + xy: 1108, 1087 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Deer rotate: false - xy: 672, 217 + xy: 1108, 1051 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Deer+Camp rotate: false - xy: 712, 208 + xy: 1148, 1094 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert rotate: false - xy: 654, 181 + xy: 1108, 1015 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert+Farm rotate: false - xy: 654, 145 + xy: 1148, 1058 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert+Flood plains+Farm rotate: false - xy: 694, 172 + xy: 1108, 979 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Dyes rotate: false - xy: 694, 100 + xy: 1148, 986 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Dyes+Plantation rotate: false - xy: 534, 125 + xy: 1148, 950 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/El Dorado rotate: false - xy: 574, 117 + xy: 1188, 1093 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fallout rotate: false - xy: 614, 90 + xy: 1188, 1050 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fish rotate: false - xy: 654, 73 + xy: 1188, 1014 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fishing Boats rotate: false - xy: 694, 64 + xy: 1188, 978 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Flood plains rotate: false - xy: 752, 316 + xy: 1228, 1102 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Forest rotate: false - xy: 752, 240 + xy: 1268, 1098 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fort rotate: false - xy: 752, 199 + xy: 1228, 1025 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fountain of Youth rotate: false - xy: 734, 159 + xy: 1268, 1058 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Furs rotate: false - xy: 734, 87 + xy: 1268, 1022 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Furs+Camp rotate: false - xy: 734, 51 + xy: 1268, 986 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Gems rotate: false - xy: 774, 55 + xy: 1308, 1102 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Gold Ore rotate: false - xy: 510, 50 + xy: 1308, 1027 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grand Mesa rotate: false - xy: 510, 10 + xy: 1308, 987 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland rotate: false - xy: 550, 81 + xy: 1308, 951 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Farm rotate: false - xy: 550, 45 + xy: 602, 678 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Camp rotate: false - xy: 550, 6 + xy: 642, 673 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Deer+Camp rotate: false - xy: 590, 51 + xy: 682, 673 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Furs+Camp rotate: false - xy: 590, 12 + xy: 722, 675 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Lumber mill rotate: false - xy: 630, 34 + xy: 762, 687 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Truffles+Camp rotate: false - xy: 455, 1786 + xy: 802, 687 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Farm rotate: false - xy: 670, 28 + xy: 842, 690 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Camp rotate: false - xy: 1024, 1127 + xy: 884, 874 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Lumber mill rotate: false - xy: 774, 19 + xy: 884, 838 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Trading post rotate: false - xy: 992, 1091 + xy: 884, 802 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Jungle+Trading post rotate: false - xy: 992, 1051 + xy: 884, 762 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/GrasslandForest rotate: false - xy: 992, 1012 + xy: 884, 723 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Great Barrier Reef rotate: false - xy: 1032, 1016 + xy: 1108, 907 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Hill rotate: false - xy: 776, 653 + xy: 1308, 839 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillForest+Lumber mill rotate: false - xy: 816, 765 + xy: 552, 620 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillMarbleQuarry rotate: false - xy: 816, 729 + xy: 552, 584 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillMine rotate: false - xy: 816, 693 + xy: 552, 548 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillStoneQuarry rotate: false - xy: 816, 657 + xy: 552, 512 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Holy Site rotate: false - xy: 792, 324 + xy: 552, 468 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Horses rotate: false - xy: 816, 621 + xy: 552, 324 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Horses+Pasture rotate: false - xy: 810, 581 + xy: 552, 284 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ice rotate: false - xy: 810, 472 + xy: 552, 175 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Incense rotate: false - xy: 850, 585 + xy: 802, 651 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Incense+Plantation rotate: false - xy: 850, 549 + xy: 842, 654 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Iron rotate: false - xy: 850, 441 + xy: 762, 615 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ivory rotate: false - xy: 850, 369 + xy: 842, 618 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ivory+Camp rotate: false - xy: 832, 333 + xy: 882, 612 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Jungle rotate: false - xy: 832, 221 + xy: 455, 1780 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Krakatoa rotate: false - xy: 872, 220 + xy: 1696, 1130 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Lakes rotate: false - xy: 872, 184 + xy: 1776, 1132 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Landmark rotate: false - xy: 814, 69 + xy: 1896, 1125 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Manufactory rotate: false - xy: 894, 65 + xy: 1856, 1083 size: 32, 39 orig: 32, 39 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Marble rotate: false - xy: 854, 4 + xy: 1696, 1094 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Marsh rotate: false - xy: 930, 976 + xy: 1856, 1046 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mine rotate: false - xy: 970, 940 + xy: 1896, 1017 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Moai rotate: false - xy: 1050, 907 + xy: 1976, 985 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mount Fuji rotate: false - xy: 1010, 870 + xy: 1856, 1008 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mount Kailash rotate: false - xy: 1050, 867 + xy: 1896, 977 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mount Sinai rotate: false - xy: 890, 865 + xy: 1936, 947 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mountain rotate: false - xy: 930, 860 + xy: 1976, 941 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oasis rotate: false - xy: 970, 796 + xy: 592, 426 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ocean rotate: false - xy: 1010, 798 + xy: 592, 390 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Offshore Platform rotate: false - xy: 1050, 795 + xy: 592, 354 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oil rotate: false - xy: 890, 793 + xy: 592, 318 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oil well rotate: false - xy: 930, 788 + xy: 592, 282 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Old Faithful rotate: false - xy: 970, 756 + xy: 592, 242 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Pasture rotate: false - xy: 1010, 722 + xy: 592, 130 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Pearls rotate: false - xy: 890, 757 + xy: 672, 637 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains rotate: false - xy: 930, 716 + xy: 632, 529 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Farm rotate: false - xy: 890, 685 + xy: 672, 565 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Forest+Camp rotate: false - xy: 930, 676 + xy: 632, 489 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Forest+Lumber mill rotate: false - xy: 970, 680 + xy: 672, 525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Jungle+Trading post rotate: false - xy: 1010, 682 + xy: 632, 449 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/PlainsForest rotate: false - xy: 1050, 683 + xy: 672, 485 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/PlainsJungle rotate: false - xy: 890, 645 + xy: 632, 409 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation rotate: false - xy: 930, 640 + xy: 672, 449 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation+Bananas rotate: false - xy: 970, 644 + xy: 632, 373 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation+Cotton rotate: false - xy: 1010, 646 + xy: 672, 413 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Polder rotate: false - xy: 1050, 646 + xy: 632, 336 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry rotate: false - xy: 930, 604 + xy: 672, 341 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry+Marble rotate: false - xy: 970, 608 + xy: 632, 264 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry+Stone rotate: false - xy: 1010, 610 + xy: 672, 305 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-Bottom rotate: false - xy: 1010, 574 + xy: 672, 233 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-BottomLeft rotate: false - xy: 890, 501 + xy: 672, 197 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-BottomRight rotate: false - xy: 970, 536 + xy: 712, 603 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Rock of Gibraltar rotate: false - xy: 890, 461 + xy: 712, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Salt rotate: false - xy: 1050, 574 + xy: 712, 491 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sheep rotate: false - xy: 1050, 538 + xy: 712, 310 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sheep+Pasture rotate: false - xy: 930, 456 + xy: 712, 270 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silk rotate: false - xy: 1050, 502 + xy: 632, 120 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silk+Plantation rotate: false - xy: 930, 420 + xy: 672, 125 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silver rotate: false - xy: 970, 428 + xy: 712, 125 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Snow rotate: false - xy: 1050, 430 + xy: 752, 541 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Snow+Farm rotate: false - xy: 930, 384 + xy: 792, 543 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Spices rotate: false - xy: 1010, 391 + xy: 792, 507 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Spices+Plantation rotate: false - xy: 1050, 394 + xy: 752, 469 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sri Pada rotate: false - xy: 970, 352 + xy: 752, 429 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Stone rotate: false - xy: 1010, 355 + xy: 792, 471 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sugar rotate: false - xy: 1050, 324 + xy: 792, 435 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sugar+Plantation rotate: false - xy: 1010, 319 + xy: 752, 359 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Terrace farm rotate: false - xy: 912, 276 + xy: 752, 287 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Trading post rotate: false - xy: 912, 204 + xy: 752, 251 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Truffles rotate: false - xy: 952, 244 + xy: 792, 255 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Truffles+Camp rotate: false - xy: 952, 208 + xy: 752, 179 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra rotate: false - xy: 992, 283 + xy: 792, 219 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Farm rotate: false - xy: 992, 247 + xy: 752, 143 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Camp rotate: false - xy: 992, 207 + xy: 792, 179 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Camp+Furs rotate: false - xy: 1032, 248 + xy: 792, 139 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Deer+Camp rotate: false - xy: 1032, 208 + xy: 832, 542 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Lumber mill rotate: false - xy: 1072, 248 + xy: 832, 502 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Truffles+Camp rotate: false - xy: 1072, 208 + xy: 832, 462 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/TundraForest rotate: false - xy: 952, 168 + xy: 832, 422 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Uluru rotate: false - xy: 1032, 168 + xy: 832, 346 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Uranium rotate: false - xy: 1072, 172 + xy: 832, 310 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Whales rotate: false - xy: 974, 132 + xy: 832, 132 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Whales+Fishing Boats rotate: false - xy: 974, 96 + xy: 872, 540 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wheat rotate: false - xy: 974, 60 + xy: 872, 504 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wine rotate: false - xy: 974, 24 + xy: 872, 468 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wine+Plantation rotate: false - xy: 1014, 132 + xy: 872, 432 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/TopBorder rotate: false - xy: 912, 240 + xy: 792, 327 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/African Forest Elephant rotate: false - xy: 1987, 1840 + xy: 1987, 1835 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Anti-Aircraft Gun rotate: false - xy: 800, 985 + xy: 1140, 1130 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Anti-Tank Gun rotate: false - xy: 1016, 1201 + xy: 1216, 1210 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Archaeologist rotate: false - xy: 610, 569 + xy: 1256, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Archer rotate: false - xy: 552, 341 + xy: 1216, 1174 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Artillery rotate: false - xy: 494, 225 + xy: 1256, 1210 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Atlatlist rotate: false - xy: 610, 533 + xy: 1296, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Axe Thrower rotate: false - xy: 494, 189 + xy: 1296, 1210 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ballista rotate: false - xy: 610, 497 + xy: 1336, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Battering Ram rotate: false - xy: 650, 551 + xy: 1376, 1209 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Battleship rotate: false - xy: 690, 587 + xy: 1416, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Bazooka rotate: false - xy: 650, 515 + xy: 1416, 1210 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Berber Cavalry rotate: false - xy: 690, 551 + xy: 1456, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Berserker rotate: false - xy: 730, 587 + xy: 1456, 1210 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Bowman rotate: false - xy: 730, 551 + xy: 1536, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Brute rotate: false - xy: 650, 443 + xy: 1536, 1210 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Camel Archer rotate: false - xy: 690, 478 + xy: 1576, 1245 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cannon rotate: false - xy: 730, 515 + xy: 1616, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Caravan rotate: false - xy: 730, 473 + xy: 1656, 1240 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Caravel rotate: false - xy: 690, 442 + xy: 1696, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cargo Ship rotate: false - xy: 730, 437 + xy: 1736, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Carolean rotate: false - xy: 768, 949 + xy: 1776, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Carrier rotate: false - xy: 768, 913 + xy: 1816, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cataphract rotate: false - xy: 768, 877 + xy: 1856, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Catapult rotate: false - xy: 768, 841 + xy: 1896, 1246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cavalry rotate: false - xy: 808, 909 + xy: 1376, 1173 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Chariot Archer rotate: false - xy: 808, 837 + xy: 1456, 1174 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Chu-Ko-Nu rotate: false - xy: 808, 801 + xy: 1496, 1174 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/CivilianLandUnit rotate: false - xy: 712, 316 + xy: 1696, 1168 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Comanche Rider rotate: false - xy: 592, 262 + xy: 1896, 1169 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Companion Cavalry rotate: false - xy: 632, 246 + xy: 1936, 1167 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Composite Bowman rotate: false - xy: 534, 233 + xy: 1976, 1166 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Conquistador rotate: false - xy: 534, 197 + xy: 1180, 1130 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cossack rotate: false - xy: 574, 226 + xy: 1260, 1138 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Crossbowman rotate: false - xy: 614, 210 + xy: 682, 712 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cruiser rotate: false - xy: 614, 176 + xy: 722, 714 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Destroyer rotate: false - xy: 694, 136 + xy: 1148, 1022 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Dromon rotate: false - xy: 654, 109 + xy: 1108, 943 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Foreign Legion rotate: false - xy: 752, 280 + xy: 1228, 1066 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Frigate rotate: false - xy: 734, 123 + xy: 1228, 989 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Galleass rotate: false - xy: 774, 163 + xy: 1188, 942 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Galley rotate: false - xy: 774, 127 + xy: 1228, 953 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Gatling Gun rotate: false - xy: 774, 91 + xy: 1268, 950 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Giant Death Robot rotate: false - xy: 510, 86 + xy: 1308, 1063 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Admiral rotate: false - xy: 1032, 1088 + xy: 882, 684 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Artist rotate: false - xy: 1032, 1052 + xy: 1148, 914 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Engineer rotate: false - xy: 1032, 980 + xy: 1188, 906 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Galleass rotate: false - xy: 770, 587 + xy: 1228, 917 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great General rotate: false - xy: 770, 548 + xy: 1268, 911 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Merchant rotate: false - xy: 770, 512 + xy: 1308, 915 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Musician rotate: false - xy: 770, 476 + xy: 1228, 881 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Prophet rotate: false - xy: 770, 440 + xy: 1268, 875 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Scientist rotate: false - xy: 770, 404 + xy: 1308, 879 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great War Infantry rotate: false - xy: 770, 368 + xy: 1148, 878 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Writer rotate: false - xy: 776, 765 + xy: 1188, 870 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hakkapeliitta rotate: false - xy: 776, 729 + xy: 1228, 845 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Helicopter Gunship rotate: false - xy: 776, 693 + xy: 1268, 839 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hoplite rotate: false - xy: 792, 288 + xy: 552, 432 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Horse Archer rotate: false - xy: 792, 252 + xy: 552, 396 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Horseman rotate: false - xy: 792, 216 + xy: 552, 360 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hussar rotate: false - xy: 810, 544 + xy: 552, 247 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hwach'a rotate: false - xy: 810, 508 + xy: 552, 211 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Immortal rotate: false - xy: 810, 436 + xy: 552, 139 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Impi rotate: false - xy: 810, 400 + xy: 762, 651 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Infantry rotate: false - xy: 850, 513 + xy: 882, 648 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Inquisitor rotate: false - xy: 850, 477 + xy: 722, 639 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ironclad rotate: false - xy: 850, 405 + xy: 802, 615 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Jaguar rotate: false - xy: 832, 297 + xy: 842, 582 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Janissary rotate: false - xy: 832, 261 + xy: 882, 576 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Keshik rotate: false - xy: 872, 333 + xy: 1576, 1135 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Khan rotate: false - xy: 872, 294 + xy: 1616, 1128 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Knight rotate: false - xy: 872, 258 + xy: 1656, 1128 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Kris Swordsman rotate: false - xy: 832, 185 + xy: 1736, 1134 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Lancer rotate: false - xy: 814, 149 + xy: 1816, 1133 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/LandUnit rotate: false - xy: 814, 113 + xy: 1856, 1130 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Landship rotate: false - xy: 814, 33 + xy: 1936, 1131 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Landsknecht rotate: false - xy: 854, 148 + xy: 1976, 1130 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Legion rotate: false - xy: 854, 112 + xy: 1936, 1095 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Longbowman rotate: false - xy: 854, 76 + xy: 1976, 1094 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Longswordsman rotate: false - xy: 854, 40 + xy: 1736, 1098 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Machine Gun rotate: false - xy: 894, 148 + xy: 1776, 1096 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mandekalu Cavalry rotate: false - xy: 894, 112 + xy: 1816, 1097 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Maori Warrior rotate: false - xy: 894, 29 + xy: 1896, 1089 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Marine rotate: false - xy: 890, 977 + xy: 1816, 1061 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mechanized Infantry rotate: false - xy: 970, 976 + xy: 1896, 1053 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mehal Sefari rotate: false - xy: 890, 941 + xy: 1936, 1059 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Merchant Of Venice rotate: false - xy: 930, 940 + xy: 1976, 1058 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Minuteman rotate: false - xy: 1010, 944 + xy: 1936, 1023 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Missile Cruiser rotate: false - xy: 1050, 944 + xy: 1976, 1022 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Missionary rotate: false - xy: 1010, 908 + xy: 1936, 987 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mobile SAM rotate: false - xy: 890, 905 + xy: 1736, 1062 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Modern Armor rotate: false - xy: 930, 904 + xy: 1776, 1060 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mohawk Warrior rotate: false - xy: 970, 904 + xy: 1816, 1025 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Musketeer rotate: false - xy: 970, 868 + xy: 592, 642 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Musketman rotate: false - xy: 970, 832 + xy: 592, 606 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Naresuan's Elephant rotate: false - xy: 1010, 834 + xy: 592, 570 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Nau rotate: false - xy: 1050, 831 + xy: 592, 534 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Norwegian Ski Infantry rotate: false - xy: 890, 829 + xy: 592, 498 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Nuclear Submarine rotate: false - xy: 930, 824 + xy: 592, 462 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Panzer rotate: false - xy: 1010, 762 + xy: 592, 206 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Paratrooper rotate: false - xy: 1050, 759 + xy: 592, 170 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pathfinder rotate: false - xy: 1050, 723 + xy: 632, 637 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Persian Immortal rotate: false - xy: 930, 752 + xy: 632, 601 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pictish Warrior rotate: false - xy: 970, 720 + xy: 632, 565 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pikeman rotate: false - xy: 890, 721 + xy: 672, 601 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pracinha rotate: false - xy: 890, 609 + xy: 672, 377 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Privateer rotate: false - xy: 890, 573 + xy: 632, 300 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Quinquereme rotate: false - xy: 890, 537 + xy: 632, 228 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Rifleman rotate: false - xy: 930, 568 + xy: 672, 269 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Rocket Artillery rotate: false - xy: 1010, 538 + xy: 712, 527 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Samurai rotate: false - xy: 930, 496 + xy: 712, 455 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Scout rotate: false - xy: 970, 500 + xy: 712, 419 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Sea Beggar rotate: false - xy: 890, 425 + xy: 712, 383 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Settler rotate: false - xy: 1010, 501 + xy: 712, 346 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ship Of The Line rotate: false - xy: 970, 464 + xy: 712, 234 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ship of the Line rotate: false - xy: 890, 388 + xy: 712, 197 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Siege Tower rotate: false - xy: 1010, 465 + xy: 712, 161 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Sipahi rotate: false - xy: 1010, 427 + xy: 752, 577 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Slinger rotate: false - xy: 1050, 466 + xy: 792, 579 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Spearman rotate: false - xy: 970, 392 + xy: 752, 505 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Submarine rotate: false - xy: 1050, 360 + xy: 752, 395 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Swordsman rotate: false - xy: 1050, 288 + xy: 792, 399 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Tank rotate: false - xy: 912, 348 + xy: 752, 323 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Tercio rotate: false - xy: 912, 312 + xy: 792, 363 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Trebuchet rotate: false - xy: 952, 316 + xy: 792, 291 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Trireme rotate: false - xy: 952, 280 + xy: 752, 215 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Turtle Ship rotate: false - xy: 992, 171 + xy: 832, 386 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/War Chariot rotate: false - xy: 934, 132 + xy: 832, 274 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/War Elephant rotate: false - xy: 934, 96 + xy: 832, 238 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Warrior rotate: false - xy: 934, 60 + xy: 832, 202 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/WaterUnit rotate: false - xy: 934, 26 + xy: 832, 168 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Winged Hussar rotate: false - xy: 1014, 96 + xy: 872, 396 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Work Boats rotate: false - xy: 1014, 60 + xy: 872, 360 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Worker rotate: false - xy: 1014, 24 + xy: 872, 324 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 UnitPromotionIcons/Accuracy rotate: false - xy: 1987, 1993 + xy: 1987, 1988 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Air Repair rotate: false - xy: 760, 1021 + xy: 868, 1124 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Air Targeting rotate: false - xy: 868, 1129 + xy: 976, 1232 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting rotate: false - xy: 868, 1129 + xy: 976, 1232 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Ambush rotate: false - xy: 1084, 1345 + xy: 436, 584 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Anti-Armor rotate: false - xy: 1084, 1345 + xy: 436, 584 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Amphibious rotate: false - xy: 436, 589 + xy: 544, 692 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Armor Plating rotate: false - xy: 397, 1767 + xy: 397, 1762 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage rotate: false - xy: 436, 531 + xy: 436, 526 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Besiege rotate: false - xy: 1987, 1877 + xy: 1987, 1872 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Siege rotate: false - xy: 1987, 1877 + xy: 1987, 1872 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Blitz rotate: false - xy: 652, 797 + xy: 760, 900 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding Party rotate: false - xy: 1200, 1345 + xy: 1200, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment rotate: false - xy: 436, 473 + xy: 436, 468 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Charge rotate: false - xy: 1258, 1345 + xy: 1258, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal Raider rotate: false - xy: 436, 357 + xy: 436, 352 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Cover rotate: false - xy: 436, 241 + xy: 436, 236 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Discipline rotate: false - xy: 436, 241 + xy: 436, 236 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Drill rotate: false - xy: 1664, 1345 + xy: 1664, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Evasion rotate: false - xy: 1780, 1345 + xy: 1780, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Extended Range rotate: false - xy: 1838, 1345 + xy: 1838, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Operational Range rotate: false - xy: 1838, 1345 + xy: 1838, 1340 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Flight Deck rotate: false - xy: 544, 645 + xy: 652, 748 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Formation rotate: false - xy: 710, 855 + xy: 818, 958 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Great Generals rotate: false - xy: 602, 703 + xy: 494, 526 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Quick Study rotate: false - xy: 602, 703 + xy: 494, 526 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Haka War Dance rotate: false - xy: 602, 645 + xy: 494, 468 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Heal Instantly rotate: false - xy: 220, 49 + xy: 494, 352 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Ignore terrain cost rotate: false - xy: 1365, 1727 + xy: 1365, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitPromotionIcons/Indirect Fire rotate: false - xy: 336, 79 + xy: 494, 236 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Interception rotate: false - xy: 660, 739 + xy: 710, 806 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Logistics rotate: false - xy: 660, 623 + xy: 220, 44 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/March rotate: false - xy: 73, 19 + xy: 336, 74 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Medic rotate: false - xy: 131, 19 + xy: 336, 16 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Mobility rotate: false - xy: 934, 1071 + xy: 73, 14 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Morale rotate: false - xy: 1092, 1287 + xy: 394, 62 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Rejuvenation rotate: false - xy: 1092, 1229 + xy: 1208, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting rotate: false - xy: 1440, 1229 + xy: 1556, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sentry rotate: false - xy: 1440, 1229 + xy: 1556, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Shock rotate: false - xy: 1556, 1229 + xy: 1672, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Slinger Withdraw rotate: false - xy: 1614, 1229 + xy: 1730, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sortie rotate: false - xy: 1730, 1229 + xy: 1846, 1282 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Supply rotate: false - xy: 1904, 1229 + xy: 934, 1058 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Survivalism rotate: false - xy: 1962, 1287 + xy: 934, 1000 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Volley rotate: false - xy: 552, 471 + xy: 1100, 1224 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Wolfpack rotate: false - xy: 552, 413 + xy: 1158, 1224 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Woodsman rotate: false - xy: 494, 297 + xy: 1158, 1166 size: 50, 50 orig: 50, 50 offset: 0, 0 diff --git a/android/assets/game.png b/android/assets/game.png index 993af4a5f4..0255f1da23 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index c81c785591..3b96683547 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -701,6 +701,8 @@ Worked by [cityName] = Lock = Unlock = Move to city = +Invalid input! Please enter a different string. = +Please enter some text = # Technology UI @@ -766,7 +768,6 @@ Spread [religionName] = Remove Heresy = Found a Religion = Enhance a Religion = -Enhance [religionName] = Your citizens have been happy with your rule for so long that the empire enters a Golden Age! = You have entered the [newEra]! = [civName] has entered the [eraName]! = @@ -1024,8 +1025,10 @@ Policy branch: [branchName] = # Religions Choose an Icon and name for your Religion = +Choose a name for your religion = Choose a [beliefType] belief! = Found [religionName] = +Enhance [religionName] = Choose a pantheon = Found Religion = Found Pantheon = diff --git a/core/src/com/unciv/logic/automation/NextTurnAutomation.kt b/core/src/com/unciv/logic/automation/NextTurnAutomation.kt index 2379a3fac8..778ab6a5d7 100644 --- a/core/src/com/unciv/logic/automation/NextTurnAutomation.kt +++ b/core/src/com/unciv/logic/automation/NextTurnAutomation.kt @@ -330,7 +330,7 @@ object NextTurnAutomation { private fun foundReligion(civInfo: CivilizationInfo) { if (civInfo.religionManager.religionState != ReligionState.FoundingReligion) return val religionIcon = civInfo.gameInfo.ruleSet.religions - .filterNot { civInfo.gameInfo.religions.values.map { religion -> religion.iconName }.contains(it) } + .filterNot { civInfo.gameInfo.religions.values.map { religion -> religion.name }.contains(it) } .randomOrNull() ?: return // Wait what? How did we pass the checking when using a great prophet but not this? val chosenBeliefs = chooseBeliefs(civInfo, civInfo.religionManager.getBeliefsToChooseAtFounding()).toList() diff --git a/core/src/com/unciv/logic/civilization/ReligionManager.kt b/core/src/com/unciv/logic/civilization/ReligionManager.kt index a368dda5c0..be026794da 100644 --- a/core/src/com/unciv/logic/civilization/ReligionManager.kt +++ b/core/src/com/unciv/logic/civilization/ReligionManager.kt @@ -1,6 +1,5 @@ package com.unciv.logic.civilization -import com.unciv.Constants import com.unciv.logic.map.MapUnit import com.unciv.models.Religion import com.unciv.models.ruleset.Belief @@ -34,17 +33,18 @@ class ReligionManager { var religionState = ReligionState.None private set - @Transient + // These cannot be transient, as saving and loading after using a great prophet but before + // founding a religion would break :( private var foundingCityId: String? = null // Only used for keeping track of the city a prophet was used when founding a religion - @Transient private var shouldChoosePantheonBelief: Boolean = false fun clone(): ReligionManager { val clone = ReligionManager() clone.foundingCityId = foundingCityId + clone.shouldChoosePantheonBelief = shouldChoosePantheonBelief clone.storedFaith = storedFaith clone.religionState = religionState clone.greatProphetsEarned = greatProphetsEarned @@ -200,9 +200,9 @@ class ReligionManager { } - fun foundReligion(iconName: String, name: String, beliefs: List) { + fun foundReligion(displayName: String, name: String, beliefs: List) { val newReligion = Religion(name, civInfo.gameInfo, civInfo.civName) - newReligion.iconName = iconName + newReligion.displayName = displayName if (religion != null) { newReligion.followerBeliefs.addAll(religion!!.followerBeliefs) newReligion.founderBeliefs.addAll(religion!!.founderBeliefs) diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index e16d58adce..8f07f311b7 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -101,15 +101,17 @@ class MapUnit { /** * Name which should be displayed in UI - * + * * Note this is translated after being returned from this function, so let's pay * attention to combined names (renamed units, religion). */ fun displayName(): String { - val name = if (instanceName == null) name - else "$instanceName ({${name}})" - return if (religion != null) "[$name] ([$religion])" - else name + val baseName = + if (instanceName == null) "[$name]" + else "instanceName ([$name])" + + return if (religion == null) baseName + else "$baseName ([${getReligionDisplayName()}])" } var currentMovement: Float = 0f @@ -969,6 +971,11 @@ class MapUnit { return matchingUniques.any { improvement.matchesFilter(it.params[0]) || tile.matchesTerrainFilter(it.params[0]) } } + fun getReligionDisplayName(): String? { + if (religion == null) return null + return civInfo.gameInfo.religions[religion]!!.displayName ?: religion + } + fun religiousActionsUnitCanDo(): Sequence { return getMatchingUniques("Can [] [] times") .map { it.params[0] } diff --git a/core/src/com/unciv/models/Religion.kt b/core/src/com/unciv/models/Religion.kt index e41157c9a4..ed92a39498 100644 --- a/core/src/com/unciv/models/Religion.kt +++ b/core/src/com/unciv/models/Religion.kt @@ -10,7 +10,7 @@ import com.unciv.models.stats.INamed class Religion() : INamed { override lateinit var name: String - var iconName: String = "Pantheon" + var displayName: String? = null lateinit var foundingCivName: String var founderBeliefs: HashSet = hashSetOf() @@ -21,13 +21,14 @@ class Religion() : INamed { constructor(name: String, gameInfo: GameInfo, foundingCivName: String) : this() { this.name = name + this.displayName = name this.foundingCivName = foundingCivName this.gameInfo = gameInfo } fun clone(): Religion { val toReturn = Religion(name, gameInfo, foundingCivName) - toReturn.iconName = iconName + toReturn.displayName = displayName toReturn.founderBeliefs.addAll(founderBeliefs) toReturn.followerBeliefs.addAll(followerBeliefs) return toReturn @@ -37,6 +38,10 @@ class Religion() : INamed { this.gameInfo = gameInfo } + fun getIconName() = + if (isPantheon()) "Pantheon" + else name + private fun mapToExistingBeliefs(beliefs: HashSet): List { val rulesetBeliefs = gameInfo.ruleSet.beliefs return beliefs.mapNotNull { diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index 558bb2d433..d10e88be2e 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -215,7 +215,7 @@ class BaseUnit : INamed, INonPerpetualConstruction, ICivilopediaText { } override fun canBePurchasedWithStat(cityInfo: CityInfo?, stat: Stat): Boolean { - // May buy [unitFilter] units for [amount] [Stat] starting from the [eraName] at an increasing price ([amount]) + // May buy [unitFilter] units for [amount] [Stat] [cityFilter] starting from the [eraName] at an increasing price ([amount]) if (cityInfo != null && cityInfo.civInfo.getMatchingUniques("May buy [] units for [] [] [] starting from the [] at an increasing price ([])") .any { matchesFilter(it.params[0]) diff --git a/core/src/com/unciv/ui/cityscreen/CityScreenCityPickerTable.kt b/core/src/com/unciv/ui/cityscreen/CityScreenCityPickerTable.kt index 7e50fad5d9..544e1fdfb1 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreenCityPickerTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreenCityPickerTable.kt @@ -51,18 +51,16 @@ class CityScreenCityPickerTable(private val cityScreen: CityScreen) : Table() { val currentCityLabel = city.name.toLabel(fontSize = 30, fontColor = civInfo.nation.getInnerColor()) if (cityScreen.canChangeState) currentCityLabel.onClick { - val editCityNamePopup = Popup(cityScreen) - val textArea = TextField(city.name, CameraStageBaseScreen.skin) - textArea.alignment = Align.center - editCityNamePopup.add(textArea).colspan(2).row() - //editCityNamePopup.name = "CityNamePopup" // debug help - editCityNamePopup.addButtonInRow("Save", KeyCharAndCode.RETURN) { - city.name = textArea.text - cityScreen.game.setScreen(CityScreen(city)) - } - editCityNamePopup.addCloseButton("Cancel") - editCityNamePopup.keyboardFocus = textArea - editCityNamePopup.open() + AskTextPopup( + cityScreen, + label = "Please enter a new name for your city", + defaultText = city.name, + actionOnOk = { text -> + city.name = text + cityScreen.game.setScreen(CityScreen(city)) + true + } + ).open() } cityNameTable.add(currentCityLabel) diff --git a/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt b/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt index c5b3d06bcc..c1efdd7d72 100644 --- a/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt @@ -83,9 +83,11 @@ class CityStatsTable(val cityScreen: CityScreen): Table() { } private fun addReligionInfo() { - val label = cityInfo.religion.getMajorityReligion()?.iconName + val label = cityInfo.religion.getMajorityReligion()?.displayName ?: "None" - val icon = if (label == "None") "Religion" else label + val icon = + if (label == "None") "Religion" + else cityInfo.religion.getMajorityReligion()!!.name val expanderTab = ExpanderTab( title = "Majority Religion: [$label]", @@ -104,7 +106,9 @@ class CityStatsTable(val cityScreen: CityScreen): Table() { if (cityInfo.religion.religionThisIsTheHolyCityOf != null) { // I want this to be centered, but `.center()` doesn't seem to do anything, // regardless of where I place it :( - it.add("Holy city of: [${cityInfo.religion.religionThisIsTheHolyCityOf!!}]".toLabel()).center().colspan(2).pad(5f).row() + it.add( + "Holy city of: [${cityInfo.civInfo.gameInfo.religions[cityInfo.religion.religionThisIsTheHolyCityOf!!]!!.displayName}]".toLabel() + ).center().colspan(2).pad(5f).row() } it.add(getReligionsTable()).colspan(2).pad(5f) } @@ -128,7 +132,7 @@ class CityStatsTable(val cityScreen: CityScreen): Table() { for ((religion, followerCount) in followers) { religionsTable.add( - ImageGetter.getCircledReligionIcon(cityInfo.civInfo.gameInfo.religions[religion]!!.iconName, 30f) + ImageGetter.getCircledReligionIcon(cityInfo.civInfo.gameInfo.religions[religion]!!.getIconName(), 30f) ).pad(5f) religionsTable.addSeparatorVertical(gridColor) religionsTable.add(followerCount.toLabel()).pad(5f) diff --git a/core/src/com/unciv/ui/overviewscreen/ReligionOverviewTable.kt b/core/src/com/unciv/ui/overviewscreen/ReligionOverviewTable.kt index 92867f4b68..c33fc3a6e0 100644 --- a/core/src/com/unciv/ui/overviewscreen/ReligionOverviewTable.kt +++ b/core/src/com/unciv/ui/overviewscreen/ReligionOverviewTable.kt @@ -45,7 +45,7 @@ class ReligionOverviewTable( button = Button(image, CameraStageBaseScreen.skin) } else { button = Button( - ImageGetter.getCircledReligionIcon(religion.iconName, 60f), + ImageGetter.getCircledReligionIcon(religion.getIconName(), 60f), CameraStageBaseScreen.skin ) } @@ -66,13 +66,13 @@ class ReligionOverviewTable( private fun loadReligion(religion: Religion) { statsTable.clear() beliefsTable.clear() - topButtonLabel.setText(religion.name.tr()) + topButtonLabel.setText(religion.displayName!!.tr()) for (belief in religion.getAllBeliefsOrdered()) { beliefsTable.add(createBeliefDescription(belief)).pad(10f).row() } statsTable.add("Religion Name:".toLabel()) - statsTable.add(religion.name.toLabel()).pad(5f).row() + statsTable.add(religion.displayName!!.toLabel()).pad(5f).row() statsTable.add("Founding Civ:".toLabel()) val foundingCivName = if (viewingPlayer.knows(religion.foundingCivName) || viewingPlayer.civName == religion.foundingCivName) diff --git a/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt index 56d80ed465..15f2758921 100644 --- a/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt @@ -47,21 +47,34 @@ class PromotionPickerScreen(val unit: MapUnit) : PickerScreen() { val unitType = unit.type val promotionsForUnitType = unit.civInfo.gameInfo.ruleSet.unitPromotions.values.filter { - it.unitTypes.contains(unitType.name) - || unit.promotions.promotions.contains(it.name) } + it.unitTypes.contains(unitType.name) || unit.promotions.promotions.contains(it.name) + } val unitAvailablePromotions = unit.promotions.getAvailablePromotions() - if(canPromoteNow && unit.instanceName == null) { + if (canPromoteNow && unit.instanceName == null) { val renameButton = "Choose name for [${unit.name}]".toTextButton() renameButton.isEnabled = true renameButton.onClick { - RenameUnitPopup(unit, this).open() + AskTextPopup( + this, + label = "Choose name for [${unit.baseUnit.name}]", + icon = ImageGetter.getUnitIcon(unit.name).surroundWithCircle(80f), + defaultText = unit.name, + actionOnOk = { userInput -> + if (userInput == unit.name) + return@AskTextPopup false + + unit.instanceName = userInput + this.game.setScreen(PromotionPickerScreen(unit)) + return@AskTextPopup true + } + ).open() } availablePromotionsGroup.add(renameButton) availablePromotionsGroup.row() } for (promotion in promotionsForUnitType) { - if(promotion.name=="Heal Instantly" && unit.health==100) continue + if (promotion.uniqueObjects.any { it.placeholderText == "Heal this unit by [] HP" } && unit.health == 100) continue val isPromotionAvailable = promotion in unitAvailablePromotions val unitHasPromotion = unit.promotions.promotions.contains(promotion.name) diff --git a/core/src/com/unciv/ui/pickerscreens/ReligiousBeliefsPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/ReligiousBeliefsPickerScreen.kt index 8eb50f3182..04801d4670 100644 --- a/core/src/com/unciv/ui/pickerscreens/ReligiousBeliefsPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/ReligiousBeliefsPickerScreen.kt @@ -1,7 +1,9 @@ package com.unciv.ui.pickerscreens +import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.scenes.scene2d.ui.* import com.badlogic.gdx.utils.Align +import com.unciv.Constants import com.unciv.UncivGame import com.unciv.logic.GameInfo import com.unciv.logic.civilization.CivilizationInfo @@ -16,7 +18,7 @@ class ReligiousBeliefsPickerScreen ( private val choosingCiv: CivilizationInfo, private val gameInfo: GameInfo, private val beliefsContainer: BeliefContainer, - private val pickIcon: Boolean + private val pickIconAndName: Boolean ): PickerScreen(disableScroll = true) { // Roughly follows the layout of the original (although I am not very good at UI designing, so please improve this) @@ -27,14 +29,14 @@ class ReligiousBeliefsPickerScreen ( private val middlePanes = Table() private var previouslySelectedIcon: Button? = null - private var iconName: String? = null + private var displayName: String? = null private var religionName: String? = null init { closeButton.isVisible = true setDefaultCloseAction() - if (pickIcon) setupChoosableReligionIcons() + if (pickIconAndName) setupChoosableReligionIcons() else setupVisibleReligionIcons() updateLeftTable() @@ -47,25 +49,37 @@ class ReligiousBeliefsPickerScreen ( topTable.addSeparator() topTable.add(middlePanes) - rightSideButton.label = "Choose a religion".toLabel() + if (pickIconAndName) rightSideButton.label = "Choose a religion".toLabel() + else rightSideButton.label = "Enhance [${choosingCiv.religionManager.religion!!.displayName}]".toLabel() rightSideButton.onClick(UncivSound.Choir) { - choosingCiv.religionManager.chooseBeliefs(iconName, religionName, beliefsContainer.chosenBeliefs.map { it!! }) + choosingCiv.religionManager.chooseBeliefs(displayName, religionName, beliefsContainer.chosenBeliefs.map { it!! }) UncivGame.Current.setWorldScreen() } } private fun checkAndEnableRightSideButton() { - if (pickIcon && (religionName == null || iconName == null)) return + if (pickIconAndName && (religionName == null || displayName == null)) return if (beliefsContainer.chosenBeliefs.any { it == null }) return rightSideButton.enable() } - + private fun setupChoosableReligionIcons() { topReligionIcons.clear() // This should later be replaced with a user-modifiable text field, but not in this PR // Note that this would require replacing 'religion.name' with 'religion.iconName' at many spots - val descriptionLabel = "Choose an Icon and name for your Religion".toLabel() + val descriptionLabel = "Choose an Icon and name for your Religion".toLabel() + + fun changeDisplayedReligionName(newReligionName: String) { + displayName = newReligionName + rightSideButton.label = "Found [$newReligionName]".toLabel() + descriptionLabel.setText(newReligionName) + } + + val changeReligionNameButton = Button( + ImageGetter.getImage("OtherIcons/Pencil").apply { this.color = Color.BLACK }.surroundWithCircle(30f), + skin + ) val iconsTable = Table() iconsTable.align(Align.center) @@ -74,25 +88,48 @@ class ReligiousBeliefsPickerScreen ( ImageGetter.getCircledReligionIcon(religionName, 60f), skin ) - val translatedReligionName = religionName.tr() button.onClick { if (previouslySelectedIcon != null) { previouslySelectedIcon!!.enable() } - iconName = religionName - this.religionName = religionName previouslySelectedIcon = button button.disable() - descriptionLabel.setText(translatedReligionName) - rightSideButton.label = "Found [$translatedReligionName]".toLabel() checkAndEnableRightSideButton() + + changeDisplayedReligionName(religionName) + this.religionName = religionName + changeReligionNameButton.enable() } if (religionName == this.religionName || gameInfo.religions.keys.any { it == religionName }) button.disable() iconsTable.add(button).pad(5f) } iconsTable.row() - topReligionIcons.add(iconsTable).padBottom(10f).row() - topReligionIcons.add(descriptionLabel).center().padBottom(5f) + topReligionIcons.add(iconsTable).pad(5f).row() + val labelTable = Table() + labelTable.add(descriptionLabel).pad(5f) + labelTable.add(changeReligionNameButton).pad(5f).row() + topReligionIcons.add(labelTable).center().pad(5f).row() + + + changeReligionNameButton.onClick { + AskTextPopup( + this, + label = "Choose a name for your religion", + icon = ImageGetter.getCircledReligionIcon(religionName!!, 80f), + defaultText = religionName!!, + actionOnOk = { religionName -> + if (religionName == Constants.noReligionName + || gameInfo.ruleSet.religions.any { it == religionName } + || gameInfo.religions.any { it.value.name == religionName } + ) { + return@AskTextPopup false + } + changeDisplayedReligionName(religionName) + return@AskTextPopup true + } + ).open() + } + changeReligionNameButton.disable() } private fun setupVisibleReligionIcons() { @@ -178,7 +215,7 @@ class ReligiousBeliefsPickerScreen ( data class BeliefContainer(val pantheonBeliefCount: Int = 0, val founderBeliefCount: Int = 0, val followerBeliefCount: Int = 0, val enhancerBeliefCount: Int = 0) { - val chosenBeliefs: MutableList = MutableList(pantheonBeliefCount + founderBeliefCount + followerBeliefCount + enhancerBeliefCount) { null } + val chosenBeliefs: Array = Array(pantheonBeliefCount + founderBeliefCount + followerBeliefCount + enhancerBeliefCount) { null } fun getBeliefTypeFromIndex(index: Int): BeliefType { return when { diff --git a/core/src/com/unciv/ui/pickerscreens/RenameUnitPopup.kt b/core/src/com/unciv/ui/pickerscreens/RenameUnitPopup.kt deleted file mode 100644 index f3c4794cc4..0000000000 --- a/core/src/com/unciv/ui/pickerscreens/RenameUnitPopup.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.unciv.ui.pickerscreens - -import com.badlogic.gdx.scenes.scene2d.ui.Table -import com.badlogic.gdx.scenes.scene2d.ui.TextField -import com.unciv.logic.map.MapUnit -import com.unciv.ui.utils.* - -class RenameUnitPopup(unit: MapUnit, screen: CameraStageBaseScreen): Popup(screen) { - - init { - val wrapper = Table() - wrapper.add(ImageGetter.getUnitIcon(unit.name).surroundWithCircle(80f)).padRight(10f) - wrapper.add("Choose name for [${unit.baseUnit.name}]".toLabel()) - add(wrapper).colspan(2).row() - - val nameField = TextField("", skin) - // Disallowed special characters - used by tr() or simply precaution - val illegalChars = "[]{}\"\\<>" - nameField.textFieldFilter = TextField.TextFieldFilter { _, char -> char !in illegalChars} - nameField.maxLength = unit.civInfo.gameInfo.ruleSet.units.values.maxOf { it.name.length } - add(nameField).growX().colspan(2).row() - addOKButton { - if (nameField.text != "" && nameField.text != unit.name) { - unit.instanceName = nameField.text - } - screen.game.setScreen(PromotionPickerScreen(unit)) - } - addCloseButton() - equalizeLastTwoButtonWidths() - keyboardFocus = nameField - } -} \ No newline at end of file diff --git a/core/src/com/unciv/ui/tilegroups/CityButton.kt b/core/src/com/unciv/ui/tilegroups/CityButton.kt index 13cf71245b..8beb9c9f49 100644 --- a/core/src/com/unciv/ui/tilegroups/CityButton.kt +++ b/core/src/com/unciv/ui/tilegroups/CityButton.kt @@ -255,7 +255,7 @@ class CityButton(val city: CityInfo, private val tileGroup: WorldTileGroup): Tab val cityReligion = city.religion.getMajorityReligion() if (cityReligion != null) { - val religionImage = ImageGetter.getReligionImage(cityReligion.iconName) + val religionImage = ImageGetter.getReligionImage(cityReligion.getIconName()) iconTable.add(religionImage).size(20f).padLeft(5f).fillY() } diff --git a/core/src/com/unciv/ui/utils/AskTextPopup.kt b/core/src/com/unciv/ui/utils/AskTextPopup.kt new file mode 100644 index 0000000000..8402b02413 --- /dev/null +++ b/core/src/com/unciv/ui/utils/AskTextPopup.kt @@ -0,0 +1,54 @@ +package com.unciv.ui.utils + +import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.scenes.scene2d.ui.Table +import com.badlogic.gdx.scenes.scene2d.ui.TextField + +/** Simple class for showing a prompt for a string to the user + * @param screen The previous screen the user was on + * @param label A line of text shown to the user + * @param icon Icon at the top, should have size 80f + * @param defaultText The text that should be in the prompt at the start + * @param errorText Text that will be shown when an error is detected + * @param maxLength The maximal amount of characters the user may input + * @param actionOnOk Lambda that will be executed after pressing 'OK'. + * Gets the text the user inputted as a parameter. Should return `true` if ready to close, + * `false` if `errorText` is to be displayed + */ +class AskTextPopup( + screen: CameraStageBaseScreen, + label: String = "Please enter some text", + icon: IconCircleGroup = ImageGetter.getImage("OtherIcons/Pencil").apply { this.color = Color.BLACK }.surroundWithCircle(80f), + defaultText: String = "", + errorText: String = "Invalid input! Please enter a different string.", + maxLength: Int = 32, + actionOnOk: (input: String) -> Boolean = { true }, +) : Popup(screen) { + + val illegalChars = "[]{}\"\\<>" + + init { + val wrapper = Table() + wrapper.add(icon).padRight(10f) + wrapper.add(label.toLabel()) + add(wrapper).colspan(2).row() + + val nameField = TextField(defaultText, skin) + nameField.textFieldFilter = TextField.TextFieldFilter { _, char -> char !in illegalChars} + nameField.maxLength = maxLength + + add(nameField).growX().colspan(2).row() + + val errorLabel = errorText.toLabel() + errorLabel.color = Color.RED + + addOKButton(automaticallyCloseOnPress = false) { + if (nameField.text == "" || !actionOnOk(nameField.text)) + add(errorLabel).colspan(2).center() + else close() + } + addCloseButton() + equalizeLastTwoButtonWidths() + keyboardFocus = nameField + } +} diff --git a/core/src/com/unciv/ui/utils/Popup.kt b/core/src/com/unciv/ui/utils/Popup.kt index c9427d5da8..b5196dce68 100644 --- a/core/src/com/unciv/ui/utils/Popup.kt +++ b/core/src/com/unciv/ui/utils/Popup.kt @@ -142,18 +142,24 @@ open class Popup(val screen: CameraStageBaseScreen): Table(CameraStageBaseScreen } /** - * Adds a [TextButton] that closes the popup, with [RETURN][KeyCharAndCode.RETURN] already mapped. + * Adds a [TextButton] that can close the popup, with [RETURN][KeyCharAndCode.RETURN] already mapped. * @param text The button's caption, defaults to "OK". * @param additionalKey An additional key that should act like a click. + * @param automaticallyCloseOnPress Whether the popup should be closed when pressing this button. * @param action A lambda to be executed after closing the popup when the button is clicked. * @return The new [Cell], NOT marked as end of row. */ fun addOKButton( text: String = Constants.OK, additionalKey: KeyCharAndCode? = null, - action: (()->Unit) + automaticallyCloseOnPress: Boolean = true, + action: (()->Unit), ): Cell { - val okAction = { close(); action() } + val okAction = { + if (automaticallyCloseOnPress) + close() + action() + } keyPressDispatcher[KeyCharAndCode.RETURN] = okAction return addButtonInRow(text, additionalKey, okAction) } diff --git a/core/src/com/unciv/ui/utils/YesNoPopup.kt b/core/src/com/unciv/ui/utils/YesNoPopup.kt index 89235ea406..be007eb04e 100644 --- a/core/src/com/unciv/ui/utils/YesNoPopup.kt +++ b/core/src/com/unciv/ui/utils/YesNoPopup.kt @@ -24,7 +24,7 @@ open class YesNoPopup ( init { promptLabel.setAlignment(Align.center) add(promptLabel).colspan(2).row() - addOKButton(Constants.yes, KeyCharAndCode('y'), action) + addOKButton(Constants.yes, KeyCharAndCode('y'), action = action) addCloseButton(Constants.no, KeyCharAndCode('n'), restoreDefault) equalizeLastTwoButtonWidths() } diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt index f6a79935f3..35a3631a7a 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt @@ -721,7 +721,7 @@ class WorldScreen(val gameInfo: GameInfo, val viewingCiv:CivilizationInfo) : Cam viewingCiv, gameInfo, viewingCiv.religionManager.getBeliefsToChooseAtFounding(), - pickIcon = true + pickIconAndName = true )) } @@ -731,7 +731,7 @@ class WorldScreen(val gameInfo: GameInfo, val viewingCiv:CivilizationInfo) : Cam viewingCiv, gameInfo, viewingCiv.religionManager.getBeliefsToChooseAtEnhancing(), - pickIcon = false + pickIconAndName = false )) } diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt index 74729a2a79..b4f887fdf7 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt @@ -503,7 +503,7 @@ object UnitActions { if (!unit.hasUnique("May enhance a religion")) return if (!unit.civInfo.religionManager.mayEnhanceReligionAtAll(unit)) return actionList += UnitAction(UnitActionType.EnhanceReligion, - title = "Enhance [${unit.civInfo.religionManager.religion!!.name}]", + title = "Enhance [${unit.civInfo.religionManager.religion!!.displayName}]", action = getEnhanceReligionAction(unit).takeIf { unit.civInfo.religionManager.mayEnhanceReligionNow(unit) } ) } @@ -550,7 +550,7 @@ object UnitActions { && it.religion != unit.religion } actionList += UnitAction(UnitActionType.SpreadReligion, - title = "Spread [${unit.religion!!}]", + title = "Spread [${unit.getReligionDisplayName()!!}]", action = { val followersOfOtherReligions = city.religion.getFollowersOfOtherReligionsThan(unit.religion!!) for (unique in unit.getMatchingUniques("When spreading religion to a city, gain [] times the amount of followers of other religions as []")) { diff --git a/docs/Credits.md b/docs/Credits.md index c632129c6a..4ac8543077 100644 --- a/docs/Credits.md +++ b/docs/Credits.md @@ -632,6 +632,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Hourglass](https://thenounproject.com/search/?q=hourglass&i=142268) by I Create Stuff for the 'Turn' icon * [Shield](https://thenounproject.com/search/?q=shield&i=813568) by Gregor Cresnar for Religious Strength * [skill sword flame](https://thenounproject.com/term/skill-sword-flame/2360212/) by Maxicons) for Remove Heresy +* [Pencil](https://thenounproject.com/search/?q=pencil&i=4195852) by Muhamad Aldi Maulana for Enter Text Prompt Button / Pencil ## Main menu diff --git a/tests/src/com/unciv/testing/TranslationTests.kt b/tests/src/com/unciv/testing/TranslationTests.kt index 454e76edf2..de70a06554 100644 --- a/tests/src/com/unciv/testing/TranslationTests.kt +++ b/tests/src/com/unciv/testing/TranslationTests.kt @@ -48,12 +48,14 @@ class TranslationTests { fun allUnitActionsHaveTranslation() { val actions: MutableSet = HashSet() for (action in UnitActionType.values()) { - actions.add( when(action) { - UnitActionType.Upgrade -> "Upgrade to [unitType] ([goldCost] gold)" - UnitActionType.Create -> "Create [improvement]" - UnitActionType.SpreadReligion -> "Spread [religionName]" - else -> action.value - }) + actions.add( + when(action) { + UnitActionType.Upgrade -> "Upgrade to [unitType] ([goldCost] gold)" + UnitActionType.Create -> "Create [improvement]" + UnitActionType.SpreadReligion -> "Spread [religionName]" + else -> action.value + } + ) } val allUnitActionsHaveTranslation = allStringAreTranslated(actions) Assert.assertTrue("This test will only pass when there is a translation for all unit actions",