diff --git a/Credits.md b/Credits.md index 4fa762c751..0c2ab1d6ba 100644 --- a/Credits.md +++ b/Credits.md @@ -123,6 +123,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc * [korean palace](https://thenounproject.com/term/korean-palace/1797542/) By 1516 for Palace * [Obelisk](https://thenounproject.com/term/obelisk/749104/) By Eliricon for Monument * [Cross swords](https://thenounproject.com/term/cross-swords/965398/) By Creaticca Creative Agency for Barracks +* [Fortress](https://thenounproject.com/search/?q=fortress&i=146989) By Creative Stall for Krepost * [Paper](https://thenounproject.com/term/paper/1443472/) By anam * [Circus](https://thenounproject.com/term/circus/743734/) By Ralph Schmitzer * [Stonehenge](https://thenounproject.com/term/stonehenge/543289/) By icon 54 diff --git a/android/Images/BuildingIcons/Krepost.png b/android/Images/BuildingIcons/Krepost.png new file mode 100644 index 0000000000..1a401b8bb1 Binary files /dev/null and b/android/Images/BuildingIcons/Krepost.png differ diff --git a/android/Images/FlagIcons/Portuguese.png b/android/Images/FlagIcons/Portuguese.png new file mode 100644 index 0000000000..b8febf40c1 Binary files /dev/null and b/android/Images/FlagIcons/Portuguese.png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index 1f3b0bf326..eadafd93dd 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -6,511 +6,518 @@ filter: MipMapLinearLinear,MipMapLinearLinear repeat: none BuildingIcons/Angkor Wat rotate: false - xy: 1879, 1946 + xy: 1777, 1946 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Apollo Program rotate: false - xy: 383, 1744 + xy: 281, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Aqueduct rotate: false - xy: 485, 1744 + xy: 383, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Armory rotate: false - xy: 995, 1744 + xy: 893, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Bank rotate: false - xy: 583, 1642 + xy: 481, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Barracks rotate: false - xy: 889, 1642 + xy: 787, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Bazaar rotate: false - xy: 991, 1642 + xy: 889, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Broadcast Tower rotate: false - xy: 1195, 1642 + xy: 1199, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Burial Tomb rotate: false - xy: 1403, 1764 + xy: 1301, 1764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Castle rotate: false - xy: 1505, 1742 + xy: 132, 27 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Chichen Itza rotate: false - xy: 306, 1076 + xy: 1531, 1844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Circus rotate: false - xy: 306, 872 + xy: 1735, 1844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Circus Maximus rotate: false - xy: 306, 770 + xy: 1837, 1844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Colloseum rotate: false - xy: 334, 1234 + xy: 306, 946 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Cristo Redentor rotate: false - xy: 742, 1540 + xy: 436, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Eiffel Tower rotate: false - xy: 844, 1234 + xy: 640, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Factory rotate: false - xy: 1150, 1540 + xy: 538, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Forbidden Palace rotate: false - xy: 408, 1030 + xy: 946, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Forge rotate: false - xy: 408, 928 + xy: 742, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Granary rotate: false - xy: 612, 928 + xy: 1150, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hagia Sophia rotate: false - xy: 816, 928 + xy: 1252, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hanging Gardens rotate: false - xy: 918, 1030 + xy: 1252, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Harbor rotate: false - xy: 1020, 1132 + xy: 1252, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hermitage rotate: false - xy: 816, 826 + xy: 1252, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hospital rotate: false - xy: 1020, 928 + xy: 1705, 1640 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Hydro Plant rotate: false - xy: 1122, 1030 + xy: 1807, 1640 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Ironworks rotate: false - xy: 612, 724 + xy: 1354, 1132 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +BuildingIcons/Krepost + rotate: false + xy: 1456, 1334 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Library rotate: false - xy: 204, 667 + xy: 1558, 1334 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Lighthouse rotate: false - xy: 408, 622 + xy: 1660, 1436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Machu Pichu rotate: false - xy: 918, 622 + xy: 1864, 1538 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Market rotate: false - xy: 306, 566 + xy: 1864, 1436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Military Academy rotate: false - xy: 1122, 520 + xy: 1864, 1130 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Mint rotate: false - xy: 1252, 1234 + xy: 336, 333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Monastery rotate: false - xy: 1224, 1030 + xy: 336, 129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Monument rotate: false - xy: 1224, 928 + xy: 336, 27 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Museum rotate: false - xy: 1224, 622 + xy: 449, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/National College rotate: false - xy: 1399, 1662 + xy: 510, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Notre Dame rotate: false - xy: 1705, 1640 + xy: 612, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Nuclear Plant rotate: false - xy: 1909, 1640 + xy: 714, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Observatory rotate: false - xy: 1354, 1438 + xy: 510, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Opera House rotate: false - xy: 1326, 1132 + xy: 612, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Oxford University rotate: false - xy: 1326, 928 + xy: 816, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Palace rotate: false - xy: 1326, 826 + xy: 714, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Paper Maker rotate: false - xy: 1326, 724 + xy: 1020, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Porcelain Tower rotate: false - xy: 1428, 825 + xy: 1224, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Public School rotate: false - xy: 1428, 519 + xy: 1224, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Research Lab rotate: false - xy: 1762, 1538 + xy: 1632, 1028 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Booster rotate: false - xy: 1558, 1232 + xy: 1632, 824 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Cockpit rotate: false - xy: 1660, 1232 + xy: 1734, 824 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Engine rotate: false - xy: 1762, 1232 + xy: 1836, 824 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/SS Stasis Chamber rotate: false - xy: 1864, 1232 + xy: 1938, 1028 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Seaport rotate: false - xy: 1632, 1028 + xy: 488, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Sistine Chapel rotate: false - xy: 1530, 722 + xy: 794, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Solar Plant rotate: false - xy: 1734, 926 + xy: 896, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Spaceship Factory rotate: false - xy: 1836, 1028 + xy: 1100, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stable rotate: false - xy: 1836, 926 + xy: 1304, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stadium rotate: false - xy: 1632, 620 + xy: 1202, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stock Exchange rotate: false - xy: 1734, 620 + xy: 1406, 621 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stone Works rotate: false - xy: 1836, 620 + xy: 1610, 722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Stonehenge rotate: false - xy: 1530, 518 + xy: 1712, 722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Sydney Opera House rotate: false - xy: 1938, 1028 + xy: 1712, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Taj Mahal rotate: false - xy: 1938, 926 + xy: 1814, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Temple rotate: false - xy: 1938, 824 + xy: 1916, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Great Library rotate: false - xy: 1938, 722 + xy: 551, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Great Lighthouse rotate: false - xy: 1938, 620 + xy: 653, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Louvre rotate: false - xy: 1938, 518 + xy: 755, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Oracle rotate: false - xy: 143, 376 + xy: 857, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/The Pyramids rotate: false - xy: 245, 368 + xy: 959, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Theatre rotate: false - xy: 132, 172 + xy: 1163, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/University rotate: false - xy: 347, 418 + xy: 959, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Walls rotate: false - xy: 551, 418 + xy: 1163, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Windmill rotate: false - xy: 959, 418 + xy: 1469, 518 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Workshop rotate: false - xy: 347, 316 + xy: 1877, 518 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -550,163 +557,170 @@ FlagIcons/Italian orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Romanian +FlagIcons/Portuguese rotate: false xy: 204, 1438 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Russian +FlagIcons/Romanian rotate: false xy: 204, 1308 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Spanish +FlagIcons/Russian rotate: false xy: 204, 1178 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 +FlagIcons/Spanish + rotate: false + xy: 204, 1048 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 ImprovementIcons/Academy rotate: false - xy: 204, 973 + xy: 204, 843 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Ancient ruins rotate: false - xy: 1777, 1946 + xy: 1675, 1946 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Camp rotate: false - xy: 1633, 1844 + xy: 132, 333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City ruins rotate: false - xy: 334, 1438 + xy: 1607, 1742 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Customs house rotate: false - xy: 844, 1540 + xy: 538, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Farm rotate: false - xy: 946, 1234 + xy: 640, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fishing Boats rotate: false - xy: 1150, 1336 + xy: 640, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Landmark rotate: false - xy: 1122, 724 + xy: 1660, 1538 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Lumber mill rotate: false - xy: 714, 622 + xy: 1660, 1334 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Manufactory rotate: false - xy: 1020, 622 + xy: 1660, 1232 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Mine rotate: false - xy: 1252, 1438 + xy: 284, 537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Oil well rotate: false - xy: 1354, 1234 + xy: 714, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Plantation rotate: false - xy: 1428, 1029 + xy: 1020, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Quarry rotate: false - xy: 1558, 1538 + xy: 1326, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Railroad rotate: false - xy: 1660, 1538 + xy: 1428, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Railroad rotate: false - xy: 1660, 1538 + xy: 1428, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Road rotate: false - xy: 1762, 1334 + xy: 1836, 1028 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Trading post rotate: false - xy: 234, 266 + xy: 653, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/BackArrow rotate: false - xy: 277, 1590 + xy: 1981, 1996 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Banner rotate: false - xy: 787, 1642 + xy: 685, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -720,70 +734,70 @@ OtherIcons/Circle index: -1 OtherIcons/City rotate: false - xy: 334, 1540 + xy: 1505, 1742 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Crosshair rotate: false - xy: 640, 1336 + xy: 334, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DisbandUnit rotate: false - xy: 844, 1438 + xy: 436, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Fire rotate: false - xy: 1150, 1438 + xy: 844, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MenuIcon rotate: false - xy: 816, 520 + xy: 1558, 1130 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pentagon rotate: false - xy: 1456, 1539 + xy: 1122, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Shield rotate: false - xy: 1632, 926 + xy: 794, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Sleep rotate: false - xy: 1632, 824 + xy: 998, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Star rotate: false - xy: 245, 470 + xy: 551, 424 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 OtherIcons/Stop rotate: false - xy: 1632, 518 + xy: 1814, 722 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -804,504 +818,504 @@ OtherIcons/tileTableBackground index: -1 OtherIcons/whiteDot rotate: false - xy: 277, 1803 + xy: 182, 757 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 PolicyIcons/Aristocracy rotate: false - xy: 1981, 1996 + xy: 2, 16 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Citizenship rotate: false - xy: 334, 1182 + xy: 277, 1590 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Civil Society rotate: false - xy: 2, 16 + xy: 334, 1080 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Collective Rule rotate: false - xy: 1367, 468 + xy: 408, 774 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Constitution rotate: false - xy: 551, 366 + xy: 488, 570 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Democracy rotate: false - xy: 54, 16 + xy: 1571, 466 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Discipline rotate: false - xy: 603, 366 + xy: 54, 16 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Entrepreneurship rotate: false - xy: 655, 366 + xy: 1623, 466 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Facism rotate: false - xy: 707, 366 + xy: 1675, 466 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Religion rotate: false - xy: 759, 366 + xy: 1727, 466 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Speech rotate: false - xy: 811, 366 + xy: 1779, 466 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Thought rotate: false - xy: 863, 366 + xy: 1831, 466 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Humanism rotate: false - xy: 915, 366 + xy: 1883, 466 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Landed Elite rotate: false - xy: 967, 366 + xy: 1571, 414 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Legalism rotate: false - xy: 1019, 366 + xy: 1623, 414 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mandate Of Heaven rotate: false - xy: 1071, 366 + xy: 1675, 414 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mercantilism rotate: false - xy: 1123, 366 + xy: 1727, 414 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Meritocracy rotate: false - xy: 1175, 366 + xy: 1779, 414 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Militarism rotate: false - xy: 1227, 366 + xy: 1831, 414 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Caste rotate: false - xy: 1279, 366 + xy: 1883, 414 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Tradition rotate: false - xy: 1367, 416 + xy: 1966, 1588 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Monarchy rotate: false - xy: 551, 314 + xy: 1966, 1536 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Oligarchy rotate: false - xy: 603, 314 + xy: 1966, 1484 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Organized Religion rotate: false - xy: 655, 314 + xy: 1966, 1432 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Patronage rotate: false - xy: 707, 314 + xy: 1966, 1380 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Police State rotate: false - xy: 759, 314 + xy: 1966, 1328 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Populism rotate: false - xy: 811, 314 + xy: 1966, 1276 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Professional Army rotate: false - xy: 863, 314 + xy: 1966, 1224 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Protectionism rotate: false - xy: 915, 314 + xy: 1966, 1172 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Reformation rotate: false - xy: 967, 314 + xy: 1935, 466 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Representation rotate: false - xy: 1019, 314 + xy: 1935, 414 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Republic rotate: false - xy: 1071, 314 + xy: 1979, 568 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scientific Revolution rotate: false - xy: 1123, 314 + xy: 438, 383 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Secularism rotate: false - xy: 1175, 314 + xy: 438, 331 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Sovereignty rotate: false - xy: 1227, 314 + xy: 438, 279 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Theocracy rotate: false - xy: 1279, 314 + xy: 438, 227 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Total War rotate: false - xy: 1966, 1588 + xy: 438, 175 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Trade Unions rotate: false - xy: 1966, 1536 + xy: 438, 123 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Universal Suffrage rotate: false - xy: 1966, 1484 + xy: 438, 71 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Warrior Code rotate: false - xy: 1966, 1432 + xy: 490, 384 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ResourceIcons/Aluminum rotate: false - xy: 1675, 1946 + xy: 1573, 1946 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Bananas rotate: false - xy: 481, 1642 + xy: 379, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cattle rotate: false - xy: 1709, 1742 + xy: 234, 333 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Coal rotate: false - xy: 538, 1540 + xy: 1913, 1742 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cotton rotate: false - xy: 640, 1438 + xy: 334, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Deer rotate: false - xy: 640, 1234 + xy: 640, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Dyes rotate: false - xy: 946, 1540 + xy: 538, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Fish rotate: false - xy: 1048, 1234 + xy: 946, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Furs rotate: false - xy: 612, 1132 + xy: 946, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gems rotate: false - xy: 714, 1132 + xy: 946, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gold rotate: false - xy: 510, 826 + xy: 1048, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Horses rotate: false - xy: 918, 826 + xy: 1603, 1640 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Incense rotate: false - xy: 1020, 826 + xy: 1909, 1640 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Iron rotate: false - xy: 1122, 826 + xy: 1354, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Ivory rotate: false - xy: 714, 724 + xy: 1456, 1538 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Marble rotate: false - xy: 1122, 622 + xy: 1762, 1334 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Oil rotate: false - xy: 1354, 1336 + xy: 816, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Pearls rotate: false - xy: 1326, 520 + xy: 816, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sheep rotate: false - xy: 1530, 824 + xy: 590, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silk rotate: false - xy: 1734, 1028 + xy: 692, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silver rotate: false - xy: 1836, 1130 + xy: 896, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Spices rotate: false - xy: 1734, 824 + xy: 1100, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Stone rotate: false - xy: 1836, 722 + xy: 1508, 722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sugar rotate: false - xy: 1836, 518 + xy: 1508, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Uranium rotate: false - xy: 449, 418 + xy: 1061, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Whales rotate: false - xy: 755, 418 + xy: 1367, 519 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wheat rotate: false - xy: 857, 418 + xy: 1367, 417 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wine rotate: false - xy: 1061, 418 + xy: 1571, 518 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Acquire rotate: false - xy: 204, 769 + xy: 182, 639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/CityConnection rotate: false - xy: 436, 1540 + xy: 1709, 1742 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/City_Center_(Civ6) rotate: false - xy: 334, 1336 + xy: 1811, 1742 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1343,7 +1357,7 @@ StatIcons/Malcontent index: -1 StatIcons/Movement rotate: false - xy: 1224, 724 + xy: 386, 538 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1364,14 +1378,14 @@ StatIcons/Production index: -1 StatIcons/RangedStrength rotate: false - xy: 1558, 1334 + xy: 1530, 1028 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Resistance rotate: false - xy: 1660, 1334 + xy: 1632, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1385,490 +1399,490 @@ StatIcons/Science index: -1 StatIcons/Specialist rotate: false - xy: 1632, 722 + xy: 1202, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Strength rotate: false - xy: 1734, 518 + xy: 1916, 722 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Acoustics rotate: false - xy: 204, 871 + xy: 204, 741 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Agriculture rotate: false - xy: 1573, 1946 + xy: 182, 537 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Animal Husbandry rotate: false - xy: 281, 1744 + xy: 1879, 1946 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Pasture rotate: false - xy: 281, 1744 + xy: 1879, 1946 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archaeology rotate: false - xy: 587, 1744 + xy: 485, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archery rotate: false - xy: 791, 1744 + xy: 689, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Architecture rotate: false - xy: 893, 1744 + xy: 791, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Astronomy rotate: false - xy: 277, 1642 + xy: 1097, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Banking rotate: false - xy: 685, 1642 + xy: 583, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Biology rotate: false - xy: 1093, 1642 + xy: 991, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Bronze Working rotate: false - xy: 1301, 1764 + xy: 1195, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Calendar rotate: false - xy: 143, 478 + xy: 1403, 1764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chemistry rotate: false - xy: 1913, 1742 + xy: 234, 27 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 BuildingIcons/Medical Lab rotate: false - xy: 1913, 1742 + xy: 234, 27 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chivalry rotate: false - xy: 306, 974 + xy: 1633, 1844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Civil Service rotate: false - xy: 436, 1438 + xy: 1939, 1844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Combustion rotate: false - xy: 436, 1336 + xy: 306, 844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Compass rotate: false - xy: 640, 1540 + xy: 334, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Computers rotate: false - xy: 436, 1234 + xy: 334, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Construction rotate: false - xy: 538, 1336 + xy: 436, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Currency rotate: false - xy: 742, 1438 + xy: 436, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Dynamite rotate: false - xy: 742, 1234 + xy: 640, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Ecology rotate: false - xy: 844, 1336 + xy: 742, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Economics rotate: false - xy: 946, 1438 + xy: 436, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Education rotate: false - xy: 1048, 1540 + xy: 538, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Electricity rotate: false - xy: 946, 1336 + xy: 742, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Engineering rotate: false - xy: 1048, 1438 + xy: 844, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Fertilizer rotate: false - xy: 1048, 1336 + xy: 742, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Flight rotate: false - xy: 1150, 1234 + xy: 742, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Future Tech rotate: false - xy: 408, 826 + xy: 1048, 1438 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Guilds rotate: false - xy: 918, 1132 + xy: 1150, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Gunpowder rotate: false - xy: 714, 826 + xy: 1252, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Horseback Riding rotate: false - xy: 1020, 1030 + xy: 1399, 1662 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Industrialization rotate: false - xy: 1122, 928 + xy: 1354, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Iron Working rotate: false - xy: 408, 724 + xy: 1354, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Machinery rotate: false - xy: 816, 622 + xy: 1762, 1436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Masonry rotate: false - xy: 510, 520 + xy: 1864, 1334 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mass Media rotate: false - xy: 612, 520 + xy: 1864, 1232 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mathematics rotate: false - xy: 714, 520 + xy: 1456, 1130 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metal Casting rotate: false - xy: 918, 520 + xy: 1660, 1130 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metallurgy rotate: false - xy: 1020, 520 + xy: 1762, 1130 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Military Science rotate: false - xy: 1252, 1540 + xy: 284, 639 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mining rotate: false - xy: 1252, 1336 + xy: 347, 435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nanotechnology rotate: false - xy: 1297, 1642 + xy: 408, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Navigation rotate: false - xy: 1603, 1640 + xy: 408, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nuclear Fission rotate: false - xy: 1807, 1640 + xy: 510, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Optics rotate: false - xy: 1326, 1030 + xy: 918, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Particle Physics rotate: false - xy: 1326, 622 + xy: 918, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pharmaceuticals rotate: false - xy: 1456, 1437 + xy: 1020, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Philosophy rotate: false - xy: 1456, 1335 + xy: 918, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Physics rotate: false - xy: 1456, 1233 + xy: 1224, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Plastics rotate: false - xy: 1428, 927 + xy: 1326, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pottery rotate: false - xy: 1428, 723 + xy: 1122, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Printing Press rotate: false - xy: 1428, 621 + xy: 1326, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Radio rotate: false - xy: 1558, 1436 + xy: 1428, 1028 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Replacable Parts rotate: false - xy: 1660, 1436 + xy: 1530, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rifling rotate: false - xy: 1864, 1538 + xy: 1734, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Robotics rotate: false - xy: 1864, 1436 + xy: 1836, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rocketry rotate: false - xy: 1864, 1334 + xy: 1530, 824 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Sailing rotate: false - xy: 1530, 1130 + xy: 1938, 926 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Satellites rotate: false - xy: 1530, 1028 + xy: 1938, 824 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Scientific Theory rotate: false - xy: 1632, 1130 + xy: 488, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steam Power rotate: false - xy: 1734, 722 + xy: 1304, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steel rotate: false - xy: 1836, 824 + xy: 1406, 723 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/The Wheel rotate: false - xy: 132, 274 + xy: 1061, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Theology rotate: false - xy: 132, 70 + xy: 1265, 520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Trapping rotate: false - xy: 234, 164 + xy: 755, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Writing rotate: false - xy: 449, 316 + xy: 1469, 416 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1882,14 +1896,14 @@ TerrainIcons/CrosshatchHexagon index: -1 TerrainIcons/Flood plains rotate: false - xy: 408, 1132 + xy: 844, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Forest rotate: false - xy: 510, 1132 + xy: 1048, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1910,336 +1924,336 @@ TerrainIcons/HexagonBorder index: -1 TerrainIcons/Hill rotate: false - xy: 918, 928 + xy: 1297, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Jungle rotate: false - xy: 816, 724 + xy: 1456, 1436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Marsh rotate: false - xy: 408, 520 + xy: 1762, 1232 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Mountain rotate: false - xy: 1224, 826 + xy: 386, 640 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/Oasis rotate: false - xy: 1354, 1540 + xy: 612, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TerrainIcons/road rotate: false - xy: 1301, 1751 + xy: 488, 557 size: 61, 11 orig: 61, 11 offset: 0, 0 index: -1 UnitIcons/Archer rotate: false - xy: 689, 1744 + xy: 587, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Artillery rotate: false - xy: 1097, 1744 + xy: 995, 1744 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ballista rotate: false - xy: 379, 1642 + xy: 277, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Bowman rotate: false - xy: 1199, 1744 + xy: 1093, 1642 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Camel Archer rotate: false - xy: 1531, 1844 + xy: 143, 435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cannon rotate: false - xy: 1735, 1844 + xy: 132, 231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Caravel rotate: false - xy: 1837, 1844 + xy: 132, 129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Catapult rotate: false - xy: 1607, 1742 + xy: 245, 435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Cavalry rotate: false - xy: 1811, 1742 + xy: 234, 231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Chariot Archer rotate: false - xy: 1939, 1844 + xy: 234, 129 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Companion Cavalry rotate: false - xy: 538, 1438 + xy: 306, 742 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Crossbowman rotate: false - xy: 538, 1234 + xy: 538, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Destroyer rotate: false - xy: 742, 1336 + xy: 334, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Frigate rotate: false - xy: 510, 1030 + xy: 844, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Galleass rotate: false - xy: 510, 928 + xy: 1150, 1540 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Gatling Gun rotate: false - xy: 612, 1030 + xy: 844, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Artist rotate: false - xy: 714, 1030 + xy: 946, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Engineer rotate: false - xy: 816, 1132 + xy: 1048, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Merchant rotate: false - xy: 612, 826 + xy: 1150, 1336 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great Scientist rotate: false - xy: 714, 928 + xy: 1048, 1132 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Great War Infantry rotate: false - xy: 816, 1030 + xy: 1150, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Horseman rotate: false - xy: 1122, 1132 + xy: 1501, 1640 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Ironclad rotate: false - xy: 510, 724 + xy: 1354, 1234 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Knight rotate: false - xy: 918, 724 + xy: 1558, 1538 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Lancer rotate: false - xy: 1020, 724 + xy: 1558, 1436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Landship rotate: false - xy: 306, 668 + xy: 1456, 1232 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Longbowman rotate: false - xy: 510, 622 + xy: 1762, 1538 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Longswordsman rotate: false - xy: 612, 622 + xy: 1558, 1232 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Minuteman rotate: false - xy: 1224, 1132 + xy: 336, 231 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Musketeer rotate: false - xy: 1224, 520 + xy: 408, 1030 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Musketman rotate: false - xy: 1501, 1641 + xy: 1428, 825 size: 100, 99 orig: 100, 99 offset: 0, 0 index: -1 UnitIcons/Pikeman rotate: false - xy: 1428, 1131 + xy: 1122, 928 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Rifleman rotate: false - xy: 1762, 1436 + xy: 1734, 1028 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Scout rotate: false - xy: 1530, 926 + xy: 590, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Settler rotate: false - xy: 1734, 1130 + xy: 692, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Spearman rotate: false - xy: 1530, 620 + xy: 998, 622 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Swordsman rotate: false - xy: 1938, 1130 + xy: 1610, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Trebuchet rotate: false - xy: 234, 62 + xy: 857, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Trireme rotate: false - xy: 204, 1075 + xy: 204, 945 size: 100, 101 orig: 100, 101 offset: 0, 0 index: -1 UnitIcons/Warrior rotate: false - xy: 653, 418 + xy: 1265, 418 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Work Boats rotate: false - xy: 1163, 418 + xy: 1673, 518 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UnitIcons/Worker rotate: false - xy: 1265, 418 + xy: 1775, 518 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -2253,84 +2267,84 @@ UnitPromotionIcons/Accuracy_III_(Civ5) index: -1 UnitPromotionIcons/Accuracy_II_(Civ5) rotate: false - xy: 182, 738 + xy: 277, 1568 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Accuracy_I_(Civ5) rotate: false - xy: 277, 1568 + xy: 386, 1110 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage_III_(Civ5) rotate: false - xy: 386, 1212 + xy: 299, 1568 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage_II_(Civ5) rotate: false - xy: 182, 716 + xy: 386, 1088 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Barrage_I_(Civ5) rotate: false - xy: 299, 1568 + xy: 386, 1066 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Blitz_(Civ5) rotate: false - xy: 386, 1190 + xy: 1456, 1640 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding_Party_III_(Civ5) rotate: false - xy: 182, 694 + xy: 1478, 1640 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding_Party_II_(Civ5) rotate: false - xy: 182, 672 + xy: 143, 558 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Boarding_Party_I_(Civ5) rotate: false - xy: 182, 650 + xy: 1531, 1974 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment_III_(Civ5) rotate: false - xy: 1531, 1974 + xy: 1981, 1974 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment_II_(Civ5) rotate: false - xy: 347, 544 + xy: 408, 752 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Bombardment_I_(Civ5) rotate: false - xy: 1981, 1974 + xy: 460, 804 size: 20, 20 orig: 20, 20 offset: 0, 0 @@ -2344,56 +2358,56 @@ UnitPromotionIcons/Charge_(Civ5) index: -1 UnitPromotionIcons/Coastal_Raider_III_(Civ5) rotate: false - xy: 1331, 396 + xy: 2015, 1822 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal_Raider_II_(Civ5) rotate: false - xy: 2015, 1822 + xy: 1966, 1150 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Coastal_Raider_I_(Civ5) rotate: false - xy: 1966, 1410 + xy: 2018, 802 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Cover_II_(Civ5) rotate: false - xy: 182, 628 + xy: 1979, 546 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Cover_I_(Civ5) rotate: false - xy: 204, 645 + xy: 438, 49 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Drill_III_(Civ5) rotate: false - xy: 1531, 1952 + xy: 490, 362 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Drill_II_(Civ5) rotate: false - xy: 347, 522 + xy: 334, 1058 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Drill_I_(Civ5) rotate: false - xy: 369, 544 + xy: 1531, 1952 size: 20, 20 orig: 20, 20 offset: 0, 0 @@ -2414,119 +2428,119 @@ UnitPromotionIcons/Formation_I_(Civ5) index: -1 UnitPromotionIcons/Indirect_Fire_(Civ5) rotate: false - xy: 106, 24 + xy: 430, 752 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Logistics_(Civ5) rotate: false - xy: 106, 2 + xy: 460, 782 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/March_(Civ5) rotate: false - xy: 1331, 374 + xy: 106, 24 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Mobility_(Civ5) rotate: false - xy: 2015, 1800 + xy: 106, 2 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Range_(Civ5) rotate: false - xy: 1966, 1388 + xy: 2015, 1800 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting_III_(Civ5) rotate: false - xy: 1988, 1410 + xy: 1988, 1150 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting_II_(Civ5) rotate: false - xy: 182, 606 + xy: 2018, 780 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting_I_(Civ5) rotate: false - xy: 204, 623 + xy: 1979, 524 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Sentry_(Civ5) rotate: false - xy: 226, 645 + xy: 2001, 546 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Shock_III_(Civ5) rotate: false - xy: 369, 522 + xy: 438, 27 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Shock_II_(Civ5) rotate: false - xy: 2003, 1952 + xy: 460, 49 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Shock_I_(Civ5) rotate: false - xy: 1331, 352 + xy: 490, 340 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Siege_(Civ5) rotate: false - xy: 2015, 1778 + xy: 512, 362 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting_III_(Civ5) rotate: false - xy: 1966, 1366 + xy: 356, 1058 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting_II_(Civ5) rotate: false - xy: 1988, 1388 + xy: 2003, 1952 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting_I_(Civ5) rotate: false - xy: 182, 584 + xy: 2015, 1778 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 UnitPromotionIcons/Volley_(Civ5) rotate: false - xy: 204, 601 + xy: 2018, 758 size: 20, 20 orig: 20, 20 offset: 0, 0 diff --git a/android/assets/game.png b/android/assets/game.png index 0af84af627..b9ad0baf1d 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/Buildings.json b/android/assets/jsons/Buildings.json index 203b79ef33..1a4d0f3c13 100644 --- a/android/assets/jsons/Buildings.json +++ b/android/assets/jsons/Buildings.json @@ -97,6 +97,16 @@ maintenance:1, requiredTech:"Bronze Working" }, + { + name:"Krepost", + replaces:"Barracks", + uniqueTo:"Russia" + xpForNewUnits:15, + hurryCostModifier:25, + maintenance:1, + uniques:["Culture and Gold costs of acquiring new tiles reduced by 25% in this city"] // todo implement + requiredTech:"Bronze Working" + }, // Classical Era diff --git a/android/assets/jsons/Translations.json b/android/assets/jsons/Translations.json index df9ee76a60..7932a588bc 100644 --- a/android/assets/jsons/Translations.json +++ b/android/assets/jsons/Translations.json @@ -2583,36 +2583,6 @@ // Building unique abilities - "+1 Science Per 2 Population":{ - Italian:"+1 Scienza ogni 2 abitanti" - Russian:"+1 Наука за 2 населения" - French:"+1 Science par 2 Population" - Romanian:"+1 știință pe 2 persoane" - German:"+1 Erforschung pro 2 Bewohner" - Dutch:"+1 Wetenschap per 2 Populatie" - Spanish:"+1 Ciencia cada 2 habitantes" - Portuguese:"+1 Ciência a cada 2 habitantes" - } - "Worker construction increased 25%":{ - Italian:"+25% velocità costruzione lavoratori" - Russian:"Увеличивает на 25% скорость создания улучшений на клетках" - French:"La construction des travailleurs a augmenté de 25%" - Romanian:"Lucrările de construcție a crescut cu 25%" - German:"Arbeiterproduktion um 25% erhöht" - Dutch:"Werkerproducktie met 25% vehoogt" - Spanish:"+25% velocidad de construcción trabajador" - Portuguese:"Velocidade de construção dos trabalhadores aumentada em +25%" - } - "Provides 2 free workers":{ - Italian:"Offre 2 Lavoratori liberi" - Russian:"предоставляет 2 бесплатных рабочих" - French:"Fournit 2 travailleurs gratuits" - Romanian:"Oferă 2 lucrători liberi" - German:"Gibt 2 freie Arbeiter" - Dutch:"Geeft 2 gratis werkers" - Spanish:"Proporciona 2 trabajadores gratis" - Portuguese:"Proporciona 2 trabalhadores gratis" - } "Free Social Policy":{ Italian:"Politica sociale gratuita" Russian:"Бесплатный общественный институт" @@ -3262,7 +3232,10 @@ } - //civilisations + // Civilisations and uniques + "replaces":{// As in "Camel Archer replaces Knight", "Krepost replaces Barracks" + } + "Babylon":{ Italian:"Babilonia" Russian:"Вавилон" @@ -3303,6 +3276,8 @@ Spanish:"Inglaterra" Portuguese:"Inglaterra" } + "+2 movement for all naval units":{} + "France":{ Italian:"Francia" Russian:"Франция" @@ -3311,6 +3286,14 @@ Spanish:"Francia" Portuguese:"França" } + "Russia":{} + "Strategic Resources provide +1 Production, and Horses, Iron and Uranium Resources provide double quantity":{} + "Rome":{} + "Arabia":{} + "America":{} + "All land military units have +1 sight, 50% discount when purchasing tiles":{} + "Barbarians":{} + //Difficulty "Settler":{ @@ -3669,6 +3652,7 @@ Spanish:"Stonehenge" Portuguese:"Stonehenge" } + "Library":{ Italian:"Biblioteca" Russian:"Библиотека" @@ -3677,6 +3661,18 @@ Spanish:"Biblioteca" Portuguese:"Livraria" } + "+1 Science Per 2 Population":{ + Italian:"+1 Scienza ogni 2 abitanti" + Russian:"+1 Наука за 2 населения" + French:"+1 Science par 2 Population" + Romanian:"+1 știință pe 2 persoane" + German:"+1 Erforschung pro 2 Bewohner" + Dutch:"+1 Wetenschap per 2 Populatie" + Spanish:"+1 Ciencia cada 2 habitantes" + Portuguese:"+1 Ciência a cada 2 habitantes" + } + "Paper Maker":{} + "The Great Library":{ Italian:"Grande Biblioteca" Russian:"Великая Библиотека" @@ -3701,6 +3697,7 @@ Spanish:"Muros" Portuguese:"Muralhas" } + "The Pyramids":{ Italian:"Grandi Piramidi" Russian:"Пирамиды" @@ -3709,6 +3706,27 @@ Spanish:"Las Pirámides" Portuguese:"Pirâmides" } + "Worker construction increased 25%":{ + Italian:"+25% velocità costruzione lavoratori" + Russian:"Увеличивает на 25% скорость создания улучшений на клетках" + French:"La construction des travailleurs a augmenté de 25%" + Romanian:"Lucrările de construcție a crescut cu 25%" + German:"Arbeiterproduktion um 25% erhöht" + Dutch:"Werkerproducktie met 25% vehoogt" + Spanish:"+25% velocidad de construcción trabajador" + Portuguese:"Velocidade de construção dos trabalhadores aumentada em +25%" + } + "Provides 2 free workers":{ + Italian:"Offre 2 Lavoratori liberi" + Russian:"предоставляет 2 бесплатных рабочих" + French:"Fournit 2 travailleurs gratuits" + Romanian:"Oferă 2 lucrători liberi" + German:"Gibt 2 freie Arbeiter" + Dutch:"Geeft 2 gratis werkers" + Spanish:"Proporciona 2 trabajadores gratis" + Portuguese:"Proporciona 2 trabalhadores gratis" + } + "Barracks":{ Italian:"Caserma" Russian:"Казармы" @@ -3717,6 +3735,7 @@ Spanish:"Barracones" Portuguese:"Quartéis" } + "Krepost":{} // russian uique, transliterate this probably, this is a russian word "Temple":{ Italian:"Tempio" Russian:"Храм" @@ -3725,6 +3744,7 @@ Spanish:"Templo" Portuguese:"Templo" } + "Burial Tomb":{} "The Oracle":{ Italian:"Ooracolo" Russian:"Оракул" @@ -3799,6 +3819,7 @@ Spanish:"Mercado" Portuguese:"Mercado" } + "Bazaar":{}// Arabian unique - transliterate? "Monastery":{ Italian:"Monastero" Russian:"Монастырь" @@ -4337,6 +4358,7 @@ Spanish:"Caballero" Portuguese:"Cavaleiro" } + "Camel Archer":{} // Renaissance units "Caravel":{ @@ -4363,6 +4385,7 @@ French:"Mousquetaire" Portuguese:"Mosqueteiro" } + "Minuteman":{} "Frigate":{ Italian:"Fregata" French:"Frégate" @@ -4408,10 +4431,10 @@ // iron clad has 3 different tranlations to portuguese but i am not sure wich one to use } - // Modern units - // Are we suppossed to do these? + // Modern units (do these, yes) "Landship":{} "Great War Infantry":{} + "Destroyer":{} // Great units "Great Artist":{ diff --git a/core/src/com/unciv/logic/city/CityConstructions.kt b/core/src/com/unciv/logic/city/CityConstructions.kt index d346599da1..3d4d4f93a1 100644 --- a/core/src/com/unciv/logic/city/CityConstructions.kt +++ b/core/src/com/unciv/logic/city/CityConstructions.kt @@ -4,8 +4,8 @@ import com.badlogic.gdx.graphics.Color import com.unciv.logic.automation.Automation import com.unciv.models.gamebasics.Building import com.unciv.models.gamebasics.GameBasics +import com.unciv.models.gamebasics.tr import com.unciv.models.stats.Stats -import com.unciv.ui.utils.tr import com.unciv.ui.utils.withItem import com.unciv.ui.utils.withoutItem import java.util.* diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 84331a5a17..39131a2246 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -13,9 +13,9 @@ import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tech.TechEra import com.unciv.models.gamebasics.tile.ResourceType import com.unciv.models.gamebasics.tile.TileResource +import com.unciv.models.gamebasics.tr import com.unciv.models.stats.Stats import com.unciv.ui.utils.getRandom -import com.unciv.ui.utils.tr import java.util.* import kotlin.collections.ArrayList import kotlin.collections.HashMap diff --git a/core/src/com/unciv/logic/civilization/DiplomacyManager.kt b/core/src/com/unciv/logic/civilization/DiplomacyManager.kt index 33d270be47..e32da6fe16 100644 --- a/core/src/com/unciv/logic/civilization/DiplomacyManager.kt +++ b/core/src/com/unciv/logic/civilization/DiplomacyManager.kt @@ -6,7 +6,7 @@ import com.unciv.logic.trade.TradeType import com.unciv.models.Counter import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tile.TileResource -import com.unciv.ui.utils.tr +import com.unciv.models.gamebasics.tr enum class DiplomaticStatus{ Peace, diff --git a/core/src/com/unciv/logic/civilization/TechManager.kt b/core/src/com/unciv/logic/civilization/TechManager.kt index fba938e135..9e6af399b8 100644 --- a/core/src/com/unciv/logic/civilization/TechManager.kt +++ b/core/src/com/unciv/logic/civilization/TechManager.kt @@ -4,8 +4,8 @@ package com.unciv.logic.civilization import com.badlogic.gdx.graphics.Color import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tech.Technology +import com.unciv.models.gamebasics.tr import com.unciv.models.gamebasics.unit.BaseUnit -import com.unciv.ui.utils.tr import com.unciv.ui.utils.withItem import java.util.* diff --git a/core/src/com/unciv/logic/map/TileInfo.kt b/core/src/com/unciv/logic/map/TileInfo.kt index bb75f666ba..4b952f2660 100644 --- a/core/src/com/unciv/logic/map/TileInfo.kt +++ b/core/src/com/unciv/logic/map/TileInfo.kt @@ -6,8 +6,8 @@ import com.unciv.logic.city.CityInfo import com.unciv.logic.civilization.CivilizationInfo import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tile.* +import com.unciv.models.gamebasics.tr import com.unciv.models.stats.Stats -import com.unciv.ui.utils.tr import kotlin.math.abs open class TileInfo { diff --git a/core/src/com/unciv/logic/trade/TradeLogic.kt b/core/src/com/unciv/logic/trade/TradeLogic.kt index e8fbf23e9e..9ad3e9fb76 100644 --- a/core/src/com/unciv/logic/trade/TradeLogic.kt +++ b/core/src/com/unciv/logic/trade/TradeLogic.kt @@ -6,7 +6,7 @@ import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.DiplomaticStatus import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tile.ResourceType -import com.unciv.ui.utils.tr +import com.unciv.models.gamebasics.tr import kotlin.math.min import kotlin.math.sqrt diff --git a/core/src/com/unciv/models/gamebasics/Building.kt b/core/src/com/unciv/models/gamebasics/Building.kt index f3a54d9168..e5cbb07d8a 100644 --- a/core/src/com/unciv/models/gamebasics/Building.kt +++ b/core/src/com/unciv/models/gamebasics/Building.kt @@ -5,7 +5,6 @@ import com.unciv.logic.city.IConstruction import com.unciv.models.gamebasics.tech.Technology import com.unciv.models.stats.NamedStats import com.unciv.models.stats.Stats -import com.unciv.ui.utils.tr class Building : NamedStats(), IConstruction{ override val description: String diff --git a/core/src/com/unciv/models/gamebasics/Translations.kt b/core/src/com/unciv/models/gamebasics/Translations.kt index be1fbb7828..63e6933308 100644 --- a/core/src/com/unciv/models/gamebasics/Translations.kt +++ b/core/src/com/unciv/models/gamebasics/Translations.kt @@ -1,6 +1,7 @@ package com.unciv.models.gamebasics import com.badlogic.gdx.utils.JsonReader +import com.unciv.UnCivGame import java.util.* class Translations() : HashMap>(){ @@ -47,4 +48,59 @@ class Translations() : HashMap>(){ fun getLanguages(): List { return mutableListOf("English").apply { addAll(values.flatMap { it.keys }.distinct()) } } -} \ No newline at end of file + + companion object { + fun translateBonusOrPenalty(unique:String): String { + val regexResult = Regex("""(Bonus|Penalty) vs (.*) (\d*)%""").matchEntire(unique) + if(regexResult==null) return unique.tr() + else{ + val start = regexResult.groups[1]!!.value+" vs ["+regexResult.groups[2]!!.value+"]" + val translatedUnique = start.tr() + " "+ regexResult.groups[3]!!.value+"%" + return translatedUnique + } + } + } +} + + +fun String.tr(): String { + if(contains("[")){ // Placeholders! + /** + * I'm SURE there's an easier way to do this but I can't think of it =\ + * So what's all this then? + * Well, not all languages are like English. So say I want to say "work on Library has completed in Akkad", + * but in a completely different language like Japanese or German, + * It could come out "Akkad hast die worken onner Library gerfinishen" or whatever, + * basically, the order of the words in the sentance is not guaranteed. + * So to translate this, I give a sentence like "work on [building] has completed in [city]" + * and the german can put those placeholders where he wants, so "[city] hast die worken onner [building] gerfinishen" + * The string on which we call tr() will look like "work on [library] has completed in [Akkad]" + * We will find the german placeholder text, and replace the placeholders with what was filled in the text we got! + */ + + val squareBraceRegex = Regex("\\[(.*?)\\]") + val englishTranslationPlaceholder = GameBasics.Translations.keys + .firstOrNull { it.replace(squareBraceRegex,"[]") == replace(squareBraceRegex,"[]") } + if(englishTranslationPlaceholder==null || + !GameBasics.Translations[englishTranslationPlaceholder]!!.containsKey(UnCivGame.Current.settings.language)){ + // Translation placeholder doesn't exist for this language + return this.replace("[","").replace("]","") + } + + val termsInMessage = squareBraceRegex.findAll(this).map { it.groups[1]!!.value }.toMutableList() + val termsInTranslationPlaceholder = squareBraceRegex.findAll(englishTranslationPlaceholder).map { it.value }.toMutableList() + if(termsInMessage.size!=termsInTranslationPlaceholder.size) + throw Exception("Message $this has a different number of terms than the placeholder $englishTranslationPlaceholder!") + + var languageSpecificPlaceholder = GameBasics.Translations[englishTranslationPlaceholder]!![UnCivGame.Current.settings.language]!! + for(i in 0 until termsInMessage.size){ + languageSpecificPlaceholder = languageSpecificPlaceholder.replace(termsInTranslationPlaceholder[i], termsInMessage[i].tr()) + } + return languageSpecificPlaceholder.tr() + } + if(contains("{")){ // sentence + return Regex("\\{(.*?)\\}").replace(this) { it.groups[1]!!.value.tr() } + } + val translation = GameBasics.Translations.get(this, UnCivGame.Current.settings.language) // single word + return translation +} diff --git a/core/src/com/unciv/models/gamebasics/tech/Technology.kt b/core/src/com/unciv/models/gamebasics/tech/Technology.kt index e5fe591b5a..274e710071 100644 --- a/core/src/com/unciv/models/gamebasics/tech/Technology.kt +++ b/core/src/com/unciv/models/gamebasics/tech/Technology.kt @@ -3,7 +3,7 @@ package com.unciv.models.gamebasics.tech import com.unciv.UnCivGame import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.ICivilopedia -import com.unciv.ui.utils.tr +import com.unciv.models.gamebasics.tr import java.util.* class Technology : ICivilopedia { diff --git a/core/src/com/unciv/models/gamebasics/unit/BaseUnit.kt b/core/src/com/unciv/models/gamebasics/unit/BaseUnit.kt index d27104627c..7f946dc5a2 100644 --- a/core/src/com/unciv/models/gamebasics/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/gamebasics/unit/BaseUnit.kt @@ -6,8 +6,9 @@ import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.map.MapUnit import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.ICivilopedia +import com.unciv.models.gamebasics.Translations +import com.unciv.models.gamebasics.tr import com.unciv.models.stats.INamed -import com.unciv.ui.utils.tr // This is BaseUnit because Unit is already a base Kotlin class and to avoid mixing the two up class BaseUnit : INamed, IConstruction, ICivilopedia { @@ -35,16 +36,12 @@ class BaseUnit : INamed, IConstruction, ICivilopedia { return getDescription(false) } + + fun getShortDescription(): String { val infoList= mutableListOf() for(unique in uniques){ - val regexResult = Regex("""(Bonus|Penalty) vs (.*) (\d*)%""").matchEntire(unique) - if(regexResult==null) infoList += unique.tr() - else{ - val start = regexResult.groups[1]!!.value+" vs ["+regexResult.groups[2]!!.value+"]" - val translatedUnique = start.tr() + " "+ regexResult.groups[3]!!.value+"%" - infoList+=translatedUnique - } + infoList+=Translations.translateBonusOrPenalty(unique) } if(strength!=0) infoList += "{Strength}: $strength".tr() if(rangedStrength!=0) infoList += "{Ranged strength}: $rangedStrength".tr() diff --git a/core/src/com/unciv/models/stats/Stats.kt b/core/src/com/unciv/models/stats/Stats.kt index b69a6d2d3d..301e8779f9 100644 --- a/core/src/com/unciv/models/stats/Stats.kt +++ b/core/src/com/unciv/models/stats/Stats.kt @@ -1,6 +1,6 @@ package com.unciv.models.stats -import com.unciv.ui.utils.tr +import com.unciv.models.gamebasics.tr open class Stats() { diff --git a/core/src/com/unciv/ui/EmpireOverviewScreen.kt b/core/src/com/unciv/ui/EmpireOverviewScreen.kt index e368f32051..ca5b345fdb 100644 --- a/core/src/com/unciv/ui/EmpireOverviewScreen.kt +++ b/core/src/com/unciv/ui/EmpireOverviewScreen.kt @@ -14,6 +14,7 @@ import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.DiplomaticStatus import com.unciv.logic.trade.Trade import com.unciv.logic.trade.TradeOffersList +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.* import java.text.DecimalFormat import kotlin.math.roundToInt @@ -291,7 +292,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){ val civGroup = Table() val civGroupBackground = ImageGetter.getDrawable("OtherIcons/civTableBackground.png") - val label = Label(civ.civName, CameraStageBaseScreen.skin) + val label = Label(civ.civName.tr(), CameraStageBaseScreen.skin) if(playerKnows(civ)) { civGroup.background = civGroupBackground.tint(civ.getNation().getColor()) diff --git a/core/src/com/unciv/ui/LanguagePickerScreen.kt b/core/src/com/unciv/ui/LanguagePickerScreen.kt index efe51b0700..39c35e55ae 100644 --- a/core/src/com/unciv/ui/LanguagePickerScreen.kt +++ b/core/src/com/unciv/ui/LanguagePickerScreen.kt @@ -7,11 +7,11 @@ import com.badlogic.gdx.scenes.scene2d.ui.Skin import com.badlogic.gdx.scenes.scene2d.ui.Table import com.unciv.UnCivGame import com.unciv.models.gamebasics.GameBasics +import com.unciv.models.gamebasics.tr import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.enable import com.unciv.ui.utils.onClick -import com.unciv.ui.utils.tr class LanguageTable(val language:String,skin: Skin):Table(skin){ diff --git a/core/src/com/unciv/ui/NewGameScreen.kt b/core/src/com/unciv/ui/NewGameScreen.kt index 33c707f5e2..49c8e6c4c8 100644 --- a/core/src/com/unciv/ui/NewGameScreen.kt +++ b/core/src/com/unciv/ui/NewGameScreen.kt @@ -10,6 +10,8 @@ import com.unciv.GameStarter import com.unciv.logic.GameInfo import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.Nation +import com.unciv.models.gamebasics.Translations +import com.unciv.models.gamebasics.tr import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.utils.* import com.unciv.ui.worldscreen.WorldScreen @@ -35,7 +37,7 @@ class NewGameScreen: PickerScreen(){ init { pad(10f) background=ImageGetter.getBackground(nation.getColor().apply { a=0.5f }) - add(Label(nation.name, skin).apply { setFontColor(nation.getSecondaryColor())}).row() + add(Label(nation.name.tr(), skin).apply { setFontColor(nation.getSecondaryColor())}).row() add(Label(getUniqueLabel(nation), skin).apply { setWrap(true);setFontColor(nation.getSecondaryColor())}).width(width) onClick { newGameParameters.nation=nation.name; onClick() } touchable=Touchable.enabled @@ -46,7 +48,7 @@ class NewGameScreen: PickerScreen(){ val textList = ArrayList() if(nation.unique!=null) { - textList += nation.unique!! + textList += nation.unique!!.tr() textList += "" } @@ -58,7 +60,7 @@ class NewGameScreen: PickerScreen(){ val originalBuildingStatMap = originalBuilding.toHashMap() for (stat in building.toHashMap()) if (stat.value != originalBuildingStatMap[stat.key]) - textList += " "+stat.value.toInt() + " " + stat.key + " vs " + originalBuildingStatMap[stat.key]!!.toInt() + textList += " "+stat.key.toString().tr() +" "+stat.value.toInt() + " vs " + originalBuildingStatMap[stat.key]!!.toInt() for(unique in building.uniques.filter { it !in originalBuilding.uniques }) textList += " "+unique.tr() if (building.maintenance != originalBuilding.maintenance) @@ -72,7 +74,7 @@ class NewGameScreen: PickerScreen(){ textList += unit.name.tr() + " - {replaces} " + originalUnit.name.tr() if (unit.strength != originalUnit.strength) - textList += " {Combat strength} " + unit.strength + " vs " + originalUnit.strength + textList += " {Strength} " + unit.strength + " vs " + originalUnit.strength if (unit.rangedStrength!= originalUnit.rangedStrength) textList+= " {Ranged strength} " + unit.rangedStrength+ " vs " + originalUnit.rangedStrength if (unit.range!= originalUnit.range) @@ -81,7 +83,7 @@ class NewGameScreen: PickerScreen(){ textList+= " {Movement} " + unit.movement+ " vs " + originalUnit.movement val newUniques = unit.uniques.filterNot { it in originalUnit.uniques } if(newUniques.isNotEmpty()) - textList+=" {Uniques}: "+newUniques.joinToString() + textList+=" {Uniques}: "+newUniques.joinToString{ Translations.translateBonusOrPenalty(it)} textList+="" } diff --git a/core/src/com/unciv/ui/VictoryScreen.kt b/core/src/com/unciv/ui/VictoryScreen.kt index 86b6d0bcc8..9783ee412c 100644 --- a/core/src/com/unciv/ui/VictoryScreen.kt +++ b/core/src/com/unciv/ui/VictoryScreen.kt @@ -5,10 +5,10 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.unciv.UnCivGame import com.unciv.models.gamebasics.GameBasics +import com.unciv.models.gamebasics.tr import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.utils.enable import com.unciv.ui.utils.onClick -import com.unciv.ui.utils.tr class VictoryScreen : PickerScreen() { diff --git a/core/src/com/unciv/ui/cityscreen/BuildingsTable.kt b/core/src/com/unciv/ui/cityscreen/BuildingsTable.kt index 718502183a..fb04f4c44f 100644 --- a/core/src/com/unciv/ui/cityscreen/BuildingsTable.kt +++ b/core/src/com/unciv/ui/cityscreen/BuildingsTable.kt @@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.* import com.badlogic.gdx.utils.Align import com.unciv.logic.city.CityInfo import com.unciv.models.gamebasics.Building +import com.unciv.models.gamebasics.tr import com.unciv.models.stats.Stat import com.unciv.models.stats.Stats import com.unciv.ui.utils.* diff --git a/core/src/com/unciv/ui/cityscreen/CityScreen.kt b/core/src/com/unciv/ui/cityscreen/CityScreen.kt index d8b29282d0..7c60f66ef8 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreen.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreen.kt @@ -9,6 +9,7 @@ import com.unciv.UnCivGame import com.unciv.logic.HexMath import com.unciv.logic.city.CityInfo import com.unciv.logic.map.TileInfo +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.* import java.util.* diff --git a/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt b/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt index 62767f2333..991bb5ff77 100644 --- a/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityStatsTable.kt @@ -9,6 +9,7 @@ import com.badlogic.gdx.utils.Align import com.unciv.UnCivGame import com.unciv.logic.city.SpecialConstruction import com.unciv.models.gamebasics.Building +import com.unciv.models.gamebasics.tr import com.unciv.ui.pickerscreens.ConstructionPickerScreen import com.unciv.ui.utils.* import java.util.* diff --git a/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt index 118b08785f..d7d1b9c989 100644 --- a/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/ConstructionPickerScreen.kt @@ -7,11 +7,11 @@ import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup import com.unciv.logic.city.CityInfo import com.unciv.logic.city.SpecialConstruction import com.unciv.models.gamebasics.GameBasics +import com.unciv.models.gamebasics.tr import com.unciv.ui.cityscreen.CityScreen import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.onClick import com.unciv.ui.utils.setFontColor -import com.unciv.ui.utils.tr class ConstructionPickerScreen(val city: CityInfo) : PickerScreen() { private var selectedProduction: String? = null diff --git a/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt index 4f6cb6ea13..350ec79a59 100644 --- a/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/ImprovementPickerScreen.kt @@ -7,10 +7,10 @@ import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup import com.unciv.logic.map.TileInfo import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tile.TileImprovement +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.onClick import com.unciv.ui.utils.setFontColor -import com.unciv.ui.utils.tr class ImprovementPickerScreen(tileInfo: TileInfo) : PickerScreen() { private var selectedImprovement: TileImprovement? = null diff --git a/core/src/com/unciv/ui/pickerscreens/PickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/PickerScreen.kt index 5e61046c54..8ec10554c6 100644 --- a/core/src/com/unciv/ui/pickerscreens/PickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/PickerScreen.kt @@ -2,7 +2,11 @@ package com.unciv.ui.pickerscreens import com.badlogic.gdx.scenes.scene2d.ui.* import com.badlogic.gdx.utils.Align -import com.unciv.ui.utils.* +import com.unciv.models.gamebasics.tr +import com.unciv.ui.utils.CameraStageBaseScreen +import com.unciv.ui.utils.disable +import com.unciv.ui.utils.enable +import com.unciv.ui.utils.onClick open class PickerScreen : CameraStageBaseScreen() { diff --git a/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt index eb9f1b9958..f4df502d87 100644 --- a/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt @@ -8,6 +8,7 @@ import com.unciv.UnCivGame import com.unciv.logic.civilization.CivilizationInfo import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.Policy +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.* diff --git a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt index f01e4fa572..89b686473c 100644 --- a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt @@ -7,6 +7,7 @@ import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.TechManager import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tech.Technology +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.* import java.util.* diff --git a/core/src/com/unciv/ui/saves/LoadScreen.kt b/core/src/com/unciv/ui/saves/LoadScreen.kt index 82015d5f55..997b977052 100644 --- a/core/src/com/unciv/ui/saves/LoadScreen.kt +++ b/core/src/com/unciv/ui/saves/LoadScreen.kt @@ -9,6 +9,7 @@ import com.badlogic.gdx.utils.Json import com.unciv.UnCivGame import com.unciv.logic.GameInfo import com.unciv.logic.GameSaver +import com.unciv.models.gamebasics.tr import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.utils.* import java.text.SimpleDateFormat diff --git a/core/src/com/unciv/ui/saves/SaveScreen.kt b/core/src/com/unciv/ui/saves/SaveScreen.kt index dac5ef96fd..909ba64a5c 100644 --- a/core/src/com/unciv/ui/saves/SaveScreen.kt +++ b/core/src/com/unciv/ui/saves/SaveScreen.kt @@ -8,11 +8,11 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextField import com.badlogic.gdx.utils.Json import com.unciv.UnCivGame import com.unciv.logic.GameSaver +import com.unciv.models.gamebasics.tr import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.utils.enable import com.unciv.ui.utils.getRandom import com.unciv.ui.utils.onClick -import com.unciv.ui.utils.tr class SaveScreen : PickerScreen() { diff --git a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt index eb2fc35856..a6d528af5f 100644 --- a/core/src/com/unciv/ui/trade/DiplomacyScreen.kt +++ b/core/src/com/unciv/ui/trade/DiplomacyScreen.kt @@ -3,6 +3,7 @@ package com.unciv.ui.trade import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.scenes.scene2d.ui.* import com.unciv.UnCivGame +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.* class DiplomacyScreen:CameraStageBaseScreen(){ diff --git a/core/src/com/unciv/ui/trade/OfferColumnsTable.kt b/core/src/com/unciv/ui/trade/OfferColumnsTable.kt index 14296f7c62..d793b368d4 100644 --- a/core/src/com/unciv/ui/trade/OfferColumnsTable.kt +++ b/core/src/com/unciv/ui/trade/OfferColumnsTable.kt @@ -3,9 +3,9 @@ package com.unciv.ui.trade import com.badlogic.gdx.scenes.scene2d.Stage import com.badlogic.gdx.scenes.scene2d.ui.Table import com.unciv.logic.trade.TradeLogic +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.addSeparator -import com.unciv.ui.utils.tr class OfferColumnsTable(tradeLogic: TradeLogic, stage: Stage, onChange: ()->Unit): Table(CameraStageBaseScreen.skin) { diff --git a/core/src/com/unciv/ui/trade/OffersList.kt b/core/src/com/unciv/ui/trade/OffersList.kt index f8602b69cc..95569e4275 100644 --- a/core/src/com/unciv/ui/trade/OffersList.kt +++ b/core/src/com/unciv/ui/trade/OffersList.kt @@ -6,11 +6,11 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.unciv.logic.trade.TradeOffersList import com.unciv.logic.trade.TradeType import com.unciv.logic.trade.TradeType.* +import com.unciv.models.gamebasics.tr import com.unciv.ui.cityscreen.ExpanderTab import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.disable import com.unciv.ui.utils.onClick -import com.unciv.ui.utils.tr import kotlin.math.min class OffersList(val offers: TradeOffersList, val correspondingOffers: TradeOffersList, diff --git a/core/src/com/unciv/ui/trade/TradeTable.kt b/core/src/com/unciv/ui/trade/TradeTable.kt index 41fd339e86..18a48c2c29 100644 --- a/core/src/com/unciv/ui/trade/TradeTable.kt +++ b/core/src/com/unciv/ui/trade/TradeTable.kt @@ -7,9 +7,9 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.unciv.UnCivGame import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.trade.TradeLogic +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.onClick -import com.unciv.ui.utils.tr class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage, onTradeComplete: () -> Unit): Table(CameraStageBaseScreen.skin){ var tradeLogic = TradeLogic(UnCivGame.Current.gameInfo.getPlayerCivilization(),otherCivilization) diff --git a/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt b/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt index 3ea7c7660d..d9a4d5f714 100644 --- a/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt +++ b/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt @@ -15,7 +15,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.* import com.badlogic.gdx.scenes.scene2d.utils.ClickListener import com.badlogic.gdx.utils.viewport.ExtendViewport import com.unciv.UnCivGame -import com.unciv.models.gamebasics.GameBasics open class CameraStageBaseScreen : Screen { @@ -113,48 +112,6 @@ fun Actor.centerY(parent:Stage){ y = parent.height/2- height/2} fun Actor.center(parent:Stage){ centerX(parent); centerY(parent)} fun Label.setFontColor(color:Color): Label {style=Label.LabelStyle(style).apply { fontColor=color }; return this} -fun String.tr(): String { - if(contains("[")){ // Placeholders! - /** - * I'm SURE there's an easier way to do this but I can't think of it =\ - * So what's all this then? - * Well, not all languages are like English. So say I want to say "work on Library has completed in Akkad", - * but in a completely different language like Japanese or German, - * It could come out "Akkad hast die worken onner Library gerfinishen" or whatever, - * basically, the order of the words in the sentance is not guaranteed. - * So to translate this, I give a sentence like "work on [building] has completed in [city]" - * and the german can put those placeholders where he wants, so "[city] hast die worken onner [building] gerfinishen" - * The string on which we call tr() will look like "work on [library] has completed in [Akkad]" - * We will find the german placeholder text, and replace the placeholders with what was filled in the text we got! - */ - - val squareBraceRegex = Regex("\\[(.*?)\\]") - val englishTranslationPlaceholder = GameBasics.Translations.keys - .firstOrNull { it.replace(squareBraceRegex,"[]") == replace(squareBraceRegex,"[]") } - if(englishTranslationPlaceholder==null || - !GameBasics.Translations[englishTranslationPlaceholder]!!.containsKey(UnCivGame.Current.settings.language)){ - // Translation placeholder doesn't exist for this language - return this.replace("[","").replace("]","") - } - - val termsInMessage = squareBraceRegex.findAll(this).map { it.groups[1]!!.value }.toMutableList() - val termsInTranslationPlaceholder = squareBraceRegex.findAll(englishTranslationPlaceholder).map { it.value }.toMutableList() - if(termsInMessage.size!=termsInTranslationPlaceholder.size) - throw Exception("Message $this has a different number of terms than the placeholder $englishTranslationPlaceholder!") - - var languageSpecificPlaceholder = GameBasics.Translations[englishTranslationPlaceholder]!![UnCivGame.Current.settings.language]!! - for(i in 0 until termsInMessage.size){ - languageSpecificPlaceholder = languageSpecificPlaceholder.replace(termsInTranslationPlaceholder[i], termsInMessage[i].tr()) - } - return languageSpecificPlaceholder.tr() - } - if(contains("{")){ // sentence - return Regex("\\{(.*?)\\}").replace(this) { it.groups[1]!!.value.tr() } - } - val translation = GameBasics.Translations.get(this,UnCivGame.Current.settings.language) // single word - return translation -} - val fontCache = HashMap() diff --git a/core/src/com/unciv/ui/utils/Tutorials.kt b/core/src/com/unciv/ui/utils/Tutorials.kt index 6098438beb..bec5c1562e 100644 --- a/core/src/com/unciv/ui/utils/Tutorials.kt +++ b/core/src/com/unciv/ui/utils/Tutorials.kt @@ -10,6 +10,7 @@ import com.badlogic.gdx.utils.Align import com.badlogic.gdx.utils.Array import com.unciv.UnCivGame import com.unciv.models.gamebasics.GameBasics +import com.unciv.models.gamebasics.tr import java.util.LinkedHashMap import kotlin.collections.ArrayList import kotlin.collections.HashMap diff --git a/core/src/com/unciv/ui/worldscreen/NotificationsScroll.kt b/core/src/com/unciv/ui/worldscreen/NotificationsScroll.kt index de6d382e69..3bbf714da1 100644 --- a/core/src/com/unciv/ui/worldscreen/NotificationsScroll.kt +++ b/core/src/com/unciv/ui/worldscreen/NotificationsScroll.kt @@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane import com.badlogic.gdx.scenes.scene2d.ui.Table import com.unciv.logic.civilization.Notification +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.* import kotlin.math.min diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt index 8aca5a3461..f8a6e447c9 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt @@ -12,6 +12,7 @@ import com.unciv.logic.GameSaver import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.DiplomaticStatus import com.unciv.models.gamebasics.tile.ResourceType +import com.unciv.models.gamebasics.tr import com.unciv.models.gamebasics.unit.UnitType import com.unciv.ui.pickerscreens.GreatPersonPickerScreen import com.unciv.ui.pickerscreens.PolicyPickerScreen diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt b/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt index 1e2f04ebec..e1159c7875 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreenTopBar.kt @@ -11,6 +11,7 @@ import com.unciv.UnCivGame import com.unciv.logic.civilization.CivilizationInfo import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tile.ResourceType +import com.unciv.models.gamebasics.tr import com.unciv.models.stats.Stats import com.unciv.ui.EmpireOverviewScreen import com.unciv.ui.utils.* diff --git a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt index ae0dc42f7d..e9396365d5 100644 --- a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt +++ b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt @@ -10,6 +10,7 @@ import com.unciv.logic.battle.Battle import com.unciv.logic.battle.BattleDamage import com.unciv.logic.battle.ICombatant import com.unciv.logic.battle.MapUnitCombatant +import com.unciv.models.gamebasics.tr import com.unciv.models.gamebasics.unit.UnitType import com.unciv.ui.utils.* import com.unciv.ui.worldscreen.WorldScreen diff --git a/core/src/com/unciv/ui/worldscreen/optionstable/PopupTable.kt b/core/src/com/unciv/ui/worldscreen/optionstable/PopupTable.kt index a607077e26..2f7209368d 100644 --- a/core/src/com/unciv/ui/worldscreen/optionstable/PopupTable.kt +++ b/core/src/com/unciv/ui/worldscreen/optionstable/PopupTable.kt @@ -5,7 +5,11 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.unciv.UnCivGame -import com.unciv.ui.utils.* +import com.unciv.models.gamebasics.tr +import com.unciv.ui.utils.CameraStageBaseScreen +import com.unciv.ui.utils.ImageGetter +import com.unciv.ui.utils.center +import com.unciv.ui.utils.onClick open class PopupTable: Table(){ init { diff --git a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt index c616e18aa7..8d6bb7d7ec 100644 --- a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt +++ b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt @@ -1,12 +1,14 @@ package com.unciv.ui.worldscreen.optionstable import com.unciv.UnCivGame -import com.unciv.ui.* +import com.unciv.models.gamebasics.tr +import com.unciv.ui.CivilopediaScreen +import com.unciv.ui.NewGameScreen +import com.unciv.ui.VictoryScreen import com.unciv.ui.pickerscreens.PolicyPickerScreen import com.unciv.ui.saves.LoadScreen import com.unciv.ui.saves.SaveScreen import com.unciv.ui.utils.center -import com.unciv.ui.utils.tr class WorldScreenOptionsTable internal constructor() : PopupTable() { diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt index f0748656de..778d03aaa3 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt @@ -7,11 +7,11 @@ import com.unciv.logic.automation.WorkerAutomation import com.unciv.logic.map.MapUnit import com.unciv.models.gamebasics.Building import com.unciv.models.gamebasics.GameBasics +import com.unciv.models.gamebasics.tr import com.unciv.models.gamebasics.unit.UnitType import com.unciv.ui.pickerscreens.ImprovementPickerScreen import com.unciv.ui.pickerscreens.PromotionPickerScreen import com.unciv.ui.pickerscreens.TechPickerScreen -import com.unciv.ui.utils.tr import com.unciv.ui.worldscreen.WorldScreen import com.unciv.ui.worldscreen.optionstable.YesNoPopupTable import java.util.* diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt index 9afca34175..36f54dafac 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActionsTable.kt @@ -7,6 +7,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Table import com.unciv.UnCivGame import com.unciv.logic.map.MapUnit +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.* import com.unciv.ui.worldscreen.WorldScreen diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt index 710f8f1924..5fe5a44b93 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitTable.kt @@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Table import com.unciv.logic.map.MapUnit import com.unciv.logic.map.TileInfo +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.* import com.unciv.ui.worldscreen.WorldScreen