diff --git a/android/Images/OtherIcons/Link.png b/android/Images/OtherIcons/Link.png new file mode 100644 index 0000000000..66b496f0e9 Binary files /dev/null and b/android/Images/OtherIcons/Link.png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index c3964f0004..7a86a17de9 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -6,2254 +6,2205 @@ filter: MipMapLinearLinear, MipMapLinearLinear repeat: none EmojiIcons/Gold rotate: false - xy: 1932, 1602 + xy: 1932, 1604 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Production rotate: false - xy: 1701, 1192 + xy: 1581, 1136 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Turn rotate: false - xy: 1759, 1366 + xy: 1759, 1310 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ImprovementIcons/Academy rotate: false - xy: 289, 1533 + xy: 289, 1535 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Ancient ruins rotate: false - xy: 1901, 1834 + xy: 1901, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Barbarian encampment rotate: false - xy: 1168, 1734 + xy: 1168, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Camp rotate: false - xy: 520, 1586 + xy: 520, 1588 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Citadel rotate: false - xy: 1060, 1626 + xy: 1060, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City center rotate: false - xy: 1276, 1626 + xy: 1276, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City ruins rotate: false - xy: 1384, 1626 + xy: 1384, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Customs house rotate: false - xy: 736, 1518 + xy: 736, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Farm rotate: false - xy: 1261, 1302 + xy: 1261, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fishing Boats rotate: false - xy: 829, 1194 + xy: 829, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fort rotate: false - xy: 1261, 1194 + xy: 1261, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Landmark rotate: false - xy: 320, 938 + xy: 320, 940 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Lumber mill rotate: false - xy: 428, 938 + xy: 428, 940 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Manufactory rotate: false - xy: 536, 938 + xy: 536, 940 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Mine rotate: false - xy: 320, 290 + xy: 320, 292 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Moai rotate: false - xy: 428, 398 + xy: 428, 400 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Oil well rotate: false - xy: 860, 978 + xy: 860, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Pasture rotate: false - xy: 860, 870 + xy: 860, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Plantation rotate: false - xy: 1184, 978 + xy: 1184, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Polder rotate: false - xy: 968, 762 + xy: 968, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Quarry rotate: false - xy: 1184, 870 + xy: 1184, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Road rotate: false - xy: 1400, 870 + xy: 1400, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Terrace farm rotate: false - xy: 1508, 330 + xy: 1508, 332 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Trading post rotate: false - xy: 1162, 222 + xy: 1162, 224 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/America rotate: false - xy: 112, 23 + xy: 112, 25 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Arabia rotate: false - xy: 212, 933 + xy: 212, 935 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Aztecs rotate: false - xy: 190, 177 + xy: 190, 179 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Babylon rotate: false - xy: 628, 1694 + xy: 628, 1696 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/China rotate: false - xy: 844, 1626 + xy: 844, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/CityState rotate: false - xy: 613, 1478 + xy: 613, 1480 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Denmark rotate: false - xy: 952, 1518 + xy: 952, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Egypt rotate: false - xy: 937, 1302 + xy: 937, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/England rotate: false - xy: 1153, 1302 + xy: 1153, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/France rotate: false - xy: 1369, 1194 + xy: 1369, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Germany rotate: false - xy: 1477, 1410 + xy: 1477, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Greece rotate: false - xy: 1477, 1194 + xy: 1477, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Inca rotate: false - xy: 717, 1086 + xy: 717, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/India rotate: false - xy: 933, 1086 + xy: 933, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Iroquois rotate: false - xy: 1365, 1086 + xy: 1365, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Japan rotate: false - xy: 220, 69 + xy: 220, 71 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Korea rotate: false - xy: 328, 69 + xy: 328, 71 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Mongolia rotate: false - xy: 536, 290 + xy: 536, 292 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Persia rotate: false - xy: 1076, 978 + xy: 1076, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Polynesia rotate: false - xy: 860, 654 + xy: 860, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Rome rotate: false - xy: 1076, 546 + xy: 1076, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Russia rotate: false - xy: 968, 438 + xy: 968, 440 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Siam rotate: false - xy: 968, 330 + xy: 968, 332 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Songhai rotate: false - xy: 1076, 330 + xy: 1076, 332 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Spain rotate: false - xy: 1400, 546 + xy: 1400, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/The Huns rotate: false - xy: 4, 1641 + xy: 4, 1643 size: 400, 401 orig: 400, 401 offset: 0, 0 index: -1 NationIcons/The Netherlands rotate: false - xy: 730, 222 + xy: 730, 224 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/The Ottomans rotate: false - xy: 838, 222 + xy: 838, 224 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Aircraft rotate: false - xy: 1816, 1690 + xy: 1816, 1692 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/BackArrow rotate: false - xy: 278, 11 + xy: 278, 13 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Banner rotate: false - xy: 1060, 1734 + xy: 1060, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Border-inner rotate: false - xy: 697, 1819 + xy: 697, 1821 size: 31, 15 orig: 31, 15 offset: 0, 0 index: -1 OtherIcons/Border-outer rotate: false - xy: 2009, 1840 + xy: 2009, 1842 size: 31, 15 orig: 31, 15 offset: 0, 0 index: -1 OtherIcons/Camera rotate: false - xy: 1581, 1101 + xy: 1581, 1103 size: 25, 25 orig: 25, 25 offset: 0, 0 index: -1 OtherIcons/Circle rotate: false - xy: 1529, 1864 + xy: 1529, 1866 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 OtherIcons/Cities rotate: false - xy: 1168, 1626 + xy: 1168, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Close rotate: false - xy: 505, 1370 + xy: 505, 1372 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Crosshair rotate: false - xy: 501, 1154 + xy: 501, 1156 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Diplomacy rotate: false - xy: 1060, 1518 + xy: 1060, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DiplomacyW rotate: false - xy: 1168, 1518 + xy: 1168, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DisbandUnit rotate: false - xy: 1276, 1518 + xy: 1276, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Down rotate: false - xy: 1224, 56 + xy: 1224, 58 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Fire rotate: false - xy: 1369, 1302 + xy: 1369, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Hexagon rotate: false - xy: 4, 1393 + xy: 4, 1395 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 +OtherIcons/Link + rotate: false + xy: 1494, 216 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 OtherIcons/Load rotate: false - xy: 320, 830 + xy: 320, 832 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Lock rotate: false - xy: 536, 1046 + xy: 536, 1048 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MapEditor rotate: false - xy: 428, 830 + xy: 428, 832 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MenuIcon rotate: false - xy: 428, 614 + xy: 428, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Mods rotate: false - xy: 428, 290 + xy: 428, 292 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Multiplayer rotate: false - xy: 514, 182 + xy: 514, 184 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/New rotate: false - xy: 652, 74 + xy: 652, 76 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Options rotate: false - xy: 644, 654 + xy: 644, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pentagon rotate: false - xy: 644, 546 + xy: 644, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pillage rotate: false - xy: 644, 438 + xy: 644, 440 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Puppet rotate: false - xy: 1292, 978 + xy: 1292, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Quest rotate: false - xy: 1076, 762 + xy: 1076, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Quickstart rotate: false - xy: 968, 654 + xy: 968, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Resume rotate: false - xy: 860, 438 + xy: 860, 440 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Shield rotate: false - xy: 1076, 438 + xy: 1076, 440 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Sleep rotate: false - xy: 1184, 438 + xy: 1184, 440 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Star rotate: false - xy: 1400, 444 + xy: 1400, 446 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 OtherIcons/Stop rotate: false - xy: 1508, 762 + xy: 1508, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Swap rotate: false - xy: 1508, 546 + xy: 1508, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Triangle rotate: false - xy: 1715, 1864 + xy: 1715, 1866 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 OtherIcons/Up rotate: false - xy: 1759, 1192 + xy: 1755, 1136 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/whiteDot rotate: false - xy: 1892, 1043 + xy: 1812, 1064 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 PolicyIcons/Aesthetics rotate: false - xy: 644, 1096 + xy: 644, 1098 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Aristocracy rotate: false - xy: 1300, 106 + xy: 1300, 108 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Citizenship rotate: false - xy: 684, 16 + xy: 684, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Civil Society rotate: false - xy: 760, 56 + xy: 760, 58 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Collective Rule rotate: false - xy: 876, 56 + xy: 876, 58 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Communism rotate: false - xy: 934, 56 + xy: 934, 58 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Constitution rotate: false - xy: 992, 56 + xy: 992, 58 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Cultural Diplomacy rotate: false - xy: 1108, 56 + xy: 1108, 58 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Democracy rotate: false - xy: 1166, 56 + xy: 1166, 58 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Educated Elite rotate: false - xy: 1282, 48 + xy: 1282, 50 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Fascism rotate: false - xy: 1932, 1776 + xy: 1932, 1778 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Religion rotate: false - xy: 1874, 1602 + xy: 1874, 1604 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Speech rotate: false - xy: 1932, 1660 + xy: 1932, 1662 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Thought rotate: false - xy: 1874, 1544 + xy: 1874, 1546 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Humanism rotate: false - xy: 1378, 272 + xy: 1378, 274 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Landed Elite rotate: false - xy: 1494, 272 + xy: 1494, 274 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Legalism rotate: false - xy: 1552, 272 + xy: 1552, 274 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mandate Of Heaven rotate: false - xy: 1552, 214 + xy: 1358, 158 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mercantilism rotate: false - xy: 1340, 40 + xy: 1600, 1484 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Merchant Navy rotate: false - xy: 1600, 1482 + xy: 1658, 1484 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Meritocracy rotate: false - xy: 1658, 1482 + xy: 1716, 1484 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Militarism rotate: false - xy: 1716, 1482 + xy: 1585, 1426 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Caste rotate: false - xy: 1585, 1424 + xy: 1585, 1368 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Tradition rotate: false - xy: 1585, 1366 + xy: 1643, 1426 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Monarchy rotate: false - xy: 1585, 1308 + xy: 1643, 1368 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Nationalism rotate: false - xy: 1585, 1250 + xy: 1643, 1310 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Naval Tradition rotate: false - xy: 1643, 1308 + xy: 1701, 1368 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Oligarchy rotate: false - xy: 1701, 1366 + xy: 1643, 1252 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Organized Religion rotate: false - xy: 1643, 1250 + xy: 1701, 1310 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Philantropy rotate: false - xy: 1701, 1308 + xy: 1701, 1252 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Planned Economy rotate: false - xy: 1701, 1250 + xy: 1585, 1194 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Police State rotate: false - xy: 1585, 1192 + xy: 1643, 1194 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Populism rotate: false - xy: 1643, 1192 + xy: 1701, 1194 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Professional Army rotate: false - xy: 1581, 1134 + xy: 1639, 1136 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Protectionism rotate: false - xy: 1639, 1134 + xy: 1697, 1136 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Reformation rotate: false - xy: 1416, 98 + xy: 1398, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Representation rotate: false - xy: 1474, 156 + xy: 1474, 100 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Republic rotate: false - xy: 1474, 98 + xy: 1456, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scholasticism rotate: false - xy: 1456, 40 + xy: 1532, 158 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scientific Revolution rotate: false - xy: 1532, 156 + xy: 1532, 100 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Secularism rotate: false - xy: 1514, 40 + xy: 1590, 158 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Socialism rotate: false - xy: 1572, 40 + xy: 1990, 1778 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Sovereignty rotate: false - xy: 1990, 1718 + xy: 1990, 1662 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Theocracy rotate: false - xy: 1990, 1486 + xy: 1630, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Total War rotate: false - xy: 1630, 40 + xy: 1759, 1426 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Trade Unions rotate: false - xy: 1759, 1424 + xy: 1759, 1368 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/United Front rotate: false - xy: 1759, 1308 + xy: 1759, 1252 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Universal Suffrage rotate: false - xy: 1759, 1250 + xy: 1759, 1194 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Warrior Code rotate: false - xy: 1616, 1076 + xy: 1616, 1020 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ResourceIcons/Aluminum rotate: false - xy: 520, 1694 + xy: 520, 1696 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Bananas rotate: false - xy: 844, 1734 + xy: 844, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cattle rotate: false - xy: 628, 1586 + xy: 628, 1588 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Coal rotate: false - xy: 613, 1370 + xy: 613, 1372 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cotton rotate: false - xy: 393, 1154 + xy: 393, 1156 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Deer rotate: false - xy: 844, 1518 + xy: 844, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Dyes rotate: false - xy: 721, 1410 + xy: 721, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Fish rotate: false - xy: 721, 1194 + xy: 721, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Furs rotate: false - xy: 1492, 1734 + xy: 1492, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gems rotate: false - xy: 1492, 1518 + xy: 1492, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gold Ore rotate: false - xy: 1477, 1302 + xy: 1477, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Horses rotate: false - xy: 1708, 1648 + xy: 1708, 1650 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Incense rotate: false - xy: 825, 1086 + xy: 825, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Iron rotate: false - xy: 1149, 1086 + xy: 1149, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Ivory rotate: false - xy: 1473, 1086 + xy: 1473, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Marble rotate: false - xy: 320, 614 + xy: 320, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Oil rotate: false - xy: 644, 762 + xy: 644, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Pearls rotate: false - xy: 752, 762 + xy: 752, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sheep rotate: false - xy: 1184, 546 + xy: 1184, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silk rotate: false - xy: 1400, 654 + xy: 1400, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silver rotate: false - xy: 1292, 546 + xy: 1292, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Spices rotate: false - xy: 1184, 330 + xy: 1184, 332 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Stone rotate: false - xy: 1508, 870 + xy: 1508, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sugar rotate: false - xy: 1508, 654 + xy: 1508, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Uranium rotate: false - xy: 760, 114 + xy: 760, 116 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Whales rotate: false - xy: 868, 114 + xy: 868, 116 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wheat rotate: false - xy: 976, 114 + xy: 976, 116 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wine rotate: false - xy: 1084, 114 + xy: 1084, 116 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Acquire rotate: false - xy: 4, 23 + xy: 4, 25 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/CityConnection rotate: false - xy: 397, 1478 + xy: 397, 1480 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Culture rotate: false - xy: 697, 1842 + xy: 697, 1844 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Faith rotate: false - xy: 4, 131 + xy: 4, 133 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 StatIcons/Food rotate: false - xy: 4, 941 + xy: 4, 943 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Gold rotate: false - xy: 905, 1842 + xy: 905, 1844 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Happiness rotate: false - xy: 4, 733 + xy: 4, 735 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/InterceptRange rotate: false - xy: 1378, 214 + xy: 1378, 216 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Malcontent rotate: false - xy: 1113, 1842 + xy: 1113, 1844 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Movement rotate: false - xy: 1701, 1424 + xy: 1585, 1252 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Population rotate: false - xy: 4, 525 + xy: 4, 527 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Production rotate: false - xy: 1321, 1842 + xy: 1321, 1844 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Range rotate: false - xy: 1697, 1134 + xy: 1416, 158 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/RangedStrength rotate: false - xy: 1416, 156 + xy: 1416, 100 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Resistance rotate: false - xy: 968, 546 + xy: 968, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Science rotate: false - xy: 4, 317 + xy: 4, 319 size: 200, 200 orig: 200, 200 offset: 0, 0 index: -1 StatIcons/Specialist rotate: false - xy: 1292, 438 + xy: 1292, 440 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Strength rotate: false - xy: 1990, 1660 + xy: 1990, 1604 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 TechIcons/Acoustics rotate: false - xy: 412, 1694 + xy: 412, 1696 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Advanced Ballistics rotate: false - xy: 1901, 1942 + xy: 1901, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Agriculture rotate: false - xy: 289, 1425 + xy: 289, 1427 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Animal Husbandry rotate: false - xy: 212, 1041 + xy: 212, 1043 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archaeology rotate: false - xy: 212, 825 + xy: 212, 827 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archery rotate: false - xy: 212, 717 + xy: 212, 719 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Architecture rotate: false - xy: 212, 609 + xy: 212, 611 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Astronomy rotate: false - xy: 212, 501 + xy: 212, 503 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Atomic Theory rotate: false - xy: 212, 285 + xy: 212, 287 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Ballistics rotate: false - xy: 736, 1734 + xy: 736, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Banking rotate: false - xy: 952, 1734 + xy: 952, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Biology rotate: false - xy: 1276, 1734 + xy: 1276, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Bronze Working rotate: false - xy: 1384, 1734 + xy: 1384, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Calendar rotate: false - xy: 412, 1586 + xy: 412, 1588 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chemistry rotate: false - xy: 736, 1626 + xy: 736, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chivalry rotate: false - xy: 952, 1626 + xy: 952, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Civil Service rotate: false - xy: 397, 1370 + xy: 397, 1372 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Combined Arms rotate: false - xy: 289, 1317 + xy: 289, 1319 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Combustion rotate: false - xy: 285, 1209 + xy: 285, 1211 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Compass rotate: false - xy: 397, 1262 + xy: 397, 1264 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Computers rotate: false - xy: 505, 1262 + xy: 505, 1264 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Construction rotate: false - xy: 613, 1262 + xy: 613, 1264 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Currency rotate: false - xy: 609, 1154 + xy: 609, 1156 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Drama and Poetry rotate: false - xy: 1384, 1518 + xy: 1384, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Dynamite rotate: false - xy: 721, 1302 + xy: 721, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Ecology rotate: false - xy: 829, 1410 + xy: 829, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Economics rotate: false - xy: 829, 1302 + xy: 829, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Education rotate: false - xy: 937, 1410 + xy: 937, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Electricity rotate: false - xy: 1045, 1410 + xy: 1045, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Electronics rotate: false - xy: 1045, 1302 + xy: 1045, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Engineering rotate: false - xy: 1153, 1410 + xy: 1153, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Fertilizer rotate: false - xy: 1369, 1410 + xy: 1369, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Flight rotate: false - xy: 937, 1194 + xy: 937, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Future Tech rotate: false - xy: 1492, 1626 + xy: 1492, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Guilds rotate: false - xy: 1600, 1756 + xy: 1600, 1758 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Gunpowder rotate: false - xy: 1708, 1756 + xy: 1708, 1758 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Horseback Riding rotate: false - xy: 1600, 1540 + xy: 1600, 1542 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Industrialization rotate: false - xy: 1041, 1086 + xy: 1041, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Iron Working rotate: false - xy: 1257, 1086 + xy: 1257, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Lasers rotate: false - xy: 428, 1046 + xy: 428, 1048 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Machinery rotate: false - xy: 320, 722 + xy: 320, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Masonry rotate: false - xy: 428, 722 + xy: 428, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mass Media rotate: false - xy: 320, 506 + xy: 320, 508 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mathematics rotate: false - xy: 536, 722 + xy: 536, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metal Casting rotate: false - xy: 320, 398 + xy: 320, 400 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metallurgy rotate: false - xy: 536, 614 + xy: 536, 616 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Military Science rotate: false - xy: 428, 506 + xy: 428, 508 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mining rotate: false - xy: 536, 506 + xy: 536, 508 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mobile Tactics rotate: false - xy: 536, 398 + xy: 536, 400 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nanotechnology rotate: false - xy: 436, 74 + xy: 436, 76 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Navigation rotate: false - xy: 622, 182 + xy: 622, 184 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nuclear Fission rotate: false - xy: 644, 978 + xy: 644, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nuclear Fusion rotate: false - xy: 644, 870 + xy: 644, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Optics rotate: false - xy: 752, 870 + xy: 752, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Particle Physics rotate: false - xy: 968, 978 + xy: 968, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pharmaceuticals rotate: false - xy: 968, 870 + xy: 968, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Philosophy rotate: false - xy: 860, 762 + xy: 860, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Physics rotate: false - xy: 752, 654 + xy: 752, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Plastics rotate: false - xy: 1076, 870 + xy: 1076, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pottery rotate: false - xy: 752, 546 + xy: 752, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Printing Press rotate: false - xy: 644, 330 + xy: 644, 332 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Radar rotate: false - xy: 860, 546 + xy: 860, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Radio rotate: false - xy: 752, 438 + xy: 752, 440 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Railroad rotate: false - xy: 1400, 978 + xy: 1400, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Refrigeration rotate: false - xy: 1184, 762 + xy: 1184, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Replaceable Parts rotate: false - xy: 1076, 654 + xy: 1076, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rifling rotate: false - xy: 752, 330 + xy: 752, 332 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Robotics rotate: false - xy: 1292, 762 + xy: 1292, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rocketry rotate: false - xy: 1184, 654 + xy: 1184, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Sailing rotate: false - xy: 860, 330 + xy: 860, 332 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Satellites rotate: false - xy: 1400, 762 + xy: 1400, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Scientific Theory rotate: false - xy: 1292, 654 + xy: 1292, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Stealth rotate: false - xy: 1292, 330 + xy: 1292, 332 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steam Power rotate: false - xy: 1400, 336 + xy: 1400, 338 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steel rotate: false - xy: 1508, 978 + xy: 1508, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Telecommunications rotate: false - xy: 1508, 438 + xy: 1508, 440 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/The Wheel rotate: false - xy: 946, 222 + xy: 946, 224 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Theology rotate: false - xy: 1054, 222 + xy: 1054, 224 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Trapping rotate: false - xy: 1270, 222 + xy: 1270, 224 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Writing rotate: false - xy: 1192, 114 + xy: 1192, 116 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/AtollOverlay rotate: false - xy: 212, 393 + xy: 212, 395 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/CityOverlay rotate: false - xy: 505, 1478 + xy: 505, 1480 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -TileSets/Default/CrosshatchHexagon - rotate: false - xy: 4, 1149 - size: 273, 236 - orig: 273, 236 - offset: 0, 0 - index: -1 -TileSets/FantasyHex/CrosshatchHexagon - rotate: false - xy: 4, 1149 - size: 273, 236 - orig: 273, 236 - offset: 0, 0 - index: -1 TileSets/Default/FalloutOverlay rotate: false - xy: 1261, 1410 + xy: 1261, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Flood plainsOverlay rotate: false - xy: 1045, 1194 + xy: 1045, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/ForestOverlay rotate: false - xy: 1153, 1194 + xy: 1153, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -TileSets/Default/Hexagon - rotate: false - xy: 412, 1802 - size: 277, 240 - orig: 277, 240 - offset: 0, 0 - index: -1 -TileSets/FantasyHex/Hexagon - rotate: false - xy: 412, 1802 - size: 277, 240 - orig: 277, 240 - offset: 0, 0 - index: -1 TileSets/Default/HillOverlay rotate: false - xy: 1600, 1648 + xy: 1600, 1650 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/IceOverlay rotate: false - xy: 1708, 1540 + xy: 1708, 1542 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/JungleOverlay rotate: false - xy: 298, 177 + xy: 298, 179 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/LakesOverlay rotate: false - xy: 320, 1046 + xy: 320, 1048 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/MarshOverlay rotate: false - xy: 536, 830 + xy: 536, 832 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/MountainOverlay rotate: false - xy: 406, 182 + xy: 406, 184 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/NaturalWonderOverlay rotate: false - xy: 544, 74 + xy: 544, 76 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/OasisOverlay rotate: false - xy: 752, 978 + xy: 752, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Railroad rotate: false - xy: 1292, 870 + xy: 1292, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Railroad rotate: false - xy: 1292, 870 + xy: 1292, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -TileSets/Default/Tiles/River-Bottom +TileSets/FantasyHex/CrosshatchHexagon rotate: false - xy: 1776, 211 - size: 32, 28 - orig: 32, 28 + xy: 4, 1151 + size: 273, 236 + orig: 273, 236 offset: 0, 0 index: -1 -TileSets/FantasyHex/Tiles/River-Bottom +TileSets/Default/CrosshatchHexagon rotate: false - xy: 1776, 211 - size: 32, 28 - orig: 32, 28 + xy: 4, 1151 + size: 273, 236 + orig: 273, 236 offset: 0, 0 index: -1 -TileSets/Default/Tiles/River-BottomLeft +TileSets/FantasyHex/Hexagon rotate: false - xy: 1816, 214 - size: 32, 28 - orig: 32, 28 + xy: 412, 1804 + size: 277, 240 + orig: 277, 240 offset: 0, 0 index: -1 -TileSets/FantasyHex/Tiles/River-BottomLeft +TileSets/Default/Hexagon rotate: false - xy: 1816, 214 - size: 32, 28 - orig: 32, 28 - offset: 0, 0 - index: -1 -TileSets/Default/Tiles/River-BottomRight - rotate: false - xy: 1853, 1116 - size: 32, 28 - orig: 32, 28 - offset: 0, 0 - index: -1 -TileSets/FantasyHex/Tiles/River-BottomRight - rotate: false - xy: 1853, 1116 - size: 32, 28 - orig: 32, 28 - offset: 0, 0 - index: -1 -TileSets/Default/road - rotate: false - xy: 1529, 1845 - size: 61, 11 - orig: 61, 11 - offset: 0, 0 - index: -1 -TileSets/FantasyHex/road - rotate: false - xy: 1529, 1845 - size: 61, 11 - orig: 61, 11 + xy: 412, 1804 + size: 277, 240 + orig: 277, 240 offset: 0, 0 index: -1 TileSets/FantasyHex/Railroad rotate: false - xy: 4, 4 + xy: 4, 6 size: 61, 11 orig: 61, 11 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Academy rotate: false - xy: 285, 1165 + xy: 285, 1167 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Academy-Snow rotate: false - xy: 2009, 2007 + xy: 2009, 2009 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Aluminum rotate: false - xy: 1774, 1504 + xy: 1774, 1506 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins rotate: false - xy: 1616, 982 + xy: 1732, 1100 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Jungle rotate: false - xy: 684, 290 + xy: 684, 292 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Sand rotate: false - xy: 1674, 1040 + xy: 1616, 926 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Snow rotate: false - xy: 325, 1173 + xy: 325, 1175 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins2 rotate: false - xy: 1732, 1098 + xy: 1674, 1042 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Atoll rotate: false - xy: 2009, 1899 + xy: 1674, 970 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Bananas rotate: false - xy: 1616, 838 + xy: 1616, 818 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barbarian encampment rotate: false - xy: 1616, 802 + xy: 2009, 1865 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barbarian encampment-Snow rotate: false - xy: 1616, 765 + xy: 1616, 781 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barringer Crater rotate: false - xy: 1616, 729 + xy: 1616, 745 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cattle rotate: false - xy: 742, 20 + xy: 782, 22 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cattle+Pasture rotate: false - xy: 782, 16 + xy: 822, 18 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cerro de Potosi rotate: false - xy: 862, 20 + xy: 902, 22 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citadel rotate: false - xy: 982, 13 + xy: 1022, 15 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citadel-Snow rotate: false - xy: 1022, 18 + xy: 1062, 20 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center rotate: false - xy: 1062, 13 + xy: 1102, 15 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Ancient era rotate: false - xy: 1102, 16 + xy: 1142, 18 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Classical era rotate: false - xy: 1142, 16 + xy: 1182, 18 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Future era rotate: false - xy: 1182, 14 + xy: 1222, 16 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Industrial era rotate: false - xy: 1222, 15 + xy: 1714, 1023 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Information era rotate: false - xy: 1714, 1018 + xy: 1714, 979 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Medieval era rotate: false - xy: 1754, 1022 + xy: 1754, 1024 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Modern era rotate: false - xy: 1656, 962 + xy: 1754, 982 size: 32, 34 orig: 32, 34 offset: 0, 0 @@ -2323,903 +2274,945 @@ TileSets/FantasyHex/Tiles/Desert index: -1 TileSets/FantasyHex/Tiles/Desert+Farm rotate: false - xy: 1714, 982 + xy: 1616, 312 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert+Flood plains+Farm rotate: false - xy: 1754, 986 + xy: 1610, 276 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Dyes rotate: false - xy: 1696, 874 + xy: 1650, 267 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Dyes+Plantation rotate: false - xy: 1696, 838 + xy: 1650, 231 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/El Dorado rotate: false - xy: 1696, 801 + xy: 1648, 194 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fallout rotate: false - xy: 1696, 758 + xy: 1648, 151 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fish rotate: false - xy: 1696, 722 + xy: 1648, 115 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fishing Boats rotate: false - xy: 1696, 686 + xy: 1262, 14 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Flood plains rotate: false - xy: 1696, 650 + xy: 1794, 1028 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Forest rotate: false - xy: 1696, 574 + xy: 1834, 1478 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fort rotate: false - xy: 1696, 533 + xy: 1817, 1437 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fountain of Youth rotate: false - xy: 1696, 493 + xy: 1817, 1397 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Furs rotate: false - xy: 1696, 421 + xy: 1817, 1325 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Furs+Camp rotate: false - xy: 1696, 385 + xy: 1817, 1289 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Gems rotate: false - xy: 1834, 1480 + xy: 1813, 1145 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Gold Ore rotate: false - xy: 1817, 1444 + xy: 1857, 1442 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grand Mesa rotate: false - xy: 1817, 1404 + xy: 1857, 1402 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland rotate: false - xy: 1817, 1368 + xy: 1857, 1366 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Farm rotate: false - xy: 1817, 1332 + xy: 1857, 1330 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Camp rotate: false - xy: 1817, 1293 + xy: 1857, 1291 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Deer+Camp rotate: false - xy: 1817, 1254 + xy: 1857, 1252 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Furs+Camp rotate: false - xy: 1817, 1215 + xy: 1857, 1213 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Lumber mill rotate: false - xy: 1817, 1176 + xy: 1857, 1174 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Farm rotate: false - xy: 1813, 1140 + xy: 1897, 1452 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Camp rotate: false - xy: 1736, 946 + xy: 1897, 1416 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Lumber mill rotate: false - xy: 1736, 910 + xy: 1937, 1452 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Trading post rotate: false - xy: 1736, 874 + xy: 1897, 1380 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Jungle+Trading post rotate: false - xy: 1736, 834 + xy: 1937, 1412 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/GrasslandForest rotate: false - xy: 1736, 795 + xy: 1977, 1449 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Great Barrier Reef rotate: false - xy: 1736, 684 + xy: 1977, 1413 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Hill rotate: false - xy: 1857, 1404 + xy: 1977, 1262 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillForest+Lumber mill rotate: false - xy: 1857, 1368 + xy: 1937, 1196 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillMarbleQuarry rotate: false - xy: 1857, 1332 + xy: 1977, 1226 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillMine rotate: false - xy: 1857, 1296 + xy: 1977, 1190 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillStoneQuarry rotate: false - xy: 1857, 1260 + xy: 1853, 1138 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Horses rotate: false - xy: 1897, 1414 + xy: 1893, 1125 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Horses+Pasture rotate: false - xy: 1937, 1446 + xy: 1933, 1120 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ice rotate: false - xy: 1977, 1450 + xy: 1853, 1102 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Incense rotate: false - xy: 1977, 1414 + xy: 1933, 1084 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Incense+Plantation rotate: false - xy: 1897, 1305 + xy: 1973, 1081 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Iron rotate: false - xy: 1977, 1378 + xy: 1892, 1053 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ivory rotate: false - xy: 1937, 1302 + xy: 1972, 1045 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ivory+Camp rotate: false - xy: 1977, 1342 + xy: 2012, 1045 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Jungle rotate: false - xy: 1977, 1302 + xy: 1874, 1013 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Krakatoa rotate: false - xy: 1977, 1228 + xy: 1302, 4 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Lakes rotate: false - xy: 1977, 1192 + xy: 1382, 6 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Landmark rotate: false - xy: 1937, 1147 + xy: 1954, 1001 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Manufactory rotate: false - xy: 1616, 285 + xy: 1834, 947 size: 32, 39 orig: 32, 39 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Marble rotate: false - xy: 1656, 267 + xy: 1874, 941 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Marsh rotate: false - xy: 1736, 284 + xy: 1754, 945 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mine rotate: false - xy: 1648, 123 + xy: 1662, 6 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Moai rotate: false - xy: 1776, 877 + xy: 1874, 904 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mount Fuji rotate: false - xy: 1776, 731 + xy: 1754, 907 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mountain rotate: false - xy: 1776, 687 + xy: 1696, 899 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oasis rotate: false - xy: 1776, 471 + xy: 1696, 683 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ocean rotate: false - xy: 1776, 435 + xy: 1696, 647 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Offshore Platform rotate: false - xy: 1776, 399 + xy: 1696, 611 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oil rotate: false - xy: 1776, 363 + xy: 1696, 575 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oil well rotate: false - xy: 1776, 327 + xy: 1696, 539 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Old Faithful rotate: false - xy: 1776, 287 + xy: 1696, 499 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Pasture rotate: false - xy: 1776, 247 + xy: 1696, 387 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Pearls rotate: false - xy: 1816, 918 + xy: 1696, 315 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains rotate: false - xy: 1816, 774 + xy: 1914, 865 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Farm rotate: false - xy: 1816, 738 + xy: 1954, 857 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Forest+Camp rotate: false - xy: 1816, 698 + xy: 1994, 861 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Forest+Lumber mill rotate: false - xy: 1816, 658 + xy: 1736, 867 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Jungle+Trading post rotate: false - xy: 1816, 618 + xy: 1736, 827 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/PlainsForest rotate: false - xy: 1816, 578 + xy: 1736, 787 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/PlainsJungle rotate: false - xy: 1816, 538 + xy: 1736, 747 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation rotate: false - xy: 1816, 502 + xy: 1736, 711 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation+Bananas rotate: false - xy: 1816, 466 + xy: 1736, 675 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation+Cotton rotate: false - xy: 1816, 430 + xy: 1736, 639 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry rotate: false - xy: 1816, 322 + xy: 1736, 531 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry+Marble rotate: false - xy: 1816, 286 + xy: 1736, 495 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry+Stone rotate: false - xy: 1816, 250 + xy: 1736, 459 + size: 32, 28 + orig: 32, 28 + offset: 0, 0 + index: -1 +TileSets/FantasyHex/Tiles/River-Bottom + rotate: false + xy: 1736, 351 + size: 32, 28 + orig: 32, 28 + offset: 0, 0 + index: -1 +TileSets/Default/Tiles/River-Bottom + rotate: false + xy: 1736, 351 + size: 32, 28 + orig: 32, 28 + offset: 0, 0 + index: -1 +TileSets/FantasyHex/Tiles/River-BottomLeft + rotate: false + xy: 1736, 315 + size: 32, 28 + orig: 32, 28 + offset: 0, 0 + index: -1 +TileSets/Default/Tiles/River-BottomLeft + rotate: false + xy: 1736, 315 + size: 32, 28 + orig: 32, 28 + offset: 0, 0 + index: -1 +TileSets/FantasyHex/Tiles/River-BottomRight + rotate: false + xy: 1776, 848 + size: 32, 28 + orig: 32, 28 + offset: 0, 0 + index: -1 +TileSets/Default/Tiles/River-BottomRight + rotate: false + xy: 1776, 848 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Rock of Gibraltar rotate: false - xy: 1813, 1100 + xy: 1776, 808 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sheep rotate: false - xy: 1933, 1039 + xy: 1776, 591 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sheep+Pasture rotate: false - xy: 1973, 1044 + xy: 1776, 551 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silk rotate: false - xy: 1874, 1007 + xy: 1776, 442 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silk+Plantation rotate: false - xy: 1856, 971 + xy: 1776, 406 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silver rotate: false - xy: 1856, 935 + xy: 1776, 370 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Snow rotate: false - xy: 1856, 825 + xy: 1816, 803 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Snow+Farm rotate: false - xy: 1856, 789 + xy: 1816, 767 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Spices rotate: false - xy: 1856, 717 + xy: 1816, 695 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Spices+Plantation rotate: false - xy: 1856, 681 + xy: 1816, 659 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Stone rotate: false - xy: 1856, 645 + xy: 1816, 623 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sugar rotate: false - xy: 1856, 575 + xy: 1816, 553 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sugar+Plantation rotate: false - xy: 1856, 539 + xy: 1816, 517 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Terrace farm rotate: false - xy: 1856, 395 + xy: 1816, 373 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Trading post rotate: false - xy: 1856, 323 + xy: 1856, 832 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra rotate: false - xy: 1856, 215 + xy: 1856, 724 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Farm rotate: false - xy: 1896, 971 + xy: 1856, 688 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Camp rotate: false - xy: 1896, 931 + xy: 1856, 648 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Camp+Furs rotate: false - xy: 1896, 891 + xy: 1856, 608 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Deer+Camp rotate: false - xy: 1896, 851 + xy: 1856, 568 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Lumber mill rotate: false - xy: 1896, 811 + xy: 1856, 528 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/TundraForest rotate: false - xy: 1896, 771 + xy: 1856, 488 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Uranium rotate: false - xy: 1896, 699 + xy: 1856, 416 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Whales rotate: false - xy: 1896, 521 + xy: 1896, 759 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Whales+Fishing Boats rotate: false - xy: 1896, 485 + xy: 1896, 723 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wheat rotate: false - xy: 1896, 449 + xy: 1896, 687 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wine rotate: false - xy: 1896, 413 + xy: 1896, 651 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wine+Plantation rotate: false - xy: 1896, 377 + xy: 1896, 615 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/TopBorder rotate: false - xy: 1856, 359 + xy: 1816, 337 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/African Forest Elephant rotate: false - xy: 644, 293 + xy: 644, 295 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Anti-Aircraft Gun rotate: false - xy: 2009, 1971 + xy: 2009, 1973 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Anti-Tank Gun rotate: false - xy: 1616, 946 + xy: 1772, 1100 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Archer rotate: false - xy: 1772, 1098 + xy: 1674, 1006 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Artillery rotate: false - xy: 2009, 1935 + xy: 1616, 890 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Atlatlist rotate: false - xy: 1616, 910 + xy: 2009, 1937 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Axe Thrower rotate: false - xy: 1616, 874 + xy: 1616, 854 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ballista rotate: false - xy: 2009, 1863 + xy: 2009, 1901 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Battering Ram rotate: false - xy: 1616, 693 + xy: 1616, 709 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Battleship rotate: false - xy: 1616, 657 + xy: 1616, 673 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Bazooka rotate: false - xy: 1616, 621 + xy: 1616, 637 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Berber Cavalry rotate: false - xy: 1616, 585 + xy: 1616, 601 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Berserker rotate: false - xy: 1616, 549 + xy: 1616, 565 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Bowman rotate: false - xy: 1616, 513 + xy: 1616, 529 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Brute rotate: false - xy: 1616, 477 + xy: 1616, 493 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Camel Archer rotate: false - xy: 1616, 440 + xy: 1616, 456 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cannon rotate: false - xy: 1616, 404 + xy: 1616, 420 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Caravel rotate: false - xy: 1616, 368 + xy: 1616, 384 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Carolean rotate: false - xy: 1616, 332 + xy: 1616, 348 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Carrier rotate: false - xy: 1732, 1062 + xy: 1732, 1064 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cataphract rotate: false - xy: 1772, 1062 + xy: 1772, 1064 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Catapult rotate: false - xy: 1674, 1004 + xy: 742, 22 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cavalry rotate: false - xy: 822, 20 + xy: 862, 22 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Chariot Archer rotate: false - xy: 902, 20 + xy: 942, 22 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Chu-Ko-Nu rotate: false - xy: 942, 20 + xy: 982, 22 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -3282,966 +3275,980 @@ TileSets/FantasyHex/Units/Cruiser index: -1 TileSets/FantasyHex/Units/Destroyer rotate: false - xy: 1696, 946 + xy: 1610, 240 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Dromon rotate: false - xy: 1696, 910 + xy: 1656, 303 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Foreign Legion rotate: false - xy: 1696, 614 + xy: 1794, 992 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Frigate rotate: false - xy: 1696, 457 + xy: 1817, 1361 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Galleass rotate: false - xy: 1696, 349 + xy: 1817, 1253 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Galley rotate: false - xy: 1794, 1026 + xy: 1817, 1217 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Gatling Gun rotate: false - xy: 1794, 990 + xy: 1817, 1181 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Admiral rotate: false - xy: 1736, 756 + xy: 1897, 1341 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Artist rotate: false - xy: 1736, 720 + xy: 1937, 1376 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Engineer rotate: false - xy: 1736, 648 + xy: 1897, 1305 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Galleass rotate: false - xy: 1736, 612 + xy: 1937, 1340 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great General rotate: false - xy: 1736, 573 + xy: 1977, 1374 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Merchant rotate: false - xy: 1736, 537 + xy: 1897, 1269 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Musician rotate: false - xy: 1736, 501 + xy: 1937, 1304 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Prophet rotate: false - xy: 1736, 465 + xy: 1977, 1338 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Scientist rotate: false - xy: 1736, 429 + xy: 1897, 1233 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great War Infantry rotate: false - xy: 1736, 393 + xy: 1937, 1268 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Writer rotate: false - xy: 1736, 357 + xy: 1977, 1302 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hakkapeliitta rotate: false - xy: 1262, 12 + xy: 1897, 1197 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Helicopter Gunship rotate: false - xy: 1857, 1444 + xy: 1937, 1232 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hoplite rotate: false - xy: 1857, 1224 + xy: 1897, 1161 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Horse Archer rotate: false - xy: 1857, 1188 + xy: 1937, 1160 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Horseman rotate: false - xy: 1897, 1450 + xy: 1977, 1154 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hussar rotate: false - xy: 1897, 1377 + xy: 1973, 1117 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hwach'a rotate: false - xy: 1937, 1410 + xy: 1813, 1109 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Immortal rotate: false - xy: 1897, 1341 + xy: 1812, 1073 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Impi rotate: false - xy: 1937, 1374 + xy: 1893, 1089 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Infantry rotate: false - xy: 1937, 1338 + xy: 1852, 1066 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ironclad rotate: false - xy: 1897, 1269 + xy: 1932, 1048 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Jaguar rotate: false - xy: 1897, 1233 + xy: 1834, 1030 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Janissary rotate: false - xy: 1937, 1266 + xy: 1834, 994 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Keshik rotate: false - xy: 1897, 1197 + xy: 1874, 977 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Khan rotate: false - xy: 1937, 1227 + xy: 1914, 1009 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Knight rotate: false - xy: 1977, 1266 + xy: 1914, 973 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Kris Swordsman rotate: false - xy: 1937, 1191 + xy: 1342, 6 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Lancer rotate: false - xy: 1897, 1161 + xy: 1422, 6 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/LandUnit rotate: false - xy: 1857, 1152 + xy: 1462, 6 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Landship rotate: false - xy: 1977, 1156 + xy: 1502, 6 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Landsknecht rotate: false - xy: 1897, 1125 + xy: 1994, 1009 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Legion rotate: false - xy: 1937, 1111 + xy: 1542, 6 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Longbowman rotate: false - xy: 1977, 1120 + xy: 1582, 6 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Longswordsman rotate: false - xy: 1696, 313 + xy: 1622, 6 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Machine Gun rotate: false - xy: 1736, 321 + xy: 1954, 965 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mandekalu Cavalry rotate: false - xy: 1656, 303 + xy: 1994, 973 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Maori Warrior rotate: false - xy: 1610, 249 + xy: 1794, 956 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Marine rotate: false - xy: 1696, 277 + xy: 1914, 937 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mechanized Infantry rotate: false - xy: 1650, 231 + xy: 1714, 943 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mehal Sefari rotate: false - xy: 1648, 195 + xy: 1954, 929 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Merchant Of Venice rotate: false - xy: 1648, 159 + xy: 1994, 937 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Minuteman rotate: false - xy: 1776, 950 + xy: 1794, 920 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Missile Cruiser rotate: false - xy: 1776, 914 + xy: 1834, 911 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mobile SAM rotate: false - xy: 1776, 841 + xy: 1914, 901 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Modern Armor rotate: false - xy: 1776, 805 + xy: 1954, 893 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mohawk Warrior rotate: false - xy: 1776, 769 + xy: 1994, 901 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Musketeer rotate: false - xy: 1776, 651 + xy: 1696, 863 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Musketman rotate: false - xy: 1776, 615 + xy: 1696, 827 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Naresuan's Elephant rotate: false - xy: 1776, 579 + xy: 1696, 791 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Nau rotate: false - xy: 1776, 543 + xy: 1696, 755 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Norwegian Ski Infantry rotate: false - xy: 1776, 507 + xy: 1696, 719 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Panzer rotate: false - xy: 1696, 241 + xy: 1696, 463 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Paratrooper rotate: false - xy: 1736, 248 + xy: 1696, 427 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pathfinder rotate: false - xy: 1816, 954 + xy: 1696, 351 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Persian Immortal rotate: false - xy: 1816, 882 + xy: 1794, 884 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pictish Warrior rotate: false - xy: 1816, 846 + xy: 1834, 875 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pikeman rotate: false - xy: 1816, 810 + xy: 1874, 868 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pracinha rotate: false - xy: 1816, 394 + xy: 1736, 603 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Privateer rotate: false - xy: 1816, 358 + xy: 1736, 567 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Quinquereme rotate: false - xy: 1977, 1084 + xy: 1736, 423 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Rifleman rotate: false - xy: 1736, 212 + xy: 1736, 387 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Rocket Artillery rotate: false - xy: 1812, 1064 + xy: 1776, 772 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Samurai rotate: false - xy: 1853, 1080 + xy: 1776, 736 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Scout rotate: false - xy: 1893, 1089 + xy: 1776, 700 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Sea Beggar rotate: false - xy: 1933, 1075 + xy: 1776, 664 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Settler rotate: false - xy: 1893, 1052 + xy: 1776, 627 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ship of the Line rotate: false - xy: 1852, 1043 + xy: 1776, 514 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Siege Tower rotate: false - xy: 1834, 1007 + xy: 1776, 478 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Sipahi rotate: false - xy: 1856, 897 + xy: 1776, 332 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Slinger rotate: false - xy: 1856, 861 + xy: 1816, 839 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Spearman rotate: false - xy: 1856, 753 + xy: 1816, 731 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Submarine rotate: false - xy: 1856, 611 + xy: 1816, 589 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Swordsman rotate: false - xy: 1856, 503 + xy: 1816, 481 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Tank rotate: false - xy: 1856, 467 + xy: 1816, 445 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Tercio rotate: false - xy: 1856, 431 + xy: 1816, 409 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Trebuchet rotate: false - xy: 1856, 287 + xy: 1856, 796 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Trireme rotate: false - xy: 1856, 251 + xy: 1856, 760 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Turtle Ship rotate: false - xy: 1896, 735 + xy: 1856, 452 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/War Chariot rotate: false - xy: 1896, 663 + xy: 1856, 380 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/War Elephant rotate: false - xy: 1896, 627 + xy: 1856, 344 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Warrior rotate: false - xy: 1896, 591 + xy: 1896, 829 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/WaterUnit rotate: false - xy: 1896, 557 + xy: 1896, 795 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Winged Hussar rotate: false - xy: 1896, 341 + xy: 1896, 579 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Work Boats rotate: false - xy: 1896, 305 + xy: 1896, 543 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Worker rotate: false - xy: 1896, 269 + xy: 1896, 507 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 +TileSets/FantasyHex/road + rotate: false + xy: 1529, 1847 + size: 61, 11 + orig: 61, 11 + offset: 0, 0 + index: -1 +TileSets/Default/road + rotate: false + xy: 1529, 1847 + size: 61, 11 + orig: 61, 11 + offset: 0, 0 + index: -1 UnitPromotionIcons/Accuracy rotate: false - xy: 1816, 1806 + xy: 1816, 1808 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Air Repair rotate: false - xy: 1300, 164 + xy: 1300, 166 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Air Targeting rotate: false - xy: 1816, 1748 + xy: 1816, 1750 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting rotate: false - xy: 1816, 1748 + xy: 1816, 1750 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Ambush rotate: false - xy: 1816, 1632 + xy: 1816, 1634 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Amphibious rotate: false - xy: 1816, 1574 + xy: 1816, 1576 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Armor Plating rotate: false - xy: 220, 11 + xy: 220, 13 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage rotate: false - xy: 336, 11 + xy: 336, 13 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Besiege rotate: false - xy: 394, 11 + xy: 394, 13 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Siege rotate: false - xy: 394, 11 + xy: 394, 13 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Blitz rotate: false - xy: 452, 16 + xy: 452, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding Party rotate: false - xy: 510, 16 + xy: 510, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment rotate: false - xy: 568, 16 + xy: 568, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Charge rotate: false - xy: 626, 16 + xy: 626, 18 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal Raider rotate: false - xy: 818, 56 + xy: 818, 58 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Cover rotate: false - xy: 1050, 56 + xy: 1050, 58 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Discipline rotate: false - xy: 1050, 56 + xy: 1050, 58 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Drill rotate: false - xy: 1816, 1516 + xy: 1816, 1518 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Evasion rotate: false - xy: 1874, 1776 + xy: 1874, 1778 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Extended Range rotate: false - xy: 1874, 1718 + xy: 1874, 1720 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Operational Range rotate: false - xy: 1874, 1718 + xy: 1874, 1720 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Flight Deck rotate: false - xy: 1874, 1660 + xy: 1874, 1662 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Formation rotate: false - xy: 1932, 1718 + xy: 1932, 1720 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Great Generals rotate: false - xy: 1932, 1544 + xy: 1932, 1546 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Quick Study rotate: false - xy: 1932, 1544 + xy: 1932, 1546 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Haka War Dance rotate: false - xy: 1874, 1486 + xy: 1874, 1488 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Heal Instantly rotate: false - xy: 1932, 1486 + xy: 1932, 1488 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Indirect Fire rotate: false - xy: 1436, 278 + xy: 1436, 280 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Interception rotate: false - xy: 1436, 220 + xy: 1436, 222 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Logistics rotate: false - xy: 1494, 214 + xy: 1552, 216 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/March rotate: false - xy: 1358, 156 + xy: 1358, 100 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Medic rotate: false - xy: 1358, 98 + xy: 1340, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Mobility rotate: false - xy: 1643, 1424 + xy: 1585, 1310 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Morale rotate: false - xy: 1643, 1366 + xy: 1701, 1426 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Rejuvenation rotate: false - xy: 1398, 40 + xy: 1474, 158 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting rotate: false - xy: 1532, 98 + xy: 1514, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sentry rotate: false - xy: 1532, 98 + xy: 1514, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Shock rotate: false - xy: 1590, 156 + xy: 1590, 100 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Slinger Withdraw rotate: false - xy: 1590, 98 + xy: 1572, 42 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sortie rotate: false - xy: 1990, 1776 + xy: 1990, 1720 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Supply rotate: false - xy: 1990, 1602 + xy: 1990, 1546 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Survivalism rotate: false - xy: 1990, 1544 + xy: 1990, 1488 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Volley rotate: false - xy: 1755, 1134 + xy: 1616, 1078 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Wolfpack rotate: false - xy: 1616, 1018 + xy: 1674, 1078 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Woodsman rotate: false - xy: 1674, 1076 + xy: 1616, 962 size: 50, 50 orig: 50, 50 offset: 0, 0 diff --git a/android/assets/game.png b/android/assets/game.png index cc40335382..1c6a7ac04b 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/Civ V - Vanilla/Units.json b/android/assets/jsons/Civ V - Vanilla/Units.json index 6fae65f8cc..59a0dbbe10 100644 --- a/android/assets/jsons/Civ V - Vanilla/Units.json +++ b/android/assets/jsons/Civ V - Vanilla/Units.json @@ -37,7 +37,10 @@ "cost": 40, "obsoleteTech": "Metal Casting", "upgradesTo": "Swordsman", - "attackSound": "nonmetalhit" + "attackSound": "nonmetalhit", + "civilopediaText": [ + {"text": "This is your basic, club-swinging fighter."} + ] }, { "name": "Maori Warrior", diff --git a/core/src/com/unciv/models/ruleset/Nation.kt b/core/src/com/unciv/models/ruleset/Nation.kt index 41f0f4e20f..4eaaae3c3b 100644 --- a/core/src/com/unciv/models/ruleset/Nation.kt +++ b/core/src/com/unciv/models/ruleset/Nation.kt @@ -174,7 +174,7 @@ class Nation : INamed { textList += unit.name.tr() + " - " + "Replaces [${unit.replaces}], which is not found in the ruleset!".tr() } else { textList += unit.name.tr() - textList += " " + unit.getDescription(true).split("\n").joinToString("\n ") + textList += " " + unit.getDescription().split("\n").joinToString("\n ") } textList += "" diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index 9e37b0f217..c5e65dac96 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -7,8 +7,10 @@ import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.map.MapUnit import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.Unique -import com.unciv.models.stats.INamed import com.unciv.models.translations.tr +import com.unciv.models.stats.INamed +import com.unciv.ui.civilopedia.CivilopediaText +import com.unciv.ui.civilopedia.FormattedLine import com.unciv.ui.utils.Fonts import kotlin.math.pow @@ -16,7 +18,7 @@ import kotlin.math.pow /** This is the basic info of the units, as specified in Units.json, in contrast to MapUnit, which is a specific unit of a certain type that appears on the map */ -class BaseUnit : INamed, IConstruction { +class BaseUnit : INamed, IConstruction, CivilopediaText() { override lateinit var name: String var cost: Int = 0 @@ -52,36 +54,115 @@ class BaseUnit : INamed, IConstruction { return infoList.joinToString() } - fun getDescription(forPickerScreen: Boolean): String { - val sb = StringBuilder() + /** Generate description as multi-line string for Nation description addUniqueUnitsText and CityScreen addSelectedConstructionTable */ + fun getDescription(): String { + val lines = mutableListOf() for ((resource, amount) in getResourceRequirements()) { - if (amount == 1) sb.appendLine("Consumes 1 [$resource]".tr()) - else sb.appendLine("Consumes [$amount]] [$resource]".tr()) - } - if (!forPickerScreen) { - if (uniqueTo != null) sb.appendLine("Unique to [$uniqueTo], replaces [$replaces]".tr()) - else sb.appendLine("{Cost}: $cost".tr()) - if (requiredTech != null) sb.appendLine("Required tech: [$requiredTech]".tr()) - if (upgradesTo != null) sb.appendLine("Upgrades to [$upgradesTo]".tr()) - if (obsoleteTech != null) sb.appendLine("Obsolete with [$obsoleteTech]".tr()) + lines += if (amount == 1) "Consumes 1 [$resource]".tr() + else "Consumes [$amount] [$resource]".tr() } + var strengthLine = "" if (strength != 0) { - sb.append("$strength${Fonts.strength}, ") - if (rangedStrength != 0) sb.append("$rangedStrength${Fonts.rangedStrength}, ") - if (rangedStrength != 0) sb.append("$range${Fonts.range}, ") + strengthLine += "$strength${Fonts.strength}, " + if (rangedStrength != 0) + strengthLine += "$rangedStrength${Fonts.rangedStrength}, $range${Fonts.range}, " } - sb.appendLine("$movement${Fonts.movement}") + lines += "$strengthLine$movement${Fonts.movement}" - if (replacementTextForUniques != "") sb.appendLine(replacementTextForUniques) + if (replacementTextForUniques != "") lines += replacementTextForUniques else for (unique in uniques) - sb.appendLine(unique.tr()) + lines += unique.tr() if (promotions.isNotEmpty()) { - sb.append((if (promotions.size == 1) "Free promotion:" else "Free promotions:").tr()) - sb.appendLine(promotions.joinToString(", ", " ") { it.tr() }) + val prefix = "Free promotion${if (promotions.size == 1) "" else "s"}:".tr() + " " + lines += promotions.joinToString(", ", prefix) { it.tr() } } - return sb.toString().trim() + return lines.joinToString("\n") + } + + override fun getCivilopediaTextHeader() = FormattedLine(name, icon="Unit/$name", header=2) + override fun replacesCivilopediaDescription() = true + override fun hasCivilopediaTextLines() = true + override fun getCivilopediaTextLines(ruleset: Ruleset): List { + val textList = ArrayList() + + val stats = ArrayList() + if (strength != 0) stats += "$strength${Fonts.strength}" + if (rangedStrength != 0) { + stats += "$rangedStrength${Fonts.rangedStrength}" + stats += "$range${Fonts.range}" + } + if (movement != 0) stats += "$movement${Fonts.movement}" + if (cost != 0) stats += "{Cost}: $cost" + if (stats.isNotEmpty()) + textList += FormattedLine(stats.joinToString(", ")) + + if (replacementTextForUniques != "") { + textList += FormattedLine() + textList += FormattedLine(replacementTextForUniques) + } else if (uniques.isNotEmpty()) { + textList += FormattedLine() + for (uniqueObject in uniqueObjects.sortedBy { it.text }) { + if (uniqueObject.placeholderText == "Can construct []") { + val improvement = uniqueObject.params[0] + textList += FormattedLine(uniqueObject.text, link="Improvement/$improvement") + } else { + textList += FormattedLine(uniqueObject.text) + } + } + } + + val resourceRequirements = getResourceRequirements() + if (resourceRequirements.isNotEmpty()) { + textList += FormattedLine() + for ((resource, amount) in resourceRequirements) { + textList += FormattedLine( + if (amount == 1) "Consumes 1 [$resource]" else "Consumes [$amount] [$resource]", + link="Resource/$resource", color="#F42") + } + } + + if (uniqueTo != null) { + textList += FormattedLine() + textList += FormattedLine("Unique to [$uniqueTo],", link="Nation/$uniqueTo") + if (replaces != null) + textList += FormattedLine("replaces [$replaces]", link="Unit/$replaces", indent=1) + } + + if (requiredTech != null || upgradesTo != null || obsoleteTech != null) textList += FormattedLine() + if (requiredTech != null) textList += FormattedLine("Required tech: [$requiredTech]", link="Technology/$requiredTech") + if (upgradesTo != null) textList += FormattedLine("Upgrades to [$upgradesTo]", link="Unit/$upgradesTo") + if (obsoleteTech != null) textList += FormattedLine("Obsolete with [$obsoleteTech]", link="Technology/$obsoleteTech") + + if (promotions.isNotEmpty()) { + textList += FormattedLine() + promotions.withIndex().forEach { + textList += FormattedLine( + when { + promotions.size == 1 -> "{Free promotion:} " + it.index == 0 -> "{Free promotions:} " + else -> "" + } + "{${it.value}}" + + (if (promotions.size == 1 || it.index == promotions.size - 1) "" else ","), + link="Promotions/${it.value}", + indent=if(it.index==0) 0 else 1) + } + } + + val seeAlso = ArrayList() + for ((other, unit) in ruleset.units) { + if (unit.replaces == name || uniques.contains("[$name]") ) { + seeAlso += FormattedLine(other, link="Unit/$other", indent=1) + } + } + if (seeAlso.isNotEmpty()) { + textList += FormattedLine() + textList += FormattedLine("{See also}:") + textList += seeAlso + } + + return textList } fun getMapUnit(ruleset: Ruleset): MapUnit { diff --git a/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt b/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt index 8c86838bcc..5ccb6eab80 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt @@ -34,7 +34,7 @@ class CityScreenTileTable(private val cityScreen: CityScreen): Table() { val stats = selectedTile.getTileStats(city, city.civInfo) innerTable.pad(5f) - innerTable.add( MarkupRenderer.render(selectedTile.toMarkup(city.civInfo)) { + innerTable.add( MarkupRenderer.render(selectedTile.toMarkup(city.civInfo), noLinkImages = true) { // Sorry, this will leave the city screen UncivGame.Current.setScreen(CivilopediaScreen(city.civInfo.gameInfo.ruleSet, link = it)) } ) diff --git a/core/src/com/unciv/ui/cityscreen/ConstructionInfoTable.kt b/core/src/com/unciv/ui/cityscreen/ConstructionInfoTable.kt index b3b7834026..a8c2a29c8a 100644 --- a/core/src/com/unciv/ui/cityscreen/ConstructionInfoTable.kt +++ b/core/src/com/unciv/ui/cityscreen/ConstructionInfoTable.kt @@ -58,7 +58,7 @@ class ConstructionInfoTable(val city: CityInfo): Table() { val description: String = when (construction) { - is BaseUnit -> construction.getDescription(true) + is BaseUnit -> construction.getDescription() is Building -> construction.getDescription(true, city, city.civInfo.gameInfo.ruleSet) is PerpetualConstruction -> construction.description.replace("[rate]", "[${construction.getConversionRate(city)}]").tr() else -> "" // Should never happen diff --git a/core/src/com/unciv/ui/civilopedia/CivilopediaScreen.kt b/core/src/com/unciv/ui/civilopedia/CivilopediaScreen.kt index f0afdc9d41..6b62efcc18 100644 --- a/core/src/com/unciv/ui/civilopedia/CivilopediaScreen.kt +++ b/core/src/com/unciv/ui/civilopedia/CivilopediaScreen.kt @@ -93,7 +93,7 @@ class CivilopediaScreen( if (category !in categoryToButtons) return // defense against being passed a bad selector categoryToButtons[category]!!.color = Color.BLUE - if (category !in categoryToEntries) return // defense, allowing buggy panes to remain emtpy while others work + if (category !in categoryToEntries) return // defense, allowing buggy panes to remain empty while others work var entries = categoryToEntries[category]!! if (category != CivilopediaCategories.Difficulty) // this is the only case where we need them in order entries = entries.sortedBy { it.name.tr() } // Alphabetical order of localized names @@ -215,7 +215,7 @@ class CivilopediaScreen( .map { CivilopediaEntry( it.name, - it.getDescription(false), + "", CivilopediaCategories.Unit.getImage?.invoke(it.name, imageSize), (it as? ICivilopediaText).takeUnless { ct -> ct==null || ct.isCivilopediaTextEmpty() } ) @@ -253,7 +253,7 @@ class CivilopediaScreen( .map { CivilopediaEntry( it.key.replace("_", " "), - it.value.joinToString("\n\n") { line -> line.tr() }, + "", // CivilopediaCategories.Tutorial.getImage?.invoke(it.name, imageSize) flavour = SimpleCivilopediaText( sequenceOf(FormattedLine(extraImage = it.key)), @@ -317,6 +317,7 @@ class CivilopediaScreen( entrySplitPane.splitAmount = 0.3f entryTable.addActor(entrySplitPane) entrySplitPane.setFillParent(true) + entrySplitPane.pack() // ensure selectEntry has correct entrySelectScroll.height and maxY if (link.isEmpty() || '/' !in link) selectCategory(category) diff --git a/core/src/com/unciv/ui/civilopedia/CivilopediaText.kt b/core/src/com/unciv/ui/civilopedia/CivilopediaText.kt index 570f258dff..7065be6463 100644 --- a/core/src/com/unciv/ui/civilopedia/CivilopediaText.kt +++ b/core/src/com/unciv/ui/civilopedia/CivilopediaText.kt @@ -8,28 +8,59 @@ import com.badlogic.gdx.utils.Align import com.unciv.models.ruleset.Ruleset import com.unciv.models.stats.INamed import com.unciv.ui.utils.* +import kotlin.math.max + +/* Ideas: + * - Now we're using a Table container and inside one Table per line. Rendering order, in view of + * texture swaps, is per Group, as this goes by ZIndex and that is implemented as actual index + * into the parent's children array. So, we're SOL to get the number of texture switches down + * with this structure, as many lines will require at least 2 texture switches. + * We *could* instead try go for one big table with 4 columns (3 images, plus rest) + * and use colspan - then group all images separate from labels via ZIndex. To-Do later. + * - Do bold using Distance field fonts wrapped in something like [maltaisn/msdf-gdx](https://github.com/maltaisn/msdf-gdx) + * - Do strikethrough by stacking a line on top (as rectangle with background like the separator but thinner) + */ -/** Represents a text line with optional linking capability. +// Kdoc not using the @property syntax because Android Studio 4.2.2 renders those _twice_ +/** Represents a decorated text line with optional linking capability. + * A line can have [text] with optional [size], [color], [indent] or as [header]; + * and up to three icons: [link], [object][icon], [star][starred] in that order. * Special cases: + * - Standalone [image][extraImage] from atlas or from ExtraImages + * - A separator line ([separator]) * - Automatic external links (no [text] but [link] begins with a URL protocol) - * - * @param text Text to display. - * @param link Create link: Line gets a 'Link' icon and is linked to either - * an Unciv object (format `category/entryname`) or an external URL. - * @param extraImage Display an Image instead of text. Can be a path as understood by - * [ImageGetter.getImage] or the name of a png or jpg in ExtraImages. - * @param imageSize Width of the [extraImage], height is calculated preserving aspect ratio. Defaults to available width. - * @param header Header level. 1 means double text size and decreases from there. - * @param separator Renders a separator line instead of text. */ class FormattedLine ( + /** Text to display. */ val text: String = "", + /** Create link: Line gets a 'Link' icon and is linked to either + * an Unciv object (format `category/entryname`) or an external URL. */ val link: String = "", + /** Display an Unciv object's icon inline but do not link (format `category/entryname`). */ + val icon: String = "", + /** Display an Image instead of text, [sized][imageSize]. Can be a path as understood by + * [ImageGetter.getImage] or the name of a png or jpg in ExtraImages. */ val extraImage: String = "", + /** Width of the [extraImage], height is calculated preserving aspect ratio. Defaults to available width. */ val imageSize: Float = Float.NaN, + /** Text size, defaults to 18. Use [size] or [header] but not both. */ + val size: Int = Int.MIN_VALUE, + /** Header level. 1 means double text size and decreases from there. */ val header: Int = 0, + /** Indentation: 0 = text will follow icons with a little padding, + * 1 = aligned to a little more than 3 icons, each step above that adds 30f. */ + val indent: Int = 0, + /** Defines vertical padding between rows, defaults to 5f. */ + val padding: Float = Float.NaN, + /** Sets text color, accepts Java names or 6/3-digit web colors (e.g. #FFA040). */ + val color: String = "", + /** Renders a separator line instead of text. Can be combined only with [color] and [size] (line width, default 2) */ val separator: Boolean = false, + /** Decorates text with a star icon - if set, it receives the [color] instead of the text. */ + val starred: Boolean = false, + /** Centers the line (and turns off wrap) */ + val centered: Boolean = false ) { // Note: This gets directly deserialized by Json - please keep all attributes meant to be read // from json in the primary constructor parameters above. Everything else should be a fun(), @@ -53,31 +84,89 @@ class FormattedLine ( } } + /** Translates [centered] into [libGdx][Gdx] [Align] value */ + val align: Int by lazy {if (centered) Align.center else Align.left} + + private val iconToDisplay: String by lazy { + if (icon.isNotEmpty()) icon else if (linkType == LinkType.Internal) link else "" + } private val textToDisplay: String by lazy { if (text.isEmpty() && linkType == LinkType.External) link else text } - - /** Returns true if this formatted line will not display anything */ - fun isEmpty(): Boolean = text.isEmpty() && extraImage.isEmpty() && link.isEmpty() && !separator - /** Constants used by [FormattedLine] - * @property defaultSize Mirrors default text size as defined elsewhere - * @property headerSizes Array of text sizes to translate the [header] attribute + /** Retrieves the parsed [Color] corresponding to the [color] property (String)*/ + val displayColor: Color by lazy { parseColor() } + + /** Returns true if this formatted line will not display anything */ + fun isEmpty(): Boolean = text.isEmpty() && extraImage.isEmpty() && + !starred && icon.isEmpty() && link.isEmpty() + + /** Self-check to potentially support the mod checker + * @return `null` if no problems found, or multiline String naming problems. */ + @Suppress("unused") + fun unsupportedReason(): String? { + val reasons = sequence { + if (text.isNotEmpty() && separator) yield("separator and text are incompatible") + if (extraImage.isNotEmpty() && link.isNotEmpty()) yield("extraImage and other options except imageSize are incompatible") + if (header != 0 && size != Int.MIN_VALUE) yield("use either size or header but not both") + // ... + } + return reasons.joinToString { "\n" }.takeIf { it.isNotEmpty() } + } + + /** Constants used by [FormattedLine] */ companion object { + /** Mirrors default [text] size as used by [toLabel] */ const val defaultSize = 18 + /** Array of text sizes to translate the [header] attribute */ val headerSizes = arrayOf(defaultSize,36,32,27,24,21,15,12,9) // pretty arbitrary, yes + /** Default color for [text] _and_ icons */ val defaultColor: Color = Color.WHITE + /** Internal path to the [Link][link] image */ + const val linkImage = "OtherIcons/Link" + /** Internal path to the [Star][starred] image */ + const val starImage = "OtherIcons/Star" + /** Default inline icon size */ + const val minIconSize = 30f + /** Padding added to the right of each icon */ + const val iconPad = 5f + /** Padding distance per [indent] level */ + const val indentPad = 30f } /** Extension: determines if a [String] looks like a link understood by the OS */ private fun String.hasProtocol() = startsWith("http://") || startsWith("https://") || startsWith("mailto:") + /** Extension: determines if a section of a [String] is composed entirely of hex digits + * @param start starting index + * @param length length of section (if == 0 [isHex] returns `true`, if receiver too short [isHex] returns `false`) + */ + private fun String.isHex(start: Int, length: Int) = + when { + length == 0 -> false + start + length > this.length -> false + substring(start, start + length).all { it.isDigit() || it in 'a'..'f' || it in 'A'..'F' } -> true + else -> false + } + + /** Parse a json-supplied color string to [Color], defaults to [defaultColor]. */ + private fun parseColor(): Color { + if (color.isEmpty()) return defaultColor + if (color[0] == '#' && color.isHex(1,3)) { + if (color.isHex(1,6)) return Color.valueOf(color) + val hex6 = String(charArrayOf(color[1], color[1], color[2], color[2], color[3], color[3])) + return Color.valueOf(hex6) + } + return defaultColor + } + /** * Renders the formatted line as a scene2d [Actor] (currently always a [Table]) * @param labelWidth Total width to render into, needed to support wrap on Labels. + * @param noLinkImages Omit visual indicator that a line is linked. */ - fun render(labelWidth: Float): Actor { + fun render(labelWidth: Float, noLinkImages: Boolean = false): Actor { if (extraImage.isNotEmpty()) { val table = Table(CameraStageBaseScreen.skin) try { @@ -101,21 +190,70 @@ class FormattedLine ( val fontSize = when { header in headerSizes.indices -> headerSizes[header] - else -> defaultSize + size == Int.MIN_VALUE -> defaultSize + else -> size } + val labelColor = if(starred) defaultColor else displayColor + val table = Table(CameraStageBaseScreen.skin) + var iconCount = 0 + val iconSize = max(minIconSize, fontSize * 1.5f) + if (linkType != LinkType.None && !noLinkImages) { + table.add( ImageGetter.getImage(linkImage) ).size(iconSize).padRight(iconPad) + iconCount++ + } + if (!noLinkImages) + iconCount += renderIcon(table, iconToDisplay, iconSize) + if (starred) { + val image = ImageGetter.getImage(starImage) + image.color = displayColor + table.add(image).size(iconSize).padRight(iconPad) + iconCount++ + } if (textToDisplay.isNotEmpty()) { - val label = if (fontSize == defaultSize) textToDisplay.toLabel() - else textToDisplay.toLabel(defaultColor,fontSize) - label.wrap = labelWidth > 0f + val usedWidth = iconCount * (iconSize + iconPad) + val padIndent = when { + centered -> -usedWidth + indent == 0 && iconCount == 0 -> 0f + indent == 0 -> iconPad + else -> (indent-1) * indentPad + 3 * minIconSize + 4 * iconPad - usedWidth + } + val label = if (fontSize == defaultSize && labelColor == defaultColor) textToDisplay.toLabel() + else textToDisplay.toLabel(labelColor,fontSize) + label.wrap = !centered && labelWidth > 0f + label.setAlignment(align) if (labelWidth == 0f) table.add(label) + .padLeft(padIndent).align(align) else - table.add(label).width(labelWidth) + table.add(label).width(labelWidth - usedWidth - padIndent) + .padLeft(padIndent).align(align) } return table } + /** Place a RuleSet object icon. + * @return 1 if successful for easy counting + */ + private fun renderIcon(table: Table, iconToDisplay: String, iconSize: Float): Int { + // prerequisites: iconToDisplay has form "category/name", category can be mapped to + // a `CivilopediaCategories`, and that knows how to get an Image. + if (iconToDisplay.isEmpty()) return 0 + val parts = iconToDisplay.split('/', limit = 2) + if (parts.size != 2) return 0 + val category = CivilopediaCategories.fromLink(parts[0]) ?: return 0 + if (category.getImage == null) return 0 + + // That Enum custom property is a nullable reference to a lambda which + // in turn is allowed to return null. Sorry, but without `!!` the code + // won't compile and with we would get the incorrect warning. + @Suppress("UNNECESSARY_NOT_NULL_ASSERTION") + val image = category.getImage!!(parts[1], iconSize) ?: return 0 + + table.add(image).size(iconSize).padRight(iconPad) + return 1 + } + // Debug visualization only override fun toString(): String { return when { @@ -131,22 +269,28 @@ class FormattedLine ( /** Makes [renderer][render] available outside [ICivilopediaText] */ object MarkupRenderer { + /** Height of empty line (`FormattedLine()`) - about half a normal text line, independent of font size */ private const val emptyLineHeight = 10f + /** Default cell padding of non-empty lines */ private const val defaultPadding = 2.5f + /** Padding above a [separator][FormattedLine.separator] line */ private const val separatorTopPadding = 5f + /** Padding below a [separator][FormattedLine.separator] line */ private const val separatorBottomPadding = 15f /** * Build a Gdx [Table] showing [formatted][FormattedLine] [content][lines]. * - * @param lines The formatted content to render. * @param labelWidth Available width needed for wrapping labels and [centered][FormattedLine.centered] attribute. + * @param padding Default cell padding (default 2.5f) to control line spacing + * @param noLinkImages Flag to omit link images (but not linking itself) * @param linkAction Delegate to call for internal links. Leave null to suppress linking. */ fun render( lines: Collection, labelWidth: Float = 0f, padding: Float = defaultPadding, + noLinkImages: Boolean = false, linkAction: ((id: String) -> Unit)? = null ): Table { val skin = CameraStageBaseScreen.skin @@ -157,10 +301,11 @@ object MarkupRenderer { continue } if (line.separator) { - table.addSeparator().pad(separatorTopPadding, 0f, separatorBottomPadding, 0f) + table.addSeparator(line.displayColor, 1, if (line.size == Int.MIN_VALUE) 2f else line.size.toFloat()) + .pad(separatorTopPadding, 0f, separatorBottomPadding, 0f) continue } - val actor = line.render(labelWidth) + val actor = line.render(labelWidth, noLinkImages) if (line.linkType == FormattedLine.LinkType.Internal && linkAction != null) actor.onClick { linkAction(line.link) @@ -170,9 +315,9 @@ object MarkupRenderer { Gdx.net.openURI(line.link) } if (labelWidth == 0f) - table.add(actor).row() + table.add(actor).align(line.align).row() else - table.add(actor).width(labelWidth).row() + table.add(actor).width(labelWidth).align(line.align).row() } return table.apply { pack() } } diff --git a/core/src/com/unciv/ui/worldscreen/bottombar/TileInfoTable.kt b/core/src/com/unciv/ui/worldscreen/bottombar/TileInfoTable.kt index ff6489959a..c0ffab54f2 100644 --- a/core/src/com/unciv/ui/worldscreen/bottombar/TileInfoTable.kt +++ b/core/src/com/unciv/ui/worldscreen/bottombar/TileInfoTable.kt @@ -22,7 +22,7 @@ class TileInfoTable(private val viewingCiv :CivilizationInfo) : Table(CameraStag if (tile != null && (UncivGame.Current.viewEntireMapForDebug || viewingCiv.exploredTiles.contains(tile.position)) ) { add(getStatsTable(tile)) - add( MarkupRenderer.render(tile.toMarkup(viewingCiv), padding = 0f) { + add( MarkupRenderer.render(tile.toMarkup(viewingCiv), padding = 0f, noLinkImages = true) { UncivGame.Current.setScreen(CivilopediaScreen(viewingCiv.gameInfo.ruleSet, link = it)) } ).pad(5f) // For debug only!