diff --git a/android/Images/TechIcons/Advanced Ballistics.png b/android/Images/TechIcons/Advanced Ballistics.png new file mode 100644 index 0000000000..730b745a51 Binary files /dev/null and b/android/Images/TechIcons/Advanced Ballistics.png differ diff --git a/android/ImagesToPackSeparately/UnitIcons/Atomic Bomb.png b/android/ImagesToPackSeparately/UnitIcons/Atomic Bomb.png new file mode 100644 index 0000000000..635bc3e399 Binary files /dev/null and b/android/ImagesToPackSeparately/UnitIcons/Atomic Bomb.png differ diff --git a/android/assets/UnitIcons.atlas b/android/assets/UnitIcons.atlas index 9fbe8a8ae9..786fca0204 100644 --- a/android/assets/UnitIcons.atlas +++ b/android/assets/UnitIcons.atlas @@ -32,618 +32,625 @@ Artillery orig: 100, 100 offset: 0, 0 index: -1 -B17 +Atomic Bomb rotate: false xy: 112, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Ballista +B17 rotate: false xy: 220, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Battleship +Ballista rotate: false xy: 4, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Berserker +Battleship rotate: false xy: 112, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Bomber +Berserker rotate: false xy: 220, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Bowman +Bomber rotate: false xy: 328, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Brute +Bowman rotate: false xy: 4, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Camel Archer +Brute rotate: false xy: 112, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Cannon +Camel Archer rotate: false xy: 220, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Caravel +Cannon rotate: false xy: 328, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Carrier +Caravel rotate: false xy: 436, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Catapult +Carrier rotate: false xy: 4, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Cavalry +Catapult rotate: false xy: 112, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Chariot Archer +Cavalry rotate: false xy: 220, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Chu-Ko-Nu +Chariot Archer rotate: false xy: 328, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Companion Cavalry +Chu-Ko-Nu rotate: false xy: 436, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Composite Bowman +Companion Cavalry rotate: false xy: 544, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Conquistador +Composite Bowman rotate: false xy: 4, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Cossack +Conquistador rotate: false xy: 112, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Crossbowman +Cossack rotate: false xy: 220, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Destroyer +Crossbowman rotate: false xy: 328, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Fighter +Destroyer rotate: false xy: 436, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Foreign Legion +Fighter rotate: false xy: 544, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Frigate +Foreign Legion rotate: false xy: 652, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Galleass +Frigate rotate: false xy: 4, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Gatling Gun +Galleass rotate: false xy: 112, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Giant Death Robot +Gatling Gun rotate: false xy: 220, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Great Artist +Giant Death Robot rotate: false xy: 328, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -Great Engineer +Great Artist rotate: false xy: 436, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 +Great Engineer + rotate: false + xy: 544, 652 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 Great General rotate: false - xy: 544, 658 + xy: 652, 766 size: 100, 94 orig: 100, 94 offset: 0, 0 index: -1 Great Merchant rotate: false - xy: 652, 760 + xy: 760, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Great Scientist rotate: false - xy: 760, 868 + xy: 4, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Great War Bomber rotate: false - xy: 4, 4 + xy: 112, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Great War Infantry rotate: false - xy: 112, 112 + xy: 220, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Guided Missile rotate: false - xy: 220, 220 + xy: 328, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Helicopter Gunship rotate: false - xy: 328, 328 + xy: 436, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Hoplite rotate: false - xy: 436, 436 + xy: 544, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Horseman rotate: false - xy: 544, 550 + xy: 652, 658 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Hwach'a rotate: false - xy: 652, 652 + xy: 760, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Infantry rotate: false - xy: 760, 760 + xy: 868, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Ironclad rotate: false - xy: 868, 868 + xy: 112, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Jaguar rotate: false - xy: 112, 4 + xy: 220, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Janissary rotate: false - xy: 220, 112 + xy: 328, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Jet Fighter rotate: false - xy: 328, 220 + xy: 436, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Keshik rotate: false - xy: 436, 328 + xy: 544, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Khan rotate: false - xy: 544, 442 + xy: 652, 550 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Knight rotate: false - xy: 652, 544 + xy: 760, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Lancer rotate: false - xy: 760, 652 + xy: 868, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Landship rotate: false - xy: 868, 760 + xy: 976, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Landsknecht rotate: false - xy: 976, 868 + xy: 220, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Legion rotate: false - xy: 220, 4 + xy: 328, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Longbowman rotate: false - xy: 328, 112 + xy: 436, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Longswordsman rotate: false - xy: 436, 220 + xy: 544, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Machine Gun rotate: false - xy: 544, 334 + xy: 652, 442 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Mandekalu Cavalry rotate: false - xy: 652, 436 + xy: 760, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Maori Warrior rotate: false - xy: 760, 544 + xy: 868, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Marine rotate: false - xy: 868, 652 + xy: 976, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Mechanized Infantry rotate: false - xy: 976, 760 + xy: 1084, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Minuteman rotate: false - xy: 1084, 868 + xy: 328, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Mobile SAM rotate: false - xy: 328, 4 + xy: 436, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Modern Armor rotate: false - xy: 436, 112 + xy: 544, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Mohawk Warrior rotate: false - xy: 544, 226 + xy: 652, 334 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Musketeer rotate: false - xy: 652, 328 + xy: 760, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Musketman rotate: false - xy: 760, 437 + xy: 868, 545 size: 100, 99 orig: 100, 99 offset: 0, 0 index: -1 Naresuan's Elephant rotate: false - xy: 868, 544 + xy: 976, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Norwegian Ski Infantry rotate: false - xy: 976, 652 + xy: 1084, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Nuclear Missile rotate: false - xy: 1084, 760 + xy: 1192, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Panzer rotate: false - xy: 1192, 868 + xy: 436, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Paratrooper rotate: false - xy: 436, 4 + xy: 544, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Persian Immortal rotate: false - xy: 544, 118 + xy: 652, 226 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Pikeman rotate: false - xy: 652, 220 + xy: 760, 328 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Rifleman rotate: false - xy: 760, 329 + xy: 868, 437 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Rocket Artillery rotate: false - xy: 868, 436 + xy: 976, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Samurai rotate: false - xy: 976, 544 + xy: 1084, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Scout rotate: false - xy: 1084, 652 + xy: 1192, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Settler rotate: false - xy: 1192, 760 + xy: 1300, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Ship of the Line rotate: false - xy: 1300, 868 + xy: 544, 4 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Sipahi rotate: false - xy: 544, 10 + xy: 652, 118 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Slinger rotate: false - xy: 652, 112 + xy: 760, 220 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Spearman rotate: false - xy: 760, 221 + xy: 868, 329 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Stealth Bomber rotate: false - xy: 868, 328 + xy: 976, 436 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Submarine rotate: false - xy: 976, 436 + xy: 1084, 544 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Swordsman rotate: false - xy: 1084, 544 + xy: 1192, 652 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Tank rotate: false - xy: 1192, 652 + xy: 1300, 760 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Tercio rotate: false - xy: 1300, 760 + xy: 1408, 868 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Trebuchet rotate: false - xy: 1408, 868 + xy: 652, 10 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Triplane rotate: false - xy: 760, 113 + xy: 760, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 Trireme rotate: false - xy: 868, 219 + xy: 868, 220 size: 100, 101 orig: 100, 101 offset: 0, 0 @@ -692,7 +699,7 @@ Worker index: -1 Zero rotate: false - xy: 976, 220 + xy: 868, 112 size: 100, 100 orig: 100, 100 offset: 0, 0 diff --git a/android/assets/UnitIcons.png b/android/assets/UnitIcons.png index 0e55a140a1..04d17d4d98 100644 Binary files a/android/assets/UnitIcons.png and b/android/assets/UnitIcons.png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index 2717945af9..d4f939c519 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -6,21 +6,21 @@ filter: MipMapLinearLinear, MipMapLinearLinear repeat: none EmojiIcons/Gold rotate: false - xy: 328, 454 + xy: 328, 338 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Production rotate: false - xy: 502, 272 + xy: 386, 98 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 EmojiIcons/Turn rotate: false - xy: 676, 374 + xy: 792, 490 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -34,371 +34,357 @@ ImprovementIcons/Academy index: -1 ImprovementIcons/Ancient ruins rotate: false - xy: 4, 106 + xy: 1890, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Barbarian encampment rotate: false - xy: 212, 908 + xy: 212, 800 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Camp rotate: false - xy: 497, 1700 + xy: 497, 1592 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Citadel rotate: false - xy: 713, 1628 + xy: 821, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City center rotate: false - xy: 821, 1628 + xy: 929, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/City ruins rotate: false - xy: 929, 1736 + xy: 929, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Customs house rotate: false - xy: 1361, 1758 + xy: 1253, 1650 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Farm rotate: false - xy: 536, 1052 + xy: 536, 944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fishing Boats rotate: false - xy: 536, 620 + xy: 644, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Fort rotate: false - xy: 644, 1304 + xy: 752, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Landmark rotate: false - xy: 1076, 1196 + xy: 644, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Lumber mill rotate: false - xy: 968, 980 + xy: 1076, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Manufactory rotate: false - xy: 752, 656 + xy: 860, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Mine rotate: false - xy: 1184, 1412 + xy: 1184, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Moai rotate: false - xy: 1184, 1196 + xy: 1184, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Oil well rotate: false - xy: 1292, 678 + xy: 1400, 1542 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Pasture rotate: false - xy: 1400, 1218 + xy: 1400, 1110 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Plantation rotate: false - xy: 860, 548 + xy: 968, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Quarry rotate: false - xy: 220, 476 - size: 100, 100 - orig: 100, 100 - offset: 0, 0 - index: -1 -ImprovementIcons/Railroad - rotate: false - xy: 1292, 462 - size: 100, 100 - orig: 100, 100 - offset: 0, 0 - index: -1 -TileSets/Default/Railroad - rotate: false - xy: 1292, 462 + xy: 220, 368 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Road rotate: false - xy: 1508, 1620 + xy: 1508, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Terrace farm rotate: false - xy: 1724, 1080 + xy: 1832, 1188 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ImprovementIcons/Trading post rotate: false - xy: 1724, 972 + xy: 1832, 1080 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/America rotate: false - xy: 1782, 1944 + xy: 4, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Arabia rotate: false - xy: 112, 430 + xy: 112, 322 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Aztecs rotate: false - xy: 1890, 1836 + xy: 212, 1448 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Babylon rotate: false - xy: 212, 1448 + xy: 212, 1340 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/China rotate: false - xy: 605, 1628 + xy: 713, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/CityState rotate: false - xy: 1037, 1628 + xy: 320, 1492 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Denmark rotate: false - xy: 1361, 1650 + xy: 320, 628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Egypt rotate: false - xy: 428, 728 + xy: 428, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/England rotate: false - xy: 536, 1268 + xy: 536, 1160 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/France rotate: false - xy: 752, 1412 + xy: 860, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Germany rotate: false - xy: 860, 1412 + xy: 968, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Greece rotate: false - xy: 644, 1088 + xy: 752, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Inca rotate: false - xy: 860, 1196 + xy: 968, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/India rotate: false - xy: 1076, 1412 + xy: 644, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Iroquois rotate: false - xy: 968, 1196 + xy: 1076, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Japan rotate: false - xy: 644, 764 + xy: 752, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Korea rotate: false - xy: 860, 980 + xy: 968, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Mongolia rotate: false - xy: 1184, 872 + xy: 1184, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Persia rotate: false - xy: 1400, 894 + xy: 1400, 786 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Polynesia rotate: false - xy: 1076, 548 + xy: 1184, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Rome rotate: false - xy: 1508, 1404 + xy: 1616, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Russia rotate: false - xy: 1616, 1512 + xy: 1724, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Siam rotate: false - xy: 1508, 1188 + xy: 1616, 1296 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Songhai rotate: false - xy: 1508, 1080 + xy: 1616, 1188 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/Spain rotate: false - xy: 1616, 1188 + xy: 1724, 1296 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 NationIcons/The Ottomans rotate: false - xy: 1832, 1188 + xy: 1508, 756 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Aircraft rotate: false - xy: 1832, 914 + xy: 1508, 482 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/BackArrow rotate: false - xy: 1616, 582 + xy: 1724, 690 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Banner rotate: false - xy: 212, 1016 + xy: 212, 908 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -419,7 +405,7 @@ OtherIcons/Border-outer index: -1 OtherIcons/Camera rotate: false - xy: 570, 1811 + xy: 1880, 694 size: 25, 25 orig: 25, 25 offset: 0, 0 @@ -433,175 +419,175 @@ OtherIcons/Circle index: -1 OtherIcons/Cities rotate: false - xy: 821, 1736 + xy: 821, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Close rotate: false - xy: 320, 1384 + xy: 320, 1276 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Crosshair rotate: false - xy: 1145, 1628 + xy: 1253, 1758 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Diplomacy rotate: false - xy: 320, 628 + xy: 428, 1484 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DiplomacyW rotate: false - xy: 428, 1484 + xy: 428, 1376 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/DisbandUnit rotate: false - xy: 428, 1376 + xy: 428, 1268 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Down rotate: false - xy: 1566, 482 + xy: 1674, 590 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/Fire rotate: false - xy: 536, 836 + xy: 536, 728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Hexagon rotate: false - xy: 4, 1556 + xy: 4, 1804 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 OtherIcons/Load rotate: false - xy: 752, 764 + xy: 860, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Lock rotate: false - xy: 860, 872 + xy: 968, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MapEditor rotate: false - xy: 860, 764 + xy: 968, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/MenuIcon rotate: false - xy: 968, 656 + xy: 1076, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Mods rotate: false - xy: 1184, 980 + xy: 1184, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Multiplayer rotate: false - xy: 1184, 656 + xy: 1292, 1542 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/New rotate: false - xy: 1292, 1218 + xy: 1292, 1110 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Options rotate: false - xy: 1400, 1434 + xy: 1400, 1326 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pentagon rotate: false - xy: 1400, 1002 + xy: 1400, 894 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Pillage rotate: false - xy: 752, 548 + xy: 860, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Puppet rotate: false - xy: 1400, 570 + xy: 220, 476 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Quest rotate: false - xy: 220, 368 + xy: 220, 260 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Quickstart rotate: false - xy: 220, 260 + xy: 220, 152 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Resume rotate: false - xy: 1793, 1728 + xy: 1901, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Shield rotate: false - xy: 1832, 1620 + xy: 1508, 1188 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Sleep rotate: false - xy: 1832, 1512 + xy: 1508, 1080 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -615,14 +601,14 @@ OtherIcons/Star index: -1 OtherIcons/Stop rotate: false - xy: 1832, 1296 + xy: 1508, 864 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 OtherIcons/Swap rotate: false - xy: 1616, 972 + xy: 1724, 1080 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -636,28 +622,28 @@ OtherIcons/Triangle index: -1 OtherIcons/Up rotate: false - xy: 618, 258 + xy: 734, 374 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 OtherIcons/whiteDot rotate: false - xy: 190, 715 + xy: 970, 469 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 PolicyIcons/Aesthetics rotate: false - xy: 1616, 698 + xy: 1724, 806 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Aristocracy rotate: false - xy: 1616, 640 + xy: 1724, 748 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -685,28 +671,28 @@ PolicyIcons/Collective Rule index: -1 PolicyIcons/Communism rotate: false - xy: 1674, 698 + xy: 1782, 806 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Constitution rotate: false - xy: 1674, 640 + xy: 1782, 748 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Cultural Diplomacy rotate: false - xy: 1782, 806 + xy: 1890, 914 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Democracy rotate: false - xy: 1890, 914 + xy: 1566, 482 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -720,469 +706,469 @@ PolicyIcons/Educated Elite index: -1 PolicyIcons/Fascism rotate: false - xy: 1682, 524 + xy: 1732, 574 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Religion rotate: false - xy: 1682, 408 + xy: 328, 512 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Speech rotate: false - xy: 328, 570 + xy: 328, 454 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Free Thought rotate: false - xy: 328, 512 + xy: 328, 396 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Humanism rotate: false - xy: 328, 222 + xy: 328, 106 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Landed Elite rotate: false - xy: 386, 562 + xy: 444, 562 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Legalism rotate: false - xy: 386, 504 + xy: 386, 446 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mandate Of Heaven rotate: false - xy: 386, 446 + xy: 502, 562 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Mercantilism rotate: false - xy: 386, 388 + xy: 502, 504 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Merchant Navy rotate: false - xy: 444, 446 + xy: 560, 562 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Meritocracy rotate: false - xy: 502, 504 + xy: 386, 330 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Militarism rotate: false - xy: 560, 562 + xy: 444, 388 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Caste rotate: false - xy: 386, 330 + xy: 502, 446 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Military Tradition rotate: false - xy: 444, 388 + xy: 560, 504 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Monarchy rotate: false - xy: 560, 504 + xy: 444, 330 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Nationalism rotate: false - xy: 502, 388 + xy: 386, 214 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Naval Tradition rotate: false - xy: 560, 446 + xy: 444, 272 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Oligarchy rotate: false - xy: 386, 214 + xy: 502, 330 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Organized Religion rotate: false - xy: 444, 272 + xy: 560, 388 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Philantropy rotate: false - xy: 502, 330 + xy: 386, 156 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Planned Economy rotate: false - xy: 560, 388 + xy: 444, 214 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Police State rotate: false - xy: 386, 156 + xy: 502, 272 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Populism rotate: false - xy: 444, 214 + xy: 560, 330 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Professional Army rotate: false - xy: 560, 330 + xy: 444, 156 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Protectionism rotate: false - xy: 386, 98 + xy: 502, 214 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Reformation rotate: false - xy: 560, 272 + xy: 502, 156 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Representation rotate: false - xy: 502, 156 + xy: 502, 98 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Republic rotate: false - xy: 560, 214 + xy: 560, 156 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scholasticism rotate: false - xy: 502, 98 + xy: 560, 98 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Scientific Revolution rotate: false - xy: 560, 156 + xy: 386, 40 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Secularism rotate: false - xy: 386, 40 + xy: 502, 40 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Socialism rotate: false - xy: 560, 40 + xy: 618, 432 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Sovereignty rotate: false - xy: 618, 432 + xy: 618, 374 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Theocracy rotate: false - xy: 676, 432 + xy: 618, 316 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Total War rotate: false - xy: 734, 490 + xy: 676, 374 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Trade Unions rotate: false - xy: 618, 316 + xy: 734, 432 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/United Front rotate: false - xy: 734, 432 + xy: 618, 258 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Universal Suffrage rotate: false - xy: 792, 490 + xy: 676, 316 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Warrior Code rotate: false - xy: 734, 374 + xy: 850, 490 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 ResourceIcons/Aluminum rotate: false - xy: 4, 214 + xy: 1782, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Bananas rotate: false - xy: 212, 1232 + xy: 212, 1124 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cattle rotate: false - xy: 497, 1592 + xy: 605, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Coal rotate: false - xy: 320, 1276 + xy: 320, 1168 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Cotton rotate: false - xy: 1145, 1736 + xy: 1145, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Deer rotate: false - xy: 1253, 1650 + xy: 1361, 1650 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Dyes rotate: false - xy: 428, 1268 + xy: 428, 1160 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Fish rotate: false - xy: 536, 728 + xy: 536, 620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Furs rotate: false - xy: 860, 1520 + xy: 644, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gems rotate: false - xy: 752, 1304 + xy: 860, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Gold Ore rotate: false - xy: 968, 1520 + xy: 644, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Horses rotate: false - xy: 644, 980 + xy: 752, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Incense rotate: false - xy: 968, 1304 + xy: 1076, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Iron rotate: false - xy: 752, 980 + xy: 860, 1088 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Ivory rotate: false - xy: 1076, 1304 + xy: 644, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Marble rotate: false - xy: 968, 872 + xy: 1076, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Oil rotate: false - xy: 1292, 786 + xy: 1292, 678 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Pearls rotate: false - xy: 1400, 1110 + xy: 1400, 1002 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sheep rotate: false - xy: 1724, 1512 + xy: 1832, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silk rotate: false - xy: 1616, 1296 + xy: 1724, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Silver rotate: false - xy: 1724, 1404 + xy: 1832, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Spices rotate: false - xy: 1832, 1404 + xy: 1508, 972 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Stone rotate: false - xy: 1724, 1188 + xy: 1832, 1296 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Sugar rotate: false - xy: 1508, 864 + xy: 1616, 972 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Uranium rotate: false - xy: 1508, 648 + xy: 1616, 756 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Whales rotate: false - xy: 1616, 756 + xy: 1724, 864 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wheat rotate: false - xy: 1724, 864 + xy: 1832, 972 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 ResourceIcons/Wine rotate: false - xy: 1832, 972 + xy: 1508, 540 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1196,7 +1182,7 @@ StatIcons/Acquire index: -1 StatIcons/CityConnection rotate: false - xy: 929, 1628 + xy: 1037, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1238,7 +1224,7 @@ StatIcons/Happiness index: -1 StatIcons/InterceptRange rotate: false - xy: 328, 106 + xy: 386, 562 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1252,7 +1238,7 @@ StatIcons/Malcontent index: -1 StatIcons/Movement rotate: false - xy: 444, 330 + xy: 560, 446 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1273,21 +1259,21 @@ StatIcons/Production index: -1 StatIcons/Range rotate: false - xy: 444, 156 + xy: 560, 272 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/RangedStrength rotate: false - xy: 502, 214 + xy: 444, 98 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 StatIcons/Resistance rotate: false - xy: 1685, 1728 + xy: 1793, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1301,14 +1287,14 @@ StatIcons/Science index: -1 StatIcons/Specialist rotate: false - xy: 1724, 1296 + xy: 1832, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 StatIcons/Strength rotate: false - xy: 676, 490 + xy: 676, 432 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -1320,422 +1306,429 @@ TechIcons/Acoustics orig: 100, 100 offset: 0, 0 index: -1 -TechIcons/Agriculture +TechIcons/Advanced Ballistics rotate: false xy: 1674, 1944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 +TechIcons/Agriculture + rotate: false + xy: 4, 214 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 TechIcons/Animal Husbandry rotate: false - xy: 1890, 1944 + xy: 112, 430 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archaeology rotate: false - xy: 112, 322 + xy: 112, 214 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Archery rotate: false - xy: 112, 214 + xy: 112, 106 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Architecture rotate: false - xy: 112, 106 + xy: 1566, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Astronomy rotate: false - xy: 1566, 1836 + xy: 1674, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Atomic Theory rotate: false - xy: 1782, 1836 + xy: 1890, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Ballistics rotate: false - xy: 212, 1340 + xy: 212, 1232 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Banking rotate: false - xy: 212, 1124 + xy: 212, 1016 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Biology rotate: false - xy: 212, 800 + xy: 212, 692 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Bronze Working rotate: false - xy: 212, 692 + xy: 190, 584 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Calendar rotate: false - xy: 190, 584 + xy: 497, 1700 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chemistry rotate: false - xy: 605, 1736 + xy: 605, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Chivalry rotate: false - xy: 713, 1736 + xy: 713, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Civil Service rotate: false - xy: 320, 1492 + xy: 320, 1384 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Combined Arms rotate: false - xy: 320, 1168 + xy: 320, 1060 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Combustion rotate: false - xy: 320, 1060 + xy: 320, 952 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Compass rotate: false - xy: 320, 952 + xy: 320, 844 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Computers rotate: false - xy: 320, 844 + xy: 320, 736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Construction rotate: false - xy: 320, 736 + xy: 1145, 1736 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Currency rotate: false - xy: 1253, 1758 + xy: 1361, 1758 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Dynamite rotate: false - xy: 428, 1160 + xy: 428, 1052 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Ecology rotate: false - xy: 428, 1052 + xy: 428, 944 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Economics rotate: false - xy: 428, 944 + xy: 428, 836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Education rotate: false - xy: 428, 836 + xy: 428, 728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Electricity rotate: false - xy: 428, 620 + xy: 536, 1484 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Electronics rotate: false - xy: 536, 1484 + xy: 536, 1376 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Engineering rotate: false - xy: 536, 1376 + xy: 536, 1268 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Fertilizer rotate: false - xy: 536, 944 + xy: 536, 836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Flight rotate: false - xy: 644, 1520 + xy: 644, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Future Tech rotate: false - xy: 644, 1196 + xy: 752, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Guilds rotate: false - xy: 752, 1196 + xy: 860, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Gunpowder rotate: false - xy: 860, 1304 + xy: 968, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Horseback Riding rotate: false - xy: 1076, 1520 + xy: 644, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Industrialization rotate: false - xy: 644, 872 + xy: 752, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Iron Working rotate: false - xy: 860, 1088 + xy: 968, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Lasers rotate: false - xy: 644, 656 + xy: 752, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Machinery rotate: false - xy: 1076, 1088 + xy: 752, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Masonry rotate: false - xy: 860, 656 + xy: 968, 764 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mass Media rotate: false - xy: 968, 764 + xy: 1076, 872 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mathematics rotate: false - xy: 1076, 872 + xy: 968, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metal Casting rotate: false - xy: 1076, 764 + xy: 1076, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Metallurgy rotate: false - xy: 1076, 656 + xy: 1184, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Military Science rotate: false - xy: 1184, 1520 + xy: 1184, 1412 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mining rotate: false - xy: 1184, 1304 + xy: 1184, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Mobile Tactics rotate: false - xy: 1184, 1088 + xy: 1184, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nanotechnology rotate: false - xy: 1292, 1542 + xy: 1292, 1434 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Navigation rotate: false - xy: 1292, 1326 + xy: 1292, 1218 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nuclear Fission rotate: false - xy: 1292, 1110 + xy: 1292, 1002 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Nuclear Fusion rotate: false - xy: 1292, 1002 + xy: 1292, 894 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Optics rotate: false - xy: 1400, 1542 + xy: 1400, 1434 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Particle Physics rotate: false - xy: 1400, 1326 + xy: 1400, 1218 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pharmaceuticals rotate: false - xy: 1400, 786 + xy: 1400, 678 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Philosophy rotate: false - xy: 1400, 678 + xy: 644, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Physics rotate: false - xy: 644, 548 + xy: 752, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Plastics rotate: false - xy: 968, 548 + xy: 1076, 548 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Pottery rotate: false - xy: 1184, 548 + xy: 1292, 570 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Printing Press rotate: false - xy: 1292, 570 + xy: 1400, 570 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Radar rotate: false - xy: 220, 152 + xy: 220, 44 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Radio rotate: false - xy: 220, 44 + xy: 1292, 462 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1749,112 +1742,112 @@ TechIcons/Railroad index: -1 TechIcons/Refrigeration rotate: false - xy: 1469, 1728 + xy: 1577, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Replaceable Parts rotate: false - xy: 1577, 1728 + xy: 1685, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rifling rotate: false - xy: 1901, 1728 + xy: 1508, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Robotics rotate: false - xy: 1508, 1512 + xy: 1616, 1620 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Rocketry rotate: false - xy: 1616, 1620 + xy: 1508, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Sailing rotate: false - xy: 1724, 1620 + xy: 1508, 1296 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Satellites rotate: false - xy: 1508, 1296 + xy: 1616, 1404 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Scientific Theory rotate: false - xy: 1616, 1404 + xy: 1724, 1512 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steam Power rotate: false - xy: 1508, 972 + xy: 1616, 1080 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Steel rotate: false - xy: 1616, 1080 + xy: 1724, 1188 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/The Wheel rotate: false - xy: 1508, 756 + xy: 1616, 864 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Theology rotate: false - xy: 1616, 864 + xy: 1724, 972 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Trapping rotate: false - xy: 1832, 1080 + xy: 1508, 648 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TechIcons/Writing rotate: false - xy: 1508, 540 + xy: 1616, 648 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/AtollOverlay rotate: false - xy: 1674, 1836 + xy: 1782, 1836 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/CityOverlay rotate: false - xy: 1037, 1736 + xy: 1037, 1628 size: 100, 100 orig: 100, 100 offset: 0, 0 @@ -1875,133 +1868,147 @@ TileSets/FantasyHex/CrosshatchHexagon index: -1 TileSets/Default/FalloutOverlay rotate: false - xy: 536, 1160 + xy: 536, 1052 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Flood plainsOverlay rotate: false - xy: 644, 1412 + xy: 752, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/ForestOverlay rotate: false - xy: 752, 1520 + xy: 644, 1304 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Hexagon rotate: false - xy: 4, 1804 + xy: 4, 1556 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 TileSets/FantasyHex/Hexagon rotate: false - xy: 4, 1804 + xy: 4, 1556 size: 277, 240 orig: 277, 240 offset: 0, 0 index: -1 TileSets/Default/HillOverlay rotate: false - xy: 968, 1412 + xy: 1076, 1520 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/IceOverlay rotate: false - xy: 752, 1088 + xy: 860, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/JungleOverlay rotate: false - xy: 752, 872 + xy: 860, 980 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/LakesOverlay rotate: false - xy: 968, 1088 + xy: 1076, 1196 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/MarshOverlay rotate: false - xy: 1076, 980 + xy: 860, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/MountainOverlay rotate: false - xy: 1184, 764 + xy: 1184, 656 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/NaturalWonderOverlay rotate: false - xy: 1292, 1434 + xy: 1292, 1326 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/OasisOverlay rotate: false - xy: 1292, 894 + xy: 1292, 786 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +TileSets/Default/Railroad + rotate: false + xy: 1469, 1728 + size: 100, 100 + orig: 100, 100 + offset: 0, 0 + index: -1 +ImprovementIcons/Railroad + rotate: false + xy: 1469, 1728 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 TileSets/Default/Tiles/River-Bottom rotate: false - xy: 1530, 316 + xy: 1998, 1153 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-Bottom rotate: false - xy: 1530, 316 + xy: 1998, 1153 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/Default/Tiles/River-BottomLeft rotate: false - xy: 1570, 312 + xy: 1998, 1117 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-BottomLeft rotate: false - xy: 1570, 312 + xy: 1998, 1117 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/Default/Tiles/River-BottomRight rotate: false - xy: 1610, 292 + xy: 1998, 1081 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/River-BottomRight rotate: false - xy: 1610, 292 + xy: 1998, 1081 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -2043,49 +2050,49 @@ TileSets/FantasyHex/Tiles/Academy-Snow index: -1 TileSets/FantasyHex/Tiles/Aluminum rotate: false - xy: 1724, 770 + xy: 1832, 878 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins rotate: false - xy: 1832, 878 + xy: 1940, 977 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Jungle rotate: false - xy: 618, 218 + xy: 734, 334 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Sand rotate: false - xy: 676, 280 + xy: 792, 396 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins-Snow rotate: false - xy: 734, 338 + xy: 850, 454 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ancient ruins2 rotate: false - xy: 1940, 977 + xy: 1616, 554 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Atoll rotate: false - xy: 1764, 770 + xy: 1872, 878 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -2099,7 +2106,7 @@ TileSets/FantasyHex/Tiles/Bananas index: -1 TileSets/FantasyHex/Tiles/Barbarian encampment rotate: false - xy: 192, 4 + xy: 618, 128 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -2113,14 +2120,14 @@ TileSets/FantasyHex/Tiles/Barbarian encampment-Snow index: -1 TileSets/FantasyHex/Tiles/Barringer Crater rotate: false - xy: 618, 146 + xy: 192, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cattle rotate: false - xy: 512, 4 + xy: 472, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -2134,21 +2141,21 @@ TileSets/FantasyHex/Tiles/Cattle+Pasture index: -1 TileSets/FantasyHex/Tiles/Cerro de Potosi rotate: false - xy: 592, 4 + xy: 552, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citadel rotate: false - xy: 1228, 505 + xy: 1188, 505 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Citadel-Snow rotate: false - xy: 1804, 768 + xy: 1228, 510 size: 32, 30 orig: 32, 30 offset: 0, 0 @@ -2169,392 +2176,392 @@ TileSets/FantasyHex/Tiles/City center-Ancient era index: -1 TileSets/FantasyHex/Tiles/City center-Classical era rotate: false - xy: 1732, 730 + xy: 1624, 514 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Future era rotate: false - xy: 1732, 688 + xy: 1624, 472 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Industrial era rotate: false - xy: 1732, 647 + xy: 1624, 431 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Information era rotate: false - xy: 1732, 603 + xy: 1664, 510 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Medieval era rotate: false - xy: 1840, 838 + xy: 1664, 470 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Modern era rotate: false - xy: 676, 238 + xy: 1664, 428 size: 32, 34 orig: 32, 34 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City center-Renaissance era rotate: false - xy: 734, 298 + xy: 1840, 838 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/City ruins rotate: false - xy: 792, 360 + xy: 1840, 802 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Coal rotate: false - xy: 908, 476 + xy: 1840, 730 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Coast rotate: false - xy: 948, 476 + xy: 1840, 694 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Cotton rotate: false - xy: 1188, 476 + xy: 676, 186 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Customs house rotate: false - xy: 658, 161 + xy: 988, 469 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Deer rotate: false - xy: 658, 125 + xy: 1028, 476 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Deer+Camp rotate: false - xy: 658, 89 + xy: 1068, 476 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert rotate: false - xy: 1980, 977 + xy: 1108, 472 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert+Farm rotate: false - xy: 1988, 941 + xy: 1148, 476 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Desert+Flood plains+Farm rotate: false - xy: 716, 262 + xy: 1188, 469 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Dyes rotate: false - xy: 774, 288 + xy: 1988, 941 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Dyes+Plantation rotate: false - xy: 832, 382 + xy: 774, 324 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/El Dorado rotate: false - xy: 832, 345 + xy: 774, 287 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fallout rotate: false - xy: 890, 433 + xy: 832, 375 size: 32, 35 orig: 32, 35 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fish rotate: false - xy: 930, 440 + xy: 774, 251 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fishing Boats rotate: false - xy: 698, 190 + xy: 658, 150 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Flood plains rotate: false - xy: 698, 154 + xy: 658, 114 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Forest rotate: false - xy: 698, 78 + xy: 890, 436 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fort rotate: false - xy: 658, 48 + xy: 658, 37 size: 32, 33 orig: 32, 33 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Fountain of Youth rotate: false - xy: 698, 38 + xy: 814, 320 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Furs rotate: false - xy: 756, 216 + xy: 814, 248 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Furs+Camp rotate: false - xy: 814, 309 + xy: 890, 400 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Gems rotate: false - xy: 738, 108 + xy: 716, 190 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Gold Ore rotate: false - xy: 738, 72 + xy: 698, 150 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grand Mesa rotate: false - xy: 738, 32 + xy: 698, 110 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland rotate: false - xy: 796, 237 + xy: 698, 74 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Farm rotate: false - xy: 796, 201 + xy: 698, 38 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Camp rotate: false - xy: 778, 162 + xy: 930, 437 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Deer+Camp rotate: false - xy: 778, 123 + xy: 930, 398 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Furs+Camp rotate: false - xy: 778, 84 + xy: 970, 430 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Forest+Lumber mill rotate: false - xy: 778, 45 + xy: 970, 391 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Farm rotate: false - xy: 970, 439 + xy: 1010, 433 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Camp rotate: false - xy: 1010, 439 + xy: 1010, 397 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Lumber mill rotate: false - xy: 890, 397 + xy: 1050, 440 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Hill+Forest+Trading post rotate: false - xy: 930, 404 + xy: 1050, 404 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Grassland+Jungle+Trading post rotate: false - xy: 970, 399 + xy: 1090, 432 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/GrasslandForest rotate: false - xy: 1010, 400 + xy: 1090, 393 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Great Barrier Reef rotate: false - xy: 854, 273 + xy: 1090, 357 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Hill rotate: false - xy: 876, 233 + xy: 1130, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillForest+Lumber mill rotate: false - xy: 876, 197 + xy: 1170, 325 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillMarbleQuarry rotate: false - xy: 858, 161 + xy: 1210, 325 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillMine rotate: false - xy: 858, 125 + xy: 1624, 395 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/HillStoneQuarry rotate: false - xy: 858, 89 + xy: 1664, 392 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Horses rotate: false - xy: 1130, 400 + xy: 738, 82 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Horses+Pasture rotate: false - xy: 1170, 436 + xy: 738, 42 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ice rotate: false - xy: 1210, 397 + xy: 1992, 905 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Incense rotate: false - xy: 898, 89 + xy: 1250, 402 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Incense+Plantation rotate: false - xy: 898, 53 + xy: 1250, 366 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Iron rotate: false - xy: 1250, 397 + xy: 1290, 426 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -2568,434 +2575,434 @@ TileSets/FantasyHex/Tiles/Ivory index: -1 TileSets/FantasyHex/Tiles/Ivory+Camp rotate: false - xy: 1370, 426 + xy: 1290, 354 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Jungle rotate: false - xy: 1290, 386 + xy: 1330, 350 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Krakatoa rotate: false - xy: 1450, 388 + xy: 738, 4 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Lakes rotate: false - xy: 1530, 388 + xy: 1410, 387 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Landmark rotate: false - xy: 632, 4 + xy: 1450, 346 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Manufactory rotate: false - xy: 1952, 890 + xy: 1490, 341 size: 32, 39 orig: 32, 39 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Marble rotate: false - xy: 1952, 854 + xy: 1530, 352 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Marsh rotate: false - xy: 1152, 362 + xy: 1490, 304 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mine rotate: false - xy: 1740, 567 + xy: 1610, 323 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Moai rotate: false - xy: 1740, 458 + xy: 1250, 293 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mount Fuji rotate: false - xy: 1998, 1635 + xy: 1410, 277 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Mountain rotate: false - xy: 1998, 1591 + xy: 1450, 266 size: 32, 36 orig: 32, 36 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oasis rotate: false - xy: 1998, 1375 + xy: 1530, 244 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Ocean rotate: false - xy: 1998, 1339 + xy: 1570, 244 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Offshore Platform rotate: false - xy: 1998, 1303 + xy: 1610, 251 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oil rotate: false - xy: 1998, 1267 + xy: 1650, 248 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Oil well rotate: false - xy: 1998, 1231 + xy: 1490, 232 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Old Faithful rotate: false - xy: 1998, 1191 + xy: 1690, 352 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Pasture rotate: false - xy: 1998, 1079 + xy: 1690, 240 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Pearls rotate: false - xy: 1330, 354 + xy: 1570, 208 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains rotate: false - xy: 1490, 352 + xy: 1610, 179 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Farm rotate: false - xy: 1530, 352 + xy: 1650, 176 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Forest+Camp rotate: false - xy: 1570, 348 + xy: 1690, 164 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Forest+Lumber mill rotate: false - xy: 1610, 368 + xy: 1998, 1669 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plains+Jungle+Trading post rotate: false - xy: 1650, 368 + xy: 1998, 1629 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/PlainsForest rotate: false - xy: 1690, 368 + xy: 1998, 1589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/PlainsJungle rotate: false - xy: 1610, 328 + xy: 1998, 1549 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation rotate: false - xy: 1650, 332 + xy: 1998, 1513 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation+Bananas rotate: false - xy: 1690, 332 + xy: 1998, 1477 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Plantation+Cotton rotate: false - xy: 1730, 350 + xy: 1998, 1441 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry rotate: false - xy: 1770, 350 + xy: 1998, 1333 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry+Marble rotate: false - xy: 1770, 314 + xy: 1998, 1297 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Quarry+Stone rotate: false - xy: 1410, 318 + xy: 1998, 1261 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Rock of Gibraltar rotate: false - xy: 1650, 292 + xy: 1998, 1041 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sheep rotate: false - xy: 1770, 242 + xy: 1570, 172 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sheep+Pasture rotate: false - xy: 1772, 728 + xy: 1610, 139 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silk rotate: false - xy: 1772, 619 + xy: 1690, 128 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silk+Plantation rotate: false - xy: 1812, 732 + xy: 872, 364 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Silver rotate: false - xy: 1812, 696 + xy: 912, 362 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Snow rotate: false - xy: 1780, 583 + xy: 854, 254 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Snow+Farm rotate: false - xy: 1780, 547 + xy: 854, 218 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Spices rotate: false - xy: 1780, 475 + xy: 894, 290 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Spices+Plantation rotate: false - xy: 1780, 439 + xy: 894, 254 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Stone rotate: false - xy: 1780, 403 + xy: 894, 218 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sugar rotate: false - xy: 1820, 586 + xy: 934, 326 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Sugar+Plantation rotate: false - xy: 1820, 550 + xy: 934, 290 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Terrace farm rotate: false - xy: 1820, 406 + xy: 894, 182 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Trading post rotate: false - xy: 952, 327 + xy: 1992, 833 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra rotate: false - xy: 1072, 328 + xy: 1880, 763 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Farm rotate: false - xy: 1112, 328 + xy: 1880, 727 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Camp rotate: false - xy: 1152, 322 + xy: 1920, 824 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Camp+Furs rotate: false - xy: 1192, 321 + xy: 1920, 784 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Deer+Camp rotate: false - xy: 1232, 321 + xy: 1920, 744 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Tundra+Forest+Lumber mill rotate: false - xy: 1272, 310 + xy: 1920, 704 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/TundraForest rotate: false - xy: 1312, 314 + xy: 1960, 793 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Uranium rotate: false - xy: 1352, 315 + xy: 1960, 721 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Whales rotate: false - xy: 1014, 291 + xy: 2000, 689 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Whales+Fishing Boats rotate: false - xy: 1054, 292 + xy: 1170, 289 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wheat rotate: false - xy: 1094, 292 + xy: 1210, 289 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wine rotate: false - xy: 956, 253 + xy: 1250, 257 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Tiles/Wine+Plantation rotate: false - xy: 996, 255 + xy: 1290, 246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/TopBorder rotate: false - xy: 912, 325 + xy: 934, 182 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -3009,21 +3016,21 @@ TileSets/FantasyHex/Units/African Forest Elephant index: -1 TileSets/FantasyHex/Units/Anti-Aircraft Gun rotate: false - xy: 792, 396 + xy: 908, 512 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Anti-Tank Gun rotate: false - xy: 850, 454 + xy: 618, 164 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Archer rotate: false - xy: 908, 512 + xy: 676, 222 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -3044,840 +3051,840 @@ TileSets/FantasyHex/Units/Atlatlist index: -1 TileSets/FantasyHex/Units/Axe Thrower rotate: false - xy: 1872, 878 + xy: 1656, 554 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ballista rotate: false - xy: 618, 182 + xy: 734, 298 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Battering Ram rotate: false - xy: 988, 512 + xy: 734, 262 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Battleship rotate: false - xy: 232, 4 + xy: 988, 512 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Bazooka rotate: false - xy: 1998, 1900 + xy: 618, 92 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Berber Cavalry rotate: false - xy: 618, 110 + xy: 1998, 1900 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Berserker rotate: false - xy: 1028, 512 + xy: 232, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Bowman rotate: false - xy: 272, 4 + xy: 1028, 512 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Brute rotate: false - xy: 1998, 1864 + xy: 618, 56 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Camel Archer rotate: false - xy: 618, 73 + xy: 1998, 1863 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cannon rotate: false - xy: 1068, 512 + xy: 272, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Caravel rotate: false - xy: 312, 4 + xy: 1068, 512 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Carolean rotate: false - xy: 352, 4 + xy: 312, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Carrier rotate: false - xy: 392, 4 + xy: 352, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cataphract rotate: false - xy: 432, 4 + xy: 392, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Catapult rotate: false - xy: 472, 4 + xy: 432, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cavalry rotate: false - xy: 552, 4 + xy: 512, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Chariot Archer rotate: false - xy: 1148, 512 + xy: 592, 4 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Chu-Ko-Nu rotate: false - xy: 1188, 512 + xy: 1148, 512 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/CivilianLandUnit rotate: false - xy: 850, 418 + xy: 1840, 766 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Comanche Rider rotate: false - xy: 988, 475 + xy: 1848, 657 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Companion Cavalry rotate: false - xy: 1028, 475 + xy: 1848, 620 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Composite Bowman rotate: false - xy: 1068, 476 + xy: 1848, 584 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Conquistador rotate: false - xy: 1108, 472 + xy: 792, 360 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cossack rotate: false - xy: 1148, 476 + xy: 850, 418 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Crossbowman rotate: false - xy: 1228, 469 + xy: 908, 476 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Cruiser rotate: false - xy: 658, 204 + xy: 948, 478 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Destroyer rotate: false - xy: 716, 226 + xy: 1228, 474 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Dromon rotate: false - xy: 774, 324 + xy: 1980, 977 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Foreign Legion rotate: false - xy: 698, 118 + xy: 658, 78 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Frigate rotate: false - xy: 756, 252 + xy: 814, 284 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Galleass rotate: false - xy: 814, 273 + xy: 734, 226 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Galley rotate: false - xy: 738, 180 + xy: 774, 215 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Gatling Gun rotate: false - xy: 738, 144 + xy: 814, 212 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Admiral rotate: false - xy: 872, 358 + xy: 1050, 365 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Artist rotate: false - xy: 854, 309 + xy: 1010, 361 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Engineer rotate: false - xy: 836, 237 + xy: 1130, 436 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Galleass rotate: false - xy: 836, 201 + xy: 1130, 400 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great General rotate: false - xy: 818, 162 + xy: 1130, 361 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Merchant rotate: false - xy: 818, 126 + xy: 1170, 433 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Musician rotate: false - xy: 818, 90 + xy: 1170, 397 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Prophet rotate: false - xy: 818, 54 + xy: 1170, 361 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Scientist rotate: false - xy: 1050, 439 + xy: 1210, 433 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great War Infantry rotate: false - xy: 1050, 403 + xy: 1210, 397 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Great Writer rotate: false - xy: 1090, 436 + xy: 1210, 361 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hakkapeliitta rotate: false - xy: 1090, 400 + xy: 1050, 329 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Helicopter Gunship rotate: false - xy: 912, 361 + xy: 1090, 321 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hoplite rotate: false - xy: 858, 53 + xy: 1848, 548 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Horse Archer rotate: false - xy: 952, 363 + xy: 738, 154 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Horseman rotate: false - xy: 1130, 436 + xy: 738, 118 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hussar rotate: false - xy: 1170, 399 + xy: 1952, 900 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Hwach'a rotate: false - xy: 1210, 433 + xy: 1952, 864 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Immortal rotate: false - xy: 898, 161 + xy: 1992, 869 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Impi rotate: false - xy: 898, 125 + xy: 1250, 438 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Infantry rotate: false - xy: 1250, 433 + xy: 1250, 330 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ironclad rotate: false - xy: 1290, 426 + xy: 1290, 390 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Jaguar rotate: false - xy: 1410, 426 + xy: 1330, 390 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Janissary rotate: false - xy: 1450, 426 + xy: 1370, 426 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Keshik rotate: false - xy: 1330, 390 + xy: 1370, 390 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Khan rotate: false - xy: 1370, 387 + xy: 1410, 423 size: 32, 31 orig: 32, 31 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Knight rotate: false - xy: 1410, 390 + xy: 1370, 354 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Kris Swordsman rotate: false - xy: 1490, 388 + xy: 1450, 426 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Lancer rotate: false - xy: 1570, 388 + xy: 1450, 390 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/LandUnit rotate: false - xy: 992, 363 + xy: 1410, 351 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Landship rotate: false - xy: 778, 9 + xy: 1290, 318 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Landsknecht rotate: false - xy: 818, 18 + xy: 1330, 314 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Legion rotate: false - xy: 858, 17 + xy: 1370, 318 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Longbowman rotate: false - xy: 898, 17 + xy: 1410, 315 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Longswordsman rotate: false - xy: 1032, 364 + xy: 1450, 310 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Machine Gun rotate: false - xy: 1072, 364 + xy: 1490, 388 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mandekalu Cavalry rotate: false - xy: 1112, 364 + xy: 1530, 388 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Maori Warrior rotate: false - xy: 1992, 905 + xy: 1570, 388 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Marine rotate: false - xy: 1992, 869 + xy: 1570, 352 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mechanized Infantry rotate: false - xy: 1192, 361 + xy: 1530, 316 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mehal Sefari rotate: false - xy: 1232, 361 + xy: 1570, 316 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Merchant Of Venice rotate: false - xy: 1992, 833 + xy: 1610, 359 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Minuteman rotate: false - xy: 1740, 531 + xy: 1650, 356 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Missile Cruiser rotate: false - xy: 1740, 495 + xy: 1650, 320 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mobile SAM rotate: false - xy: 1740, 422 + xy: 1290, 282 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Modern Armor rotate: false - xy: 1740, 386 + xy: 1330, 278 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Mohawk Warrior rotate: false - xy: 1998, 1673 + xy: 1370, 282 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Musketeer rotate: false - xy: 1998, 1555 + xy: 1490, 268 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Musketman rotate: false - xy: 1998, 1519 + xy: 1530, 280 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Naresuan's Elephant rotate: false - xy: 1998, 1483 + xy: 1570, 280 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Nau rotate: false - xy: 1998, 1447 + xy: 1610, 287 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Norwegian Ski Infantry rotate: false - xy: 1998, 1411 + xy: 1650, 284 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Panzer rotate: false - xy: 1998, 1155 + xy: 1690, 316 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Paratrooper rotate: false - xy: 1998, 1119 + xy: 1690, 280 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pathfinder rotate: false - xy: 1998, 1043 + xy: 1530, 208 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Persian Immortal rotate: false - xy: 1370, 351 + xy: 1610, 215 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pictish Warrior rotate: false - xy: 1410, 354 + xy: 1650, 212 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pikeman rotate: false - xy: 1450, 352 + xy: 1690, 204 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Pracinha rotate: false - xy: 1730, 314 + xy: 1998, 1405 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Privateer rotate: false - xy: 1272, 350 + xy: 1998, 1369 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Quinquereme rotate: false - xy: 1450, 316 + xy: 1998, 1225 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Rifleman rotate: false - xy: 1490, 316 + xy: 1998, 1189 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Rocket Artillery rotate: false - xy: 1690, 296 + xy: 1370, 246 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Samurai rotate: false - xy: 1730, 278 + xy: 1410, 241 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Scout rotate: false - xy: 1770, 278 + xy: 1450, 230 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Sea Beggar rotate: false - xy: 1690, 260 + xy: 1490, 196 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Settler rotate: false - xy: 1730, 241 + xy: 1530, 171 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Ship of the Line rotate: false - xy: 1772, 691 + xy: 1650, 139 size: 32, 29 orig: 32, 29 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Siege Tower rotate: false - xy: 1772, 655 + xy: 1570, 136 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Sipahi rotate: false - xy: 1812, 658 + xy: 854, 326 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Slinger rotate: false - xy: 1812, 622 + xy: 854, 290 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Spearman rotate: false - xy: 1780, 511 + xy: 894, 326 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Submarine rotate: false - xy: 672, 4 + xy: 698, 4 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Swordsman rotate: false - xy: 1820, 514 + xy: 934, 254 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Tank rotate: false - xy: 1820, 478 + xy: 934, 218 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Tercio rotate: false - xy: 1820, 442 + xy: 854, 182 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Trebuchet rotate: false - xy: 992, 327 + xy: 1880, 835 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Trireme rotate: false - xy: 1032, 328 + xy: 1880, 799 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Turtle Ship rotate: false - xy: 894, 289 + xy: 1960, 757 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/War Chariot rotate: false - xy: 934, 289 + xy: 2000, 797 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/War Elephant rotate: false - xy: 974, 291 + xy: 2000, 761 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Warrior rotate: false - xy: 916, 253 + xy: 2000, 725 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/WaterUnit rotate: false - xy: 916, 219 + xy: 1960, 687 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Winged Hussar rotate: false - xy: 956, 217 + xy: 1330, 242 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Work Boats rotate: false - xy: 996, 219 + xy: 1370, 210 size: 32, 28 orig: 32, 28 offset: 0, 0 index: -1 TileSets/FantasyHex/Units/Worker rotate: false - xy: 1036, 255 + xy: 1410, 205 size: 32, 28 orig: 32, 28 offset: 0, 0 @@ -3891,14 +3898,14 @@ UnitPromotionIcons/Accuracy index: -1 UnitPromotionIcons/Air Repair rotate: false - xy: 1724, 806 + xy: 1832, 914 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Ambush rotate: false - xy: 1508, 482 + xy: 1616, 590 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -3975,14 +3982,14 @@ UnitPromotionIcons/Coastal Raider index: -1 UnitPromotionIcons/Cover rotate: false - xy: 1674, 582 + xy: 1782, 690 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 PolicyIcons/Discipline rotate: false - xy: 1674, 582 + xy: 1782, 690 size: 50, 50 orig: 50, 50 offset: 0, 0 @@ -3996,189 +4003,189 @@ UnitPromotionIcons/Drill index: -1 UnitPromotionIcons/Evasion rotate: false - xy: 1624, 524 + xy: 1732, 632 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Extended Range rotate: false - xy: 1624, 466 + xy: 1790, 632 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Operational Range rotate: false - xy: 1624, 466 + xy: 1790, 632 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Flight Deck rotate: false - xy: 1682, 466 + xy: 1790, 574 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Formation rotate: false - xy: 1624, 408 + xy: 328, 570 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Great Generals rotate: false - xy: 328, 396 + xy: 328, 280 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Quick Study rotate: false - xy: 328, 396 + xy: 328, 280 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Haka War Dance rotate: false - xy: 328, 338 + xy: 328, 222 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Heal Instantly rotate: false - xy: 328, 280 + xy: 328, 164 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Indirect Fire rotate: false - xy: 328, 164 + xy: 328, 48 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Interception rotate: false - xy: 328, 48 + xy: 386, 504 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Logistics rotate: false - xy: 444, 562 + xy: 444, 504 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/March rotate: false - xy: 444, 504 + xy: 386, 388 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Medic rotate: false - xy: 502, 562 + xy: 444, 446 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Mobility rotate: false - xy: 502, 446 + xy: 386, 272 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Morale rotate: false - xy: 386, 272 + xy: 502, 388 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Rejuvenation rotate: false - xy: 444, 98 + xy: 560, 214 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Scouting rotate: false - xy: 560, 98 + xy: 444, 40 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sentry rotate: false - xy: 560, 98 + xy: 444, 40 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Shock rotate: false - xy: 444, 40 + xy: 560, 40 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Slinger Withdraw rotate: false - xy: 502, 40 + xy: 618, 490 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Sortie rotate: false - xy: 618, 490 + xy: 676, 490 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting rotate: false - xy: 618, 374 + xy: 734, 490 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Targeting I (air) rotate: false - xy: 618, 374 + xy: 734, 490 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Volley rotate: false - xy: 676, 316 + xy: 792, 432 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Wolfpack rotate: false - xy: 792, 432 + xy: 618, 200 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 UnitPromotionIcons/Woodsman rotate: false - xy: 850, 490 + xy: 676, 258 size: 50, 50 orig: 50, 50 offset: 0, 0 diff --git a/android/assets/game.png b/android/assets/game.png index 3889b3c496..9af1dfba89 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/Civ V - Vanilla/Buildings.json b/android/assets/jsons/Civ V - Vanilla/Buildings.json index 1fc6acdd09..e533fe74d7 100644 --- a/android/assets/jsons/Civ V - Vanilla/Buildings.json +++ b/android/assets/jsons/Civ V - Vanilla/Buildings.json @@ -1033,7 +1033,7 @@ { "name": "SS Booster", "requiredResource": "Aluminum", - "requiredTech": "Robotics", + "requiredTech": "Advanced Ballistics", "uniques": ["Spaceship part", "Triggers a global alert upon completion", "Cannot be purchased"] }, { diff --git a/android/assets/jsons/Civ V - Vanilla/Techs.json b/android/assets/jsons/Civ V - Vanilla/Techs.json index e9826eca62..17783ac26d 100644 --- a/android/assets/jsons/Civ V - Vanilla/Techs.json +++ b/android/assets/jsons/Civ V - Vanilla/Techs.json @@ -560,9 +560,15 @@ "quote": "'All men can see these tactics whereby I conquer, but what none can see is the strategy out of which victory is evolved.' - Sun Tzu" }, { - "name": "Satellites", + "name": "Advanced Ballistics", "row": 5, "prerequisites": ["Nuclear Fission","Rocketry"], + "quote": "Our scientific power has outrun our spiritual power, we have guided missiles and misguided men. – Martin Luther King Jr. " + }, + { + "name": "Satellites", + "row": 6, + "prerequisites": ["Rocketry"], "uniques": ["Reveals the entire map"], "quote": "'Now, somehow, in some new way, the sky seemed almost alien.' - Lyndon B. Johnson" }, @@ -591,13 +597,13 @@ { "name": "Particle Physics", "row": 4, - "prerequisites": ["Mobile Tactics","Satellites"], + "prerequisites": ["Mobile Tactics", "Advanced Ballistics"], "quote": "'Every particle of matter is attracted by or gravitates to every other particle of matter with a force inversely proportional to the squares of their distances.' - Isaac Newton" }, { "name": "Nuclear Fusion", "row": 6, - "prerequisites": [/*"Advanced Ballistics" ,*/ "Satellites", "Robotics"], + "prerequisites": ["Advanced Ballistics", "Satellites", "Robotics"], "quote": "'The release of atomic energy has not created a new problem. It has readily made more urgent the necessity of solving an existing one.' - Albert Einstein" }, { diff --git a/android/assets/jsons/Civ V - Vanilla/Terrains.json b/android/assets/jsons/Civ V - Vanilla/Terrains.json index 711c771ed3..3da711d1c8 100644 --- a/android/assets/jsons/Civ V - Vanilla/Terrains.json +++ b/android/assets/jsons/Civ V - Vanilla/Terrains.json @@ -1,4 +1,4 @@ -[ +[ // Base terrains { "name": "Ocean", @@ -71,7 +71,7 @@ "RGB": [231, 242, 249], "uniques": ["Occurs at temperature between [-1] and [-0.4] and humidity between [0] and [0.5]"] }, - + // Terrain features { "name": "Hill", @@ -95,8 +95,8 @@ "unbuildable": true, "defenceBonus": 0.25, "occursOn": ["Tundra","Plains","Grassland","Hill"], - "uniques": ["Rough terrain", "Provides a one-time Production bonus to the closest city when cut down", - "Blocks line-of-sight from tiles at same elevation"] + "uniques": ["Provides a one-time Production bonus to the closest city when cut down", "Rough terrain", + "Blocks line-of-sight from tiles at same elevation", "Resistant to nukes", "Can be destroyed by nukes"] }, { "name": "Jungle", @@ -107,7 +107,7 @@ "unbuildable": true, "defenceBonus": 0.25, "occursOn": ["Plains","Grassland"], - "uniques": ["Rough terrain", "Blocks line-of-sight from tiles at same elevation"] + "uniques": ["Rough terrain", "Blocks line-of-sight from tiles at same elevation", "Resistant to nukes", "Can be destroyed by nukes"] }, { "name": "Marsh", @@ -164,7 +164,7 @@ "occursOn": ["Coast"], "uniques": ["Rare feature"] }, - + // Natural Wonders { "name": "Great Barrier Reef", @@ -277,7 +277,7 @@ "weight": 10 } /* - {// Will be introduced in Brave New World. Despite being a lake, it cannot be sailed on and it blocks line of sight like a mountain. + {// Will be introduced in Brave New World. Despite being a lake, it cannot be sailed on and it blocks line of sight like a mountain. "name": "Lake Victoria", "type": "NaturalWonder", "food": 6, @@ -289,4 +289,4 @@ "weight": 5 } */ -] +] diff --git a/android/assets/jsons/Civ V - Vanilla/TileImprovements.json b/android/assets/jsons/Civ V - Vanilla/TileImprovements.json index 6087ce72d6..0779c15e34 100644 --- a/android/assets/jsons/Civ V - Vanilla/TileImprovements.json +++ b/android/assets/jsons/Civ V - Vanilla/TileImprovements.json @@ -129,9 +129,9 @@ }, { "name": "Remove Fallout", - "turnsToBuild": 8, + "turnsToBuild": 2, "terrainsCanBeBuiltOn": ["Fallout"], - "techRequired": "Atomic Theory", + // Has no tile improvements as it can always be built "uniques": ["Can be built outside your borders"], "shortcutKey": "X" }, diff --git a/android/assets/jsons/Civ V - Vanilla/Units.json b/android/assets/jsons/Civ V - Vanilla/Units.json index 1e634bfd43..9fba7dfd4f 100644 --- a/android/assets/jsons/Civ V - Vanilla/Units.json +++ b/android/assets/jsons/Civ V - Vanilla/Units.json @@ -270,7 +270,7 @@ // 10 strength in expansions }, */ - + /* Classical Era */ { "name": "Horseman", @@ -409,7 +409,7 @@ // 14 strength in expansions }, */ - + // Medieval Era { "name": "Pikeman", @@ -663,7 +663,7 @@ "attackSound": "metalhit" //Danish unique unit. Can attack from the sea without any penalty, and moves faster. }, - + // Rennaisance Era { @@ -831,9 +831,9 @@ "obsoleteTech": "Dynamite", "uniques": ["+[200]% Strength vs [City]","No defensive terrain bonus","Must set up to ranged attack","Limited Visibility"] }, - + // Industrial Era - + { "name": "Gatling Gun", "unitType": "Ranged", @@ -1195,7 +1195,6 @@ "upgradesTo": "Helicopter Gunship", "uniques": ["+[100]% Strength vs [Armor]"] }, - /* { "name": "Atomic Bomb", "unitType": "AtomicBomber", @@ -1206,11 +1205,13 @@ "cost": 600, "requiredTech": "Nuclear Fission", "requiredResource": "Uranium", - "uniques": ["Nuclear weapon", "Requires [Manhattan Project]", "Self-destructs when attacking"] - // Plane rather than a missile - can be based in city or Carrier only. But cannot be intercepted because of a civ 5 bug that was never fixed. - // Single-use like missile - // No strength/rangedStrength tags in civ 5 xmls. Instead has NukeDamageLevel = 1 tag (Nuclear Missile has NukeDamageLevel = 2) - }, */ + "promotions" : ["Evasion"], + "uniques": ["Nuclear weapon of strength [1]", "Requires [Manhattan Project]", "Self-destructs when attacking", + "Blast radius [2]"], + "attackSound": "nuke" + // Plane rather than a missile - can be based in city or Carrier only. + // Can be intercepted, be must die for it not to take effect. + }, { "name": "Rocket Artillery", "unitType": "Siege", @@ -1243,7 +1244,7 @@ "rangedStrength": 60, "range": 8, "cost": 150, - "requiredTech": "Rocketry", + "requiredTech": "Advanced Ballistics", "uniques": ["Self-destructs when attacking"] }, { @@ -1254,9 +1255,9 @@ "rangedStrength": 300, "range": 12, "cost": 1000, - "requiredTech": "Rocketry", - "requiredResource": "Uranium", - "uniques": ["Self-destructs when attacking", "Nuclear weapon", "Requires [Manhattan Project]"], + "requiredTech": "Advanced Ballistics", + "uniques": ["Self-destructs when attacking", "Nuclear weapon of strength [2]", "Requires [Manhattan Project]", + "Blast radius [2]", "Consumes [2] [Uranium]"], "attackSound": "nuke" }, { @@ -1369,9 +1370,9 @@ // cannot be based on carrier }, */ - + /* Great people */ - + { "name": "Great Artist", "unitType": "Civilian", @@ -1423,7 +1424,7 @@ "unitType": "Civilian", "movement": 2, "cost": 500, - "requiredTech": "Robotics", + "requiredTech": "Advanced Ballistics", "requiredResource": "Aluminum", "uniques": ["Spaceship part", "Cannot be purchased", "Requires [Apollo Program]"] // costs 750 in G&K, 1500 in BNW diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index e153662639..c51bfcda12 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -435,6 +435,7 @@ An enemy [unit] was spotted near our territory = An enemy [unit] was spotted in our territory = [amount] enemy units were spotted near our territory = [amount] enemy units were spotted in our territory = +A(n) [nukeType] exploded in our territory! = The civilization of [civName] has been destroyed! = The City-State of [name] has been destroyed! = We have captured a barbarian encampment and recovered [goldAmount] gold! = diff --git a/core/src/com/unciv/logic/automation/Automation.kt b/core/src/com/unciv/logic/automation/Automation.kt index 8417ed41ba..d8e432f287 100644 --- a/core/src/com/unciv/logic/automation/Automation.kt +++ b/core/src/com/unciv/logic/automation/Automation.kt @@ -77,7 +77,7 @@ object Automation { || (it.militaryUnit != null && it.militaryUnit!!.civInfo != city.civInfo) }) // there is absolutely no reason for you to make water units on this body of water. militaryUnits = - militaryUnits.filter { it.unitType.isLandUnit() || it.unitType.isAirUnit() } + militaryUnits.filter { !it.unitType.isWaterUnit() } val chosenUnit: BaseUnit if (!city.civInfo.isAtWar() && city.civInfo.cities.any { it.getCenterTile().militaryUnit == null } diff --git a/core/src/com/unciv/logic/automation/BattleHelper.kt b/core/src/com/unciv/logic/automation/BattleHelper.kt index 22b3d0db19..737b6f0399 100644 --- a/core/src/com/unciv/logic/automation/BattleHelper.kt +++ b/core/src/com/unciv/logic/automation/BattleHelper.kt @@ -49,7 +49,7 @@ object BattleHelper { // Silly floats, basically val unitMustBeSetUp = unit.hasUnique("Must set up to ranged attack") - val tilesToAttackFrom = if (unit.type.isAirUnit()) sequenceOf(unit.currentTile) + val tilesToAttackFrom = if (unit.baseUnit.movesLikeAirUnits()) sequenceOf(unit.currentTile) else unitDistanceToTiles.asSequence() .filter { @@ -63,7 +63,7 @@ object BattleHelper { for (reachableTile in tilesToAttackFrom) { // tiles we'll still have energy after we reach there val tilesInAttackRange = - if (unit.hasUnique("Ranged attacks may be performed over obstacles") || unit.type.isAirUnit()) + if (unit.hasUnique("Ranged attacks may be performed over obstacles") || unit.baseUnit.movesLikeAirUnits()) reachableTile.getTilesInDistance(rangeOfAttack) else reachableTile.getViewableTilesList(rangeOfAttack) .asSequence() diff --git a/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt b/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt index 73d99f3ae7..877ad6ffc3 100644 --- a/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/SpecificUnitAutomation.kt @@ -312,11 +312,11 @@ object SpecificUnitAutomation { // This really needs to be changed, to have better targetting for missiles fun automateMissile(unit: MapUnit) { val tilesInRange = unit.currentTile.getTilesInDistance(unit.getRange()) - if (unit.hasUnique("Nuclear weapon")) { + if (unit.baseUnit.isNuclearWeapon()) { for (tile in tilesInRange) { // For now AI will only use nukes against cities because in all honesty that's the best use for them. if (tile.isCityCenter() && tile.getOwner()!!.isAtWarWith(unit.civInfo)) { - Battle.nuke(MapUnitCombatant(unit), tile) + Battle.NUKE(MapUnitCombatant(unit), tile) return } } diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index d24d12b384..a62ec6de4d 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -5,12 +5,15 @@ import com.unciv.UncivGame import com.unciv.logic.city.CityInfo import com.unciv.logic.civilization.* import com.unciv.logic.civilization.diplomacy.DiplomaticModifiers +import com.unciv.logic.civilization.diplomacy.DiplomaticStatus +import com.unciv.logic.map.MapUnit import com.unciv.logic.map.RoadStatus import com.unciv.logic.map.TileInfo import com.unciv.models.AttackableTile import com.unciv.models.ruleset.Unique import com.unciv.models.ruleset.unit.UnitType import com.unciv.models.stats.Stat +import com.unciv.models.translations.tr import java.util.* import kotlin.math.max @@ -28,8 +31,9 @@ object Battle { } } - if (attacker is MapUnitCombatant && attacker.unit.hasUnique("Nuclear weapon")) { - return nuke(attacker, attackableTile.tileToAttack) + if (attacker is MapUnitCombatant && attacker.unit.baseUnit.isNuclearWeapon() + ) { + return NUKE(attacker, attackableTile.tileToAttack) } attack(attacker, getMapCombatantOfTile(attackableTile.tileToAttack)!!) } @@ -250,7 +254,7 @@ object Battle { // if it was a melee attack and we won, then the unit ALREADY got movement points deducted, // for the movement to the enemy's tile! // and if it's an air unit, it only has 1 movement anyway, so... - if (!attacker.getUnitType().isAirUnit() && !(attacker.getUnitType().isMelee() && defender.isDefeated())) + if (!attacker.unit.baseUnit.movesLikeAirUnits() && !(attacker.getUnitType().isMelee() && defender.isDefeated())) unit.useMovementPoints(1f) } else unit.currentMovement = 0f unit.attacksThisTurn += 1 @@ -378,64 +382,202 @@ object Battle { attacker.popupAlerts.add(PopupAlert(AlertType.Defeated, attackedCiv.civName)) } } - - const val NUKE_RADIUS = 2 - - fun nuke(attacker: ICombatant, targetTile: TileInfo) { + + fun NUKE(attacker: MapUnitCombatant, targetTile: TileInfo) { val attackingCiv = attacker.getCivInfo() - for (tile in targetTile.getTilesInDistance(NUKE_RADIUS)) { - val city = tile.getCity() - if (city != null && city.location == tile.position) { - city.health = 1 - if (city.population.population <= 5 && !city.isOriginalCapital) { - city.destroyCity() - } else { - city.population.population = max(city.population.population - 5, 1) - city.population.unassignExtraPopulation() - continue - } - destroyIfDefeated(city.civInfo, attackingCiv) + fun tryDeclareWar(civSuffered: CivilizationInfo) { + if (civSuffered != attackingCiv + && civSuffered.knows(attackingCiv) + && civSuffered.getDiplomacyManager(attackingCiv).diplomaticStatus != DiplomaticStatus.War + ) { + attackingCiv.getDiplomacyManager(civSuffered).declareWar() } + } + + val blastRadius = + if (!attacker.unit.hasUnique("Blast radius []")) 2 + else attacker.unit.getMatchingUniques("Blast radius []").first().params[0].toInt() - fun declareWar(civSuffered: CivilizationInfo) { - if (civSuffered != attackingCiv - && civSuffered.knows(attackingCiv) - && civSuffered.getDiplomacyManager(attackingCiv).canDeclareWar()) { - attackingCiv.getDiplomacyManager(civSuffered).declareWar() - } - } - - for (unit in tile.getUnits()) { - unit.destroy() - postBattleNotifications(attacker, MapUnitCombatant(unit), unit.currentTile) - declareWar(unit.civInfo) - destroyIfDefeated(unit.civInfo, attackingCiv) - } - - // this tile belongs to some civilization who is not happy of nuking it - if (city != null) - declareWar(city.civInfo) - - tile.improvement = null - tile.improvementInProgress = null - tile.turnsToImprovement = 0 - tile.roadStatus = RoadStatus.None - if (tile.isLand && !tile.isImpassible() && !tile.terrainFeatures.contains("Fallout")) - tile.terrainFeatures.add("Fallout") + val strength = when { + (attacker.unit.hasUnique("Nuclear weapon of strength []")) -> + attacker.unit.getMatchingUniques("Nuclear weapon of strength []").first().params[0].toInt() + // Deprecated since 3.15.3 + (attacker.unit.hasUnique("Nuclear weapon")) -> 1 + // + else -> return + } + + // Calculate the tiles that are hit + val hitTiles = targetTile.getTilesInDistance(blastRadius) + + // Declare war on the owners of all hit tiles + for (hitCiv in hitTiles.map { it.getOwner() }.distinct()) { + hitCiv!!.addNotification("A(n) [${attacker.getName()}] exploded in our territory!".tr(), targetTile.position, NotificationIcon.War) + tryDeclareWar(hitCiv) } - for (civ in attacker.getCivInfo().getKnownCivs()) { - civ.getDiplomacyManager(attackingCiv) - .setModifier(DiplomaticModifiers.UsedNuclearWeapons, -50f) + // Declare war on all potentially hit units. They'll try to intercept the nuke before it drops + for (hitUnit in hitTiles.map { it.getUnits() }.flatten()) { + tryDeclareWar(hitUnit.civInfo) + if (attacker.getUnitType().isAirUnit() && !attacker.isDefeated()) { + tryInterceptAirAttack(attacker, MapUnitCombatant(hitUnit)) + } } - - // Instead of postBattleAction() just destroy the missile, all other functions are not relevant - if ((attacker as MapUnitCombatant).unit.hasUnique("Self-destructs when attacking")) { + if (attacker.isDefeated()) return + + // Destroy units on the target tile + for (defender in targetTile.getUnits().filter { it != attacker.unit }) { + defender.destroy() + postBattleNotifications(attacker, MapUnitCombatant(defender), defender.getTile()) + destroyIfDefeated(defender.civInfo, attacker.getCivInfo()) + } + + for (tile in hitTiles) { + // Handle complicated effects + when (strength) { + 1 -> nukeStrength1Effect(attacker, tile) + 2 -> nukeStrength2Effect(attacker, tile) + else -> nukeStrength1Effect(attacker, tile) + } + } + + // Instead of postBattleAction() just destroy the unit, all other functions are not relevant + if (attacker.unit.hasUnique("Self-destructs when attacking")) { attacker.unit.destroy() } + + // It's unclear whether using nukes results in a penalty with all civs, or only affected civs. + // For now I'll make it give a diplomatic penalty to all known civs, but some testing for this would be appreciated + for (civ in attackingCiv.getKnownCivs()) { + civ.getDiplomacyManager(attackingCiv).setModifier(DiplomaticModifiers.UsedNuclearWeapons, -50f) + } + } + + private fun nukeStrength1Effect(attacker: MapUnitCombatant, tile: TileInfo) { + // https://forums.civfanatics.com/resources/unit-guide-modern-future-units-g-k.25628/ + // https://www.carlsguides.com/strategy/civilization5/units/aircraft-nukes.php + // Testing done by Ravignir + var damageModifierFromMissingResource = 1f + val civResources = attacker.getCivInfo().getCivResourcesByName() + for (resource in attacker.unit.baseUnit.getResourceRequirements().keys) { + if (civResources[resource]!! < 0 && !attacker.getCivInfo().isBarbarian()) + damageModifierFromMissingResource *= 0.5f // I could not find a source for this number, but this felt about right + } + + // Decrease health & population of a hit city + val city = tile.getCity() + if (city != null && tile.position == city.location) { + var populationLoss = city.population.population * (0.3 + Random().nextFloat() * 0.4) + var populationLossReduced = false + for (unique in city.civInfo.getMatchingUniques("Population loss from nuclear attacks -[]%")) { + populationLoss *= 1 - unique.params[0].toFloat() / 100f + populationLossReduced = true + } + if (city.population.population < 5 && !populationLossReduced) { + city.population.population = 1 // For cities that cannot be destroyed, such as original capitals + city.destroyCity() + } else { + city.population.population -= populationLoss.toInt() + if (city.population.population < 1) city.population.population = 1 + city.population.unassignExtraPopulation() + city.health -= ((0.5 + 0.25 * Random().nextFloat()) * city.health * damageModifierFromMissingResource).toInt() + if (city.health < 1) city.health = 1 + } + postBattleNotifications(attacker, CityCombatant(city), city.getCenterTile()) + } + + // Damage and/or destroy units on the tile + for (unit in tile.getUnits()) { + val defender = MapUnitCombatant(unit) + if (defender.unit.baseUnit.unitType.isCivilian()) { + unit.destroy() // destroy the unit + } else { + defender.takeDamage(((40 + Random().nextInt(60)) * damageModifierFromMissingResource).toInt()) + } + postBattleNotifications(attacker, defender, defender.getTile()) + destroyIfDefeated(defender.getCivInfo(), attacker.getCivInfo()) + } + + // Remove improvements, add fallout + tile.improvement = null + tile.improvementInProgress = null + tile.turnsToImprovement = 0 + tile.roadStatus = RoadStatus.None + if (tile.isLand && !tile.isImpassible() && !tile.terrainFeatures.contains("Fallout")) { + if (tile.terrainFeatures.any { attacker.getCivInfo().gameInfo.ruleSet.terrains[it]!!.uniques.contains("Resistant to nukes") }) { + if (Random().nextFloat() < 0.25f) { + tile.terrainFeatures.removeAll { attacker.getCivInfo().gameInfo.ruleSet.terrains[it]!!.uniques.contains("Can be destroyed by nukes") } + tile.terrainFeatures.add("Fallout") + } + } else if (Random().nextFloat() < 0.5f) { + tile.terrainFeatures.removeAll { attacker.getCivInfo().gameInfo.ruleSet.terrains[it]!!.uniques.contains("Can be destroyed by nukes") } + tile.terrainFeatures.add("Fallout") + } + } + } + + private fun nukeStrength2Effect(attacker: MapUnitCombatant, tile: TileInfo) { + // https://forums.civfanatics.com/threads/unit-guide-modern-future-units-g-k.429987/#2 + // https://www.carlsguides.com/strategy/civilization5/units/aircraft-nukes.php + // Testing done by Ravignir + var damageModifierFromMissingResource = 1f + val civResources = attacker.getCivInfo().getCivResourcesByName() + for (resource in attacker.unit.baseUnit.getResourceRequirements().keys) { + if (civResources[resource]!! < 0 && !attacker.getCivInfo().isBarbarian()) + damageModifierFromMissingResource *= 0.5f // I could not find a source for this number, but this felt about right + } + + // Damage and/or destroy cities + val city = tile.getCity() + if (city != null && city.location == tile.position) { + if (city.population.population < 5) { + city.population.population = 1 // For cities that cannot be destroyed, such as original capitals + city.destroyCity() + } else { + var populationLoss = city.population.population * (0.6 + Random().nextFloat() * 0.2); + var populationLossReduced = false + for (unique in city.civInfo.getMatchingUniques("Population loss from nuclear attacks -[]%")) { + populationLoss *= 1 - unique.params[0].toFloat() / 100f + populationLossReduced = true + } + city.population.population -= populationLoss.toInt() + if (city.population.population < 5 && populationLossReduced) city.population.population = 5 + if (city.population.population < 1) city.population.population = 1 + city.population.unassignExtraPopulation() + city.health -= (0.5 * city.getMaxHealth() * damageModifierFromMissingResource).toInt() + if (city.health < 1) city.health = 1 + } + postBattleNotifications(attacker, CityCombatant(city), city.getCenterTile()) + destroyIfDefeated(city.civInfo, attacker.getCivInfo()) + } + + // Destroy all hit units + for (defender in tile.getUnits()) { + defender.destroy() + postBattleNotifications(attacker, MapUnitCombatant(defender), defender.currentTile) + destroyIfDefeated(defender.civInfo, attacker.getCivInfo()) + } + + // Remove improvements + tile.improvement = null + tile.improvementInProgress = null + tile.turnsToImprovement = 0 + tile.roadStatus = RoadStatus.None + if (tile.isLand && !tile.isImpassible() && !tile.terrainFeatures.contains("Fallout")) { + if (tile.terrainFeatures.any { attacker.getCivInfo().gameInfo.ruleSet.terrains[it]!!.uniques.contains("Resistant to nukes") }) { + if (Random().nextFloat() < 0.25f) { + tile.terrainFeatures.removeAll { attacker.getCivInfo().gameInfo.ruleSet.terrains[it]!!.uniques.contains("Can be destroyed by nukes") } + tile.terrainFeatures.add("Fallout") + } + } else if (Random().nextFloat() < 0.5f) { + tile.terrainFeatures.removeAll { attacker.getCivInfo().gameInfo.ruleSet.terrains[it]!!.uniques.contains("Can be destroyed by nukes") } + tile.terrainFeatures.add("Fallout") + } + } } private fun tryInterceptAirAttack(attacker: MapUnitCombatant, defender: ICombatant) { + if (attacker.unit.hasUnique("Can not be intercepted")) return val attackedTile = defender.getTile() for (interceptor in defender.getCivInfo().getCivUnits().filter { it.canIntercept(attackedTile) }) { if (Random().nextFloat() > 100f / interceptor.interceptChance()) continue diff --git a/core/src/com/unciv/logic/battle/BattleDamage.kt b/core/src/com/unciv/logic/battle/BattleDamage.kt index fa80b7bb19..7394610c06 100644 --- a/core/src/com/unciv/logic/battle/BattleDamage.kt +++ b/core/src/com/unciv/logic/battle/BattleDamage.kt @@ -87,7 +87,7 @@ object BattleDamage { if (civInfo.hasUnique("+15% combat strength for melee units which have another military unit in an adjacent tile") && combatant.isMelee() && combatant.getTile().neighbors.flatMap { it.getUnits() } - .any { it.civInfo == civInfo && !it.type.isCivilian() && !it.type.isAirUnit() } + .any { it.civInfo == civInfo && !it.type.isCivilian() && !it.type.isAirUnit() && !it.type.isMissile() } ) modifiers["Discipline"] = 15 // @@ -272,6 +272,7 @@ object BattleDamage { || combatant.getCivInfo() .hasUnique("Units fight as though they were at full strength even when damaged") && !combatant.getUnitType().isAirUnit() + && !combatant.getUnitType().isMissile() ) 1f else 1 - (100 - combatant.getHealth()) / 300f// Each 3 points of health reduces damage dealt by 1% like original game diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 15d6472ec2..c2fecabb17 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -381,6 +381,9 @@ class CityInfo { } fun destroyCity() { + // Original capitals can't be destroyed + if (isOriginalCapital) return + for (airUnit in getCenterTile().airUnits.toList()) airUnit.destroy() //Destroy planes stationed in city // The relinquish ownership MUST come before removing the city, @@ -460,7 +463,7 @@ class CityInfo { val tile = getCenterTile() if (construction.unitType.isCivilian()) return tile.civilianUnit == null - if (construction.unitType.isAirUnit()) + if (construction.unitType.isAirUnit() || construction.unitType.isMissile()) return tile.airUnits.filter { !it.isTransported }.size < 6 else return tile.militaryUnit == null } diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 37cf177605..52c3c489b6 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -347,6 +347,7 @@ class MapUnit { if (type.isWaterUnit()) return false if (type.isCivilian()) return false if (type.isAirUnit()) return false + if (type.isMissile()) return false if (isEmbarked()) return false if (hasUnique("No defensive terrain bonus")) return false if (isFortified()) return false @@ -627,13 +628,13 @@ class MapUnit { fun putInTile(tile: TileInfo) { when { !movement.canMoveTo(tile) -> throw Exception("I can't go there!") - type.isAirUnit() -> tile.airUnits.add(this) + type.isAirUnit() || type.isMissile() -> tile.airUnits.add(this) type.isCivilian() -> tile.civilianUnit = this else -> tile.militaryUnit = this } // this check is here in order to not load the fresh built unit into carrier right after the build isTransported = !tile.isCityCenter() && - type.isAirUnit() // not moving civilians + (type.isAirUnit() || type.isMissile()) // not moving civilians moveThroughTile(tile) } diff --git a/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt b/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt index 2e835ae6ba..87aa714bf9 100644 --- a/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt +++ b/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt @@ -180,7 +180,7 @@ class UnitMovementAlgorithms(val unit:MapUnit) { if (currentTile == finalDestination) return currentTile // If we can fly, head there directly - if (unit.type.isAirUnit() || unit.action == Constants.unitActionParadrop) return finalDestination + if (unit.type.isAirUnit() || unit.type.isMissile() || unit.action == Constants.unitActionParadrop) return finalDestination val distanceToTiles = getDistanceToTiles() @@ -217,13 +217,13 @@ class UnitMovementAlgorithms(val unit:MapUnit) { /** This is performance-heavy - use as last resort, only after checking everything else! */ fun canReach(destination: TileInfo): Boolean { - if (unit.type.isAirUnit() || unit.action == Constants.unitActionParadrop) + if (unit.type.isAirUnit() || unit.type.isMissile() || unit.action == Constants.unitActionParadrop) return canReachInCurrentTurn(destination) return getShortestPath(destination).any() } fun canReachInCurrentTurn(destination: TileInfo): Boolean { - if (unit.type.isAirUnit()) + if (unit.type.isAirUnit() || unit.type.isMissile()) return unit.currentTile.aerialDistanceTo(destination) <= unit.getRange()*2 if (unit.action == Constants.unitActionParadrop) return getDistance(unit.currentTile.position, destination.position) <= unit.paradropRange && canParadropOn(destination) @@ -232,7 +232,7 @@ class UnitMovementAlgorithms(val unit:MapUnit) { fun getReachableTilesInCurrentTurn(): Sequence { return when { - unit.type.isAirUnit() -> + unit.type.isAirUnit() || unit.type.isMissile() -> unit.getTile().getTilesInDistanceRange(IntRange(1, unit.getRange() * 2)) unit.action == Constants.unitActionParadrop -> unit.getTile().getTilesInDistance(unit.paradropRange) @@ -259,7 +259,7 @@ class UnitMovementAlgorithms(val unit:MapUnit) { */ private fun canUnitSwapToReachableTile(reachableTile: TileInfo): Boolean { // Air units cannot swap - if (unit.type.isAirUnit()) return false + if (unit.type.isAirUnit() || unit.type.isMissile()) return false // We can't swap with ourself if (reachableTile == unit.getTile()) return false // Check whether the tile contains a unit of the same type as us that we own and that can @@ -322,7 +322,7 @@ class UnitMovementAlgorithms(val unit:MapUnit) { fun moveToTile(destination: TileInfo) { if (destination == unit.getTile()) return // already here! - if (unit.type.isAirUnit()) { // air units move differently from all other units + if (unit.type.isAirUnit() || unit.type.isMissile()) { // air units move differently from all other units unit.action = null unit.removeFromTile() unit.isTransported = false // it has left the carrier by own means @@ -421,7 +421,7 @@ class UnitMovementAlgorithms(val unit:MapUnit) { * DOES NOT designate whether we can reach that tile in the current turn */ fun canMoveTo(tile: TileInfo): Boolean { - if (unit.type.isAirUnit()) + if (unit.type.isAirUnit() || unit.type.isMissile()) return canAirUnitMoveTo(tile, unit) if (!canPassThrough(tile)) diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index ed6829b455..dc9dcf6cdf 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -9,6 +9,7 @@ import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.Unique import com.unciv.models.stats.INamed import com.unciv.models.translations.Translations +import com.unciv.models.translations.getPlaceholderText import com.unciv.models.translations.tr import com.unciv.ui.utils.Fonts import kotlin.math.pow @@ -160,8 +161,8 @@ class BaseUnit : INamed, IConstruction { if (uniqueTo != null && uniqueTo != civInfo.civName) return "Unique to $uniqueTo" if (civInfo.gameInfo.ruleSet.units.values.any { it.uniqueTo == civInfo.civName && it.replaces == name }) return "Our unique unit replaces this" - if (!civInfo.gameInfo.gameParameters.nuclearWeaponsEnabled - && uniques.contains("Nuclear weapon")) return "Disabled by setting" + if (!civInfo.gameInfo.gameParameters.nuclearWeaponsEnabled && isNuclearWeapon() + ) return "Disabled by setting" for (unique in uniqueObjects.filter { it.placeholderText == "Unlocked with []" }) if (civInfo.tech.researchedTechnologies.none { it.era() == unique.params[0] || it.name == unique.params[0] } @@ -220,7 +221,7 @@ class BaseUnit : INamed, IConstruction { val promotion = unique.params[1] if (unit.matchesFilter(filter) || (filter == "relevant" && civInfo.gameInfo.ruleSet.unitPromotions.values - .any { unit.type.name in it.unitTypes && it.name == promotion })) + .any { unit.type.name in it.unitTypes && it.name == promotion })) unit.promotions.addPromotion(promotion, isFree = true) } @@ -247,8 +248,10 @@ class BaseUnit : INamed, IConstruction { "Land", "land units" -> unitType.isLandUnit() "Water", "water units", "Water units" -> unitType.isWaterUnit() "Air", "air units" -> unitType.isAirUnit() + "Missile" -> unitType.isMissile() "non-air" -> !unitType.isAirUnit() "Military", "military units" -> unitType.isMilitary() + "Nuclear Weapon" -> isNuclearWeapon() // Deprecated as of 3.15.2 "military water" -> unitType.isMilitary() && unitType.isWaterUnit() else -> { @@ -259,6 +262,11 @@ class BaseUnit : INamed, IConstruction { } fun isGreatPerson() = uniqueObjects.any { it.placeholderText == "Great Person - []" } + + // "Nuclear Weapon" unique deprecated since 3.15.4 + fun isNuclearWeapon() = uniqueObjects.any { it.placeholderText == "Nuclear Weapon" || it.placeholderText == "Nuclear Weapon of strength []" } + + fun movesLikeAirUnits() = unitType.isAirUnit() || unitType.isMissile() override fun getResourceRequirements(): HashMap { val resourceRequirements = HashMap() diff --git a/core/src/com/unciv/models/ruleset/unit/UnitType.kt b/core/src/com/unciv/models/ruleset/unit/UnitType.kt index d7787ae012..4f4a3e656f 100644 --- a/core/src/com/unciv/models/ruleset/unit/UnitType.kt +++ b/core/src/com/unciv/models/ruleset/unit/UnitType.kt @@ -18,6 +18,7 @@ enum class UnitType{ Fighter, Bomber, + AtomicBomber, Missile; fun isMelee() = @@ -35,6 +36,7 @@ enum class UnitType{ || this == WaterAircraftCarrier || this == City || this.isAirUnit() + || this.isMissile() fun isLandUnit() = this == Civilian @@ -59,5 +61,8 @@ enum class UnitType{ fun isAirUnit() = this == Bomber || this == Fighter - || this == Missile + || this == AtomicBomber + + fun isMissile() = + this == Missile } \ No newline at end of file diff --git a/core/src/com/unciv/ui/mapeditor/MapEditorOptionsTable.kt b/core/src/com/unciv/ui/mapeditor/MapEditorOptionsTable.kt index 32458e5832..f63a2e4697 100644 --- a/core/src/com/unciv/ui/mapeditor/MapEditorOptionsTable.kt +++ b/core/src/com/unciv/ui/mapeditor/MapEditorOptionsTable.kt @@ -210,7 +210,7 @@ class MapEditorOptionsTable(val mapEditorScreen: MapEditorScreen): Table(CameraS unit.updateUniques() if (unit.movement.canMoveTo(it)) { when { - unit.type.isAirUnit() -> { + unit.baseUnit.movesLikeAirUnits() -> { it.airUnits.add(unit) if (!it.isCityCenter()) unit.isTransported = true // if not city - air unit enters carrier } diff --git a/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt b/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt index 788a6b872b..79e09fdea4 100644 --- a/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt +++ b/core/src/com/unciv/ui/tilegroups/WorldTileGroup.kt @@ -14,7 +14,7 @@ class WorldTileGroup(internal val worldScreen: WorldScreen, tileInfo: TileInfo, private var cityButton: CityButton? = null fun selectUnit(unit: MapUnit) { - if(unit.type.isAirUnit()) return // doesn't appear on map so nothing to select + if(unit.type.isAirUnit() || unit.type.isMissile()) return // doesn't appear on map so nothing to select val unitImage = if (unit.type.isCivilian()) icons.civilianUnitIcon else icons.militaryUnitIcon unitImage?.selectUnit() diff --git a/core/src/com/unciv/ui/worldscreen/WorldMapHolder.kt b/core/src/com/unciv/ui/worldscreen/WorldMapHolder.kt index 8a947b6591..8da2541b65 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldMapHolder.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldMapHolder.kt @@ -154,7 +154,7 @@ class WorldMapHolder(internal val worldScreen: WorldScreen, internal val tileMap else previousSelectedUnits.any { it.movement.canMoveTo(tileInfo) || - it.movement.isUnknownTileWeShouldAssumeToBePassable(tileInfo) && !it.type.isAirUnit() + it.movement.isUnknownTileWeShouldAssumeToBePassable(tileInfo) && !it.baseUnit.movesLikeAirUnits() } )) { if (previousSelectedUnitIsSwapping) { @@ -260,7 +260,7 @@ class WorldMapHolder(internal val worldScreen: WorldScreen, internal val tileMap val unitToTurnsToTile = HashMap() for (unit in selectedUnits) { val shortestPath = ArrayList() - val turnsToGetThere = if (unit.type.isAirUnit()) { + val turnsToGetThere = if (unit.baseUnit.movesLikeAirUnits()) { if (unit.movement.canReach(tileInfo)) 1 else 0 } else if (unit.action == Constants.unitActionParadrop) { @@ -381,7 +381,7 @@ class WorldMapHolder(internal val worldScreen: WorldScreen, internal val tileMap else { moveHereButton.onClick(UncivSound.Silent) { UncivGame.Current.settings.addCompletedTutorialTask("Move unit") - if (unitsThatCanMove.any { it.type.isAirUnit() }) + if (unitsThatCanMove.any { it.baseUnit.movesLikeAirUnits() }) UncivGame.Current.settings.addCompletedTutorialTask("Move an air unit") moveUnitToTargetTile(unitsThatCanMove, dto.tileInfo) } @@ -402,7 +402,7 @@ class WorldMapHolder(internal val worldScreen: WorldScreen, internal val tileMap swapWithButton.onClick(UncivSound.Silent) { UncivGame.Current.settings.addCompletedTutorialTask("Move unit") - if (dto.unit.type.isAirUnit()) + if (dto.unit.baseUnit.movesLikeAirUnits()) UncivGame.Current.settings.addCompletedTutorialTask("Move an air unit") swapMoveUnitToTargetTile(dto.unit, dto.tileInfo) } @@ -510,7 +510,7 @@ class WorldMapHolder(internal val worldScreen: WorldScreen, internal val tileMap return // We don't want to show normal movement or attack overlays in unit-swapping mode } - val isAirUnit = unit.type.isAirUnit() + val isAirUnit = unit.baseUnit.movesLikeAirUnits() val moveTileOverlayColor = if (unit.action == Constants.unitActionParadrop) Color.BLUE else Color.WHITE val tilesInMoveRange = unit.movement.getReachableTilesInCurrentTurn() @@ -525,7 +525,7 @@ class WorldMapHolder(internal val worldScreen: WorldScreen, internal val tileMap tileToColor.showCircle(Color.BLUE, 0.3f) } if (unit.movement.canMoveTo(tile) || - unit.movement.isUnknownTileWeShouldAssumeToBePassable(tile) && !unit.type.isAirUnit()) + unit.movement.isUnknownTileWeShouldAssumeToBePassable(tile) && !unit.baseUnit.movesLikeAirUnits()) tileToColor.showCircle(moveTileOverlayColor, if (UncivGame.Current.settings.singleTapMove || isAirUnit) 0.7f else 0.3f) } diff --git a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt index 27d60ce7b0..f1de517f81 100644 --- a/core/src/com/unciv/ui/worldscreen/WorldScreen.kt +++ b/core/src/com/unciv/ui/worldscreen/WorldScreen.kt @@ -447,7 +447,7 @@ class WorldScreen(val gameInfo: GameInfo, val viewingCiv:CivilizationInfo) : Cam if (viewingCiv.isAtWar() && !completedTasks.contains("Conquer a city")) return "Conquer a city!\nBring an enemy city down to low health > " + "\nEnter the city with a melee unit" - if (viewingCiv.getCivUnits().any { it.type.isAirUnit() } && !completedTasks.contains("Move an air unit")) + if (viewingCiv.getCivUnits().any { it.baseUnit.movesLikeAirUnits() } && !completedTasks.contains("Move an air unit")) return "Move an air unit!\nSelect an air unit > select another city within range > " + "\nMove the unit to the other city" if (!completedTasks.contains("See your stats breakdown")) diff --git a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt index 0bd3d02af4..17a2b1e651 100644 --- a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt +++ b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt @@ -39,19 +39,18 @@ class BattleTable(val worldScreen: WorldScreen): Table() { fun update() { isVisible = true + if (!worldScreen.canChangeState) { hide(); return } val attacker = tryGetAttacker() - if(attacker==null || !worldScreen.canChangeState){ hide(); return } + if (attacker == null) { hide(); return } - if (attacker is MapUnitCombatant && attacker.unit.hasUnique("Nuclear weapon")) { + if (attacker is MapUnitCombatant && attacker.unit.baseUnit.isNuclearWeapon()) { val selectedTile = worldScreen.mapHolder.selectedTile if (selectedTile == null) { hide(); return } // no selected tile simulateNuke(attacker, selectedTile) - } - else { + } else { val defender = tryGetDefender() if (defender == null) { hide(); return } - simulateBattle(attacker, defender) } } @@ -229,7 +228,10 @@ class BattleTable(val worldScreen: WorldScreen): Table() { add(attackerNameWrapper) var canNuke = true val defenderNameWrapper = Table() - for (tile in targetTile.getTilesInDistance(Battle.NUKE_RADIUS)) { + val blastRadius = + if (!attacker.unit.hasUnique("Blast radius []")) 2 + else attacker.unit.getMatchingUniques("Blast radius []").first().params[0].toInt() + for (tile in targetTile.getTilesInDistance(blastRadius)) { //To make sure we dont nuke civilisations we cant declare war with val attackerCiv = attacker.getCivInfo() @@ -277,7 +279,7 @@ class BattleTable(val worldScreen: WorldScreen): Table() { } else { attackButton.onClick(attacker.getAttackSound()) { - Battle.nuke(attacker, targetTile) + Battle.NUKE(attacker, targetTile) worldScreen.mapHolder.removeUnitActionOverlay() // the overlay was one of attacking worldScreen.shouldUpdate = true } diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt index 1013f03270..61712f8cf2 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt @@ -69,7 +69,7 @@ object UnitActions { private fun addSwapAction(unit: MapUnit, actionList: ArrayList, worldScreen: WorldScreen) { // Air units cannot swap - if (unit.type.isAirUnit()) return + if (unit.type.isAirUnit() || unit.type.isMissile()) return // Disable unit swapping if multiple units are selected. It would make little sense. // In principle, the unit swapping mode /will/ function with multiselect: it will simply // only consider the first selected unit, and ignore the other selections. However, it does @@ -283,7 +283,7 @@ object UnitActions { } private fun addExplorationActions(unit: MapUnit, actionList: ArrayList) { - if (unit.type.isAirUnit()) return + if (unit.baseUnit.movesLikeAirUnits()) return if (unit.action != Constants.unitActionExplore) { actionList += UnitAction(UnitActionType.Explore) { unit.action = Constants.unitActionExplore diff --git a/docs/Credits.md b/docs/Credits.md index fb73d02d99..d4f0f74913 100644 --- a/docs/Credits.md +++ b/docs/Credits.md @@ -1,18 +1,18 @@ # Icon Credits -Flag Icons made by [Freepik](https://www.flaticon.com/authors/freepik) from [www.flaticon.com](https://www.flaticon.com) +Flag Icons made by [Freepik](https://www.flaticon.com/authors/freepik) from [www.flaticon.com](https://www.flaticon.com) and licensed by Creative Commons 3.0 New Unciv logo made by u-ndefined on Discord -Base tile icons for the "Fantasy Hex" tileset belong to CuddlyClover @ https://cuddlyclover.itch.io/fantasy-hex-tiles with a few additions by me +Base tile icons for the "Fantasy Hex" tileset belong to CuddlyClover @ https://cuddlyclover.itch.io/fantasy-hex-tiles with a few additions by me Trees for the jungle tiles in the "Fantasy Hex" are extracted from [Desert Strike for the Amiga](http://eab.abime.net/showthread.php?t=67078&styleid=4) Almost all the improvements and units made by The Bucketeer on Discord - + Tile icons for the "ThorfMaps tileset belong to Thorfinn Tait and are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Based on work at www.thorfmaps.com. - + Unless otherwise specified, all the following are from [the Noun Project](https://thenounproject.com) licenced under either Creative Commons or Public Domain @@ -53,7 +53,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: ### Medieval Era -* [Ship](https://thenounproject.com/term/ship/1998589/) By Vanisha for Galleass +* [Ship](https://thenounproject.com/term/ship/1998589/) By Vanisha for Galleass * [Crossbow](https://thenounproject.com/term/crossbow/965389/) By Creaticca Creative Agency for Crossbowman * [Longbow](https://thenounproject.com/search/?q=longbow&i=815991) By Hamish for Longbowman * [Trebuchet](https://thenounproject.com/search/?q=trebuchet&i=828475) By Ben Davis @@ -94,7 +94,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Submarine](https://thenounproject.com/search/?q=submarine&i=589519) By Hea Poh Lin, MY * [xm8](https://thenounproject.com/term/xm8/172007/) By Xela Ub for Infantry * [machine-gun](https://thenounproject.com/search/?q=machine%20gun&i=591058) By Joana Pereira for Machine Gun -* Icon for Anti-Aircraft made by Yair Morgenstern, based on a free design +* Icon for Anti-Aircraft made by Yair Morgenstern, based on a free design [on Vectorstock](https://www.vectorstock.com/royalty-free-vector/flat-icon-design-collection-anti-aircraft-gun-vector-16396060) * [Anti-Tank Gun](https://thenounproject.com/term/anti-tank-gun/1802450/) By Tom Fricker * [Tank](https://thenounproject.com/search/?q=tank&i=981914) By jeff @@ -108,6 +108,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * Icon for Carrier made by [JackRainy](https://github.com/JackRainy), based on [Aircraft Carrier](https://thenounproject.com/icolabs/collection/flat-icons-transport/?i=2332914) By IcoLabs, BR * [Water Gun](https://thenounproject.com/term/water-gun/2121571) by ProSymbols for Marine * [Parachute](https://thenounproject.com/term/parachute/2025018) by Nociconist for Paratrooper +* [atomic bomb](https://thenounproject.com/search/?q=atomic+bomb&i=3712713) by AmruID for Atomic Bomb * [Robot](https://thenounproject.com/term/robot/1182459/) by Lluisa Iborra, ES for Giant Death Robot ### Great People @@ -142,7 +143,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Gem](https://thenounproject.com/term/gem/948920/) By Lluisa Iborra * [Joss Stick](https://thenounproject.com/search/?q=incense&i=583033) By Hea Poh Lin for Incense -## Improvements +## Improvements * [Woodcutting axe](https://thenounproject.com/term/woodcutting-axe/1060560/) By Chanut is Industries for Lumber Mill * [Monument](https://thenounproject.com/term/monument/1175928/) By Setyo Ari Wibowo for Landmark @@ -225,7 +226,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Notre Dame](https://thenounproject.com/term/notre-dame/1361725/) By Marco Livolsi * [Shield and Swords](https://thenounproject.com/term/shield-and-swords/1477527/) By Alina Oleynik for Armory * [Machu Picchu](https://thenounproject.com/browse/?i=1678226/) By [Chanut is Industries](https://thenounproject.com/chanut-is) -* [Garden](https://thenounproject.com/search/?q=garden&i=1478380) By Bharat +* [Garden](https://thenounproject.com/search/?q=garden&i=1478380) By Bharat ### Renaissance Era @@ -253,7 +254,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Stock exchange](https://thenounproject.com/term/stock-exchange/1210199/) By Pundimon * [Military](https://thenounproject.com/term/military/1857519/) By myiconfinder for Military Academy * [Factory](https://thenounproject.com/term/factory/545906/) By icon 54 - + ### Modern Era * [Stadium](https://thenounproject.com/term/stadium/13872/) By Karuna Lalvani @@ -384,7 +385,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Mallet](https://thenounproject.com/term/mallet/1306669/) By Ben Avery for Bronze Working ### Classical -* [Telescope](https://thenounproject.com/term/telescope/1932888/) for Optics +* [Telescope](https://thenounproject.com/term/telescope/1932888/) for Optics * [Horse Riding](https://thenounproject.com/term/horse-riding/583093/) By Hea Poh Lin for Horseback Riding * [Abacus](https://thenounproject.com/term/abacus/1943303/) By Yo! Baba for Mathematics * [Arch](https://thenounproject.com/term/arch/1174168/) By Andrejs Kirma for Construction @@ -411,11 +412,11 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Sound waves](https://thenounproject.com/term/sound-waves/792661/) By Makarenko Andrey for Acoustics * [Banking](https://thenounproject.com/term/banking/763867/) By Delwar Hossein * [Printing Press](https://thenounproject.com/term/printing-press/11880/) By Mike Wirth -* [Flintlock](https://thenounproject.com/term/flintlock/1122659/) By Madison Apple for Gunpowder +* [Flintlock](https://thenounproject.com/term/flintlock/1122659/) By Madison Apple for Gunpowder * [Fossil](https://thenounproject.com/term/fossil/168650/) By Raf Verbraeken for Archaeology * [Sextant](https://thenounproject.com/term/sextant/313438/) By lastspark for Navigation * [Architecture](https://thenounproject.com/term/architecture/795297/) By Andrew Doane -* [Money Growth](https://thenounproject.com/search/?q=economic%20model&i=136159) By DesignNex for Economics +* [Money Growth](https://thenounproject.com/search/?q=economic%20model&i=136159) By DesignNex for Economics * [Metal Block](https://thenounproject.com/term/metal-bock/1518464/) By Creaticca Creative Agency for Metallurgy * [Chemistry](https://thenounproject.com/term/chemistry/175847/) By Creative Stall @@ -446,10 +447,11 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Tactics](https://thenounproject.com/search/?q=tactics&i=2290123) By Grafix Point for Mobile Tactics * [Laser](https://thenounproject.com/search/?q=laser&i=232249) by Andrew Doane for Lasers * [Satellite Dish](https://thenounproject.com/search/?q=satellite%20dish&i=2054441) By Vectors Market for Radar -* [Nuclear Reactor](https://thenounproject.com/term/nuclear-reactor/426463/) By Jeremie Sommet for Nuclear Fission +* [Nuclear Reactor](https://thenounproject.com/term/nuclear-reactor/426463/) By Jeremie Sommet for Nuclear Fission * [Ecology](https://thenounproject.com/term/ecology/1970666/) By ProSymbols * [Robotic Arm](https://thenounproject.com/term/robotic-arm/1970874/) By Karl Gilbert for Robotics * [Rocket](https://thenounproject.com/term/rocket/1743642/) By kareemov for Rocketry +* [Rocket](https://thenounproject.com/term/rocket/3999811) Kusdarti for Advanced Ballistics ### Future * [Nanoparticles](https://thenounproject.com/term/nanoparticles/822286/) By Gyan Lakhwani for Nanotechnology @@ -526,9 +528,9 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Slingshot](https://thenounproject.com/term/slingshot/9106/) by James Keuning for Slinger Withdraw * [Anchor](https://thenounproject.com/term/anchor/676586) by Gregor Cresnar for Amphibious -## Others +## Others -* [Circle](https://thenounproject.com/term/circle/1841891/) By Aybige +* [Circle](https://thenounproject.com/term/circle/1841891/) By Aybige * [Arrow](https://thenounproject.com/term/arrow/18123/) By Joe Mortell for movement * [Swap](https://thenounproject.com/search/?q=swap&i=1259600) By iconomania for swapping units * [Connection](https://thenounproject.com/search/?q=connection&i=1521886) By Travis Avery @@ -536,7 +538,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Crosshair](https://thenounproject.com/search/?q=crosshairs&i=916030) By Bakunetsu Kaito for selecting enemies to attack * [City](https://thenounproject.com/search/?q=city&i=571332) By Felix Westphal * [Fire](https://thenounproject.com/search/?q=Fire&i=96564) By Lloyd Humphreys for "city being razed" icon -* [Sleep](https://thenounproject.com/search/?q=sleep&i=1760085) By Saeful Muslim +* [Sleep](https://thenounproject.com/search/?q=sleep&i=1760085) By Saeful Muslim * [Banner](https://thenounproject.com/term/banner/866282/) By Emir Palavan for embarked units * [Arrow](https://thenounproject.com/term/arrow/18123/) By uzeir syarief for moving between idle units * [Replace](https://thenounproject.com/search/?q=replace&i=17858) By Mike Rowe for switching tiles between cities @@ -561,7 +563,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https: * [Go back](https://thenounproject.com/search/?q=go%20back&i=1901947) by Salvia Santos for Resume * [Multiplayer](https://thenounproject.com/search/?q=multiplayer&i=1215652) by Roy Charles * [Options](https://thenounproject.com/search/?q=options&i=866090) By Thengakola -* [Package](https://thenounproject.com/search/?q=package&i=1886048) by shashank singh +* [Package](https://thenounproject.com/search/?q=package&i=1886048) by shashank singh # Sound credits