diff --git a/android/Images/PolicyIcons/Aesthetics.png b/android/Images/PolicyIcons/Aesthetics.png new file mode 100644 index 0000000000..45d0791ecb Binary files /dev/null and b/android/Images/PolicyIcons/Aesthetics.png differ diff --git a/android/Images/PolicyIcons/Cultural Diplomacy.png b/android/Images/PolicyIcons/Cultural Diplomacy.png new file mode 100644 index 0000000000..dfc5d58d8b Binary files /dev/null and b/android/Images/PolicyIcons/Cultural Diplomacy.png differ diff --git a/android/Images/PolicyIcons/Educated Elite.png b/android/Images/PolicyIcons/Educated Elite.png new file mode 100644 index 0000000000..b26c069d8d Binary files /dev/null and b/android/Images/PolicyIcons/Educated Elite.png differ diff --git a/android/Images/PolicyIcons/Philantropy.png b/android/Images/PolicyIcons/Philantropy.png new file mode 100644 index 0000000000..d573f1005e Binary files /dev/null and b/android/Images/PolicyIcons/Philantropy.png differ diff --git a/android/Images/PolicyIcons/Scholasticism.png b/android/Images/PolicyIcons/Scholasticism.png new file mode 100644 index 0000000000..dfdaa04d30 Binary files /dev/null and b/android/Images/PolicyIcons/Scholasticism.png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index e8cf74c652..0881ab341a 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -6,21 +6,21 @@ filter: MipMapLinearLinear, MipMapLinearLinear repeat: none EmojiIcons/Gold rotate: false - xy: 328, 164 + xy: 386, 562 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Production rotate: false - xy: 502, 214 + xy: 560, 214 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Turn rotate: false - xy: 618, 258 + xy: 618, 200 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -370,14 +370,14 @@ NationIcons/The Ottomans index: -1 OtherIcons/Aircraft rotate: false - xy: 1616, 698 + xy: 1724, 806 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/BackArrow rotate: false - xy: 1940, 1593 + xy: 1508, 474 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -461,7 +461,7 @@ OtherIcons/DisbandUnit index: -1 OtherIcons/Down rotate: false - xy: 1674, 698 + xy: 1890, 914 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -622,322 +622,357 @@ OtherIcons/Triangle index: -1 OtherIcons/Up rotate: false - xy: 792, 432 + xy: 792, 374 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/whiteDot rotate: false - xy: 1112, 387 + xy: 190, 715 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 +PolicyIcons/Aesthetics + rotate: false + xy: 1508, 590 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 PolicyIcons/Aristocracy rotate: false - xy: 1940, 1651 + xy: 1508, 532 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Citizenship rotate: false - xy: 1940, 1245 + xy: 1940, 1187 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Civil Society rotate: false - xy: 1940, 1187 + xy: 1940, 1129 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Collective Rule rotate: false - xy: 1940, 1071 + xy: 1940, 1013 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Communism rotate: false - xy: 1940, 1013 + xy: 1566, 590 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Constitution rotate: false - xy: 1566, 590 + xy: 1566, 532 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 +PolicyIcons/Cultural Diplomacy + rotate: false + xy: 1674, 698 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Democracy rotate: false - xy: 1566, 474 + xy: 1782, 806 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 -PolicyIcons/Fascism +PolicyIcons/Educated Elite rotate: false xy: 328, 512 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 -PolicyIcons/Free Religion +PolicyIcons/Fascism rotate: false xy: 328, 338 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 +PolicyIcons/Free Religion + rotate: false + xy: 328, 164 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 PolicyIcons/Free Speech rotate: false - xy: 328, 280 + xy: 328, 106 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Thought rotate: false - xy: 328, 222 + xy: 328, 48 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Humanism rotate: false - xy: 386, 504 + xy: 444, 504 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Landed Elite rotate: false - xy: 502, 562 + xy: 502, 504 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Legalism rotate: false - xy: 386, 388 + xy: 560, 562 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mandate Of Heaven rotate: false - xy: 502, 504 + xy: 444, 388 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mercantilism rotate: false - xy: 444, 388 + xy: 386, 272 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Merchant Navy rotate: false - xy: 502, 446 + xy: 444, 330 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Meritocracy rotate: false - xy: 560, 504 + xy: 502, 388 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Militarism rotate: false - xy: 386, 272 + xy: 560, 446 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Caste rotate: false - xy: 444, 330 + xy: 386, 214 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Tradition rotate: false - xy: 502, 388 + xy: 444, 272 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Monarchy rotate: false - xy: 386, 214 + xy: 560, 388 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Nationalism rotate: false - xy: 560, 388 + xy: 502, 272 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Naval Tradition rotate: false - xy: 386, 156 + xy: 560, 330 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Oligarchy rotate: false - xy: 444, 214 + xy: 386, 98 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Organized Religion rotate: false - xy: 502, 272 + xy: 444, 156 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 +PolicyIcons/Philantropy + rotate: false + xy: 502, 214 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Planned Economy rotate: false - xy: 560, 330 + xy: 560, 272 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Police State rotate: false - xy: 386, 98 + xy: 444, 98 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Populism rotate: false - xy: 444, 156 + xy: 502, 156 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Professional Army rotate: false - xy: 560, 272 + xy: 502, 98 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Protectionism rotate: false - xy: 444, 98 + xy: 560, 156 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Reformation rotate: false - xy: 502, 98 + xy: 444, 40 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Representation rotate: false - xy: 560, 98 + xy: 560, 40 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Republic rotate: false - xy: 386, 40 + xy: 618, 490 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 +PolicyIcons/Scholasticism + rotate: false + xy: 618, 432 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scientific Revolution rotate: false - xy: 444, 40 + xy: 676, 490 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Secularism rotate: false - xy: 560, 40 + xy: 676, 432 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Socialism rotate: false - xy: 676, 490 + xy: 676, 374 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Sovereignty rotate: false - xy: 676, 432 + xy: 792, 490 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Theocracy rotate: false - xy: 676, 374 + xy: 734, 374 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Total War rotate: false - xy: 734, 432 + xy: 792, 432 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Trade Unions rotate: false - xy: 792, 490 + xy: 850, 490 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/United Front rotate: false - xy: 676, 316 + xy: 676, 258 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Universal Suffrage rotate: false - xy: 734, 374 + xy: 734, 316 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Warrior Code rotate: false - xy: 618, 200 + xy: 908, 490 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1189,7 +1224,7 @@ StatIcons/Happiness index: -1 StatIcons/InterceptRange rotate: false - xy: 386, 446 + xy: 386, 388 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1203,7 +1238,7 @@ StatIcons/Malcontent index: -1 StatIcons/Movement rotate: false - xy: 502, 330 + xy: 444, 214 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1224,14 +1259,14 @@ StatIcons/Production index: -1 StatIcons/Range rotate: false - xy: 502, 156 + xy: 560, 98 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/RangedStrength rotate: false - xy: 560, 214 + xy: 386, 40 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1259,7 +1294,7 @@ StatIcons/Specialist index: -1 StatIcons/Strength rotate: false - xy: 734, 490 + xy: 618, 258 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1924,42 +1959,42 @@ ImprovementIcons/Railroad index: -1 TileSets/Default/Tiles/River-Bottom rotate: false - xy: 1352, 170 + xy: 1112, 327 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-Bottom rotate: false - xy: 1352, 170 + xy: 1112, 327 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/Default/Tiles/River-BottomLeft rotate: false - xy: 1392, 386 + xy: 1112, 291 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-BottomLeft rotate: false - xy: 1392, 386 + xy: 1112, 291 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/Default/Tiles/River-BottomRight rotate: false - xy: 1392, 350 + xy: 1094, 255 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-BottomRight rotate: false - xy: 1392, 350 + xy: 1094, 255 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -2022,14 +2057,14 @@ TileSets/FantasyHex/Tiles/Ancient ruins-Jungle index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Sand rotate: false - xy: 792, 396 + xy: 734, 280 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Snow rotate: false - xy: 850, 454 + xy: 792, 338 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -2043,77 +2078,77 @@ TileSets/FantasyHex/Tiles/Ancient ruins2 index: -1 TileSets/FantasyHex/Tiles/Atoll rotate: false - xy: 1998, 1973 + xy: 152, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Bananas rotate: false - xy: 1872, 878 + xy: 1764, 770 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barbarian encampment rotate: false - xy: 792, 360 + xy: 1872, 878 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barbarian encampment-Snow rotate: false - xy: 618, 127 + xy: 734, 243 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Barringer Crater rotate: false - xy: 948, 512 + xy: 1006, 512 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cattle rotate: false - xy: 392, 4 + xy: 432, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cattle+Pasture rotate: false - xy: 1108, 508 + xy: 1166, 508 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cerro de Potosi rotate: false - xy: 472, 4 + xy: 512, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citadel rotate: false - xy: 1148, 505 + xy: 1206, 505 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citadel-Snow rotate: false - xy: 1188, 510 + xy: 1246, 510 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center rotate: false - xy: 1228, 505 + xy: 1948, 930 size: 32, 35 orig: 32, 35 offset: 0, 0 @@ -2134,826 +2169,826 @@ TileSets/FantasyHex/Tiles/City center-Classical era index: -1 TileSets/FantasyHex/Tiles/City center-Future era rotate: false - xy: 1948, 931 + xy: 1912, 872 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Industrial era rotate: false - xy: 1912, 873 + xy: 1624, 621 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Information era rotate: false - xy: 1624, 618 + xy: 1624, 577 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Medieval era rotate: false - xy: 1624, 578 + xy: 1624, 537 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Modern era rotate: false - xy: 1624, 536 + xy: 1624, 495 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Renaissance era rotate: false - xy: 1624, 496 + xy: 1980, 973 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City ruins rotate: false - xy: 592, 4 + xy: 1988, 937 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Coal rotate: false - xy: 676, 186 + xy: 850, 360 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Coast rotate: false - xy: 734, 244 + xy: 908, 418 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cotton rotate: false - xy: 1028, 476 + xy: 1046, 476 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Customs house rotate: false - xy: 1148, 462 + xy: 1166, 465 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Deer rotate: false - xy: 1188, 474 + xy: 1206, 469 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Deer+Camp rotate: false - xy: 1228, 469 + xy: 1246, 474 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert rotate: false - xy: 1624, 460 + xy: 1624, 459 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert+Farm rotate: false - xy: 832, 382 + xy: 774, 266 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert+Flood plains+Farm rotate: false - xy: 832, 346 + xy: 774, 230 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Dyes rotate: false - xy: 832, 274 + xy: 774, 158 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Dyes+Plantation rotate: false - xy: 658, 150 + xy: 832, 324 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/El Dorado rotate: false - xy: 658, 113 + xy: 832, 287 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fallout rotate: false - xy: 658, 70 + xy: 890, 375 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fish rotate: false - xy: 716, 208 + xy: 658, 92 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fishing Boats rotate: false - xy: 716, 172 + xy: 658, 56 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Flood plains rotate: false - xy: 890, 440 + xy: 948, 440 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Forest rotate: false - xy: 970, 436 + xy: 1028, 436 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fort rotate: false - xy: 1010, 435 + xy: 1068, 435 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fountain of Youth rotate: false - xy: 1050, 436 + xy: 716, 131 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Furs rotate: false - xy: 930, 404 + xy: 988, 404 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Furs+Camp rotate: false - xy: 970, 400 + xy: 1028, 400 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Gems rotate: false - xy: 698, 136 + xy: 814, 179 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Gold Ore rotate: false - xy: 698, 100 + xy: 814, 143 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grand Mesa rotate: false - xy: 698, 60 + xy: 1952, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland rotate: false - xy: 658, 34 + xy: 1992, 901 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Farm rotate: false - xy: 698, 24 + xy: 1952, 854 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Camp rotate: false - xy: 1090, 435 + xy: 1992, 862 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Deer+Camp rotate: false - xy: 1090, 396 + xy: 872, 321 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Furs+Camp rotate: false - xy: 872, 365 + xy: 872, 282 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Lumber mill rotate: false - xy: 912, 365 + xy: 854, 243 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Farm rotate: false - xy: 872, 329 + xy: 854, 207 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Camp rotate: false - xy: 872, 293 + xy: 854, 171 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Lumber mill rotate: false - xy: 912, 329 + xy: 854, 135 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Trading post rotate: false - xy: 912, 293 + xy: 1126, 442 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Jungle+Trading post rotate: false - xy: 1980, 973 + xy: 1166, 425 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/GrasslandForest rotate: false - xy: 1988, 934 + xy: 1206, 430 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Great Barrier Reef rotate: false - xy: 872, 257 + xy: 1326, 426 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Hill rotate: false - xy: 1170, 398 + xy: 894, 170 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillForest+Lumber mill rotate: false - xy: 1210, 397 + xy: 894, 134 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillMarbleQuarry rotate: false - xy: 1952, 895 + xy: 1246, 399 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillMine rotate: false - xy: 1992, 898 + xy: 1206, 394 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillStoneQuarry rotate: false - xy: 1952, 859 + xy: 1286, 390 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Horses rotate: false - xy: 738, 136 + xy: 1446, 387 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Horses+Pasture rotate: false - xy: 738, 96 + xy: 1486, 386 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ice rotate: false - xy: 1032, 363 + xy: 1606, 423 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Incense rotate: false - xy: 1032, 255 + xy: 1526, 365 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Incense+Plantation rotate: false - xy: 1072, 360 + xy: 1606, 351 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Iron rotate: false - xy: 1072, 288 + xy: 1606, 315 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ivory rotate: false - xy: 1112, 351 + xy: 1286, 354 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ivory+Camp rotate: false - xy: 1112, 315 + xy: 1326, 354 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Jungle rotate: false - xy: 778, 132 + xy: 1446, 347 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Krakatoa rotate: false - xy: 1152, 349 + xy: 1566, 292 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Lakes rotate: false - xy: 1152, 277 + xy: 1606, 279 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Landmark rotate: false - xy: 1192, 353 + xy: 1646, 415 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Manufactory rotate: false - xy: 1272, 350 + xy: 1998, 1662 size: 32, 39 orig: 32, 39 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Marble rotate: false - xy: 1272, 278 + xy: 1998, 1590 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Marsh rotate: false - xy: 1232, 216 + xy: 1998, 1517 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mine rotate: false - xy: 1272, 170 + xy: 1998, 1373 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Moai rotate: false - xy: 796, 172 + xy: 1998, 1264 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mount Fuji rotate: false - xy: 818, 26 + xy: 1998, 1118 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mountain rotate: false - xy: 1998, 1665 + xy: 1998, 1074 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oasis rotate: false - xy: 1998, 1449 + xy: 1090, 363 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ocean rotate: false - xy: 1998, 1413 + xy: 912, 332 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Offshore Platform rotate: false - xy: 1998, 1377 + xy: 912, 296 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oil rotate: false - xy: 1998, 1341 + xy: 952, 332 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oil well rotate: false - xy: 1998, 1305 + xy: 952, 296 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Old Faithful rotate: false - xy: 1998, 1265 + xy: 934, 256 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Pasture rotate: false - xy: 1998, 1153 + xy: 934, 144 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Pearls rotate: false - xy: 1998, 1081 + xy: 992, 292 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains rotate: false - xy: 1330, 426 + xy: 1072, 291 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Farm rotate: false - xy: 1370, 426 + xy: 974, 256 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Forest+Camp rotate: false - xy: 1410, 422 + xy: 974, 216 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Forest+Lumber mill rotate: false - xy: 1450, 422 + xy: 974, 176 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Jungle+Trading post rotate: false - xy: 1312, 386 + xy: 974, 136 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/PlainsForest rotate: false - xy: 1312, 346 + xy: 1014, 251 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/PlainsJungle rotate: false - xy: 1352, 386 + xy: 1054, 251 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation rotate: false - xy: 1312, 310 + xy: 1014, 215 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation+Bananas rotate: false - xy: 1352, 350 + xy: 1014, 179 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation+Cotton rotate: false - xy: 1312, 274 + xy: 1054, 215 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry rotate: false - xy: 1352, 278 + xy: 1054, 143 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry+Marble rotate: false - xy: 1312, 202 + xy: 934, 108 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry+Stone rotate: false - xy: 1352, 242 + xy: 974, 100 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Rock of Gibraltar rotate: false - xy: 1432, 382 + xy: 1094, 215 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sheep rotate: false - xy: 1432, 274 + xy: 1134, 182 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sheep+Pasture rotate: false - xy: 1392, 201 + xy: 1134, 142 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silk rotate: false - xy: 1392, 165 + xy: 1130, 370 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silk+Plantation rotate: false - xy: 1432, 165 + xy: 1014, 71 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silver rotate: false - xy: 1472, 386 + xy: 1054, 71 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Snow rotate: false - xy: 1472, 276 + xy: 1152, 334 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Snow+Farm rotate: false - xy: 1472, 240 + xy: 1152, 298 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Spices rotate: false - xy: 1472, 168 + xy: 1174, 226 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Spices+Plantation rotate: false - xy: 1512, 402 + xy: 1174, 190 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Stone rotate: false - xy: 1512, 366 + xy: 1174, 154 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sugar rotate: false - xy: 1512, 330 + xy: 1174, 118 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sugar+Plantation rotate: false - xy: 1512, 294 + xy: 1174, 82 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Terrace farm rotate: false - xy: 1552, 402 + xy: 1772, 730 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Trading post rotate: false - xy: 1552, 330 + xy: 1776, 694 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra rotate: false - xy: 1552, 222 + xy: 1816, 658 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Farm rotate: false - xy: 1552, 186 + xy: 1776, 622 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Camp rotate: false - xy: 1736, 659 + xy: 1816, 618 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Camp+Furs rotate: false - xy: 1512, 146 + xy: 1664, 618 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Deer+Camp rotate: false - xy: 1552, 146 + xy: 1664, 578 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Lumber mill rotate: false - xy: 1472, 128 + xy: 1664, 538 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/TundraForest rotate: false - xy: 1512, 106 + xy: 1664, 498 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Uranium rotate: false - xy: 1352, 134 + xy: 1686, 426 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Whales rotate: false - xy: 1664, 586 + xy: 1686, 282 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Whales+Fishing Boats rotate: false - xy: 1664, 550 + xy: 1686, 246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wheat rotate: false - xy: 1664, 514 + xy: 1844, 771 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wine rotate: false - xy: 1664, 478 + xy: 1852, 735 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wine+Plantation rotate: false - xy: 1844, 771 + xy: 1856, 699 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/TopBorder rotate: false - xy: 1552, 366 + xy: 1812, 730 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -2967,84 +3002,84 @@ TileSets/FantasyHex/Units/African Forest Elephant index: -1 TileSets/FantasyHex/Units/Anti-Aircraft Gun rotate: false - xy: 908, 512 + xy: 850, 396 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Anti-Tank Gun rotate: false - xy: 618, 164 + xy: 908, 454 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Archer rotate: false - xy: 676, 222 + xy: 966, 512 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Artillery rotate: false - xy: 734, 280 + xy: 618, 106 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Atlatlist rotate: false - xy: 152, 4 + xy: 676, 164 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Axe Thrower rotate: false - xy: 1656, 662 + xy: 1998, 1973 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ballista rotate: false - xy: 1764, 770 + xy: 1656, 662 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Battering Ram rotate: false - xy: 192, 4 + xy: 618, 70 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Battleship rotate: false - xy: 1998, 1937 + xy: 192, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Bazooka rotate: false - xy: 792, 324 + xy: 1998, 1937 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Berber Cavalry rotate: false - xy: 618, 91 + xy: 734, 207 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Berserker rotate: false - xy: 988, 512 + xy: 1046, 512 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -3065,14 +3100,14 @@ TileSets/FantasyHex/Units/Brute index: -1 TileSets/FantasyHex/Units/Camel Archer rotate: false - xy: 618, 54 + xy: 1998, 1864 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cannon rotate: false - xy: 1028, 512 + xy: 1086, 512 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -3086,56 +3121,56 @@ TileSets/FantasyHex/Units/Caravel index: -1 TileSets/FantasyHex/Units/Carolean rotate: false - xy: 1998, 1865 + xy: 1126, 512 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Carrier rotate: false - xy: 1068, 512 + xy: 312, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cataphract rotate: false - xy: 312, 4 + xy: 352, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Catapult rotate: false - xy: 352, 4 + xy: 392, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cavalry rotate: false - xy: 432, 4 + xy: 472, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Chariot Archer rotate: false - xy: 512, 4 + xy: 552, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Chu-Ko-Nu rotate: false - xy: 552, 4 + xy: 592, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/CivilianLandUnit rotate: false - xy: 850, 418 + xy: 792, 302 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -3156,588 +3191,588 @@ TileSets/FantasyHex/Units/Companion Cavalry index: -1 TileSets/FantasyHex/Units/Composite Bowman rotate: false - xy: 908, 476 + xy: 676, 128 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Conquistador rotate: false - xy: 948, 476 + xy: 966, 476 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cossack rotate: false - xy: 988, 476 + xy: 1006, 476 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Crossbowman rotate: false - xy: 1068, 476 + xy: 1086, 476 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cruiser rotate: false - xy: 1108, 474 + xy: 1126, 478 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Destroyer rotate: false - xy: 832, 310 + xy: 774, 194 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Dromon rotate: false - xy: 792, 288 + xy: 734, 171 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Foreign Legion rotate: false - xy: 930, 440 + xy: 988, 440 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Frigate rotate: false - xy: 890, 404 + xy: 948, 404 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Galleass rotate: false - xy: 1010, 399 + xy: 1068, 399 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Galley rotate: false - xy: 1050, 400 + xy: 814, 251 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Gatling Gun rotate: false - xy: 774, 252 + xy: 814, 215 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Admiral rotate: false - xy: 1130, 423 + xy: 1246, 435 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Artist rotate: false - xy: 1130, 387 + xy: 1286, 426 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Engineer rotate: false - xy: 912, 257 + xy: 1366, 426 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Galleass rotate: false - xy: 952, 364 + xy: 1406, 426 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great General rotate: false - xy: 952, 325 + xy: 1446, 423 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Merchant rotate: false - xy: 952, 289 + xy: 1108, 406 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Musician rotate: false - xy: 952, 253 + xy: 1486, 426 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Prophet rotate: false - xy: 992, 363 + xy: 1526, 438 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Scientist rotate: false - xy: 992, 327 + xy: 1566, 438 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great War Infantry rotate: false - xy: 992, 291 + xy: 698, 92 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Writer rotate: false - xy: 992, 255 + xy: 698, 56 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hakkapeliitta rotate: false - xy: 1188, 438 + xy: 894, 246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Helicopter Gunship rotate: false - xy: 1228, 433 + xy: 894, 210 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hoplite rotate: false - xy: 1992, 862 + xy: 1326, 390 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Horse Archer rotate: false - xy: 756, 208 + xy: 1366, 390 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Horseman rotate: false - xy: 756, 172 + xy: 1406, 390 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hussar rotate: false - xy: 738, 59 + xy: 1526, 401 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hwach'a rotate: false - xy: 738, 23 + xy: 1566, 402 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Immortal rotate: false - xy: 1032, 327 + xy: 1606, 387 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Impi rotate: false - xy: 1032, 291 + xy: 1566, 366 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Infantry rotate: false - xy: 1072, 324 + xy: 1566, 330 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ironclad rotate: false - xy: 1072, 252 + xy: 1246, 363 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Jaguar rotate: false - xy: 1112, 279 + xy: 1366, 354 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Janissary rotate: false - xy: 1112, 243 + xy: 1406, 354 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Keshik rotate: false - xy: 778, 96 + xy: 1486, 350 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Khan rotate: false - xy: 778, 57 + xy: 1526, 326 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Knight rotate: false - xy: 778, 21 + xy: 1486, 314 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Kris Swordsman rotate: false - xy: 1152, 313 + xy: 1526, 290 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Lancer rotate: false - xy: 1152, 241 + xy: 1566, 256 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/LandUnit rotate: false - xy: 1250, 397 + xy: 1606, 243 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Landship rotate: false - xy: 1192, 317 + xy: 1646, 379 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Landsknecht rotate: false - xy: 1232, 361 + xy: 1646, 343 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Legion rotate: false - xy: 1192, 281 + xy: 1646, 307 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Longbowman rotate: false - xy: 1232, 325 + xy: 1646, 271 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Longswordsman rotate: false - xy: 1192, 245 + xy: 1646, 235 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Machine Gun rotate: false - xy: 1232, 289 + xy: 738, 95 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mandekalu Cavalry rotate: false - xy: 1232, 253 + xy: 738, 59 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Maori Warrior rotate: false - xy: 1272, 314 + xy: 1998, 1626 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Marine rotate: false - xy: 1272, 242 + xy: 1998, 1554 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mechanized Infantry rotate: false - xy: 1192, 209 + xy: 1998, 1481 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mehal Sefari rotate: false - xy: 1272, 206 + xy: 1998, 1445 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Merchant Of Venice rotate: false - xy: 1232, 180 + xy: 1998, 1409 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Minuteman rotate: false - xy: 1508, 438 + xy: 1998, 1337 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Missile Cruiser rotate: false - xy: 1548, 438 + xy: 1998, 1301 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mobile SAM rotate: false - xy: 818, 136 + xy: 1998, 1228 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Modern Armor rotate: false - xy: 818, 100 + xy: 1998, 1192 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mohawk Warrior rotate: false - xy: 818, 64 + xy: 1998, 1156 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Musketeer rotate: false - xy: 1998, 1629 + xy: 1998, 1038 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Musketman rotate: false - xy: 1998, 1593 + xy: 930, 368 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Naresuan's Elephant rotate: false - xy: 1998, 1557 + xy: 970, 368 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Nau rotate: false - xy: 1998, 1521 + xy: 1010, 364 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Norwegian Ski Infantry rotate: false - xy: 1998, 1485 + xy: 1050, 363 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Panzer rotate: false - xy: 1998, 1229 + xy: 934, 220 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Paratrooper rotate: false - xy: 1998, 1193 + xy: 934, 184 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pathfinder rotate: false - xy: 1998, 1117 + xy: 992, 328 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Persian Immortal rotate: false - xy: 1998, 1045 + xy: 1032, 327 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pictish Warrior rotate: false - xy: 796, 216 + xy: 1072, 327 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pikeman rotate: false - xy: 1290, 426 + xy: 1032, 291 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pracinha rotate: false - xy: 1352, 314 + xy: 1014, 143 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Privateer rotate: false - xy: 1312, 238 + xy: 1054, 179 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Quinquereme rotate: false - xy: 1352, 206 + xy: 1014, 107 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Rifleman rotate: false - xy: 1312, 166 + xy: 1054, 107 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Rocket Artillery rotate: false - xy: 1392, 314 + xy: 1094, 179 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Samurai rotate: false - xy: 1432, 346 + xy: 1094, 143 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Scout rotate: false - xy: 1392, 278 + xy: 1094, 107 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Sea Beggar rotate: false - xy: 1432, 310 + xy: 1134, 255 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Settler rotate: false - xy: 1392, 241 + xy: 1134, 218 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ship of the Line rotate: false - xy: 1432, 237 + xy: 1134, 105 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Siege Tower rotate: false - xy: 1432, 201 + xy: 1992, 826 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Sipahi rotate: false - xy: 1472, 348 + xy: 1094, 69 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Slinger rotate: false - xy: 1472, 312 + xy: 1134, 69 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Spearman rotate: false - xy: 1472, 204 + xy: 1174, 262 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -3751,63 +3786,63 @@ TileSets/FantasyHex/Units/Submarine index: -1 TileSets/FantasyHex/Units/Swordsman rotate: false - xy: 1512, 258 + xy: 1736, 663 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Tank rotate: false - xy: 1512, 222 + xy: 1174, 46 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Tercio rotate: false - xy: 1512, 186 + xy: 1736, 627 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Trebuchet rotate: false - xy: 1552, 294 + xy: 1776, 658 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Trireme rotate: false - xy: 1552, 258 + xy: 1816, 694 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Turtle Ship rotate: false - xy: 1552, 110 + xy: 1664, 462 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/War Chariot rotate: false - xy: 1392, 129 + xy: 1686, 390 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/War Elephant rotate: false - xy: 1432, 129 + xy: 1686, 354 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Warrior rotate: false - xy: 1664, 622 + xy: 1686, 318 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -3821,21 +3856,21 @@ TileSets/FantasyHex/Units/WaterUnit index: -1 TileSets/FantasyHex/Units/Winged Hussar rotate: false - xy: 1704, 622 + xy: 1856, 663 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Work Boats rotate: false - xy: 1704, 586 + xy: 1856, 627 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Worker rotate: false - xy: 1704, 550 + xy: 1686, 210 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -3849,294 +3884,294 @@ UnitPromotionIcons/Accuracy index: -1 UnitPromotionIcons/Air Repair rotate: false - xy: 1508, 590 + xy: 1616, 698 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Ambush rotate: false - xy: 1724, 806 + xy: 1832, 914 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Amphibious rotate: false - xy: 1832, 914 + xy: 1940, 1651 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Armor Plating rotate: false - xy: 1508, 532 + xy: 1940, 1593 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage rotate: false - xy: 1508, 474 + xy: 1940, 1535 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Besiege rotate: false - xy: 1940, 1535 + xy: 1940, 1477 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Siege rotate: false - xy: 1940, 1535 + xy: 1940, 1477 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Blitz rotate: false - xy: 1940, 1477 + xy: 1940, 1419 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding Party rotate: false - xy: 1940, 1419 + xy: 1940, 1361 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment rotate: false - xy: 1940, 1361 + xy: 1940, 1303 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Charge rotate: false - xy: 1940, 1303 + xy: 1940, 1245 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal Raider rotate: false - xy: 1940, 1129 + xy: 1940, 1071 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Cover rotate: false - xy: 1566, 532 + xy: 1566, 474 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Discipline rotate: false - xy: 1566, 532 + xy: 1566, 474 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Drill rotate: false - xy: 1782, 806 + xy: 328, 570 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Evasion rotate: false - xy: 1890, 914 + xy: 328, 454 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Extended Range rotate: false - xy: 328, 570 + xy: 328, 396 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Operational Range rotate: false - xy: 328, 570 + xy: 328, 396 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Flight Deck rotate: false - xy: 328, 454 + xy: 328, 280 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Formation rotate: false - xy: 328, 396 + xy: 328, 222 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Great Generals rotate: false - xy: 328, 106 + xy: 386, 504 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Quick Study rotate: false - xy: 328, 106 + xy: 386, 504 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Haka War Dance rotate: false - xy: 328, 48 + xy: 444, 562 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Heal Instantly rotate: false - xy: 386, 562 + xy: 386, 446 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Indirect Fire rotate: false - xy: 444, 562 + xy: 502, 562 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Interception rotate: false - xy: 444, 504 + xy: 444, 446 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Logistics rotate: false - xy: 444, 446 + xy: 386, 330 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/March rotate: false - xy: 560, 562 + xy: 502, 446 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Medic rotate: false - xy: 386, 330 + xy: 560, 504 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Mobility rotate: false - xy: 560, 446 + xy: 502, 330 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Morale rotate: false - xy: 444, 272 + xy: 386, 156 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Rejuvenation rotate: false - xy: 560, 156 + xy: 502, 40 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting rotate: false - xy: 502, 40 + xy: 618, 374 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sentry rotate: false - xy: 502, 40 + xy: 618, 374 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Shock rotate: false - xy: 618, 490 + xy: 734, 490 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Slinger Withdraw rotate: false - xy: 618, 432 + xy: 618, 316 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sortie rotate: false - xy: 618, 374 + xy: 734, 432 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting rotate: false - xy: 618, 316 + xy: 676, 316 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting I (air) rotate: false - xy: 618, 316 + xy: 676, 316 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Volley rotate: false - xy: 850, 490 + xy: 850, 432 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Wolfpack rotate: false - xy: 676, 258 + xy: 618, 142 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Woodsman rotate: false - xy: 734, 316 + xy: 676, 200 size: 50, 50 orig: 50, 50 offset: 0, 0 diff --git a/android/assets/game.png b/android/assets/game.png index 20b9184070..ca4ba11e73 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/Civ V - Vanilla/Policies.json b/android/assets/jsons/Civ V - Vanilla/Policies.json index 22e8ef22f9..f0b6191c9c 100644 --- a/android/assets/jsons/Civ V - Vanilla/Policies.json +++ b/android/assets/jsons/Civ V - Vanilla/Policies.json @@ -135,7 +135,7 @@ },{ "name": "Piety", "era": "Classical era", - "uniques": ["+[15]% Production when constructing [Culture] buildings"], + "uniques": ["+[15]% Production when constructing [Culture] buildings", "Incompatible with [Rationalism]"], "policies": [ { "name": "Organized Religion", @@ -177,8 +177,15 @@ "uniques": ["Culture cost of adopting new Policies reduced by [10]%"] } ] - },/*{ - "name": "Patronage", + }, + { + "name": "Patronage ", + // Yes, there is a space behind this word, and yes, this is necessary + // This is, because at the time of writing there existed another policy called 'Patronage' that was recently deprecated + // It would, however, still be possible for save-files to contain this policy + // Therefore, we had to differentiate between these two, and this was the least intrusive way to do so + // NOTE: If you remove the space here, also remove the extra space between 'patronage' and 'complete' in the 'patronage complete' policy. + // Otherwise, weird stuff will happen. "era": "Classical era", "uniques": ["City-State Influence degrades [25]% slower"], "policies": [ @@ -196,14 +203,15 @@ }, { "name": "Scholasticism", - "uniques":["Allied City-States provide Science equal to [25]% of what they produce for themselves"], + "uniques":["Allied City-States provide [Science] equal to [25]% of what they produce for themselves"], "requires": ["Philantropy"], "row": 2, "column": 2 }, { "name": "Cultural Diplomacy", - "uniques": ["Quantity of Resources gifted by City-States increased by [100]%"], + "uniques": ["Quantity of Resources gifted by City-States increased by [100]%", + "Happiness from Luxury Resources gifted by City-States increased by [50]%"], "requires": ["Scholasticism"], "row": 3, "column": 2 @@ -211,14 +219,19 @@ { "name": "Educated Elite", "requires": ["Scholasticism","Aesthetics"], + "uniques": ["Allied City-States will occasionally gift Great People"], "row": 3, "column": 4 }, { - "name": "Patronage Complete" - } + "name": "Patronage Complete", + // This extra space is intentional, see above. + "uniques": ["Influence of all other civilizations with all city-states degrades [33]% faster", + "Triggers the following global alert: [Our influence with City-States has started dropping faster!]"] + // This triggers a global alert in the G&K game also, based on my memory of playing it + } ] - },*/ + }, { "name": "Commerce", "uniques": ["+[25]% [Gold] [in capital]"], @@ -269,7 +282,7 @@ { "name": "Rationalism", "era": "Renaissance era", - "uniques": ["+[15]% [Science] while the empire is happy"], + "uniques": ["+[15]% [Science] while the empire is happy", "Incompatible with [Piety]"], "policies": [ { "name": "Secularism", diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index ad2431b3d5..e153662639 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -483,6 +483,9 @@ Clearing a [forest] has created [amount] Production for [cityName] = The resistance in [cityName] has ended! = Our [name] took [tileDamage] tile damage and was destroyed = Our [name] took [tileDamage] tile damage = +[civName] has adopted the [policyName] policy = +An unknown civilization has adopted the [policyName] policy = +Our influence with City-States has started dropping faster! = # World Screen UI diff --git a/core/src/com/unciv/logic/civilization/CivInfoStats.kt b/core/src/com/unciv/logic/civilization/CivInfoStats.kt index 6886f50f38..db6d6a32ff 100644 --- a/core/src/com/unciv/logic/civilization/CivInfoStats.kt +++ b/core/src/com/unciv/logic/civilization/CivInfoStats.kt @@ -103,13 +103,26 @@ class CivInfoStats(val civInfo: CivilizationInfo) { statMap.add("City-States", cultureBonus) } - - if (otherCiv.isCityState() && otherCiv.getDiplomacyManager(civInfo.civName).relationshipLevel() >= RelationshipLevel.Ally) { - val sciencePercentage = civInfo - .getMatchingUniques("Allied City-States provide Science equal to []% of what they produce for themselves") - .sumBy { it.params[0].toInt() } - statMap.add("City-States", Stats().apply { science = otherCiv.statsForNextTurn.science * (sciencePercentage / 100f) }) - } + if (otherCiv.isCityState()) + for (unique in civInfo.getMatchingUniques("Allied City-States provide [] equal to []% of what they produce for themselves")) { + if (otherCiv.diplomacy[civInfo.civName]!!.matchesCityStateRelationshipFilter(unique.params[0]) && otherCiv.cities.isNotEmpty()) { + statMap.add( + "City-States", + Stats().add( + Stat.valueOf(unique.params[1]), + otherCiv.statsForNextTurn.get(Stat.valueOf(unique.params[1])) * unique.params[2].toFloat() / 100f + ) + ) + } + } + // Deprecated since 3.15.1 + if (otherCiv.isCityState() && otherCiv.getDiplomacyManager(civInfo.civName).relationshipLevel() >= RelationshipLevel.Ally) { + val sciencePercentage = civInfo + .getMatchingUniques("Allied City-States provide Science equal to []% of what they produce for themselves") + .sumBy { it.params[0].toInt() } + statMap.add("City-States", Stats().apply { science = otherCiv.statsForNextTurn.science * (sciencePercentage / 100f) }) + } + // } statMap["Transportation upkeep"] = Stats().apply { gold = -getTransportationUpkeep().toFloat() } @@ -147,9 +160,19 @@ class CivInfoStats(val civInfo: CivilizationInfo) { for (unique in civInfo.getMatchingUniques("+1 happiness from each type of luxury resource")) happinessPerUniqueLuxury += 1 // - statMap["Luxury resources"] = civInfo.getCivResources().map { it.resource } .count { it.resourceType === ResourceType.Luxury } * happinessPerUniqueLuxury + + val happinessBonusForCityStateProvidedLuxuries = + civInfo.getMatchingUniques("Happiness from Luxury Resources gifted by City-States increased by []%") + .map { it.params[0].toFloat() / 100f }.sum() + + val luxuriesProvidedByCityStates = + civInfo.getKnownCivs().filter { it.isCityState() && it.getAllyCiv() == civInfo.civName } + .map { it.getCivResources().map { res -> res.resource } }.flatten().count { it.resourceType === ResourceType.Luxury } + + statMap["City-State Luxuries"] = happinessBonusForCityStateProvidedLuxuries * luxuriesProvidedByCityStates * happinessPerUniqueLuxury + for (city in civInfo.cities) { // There appears to be a concurrency problem? In concurrent thread in ConstructionsTable.getConstructionButtonDTOs diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 220c265bbd..53f1d2edd2 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -14,6 +14,7 @@ import com.unciv.logic.map.MapUnit import com.unciv.logic.map.TileInfo import com.unciv.logic.trade.TradeEvaluation import com.unciv.logic.trade.TradeRequest +import com.unciv.models.metadata.GameSpeed import com.unciv.models.ruleset.* import com.unciv.models.ruleset.tile.ResourceSupplyList import com.unciv.models.ruleset.tile.ResourceType @@ -27,6 +28,7 @@ import java.util.* import kotlin.collections.ArrayList import kotlin.collections.HashMap import kotlin.math.roundToInt +import kotlin.math.min class CivilizationInfo { @@ -93,7 +95,7 @@ class CivilizationInfo { /** See DiplomacyManager.flagsCountdown to why not eEnum */ private var flagsCountdown = HashMap() - /** Arraylist instead of HashMap as there might be doubles + /** Arraylist instead of HashMap as there might be doubles * Pairs of Uniques and the amount of turns they are still active * If the counter reaches 0 at the end of a turn, it is removed immediately */ @@ -227,7 +229,7 @@ class CivilizationInfo { if (resource.resourceType == ResourceType.Strategic) { resourceModifier *= 1f + getMatchingUniques("Quantity of strategic resources produced by the empire +[]%") .map { it.params[0].toFloat() / 100f }.sum() - + // Deprecated since 3.15 if (hasUnique("Quantity of strategic resources produced by the empire increased by 100%")) { resourceModifier *= 2f @@ -386,7 +388,7 @@ class CivilizationInfo { * Returns a civilization caption suitable for greetings including player type info: * Like "Milan" if the nation is a city state, "Caesar of Rome" otherwise, with an added * " (AI)", " (Human - Hotseat)", or " (Human - Multiplayer)" if the game is multiplayer. - */ + */ fun getLeaderDisplayName(): String { val severalHumans = gameInfo.civilizations.count { it.playerType == PlayerType.Human } > 1 val online = gameInfo.gameParameters.isOnlineMultiplayer @@ -510,6 +512,7 @@ class CivilizationInfo { updateViewableTiles() // adds explored tiles so that the units will be able to perform automated actions better transients().updateCitiesConnectedToCapital() + turnStartFlags() for (city in cities) city.startTurn() for (unit in getCivUnits()) unit.startTurn() @@ -561,7 +564,7 @@ class CivilizationInfo { for (city in cities.toList()) { // a city can be removed while iterating (if it's being razed) so we need to iterate over a copy city.endTurn() } - + // Update turn counter for temporary uniques for (unique in temporaryUniques.toList()) { temporaryUniques.remove(unique) @@ -575,8 +578,34 @@ class CivilizationInfo { updateHasActiveGreatWall() } + private fun turnStartFlags() { + // This function may be too abstracted for what it currently does (only managing a single flag) + // But eh, it works. + for (flag in flagsCountdown.keys.toList()) { + + if (flag == CivFlags.cityStateGreatPersonGift.name) { + val cityStateAllies = getKnownCivs().filter { it.isCityState() && it.getAllyCiv() == civName }.count() + + if (cityStateAllies >= 1) flagsCountdown[flag] = flagsCountdown[flag]!! - 1 + + if (flagsCountdown[flag]!! < min(cityStateAllies, 10)) { + gainGreatPersonFromCityState() + flagsCountdown[flag] = turnsForGreatPersonFromCityState() + } + + continue + } + + if (flagsCountdown[flag]!! > 0) + flagsCountdown[flag] = flagsCountdown[flag]!! - 1 + + } + } + + fun addFlag(flag: String, count: Int) { flagsCountdown[flag] = count } + /** Modify gold by a given amount making sure it does neither overflow nor underflow. - * @param delta the amount to add (can be negative) + * @param delta the amount to add (can be negative) */ fun addGold(delta: Int) { // not using Long.coerceIn - this stays in 32 bits @@ -586,7 +615,7 @@ class CivilizationInfo { else -> gold + delta } } - + fun addStat(stat: Stat, amount: Int) { when (stat) { Stat.Culture -> policies.addCulture(amount) @@ -673,8 +702,8 @@ class CivilizationInfo { fun influenceGainedByGift(cityState: CivilizationInfo, giftAmount: Int): Int { var influenceGained = giftAmount / 10f - for (unique in cityState.getMatchingUniques("Gifts of Gold to City-States generate []% more Influence")) - influenceGained *= (100f + unique.params[0].toInt()) / 100 + for (unique in getMatchingUniques("Gifts of Gold to City-States generate []% more Influence")) + influenceGained *= 1f + unique.params[0].toFloat() / 100f return influenceGained.toInt() } @@ -713,6 +742,22 @@ class CivilizationInfo { addNotification("[${otherCiv.civName}] gave us a [${militaryUnit.name}] as gift near [${city.name}]!", locations, otherCiv.civName, militaryUnit.name) } + /** Gain a random great person from a random city state */ + private fun gainGreatPersonFromCityState() { + val givingCityState = getKnownCivs().filter { it.isCityState() && it.getAllyCiv() == civName}.random() + val giftedUnit = gameInfo.ruleSet.units.values.filter { it.isGreatPerson() }.random() + val cities = NextTurnAutomation.getClosestCities(this, givingCityState) + val placedUnit = placeUnitNearTile(cities.city1.location, giftedUnit.name) + if (placedUnit == null) return + val locations = LocationAction(listOf(placedUnit.getTile().position, cities.city2.location)) + addNotification( "[${givingCityState.civName}] gave us a [${giftedUnit.name}] as a gift!", locations, givingCityState.civName, giftedUnit.name) + } + + fun turnsForGreatPersonFromCityState(): Int = (40 + -2 + Random().nextInt(5)) * gameInfo.gameParameters.gameSpeed.modifier.toInt() + // There seems to be some randomness in the amount of turns between receiving each great person, + // but I have no idea what the actual lower and upper bound are, so this is just an approximation + + fun getAllyCiv() = allyCivName fun getProtectorCivs() : List { @@ -786,3 +831,7 @@ class CivilizationInfoPreview { var playerId = "" fun isPlayerCivilization() = playerType == PlayerType.Human } + +enum class CivFlags { + cityStateGreatPersonGift +} diff --git a/core/src/com/unciv/logic/civilization/PolicyManager.kt b/core/src/com/unciv/logic/civilization/PolicyManager.kt index a780cb8f3e..2c2313a0d7 100644 --- a/core/src/com/unciv/logic/civilization/PolicyManager.kt +++ b/core/src/com/unciv/logic/civilization/PolicyManager.kt @@ -4,6 +4,8 @@ import com.unciv.models.ruleset.Policy import com.unciv.models.ruleset.Unique import com.unciv.models.ruleset.UniqueMap import com.unciv.models.ruleset.UniqueTriggerActivation +import com.unciv.models.translations.equalsPlaceholderText +import com.unciv.models.translations.getPlaceholderParameters import kotlin.math.min import kotlin.math.pow import kotlin.math.roundToInt @@ -168,6 +170,14 @@ class PolicyManager { } } + for (unique in policy.uniques) { + if (unique == "Triggers a global alert") { + triggerGlobalAlerts(policy) + } else if (unique.equalsPlaceholderText("Triggers the following global alert: []")) { + triggerGlobalAlerts(policy, unique.getPlaceholderParameters()[0]) + } + } + for (unique in policy.uniqueObjects) UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo) @@ -238,4 +248,21 @@ class PolicyManager { } return freeBuildings } + + private fun triggerGlobalAlerts(policy: Policy, extraNotificationText: String = "") { + var extraNotificationTextCopy = extraNotificationText + if (extraNotificationText != "") { + extraNotificationTextCopy = "\n${extraNotificationText}" + } + for (civ in civInfo.gameInfo.civilizations) { + if (civ == civInfo) continue + val defaultNotificationText = + if (civ.getKnownCivs().contains(civInfo)) { + "[${civInfo.civName}] has adopted the [${policy.name}] policy" + } else { + "An unknown civilization has adopted the [${policy.name}] policy" + } + civ.addNotification("${defaultNotificationText}${extraNotificationTextCopy}", NotificationIcon.Culture) + } + } } diff --git a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt index 2528c03926..2d41d7c498 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt @@ -176,13 +176,25 @@ class DiplomacyManager() { } return 0 } + + fun matchesCityStateRelationshipFilter(filter: String): Boolean { + val relationshipLevel = relationshipLevel() + return when (filter) { + "Allied" -> relationshipLevel == RelationshipLevel.Ally + "Friendly" -> relationshipLevel == RelationshipLevel.Friend + "Enemy" -> relationshipLevel == RelationshipLevel.Enemy + "Unforgiving" -> relationshipLevel == RelationshipLevel.Unforgivable + "Neutral" -> relationshipLevel == RelationshipLevel.Neutral + else -> false + } + } // To be run from City-State DiplomacyManager, which holds the influence. Resting point for every major civ can be different. fun getCityStateInfluenceRestingPoint(): Float { var restingPoint = 0f for (unique in otherCiv().getMatchingUniques("Resting point for Influence with City-States is increased by []")) restingPoint += unique.params[0].toInt() - if(diplomaticStatus == DiplomaticStatus.Protector) restingPoint += 5 + if (diplomaticStatus == DiplomaticStatus.Protector) restingPoint += 5 return restingPoint } @@ -203,7 +215,13 @@ class DiplomacyManager() { } for (unique in otherCiv().getMatchingUniques("City-State Influence degrades []% slower")) - modifier *= (100f - unique.params[0].toInt()) / 100 + modifier *= 1f - unique.params[0].toFloat() / 100f + + for (civ in civInfo.gameInfo.civilizations.filter { it.isMajorCiv() && it != otherCiv()}) { + for (unique in civ.getMatchingUniques("Influence of all other civilizations with all city-states degrades []% faster")) { + modifier *= 1f + unique.params[0].toFloat() / 100f + } + } return max(0f, decrement) * max(0f, modifier) } @@ -243,7 +261,7 @@ class DiplomacyManager() { return goldPerTurnForUs } - fun sciencefromResearchAgreement() { + fun scienceFromResearchAgreement() { // https://forums.civfanatics.com/resources/research-agreements-bnw.25568/ val scienceFromResearchAgreement = min(totalOfScienceDuringRA, otherCivDiplomacy().totalOfScienceDuringRA) civInfo.tech.scienceFromResearchAgreements += scienceFromResearchAgreement @@ -288,7 +306,7 @@ class DiplomacyManager() { //endregion //region state-changing functions - fun removeUntenebleTrades() { + fun removeUntenableTrades() { for (trade in trades.toList()) { @@ -329,7 +347,7 @@ class DiplomacyManager() { fun nextTurn() { nextTurnTrades() - removeUntenebleTrades() + removeUntenableTrades() updateHasOpenBorders() nextTurnDiplomaticModifiers() nextTurnFlags() @@ -403,7 +421,7 @@ class DiplomacyManager() { when (flag) { DiplomacyFlags.ResearchAgreement.name -> { if (!otherCivDiplomacy().hasFlag(DiplomacyFlags.ResearchAgreement)) - sciencefromResearchAgreement() + scienceFromResearchAgreement() } // This is confusingly named - in fact, the civ that has the flag set is the MAJOR civ DiplomacyFlags.ProvideMilitaryUnit.name -> { diff --git a/core/src/com/unciv/models/ruleset/Unique.kt b/core/src/com/unciv/models/ruleset/Unique.kt index 6d2a7f93e4..908ceb2058 100644 --- a/core/src/com/unciv/models/ruleset/Unique.kt +++ b/core/src/com/unciv/models/ruleset/Unique.kt @@ -1,6 +1,7 @@ package com.unciv.models.ruleset import com.unciv.logic.city.CityInfo +import com.unciv.logic.civilization.CivFlags import com.unciv.logic.civilization.CivilizationInfo import com.unciv.models.stats.Stats import com.unciv.models.translations.getPlaceholderParameters @@ -104,6 +105,23 @@ object UniqueTriggerActivation { unit.promotions.addPromotion(promotion, isFree = true) } } + "Allied City-States will occasionally gift Great People" -> + civInfo.addFlag(CivFlags.cityStateGreatPersonGift.name, civInfo.turnsForGreatPersonFromCityState() / 2) + // The mechanics for granting great people are wonky, but basically the following happens: + // Based on the game speed, a timer with some amount of turns is set, 40 on regular speed + // Every turn, 1 is subtracted from this timer, as long as you have at least 1 city state ally + // So no, the number of city-state allies does not matter for this. You have a global timer for all of them combined. + // If the timer reaches the amount of city-state allies you have (or 10, whichever is lower), it is reset. + // You will then receive a random great person from a random city-state you are allied to + // The very first time after acquiring this policy, the timer is set to half of its normal value + // This is the basics, and apart from this, there is some randomness in the exact turn count, but I don't know how much + + // There is surprisingly little information findable online about this policy, and the civ 5 source files are + // also quite though to search through, so this might all be incorrect. + // For now this mechanic seems decent enough that this is fine. + + // Note that the way this is implemented now, this unique does NOT stack + // I could parametrize the [Allied], but eh. } } } \ No newline at end of file diff --git a/docs/Credits.md b/docs/Credits.md index 4c8fbdc2f2..cf58405ad9 100644 --- a/docs/Credits.md +++ b/docs/Credits.md @@ -320,6 +320,14 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Religion](https://thenounproject.com/term/religion/1307794/) By Ben Avery for Free Religion * [Flame](https://thenounproject.com/term/flame/633228/) By Ian Shoobridge for Mandate Of Heaven +### Patronage + +* Adapted from [Gold](https://thenounproject.com/term/gold/842351) by Aneeque Ahmed for Philantropy +* [Ornament](https://thenounproject.com/term/ornament/3945298) by Tommy Suhartomo for Aesthetics +* [Book Gift](https://thenounproject.com/term/book-gift/671626) by Wolf Böse for Scholasticism +* [agreement](https://thenounproject.com/term/agreement/1828960) by RomanP for Cultural Diplomacy +* [professor](https://thenounproject.com/term/professor/232239) by Andrew Doane for Educated Elite + ### Commerce * [Trade](https://thenounproject.com/term/trade/686718/) By Gregor Cresnar for Trade Unions