diff --git a/android/Images/OtherIcons/Blockade.png b/android/Images/OtherIcons/Blockade.png new file mode 100644 index 0000000000..bdb82e35bf Binary files /dev/null and b/android/Images/OtherIcons/Blockade.png differ diff --git a/android/Images/TileIcons/Blockaded.png b/android/Images/TileIcons/Blockaded.png new file mode 100644 index 0000000000..b86698085f Binary files /dev/null and b/android/Images/TileIcons/Blockaded.png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index c6f7c5ed30..dc1e2f483f 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -6,1344 +6,1358 @@ filter: MipMapLinearLinear, MipMapLinearLinear repeat: none CityStateIcons/Cultured rotate: false - xy: 298, 1466 + xy: 427, 1745 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 CityStateIcons/Maritime rotate: false - xy: 220, 1093 + xy: 1615, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 CityStateIcons/Mercantile rotate: false - xy: 220, 877 + xy: 1723, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 CityStateIcons/Militaristic rotate: false - xy: 220, 769 + xy: 1831, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 CityStateIcons/Religious rotate: false - xy: 436, 494 + xy: 1183, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 EmojiIcons/Culture rotate: false - xy: 386, 4 + xy: 436, 973 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Faith rotate: false - xy: 444, 4 + xy: 436, 915 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Food rotate: false - xy: 502, 4 + xy: 436, 857 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Gold rotate: false - xy: 560, 5 + xy: 436, 799 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Great Artist rotate: false - xy: 1771, 1782 + xy: 436, 741 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Great Engineer rotate: false - xy: 751, 1746 + xy: 436, 683 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Great General rotate: false - xy: 751, 1688 + xy: 436, 625 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Great Merchant rotate: false - xy: 809, 1747 + xy: 436, 567 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Great Scientist rotate: false - xy: 867, 1747 + xy: 436, 509 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Happiness rotate: false - xy: 809, 1689 + xy: 436, 451 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Production rotate: false - xy: 983, 1689 + xy: 436, 103 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Science rotate: false - xy: 1157, 1747 + xy: 559, 1087 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Turn rotate: false - xy: 1157, 1689 + xy: 552, 1029 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ImprovementIcons/Academy rotate: false - xy: 4, 1108 + xy: 736, 1931 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Ancient ruins rotate: false - xy: 4, 892 + xy: 952, 1931 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Barbarian encampment rotate: false - xy: 1037, 1913 + xy: 4, 693 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Camp rotate: false - xy: 1145, 1913 + xy: 1276, 1931 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Cancel improvement order rotate: false - xy: 4, 568 + xy: 4, 477 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Stop rotate: false - xy: 4, 568 + xy: 4, 477 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Citadel rotate: false - xy: 1361, 1913 + xy: 1492, 1931 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City center rotate: false - xy: 4, 244 + xy: 4, 153 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City ruins rotate: false - xy: 1577, 1913 + xy: 1708, 1931 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Customs house rotate: false - xy: 298, 1358 + xy: 127, 1219 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Farm rotate: false - xy: 514, 1466 + xy: 112, 247 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fishing Boats rotate: false - xy: 514, 1250 + xy: 112, 31 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fort rotate: false - xy: 643, 1682 + xy: 535, 1793 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Holy site rotate: false - xy: 112, 1093 + xy: 859, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Landmark rotate: false - xy: 112, 445 + xy: 1183, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Lumber mill rotate: false - xy: 112, 13 + xy: 1399, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Manufactory rotate: false - xy: 730, 1466 + xy: 1507, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Mine rotate: false - xy: 220, 661 + xy: 1831, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Moai rotate: false - xy: 220, 553 + xy: 1939, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Offshore Platform rotate: false - xy: 328, 1034 + xy: 1075, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Oil well rotate: false - xy: 328, 926 + xy: 1291, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Pasture rotate: false - xy: 544, 1142 + xy: 1507, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Plantation rotate: false - xy: 544, 926 + xy: 406, 1313 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Polder rotate: false - xy: 652, 1034 + xy: 406, 1205 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Quarry rotate: false - xy: 328, 494 + xy: 643, 1484 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Railroad rotate: false - xy: 328, 386 + xy: 1075, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Remove Fallout rotate: false - xy: 652, 710 + xy: 1399, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Remove Forest rotate: false - xy: 328, 278 + xy: 1507, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Remove Jungle rotate: false - xy: 328, 278 + xy: 1507, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Remove Marsh rotate: false - xy: 544, 495 + xy: 1723, 1500 size: 100, 99 orig: 100, 99 offset: 0, 0 index: -1 ImprovementIcons/Remove Railroad rotate: false - xy: 652, 602 + xy: 1831, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Remove Road rotate: false - xy: 328, 170 + xy: 1939, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Repair rotate: false - xy: 436, 278 + xy: 751, 1391 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Road rotate: false - xy: 328, 62 + xy: 1075, 1391 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Terrace farm rotate: false - xy: 760, 176 + xy: 220, 37 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Trading post rotate: false - xy: 691, 1804 + xy: 328, 989 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NotificationIcons/EnhanceReligion rotate: false - xy: 406, 1250 + xy: 112, 571 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NotificationIcons/FoundPantheon rotate: false - xy: 406, 1250 + xy: 112, 571 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NotificationIcons/FoundReligion rotate: false - xy: 406, 1250 + xy: 112, 571 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NotificationIcons/ReformReligion rotate: false - xy: 406, 1250 + xy: 112, 571 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Faith rotate: false - xy: 406, 1250 + xy: 112, 571 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NotificationIcons/Loading rotate: false - xy: 112, 229 + xy: 1291, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NotificationIcons/Working rotate: false - xy: 112, 229 + xy: 1291, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Loading rotate: false - xy: 112, 229 + xy: 1291, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NotificationIcons/PickConstruction rotate: false - xy: 652, 1142 + xy: 1939, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Production rotate: false - xy: 652, 1142 + xy: 1939, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NotificationIcons/PickPolicy rotate: false - xy: 2009, 1980 + xy: 4, 4 size: 33, 33 orig: 33, 33 offset: 0, 0 index: -1 NotificationIcons/PickTech rotate: false - xy: 328, 710 + xy: 412, 1529 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Science rotate: false - xy: 328, 710 + xy: 412, 1529 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/AirSweep rotate: false - xy: 4, 1000 + xy: 844, 1931 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Aircraft rotate: false - xy: 235, 1251 + xy: 235, 1269 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/ArrowRight rotate: false - xy: 1862, 1855 + xy: 443, 1147 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 NotificationIcons/MoveAutomatedUnits rotate: false - xy: 1862, 1855 + xy: 443, 1147 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 NotificationIcons/NextUnit rotate: false - xy: 1862, 1855 + xy: 443, 1147 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Movement rotate: false - xy: 1862, 1855 + xy: 443, 1147 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/BackArrow rotate: false - xy: 1920, 1855 + xy: 443, 1089 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Banner rotate: false - xy: 4, 784 + xy: 1060, 1931 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 +OtherIcons/Blockade + rotate: false + xy: 289, 1715 + size: 130, 130 + orig: 130, 130 + offset: 0, 0 + index: -1 OtherIcons/Camera rotate: false - xy: 427, 1802 + xy: 475, 1868 size: 25, 25 orig: 25, 25 offset: 0, 0 index: -1 OtherIcons/Capital rotate: false - xy: 598, 1912 + xy: 4, 1125 size: 107, 101 orig: 107, 101 offset: 0, 0 index: -1 OtherIcons/Checkmark rotate: false - xy: 4, 460 + xy: 4, 369 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NotificationIcons/NextTurn rotate: false - xy: 4, 460 + xy: 4, 369 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Circle rotate: false - xy: 289, 1835 + xy: 289, 1853 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 OtherIcons/Cities rotate: false - xy: 4, 352 + xy: 4, 261 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/CityState rotate: false - xy: 328, 4 + xy: 436, 1031 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Close rotate: false - xy: 1685, 1913 + xy: 1816, 1931 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/CrosshairB rotate: false - xy: 190, 1309 + xy: 298, 1376 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Diplomacy rotate: false - xy: 427, 1682 + xy: 112, 1003 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DiplomacyW rotate: false - xy: 412, 1574 + xy: 112, 895 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DisbandUnit rotate: false - xy: 406, 1466 + xy: 112, 787 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/ExclamationMark rotate: false - xy: 535, 1682 + xy: 112, 463 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Fire rotate: false - xy: 475, 1898 + xy: 4, 1234 size: 115, 115 orig: 115, 115 offset: 0, 0 index: -1 OtherIcons/Hexagon rotate: false - xy: 4, 1773 + xy: 4, 1791 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 OtherIcons/HexagonOutline rotate: false - xy: 4, 1525 + xy: 4, 1543 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 OtherIcons/Improvements rotate: false - xy: 925, 1747 + xy: 436, 393 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Link rotate: false - xy: 983, 1747 + xy: 436, 277 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Load rotate: false - xy: 112, 337 + xy: 1183, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/LockSmall rotate: false - xy: 925, 1689 + xy: 436, 219 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/MapEditor rotate: false - xy: 730, 1358 + xy: 1507, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MenuIcon rotate: false - xy: 220, 985 + xy: 1723, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Mods rotate: false - xy: 220, 445 + xy: 1939, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Multiplayer rotate: false - xy: 220, 337 + xy: 535, 1577 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/NationSwap rotate: false - xy: 220, 229 + xy: 643, 1592 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Nations rotate: false - xy: 1041, 1747 + xy: 436, 161 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/New rotate: false - xy: 220, 121 + xy: 751, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Notifications rotate: false - xy: 328, 1142 + xy: 967, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Options rotate: false - xy: 436, 1034 + xy: 1399, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pencil rotate: false - xy: 436, 926 + xy: 1723, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pentagon rotate: false - xy: 544, 1034 + xy: 1831, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pillage rotate: false - xy: 436, 818 + xy: 406, 1421 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Politics rotate: false - xy: 328, 602 + xy: 520, 1469 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NotificationIcons/WorldCongressVote rotate: false - xy: 328, 602 + xy: 520, 1469 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Present rotate: false - xy: 652, 926 + xy: 514, 1145 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Puppet rotate: false - xy: 4, 1216 + xy: 289, 1592 size: 115, 115 orig: 115, 115 offset: 0, 0 index: -1 OtherIcons/Quest rotate: false - xy: 436, 602 + xy: 751, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Question rotate: false - xy: 544, 710 + xy: 859, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Quickstart rotate: false - xy: 652, 818 + xy: 967, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Remove Heresy rotate: false - xy: 436, 386 + xy: 1615, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Resources rotate: false - xy: 544, 387 + xy: 859, 1391 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Resume rotate: false - xy: 652, 494 + xy: 967, 1391 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Search rotate: false - xy: 544, 279 + xy: 1291, 1391 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/SecretOptions rotate: false - xy: 652, 386 + xy: 1399, 1391 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Settings rotate: false - xy: 436, 62 + xy: 1507, 1391 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Shield rotate: false - xy: 652, 278 + xy: 1723, 1392 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Sleep rotate: false - xy: 652, 62 + xy: 227, 1111 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Speaker rotate: false - xy: 760, 1142 + xy: 220, 1003 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Spy rotate: false - xy: 760, 818 + xy: 220, 679 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Spy_White rotate: false - xy: 760, 710 + xy: 220, 571 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Star rotate: false - xy: 760, 608 + xy: 220, 469 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 OtherIcons/Swap rotate: false - xy: 760, 284 + xy: 220, 145 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Terrains rotate: false - xy: 1215, 1747 + xy: 494, 971 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Timer rotate: false - xy: 760, 68 + xy: 335, 1097 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Triangle rotate: false - xy: 4, 1339 + xy: 4, 1357 size: 178, 178 orig: 178, 178 offset: 0, 0 index: -1 OtherIcons/Turn right rotate: false - xy: 907, 1805 + xy: 328, 773 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Tyrannosaurus rotate: false - xy: 1015, 1805 + xy: 328, 665 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/WLTKD rotate: false - xy: 1771, 1840 + xy: 1723, 1319 size: 83, 65 orig: 83, 65 offset: 0, 0 index: -1 OtherIcons/Wait rotate: false - xy: 1231, 1805 + xy: 328, 449 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Wonders rotate: false - xy: 1663, 1805 + xy: 328, 17 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/whiteDot rotate: false - xy: 289, 1565 + xy: 289, 1583 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 ResourceIcons/Aluminum rotate: false - xy: 821, 1913 + xy: 4, 909 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Bananas rotate: false - xy: 929, 1913 + xy: 4, 801 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cattle rotate: false - xy: 1253, 1913 + xy: 1384, 1931 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Citrus rotate: false - xy: 1469, 1913 + xy: 1600, 1931 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Coal rotate: false - xy: 4, 28 + xy: 1924, 1931 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Copper rotate: false - xy: 1793, 1913 + xy: 190, 1435 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cotton rotate: false - xy: 1901, 1913 + xy: 190, 1327 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Crab rotate: false - xy: 190, 1417 + xy: 298, 1484 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Deer rotate: false - xy: 298, 1250 + xy: 119, 1111 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Dyes rotate: false - xy: 406, 1358 + xy: 112, 679 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Fish rotate: false - xy: 514, 1358 + xy: 112, 139 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Furs rotate: false - xy: 628, 1574 + xy: 535, 1685 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gems rotate: false - xy: 622, 1466 + xy: 643, 1808 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gold Ore rotate: false - xy: 622, 1250 + xy: 751, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Horses rotate: false - xy: 112, 985 + xy: 859, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Incense rotate: false - xy: 112, 877 + xy: 967, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Iron rotate: false - xy: 112, 769 + xy: 967, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Ivory rotate: false - xy: 112, 661 + xy: 1075, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Jewelry rotate: false - xy: 112, 553 + xy: 1075, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Marble rotate: false - xy: 730, 1250 + xy: 1615, 1823 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Oil rotate: false - xy: 436, 1142 + xy: 1183, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Pearls rotate: false - xy: 328, 818 + xy: 1615, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Porcelain rotate: false - xy: 544, 818 + xy: 514, 1253 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Salt rotate: false - xy: 436, 170 + xy: 1183, 1391 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sheep rotate: false - xy: 544, 171 + xy: 1615, 1391 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silk rotate: false - xy: 544, 63 + xy: 1831, 1391 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silver rotate: false - xy: 652, 170 + xy: 1939, 1391 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Spices rotate: false - xy: 760, 926 + xy: 220, 787 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Stone rotate: false - xy: 760, 500 + xy: 220, 361 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sugar rotate: false - xy: 760, 392 + xy: 220, 253 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Truffles rotate: false - xy: 799, 1805 + xy: 328, 881 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Uranium rotate: false - xy: 1123, 1805 + xy: 328, 557 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Whales rotate: false - xy: 1339, 1805 + xy: 328, 341 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wheat rotate: false - xy: 1447, 1805 + xy: 328, 233 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wine rotate: false - xy: 1555, 1805 + xy: 328, 125 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Acquire rotate: false - xy: 713, 1913 + xy: 4, 1017 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/CityConnection rotate: false - xy: 289, 1697 + xy: 475, 1901 size: 130, 130 orig: 130, 130 offset: 0, 0 index: -1 StatIcons/Culture rotate: false - xy: 475, 1790 + xy: 298, 1268 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Food rotate: false - xy: 583, 1790 + xy: 427, 1637 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Gold rotate: false - xy: 622, 1358 + xy: 643, 1700 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Happiness rotate: false - xy: 127, 1201 + xy: 751, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/InterceptRange rotate: false - xy: 867, 1689 + xy: 436, 335 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Malcontent rotate: false - xy: 736, 1574 + xy: 1399, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Population rotate: false - xy: 436, 710 + xy: 514, 1361 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileIcons/Worked rotate: false - xy: 436, 710 + xy: 514, 1361 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Range rotate: false - xy: 1099, 1747 + xy: 436, 45 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/RangedStrength rotate: false - xy: 1041, 1689 + xy: 501, 1087 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/ReligiousStrength rotate: false - xy: 544, 602 + xy: 1291, 1499 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Resistance rotate: false - xy: 289, 1574 + xy: 613, 1916 size: 115, 115 orig: 115, 115 offset: 0, 0 index: -1 StatIcons/Specialist rotate: false - xy: 760, 1034 + xy: 220, 895 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Strength rotate: false - xy: 1099, 1689 + xy: 494, 1029 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 +TileIcons/Blockaded + rotate: false + xy: 1168, 1931 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 TileIcons/Buy rotate: false - xy: 4, 676 + xy: 4, 585 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileIcons/CityCenter rotate: false - xy: 4, 136 + xy: 4, 45 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileIcons/Locked rotate: false - xy: 112, 121 + xy: 1291, 1715 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileIcons/NotWorked rotate: false - xy: 220, 13 + xy: 859, 1607 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 UniqueIcons/Fallback rotate: false - xy: 520, 1574 + xy: 112, 355 size: 100, 100 orig: 100, 100 offset: 0, 0 diff --git a/android/assets/game.png b/android/assets/game.png index f5673236e4..8d2053b7af 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/Tutorials.json b/android/assets/jsons/Tutorials.json index b6ba6556fa..824f015d58 100644 --- a/android/assets/jsons/Tutorials.json +++ b/android/assets/jsons/Tutorials.json @@ -377,5 +377,18 @@ "If the Interceptor is not an Air Unit (eg Land or Sea), the Air Sweeping unit and Interceptor take no damage!", "If the Interceptor is an Air Unit, the two units will damage each other in a straight fight with no Interception bonuses. And only the Attacking Air Sweep Unit gets any Air Sweep strength bonuses." ] + }, + { + "name": "City Tile Blockade", + "steps": [ + "One of your tiles is blocked by an enemy: when an enemy unit stands on a tile you own, the tile will not produce yields and cannot be worked by a city this turn. City will reallocate population from a blocked tile automatically.", + "Enemy military land units block tiles they are standing on. Enemy military naval units additionally block adjacent water tiles. To protect your tiles from blockade, place a friendly military unit on it or fight off invaders." + ] + }, + { + "name": "City Blockade", + "steps": [ + "One of your cities is under a naval blockade! When all adjacent water tiles of a coastal city are blocked - city loses harbor connection to all other cities, including capital. Make sure to de-blockade cities by deploying friendly military naval units to fight off invaders." + ] } ] diff --git a/android/assets/jsons/translations/English.properties b/android/assets/jsons/translations/English.properties index 4278ac2eae..1327602df6 100644 --- a/android/assets/jsons/translations/English.properties +++ b/android/assets/jsons/translations/English.properties @@ -11020,6 +11020,16 @@ If the Interceptor is not an Air Unit (eg Land or Sea), the Air Sweeping unit an # Requires translation! If the Interceptor is an Air Unit, the two units will damage each other in a straight fight with no Interception bonuses. And only the Attacking Air Sweep Unit gets any Air Sweep strength bonuses. = + # Requires translation! +City Tile Blockade = + # Requires translation! +One of your tiles is blocked by an enemy: when an enemy unit stands on a tile you own, the tile will not produce yields and cannot be worked by a city this turn. City will reallocate population from a blocked tile automatically. = + # Requires translation! +Enemy military land units block tiles they are standing on. Enemy military naval units additionally block adjacent water tiles. To protect your tiles from blockade, place a friendly military unit on it or fight off invaders. = + # Requires translation! +City Blockade = + # Requires translation! +One of your cities is under a naval blockade! When all adjacent water tiles of a coastal city are blocked - city loses harbor connection to all other cities, including capital. Make sure to de-blockade cities by deploying friendly military naval units to fight off invaders. = #################### Lines from Unique Types ####################### diff --git a/core/src/com/unciv/logic/city/City.kt b/core/src/com/unciv/logic/city/City.kt index a102ae482d..c114106920 100644 --- a/core/src/com/unciv/logic/city/City.kt +++ b/core/src/com/unciv/logic/city/City.kt @@ -84,7 +84,7 @@ class City : IsPartOfGameInfoSerialization { var attackedThisTurn = false var hasSoldBuildingThisTurn = false var isPuppet = false - var updateCitizens = false // flag so that on endTurn() the Governor reassigns Citizens + var updateCitizens = false // flag so that on startTurn() the Governor reassigns Citizens var cityAIFocus: CityFocus = CityFocus.NoFocus var avoidGrowth: Boolean = false @Transient var currentGPPBonus: Int = 0 // temporary variable saved for rankSpecialist() @@ -158,7 +158,27 @@ class City : IsPartOfGameInfoSerialization { fun isWeLoveTheKingDayActive() = hasFlag(CityFlags.WeLoveTheKing) fun isInResistance() = hasFlag(CityFlags.Resistance) + fun isBlockaded(): Boolean { + // Landlocked cities are not blockaded + if (!isCoastal()) + return false + + // Coastal cities are blocked if every adjacent water tile is blocked + for (tile in getCenterTile().neighbors) { + + // Consider only water tiles + if (!tile.isWater) + continue + + // One unblocked tile breaks whole city blockade + if (!tile.isBlockaded()) + return false + } + + // All tiles are blocked + return true + } fun getRuleset() = civ.gameInfo.ruleset diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index 676db40a4d..9e78176975 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -354,7 +354,7 @@ class CityStats(val city: City) { fun updateTileStats() { val stats = Stats() val localUniqueCache = LocalUniqueCache() - val workedTiles = city.tilesInRange + val workedTiles = city.tilesInRange.asSequence() .filter { city.location == it.position || city.isWorked(it) @@ -362,9 +362,15 @@ class CityStats(val city: City) { ?.hasUnique(UniqueType.TileProvidesYieldWithoutPopulation) == true || it.terrainHasUnique(UniqueType.TileProvidesYieldWithoutPopulation)) } - for (cell in workedTiles) { - val cellStats = cell.stats.getTileStats(city, city.civ, localUniqueCache) - stats.add(cellStats) + for (tile in workedTiles) { + if (tile.isBlockaded() && city.isWorked(tile)) { + city.workedTiles.remove(tile.position) + city.lockedTiles.remove(tile.position) + city.updateCitizens = true + continue + } + val tileStats = tile.stats.getTileStats(city, city.civ, localUniqueCache) + stats.add(tileStats) } statsFromTiles = stats } diff --git a/core/src/com/unciv/logic/city/managers/CityPopulationManager.kt b/core/src/com/unciv/logic/city/managers/CityPopulationManager.kt index bca375f46e..def0efa59f 100644 --- a/core/src/com/unciv/logic/city/managers/CityPopulationManager.kt +++ b/core/src/com/unciv/logic/city/managers/CityPopulationManager.kt @@ -150,7 +150,7 @@ class CityPopulationManager : IsPartOfGameInfoSerialization { val currentCiv = city.civ val tilesToEvaluate = city.getCenterTile().getTilesInDistance(3) - .filter { it.getOwner() == currentCiv }.toList().asSequence() + .filter { it.getOwner() == currentCiv && !it.isBlockaded() }.toList().asSequence() for (i in 1..getFreePopulation()) { //evaluate tiles val (bestTile, valueBestTile) = tilesToEvaluate diff --git a/core/src/com/unciv/logic/civilization/transients/CapitalConnectionsFinder.kt b/core/src/com/unciv/logic/civilization/transients/CapitalConnectionsFinder.kt index 19679662b3..3e09f5021b 100644 --- a/core/src/com/unciv/logic/civilization/transients/CapitalConnectionsFinder.kt +++ b/core/src/com/unciv/logic/civilization/transients/CapitalConnectionsFinder.kt @@ -81,7 +81,7 @@ class CapitalConnectionsFinder(private val civInfo: Civilization) { transportType = if(cityToConnectFrom.wasPreviouslyReached(railroad,null)) harborFromRailroad else harborFromRoad, overridingTransportType = harborFromRailroad, tileFilter = { tile -> tile.isWater }, - cityFilter = { city -> city.containsHarbor() && city.civ == civInfo } // use only own harbors + cityFilter = { city -> city.civ == civInfo && city.containsHarbor() && !city.isBlockaded() } // use only own harbors ) } diff --git a/core/src/com/unciv/logic/map/tile/Tile.kt b/core/src/com/unciv/logic/map/tile/Tile.kt index 656654a3c1..718a6f4a31 100644 --- a/core/src/com/unciv/logic/map/tile/Tile.kt +++ b/core/src/com/unciv/logic/map/tile/Tile.kt @@ -429,6 +429,40 @@ open class Tile : IsPartOfGameInfoSerialization { return civInfo.cities.firstOrNull { it.isWorked(this) } } + fun isBlockaded(): Boolean { + val owner = getOwner() ?: return false + val unit = militaryUnit + + // If tile has unit + if (unit != null) { + return when { + unit.civ == owner -> false // Own - unblocks tile; + unit.civ.isAtWarWith(owner) -> true // Enemy - blocks tile; + else -> false // Neutral - unblocks tile; + } + } + + // No unit -> land tile is not blocked + if (isLand) + return false + + // For water tiles need also to check neighbors: + // enemy military naval units blockade all adjacent water tiles. + for (neighbor in neighbors) { + + // Check only water neighbors + if (!neighbor.isWater) + continue + + val neighborUnit = neighbor.militaryUnit ?: continue + + // Embarked units do not blockade adjacent tiles + if (neighborUnit.civ.isAtWarWith(owner) && !neighborUnit.isEmbarked()) + return true + } + return false + } + fun isWorked(): Boolean = getWorkingCity() != null fun providesYield() = getCity() != null && (isCityCenter() || isWorked() || getUnpillagedTileImprovement()?.hasUnique(UniqueType.TileProvidesYieldWithoutPopulation) == true diff --git a/core/src/com/unciv/models/TutorialTrigger.kt b/core/src/com/unciv/models/TutorialTrigger.kt index 2e4cb3ef9a..19649859ae 100644 --- a/core/src/com/unciv/models/TutorialTrigger.kt +++ b/core/src/com/unciv/models/TutorialTrigger.kt @@ -50,4 +50,6 @@ enum class TutorialTrigger(val value: String, val isCivilopedia: Boolean = !valu Inquisitors("Inquisitors"), MayanCalendar("Maya_Long_Count_calendar_cycle"), WeLoveTheKingDay("We_Love_The_King_Day"), + CityTileBlockade("City_Tile_Blockade"), + CityBlockade("City_Blockade") } diff --git a/core/src/com/unciv/ui/cityscreen/CityScreen.kt b/core/src/com/unciv/ui/cityscreen/CityScreen.kt index 7e110f6610..67820daa3b 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreen.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreen.kt @@ -10,6 +10,7 @@ import com.unciv.logic.automation.Automation import com.unciv.logic.city.City import com.unciv.logic.city.IConstruction import com.unciv.logic.map.tile.Tile +import com.unciv.models.TutorialTrigger import com.unciv.models.UncivSound import com.unciv.models.ruleset.Building import com.unciv.models.ruleset.tile.TileImprovement @@ -24,6 +25,7 @@ import com.unciv.ui.popup.ConfirmPopup import com.unciv.ui.tilegroups.TileGroupMap import com.unciv.ui.popup.ToastPopup import com.unciv.ui.tilegroups.CityTileGroup +import com.unciv.ui.tilegroups.CityTileState import com.unciv.ui.tilegroups.TileSetStrings import com.unciv.ui.utils.BaseScreen import com.unciv.ui.utils.KeyCharAndCode @@ -228,6 +230,10 @@ class CityScreen( for (tileGroup in tileGroups) { tileGroup.update() tileGroup.layerMisc.removeHexOutline() + + if (tileGroup.tileState == CityTileState.BLOCKADED) + displayTutorial(TutorialTrigger.CityTileBlockade) + when { tileGroup.tile == nextTileToOwn -> tileGroup.layerMisc.addHexOutline(colorFromRGB(200, 20, 220)) @@ -335,7 +341,7 @@ class CityScreen( val tile = tileGroup.tile // Cycling as: Not-worked -> Worked -> Locked -> Not-worked - if (tileGroup.isWorkable) { + if (tileGroup.tileState == CityTileState.WORKABLE) { if (!tile.providesYield() && city.population.getFreePopulation() > 0) { city.workedTiles.add(tile.position) game.settings.addCompletedTutorialTask("Reassign worked tiles") @@ -348,7 +354,7 @@ class CityScreen( city.cityStats.update() update() - } else if (tileGroup.isPurchasable) { + } else if (tileGroup.tileState == CityTileState.PURCHASABLE) { val price = city.expansion.getGoldCostOfTile(tile) val purchasePrompt = "Currently you have [${city.civ.gold}] [Gold].".tr() + "\n\n" + diff --git a/core/src/com/unciv/ui/tilegroups/CityButton.kt b/core/src/com/unciv/ui/tilegroups/CityButton.kt index 191c2cd6f6..71ff674009 100644 --- a/core/src/com/unciv/ui/tilegroups/CityButton.kt +++ b/core/src/com/unciv/ui/tilegroups/CityButton.kt @@ -15,6 +15,7 @@ import com.unciv.logic.city.City import com.unciv.logic.city.INonPerpetualConstruction import com.unciv.logic.city.PerpetualConstruction import com.unciv.logic.civilization.diplomacy.RelationshipLevel +import com.unciv.models.TutorialTrigger import com.unciv.models.translations.tr import com.unciv.ui.cityscreen.CityReligionInfoTable import com.unciv.ui.cityscreen.CityScreen @@ -31,6 +32,7 @@ import com.unciv.ui.utils.extensions.darken import com.unciv.ui.utils.extensions.onClick import com.unciv.ui.utils.extensions.toGroup import com.unciv.ui.utils.extensions.toLabel +import com.unciv.ui.worldscreen.WorldScreen import kotlin.math.max import kotlin.math.min @@ -158,16 +160,22 @@ class AirUnitTable(city: City, numberOfUnits: Int, size: Float=14f) : BorderedTa } -private class StatusTable(city: City, iconSize: Float = 18f) : Table() { +private class StatusTable(worldScreen: WorldScreen, city: City, iconSize: Float = 18f) : Table() { init { val padBetween = 2f val viewingCiv = UncivGame.Current.worldScreen!!.viewingCiv - if (city.civ == viewingCiv && city.isConnectedToCapital() && !city.isCapital()) { - val connectionImage = ImageGetter.getStatIcon("CityConnection") - add(connectionImage).size(iconSize) + if (city.civ == viewingCiv) { + if (city.isBlockaded()) { + val connectionImage = ImageGetter.getImage("OtherIcons/Blockade") + add(connectionImage).size(iconSize) + worldScreen.displayTutorial(TutorialTrigger.CityBlockade) + } else if (!city.isCapital() && city.isConnectedToCapital()) { + val connectionImage = ImageGetter.getStatIcon("CityConnection") + add(connectionImage).size(iconSize) + } } if (city.isInResistance()) { @@ -429,7 +437,7 @@ class CityButton(val city: City, private val tileGroup: TileGroup): Table(BaseSc } // Add statuses: connection, resistance, puppet, raze, WLTKD - add(StatusTable(city)).padTop(3f) + add(StatusTable(worldScreen, city)).padTop(3f) pack() diff --git a/core/src/com/unciv/ui/tilegroups/CityTileGroup.kt b/core/src/com/unciv/ui/tilegroups/CityTileGroup.kt index 9bdd967276..fefd124290 100644 --- a/core/src/com/unciv/ui/tilegroups/CityTileGroup.kt +++ b/core/src/com/unciv/ui/tilegroups/CityTileGroup.kt @@ -16,10 +16,16 @@ import com.unciv.ui.utils.extensions.setFontColor import com.unciv.ui.utils.extensions.toGroup import com.unciv.ui.utils.extensions.toLabel +enum class CityTileState { + NONE, + WORKABLE, + PURCHASABLE, + BLOCKADED +} + class CityTileGroup(val city: City, tile: Tile, tileSetStrings: TileSetStrings) : TileGroup(tile,tileSetStrings) { - var isWorkable = false - var isPurchasable = false + var tileState = CityTileState.NONE init { layerMisc.touchable = Touchable.childrenOnly @@ -28,8 +34,7 @@ class CityTileGroup(val city: City, tile: Tile, tileSetStrings: TileSetStrings) override fun update(viewingCiv: Civilization?) { super.update(city.civ) - isWorkable = false - isPurchasable = false + tileState = CityTileState.NONE layerMisc.removeWorkedIcon() var icon: Actor? = null @@ -57,7 +62,7 @@ class CityTileGroup(val city: City, tile: Tile, tileSetStrings: TileSetStrings) image.color = Color.WHITE.darken(0.5f) label.setFontColor(Color.RED) } else { - isPurchasable = true + tileState = CityTileState.PURCHASABLE } } } @@ -85,24 +90,31 @@ class CityTileGroup(val city: City, tile: Tile, tileSetStrings: TileSetStrings) // Do nothing } + // Blockaded + tile.isBlockaded() -> { + icon = ImageGetter.getImage("TileIcons/Blockaded") + tileState = CityTileState.BLOCKADED + layerMisc.dimYields(true) + } + // Locked tile.isLocked() -> { icon = ImageGetter.getImage("TileIcons/Locked") - isWorkable = true + tileState = CityTileState.WORKABLE layerMisc.dimYields(false) } // Worked tile.isWorked() -> { icon = ImageGetter.getImage("TileIcons/Worked") - isWorkable = true + tileState = CityTileState.WORKABLE layerMisc.dimYields(false) } // Not-worked else -> { icon = ImageGetter.getImage("TileIcons/NotWorked") - isWorkable = true + tileState = CityTileState.WORKABLE layerMisc.dimYields(true) } } diff --git a/docs/Credits.md b/docs/Credits.md index a76d1e2b23..d71436397b 100644 --- a/docs/Credits.md +++ b/docs/Credits.md @@ -769,6 +769,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: - [Nothing](https://www.flaticon.com/free-icon/nothing_5084125) created by Freepik for Nothing construction process - Icon for Unique created by [vegeta1k95](https://github.com/vegeta1k95) - [Transform] created by letstalkaboutdune +- [Swords](https://thenounproject.com/icon/swords-1580316/) created by Muhajir ila Robbi for Blockaded tile marker ### Main menu