diff --git a/android/Images/OtherIcons/SecretOptions.png b/android/Images/OtherIcons/SecretOptions.png new file mode 100644 index 0000000000..e90cbe748b Binary files /dev/null and b/android/Images/OtherIcons/SecretOptions.png differ diff --git a/android/Images/OtherIcons/Settings.png b/android/Images/OtherIcons/Settings.png new file mode 100644 index 0000000000..62779eb702 Binary files /dev/null and b/android/Images/OtherIcons/Settings.png differ diff --git a/android/Images/OtherIcons/Speaker.png b/android/Images/OtherIcons/Speaker.png new file mode 100644 index 0000000000..a27379e5fa Binary files /dev/null and b/android/Images/OtherIcons/Speaker.png differ diff --git a/android/assets/ExtraImages/banner.png b/android/assets/ExtraImages/banner.png new file mode 100644 index 0000000000..bde46a549b Binary files /dev/null and b/android/assets/ExtraImages/banner.png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index 025e0e3a35..bffdadec4e 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -6,4151 +6,4186 @@ filter: MipMapLinearLinear, MipMapLinearLinear repeat: none EmojiIcons/Culture rotate: false - xy: 436, 178 + xy: 876, 1172 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Faith rotate: false - xy: 1896, 1340 + xy: 934, 1172 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Food rotate: false - xy: 818, 1016 + xy: 1108, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Gold rotate: false - xy: 494, 584 + xy: 992, 1172 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Happiness rotate: false - xy: 494, 410 + xy: 1166, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Production rotate: false - xy: 1042, 1116 + xy: 1340, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Science rotate: false - xy: 1440, 1282 + xy: 1282, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Turn rotate: false - xy: 992, 942 + xy: 1456, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ImprovementIcons/Academy rotate: false - xy: 475, 1938 + xy: 756, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Ancient ruins rotate: false - xy: 691, 1938 + xy: 972, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Barbarian encampment rotate: false - xy: 1123, 1938 + xy: 1404, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Camp rotate: false - xy: 1231, 1938 + xy: 1512, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Citadel rotate: false - xy: 1447, 1938 + xy: 1728, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City center rotate: false - xy: 4, 180 + xy: 1944, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City ruins rotate: false - xy: 1663, 1938 + xy: 4, 110 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Customs house rotate: false - xy: 1231, 1830 + xy: 1836, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Farm rotate: false - xy: 112, 828 + xy: 112, 326 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fishing Boats rotate: false - xy: 112, 504 + xy: 220, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fort rotate: false - xy: 289, 1752 + xy: 220, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Holy site rotate: false - xy: 1041, 1722 + xy: 1218, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Landmark rotate: false - xy: 946, 1614 + xy: 1758, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Lumber mill rotate: false - xy: 1054, 1506 + xy: 397, 1700 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Manufactory rotate: false - xy: 1162, 1506 + xy: 396, 1592 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Mine rotate: false - xy: 1486, 1614 + xy: 328, 1268 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Moai rotate: false - xy: 1486, 1506 + xy: 328, 1160 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Oil well rotate: false - xy: 514, 1398 + xy: 328, 188 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Pasture rotate: false - xy: 838, 1398 + xy: 436, 1160 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Plantation rotate: false - xy: 1486, 1398 + xy: 436, 512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Polder rotate: false - xy: 1594, 1398 + xy: 436, 404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Quarry rotate: false - xy: 220, 966 + xy: 612, 1614 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Road rotate: false - xy: 328, 1320 + xy: 544, 404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Terrace farm rotate: false - xy: 760, 1182 + xy: 1162, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Trading post rotate: false - xy: 652, 972 + xy: 1378, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/America rotate: false - xy: 4, 1152 + xy: 4, 1082 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Arabia rotate: false - xy: 4, 1044 + xy: 4, 974 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Austria rotate: false - xy: 4, 936 + xy: 4, 866 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Aztecs rotate: false - xy: 907, 1938 + xy: 1188, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Babylon rotate: false - xy: 4, 828 + xy: 4, 758 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/China rotate: false - xy: 1339, 1938 + xy: 1620, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/CityState rotate: false - xy: 1879, 1938 + xy: 864, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Denmark rotate: false - xy: 1447, 1830 + xy: 190, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Egypt rotate: false - xy: 112, 1260 + xy: 112, 758 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/England rotate: false - xy: 112, 1152 + xy: 112, 650 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/France rotate: false - xy: 298, 1536 + xy: 220, 440 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Germany rotate: false - xy: 406, 1536 + xy: 220, 116 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Greece rotate: false - xy: 609, 1722 + xy: 786, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Inca rotate: false - xy: 1473, 1722 + xy: 1650, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/India rotate: false - xy: 1689, 1722 + xy: 1866, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Iroquois rotate: false - xy: 1905, 1722 + xy: 786, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Japan rotate: false - xy: 622, 1614 + xy: 1110, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Korea rotate: false - xy: 838, 1614 + xy: 1542, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Mongolia rotate: false - xy: 1594, 1506 + xy: 328, 944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Persia rotate: false - xy: 1270, 1398 + xy: 436, 728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Polynesia rotate: false - xy: 1702, 1398 + xy: 436, 296 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Rome rotate: false - xy: 328, 1212 + xy: 544, 296 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Russia rotate: false - xy: 328, 1104 + xy: 544, 188 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Siam rotate: false - xy: 328, 456 + xy: 652, 858 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Songhai rotate: false - xy: 436, 1182 + xy: 652, 318 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Spain rotate: false - xy: 544, 1290 + xy: 652, 210 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Sweden rotate: false - xy: 436, 858 + xy: 946, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/The Huns rotate: false - xy: 868, 1290 + xy: 1162, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/The Netherlands rotate: false - xy: 436, 750 + xy: 1270, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/The Ottomans rotate: false - xy: 544, 858 + xy: 1270, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Aircraft rotate: false - xy: 1084, 1340 + xy: 1974, 1759 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/ArrowLeft rotate: false - xy: 1987, 1930 + xy: 760, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/ArrowRight rotate: false - xy: 760, 958 + xy: 760, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Movement rotate: false - xy: 760, 958 + xy: 760, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/BackArrow rotate: false - xy: 1142, 1340 + xy: 818, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Banner rotate: false - xy: 4, 720 + xy: 4, 650 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Border-inner rotate: false - xy: 436, 1405 + xy: 1152, 736 size: 31, 15 orig: 31, 15 offset: 0, 0 index: -1 OtherIcons/Border-outer rotate: false - xy: 475, 1405 + xy: 1152, 713 size: 31, 15 orig: 31, 15 offset: 0, 0 index: -1 OtherIcons/Camera rotate: false - xy: 1340, 1141 + xy: 156, 1301 size: 25, 25 orig: 25, 25 offset: 0, 0 index: -1 OtherIcons/Circle rotate: false - xy: 289, 1860 + xy: 4, 1334 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 OtherIcons/Cities rotate: false - xy: 4, 288 + xy: 4, 218 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Close rotate: false - xy: 190, 1446 + xy: 972, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Crosshair rotate: false - xy: 1015, 1830 + xy: 1620, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Diplomacy rotate: false - xy: 1555, 1830 + xy: 112, 1190 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DiplomacyW rotate: false - xy: 1663, 1830 + xy: 112, 1082 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DisbandUnit rotate: false - xy: 1771, 1830 + xy: 112, 974 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Down rotate: false - xy: 1606, 1340 + xy: 992, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Fire rotate: false - xy: 112, 720 + xy: 112, 218 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Hexagon rotate: false - xy: 4, 1798 + xy: 4, 1804 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 TileSets/Default/Hexagon rotate: false - xy: 4, 1798 + xy: 4, 1804 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 TileSets/FantasyHex/Hexagon rotate: false - xy: 4, 1798 + xy: 4, 1804 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 OtherIcons/Link rotate: false - xy: 494, 120 + xy: 1166, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Load rotate: false - xy: 946, 1506 + xy: 1866, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Lock rotate: false - xy: 1054, 1614 + xy: 289, 1700 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MapEditor rotate: false - xy: 1270, 1614 + xy: 298, 1484 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MenuIcon rotate: false - xy: 1378, 1506 + xy: 406, 1376 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Mods rotate: false - xy: 1594, 1614 + xy: 328, 1052 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Multiplayer rotate: false - xy: 1702, 1506 + xy: 328, 728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/New rotate: false - xy: 1810, 1506 + xy: 328, 512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Options rotate: false - xy: 622, 1398 + xy: 328, 80 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pencil rotate: false - xy: 1054, 1398 + xy: 436, 944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pentagon rotate: false - xy: 1162, 1398 + xy: 436, 836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pillage rotate: false - xy: 1378, 1398 + xy: 436, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Present rotate: false - xy: 220, 1290 + xy: 504, 1592 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Puppet rotate: false - xy: 220, 1074 + xy: 514, 1376 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Quest rotate: false - xy: 220, 858 + xy: 544, 1268 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Quickstart rotate: false - xy: 220, 750 + xy: 544, 1160 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Remove Heresy rotate: false - xy: 220, 318 + xy: 544, 728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Resume rotate: false - xy: 220, 102 + xy: 544, 512 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +OtherIcons/SecretOptions + rotate: false + xy: 622, 1398 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +OtherIcons/Settings + rotate: false + xy: 652, 1290 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Shield rotate: false - xy: 328, 672 + xy: 652, 1074 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Sleep rotate: false - xy: 436, 1290 + xy: 652, 426 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 +OtherIcons/Speaker + rotate: false + xy: 4, 1520 + size: 276, 276 + orig: 276, 276 + offset: 0, 0 + index: -1 OtherIcons/Star rotate: false - xy: 652, 1296 + xy: 4, 8 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 OtherIcons/Stop rotate: false - xy: 544, 1074 + xy: 838, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Swap rotate: false - xy: 760, 1290 + xy: 946, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Triangle rotate: false - xy: 4, 1368 + xy: 570, 1866 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 OtherIcons/Up rotate: false - xy: 1050, 942 + xy: 876, 708 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/whiteDot rotate: false - xy: 285, 1635 + xy: 2043, 1827 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 PolicyIcons/Aesthetics rotate: false - xy: 760, 1016 + xy: 720, 1664 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Aristocracy rotate: false - xy: 652, 806 + xy: 1974, 1701 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Citizenship rotate: false - xy: 436, 410 + xy: 934, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Civil Society rotate: false - xy: 1316, 1340 + xy: 760, 1114 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Collective Rule rotate: false - xy: 1374, 1340 + xy: 876, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Communism rotate: false - xy: 436, 294 + xy: 934, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Constitution rotate: false - xy: 1432, 1340 + xy: 992, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Cultural Diplomacy rotate: false - xy: 1490, 1340 + xy: 818, 1114 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Democracy rotate: false - xy: 1548, 1340 + xy: 934, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Educated Elite rotate: false - xy: 1722, 1340 + xy: 760, 998 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Fascism rotate: false - xy: 1954, 1340 + xy: 992, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Religion rotate: false - xy: 818, 900 + xy: 818, 998 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Speech rotate: false - xy: 926, 1124 + xy: 876, 1056 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Thought rotate: false - xy: 1034, 1232 + xy: 934, 1114 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Humanism rotate: false - xy: 494, 294 + xy: 818, 940 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Landed Elite rotate: false - xy: 710, 748 + xy: 1050, 1172 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Legalism rotate: false - xy: 436, 120 + xy: 1108, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mandate Of Heaven rotate: false - xy: 278, 44 + xy: 760, 824 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mercantilism rotate: false - xy: 768, 842 + xy: 934, 998 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Merchant Navy rotate: false - xy: 768, 784 + xy: 992, 1056 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Meritocracy rotate: false - xy: 826, 842 + xy: 1050, 1114 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Militarism rotate: false - xy: 826, 784 + xy: 1108, 1172 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Caste rotate: false - xy: 768, 726 + xy: 1166, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Tradition rotate: false - xy: 826, 726 + xy: 1224, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Monarchy rotate: false - xy: 131, 14 + xy: 760, 766 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Nationalism rotate: false - xy: 452, 62 + xy: 876, 882 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Naval Tradition rotate: false - xy: 394, 4 + xy: 934, 940 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Oligarchy rotate: false - xy: 452, 4 + xy: 992, 998 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Organized Religion rotate: false - xy: 510, 62 + xy: 1050, 1056 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Philantropy rotate: false - xy: 510, 4 + xy: 1108, 1114 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Planned Economy rotate: false - xy: 984, 1174 + xy: 1166, 1172 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Police State rotate: false - xy: 984, 1116 + xy: 1224, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Populism rotate: false - xy: 1042, 1174 + xy: 1282, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Professional Army rotate: false - xy: 876, 1066 + xy: 760, 708 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Protectionism rotate: false - xy: 876, 1008 + xy: 818, 766 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Reformation rotate: false - xy: 1150, 1282 + xy: 992, 940 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Representation rotate: false - xy: 1266, 1282 + xy: 1108, 1056 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Republic rotate: false - xy: 1324, 1282 + xy: 1166, 1114 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scholasticism rotate: false - xy: 1382, 1282 + xy: 1224, 1172 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scientific Revolution rotate: false - xy: 1498, 1282 + xy: 1340, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Secularism rotate: false - xy: 1614, 1282 + xy: 760, 650 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Socialism rotate: false - xy: 1788, 1282 + xy: 934, 824 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Sovereignty rotate: false - xy: 1904, 1282 + xy: 1050, 940 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Theocracy rotate: false - xy: 992, 1058 + xy: 1282, 1172 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Total War rotate: false - xy: 992, 1000 + xy: 1340, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Trade Unions rotate: false - xy: 934, 942 + xy: 1398, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/United Front rotate: false - xy: 1050, 1058 + xy: 760, 592 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Universal Suffrage rotate: false - xy: 1050, 1000 + xy: 818, 650 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Warrior Code rotate: false - xy: 1100, 1166 + xy: 992, 824 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ReligionIcons/Buddhism rotate: false - xy: 4, 612 + xy: 4, 542 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Christianity rotate: false - xy: 4, 396 + xy: 4, 326 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Confucianism rotate: false - xy: 583, 1830 + xy: 1188, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Follower rotate: false - xy: 112, 288 + xy: 220, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Founder rotate: false - xy: 285, 1644 + xy: 220, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Hinduism rotate: false - xy: 933, 1722 + xy: 1110, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Islam rotate: false - xy: 514, 1614 + xy: 894, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Judaism rotate: false - xy: 730, 1614 + xy: 1326, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Pantheon rotate: false - xy: 730, 1398 + xy: 436, 1268 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Religion rotate: false - xy: 220, 534 + xy: 544, 944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Shinto rotate: false - xy: 328, 564 + xy: 652, 966 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Sikhism rotate: false - xy: 328, 348 + xy: 652, 750 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Taoism rotate: false - xy: 544, 966 + xy: 1054, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Tengriism rotate: false - xy: 652, 1080 + xy: 1054, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ReligionIcons/Zoroastrianism rotate: false - xy: 652, 864 + xy: 1702, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Aluminum rotate: false - xy: 583, 1938 + xy: 864, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Bananas rotate: false - xy: 1015, 1938 + xy: 1296, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cattle rotate: false - xy: 4, 504 + xy: 4, 434 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Citrus rotate: false - xy: 1555, 1938 + xy: 1836, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Coal rotate: false - xy: 475, 1830 + xy: 1080, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Copper rotate: false - xy: 691, 1830 + xy: 1296, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cotton rotate: false - xy: 799, 1830 + xy: 1404, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Crab rotate: false - xy: 907, 1830 + xy: 1512, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Deer rotate: false - xy: 1339, 1830 + xy: 1944, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Dyes rotate: false - xy: 1879, 1830 + xy: 112, 866 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Fish rotate: false - xy: 112, 612 + xy: 112, 110 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Furs rotate: false - xy: 298, 1428 + xy: 220, 332 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gems rotate: false - xy: 393, 1644 + xy: 220, 224 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gold Ore rotate: false - xy: 501, 1722 + xy: 678, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Horses rotate: false - xy: 1149, 1722 + xy: 1326, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Incense rotate: false - xy: 1581, 1722 + xy: 1758, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Iron rotate: false - xy: 1797, 1722 + xy: 220, 8 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Ivory rotate: false - xy: 514, 1506 + xy: 1002, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Jewelry rotate: false - xy: 622, 1506 + xy: 1218, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Marble rotate: false - xy: 1270, 1506 + xy: 298, 1376 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Oil rotate: false - xy: 1918, 1506 + xy: 328, 296 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Pearls rotate: false - xy: 946, 1398 + xy: 436, 1052 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Porcelain rotate: false - xy: 1918, 1398 + xy: 436, 80 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Salt rotate: false - xy: 328, 996 + xy: 544, 80 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sheep rotate: false - xy: 328, 780 + xy: 652, 1182 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silk rotate: false - xy: 328, 240 + xy: 652, 642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silver rotate: false - xy: 328, 132 + xy: 652, 534 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Spices rotate: false - xy: 544, 1182 + xy: 730, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Stone rotate: false - xy: 436, 966 + xy: 730, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sugar rotate: false - xy: 652, 1188 + xy: 838, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Truffles rotate: false - xy: 760, 1074 + xy: 1378, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Uranium rotate: false - xy: 868, 1182 + xy: 1486, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Whales rotate: false - xy: 976, 1290 + xy: 1486, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wheat rotate: false - xy: 436, 642 + xy: 1594, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wine rotate: false - xy: 544, 750 + xy: 1594, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Acquire rotate: false - xy: 4, 1260 + xy: 4, 1190 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/CityConnection rotate: false - xy: 4, 72 + xy: 190, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Culture rotate: false - xy: 1123, 1830 + xy: 1728, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Faith rotate: false - xy: 112, 1044 + xy: 112, 542 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Food rotate: false - xy: 112, 180 + xy: 220, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Gold rotate: false - xy: 406, 1428 + xy: 570, 1722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Happiness rotate: false - xy: 717, 1722 + xy: 894, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/InterceptRange rotate: false - xy: 494, 178 + xy: 934, 1056 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Malcontent rotate: false - xy: 1162, 1614 + xy: 288, 1592 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Population rotate: false - xy: 1810, 1398 + xy: 436, 188 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Production rotate: false - xy: 220, 1182 + xy: 514, 1484 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Range rotate: false - xy: 876, 950 + xy: 876, 824 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/RangedStrength rotate: false - xy: 1092, 1282 + xy: 934, 882 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/ReligiousStrength rotate: false - xy: 220, 426 + xy: 544, 836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Resistance rotate: false - xy: 220, 210 + xy: 544, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Science rotate: false - xy: 328, 888 + xy: 622, 1506 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Specialist rotate: false - xy: 436, 1074 + xy: 652, 102 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Strength rotate: false - xy: 1962, 1282 + xy: 1108, 998 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 TileSets/Default/AtollOverlay rotate: false - xy: 799, 1938 + xy: 1080, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/CityOverlay rotate: false - xy: 1771, 1938 + xy: 756, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -TileSets/Default/CrosshatchHexagon - rotate: false - xy: 4, 1554 - size: 273, 236 - orig: 273, 236 - offset: 0, 0 - index: -1 -TileSets/FantasyHex/CrosshatchHexagon - rotate: false - xy: 4, 1554 - size: 273, 236 - orig: 273, 236 - offset: 0, 0 - index: -1 TileSets/Default/FalloutOverlay rotate: false - xy: 112, 936 + xy: 112, 434 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Flood plainsOverlay rotate: false - xy: 112, 396 + xy: 220, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/ForestOverlay rotate: false - xy: 112, 72 + xy: 220, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/HillOverlay rotate: false - xy: 825, 1722 + xy: 1002, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/IceOverlay rotate: false - xy: 1257, 1722 + xy: 1434, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/JungleOverlay rotate: false - xy: 730, 1506 + xy: 1434, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/LakesOverlay rotate: false - xy: 838, 1506 + xy: 1650, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/MarshOverlay rotate: false - xy: 1378, 1614 + xy: 406, 1484 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/MountainOverlay rotate: false - xy: 1702, 1614 + xy: 328, 836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/NaturalWonderOverlay rotate: false - xy: 1810, 1614 + xy: 328, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/OasisOverlay rotate: false - xy: 1918, 1614 + xy: 328, 404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Railroad rotate: false - xy: 220, 642 + xy: 544, 1052 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Railroad rotate: false - xy: 220, 642 + xy: 544, 1052 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Road rotate: false - xy: 4, 53 + xy: 1974, 1817 size: 61, 11 orig: 61, 11 offset: 0, 0 index: -1 TileSets/Default/Tiles/River-Bottom rotate: false - xy: 632, 192 + xy: 1000, 388 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/Default/Tiles/River-BottomLeft rotate: false - xy: 632, 156 + xy: 1000, 316 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/Default/Tiles/River-BottomRight rotate: false - xy: 672, 161 + xy: 1000, 244 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 +TileSets/FantasyHex/CrosshatchHexagon + rotate: false + xy: 289, 1808 + size: 273, 236 + orig: 273, 236 + offset: 0, 0 + index: -1 +TileSets/Default/CrosshatchHexagon + rotate: false + xy: 289, 1808 + size: 273, 236 + orig: 273, 236 + offset: 0, 0 + index: -1 TileSets/FantasyHex/Railroad rotate: false - xy: 397, 1820 + xy: 328, 40 size: 60, 32 orig: 60, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Road rotate: false - xy: 190, 1406 + xy: 112, 70 size: 60, 32 orig: 60, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Academy rotate: false - xy: 2012, 1354 + xy: 180, 66 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Academy-Snow rotate: false - xy: 258, 1403 + xy: 505, 1707 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Aluminum rotate: false - xy: 602, 714 + xy: 328, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins rotate: false - xy: 544, 656 + xy: 368, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Jungle rotate: false - xy: 876, 910 + xy: 1702, 1414 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Sand rotate: false - xy: 1100, 1130 + xy: 1760, 1476 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Snow rotate: false - xy: 1216, 1246 + xy: 1810, 1526 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins2 rotate: false - xy: 4, 17 + xy: 720, 1628 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Atoll rotate: false - xy: 1256, 1174 + xy: 1456, 1310 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Bananas rotate: false - xy: 1296, 1174 + xy: 818, 614 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barbarian encampment rotate: false - xy: 1336, 1210 + xy: 876, 672 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barbarian encampment-Snow rotate: false - xy: 1376, 1245 + xy: 934, 729 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barringer Crater rotate: false - xy: 1336, 1174 + xy: 992, 788 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Bison rotate: false - xy: 1496, 1246 + xy: 1554, 1368 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Bison+Camp rotate: false - xy: 1496, 1210 + xy: 760, 520 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cattle rotate: false - xy: 1936, 1246 + xy: 760, 333 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cattle+Pasture rotate: false - xy: 1976, 1242 + xy: 436, 4 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cerro de Potosi rotate: false - xy: 1416, 1174 + xy: 476, 8 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citadel rotate: false - xy: 1536, 1167 + xy: 760, 218 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citadel-Snow rotate: false - xy: 1576, 1207 + xy: 760, 180 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citrus rotate: false - xy: 1616, 1210 + xy: 556, 8 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citrus+Plantation rotate: false - xy: 1576, 1171 + xy: 760, 144 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center rotate: false - xy: 1616, 1167 + xy: 760, 101 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Ancient era rotate: false - xy: 1656, 1200 + xy: 596, 4 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Atomic era rotate: false - xy: 1696, 1204 + xy: 170, 24 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Classical era rotate: false - xy: 1736, 1206 + xy: 1890, 1522 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Future era rotate: false - xy: 1776, 1204 + xy: 1674, 1362 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Industrial era rotate: false - xy: 1816, 1205 + xy: 1974, 1602 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Information era rotate: false - xy: 1856, 1202 + xy: 1760, 1432 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Medieval era rotate: false - xy: 1896, 1206 + xy: 1224, 1038 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Modern era rotate: false - xy: 1936, 1204 + xy: 1206, 996 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Renaissance era rotate: false - xy: 1976, 1202 + xy: 1206, 956 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City ruins rotate: false - xy: 1656, 1164 + xy: 1282, 1100 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Coal rotate: false - xy: 1736, 1170 + xy: 1398, 1216 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Coast rotate: false - xy: 1776, 1168 + xy: 1456, 1274 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cocoa rotate: false - xy: 1816, 1169 + xy: 818, 578 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cocoa+Plantation rotate: false - xy: 1856, 1166 + xy: 876, 636 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Copper rotate: false - xy: 1220, 1138 + xy: 692, 66 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cotton rotate: false - xy: 1300, 1138 + xy: 1554, 1332 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Crab rotate: false - xy: 642, 712 + xy: 1594, 1332 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Customs house rotate: false - xy: 1108, 1087 + xy: 636, 23 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Deer rotate: false - xy: 1108, 1051 + xy: 676, 30 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Deer+Camp rotate: false - xy: 1148, 1094 + xy: 934, 693 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert rotate: false - xy: 1108, 1015 + xy: 1264, 1064 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert+Farm rotate: false - xy: 1148, 1058 + xy: 1264, 1028 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert+Flood plains+Farm rotate: false - xy: 1108, 979 + xy: 1322, 1122 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Dyes rotate: false - xy: 1148, 986 + xy: 1380, 1144 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Dyes+Plantation rotate: false - xy: 1148, 950 + xy: 1438, 1238 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/El Dorado rotate: false - xy: 1188, 1093 + xy: 1438, 1201 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fallout rotate: false - xy: 1188, 1050 + xy: 800, 535 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fish rotate: false - xy: 1188, 1014 + xy: 800, 499 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fishing Boats rotate: false - xy: 1188, 978 + xy: 800, 463 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Flood plains rotate: false - xy: 1228, 1102 + xy: 800, 427 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Forest rotate: false - xy: 1268, 1098 + xy: 800, 351 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fort rotate: false - xy: 1228, 1025 + xy: 800, 310 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fountain of Youth rotate: false - xy: 1268, 1058 + xy: 800, 270 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Furs rotate: false - xy: 1268, 1022 + xy: 800, 198 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Furs+Camp rotate: false - xy: 1268, 986 + xy: 800, 162 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Gems rotate: false - xy: 1308, 1102 + xy: 858, 564 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Gold Ore rotate: false - xy: 1308, 1027 + xy: 974, 676 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grand Mesa rotate: false - xy: 1308, 987 + xy: 1032, 769 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland rotate: false - xy: 1308, 951 + xy: 1090, 832 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Farm rotate: false - xy: 602, 678 + xy: 1090, 796 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Camp rotate: false - xy: 642, 673 + xy: 1496, 1293 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Deer+Camp rotate: false - xy: 682, 673 + xy: 1536, 1293 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Furs+Camp rotate: false - xy: 722, 675 + xy: 1576, 1293 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Lumber mill rotate: false - xy: 762, 687 + xy: 1616, 1293 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Truffles+Camp rotate: false - xy: 802, 687 + xy: 1246, 989 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Farm rotate: false - xy: 842, 690 + xy: 1246, 953 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Camp rotate: false - xy: 884, 874 + xy: 1496, 1257 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Lumber mill rotate: false - xy: 884, 838 + xy: 1536, 1257 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Trading post rotate: false - xy: 884, 802 + xy: 1576, 1257 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Jungle+Trading post rotate: false - xy: 884, 762 + xy: 1616, 1253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/GrasslandForest rotate: false - xy: 884, 723 + xy: 1304, 1047 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Great Barrier Reef rotate: false - xy: 1108, 907 + xy: 1362, 1069 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Hill rotate: false - xy: 1308, 839 + xy: 840, 197 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillForest+Lumber mill rotate: false - xy: 552, 620 + xy: 840, 161 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillMarbleQuarry rotate: false - xy: 552, 584 + xy: 840, 125 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillMine rotate: false - xy: 552, 548 + xy: 840, 89 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillStoneQuarry rotate: false - xy: 552, 512 + xy: 916, 657 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Holy site rotate: false - xy: 552, 468 + xy: 1656, 1284 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Horses rotate: false - xy: 552, 324 + xy: 1072, 760 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Horses+Pasture rotate: false - xy: 552, 284 + xy: 1072, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ice rotate: false - xy: 552, 175 + xy: 1558, 1221 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Incense rotate: false - xy: 802, 651 + xy: 1558, 1185 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Incense+Plantation rotate: false - xy: 842, 654 + xy: 1286, 975 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Iron rotate: false - xy: 762, 615 + xy: 1344, 997 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ivory rotate: false - xy: 842, 618 + xy: 1402, 1057 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ivory+Camp rotate: false - xy: 882, 612 + xy: 956, 640 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Jungle rotate: false - xy: 455, 1780 + xy: 1598, 1213 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Krakatoa rotate: false - xy: 1696, 1130 + xy: 1384, 1019 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Lakes rotate: false - xy: 1776, 1132 + xy: 1326, 922 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Landmark rotate: false - xy: 1896, 1125 + xy: 1054, 676 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Manufactory rotate: false - xy: 1856, 1083 + xy: 880, 502 size: 32, 39 orig: 32, 39 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Marble rotate: false - xy: 1696, 1094 + xy: 880, 430 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Marsh rotate: false - xy: 1856, 1046 + xy: 880, 357 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mine rotate: false - xy: 1896, 1017 + xy: 880, 213 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Moai rotate: false - xy: 1976, 985 + xy: 1366, 910 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mount Fuji rotate: false - xy: 1856, 1008 + xy: 1424, 1002 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mount Kailash rotate: false - xy: 1896, 977 + xy: 938, 528 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mount Sinai rotate: false - xy: 1936, 947 + xy: 978, 549 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mountain rotate: false - xy: 1976, 941 + xy: 920, 484 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oasis rotate: false - xy: 592, 426 + xy: 920, 232 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ocean rotate: false - xy: 592, 390 + xy: 920, 196 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Offshore Platform rotate: false - xy: 592, 354 + xy: 920, 160 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oil rotate: false - xy: 592, 318 + xy: 920, 124 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oil well rotate: false - xy: 592, 282 + xy: 978, 513 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Old Faithful rotate: false - xy: 592, 242 + xy: 960, 473 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Pasture rotate: false - xy: 592, 130 + xy: 960, 361 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Pearls rotate: false - xy: 672, 637 + xy: 960, 289 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains rotate: false - xy: 632, 529 + xy: 960, 145 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Farm rotate: false - xy: 672, 565 + xy: 960, 109 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Forest+Camp rotate: false - xy: 632, 489 + xy: 920, 84 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Forest+Lumber mill rotate: false - xy: 672, 525 + xy: 880, 65 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Jungle+Trading post rotate: false - xy: 632, 449 + xy: 960, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/PlainsForest rotate: false - xy: 672, 485 + xy: 920, 44 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/PlainsJungle rotate: false - xy: 632, 409 + xy: 960, 29 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation rotate: false - xy: 672, 449 + xy: 1424, 966 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation+Bananas rotate: false - xy: 632, 373 + xy: 1406, 930 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation+Cotton rotate: false - xy: 672, 413 + xy: 1406, 894 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Polder rotate: false - xy: 632, 336 + xy: 1714, 1377 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry rotate: false - xy: 672, 341 + xy: 1036, 604 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry+Marble rotate: false - xy: 632, 264 + xy: 1036, 568 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry+Stone rotate: false - xy: 672, 305 + xy: 1018, 532 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-Bottom rotate: false - xy: 672, 233 + xy: 1000, 424 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-BottomLeft rotate: false - xy: 672, 197 + xy: 1000, 352 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-BottomRight rotate: false - xy: 712, 603 + xy: 1000, 280 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Rock of Gibraltar rotate: false - xy: 712, 563 + xy: 1000, 204 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Salt rotate: false - xy: 712, 491 + xy: 1000, 132 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sheep rotate: false - xy: 712, 310 + xy: 1130, 795 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sheep+Pasture rotate: false - xy: 712, 270 + xy: 1112, 755 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silk rotate: false - xy: 712, 161 + xy: 1094, 646 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silk+Plantation rotate: false - xy: 632, 120 + xy: 1810, 1490 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silver rotate: false - xy: 672, 125 + xy: 1850, 1490 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Snow rotate: false - xy: 792, 579 + xy: 1840, 1454 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Snow+Farm rotate: false - xy: 752, 543 + xy: 1800, 1418 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Spices rotate: false - xy: 792, 543 + xy: 1880, 1448 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Spices+Plantation rotate: false - xy: 752, 471 + xy: 1880, 1412 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sri Pada rotate: false - xy: 792, 503 + xy: 1696, 1288 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Stone rotate: false - xy: 752, 435 + xy: 1696, 1252 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sugar rotate: false - xy: 752, 399 + xy: 1678, 1178 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sugar+Plantation rotate: false - xy: 792, 433 + xy: 1500, 1148 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Terrace farm rotate: false - xy: 792, 361 + xy: 1464, 1004 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Trading post rotate: false - xy: 792, 325 + xy: 1540, 1149 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Truffles rotate: false - xy: 752, 219 + xy: 1580, 1105 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Truffles+Camp rotate: false - xy: 792, 253 + xy: 1620, 1140 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra rotate: false - xy: 752, 183 + xy: 1620, 1104 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Farm rotate: false - xy: 792, 217 + xy: 1446, 930 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Camp rotate: false - xy: 752, 143 + xy: 1446, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Camp+Furs rotate: false - xy: 792, 177 + xy: 1076, 600 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Deer+Camp rotate: false - xy: 792, 137 + xy: 1076, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Lumber mill rotate: false - xy: 832, 542 + xy: 1058, 520 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Truffles+Camp rotate: false - xy: 832, 502 + xy: 1058, 480 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/TundraForest rotate: false - xy: 832, 462 + xy: 1040, 440 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Uluru rotate: false - xy: 832, 386 + xy: 1040, 364 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Uranium rotate: false - xy: 832, 350 + xy: 1040, 328 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Whales rotate: false - xy: 832, 172 + xy: 1040, 150 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Whales+Fishing Boats rotate: false - xy: 832, 136 + xy: 1040, 114 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wheat rotate: false - xy: 752, 107 + xy: 1040, 78 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wine rotate: false - xy: 792, 101 + xy: 1040, 42 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wine+Plantation rotate: false - xy: 832, 100 + xy: 1040, 6 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/TopBorder rotate: false - xy: 752, 291 + xy: 1464, 968 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/African Forest Elephant rotate: false - xy: 1987, 1835 + xy: 396, 43 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Anti-Aircraft Gun rotate: false - xy: 1140, 1130 + xy: 1926, 1584 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Anti-Tank Gun rotate: false - xy: 1216, 1210 + xy: 1166, 1020 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Archaeologist rotate: false - xy: 1256, 1246 + xy: 1224, 1078 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Archer rotate: false - xy: 1216, 1174 + xy: 1282, 1136 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Artillery rotate: false - xy: 1256, 1210 + xy: 1340, 1194 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Atlatlist rotate: false - xy: 1296, 1246 + xy: 1398, 1252 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Axe Thrower rotate: false - xy: 1296, 1210 + xy: 1514, 1368 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ballista rotate: false - xy: 1336, 1246 + xy: 760, 556 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Battering Ram rotate: false - xy: 1376, 1209 + xy: 1050, 846 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Battleship rotate: false - xy: 1416, 1246 + xy: 1108, 904 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Bazooka rotate: false - xy: 1416, 1210 + xy: 436, 44 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Berber Cavalry rotate: false - xy: 1456, 1246 + xy: 1850, 1526 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Berserker rotate: false - xy: 1456, 1210 + xy: 1166, 984 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Bowman rotate: false - xy: 1536, 1246 + xy: 476, 44 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Brute rotate: false - xy: 1536, 1210 + xy: 1166, 948 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Camel Archer rotate: false - xy: 1576, 1245 + xy: 760, 483 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cannon rotate: false - xy: 1616, 1246 + xy: 1594, 1368 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Caravan rotate: false - xy: 1656, 1240 + xy: 760, 441 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Caravel rotate: false - xy: 1696, 1246 + xy: 516, 44 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cargo Ship rotate: false - xy: 1736, 1246 + xy: 1634, 1368 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Carolean rotate: false - xy: 1776, 1246 + xy: 760, 405 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Carrier rotate: false - xy: 1816, 1246 + xy: 556, 44 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cataphract rotate: false - xy: 1856, 1246 + xy: 760, 369 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Catapult rotate: false - xy: 1896, 1246 + xy: 596, 44 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cavalry rotate: false - xy: 1376, 1173 + xy: 760, 297 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Chariot Archer rotate: false - xy: 1456, 1174 + xy: 760, 261 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Chu-Ko-Nu rotate: false - xy: 1496, 1174 + xy: 516, 8 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/CivilianLandUnit rotate: false - xy: 1696, 1168 + xy: 1340, 1158 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Comanche Rider rotate: false - xy: 1896, 1169 + xy: 992, 751 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Companion Cavalry rotate: false - xy: 1936, 1167 + xy: 1050, 809 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Composite Bowman rotate: false - xy: 1976, 1166 + xy: 1108, 868 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Conquistador rotate: false - xy: 1180, 1130 + xy: 652, 66 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cossack rotate: false - xy: 1260, 1138 + xy: 1514, 1332 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Crossbowman rotate: false - xy: 682, 712 + xy: 1634, 1332 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cruiser rotate: false - xy: 722, 714 + xy: 1674, 1328 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Destroyer rotate: false - xy: 1148, 1022 + xy: 1322, 1086 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Dromon rotate: false - xy: 1108, 943 + xy: 1380, 1180 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Foreign Legion rotate: false - xy: 1228, 1066 + xy: 800, 391 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Frigate rotate: false - xy: 1228, 989 + xy: 800, 234 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Galleass rotate: false - xy: 1188, 942 + xy: 800, 126 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Galley rotate: false - xy: 1228, 953 + xy: 800, 90 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Gatling Gun rotate: false - xy: 1268, 950 + xy: 858, 600 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Giant Death Robot rotate: false - xy: 1308, 1063 + xy: 974, 712 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Admiral rotate: false - xy: 882, 684 + xy: 1362, 1105 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Artist rotate: false - xy: 1148, 914 + xy: 1304, 1011 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Engineer rotate: false - xy: 1188, 906 + xy: 1420, 1165 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Galleass rotate: false - xy: 1228, 917 + xy: 1420, 1129 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great General rotate: false - xy: 1268, 911 + xy: 840, 525 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Merchant rotate: false - xy: 1308, 915 + xy: 840, 489 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Musician rotate: false - xy: 1228, 881 + xy: 840, 453 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Prophet rotate: false - xy: 1268, 875 + xy: 840, 417 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Scientist rotate: false - xy: 1308, 879 + xy: 840, 381 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great War Infantry rotate: false - xy: 1148, 878 + xy: 840, 345 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Writer rotate: false - xy: 1188, 870 + xy: 840, 309 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hakkapeliitta rotate: false - xy: 1228, 845 + xy: 840, 273 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Helicopter Gunship rotate: false - xy: 1268, 839 + xy: 840, 237 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hoplite rotate: false - xy: 552, 432 + xy: 1656, 1248 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Horse Archer rotate: false - xy: 552, 396 + xy: 916, 621 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Horseman rotate: false - xy: 552, 360 + xy: 1032, 733 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hussar rotate: false - xy: 552, 247 + xy: 1478, 1220 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hwach'a rotate: false - xy: 552, 211 + xy: 1518, 1221 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Immortal rotate: false - xy: 552, 139 + xy: 1478, 1184 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Impi rotate: false - xy: 762, 651 + xy: 1518, 1185 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Infantry rotate: false - xy: 882, 648 + xy: 1286, 939 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Inquisitor rotate: false - xy: 722, 639 + xy: 1344, 1033 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ironclad rotate: false - xy: 802, 615 + xy: 1402, 1093 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Jaguar rotate: false - xy: 842, 582 + xy: 956, 604 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Janissary rotate: false - xy: 882, 576 + xy: 1014, 697 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Keshik rotate: false - xy: 1576, 1135 + xy: 1598, 1177 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Khan rotate: false - xy: 1616, 1128 + xy: 1326, 958 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Knight rotate: false - xy: 1656, 1128 + xy: 1014, 661 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Kris Swordsman rotate: false - xy: 1736, 1134 + xy: 1384, 983 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Lancer rotate: false - xy: 1816, 1133 + xy: 898, 585 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/LandUnit rotate: false - xy: 1856, 1130 + xy: 898, 549 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Landship rotate: false - xy: 1936, 1131 + xy: 1638, 1212 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Landsknecht rotate: false - xy: 1976, 1130 + xy: 1638, 1176 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Legion rotate: false - xy: 1936, 1095 + xy: 1460, 1148 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Longbowman rotate: false - xy: 1976, 1094 + xy: 1460, 1112 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Longswordsman rotate: false - xy: 1736, 1098 + xy: 996, 625 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Machine Gun rotate: false - xy: 1776, 1096 + xy: 996, 589 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mandekalu Cavalry rotate: false - xy: 1816, 1097 + xy: 1366, 947 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Maori Warrior rotate: false - xy: 1896, 1089 + xy: 880, 466 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Marine rotate: false - xy: 1816, 1061 + xy: 880, 394 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mechanized Infantry rotate: false - xy: 1896, 1053 + xy: 880, 321 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mehal Sefari rotate: false - xy: 1936, 1059 + xy: 880, 285 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Merchant Of Venice rotate: false - xy: 1976, 1058 + xy: 880, 249 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Minuteman rotate: false - xy: 1936, 1023 + xy: 880, 177 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Missile Cruiser rotate: false - xy: 1976, 1022 + xy: 880, 141 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Missionary rotate: false - xy: 1936, 987 + xy: 880, 105 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mobile SAM rotate: false - xy: 1736, 1062 + xy: 1442, 1076 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Modern Armor rotate: false - xy: 1776, 1060 + xy: 1442, 1040 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mohawk Warrior rotate: false - xy: 1816, 1025 + xy: 938, 568 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Musketeer rotate: false - xy: 592, 642 + xy: 920, 448 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Musketman rotate: false - xy: 592, 606 + xy: 920, 412 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Naresuan's Elephant rotate: false - xy: 592, 570 + xy: 920, 376 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Nau rotate: false - xy: 592, 534 + xy: 920, 340 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Norwegian Ski Infantry rotate: false - xy: 592, 498 + xy: 920, 304 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Nuclear Submarine rotate: false - xy: 592, 462 + xy: 920, 268 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Panzer rotate: false - xy: 592, 206 + xy: 960, 437 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Paratrooper rotate: false - xy: 592, 170 + xy: 960, 401 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pathfinder rotate: false - xy: 632, 637 + xy: 960, 325 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Persian Immortal rotate: false - xy: 632, 601 + xy: 960, 253 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pictish Warrior rotate: false - xy: 632, 565 + xy: 960, 217 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pikeman rotate: false - xy: 672, 601 + xy: 960, 181 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pracinha rotate: false - xy: 672, 377 + xy: 1714, 1341 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Privateer rotate: false - xy: 632, 300 + xy: 1054, 640 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Quinquereme rotate: false - xy: 632, 228 + xy: 1018, 496 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Rifleman rotate: false - xy: 672, 269 + xy: 1000, 460 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Rocket Artillery rotate: false - xy: 712, 527 + xy: 1000, 168 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Samurai rotate: false - xy: 712, 455 + xy: 1000, 96 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Scout rotate: false - xy: 712, 419 + xy: 1000, 60 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Sea Beggar rotate: false - xy: 712, 383 + xy: 1000, 24 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Settler rotate: false - xy: 712, 346 + xy: 1130, 831 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ship Of The Line rotate: false - xy: 712, 233 + xy: 1112, 718 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ship of the Line rotate: false - xy: 712, 233 + xy: 1112, 718 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Siege Tower rotate: false - xy: 712, 197 + xy: 1094, 682 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Sipahi rotate: false - xy: 712, 123 + xy: 1890, 1484 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Slinger rotate: false - xy: 752, 579 + xy: 1800, 1454 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Spearman rotate: false - xy: 752, 507 + xy: 1840, 1418 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Submarine rotate: false - xy: 792, 469 + xy: 1678, 1214 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Swordsman rotate: false - xy: 752, 363 + xy: 1500, 1112 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Tank rotate: false - xy: 792, 397 + xy: 1482, 1076 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Tercio rotate: false - xy: 752, 327 + xy: 1482, 1040 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Trebuchet rotate: false - xy: 752, 255 + xy: 1540, 1113 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Trireme rotate: false - xy: 792, 289 + xy: 1580, 1141 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Turtle Ship rotate: false - xy: 832, 426 + xy: 1040, 404 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/War Chariot rotate: false - xy: 832, 314 + xy: 1040, 292 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/War Elephant rotate: false - xy: 832, 278 + xy: 1040, 256 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Warrior rotate: false - xy: 832, 242 + xy: 1040, 220 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/WaterUnit rotate: false - xy: 832, 208 + xy: 1040, 186 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Winged Hussar rotate: false - xy: 872, 540 + xy: 1148, 904 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Work Boats rotate: false - xy: 872, 504 + xy: 1148, 868 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Worker rotate: false - xy: 872, 468 + xy: 1152, 759 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 +TileSets/FantasyHex/bak/Railroad + rotate: false + xy: 4, 1298 + size: 144, 28 + orig: 144, 28 + offset: 0, 0 + index: -1 +TileSets/FantasyHex/bak/road + rotate: false + xy: 570, 1830 + size: 144, 28 + orig: 144, 28 + offset: 0, 0 + index: -1 UnitPromotionIcons/Accuracy rotate: false - xy: 1987, 1988 + xy: 505, 1750 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Air Repair rotate: false - xy: 868, 1124 + xy: 1702, 1454 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Air Targeting rotate: false - xy: 976, 1232 + xy: 1810, 1562 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting rotate: false - xy: 976, 1232 + xy: 1810, 1562 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Ambush rotate: false - xy: 436, 584 + xy: 112, 12 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Anti-Armor rotate: false - xy: 436, 584 + xy: 112, 12 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Amphibious rotate: false - xy: 544, 692 + xy: 1868, 1562 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Armor Plating rotate: false - xy: 397, 1762 + xy: 1974, 1643 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage rotate: false - xy: 436, 526 + xy: 760, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Besiege rotate: false - xy: 1987, 1872 + xy: 818, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Siege rotate: false - xy: 1987, 1872 + xy: 818, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Blitz rotate: false - xy: 760, 900 + xy: 876, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding Party rotate: false - xy: 1200, 1340 + xy: 760, 1172 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment rotate: false - xy: 436, 468 + xy: 818, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Charge rotate: false - xy: 1258, 1340 + xy: 876, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal Raider rotate: false - xy: 436, 352 + xy: 818, 1172 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Cover rotate: false - xy: 436, 236 + xy: 760, 1056 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Discipline rotate: false - xy: 436, 236 + xy: 760, 1056 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Drill rotate: false - xy: 1664, 1340 + xy: 1050, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Evasion rotate: false - xy: 1780, 1340 + xy: 818, 1056 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Extended Range rotate: false - xy: 1838, 1340 + xy: 876, 1114 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Operational Range rotate: false - xy: 1838, 1340 + xy: 876, 1114 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Flight Deck rotate: false - xy: 652, 748 + xy: 1050, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Formation rotate: false - xy: 818, 958 + xy: 760, 940 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Great Generals rotate: false - xy: 494, 526 + xy: 1050, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Quick Study rotate: false - xy: 494, 526 + xy: 1050, 1230 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Haka War Dance rotate: false - xy: 494, 468 + xy: 1108, 1288 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Heal Instantly rotate: false - xy: 494, 352 + xy: 760, 882 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Ignore terrain cost rotate: false - xy: 1365, 1722 + xy: 1542, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitPromotionIcons/Indirect Fire rotate: false - xy: 494, 236 + xy: 876, 998 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Interception rotate: false - xy: 710, 806 + xy: 992, 1114 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Logistics rotate: false - xy: 220, 44 + xy: 1224, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/March rotate: false - xy: 336, 74 + xy: 818, 882 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Medic rotate: false - xy: 336, 16 + xy: 876, 940 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Mobility rotate: false - xy: 73, 14 + xy: 1282, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Morale rotate: false - xy: 394, 62 + xy: 818, 824 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Rejuvenation rotate: false - xy: 1208, 1282 + xy: 1050, 998 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting rotate: false - xy: 1556, 1282 + xy: 1398, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sentry rotate: false - xy: 1556, 1282 + xy: 1398, 1346 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Shock rotate: false - xy: 1672, 1282 + xy: 818, 708 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Slinger Withdraw rotate: false - xy: 1730, 1282 + xy: 876, 766 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sortie rotate: false - xy: 1846, 1282 + xy: 992, 882 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Supply rotate: false - xy: 934, 1058 + xy: 1166, 1056 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Survivalism rotate: false - xy: 934, 1000 + xy: 1224, 1114 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Volley rotate: false - xy: 1100, 1224 + xy: 934, 766 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Wolfpack rotate: false - xy: 1158, 1224 + xy: 1050, 882 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Woodsman rotate: false - xy: 1158, 1166 + xy: 1108, 940 size: 50, 50 orig: 50, 50 offset: 0, 0 diff --git a/android/assets/game.png b/android/assets/game.png index aa70c4753e..4eeaa24361 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/translations/German.properties b/android/assets/jsons/translations/German.properties index f4a8f84a90..86964c39e9 100644 --- a/android/assets/jsons/translations/German.properties +++ b/android/assets/jsons/translations/German.properties @@ -1,6 +1,6 @@ - -# Tutorial tasks - + +# Tutorial tasks + Move a unit!\nClick on a unit > Click on a destination > Click the arrow popup = Eine Einheit bewegen!\nKlicke auf eine Einheit > Klicke auf ein Ziel > Klicke auf das Pfeil-Popup. Found a city!\nSelect the Settler (flag unit) > Click on 'Found city' (bottom-left corner) = Eine Stadt gründen!\nWähle den Siedler (Flaggensymbol) > Klicke auf 'Stadt gründen' (unten links). Enter the city screen!\nClick the city button twice = Öffne den Stadtbildschirm!\n Klicke zweimal den Stadtknopf. @@ -15,24 +15,24 @@ Create a trade route!\nConstruct roads between your capital and another city\nOr Conquer a city!\nBring an enemy city down to low health > \nEnter the city with a melee unit = Erobere eine Stadt!\nBringe eine feindliche Stadt auf wenig Leben > \nBetrete die Stadt mit einer Nahkampfeinheit. Move an air unit!\nSelect an air unit > select another city within range > \nMove the unit to the other city = Bewege eine Lufteinheit!\nWähle eine Lufteinheit > Wähle eine andere Stadt in Reichweite > \nVerschiebe die Einheit zu der anderen Stadt. See your stats breakdown!\nEnter the Overview screen (top right corner) >\nClick on 'Stats' = Schaue deine Statistiken an!\nGehe in den Übersichtsbildschirm (obere rechte Ecke) >\nKlicke auf 'Statistiken'. - + Oh no! It looks like something went DISASTROUSLY wrong! This is ABSOLUTELY not supposed to happen! Please send me (yairm210@hotmail.com) an email with the game information (menu -> save game -> copy game info -> paste into email) and I'll try to fix it as fast as I can! = Oh nein! Sieht aus, als wäre etwas katastrophal schief gelaufen! Das darf auf keinen Fall passieren! Bitte sende mir (yairm210@hotmail.com) eine Email mit den Spielinformationen (Menü -> Spiel speichern -> Spielinfo kopieren -> in Email einfügen) und ich werde versuchen, es so schnell wie möglich zu beheben! Oh no! It looks like something went DISASTROUSLY wrong! This is ABSOLUTELY not supposed to happen! Please send us an report and we'll try to fix it as fast as we can! = Oh nein! Sieht aus, als wäre etwas katastrophal schief gelaufen! Das darf auf keinen Fall passieren! Bitte sende uns einen Bericht und wir werden versuchen, es so schnell wie möglich zu beheben! - -# Buildings - + +# Buildings + Unsellable = Unverkäuflich Not displayed as an available construction unless [building] is built = Wird nicht als verfügbares Bauwerk angezeigt, bis [building] gebaut ist Not displayed as an available construction without [resource] = Wird nicht als verfügbares Bauwerk angezeigt, solange [resource] fehlt - + Choose a free great person = Wähle eine kostenlose Große Persönlichkeit Get [unitName] = Erhalte [unitName] - + Hydro Plant = Wasserkraftwerk [buildingName] obsoleted = [buildingName] ist nun veraltet - -# Diplomacy,Trade,Nations - + +# Diplomacy,Trade,Nations + Requires [buildingName] to be built in the city = Benötigt den Bau von [buildingName] in der Stadt Requires [buildingName] to be built in all cities = Benötigt den Bau von [buildingName] in allen Städten Provides a free [buildingName] in the city = Stellt das Gebäude [buildingName] in der Stadt kostenlos bereit @@ -50,12 +50,12 @@ Requires [PolicyOrNationalWonder] = Benötigt [PolicyOrNationalWonder] Cannot be purchased = Kann nicht gekauft werden Can only be purchased = Kann nur gekauft werden See also = Siehe auch - + Requires at least one of the following: = Benötigt eine der folgenden Vorraussetzungen: Requires all of the following: = Benötigt folgende Vorraussetzungen: Leads to [techName] = [techName] kann nun erforscht werden Leads to: = Ermöglicht die Erforschung von: - + Current construction = Aktuelle Produktion Construction queue = Produktionswarteschlange Pick a construction = Wähle ein Bauwerk @@ -66,7 +66,7 @@ Show stats drilldown = Zeige Statistiken Show construction queue = Zeige Produktionswarteschlange Save = Speichern Cancel = Abbrechen - + Diplomacy = Diplomatie War = Krieg Peace = Frieden @@ -94,7 +94,7 @@ Indeed! = Auf jeden Fall! Denounce [civName]? = [civName] anprangern? Denounce ([numberOfTurns] turns) = Anprangern ([numberOfTurns] Runden) We will remember this. = Das werden wir nie vergessen! - + [civName] has declared war on [targetCivName]! = [civName] hat [targetCivName] den Krieg erklärt! [civName] and [targetCivName] have signed a Peace Treaty! = [civName] und [targetCivName] haben einen Friedensvertrag unterzeichnet! [civName] and [targetCivName] have signed the Declaration of Friendship! = [civName] und [targetCivName] haben die Freundschaftserklärung unterzeichnet! @@ -102,7 +102,7 @@ We will remember this. = Das werden wir nie vergessen! Do you want to break your promise to [leaderName]? = Möchtest du dein Versprechen gegenüber [leaderName] brechen? We promised not to settle near them ([count] turns remaining) = Wir haben versprochen, nicht in ihrer Nähe zu siedeln ([count] Runden verbleiben) They promised not to settle near us ([count] turns remaining) = Sie haben versprochen, nicht in unserer Nähe zu siedeln ([count] Runden verbleiben) - + Unforgivable = Todfeind Afraid = Gefürchtet Enemy = Feind @@ -111,12 +111,12 @@ Neutral = Neutral Favorable = Beliebt Friend = Freund Ally = Verbündeter - + [questName] (+[influenceAmount] influence) = [questName] (+[influenceAmount] Einfluss) [remainingTurns] turns remaining = [remainingTurns] Runden verbleiben - -## Diplomatic modifiers - + +## Diplomatic modifiers + You declared war on us! = Ihr habt uns den Krieg erklärt! Your warmongering ways are unacceptable to us. = Euer kriegerisches Verhalten ist für uns inakzeptabel. You have captured our cities! = Ihr habt unsere Städte erobert! @@ -139,15 +139,15 @@ Your arrogant demands are in bad taste = Eure arroganten Forderungen sind geschm Your use of nuclear weapons is disgusting! = Euer Einsatz von Atomwaffen ist ekelhaft! You have stolen our lands! = Ihr habt unser Land geraubt! You gave us units! = Ihr habt uns Einheiten geschenkt! - + Demands = Forderungen Please don't settle new cities near us. = Bitte gründet keine neuen Städte in unserer Nähe. Very well, we shall look for new lands to settle. = Nun gut, wir werden uns nach neuem Land umsehen, um es zu besiedeln. We shall do as we please. = Wir werden tun, wie es uns beliebt. We noticed your new city near our borders, despite your promise. This will have....implications. = Wir haben eure neue Stadt in der Nähe unserer Grenzen bemerkt, entgegen eures Versprechens. Dies wird....Konsequenzen haben. - -# City-States - + +# City-States + Provides [amountOfCulture] culture at 30 Influence = Liefert [amountOfCulture] Kultur ab einem Einfluss von 30 Provides 3 food in capital and 1 food in other cities at 30 Influence = Liefert 3 Nahrung in die Hauptstadt und 1 Nahrung in alle anderen Städte ab einem Einfluss von 30 Provides 3 happiness at 30 Influence = Liefert 3 Zufriedenheit ab einem Einfluss von 30 @@ -203,7 +203,7 @@ Take worker (-50 Influence) = Arbeiter nehmen (-50 Einfluss) [civName] is afraid of your military power! = [civName] fürchtet sich vor deiner militärischen Macht! -# Trades +# Trades Trade = Handel Offer trade = Handel anbieten @@ -231,17 +231,17 @@ Declare war on [nation] = [nation] den Krieg erklären Luxury resources = Luxusressourcen Strategic resources = Strategische Ressourcen Owned: [amountOwned] = Im Besitz: [amountOwned] - -# Nation picker - + +# Nation picker + [resourceName] not required = [resourceName] nicht erforderlich Lost ability = Verlorene Fähigkeit National ability = Nationalfähigkeit [firstValue] vs [secondValue] = [firstValue] anstatt [secondValue] - - -# New game screen - + + +# New game screen + Uniques = Unikate Promotions = Beförderungen Load copied data = Aus Zwischenablage laden @@ -305,9 +305,9 @@ World wrap requires a minimum width of 32 tiles = 'World Wrap' Karten müssen mi The provided map dimensions were too small = Die angegebenen Dimensionen waren zu klein The provided map dimensions were too big = Die angegebenen Dimensionen waren zu groß The provided map dimensions had an unacceptable aspect ratio = Die angegebenen Dimensionen hatten ein zu extremes Seitenverhältnis - + Difficulty = Schwierigkeitsgrad - + AI = KI Remove = Entfernen Random = Zufall @@ -315,14 +315,14 @@ Human = Mensch Hotseat = Schleudersitz User ID = Spieler-ID Click to copy = Anklicken zum Kopieren - - + + Game Speed = Spielgeschwindigkeit Quick = Schnell Standard = Standard Epic = Episch Marathon = Marathon - + Starting Era = Startzeitalter It looks like we can't make a map with the parameters you requested! = Mit den von dir angegebenen Parametern kann keine Karte erzeugt werden! Maybe you put too many players into too small a map? = Vielleicht hast du zu viele Spieler in eine zu kleine Karte gepackt? @@ -339,14 +339,14 @@ Base Ruleset = Basisregelsatz [amount] Improvements = [amount] Feldverbesserungen [amount] Religions = [amount] Religionen [amount] Beliefs = [amount] Glaubenssätze - + World Wrap = World Wrap World wrap maps are very memory intensive - creating large world wrap maps on Android can lead to crashes! = 'World Wrap' Karten verbrauchen sehr viel Speicher - Das erstellen von großen 'World Wrap' Karten kann bei Android zu einem Absturz führen! Anything above 80 by 50 may work very slowly on Android! = Auf Android kann alles über 80 mal 50 sehr langsam sein. Anything above 40 may work very slowly on Android! = Auf Android kann alles über 40 sehr langsam sein. - -# Multiplayer - + +# Multiplayer + Username = Spielername Multiplayer = Mehrspieler Could not download game! = Konnte das Spiel nicht herunterladen! @@ -382,9 +382,9 @@ Resign = Aufgeben Are you sure you want to resign? = Willst du wirklich aufgeben? You can only resign if it's your turn = Du kannst nur aufgeben, wenn du am Zug bist [civName] resigned and is now controlled by AI = [civName] hat aufgegeben und wird nun von der KI gespielt - -# Save game menu - + +# Save game menu + Current saves = Gespeicherte Spiele Show autosaves = Zeige automatisch gespeicherte Spiele an Saved game name = Name des gespeicherten Spiels @@ -411,13 +411,21 @@ Load from custom location = Laden von externem Speicherort Could not load game from custom location! = Laden von externem Speicherort fehlgeschlagen! Save to custom location = Speichern in externem Speicherort Could not save game to custom location! = Speichern in externem Speicherort fehlgeschlagen! - -# Options - + +# Options + Options = Optionen -Display options = Anzeigeeinstellungen -Gameplay options = Spielmechanikeinstellungen -Other options = Andere Einstellungen +About = Über +Display = Anzeige +Gameplay = Spielmechanik +Sound = Sound +Multiplayer = Mehrspieler +Advanced = Erweitert +Locate mod errors = Mod-Probleme +Debug = Nur für Eingeweihte + +See online Readme = Readme online öffnen +Visit repository = Repository der Entwickler besuchen Turns between autosaves = Runden bis zum nächsten automatischen Speichern Sound effects volume = Lautstärke Soundeffekte Music volume = Lautstärke Musik @@ -444,16 +452,18 @@ Show tile yields = Felderträge anzeigen Continuous rendering = Kontinuierliches Rendern When disabled, saves battery life but certain animations will be suspended = Es spart Akku, wenn es deaktiviert ist, aber bestimmte Animationen werden nicht angezeigt. Order trade offers by amount = Handelsangebote nach Menge sortieren +Check extension mods based on vanilla = Erweiterungs-Mods mit Vanilla-Regelsatz prüfen +Checking mods for errors... = Mods werden geprüft... Show experimental world wrap for maps = 'World Wrap'-Option für neue Karten anbieten HIGHLY EXPERIMENTAL - YOU HAVE BEEN WARNED! = WARNUNG: HOCHGRADIG EXPERIMENTELL - DU WURDEST GEWARNT! HIGHLY EXPERIMENTAL - UPDATES WILL BREAK SAVES! = WARNUNG: HOCHGRADIG EXPERIMENTELL - UPDATES WERDEN SPEICHERSTÄNDE ZERSTÖREN! Enable portrait orientation = Hochkant-Orientierung zulassen Generate translation files = Erstelle Übersetzungsdateien Translation files are generated successfully. = Die Übersetzungsdateien wurden erfolgreich erstellt. -Locate mod errors = Mod-Fehler lokalisieren - -# Notifications - +Please note that translations are a community-based work in progress and are INCOMPLETE! The percentage shown is how much of the language is translated in-game. If you want to help translating the game into your language, click here. = Bitte beachte, daß die Übersetzungen eine andauernde Leistung einer Gemeinschaft von Freiwilligen sind und damit oft unvollständig. Die angezeigte Prozentzahl bedeutet den Anteil übersetzter Texte im gesamten Spiel. Wenn Du helfen willst, die Übersetzungen zu verbessern - dies ist ein Link zur Anleitung. + +# Notifications + Research of [technologyName] has completed! = [technologyName] wurde erforscht! [construction] has become obsolete and was removed from the queue in [cityName]! = [construction] ist veraltet und wurde in [cityName] aus der Warteschlange entfernt! [construction] has become obsolete and was removed from the queue in [amount] cities! = [construction] ist veraltet und wurde in [amount] Städten aus der Warteschlange entfernt! @@ -466,7 +476,7 @@ You have entered a Golden Age! = Ein Goldenes Zeitalter hat begonnen! A [greatPerson] has been born in [cityName]! = [cityName] - Ein [greatPerson] wurde geboren! We have encountered [civName]! = Wir sind auf [civName] getroffen! [cityStateName] has given us [stats] as a token of goodwill for meeting us = [cityStateName] hat uns [stats] als Zeichen des guten Willens für unsere Begegnung übergeben -[cityStateName] has given us [stats] as we are the first major civ to meet them = [cityStateName] hat uns [stats] übergeben, da wir die erste bedeutende Zivilisation sind, die er getroffen hat +[cityStateName] has given us [stats] as we are the first major civ to meet them = [cityStateName] hat uns [stats] übergeben, da wir die erste bedeutende Zivilisation sind, die sie getroffen haben Cannot provide unit upkeep for [unitName] - unit has been disbanded! = Der Unterhalt für [unitName] konnte nicht bezahlt werden - Einheit wurde aufgelöst! [cityName] has grown! = [cityName] ist gewachsen! [cityName] is starving! = [cityName] verhungert! @@ -563,8 +573,8 @@ Your city [cityName] was converted to [religionName]! = Deine Stadt [cityName] k Your [unitName] lost its faith after spending too long inside enemy territory! = Deine [unitName] Einheit hat ihren Glauben verloren, nachdem sie zu lange in feindlichem Gebiet war! -# World Screen UI - +# World Screen UI + Working... = Bitte warten... Waiting for other players... = Warte auf andere Spieler... in = in @@ -617,7 +627,7 @@ Yes = Ja No = Nein Acquire = Übernehmen Under construction = Im Bau - + Food = Nahrung Production = Produktion Gold = Gold @@ -625,7 +635,7 @@ Happiness = Zufriedenheit Culture = Kultur Science = Wissenschaft Faith = Glaube - + Crop Yield = Ernteertrag Territory = Territorium Force = Kampfkraft @@ -634,7 +644,7 @@ Golden Age = Goldenes Zeitalter [year] BC = [year] v. Chr. [year] AD = [year] n. Chr. Civilopedia = Civilopedia - + Start new game = Neues Spiel Save game = Spiel speichern Load game = Spiel laden @@ -650,9 +660,9 @@ Close = Schließen Do you want to exit the game? = Willst du das Spiel beenden? Start bias: = Start-Präferenz: Avoid [terrain] = Meide [terrain] - + # City screen - + Exit city = Stadt verlassen Raze city = Stadt niederreißen Stop razing city = Niederreißen der Stadt stoppen @@ -704,9 +714,9 @@ Move to city = Zur Stadt bewegen Invalid input! Please enter a different string. = # Requires translation! Please enter some text = - + # Technology UI - + Pick a tech = Technologie auswählen Pick a free tech = Kostenlose Technologie auswählen Research [technology] = [technology] erforschen @@ -729,9 +739,9 @@ Attack = Angreifen Bombard = Bombardieren NUKE = Atomisieren Captured! = Gefangen! - + # Battle modifier categories - + defence vs ranged = Verteidigung gegen Fernkampf [percentage] to unit defence = [percentage] erhöhte Verteidigungsstärke Attacker Bonus = Angriffsbonus @@ -753,11 +763,11 @@ defence vs [unitType] = Verteidigung gegen [unitType] [tileFilter] defence = [tileFilter] Verteidigung Defensive Bonus = Verteidigungsbonus Stacked with [unitType] = Auf gleichem Feld mit [unitType] - + The following improvements [stats]: = Die folgenden Verbesserungen [stats]: The following improvements on [tileType] tiles [stats]: = Die folgenden Verbesserungen auf [tileType] Feldern [stats]: - - + + Hurry Research = Forschung beschleunigen Conduct Trade Mission = Handelsmission durchführen Your trade mission to [civName] has earned you [goldAmount] gold and [influenceAmount] influence! = Deine Handelsmission zu [civName] hat dir [goldAmount] Gold und [influenceAmount] Einfluss eingebracht! @@ -780,9 +790,9 @@ Policies = Politiken Base happiness = Grundzufriedenheit Occupied City = Besetzte Städte Buildings = Gebäude - + # terrainFilters (so for uniques like: "[stats] from [terrainFilter] tiles") - + All = Alle Water = Wasser Land = Land @@ -800,14 +810,14 @@ Strategic resource = Strategische Ressource Fresh water = Frischwasser non-fresh water = nicht frisches Wasser Natural Wonder = Naturwunder - -# improvementFilters - + +# improvementFilters + All Road = Alle Straßen Great Improvement = Große Verbesserung Great = Große - - + + Wonders = Wunder Base values = Grundwerte Bonuses = Boni @@ -833,9 +843,9 @@ Known and defeated ([numberOfCivs]) = Bekannt und besiegt ([numberOfCivs]) Tiles = Felder Natural Wonders = Naturwunder Treasury deficit = Schatzkammerdefizit - -# Victory - + +# Victory + Science victory = Wissenschaftssieg Cultural victory = Kultursieg Conquest victory = Dominanzsieg @@ -874,9 +884,9 @@ Vote for [civilizationName] = Abstimmen für [civilizationName] Continue = Fortfahren Abstained = Enthalten Vote for World Leader = Stimme für den Anführer der Welt ab - + # Capturing a city - + What would you like to do with the city? = Was möchtet Ihr mit dieser Stadt machen? Annex = Annektieren Annexed cities become part of your regular empire. = Annektierte Städte werden Teil Eures Reichs @@ -896,14 +906,14 @@ Destroying the city instantly razes the city to the ground. = Zerstören macht d Remove your troops in our border immediately! = Entferne sofort deine Truppen aus unserem Gebiet! Sorry. = Entschuldigung. Never! = Niemals! - + Offer Declaration of Friendship ([30] turns) = Freundschaftserklärung anbieten ([30] Runden) My friend, shall we declare our friendship to the world? = Mein Freund, sollen wir unsere Freundschaft der Welt kundtun? Sign Declaration of Friendship ([30] turns) = Freundschaftserklärung unterzeichnen ([30] Runden) We are not interested. = Wir sind nicht interessiert. We have signed a Declaration of Friendship with [otherCiv]! = Wir haben eine Freundschaftserklärung mit [otherCiv] unterzeichnet! [otherCiv] has denied our Declaration of Friendship! = [otherCiv] hat unsere Freundschaftserklärung abgelehnt! - + Basics = Spielkonzepte Resources = Ressourcen Terrains = Gelände @@ -971,7 +981,7 @@ Terrain feature [feature] does not exist in ruleset! = Geländemerkmal [feature] Resource [resource] does not exist in ruleset! = Ressource [resource] fehlt im Regelsatz! Improvement [improvement] does not exist in ruleset! = Verbesserung [improvement] fehlt im Regelsatz! Change map to fit selected ruleset? = Karte ändern, um sie dem neuen Regelsatz anzupassen? - + # Civilopedia difficulty levels Player settings = Spieler-Einstellungen Base Happiness = Basiszufriedenheit @@ -997,7 +1007,7 @@ Major AI civilization bonus starting units = Haupt-KI Zivilisationsbonus Startei City state bonus starting units = Stadtstaaten Bonus Starteinheiten Turns until barbarians enter player tiles = Züge bis Barbaren Spielerfelder betreten Gold reward for clearing barbarian camps = Gold-Belohnung für das Räumen von Barbarenlagern - + # Other civilopedia things Nations = Nationen Available for [unitTypes] = Verfügbar für [unitTypes] @@ -1010,9 +1020,9 @@ Granted by [param] = Von [param] erteilt Granted by: = Erteilt von: [bonus] with [tech] = [bonus] mit [tech] Difficulty levels = Schwierigkeitsgrade - + # Policies - + Adopt policy = Politik verabschieden Adopt free policy = Freie Politik verabschieden Unlocked at = Freigeschaltet bei @@ -1048,12 +1058,12 @@ Cities following this religion: = Städte die dieser Religion folgen Click an icon to see the stats of this religion = Klicke auf ein Icon, um die Statistiken dieser Religion anzuzeigen # Terrains - + Impassable = Unpassierbar Rare feature = Seltene Geländeform - + # Resources - + Bison = Bisons Copper = Kupfer Cocoa = Kakao @@ -1063,9 +1073,9 @@ Truffles = Trüffel Strategic = Strategisch Bonus = Bonus Luxury = Luxus - + # Unit types - + City = Stadt Civilian = Zivilist Melee = Nahkampf @@ -1074,21 +1084,21 @@ Scout = Späher Mounted = Beritten Armor = Panzerung Siege = Belagerung - + WaterCivilian = Wasser-Zivilist WaterMelee = Wassernahkampf WaterRanged = Wasserfernkampf WaterSubmarine = U-Boote WaterAircraftCarrier = Flugzeugträger - + Fighter = Jagdflugzeug Bomber = Bomber AtomicBomber = Atombomber Missile = Rakete - - + + # Unit filters and other unit related things - + Air = Luft air units = Lufteinheiten Barbarian = Barbar @@ -1106,13 +1116,13 @@ Unbuildable = nicht baubar water units = Wassereinheiten wounded units = verwundete Einheiten Wounded = Verwundet - + # For the All "newly-trained [relevant] units in this city receive the [] promotion" translation. Relevant as in 'units that can receive' relevant = relevante - - + + # Promotions - + Pick promotion = Wähle eine Beförderung OR = ODER units in open terrain = Einheiten im offenen Gelände @@ -1125,10 +1135,9 @@ Dogfighting II = Kurvenkampf II Dogfighting III = Kurvenkampf III Choose name for [unitName] = Wähle Namen für [unitName] [unitFilter] units gain the [promotion] promotion = [unitFilter] Einheiten erhalten die [promotion] Beförderung - + # Multiplayer Turn Checker Service - -Multiplayer options = Mehrspieler Einstellungen + Enable out-of-game turn notifications = Aktiviere Zug Benachrichtigungen außerhalb des Spiels Time between turn checks out-of-game (in minutes) = Intervall zwischen Zug Prüfungen (in Minuten) Show persistent notification for turn notifier service = Zeige dauerhafte Benachrichtigung für den Zug-Benachrichtungsdienst @@ -1136,10 +1145,10 @@ Take user ID from clipboard = Spieler-ID aus der Zwischenablage übernehmen Doing this will reset your current user ID to the clipboard contents - are you sure? = Dies wird deine Spieler-ID auf den Inhalt der Zwischenablage zurücksetzen - bist du sicher? ID successfully set! = Spieler-ID erfolgreich gesetzt! Invalid ID! = Ungültige Spieler-ID! - - + + # Mods - + Mods = Modifikationen Download [modName] = [modName] herunterladen Update [modName] = [modName] aktualisieren @@ -1167,9 +1176,9 @@ No description provided = Keine Beschreibung mitgeliefert Author: [author] = Autor: [author] Size: [size] kB = Größe: [size] kB The mod you selected is incompatible with the defined ruleset! = Die gewählte Modifikation ist inkompatibel! - + # Uniques that are relevant to more than one type of game object - + [stats] from every [param] = Alle [param] geben [stats] [stats] from [param] tiles in this city = [stats] von [param] Feld in dieser Stadt [stats] from every [param] on [tileFilter] tiles = [stats] von jedem [param] auf [tileFilter] Feldern @@ -1183,7 +1192,7 @@ Can only be built on [tileFilter] tiles = Kann nur auf [tileFilter]-Feldern geba Cannot be built on [tileFilter] tiles = Kann nicht auf [tileFilter]-Feldern gebaut werden Does not need removal of [feature] = Hierfür muß [feature] nicht entfernt werden Gain a free [building] [cityFilter] = Erhalte [building] umsonst [cityFilter] - + # City filters in this city = in dieser Stadt in all cities = in allen Städten diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index 3584aaa393..7a42e0e290 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -420,9 +420,16 @@ Could not save game to custom location! = # Options Options = -Display options = -Gameplay options = -Other options = +About = +Display = +Gameplay = +Sound = +Advanced = +Multiplayer = +Locate mod errors = +Debug = + +See online Readme = Turns between autosaves = Sound effects volume = Music volume = @@ -444,18 +451,19 @@ off = Show pixel units = Show pixel improvements = Enable nuclear weapons = -Fontset = Show tile yields = Continuous rendering = When disabled, saves battery life but certain animations will be suspended = Order trade offers by amount = +Check extension mods based on vanilla = +Checking mods for errors... = Show experimental world wrap for maps = HIGHLY EXPERIMENTAL - YOU HAVE BEEN WARNED! = HIGHLY EXPERIMENTAL - UPDATES WILL BREAK SAVES! = Enable portrait orientation = Generate translation files = Translation files are generated successfully. = -Locate mod errors = +Please note that translations are a community-based work in progress and are INCOMPLETE! The percentage shown is how much of the language is translated in-game. If you want to help translating the game into your language, click here. = # Notifications @@ -1135,7 +1143,6 @@ Choose name for [unitName] = # Multiplayer Turn Checker Service -Multiplayer options = Enable out-of-game turn notifications = Time between turn checks out-of-game (in minutes) = Show persistent notification for turn notifier service = diff --git a/core/src/com/unciv/UncivGame.kt b/core/src/com/unciv/UncivGame.kt index 38712db4e2..5e344ed0f5 100644 --- a/core/src/com/unciv/UncivGame.kt +++ b/core/src/com/unciv/UncivGame.kt @@ -43,7 +43,7 @@ class UncivGame(parameters: UncivGameParameters) : Game() { */ var viewEntireMapForDebug = false /** For when you need to test something in an advanced game and don't have time to faff around */ - val superchargedForDebug = false + var superchargedForDebug = false /** Simulate until this turn on the first "Next turn" button press. * Does not update World View changes until finished. diff --git a/core/src/com/unciv/ui/LanguagePickerScreen.kt b/core/src/com/unciv/ui/LanguagePickerScreen.kt index f821bf8952..10ca77d2ec 100644 --- a/core/src/com/unciv/ui/LanguagePickerScreen.kt +++ b/core/src/com/unciv/ui/LanguagePickerScreen.kt @@ -1,69 +1,31 @@ package com.unciv.ui -import com.badlogic.gdx.graphics.Color -import com.badlogic.gdx.scenes.scene2d.Touchable -import com.badlogic.gdx.scenes.scene2d.ui.Table import com.unciv.MainMenuScreen -import com.unciv.UncivGame import com.unciv.models.translations.tr import com.unciv.ui.pickerscreens.PickerScreen -import com.unciv.ui.utils.* +import com.unciv.ui.utils.enable +import com.unciv.ui.utils.onClick +import com.unciv.ui.utils.LanguageTable +import com.unciv.ui.utils.LanguageTable.Companion.addLanguageTables +import com.unciv.ui.worldscreen.mainmenu.OptionsPopup - -class LanguageTable(val language:String, val percentComplete: Int):Table(){ - private val blue = ImageGetter.getBlue() - private val darkBlue = blue.cpy().lerp(Color.BLACK,0.5f)!! - - init{ - pad(10f) - defaults().pad(10f) - left() - if(ImageGetter.imageExists("FlagIcons/$language")) - add(ImageGetter.getImage("FlagIcons/$language")).size(40f) - - val spaceSplitLang = language.replace("_"," ") - add("$spaceSplitLang ($percentComplete%)".toLabel()) - update("") - touchable = Touchable.enabled // so click listener is activated when any part is clicked, not only children - pack() - } - - fun update(chosenLanguage:String){ - background = ImageGetter.getBackground( if(chosenLanguage==language) blue else darkBlue) - } - -} - -class LanguagePickerScreen : PickerScreen(){ +/** A [PickerScreen] to select a language, used once on the initial run after a fresh install. + * After that, [OptionsPopup] provides the functionality. + * Reusable code is in [LanguageTable] and [addLanguageTables]. + */ +class LanguagePickerScreen : PickerScreen() { var chosenLanguage = "English" - private val languageTables = ArrayList() + private val languageTables: ArrayList - fun update(){ + fun update() { languageTables.forEach { it.update(chosenLanguage) } } init { closeButton.isVisible = false - /// trimMargin is overhead, but easier to maintain and see when it might get trimmed without wrap: - val translationDisclaimer = """ - |Please note that translations are a community-based work in progress and are INCOMPLETE! - |The percentage shown is how much of the language is translated in-game. - |If you want to help translating the game into your language, - | instructions are in the Github readme! (Menu > Community > Github) - """.trimMargin() - topTable.add(translationDisclaimer.toLabel()).pad(10f).row() - val tableLanguages = Table() - tableLanguages.defaults().uniformX() - tableLanguages.defaults().pad(10.0f) - tableLanguages.defaults().fillX() - topTable.add(tableLanguages).row() - val languageCompletionPercentage = UncivGame.Current.translations - .percentCompleteOfLanguages - languageTables.addAll(languageCompletionPercentage - .map { LanguageTable(it.key,if(it.key=="English") 100 else it.value) } - .sortedByDescending { it.percentComplete} ) + languageTables = topTable.addLanguageTables(stage.width - 60f) languageTables.forEach { it.onClick { @@ -71,7 +33,6 @@ class LanguagePickerScreen : PickerScreen(){ rightSideButton.enable() update() } - tableLanguages.add(it).row() } rightSideButton.setText("Pick language".tr()) @@ -89,4 +50,4 @@ class LanguagePickerScreen : PickerScreen(){ game.setScreen(MainMenuScreen()) dispose() } -} \ No newline at end of file +} diff --git a/core/src/com/unciv/ui/utils/LanguageTable.kt b/core/src/com/unciv/ui/utils/LanguageTable.kt new file mode 100644 index 0000000000..f334b86557 --- /dev/null +++ b/core/src/com/unciv/ui/utils/LanguageTable.kt @@ -0,0 +1,68 @@ +package com.unciv.ui.utils + +import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.scenes.scene2d.Touchable +import com.badlogic.gdx.scenes.scene2d.ui.Table +import com.unciv.UncivGame +import com.unciv.ui.civilopedia.FormattedLine +import com.unciv.ui.civilopedia.MarkupRenderer +import java.util.ArrayList + +/** Represents a row in the Language picker, used both in OptionsPopup and in LanguagePickerScreen */ +internal class LanguageTable(val language:String, val percentComplete: Int): Table(){ + private val blue = ImageGetter.getBlue() + private val darkBlue = blue.cpy().lerp(Color.BLACK,0.5f)!! + + init{ + pad(10f) + defaults().pad(10f) + left() + if(ImageGetter.imageExists("FlagIcons/$language")) + add(ImageGetter.getImage("FlagIcons/$language")).size(40f) + + val spaceSplitLang = language.replace("_"," ") + add("$spaceSplitLang ($percentComplete%)".toLabel()) + update("") + touchable = + Touchable.enabled // so click listener is activated when any part is clicked, not only children + pack() + } + + fun update(chosenLanguage:String){ + background = ImageGetter.getBackground(if (chosenLanguage == language) blue else darkBlue) + } + + companion object { + /** Extension to add the Language boxes to a Table, used both in OptionsPopup and in LanguagePickerScreen */ + internal fun Table.addLanguageTables(expectedWidth: Float): ArrayList { + val languageTables = ArrayList() + + val translationDisclaimer = FormattedLine( + text = "Please note that translations are a community-based work in progress and are" + + " INCOMPLETE! The percentage shown is how much of the language is translated in-game." + + " If you want to help translating the game into your language, click here.", + link = "https://github.com/yairm210/Unciv/wiki/Translating", + size = 15 + ) + add(MarkupRenderer.render(listOf(translationDisclaimer),expectedWidth)).pad(5f).row() + + val tableLanguages = Table() + tableLanguages.defaults().uniformX() + tableLanguages.defaults().pad(10.0f) + tableLanguages.defaults().fillX() + + val languageCompletionPercentage = UncivGame.Current.translations + .percentCompleteOfLanguages + languageTables.addAll(languageCompletionPercentage + .map { LanguageTable(it.key, if (it.key == "English") 100 else it.value) } + .sortedByDescending { it.percentComplete} ) + + languageTables.forEach { + tableLanguages.add(it).row() + } + add(tableLanguages).row() + + return languageTables + } + } +} diff --git a/core/src/com/unciv/ui/utils/TabbedPager.kt b/core/src/com/unciv/ui/utils/TabbedPager.kt new file mode 100644 index 0000000000..c68f1858c1 --- /dev/null +++ b/core/src/com/unciv/ui/utils/TabbedPager.kt @@ -0,0 +1,355 @@ +package com.unciv.ui.utils + +import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.scenes.scene2d.Actor +import com.badlogic.gdx.scenes.scene2d.Group +import com.badlogic.gdx.scenes.scene2d.ui.* +import com.unciv.UncivGame +import kotlin.math.min + +/* + Unimplemented ideas: + Allow "fixed header" content that does not participate in scrolling + (OptionsPopup mod check tab) + `scrollAlign: Align` property controls initial content scroll position (currently it's Align.top) + */ + +/** + * Implements a 'Tabs' widget where different pages can be switched by selecting a header button. + * + * Each page is an Actor, passed to the Widget via [addPage]. Pages can be [removed][removePage], + * [replaced][replacePage] or dynamically added after the Widget is already shown. + + * Pages are automatically scrollable, switching pages preserves scroll positions individually. + * Pages can be disabled or secret - any 'secret' pages added require a later call to [askForPassword] + * to activate them (or discard if the password is wrong). + * + * The size parameters are lower and upper bounds of the page content area. The widget will always report + * these bounds (plus header height) as layout properties min/max-Width/Height, and measure the content + * area of added pages and set the reported pref-W/H to their maximum within these bounds. But, if a + * maximum is not specified, that coordinate will grow with content unlimited, and layout max-W/H will + * always report the same as pref-W/H. + */ +//region Fields and initialization +@Suppress("MemberVisibilityCanBePrivate", "unused") // All member are part of our API +class TabbedPager( + private val minimumWidth: Float = 0f, + private var maximumWidth: Float = Float.MAX_VALUE, + private val minimumHeight: Float = 0f, + private var maximumHeight: Float = Float.MAX_VALUE, + private val headerFontSize: Int = 18, + private val headerFontColor: Color = Color.WHITE, + private val highlightColor: Color = Color.BLUE, + backgroundColor: Color = ImageGetter.getBlue().lerp(Color.BLACK, 0.5f), + private val headerPadding: Float = 10f, + capacity: Int = 4 +) : Table() { + + private class PageState( + var content: Actor, + var disabled: Boolean = false, + val onActivation: ((Int, String)->Unit)? = null + ) { + var scrollX = 0f + var scrollY = 0f + + var button: Button = Button(CameraStageBaseScreen.skin) + var buttonX = 0f + var buttonW = 0f + } + + private var preferredWidth = minimumWidth + private val growMaxWidth = maximumWidth == Float.MAX_VALUE + private val limitWidth = maximumWidth + private var preferredHeight = minimumHeight + private val growMaxHeight = maximumHeight == Float.MAX_VALUE + private val limitHeight = maximumHeight + + private val pages = ArrayList(capacity) + + /** + * Index of currently selected page, or -1 of none. Read-only, use [selectPage] to change. + */ + var activePage = -1 + private set + + private val header = Table(CameraStageBaseScreen.skin) + private val headerScroll = AutoScrollPane(header) + private var headerHeight = 0f + + private val contentScroll = AutoScrollPane(null) + + private val deferredSecretPages = ArrayDeque(0) + private var askPasswordLock = false + + init { + background = ImageGetter.getBackground(backgroundColor) + header.defaults().pad(headerPadding, headerPadding * 0.5f) + headerScroll.setOverscroll(false,false) + headerScroll.setScrollingDisabled(false, true) + // Measure header height, most likely its final value + removePage(addPage("Dummy")) + add(headerScroll).growX().minHeight(headerHeight).row() + add(contentScroll).grow().row() + } + + //endregion + //region Widget interface + + // The following are part of the Widget interface and serve dynamic sizing + override fun getPrefWidth() = preferredWidth + fun setPrefWidth(width: Float) { + if (width !in minimumWidth..maximumWidth) throw IllegalArgumentException() + preferredWidth = width + invalidateHierarchy() + } + override fun getPrefHeight() = preferredHeight + headerHeight + fun setPrefHeight(height: Float) { + if (height - headerHeight !in minimumHeight..maximumHeight) throw IllegalArgumentException() + preferredHeight = height - headerHeight + invalidateHierarchy() + } + override fun getMinWidth() = minimumWidth + override fun getMaxWidth() = maximumWidth + override fun getMinHeight() = headerHeight + minimumHeight + override fun getMaxHeight() = headerHeight + maximumHeight + + //endregion + //region API + + /** @return Number of pages currently stored */ + fun pageCount() = pages.size + + /** @return index of a page by its (untranslated) caption, or -1 if no such page exists */ + fun getPageIndex(caption: String) = pages.indexOfLast { it.button.name == caption } + + /** Change the selected page by using its index. + * @param index Page number or -1 to deselect the current page. + * @return `true` if the page was successfully changed. + */ + fun selectPage(index: Int): Boolean { + if (index !in -1 until pages.size) return false + if (activePage == index) return false + if (index >= 0 && pages[index].disabled) return false + if (activePage != -1) { + pages[activePage].apply { + button.color = Color.WHITE + scrollX = contentScroll.scrollX + scrollY = contentScroll.scrollY + contentScroll.removeActor(content) + } + } + activePage = index + if (index != -1) { + pages[index].apply { + button.color = highlightColor + contentScroll.actor = content + contentScroll.layout() + if (scrollX < 0f) // was marked to center on first show + scrollX = ((content.width - this@TabbedPager.width) / 2).coerceIn(0f, contentScroll.maxX) + contentScroll.scrollX = scrollX + contentScroll.scrollY = scrollY + contentScroll.updateVisualScroll() + headerScroll.let { + it.scrollX = (buttonX + (buttonW - it.width) / 2).coerceIn(0f, it.maxX) + } + onActivation?.invoke(index, button.name) + } + } + return true + } + + /** Change the selected page by using its caption. + * @param caption Caption of the page to select. A nonexistent name will deselect the current page. + * @return `true` if the page was successfully changed. + */ + fun selectPage(caption: String) = selectPage(getPageIndex(caption)) + private fun selectPage(page: PageState) = selectPage(getPageIndex(page)) + + /** Change the disabled property of a page by its index. + * @return previous value or `false` if index invalid. + */ + fun setPageDisabled(index: Int, disabled: Boolean): Boolean { + if (index !in 0 until pages.size) return false + val page = pages[index] + val oldValue = page.disabled + page.disabled = disabled + page.button.isEnabled = !disabled + if (disabled && index == activePage) selectPage(-1) + return oldValue + } + + /** Change the disabled property of a page by its caption. + * @return previous value or `false` if caption not found. + */ + fun setPageDisabled(caption: String, disabled: Boolean) = setPageDisabled(getPageIndex(caption), disabled) + + /** Remove a page by its index. + * @return `true` if page successfully removed */ + fun removePage(index: Int): Boolean { + if (index !in 0 until pages.size) return false + if (index == activePage) selectPage(-1) + val page = pages.removeAt(index) + header.getCell(page.button).clearActor() + header.cells.removeIndex(index) + return true + } + + /** Remove a page by its caption. + * @return `true` if page successfully removed */ + fun removePage(caption: String) = removePage(getPageIndex(caption)) + + /** Replace a page's content by its index. */ + fun replacePage(index: Int, content: Actor) { + if (index !in 0 until pages.size) return + val isActive = index == activePage + if (isActive) selectPage(-1) + pages[index].content = content + if (isActive) selectPage(index) + } + + /** Replace a page's content by its caption. */ + fun replacePage(caption: String, content: Actor) = replacePage(getPageIndex(caption), content) + + /** Add a page! + * @param caption Text to be shown on the header button (automatically translated), can later be used to reference the page in other calls. + * @param content Actor to show when this page is selected. + * @param icon Actor, typically an [Image], to show before the caption. + * @param iconSize Size for [icon] - if not zero, the icon is wrapped to allow a [setSize] even on [Image] which ignores size. + * @param insertBefore -1 to add at the end or index of existing page to insert this before + * @param secret Marks page as 'secret'. A password is asked once per [TabbedPager] and if it does not match the has passed in the constructor the page and all subsequent secret pages are dropped. + * @param disabled Initial disabled state. Disabled pages cannot be selected even with [selectPage], their button is dimmed. + * @param onActivation _Optional_ callback called when this page is shown (per actual change to this page, not per header click). Lambda arguments are page index and caption. + * @return The new page's index or -1 if it could not be immediately added (secret). + */ + fun addPage( + caption: String, + content: Actor? = null, + icon: Actor? = null, + iconSize: Float = 0f, + insertBefore: Int = -1, + secret: Boolean = false, + disabled: Boolean = false, + onActivation: ((Int, String)->Unit)? = null + ): Int { + // Build page descriptor and header button + val page = PageState(content ?: Group(), disabled, onActivation) + page.button.apply { + name = caption // enable finding pages by untranslated caption without needing our own field + if (icon != null) { + if (iconSize != 0f) { + val wrapper = Group().apply { + isTransform = + false // performance helper - nothing here is rotated or scaled + setSize(iconSize, iconSize) + icon.setSize(iconSize, iconSize) + icon.center(this) + addActor(icon) + } + add(wrapper).padRight(headerPadding * 0.5f) + } else { + add(icon) + } + } + add(caption.toLabel(headerFontColor, headerFontSize)) + isEnabled = !disabled + onClick { + selectPage(page) + } + pack() + if (height + 2 * headerPadding > headerHeight) { + headerHeight = height + 2 * headerPadding + if (activePage >= 0) this@TabbedPager.invalidateHierarchy() + } + } + + // Support 'secret' pages + if (secret) { + deferredSecretPages.addLast(page) + return -1 + } + + return addAndShowPage(page, insertBefore) + } + + /** + * Activate any [secret][addPage] pages by asking for the password. + * + * If the parent of this Widget is a Popup, then this needs to be called _after_ the parent + * is shown to ensure proper popup stacking. + */ + fun askForPassword(secretHashCode: Int = 0) { + class PassPopup(screen: CameraStageBaseScreen, unlockAction: ()->Unit, lockAction: ()->Unit) : Popup(screen) { + val passEntry = TextField("", CameraStageBaseScreen.skin) + init { + passEntry.isPasswordMode = true + add(passEntry).row() + addOKButton { + if (passEntry.text.hashCode() == secretHashCode) unlockAction() else lockAction() + } + this.keyboardFocus = passEntry + } + } + + if (!UncivGame.isCurrentInitialized() || askPasswordLock || deferredSecretPages.isEmpty()) return + askPasswordLock = true // race condition: Popup closes _first_, then deferredSecretPages is emptied -> parent shows and calls us again + + PassPopup(UncivGame.Current.screen as CameraStageBaseScreen, { + addDeferredSecrets() + }, { + deferredSecretPages.clear() + }).open(true) + } + + //endregion + //region Helper routines + + private fun getPageIndex(page: PageState) = pages.indexOf(page) + + private fun addAndShowPage(page: PageState, insertBefore: Int): Int { + // Update pages array and header table + val newIndex: Int + val buttonCell: Cell