Added Japan civ!
Some units now recieve promotions when created/upgraded to, as per Civ V
This commit is contained in:
parent
f3cbeb5ca4
commit
58e38ea634
19 changed files with 253 additions and 198 deletions
|
@ -37,6 +37,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
|
|||
* [Longbow](https://thenounproject.com/search/?q=longbow&i=815991) By Hamish for Longbowman
|
||||
* [Trebuchet](https://thenounproject.com/search/?q=Trebuchet&i=827987) By Ben Davis
|
||||
* [Sword](https://thenounproject.com/search/?q=Sword&i=1432662) By uzeir syarief for Longswordsman
|
||||
* [Samurai](https://thenounproject.com/search/?q=samurai&i=1683729) By Chanut is Industries
|
||||
* [Spear](https://thenounproject.com/search/?q=Spear&i=1233840) By Alvaro Cabrera for Pikeman
|
||||
* [Knight](https://thenounproject.com/search/?q=Knight&i=30912) By Tyler Glaude
|
||||
|
||||
|
|
BIN
android/Images/UnitIcons/Samurai.png
Normal file
BIN
android/Images/UnitIcons/Samurai.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
|
@ -412,161 +412,161 @@ BuildingIcons/SS Stasis Chamber
|
|||
index: -1
|
||||
BuildingIcons/Seaport
|
||||
rotate: false
|
||||
xy: 1814, 620
|
||||
xy: 1916, 620
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Sistine Chapel
|
||||
rotate: false
|
||||
xy: 653, 520
|
||||
xy: 551, 418
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Solar Plant
|
||||
rotate: false
|
||||
xy: 755, 520
|
||||
xy: 551, 316
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Spaceship Factory
|
||||
rotate: false
|
||||
xy: 551, 316
|
||||
xy: 653, 418
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Stable
|
||||
rotate: false
|
||||
xy: 755, 418
|
||||
xy: 959, 520
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Stadium
|
||||
rotate: false
|
||||
xy: 959, 520
|
||||
xy: 755, 316
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Statue of Liberty
|
||||
rotate: false
|
||||
xy: 755, 316
|
||||
xy: 857, 418
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Stock Exchange
|
||||
rotate: false
|
||||
xy: 857, 316
|
||||
xy: 959, 418
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Stone Works
|
||||
rotate: false
|
||||
xy: 1163, 520
|
||||
xy: 959, 316
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Stonehenge
|
||||
rotate: false
|
||||
xy: 959, 316
|
||||
xy: 1061, 418
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Sydney Opera House
|
||||
rotate: false
|
||||
xy: 1163, 316
|
||||
xy: 1265, 418
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Taj Mahal
|
||||
rotate: false
|
||||
xy: 1265, 418
|
||||
xy: 1265, 316
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Temple
|
||||
rotate: false
|
||||
xy: 1367, 519
|
||||
xy: 1367, 417
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/The Great Library
|
||||
rotate: false
|
||||
xy: 1367, 417
|
||||
xy: 1367, 315
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/The Great Lighthouse
|
||||
rotate: false
|
||||
xy: 1367, 315
|
||||
xy: 1469, 518
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/The Louvre
|
||||
rotate: false
|
||||
xy: 1469, 518
|
||||
xy: 1469, 416
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/The Oracle
|
||||
rotate: false
|
||||
xy: 1469, 416
|
||||
xy: 1571, 518
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/The Pyramids
|
||||
rotate: false
|
||||
xy: 1571, 518
|
||||
xy: 1571, 416
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Theatre
|
||||
rotate: false
|
||||
xy: 1673, 518
|
||||
xy: 1673, 416
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/University
|
||||
rotate: false
|
||||
xy: 1877, 416
|
||||
xy: 1469, 314
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Walls
|
||||
rotate: false
|
||||
xy: 1571, 314
|
||||
xy: 1673, 314
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Windmill
|
||||
rotate: false
|
||||
xy: 438, 203
|
||||
xy: 438, 101
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
BuildingIcons/Workshop
|
||||
rotate: false
|
||||
xy: 755, 214
|
||||
xy: 857, 214
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
|
@ -762,7 +762,7 @@ ImprovementIcons/Road
|
|||
index: -1
|
||||
ImprovementIcons/Trading post
|
||||
rotate: false
|
||||
xy: 1775, 518
|
||||
xy: 1775, 416
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
|
@ -839,14 +839,14 @@ OtherIcons/Pillage
|
|||
index: -1
|
||||
OtherIcons/Shield
|
||||
rotate: false
|
||||
xy: 449, 408
|
||||
xy: 449, 306
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
OtherIcons/Sleep
|
||||
rotate: false
|
||||
xy: 551, 418
|
||||
xy: 755, 520
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
|
@ -860,7 +860,7 @@ OtherIcons/Star
|
|||
index: -1
|
||||
OtherIcons/Stop
|
||||
rotate: false
|
||||
xy: 1061, 418
|
||||
xy: 1265, 520
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
|
@ -909,7 +909,7 @@ PolicyIcons/Civil Society
|
|||
index: -1
|
||||
PolicyIcons/Collective Rule
|
||||
rotate: false
|
||||
xy: 959, 264
|
||||
xy: 1061, 264
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
|
@ -930,14 +930,14 @@ PolicyIcons/Democracy
|
|||
index: -1
|
||||
PolicyIcons/Discipline
|
||||
rotate: false
|
||||
xy: 1011, 264
|
||||
xy: 1113, 264
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
StatIcons/Strength
|
||||
rotate: false
|
||||
xy: 1011, 264
|
||||
xy: 1113, 264
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
|
@ -951,224 +951,224 @@ PolicyIcons/Entrepreneurship
|
|||
index: -1
|
||||
PolicyIcons/Facism
|
||||
rotate: false
|
||||
xy: 1063, 264
|
||||
xy: 1165, 264
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Free Religion
|
||||
rotate: false
|
||||
xy: 1115, 264
|
||||
xy: 1217, 264
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Free Speech
|
||||
rotate: false
|
||||
xy: 1167, 264
|
||||
xy: 1269, 264
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Free Thought
|
||||
rotate: false
|
||||
xy: 1219, 264
|
||||
xy: 1061, 212
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Humanism
|
||||
rotate: false
|
||||
xy: 1271, 264
|
||||
xy: 1113, 212
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Landed Elite
|
||||
rotate: false
|
||||
xy: 959, 212
|
||||
xy: 1165, 212
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Legalism
|
||||
rotate: false
|
||||
xy: 1011, 212
|
||||
xy: 1217, 212
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Mandate Of Heaven
|
||||
rotate: false
|
||||
xy: 1063, 212
|
||||
xy: 1269, 212
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Mercantilism
|
||||
rotate: false
|
||||
xy: 1115, 212
|
||||
xy: 492, 49
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Meritocracy
|
||||
rotate: false
|
||||
xy: 1167, 212
|
||||
xy: 1966, 1588
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Militarism
|
||||
rotate: false
|
||||
xy: 1219, 212
|
||||
xy: 1966, 1536
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Military Caste
|
||||
rotate: false
|
||||
xy: 1271, 212
|
||||
xy: 1966, 1484
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Military Tradition
|
||||
rotate: false
|
||||
xy: 492, 49
|
||||
xy: 1966, 1432
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Monarchy
|
||||
rotate: false
|
||||
xy: 1966, 1588
|
||||
xy: 1966, 1380
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Oligarchy
|
||||
rotate: false
|
||||
xy: 1966, 1484
|
||||
xy: 1966, 1276
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Organized Religion
|
||||
rotate: false
|
||||
xy: 1966, 1432
|
||||
xy: 1966, 1224
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Patronage
|
||||
rotate: false
|
||||
xy: 1966, 1380
|
||||
xy: 1966, 1172
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Police State
|
||||
rotate: false
|
||||
xy: 1966, 1328
|
||||
xy: 1966, 1120
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Populism
|
||||
rotate: false
|
||||
xy: 1966, 1276
|
||||
xy: 1966, 1068
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Professional Army
|
||||
rotate: false
|
||||
xy: 1966, 1224
|
||||
xy: 1966, 1016
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Protectionism
|
||||
rotate: false
|
||||
xy: 1966, 1172
|
||||
xy: 1966, 964
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Reformation
|
||||
rotate: false
|
||||
xy: 1966, 1068
|
||||
xy: 540, 110
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Representation
|
||||
rotate: false
|
||||
xy: 1966, 1016
|
||||
xy: 592, 162
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Republic
|
||||
rotate: false
|
||||
xy: 1966, 964
|
||||
xy: 592, 110
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Scientific Revolution
|
||||
rotate: false
|
||||
xy: 540, 162
|
||||
xy: 644, 162
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Secularism
|
||||
rotate: false
|
||||
xy: 540, 110
|
||||
xy: 644, 110
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Sovereignty
|
||||
rotate: false
|
||||
xy: 592, 162
|
||||
xy: 696, 162
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Theocracy
|
||||
rotate: false
|
||||
xy: 592, 110
|
||||
xy: 696, 110
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Total War
|
||||
rotate: false
|
||||
xy: 644, 162
|
||||
xy: 748, 162
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Trade Unions
|
||||
rotate: false
|
||||
xy: 644, 110
|
||||
xy: 748, 110
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Universal Suffrage
|
||||
rotate: false
|
||||
xy: 696, 162
|
||||
xy: 800, 162
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
PolicyIcons/Warrior Code
|
||||
rotate: false
|
||||
xy: 696, 110
|
||||
xy: 800, 110
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
|
@ -1301,70 +1301,70 @@ ResourceIcons/Pearls
|
|||
index: -1
|
||||
ResourceIcons/Sheep
|
||||
rotate: false
|
||||
xy: 449, 510
|
||||
xy: 449, 408
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Silk
|
||||
rotate: false
|
||||
xy: 449, 306
|
||||
xy: 551, 520
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Silver
|
||||
rotate: false
|
||||
xy: 551, 520
|
||||
xy: 653, 520
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Spices
|
||||
rotate: false
|
||||
xy: 653, 316
|
||||
xy: 755, 418
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Stone
|
||||
rotate: false
|
||||
xy: 959, 418
|
||||
xy: 1163, 520
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Sugar
|
||||
rotate: false
|
||||
xy: 1061, 316
|
||||
xy: 1163, 418
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Uranium
|
||||
rotate: false
|
||||
xy: 1469, 314
|
||||
xy: 1571, 314
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Whales
|
||||
rotate: false
|
||||
xy: 1775, 314
|
||||
xy: 1877, 314
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Wheat
|
||||
rotate: false
|
||||
xy: 1877, 314
|
||||
xy: 438, 203
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
ResourceIcons/Wine
|
||||
rotate: false
|
||||
xy: 438, 101
|
||||
xy: 551, 214
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
|
@ -1427,7 +1427,7 @@ StatIcons/Malcontent
|
|||
index: -1
|
||||
StatIcons/Movement
|
||||
rotate: false
|
||||
xy: 1966, 1536
|
||||
xy: 1966, 1328
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
|
@ -1448,7 +1448,7 @@ StatIcons/Production
|
|||
index: -1
|
||||
StatIcons/RangedStrength
|
||||
rotate: false
|
||||
xy: 1966, 1120
|
||||
xy: 540, 162
|
||||
size: 50, 50
|
||||
orig: 50, 50
|
||||
offset: 0, 0
|
||||
|
@ -1469,7 +1469,7 @@ StatIcons/Science
|
|||
index: -1
|
||||
StatIcons/Specialist
|
||||
rotate: false
|
||||
xy: 857, 520
|
||||
xy: 653, 316
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
|
@ -1938,56 +1938,56 @@ TechIcons/Sailing
|
|||
index: -1
|
||||
TechIcons/Satellites
|
||||
rotate: false
|
||||
xy: 1508, 620
|
||||
xy: 1610, 620
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/Scientific Theory
|
||||
rotate: false
|
||||
xy: 1610, 620
|
||||
xy: 1712, 620
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/Steam Power
|
||||
rotate: false
|
||||
xy: 857, 418
|
||||
xy: 1061, 520
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/Steel
|
||||
rotate: false
|
||||
xy: 1061, 520
|
||||
xy: 857, 316
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/The Wheel
|
||||
rotate: false
|
||||
xy: 1571, 416
|
||||
xy: 1673, 518
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/Theology
|
||||
rotate: false
|
||||
xy: 1673, 416
|
||||
xy: 1775, 518
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/Trapping
|
||||
rotate: false
|
||||
xy: 1775, 416
|
||||
xy: 1877, 518
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
TechIcons/Writing
|
||||
rotate: false
|
||||
xy: 857, 214
|
||||
xy: 959, 214
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
|
@ -2370,51 +2370,58 @@ UnitIcons/Rocket Artillery
|
|||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Samurai
|
||||
rotate: false
|
||||
xy: 1508, 620
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Scout
|
||||
rotate: false
|
||||
xy: 1712, 620
|
||||
xy: 1814, 620
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Settler
|
||||
rotate: false
|
||||
xy: 1916, 620
|
||||
xy: 449, 510
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Spearman
|
||||
rotate: false
|
||||
xy: 653, 418
|
||||
xy: 857, 520
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Submarine
|
||||
rotate: false
|
||||
xy: 1265, 520
|
||||
xy: 1061, 316
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Swordsman
|
||||
rotate: false
|
||||
xy: 1163, 418
|
||||
xy: 1163, 316
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Tank
|
||||
rotate: false
|
||||
xy: 1265, 316
|
||||
xy: 1367, 519
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Trebuchet
|
||||
rotate: false
|
||||
xy: 1877, 518
|
||||
xy: 1877, 416
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
|
@ -2428,21 +2435,21 @@ UnitIcons/Trireme
|
|||
index: -1
|
||||
UnitIcons/Warrior
|
||||
rotate: false
|
||||
xy: 1673, 314
|
||||
xy: 1775, 314
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Work Boats
|
||||
rotate: false
|
||||
xy: 551, 214
|
||||
xy: 653, 214
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitIcons/Worker
|
||||
rotate: false
|
||||
xy: 653, 214
|
||||
xy: 755, 214
|
||||
size: 100, 100
|
||||
orig: 100, 100
|
||||
offset: 0, 0
|
||||
|
@ -2540,105 +2547,105 @@ UnitPromotionIcons/Bombardment_I_(Civ5)
|
|||
index: -1
|
||||
UnitPromotionIcons/Charge_(Civ5)
|
||||
rotate: false
|
||||
xy: 1323, 294
|
||||
xy: 1321, 294
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Coastal_Raider_III_(Civ5)
|
||||
rotate: false
|
||||
xy: 1345, 294
|
||||
xy: 2015, 1822
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Coastal_Raider_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 2015, 1822
|
||||
xy: 1966, 942
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Coastal_Raider_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 1966, 942
|
||||
xy: 852, 192
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Cover_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 748, 192
|
||||
xy: 1531, 1952
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Cover_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 1531, 1952
|
||||
xy: 2018, 678
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Drill_III_(Civ5)
|
||||
rotate: false
|
||||
xy: 2018, 678
|
||||
xy: 1979, 576
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Drill_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 1979, 576
|
||||
xy: 1981, 1952
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Drill_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 1981, 1952
|
||||
xy: 2003, 1974
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Formation_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 2003, 1974
|
||||
xy: 336, 5
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Formation_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 336, 5
|
||||
xy: 358, 27
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Indirect_Fire_(Civ5)
|
||||
rotate: false
|
||||
xy: 358, 27
|
||||
xy: 106, 24
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Logistics_(Civ5)
|
||||
rotate: false
|
||||
xy: 106, 24
|
||||
xy: 106, 2
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/March_(Civ5)
|
||||
rotate: false
|
||||
xy: 106, 2
|
||||
xy: 1343, 294
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Mobility_(Civ5)
|
||||
rotate: false
|
||||
xy: 1323, 272
|
||||
xy: 1321, 272
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
|
@ -2659,14 +2666,14 @@ UnitPromotionIcons/Scouting_III_(Civ5)
|
|||
index: -1
|
||||
UnitPromotionIcons/Scouting_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 748, 170
|
||||
xy: 852, 170
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Scouting_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 770, 192
|
||||
xy: 874, 192
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
|
@ -2708,49 +2715,49 @@ UnitPromotionIcons/Siege_(Civ5)
|
|||
index: -1
|
||||
UnitPromotionIcons/Targeting_III_(Civ5)
|
||||
rotate: false
|
||||
xy: 1323, 250
|
||||
xy: 1321, 250
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Targeting_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 1345, 272
|
||||
xy: 1343, 272
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Targeting_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 1367, 293
|
||||
xy: 2015, 1778
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Volley_(Civ5)
|
||||
rotate: false
|
||||
xy: 2015, 1778
|
||||
xy: 852, 148
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Wolfpack_III_(Civ5)
|
||||
rotate: false
|
||||
xy: 748, 148
|
||||
xy: 874, 170
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Wolfpack_II_(Civ5)
|
||||
rotate: false
|
||||
xy: 770, 170
|
||||
xy: 896, 192
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
index: -1
|
||||
UnitPromotionIcons/Wolfpack_I_(Civ5)
|
||||
rotate: false
|
||||
xy: 792, 192
|
||||
xy: 2018, 634
|
||||
size: 20, 20
|
||||
orig: 20, 20
|
||||
offset: 0, 0
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 878 KiB After Width: | Height: | Size: 885 KiB |
|
@ -319,6 +319,36 @@
|
|||
"Portland","St. Louis","Miami","Buffalo","Detroit","New Orleans","Baltimore","Denver","Cincinnati","Dallas","Memphis",
|
||||
"Cleveland","Kansas City","San Diego","Richmond","Las Vegas","Phoenix","Albuquerque","Minneapolis","Pittsburgh"]
|
||||
},
|
||||
{
|
||||
name:"Japan",
|
||||
leaderName:"Oda Nobunaga",
|
||||
|
||||
startIntroPart1: "Blessings upon you, noble Oda Nobunaga, ruler of Japan, the land of the Rising Sun! May you long walk among its flowering blossoms. The Japanese are an island people, proud and pious with a rich culture of arts and letters. Your civilization stretches back thousands of years, years of bloody warfare, expansion and isolation, great wealth and great poverty. In addition to their prowess on the frield of battle, your people are also immensely industious, and their technological innovation and mighty factories are the envy of lesser people everywhere."
|
||||
startIntroPart2: "Legendary damiyo, will you grab the reins of destiny? Will you bring your family and people the honor and glory they deserve? Will you once again pick up the sword and march to triumph? Will you build a civilization that stands the test of time?"
|
||||
|
||||
declaringWar:"I hereby inform you of our intention to wipe out your civilization from this world."
|
||||
attacked:"Pitiful fool! Now we shall destroy you!"
|
||||
defeated:"You were much wiser than I thought."
|
||||
introduction:"We hope for a fair and just relationship with you, who are renowned for military bravery."
|
||||
|
||||
neutralHello:"Hello."
|
||||
neutralLetsHearIt:["Go on.","Proceed.","I'm listening."]
|
||||
neutralNo:["Sorry.","No.","Maybe another time."]
|
||||
neutralYes:["Very well.","Agreed.","Hai. (Yes)"]
|
||||
|
||||
hateHello:"Oh, it's you..."
|
||||
hateLetsHearIt:["Let me hear it.","Go on","Proceed"]
|
||||
hateNo:["Hya. (No)","Excuse me?","Maybe another time"]
|
||||
hateYes:["I agree.","Oh... very well.","There is probably no other way."]
|
||||
|
||||
afterPeace:"It was an honor to fight you."
|
||||
tradeRequest:"I would be grateful if you agreed on the following proposal."
|
||||
|
||||
mainColor:[215,225,225],
|
||||
secondaryColor:[185,0,0],
|
||||
unique: "Units fight as though they were at full strength even when damaged",
|
||||
cities:["Kyoto","Osaka","Tokyo","Satsuma","Kagoshima","Nara","Nagoya","Izumo","Nagasaki","Yokohama","Shimonoseki","Matsuyama","Sapporo","Hakodate","Ise","Toyama","Fukushima","Suo","Bizen","Echizen","Izumi","Omi","Echigo","Kozuke","Sado","Kobe","Nagano","Hiroshima","Takayama","Akita","Fukuoka","Aomori","Kamakura","Kochi","Naha","Sendai","Gifu","Hakodate","Ota","Tottori"]
|
||||
},
|
||||
/*
|
||||
{
|
||||
name:"Germany",
|
||||
|
@ -447,36 +477,6 @@
|
|||
unique:"Melee units cost 50% less maintenance, and all units require 25% less experience to earn their next promotion.",
|
||||
cities:["Ulundi","Umugungundlovu","Nobamba","Bulawayo","KwaDukuza","Nongoma","oNdini","Nodwengu","Ndonakusuka","Babanango","Khangela","KwaHlomendlini","Hlobane","eThekwini","Mlambongwenya","Eziqwaqweni","eMangweni","Isiphezi","Masotsheni","Mtunzini","Nyakamubi","Dumazulu","Hlatikulu","Mthonjaneni","Empangeni","Pongola","Tugela","Kwamashi","Ingwavuma","Hluhluwe","Matubatuba","Mhlahlandlela","Mthatha","Maseru","Lobamba","Qunu"]
|
||||
},
|
||||
{
|
||||
name:"Japan",
|
||||
leaderName:"Oda Nobunaga",
|
||||
|
||||
startIntroPart1: "Blessings upon you, noble Oda Nobunaga, ruler of Japan, the land of the Rising Sun! May you long walk among its flowering blossoms. The Japanese are an island people, proud and pious with a rich culture of arts and letters. Your civilization stretches back thousands of years, years of bloody warfare, expansion and isolation, great wealth and great poverty. In addition to their prowess on the frield of battle, your people are also immensely industious, and their technological innovation and mighty factories are the envy of lesser people everywhere."
|
||||
startIntroPart2: "Legendary damiyo, will you grab the reins of destiny? Will you bring your family and people the honor and glory they deserve? Will you once again pick up the sword and march to triumph? Will you build a civilization that stands the test of time?"
|
||||
|
||||
declaringWar:"I hereby inform you of our intention to wipe out your civilization from this world."
|
||||
attacked:"Pitiful fool! Now we shall destroy you!"
|
||||
defeated:"You were much wiser than I thought."
|
||||
introduction:"We hope for a fair and just relationship with you, who are renowned for military bravery."
|
||||
|
||||
neutralHello:"Hello."
|
||||
neutralLetsHearIt:["Go on.","Proceed.","I'm listening."]
|
||||
neutralNo:["Sorry.","No.","Maybe another time."]
|
||||
neutralYes:["Very well.","Agreed.","Hai. (Yes)"]
|
||||
|
||||
hateHello:"Oh, it's you..."
|
||||
hateLetsHearIt:["Let me hear it.","Go on","Proceed"]
|
||||
hateNo:["Hya. (No)","Excuse me?","Maybe another time"]
|
||||
hateYes:["I agree.","Oh... very well.","There is probably no other way."]
|
||||
|
||||
afterPeace:"It was an honor to fight you."
|
||||
tradeRequest:"I would be grateful if you agreed on the following proposal."
|
||||
|
||||
mainColor:[255,255,255],
|
||||
secondaryColor:[255,0,0],
|
||||
unique:"Units fight as though they were at full strength even when damaged. You gain +1 Culture from each Fishing Boat, and +2 Culture from each Atoll.",
|
||||
cities:["Kyoto","Osaka","Tokyo","Satsuma","Kagoshima","Nara","Nagoya","Izumo","Nagasaki","Yokohama","Shimonoseki","Matsuyama","Sapporo","Hakodate","Ise","Toyama","Fukushima","Suo","Bizen","Echizen","Izumi","Omi","Echigo","Kozuke","Sado","Kobe","Nagano","Hiroshima","Takayama","Akita","Fukuoka","Aomori","Kamakura","Kochi","Naha","Sendai","Gifu","Hakodate","Ota","Tottori"]
|
||||
},
|
||||
{
|
||||
name:"Incan",
|
||||
leaderName:"Pachacuti",
|
||||
|
|
|
@ -3872,6 +3872,7 @@
|
|||
French:"Arabie"
|
||||
}
|
||||
|
||||
|
||||
"America":{
|
||||
Italian:"Stati Uniti"
|
||||
Romanian:"Statele Unite"
|
||||
|
@ -3888,9 +3889,15 @@
|
|||
German:"Alle militärischen Landeinheiten haben +1 Sicht; 50% niedrigerer Preis beim Kauf von Feldern"
|
||||
French:"Toutes les unités terrestres ont +1 porté de vision, les cases coutent 50% de leurs prix à l'achat"
|
||||
}
|
||||
"Uniques:":{
|
||||
|
||||
"Japan":{}
|
||||
"Units fight as though they were at full strength even when damaged":{}
|
||||
|
||||
"Uniques":{ // unit uniques, displayed on the new game screen when choosing a civ
|
||||
Italian:"Abilità unica"
|
||||
}
|
||||
"Promotions":{}
|
||||
|
||||
"units in rough terrain:":{
|
||||
Italian:"unità in terreno accidentato"
|
||||
}
|
||||
|
@ -7476,7 +7483,7 @@
|
|||
}
|
||||
|
||||
" OR ":{// as in "Requires Accuracy I OR Barrage I
|
||||
Italian:"O"
|
||||
Italian:" O "
|
||||
}
|
||||
|
||||
"Accuracy I":{
|
||||
|
|
|
@ -226,7 +226,7 @@
|
|||
{
|
||||
name:"Longbowman",
|
||||
unitType:"Ranged",
|
||||
range:3,
|
||||
range:2,
|
||||
movement:2,
|
||||
strength:13,
|
||||
rangedStrength:18,
|
||||
|
@ -236,6 +236,7 @@
|
|||
requiredTech:"Machinery",
|
||||
upgradesTo:"Gatling Gun",
|
||||
obsoleteTech:"Industrialization",
|
||||
promotions:["Range"],
|
||||
hurryCostModifier:20,
|
||||
attackSound:"arrow"
|
||||
},
|
||||
|
@ -266,6 +267,23 @@
|
|||
hurryCostModifier:20,
|
||||
attackSound:"metalhit"
|
||||
},
|
||||
{
|
||||
name:"Samurai",
|
||||
replaces:"Longswordsman",
|
||||
uniqueTo:"Japan",
|
||||
unitType:"Melee",
|
||||
movement:2,
|
||||
strength:21,
|
||||
cost: 120,
|
||||
requiredTech:"Steel",
|
||||
upgradesTo:"Musketman",
|
||||
obsoleteTech:"Gunpowder",
|
||||
requiredResource:"Iron",
|
||||
uniques:["Combat very likely to create Great Generals"]
|
||||
promotions:["Shock I"]
|
||||
hurryCostModifier:20,
|
||||
attackSound:"metalhit"
|
||||
},
|
||||
{
|
||||
name:"Pikeman",
|
||||
unitType:"Melee",
|
||||
|
@ -390,7 +408,8 @@
|
|||
requiredTech:"Gunpowder",
|
||||
upgradesTo:"Rifleman"
|
||||
obsoleteTech:"Rifling",
|
||||
uniques:["Bonus vs units in rough terrain 15%","Ignores terrain cost"]
|
||||
uniques:["Ignores terrain cost"]
|
||||
promotions:["Drill I"],
|
||||
hurryCostModifier:20,
|
||||
attackSound:"shot"
|
||||
},
|
||||
|
|
|
@ -20,7 +20,7 @@ class UnCivGame : Game() {
|
|||
val viewEntireMapForDebug = false
|
||||
|
||||
// For when you need to test something in an advanced game and don't have time to faff around
|
||||
val superchargedForDebug = false
|
||||
val superchargedForDebug = true
|
||||
|
||||
lateinit var worldScreen: WorldScreen
|
||||
|
||||
|
|
|
@ -124,8 +124,8 @@ class UnitAutomation{
|
|||
|
||||
val tileCombatant = Battle(combatant.getCivInfo().gameInfo).getMapCombatantOfTile(tile)
|
||||
if(tileCombatant==null) return false
|
||||
if(tileCombatant.getCivilization()==combatant.getCivInfo() ) return false
|
||||
if(!combatant.getCivInfo().isAtWarWith(tileCombatant.getCivilization())) return false
|
||||
if(tileCombatant.getCivInfo()==combatant.getCivInfo() ) return false
|
||||
if(!combatant.getCivInfo().isAtWarWith(tileCombatant.getCivInfo())) return false
|
||||
|
||||
//only submarine and destroyer can attack submarine
|
||||
//garisoned submarine can be attacked by anyone, or the city will be in invincible
|
||||
|
|
|
@ -47,7 +47,7 @@ class Battle(val gameInfo:GameInfo) {
|
|||
|
||||
private fun postBattleAction(attacker: ICombatant, defender: ICombatant, attackedTile:TileInfo){
|
||||
|
||||
if(attacker.getCivilization()!=defender.getCivilization()) { // If what happened was that a civilian unit was captures, that's dealt with in the CaptureCilvilianUnit function
|
||||
if(attacker.getCivInfo()!=defender.getCivInfo()) { // If what happened was that a civilian unit was captures, that's dealt with in the CaptureCilvilianUnit function
|
||||
val whatHappenedString =
|
||||
if (attacker !is CityCombatant && attacker.isDefeated()) " {was destroyed while attacking}"
|
||||
else " has " + (if (defender.isDefeated()) "destroyed" else "attacked")
|
||||
|
@ -58,7 +58,7 @@ class Battle(val gameInfo:GameInfo) {
|
|||
if (defender.getUnitType() == UnitType.City) " [" + defender.getName()+"]"
|
||||
else " our [" + defender.getName()+"]"
|
||||
val notificationString = attackerString + whatHappenedString + defenderString
|
||||
defender.getCivilization().addNotification(notificationString, attackedTile.position, Color.RED)
|
||||
defender.getCivInfo().addNotification(notificationString, attackedTile.position, Color.RED)
|
||||
}
|
||||
|
||||
|
||||
|
@ -71,11 +71,11 @@ class Battle(val gameInfo:GameInfo) {
|
|||
|
||||
// we're a melee unit and we destroyed\captured an enemy unit
|
||||
else if (attacker.isMelee()
|
||||
&& (defender.isDefeated() || defender.getCivilization()==attacker.getCivilization() )
|
||||
&& (defender.isDefeated() || defender.getCivInfo()==attacker.getCivInfo() )
|
||||
// This is so that if we attack e.g. a barbarian in enemy territory that we can't enter, we won't enter it
|
||||
&& (attacker as MapUnitCombatant).unit.canMoveTo(attackedTile)) {
|
||||
// we destroyed an enemy military unit and there was a civilian unit in the same tile as well
|
||||
if(attackedTile.civilianUnit!=null && attackedTile.civilianUnit!!.civInfo != attacker.getCivilization())
|
||||
if(attackedTile.civilianUnit!=null && attackedTile.civilianUnit!!.civInfo != attacker.getCivInfo())
|
||||
captureCivilianUnit(attacker,MapUnitCombatant(attackedTile.civilianUnit!!))
|
||||
attacker.unit.moveToTile(attackedTile)
|
||||
}
|
||||
|
@ -98,16 +98,19 @@ class Battle(val gameInfo:GameInfo) {
|
|||
// XP!
|
||||
fun addXp(thisCombatant:ICombatant, amount:Int, otherCombatant:ICombatant){
|
||||
if(thisCombatant !is MapUnitCombatant) return
|
||||
if(thisCombatant.unit.promotions.totalXpProduced() >= 30 && otherCombatant.getCivilization().isBarbarianCivilization())
|
||||
if(thisCombatant.unit.promotions.totalXpProduced() >= 30 && otherCombatant.getCivInfo().isBarbarianCivilization())
|
||||
return
|
||||
var amountToAdd = amount
|
||||
if(thisCombatant.getCivilization().policies.isAdopted("Military Tradition")) amountToAdd = (amountToAdd * 1.5f).toInt()
|
||||
if(thisCombatant.getCivInfo().policies.isAdopted("Military Tradition")) amountToAdd = (amountToAdd * 1.5f).toInt()
|
||||
thisCombatant.unit.promotions.XP += amountToAdd
|
||||
|
||||
if(thisCombatant.getCivilization().getNation().unique
|
||||
if(thisCombatant.getCivInfo().getNation().unique
|
||||
== "Great general provides double combat bonus, and spawns 50% faster")
|
||||
amountToAdd = (amountToAdd * 1.5f).toInt()
|
||||
thisCombatant.getCivilization().greatPeople.greatGeneralPoints += amountToAdd
|
||||
if(thisCombatant.unit.hasUnique("Combat very likely to create Great Generals"))
|
||||
amountToAdd *= 2
|
||||
|
||||
thisCombatant.getCivInfo().greatPeople.greatGeneralPoints += amountToAdd
|
||||
}
|
||||
|
||||
if(attacker.isMelee()){
|
||||
|
@ -123,8 +126,8 @@ class Battle(val gameInfo:GameInfo) {
|
|||
}
|
||||
|
||||
if(defender.isDefeated() && defender is MapUnitCombatant && !defender.getUnitType().isCivilian()
|
||||
&& attacker.getCivilization().policies.isAdopted("Honor Complete"))
|
||||
attacker.getCivilization().gold += defender.unit.baseUnit.getGoldCost(hashSetOf()) / 10
|
||||
&& attacker.getCivInfo().policies.isAdopted("Honor Complete"))
|
||||
attacker.getCivInfo().gold += defender.unit.baseUnit.getGoldCost(hashSetOf()) / 10
|
||||
|
||||
if(attacker is MapUnitCombatant && attacker.unit.action!=null && attacker.unit.action!!.startsWith("moveTo"))
|
||||
attacker.unit.action=null
|
||||
|
@ -132,14 +135,14 @@ class Battle(val gameInfo:GameInfo) {
|
|||
|
||||
private fun conquerCity(city: CityInfo, attacker: ICombatant) {
|
||||
val enemyCiv = city.civInfo
|
||||
attacker.getCivilization().addNotification("We have conquered the city of [${city.name}]!",city.location, Color.RED)
|
||||
attacker.getCivInfo().addNotification("We have conquered the city of [${city.name}]!",city.location, Color.RED)
|
||||
|
||||
city.getCenterTile().apply {
|
||||
if(militaryUnit!=null) militaryUnit!!.destroy()
|
||||
if(civilianUnit!=null) captureCivilianUnit(attacker,MapUnitCombatant(civilianUnit!!))
|
||||
}
|
||||
|
||||
if (attacker.getCivilization().isBarbarianCivilization()){
|
||||
if (attacker.getCivInfo().isBarbarianCivilization()){
|
||||
city.destroyCity()
|
||||
}
|
||||
else {
|
||||
|
@ -149,12 +152,12 @@ class Battle(val gameInfo:GameInfo) {
|
|||
|
||||
city.health = city.getMaxHealth() / 2 // I think that cities recover to half health when conquered?
|
||||
|
||||
if(!attacker.getCivilization().policies.isAdopted("Police State")) {
|
||||
if(!attacker.getCivInfo().policies.isAdopted("Police State")) {
|
||||
city.expansion.cultureStored = 0
|
||||
city.expansion.reset()
|
||||
}
|
||||
|
||||
city.moveToCiv(attacker.getCivilization())
|
||||
city.moveToCiv(attacker.getCivInfo())
|
||||
city.resistanceCounter = city.population.population
|
||||
city.cityStats.update()
|
||||
}
|
||||
|
@ -183,7 +186,7 @@ class Battle(val gameInfo:GameInfo) {
|
|||
}
|
||||
|
||||
fun captureCivilianUnit(attacker: ICombatant, defender: ICombatant){
|
||||
if(attacker.getCivilization().isBarbarianCivilization()){
|
||||
if(attacker.getCivInfo().isBarbarianCivilization()){
|
||||
defender.takeDamage(100)
|
||||
return
|
||||
} // barbarians don't capture civilians!
|
||||
|
@ -192,6 +195,6 @@ class Battle(val gameInfo:GameInfo) {
|
|||
defender.getTile().position, Color.RED)
|
||||
|
||||
capturedUnit.civInfo.removeUnit(capturedUnit)
|
||||
capturedUnit.assignOwner(attacker.getCivilization())
|
||||
capturedUnit.assignOwner(attacker.getCivInfo())
|
||||
}
|
||||
}
|
|
@ -46,19 +46,19 @@ class BattleDamage{
|
|||
}
|
||||
|
||||
//https://www.carlsguides.com/strategy/civilization5/war/combatbonuses.php
|
||||
if (combatant.getCivilization().happiness < 0)
|
||||
modifiers["Unhappiness"] = max(0.02f * combatant.getCivilization().happiness,-0.9f) // otherwise it could exceed -100% and start healing enemy units...
|
||||
if (combatant.getCivInfo().happiness < 0)
|
||||
modifiers["Unhappiness"] = max(0.02f * combatant.getCivInfo().happiness,-0.9f) // otherwise it could exceed -100% and start healing enemy units...
|
||||
|
||||
if(combatant.getCivilization().policies.isAdopted("Populism"))
|
||||
if(combatant.getCivInfo().policies.isAdopted("Populism"))
|
||||
modifiers["Populism"] = 0.25f
|
||||
|
||||
if(combatant.getCivilization().policies.isAdopted("Discipline") && combatant.isMelee()
|
||||
if(combatant.getCivInfo().policies.isAdopted("Discipline") && combatant.isMelee()
|
||||
&& combatant.getTile().neighbors.flatMap { it.getUnits() }
|
||||
.any { it.civInfo==combatant.getCivilization() && !it.type.isCivilian()})
|
||||
.any { it.civInfo==combatant.getCivInfo() && !it.type.isCivilian()})
|
||||
modifiers["Discipline"] = 0.15f
|
||||
|
||||
val requiredResource = combatant.unit.baseUnit.requiredResource
|
||||
if(requiredResource!=null && combatant.getCivilization().getCivResourcesByName()[requiredResource]!!<0){
|
||||
if(requiredResource!=null && combatant.getCivInfo().getCivResourcesByName()[requiredResource]!!<0){
|
||||
modifiers["Missing resource"]=-0.25f
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,7 @@ class BattleDamage{
|
|||
}
|
||||
}
|
||||
|
||||
if (combatant.getCivilization().policies.isAdopted("Honor") && enemy.getCivilization().isBarbarianCivilization())
|
||||
if (combatant.getCivInfo().policies.isAdopted("Honor") && enemy.getCivInfo().isBarbarianCivilization())
|
||||
modifiers["vs Barbarians"] = 0.25f
|
||||
|
||||
return modifiers
|
||||
|
@ -119,7 +119,7 @@ class BattleDamage{
|
|||
if (attacker.isMelee()) {
|
||||
val numberOfAttackersSurroundingDefender = defender.getTile().neighbors.count {
|
||||
it.militaryUnit != null
|
||||
&& it.militaryUnit!!.owner == attacker.getCivilization().civName
|
||||
&& it.militaryUnit!!.owner == attacker.getCivInfo().civName
|
||||
&& MapUnitCombatant(it.militaryUnit!!).isMelee()
|
||||
}
|
||||
if (numberOfAttackersSurroundingDefender > 1)
|
||||
|
@ -172,13 +172,15 @@ class BattleDamage{
|
|||
|
||||
private fun modifiersToMultiplicationBonus(modifiers: HashMap<String, Float>): Float {
|
||||
// modifiers are like 0.1 for a 10% bonus, -0.1 for a 10% loss
|
||||
var modifier = 1f
|
||||
for (m in modifiers.values) modifier *= (1 + m)
|
||||
return modifier
|
||||
var finalModifier = 1f
|
||||
for (modifierValue in modifiers.values) finalModifier *= (1 + modifierValue)
|
||||
return finalModifier
|
||||
}
|
||||
|
||||
private fun getHealthDependantDamageRatio(combatant: ICombatant): Float {
|
||||
if (combatant.getUnitType() == UnitType.City) return 1f
|
||||
if (combatant.getUnitType() == UnitType.City
|
||||
|| combatant.getCivInfo().getNation().unique == "Units fight as though they were at full strength even when damaged")
|
||||
return 1f
|
||||
return 1/2f + combatant.getHealth()/200f // Each point of health reduces damage dealt by 0.5%
|
||||
}
|
||||
|
||||
|
|
|
@ -12,12 +12,11 @@ class CityCombatant(val city: CityInfo) : ICombatant {
|
|||
}
|
||||
|
||||
override fun getHealth(): Int = city.health
|
||||
override fun getCivilization(): CivilizationInfo = city.civInfo
|
||||
override fun getCivInfo(): CivilizationInfo = city.civInfo
|
||||
override fun getTile(): TileInfo = city.getCenterTile()
|
||||
override fun getName(): String = city.name
|
||||
override fun isDefeated(): Boolean = city.health==1
|
||||
override fun isInvisible(): Boolean = false
|
||||
override fun getCivInfo(): CivilizationInfo = city.civInfo
|
||||
override fun canAttack(): Boolean = (!city.attackedThisTurn)
|
||||
|
||||
override fun takeDamage(damage: Int) {
|
||||
|
|
|
@ -13,10 +13,9 @@ interface ICombatant{
|
|||
fun getDefendingStrength(): Int
|
||||
fun takeDamage(damage:Int)
|
||||
fun isDefeated():Boolean
|
||||
fun getCivilization(): CivilizationInfo
|
||||
fun getCivInfo(): CivilizationInfo
|
||||
fun getTile(): TileInfo
|
||||
fun isInvisible(): Boolean
|
||||
fun getCivInfo(): CivilizationInfo
|
||||
fun canAttack(): Boolean
|
||||
|
||||
fun isMelee(): Boolean {
|
||||
|
|
|
@ -8,12 +8,11 @@ import com.unciv.models.gamebasics.unit.UnitType
|
|||
class MapUnitCombatant(val unit: MapUnit) : ICombatant {
|
||||
override fun getHealth(): Int = unit.health
|
||||
override fun getMaxHealth() = 100
|
||||
override fun getCivilization(): CivilizationInfo = unit.civInfo
|
||||
override fun getCivInfo(): CivilizationInfo = unit.civInfo
|
||||
override fun getTile(): TileInfo = unit.getTile()
|
||||
override fun getName(): String = unit.name
|
||||
override fun isDefeated(): Boolean = unit.health <= 0
|
||||
override fun isInvisible(): Boolean = unit.isInvisible()
|
||||
override fun getCivInfo(): CivilizationInfo = unit.civInfo
|
||||
override fun canAttack(): Boolean = unit.canAttack()
|
||||
|
||||
override fun takeDamage(damage: Int) {
|
||||
|
|
|
@ -86,6 +86,10 @@ class TileMap {
|
|||
// only once we know the unit can be placed do we add it to the civ's unit list
|
||||
unit.putInTile(unitToPlaceTile)
|
||||
unit.currentMovement = unit.getMaxMovement().toFloat()
|
||||
|
||||
// Only once we add the unit to the civ we can activate addPromotion, because it will try to update civ viewable tiles
|
||||
for(promotion in unit.baseUnit.promotions)
|
||||
unit.promotions.addPromotion(promotion,true)
|
||||
}
|
||||
else civInfo.removeUnit(unit) // since we added it to the civ units in the previous assignOwner
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@ import com.unciv.models.gamebasics.tr
|
|||
import com.unciv.models.stats.INamed
|
||||
|
||||
// This is BaseUnit because Unit is already a base Kotlin class and to avoid mixing the two up
|
||||
|
||||
/** This is the basic info of the units, as specified in Units.json,
|
||||
in contrast to MapUnit, which is a specific unit of a certain type that appears on the map */
|
||||
class BaseUnit : INamed, IConstruction, ICivilopedia {
|
||||
|
||||
override lateinit var name: String
|
||||
|
@ -25,6 +28,7 @@ class BaseUnit : INamed, IConstruction, ICivilopedia {
|
|||
var requiredTech:String? = null
|
||||
var requiredResource:String? = null
|
||||
var uniques =HashSet<String>()
|
||||
var promotions =HashSet<String>()
|
||||
var obsoleteTech:String?=null
|
||||
var upgradesTo:String? = null
|
||||
var replaces:String?=null
|
||||
|
@ -40,9 +44,10 @@ class BaseUnit : INamed, IConstruction, ICivilopedia {
|
|||
|
||||
fun getShortDescription(): String {
|
||||
val infoList= mutableListOf<String>()
|
||||
for(unique in uniques){
|
||||
for(unique in uniques)
|
||||
infoList+=Translations.translateBonusOrPenalty(unique)
|
||||
}
|
||||
for(promotion in promotions)
|
||||
infoList += promotion.tr()
|
||||
if(strength!=0) infoList += "{Strength}: $strength".tr()
|
||||
if(rangedStrength!=0) infoList += "{Ranged strength}: $rangedStrength".tr()
|
||||
if(movement!=2) infoList+="{Movement}: $movement".tr()
|
||||
|
@ -67,9 +72,12 @@ class BaseUnit : INamed, IConstruction, ICivilopedia {
|
|||
sb.appendln()
|
||||
}
|
||||
|
||||
for(unique in uniques) {
|
||||
for(unique in uniques)
|
||||
sb.appendln(unique.tr())
|
||||
}
|
||||
|
||||
for(promotion in promotions)
|
||||
sb.appendln(promotion.tr())
|
||||
|
||||
sb.appendln("{Movement}: $movement".tr())
|
||||
return sb.toString()
|
||||
}
|
||||
|
@ -77,7 +85,9 @@ class BaseUnit : INamed, IConstruction, ICivilopedia {
|
|||
fun getMapUnit(): MapUnit {
|
||||
val unit = MapUnit()
|
||||
unit.name = name
|
||||
|
||||
unit.setTransients() // must be after setting name because it sets the baseUnit according to the name
|
||||
|
||||
return unit
|
||||
}
|
||||
|
||||
|
|
|
@ -76,10 +76,10 @@ class NationTable(val nation: Nation, val newGameParameters: GameParameters, ski
|
|||
textList+= " {Range} " + unit.range+ " vs " + originalUnit.range
|
||||
if (unit.movement!= originalUnit.movement)
|
||||
textList+= " {Movement} " + unit.movement+ " vs " + originalUnit.movement
|
||||
val newUniques = unit.uniques.filterNot { it in originalUnit.uniques }
|
||||
if(newUniques.isNotEmpty())
|
||||
textList+=" {Uniques}: "+newUniques.joinToString{ Translations.translateBonusOrPenalty(it) }
|
||||
textList+=""
|
||||
for(unique in unit.uniques.filterNot { it in originalUnit.uniques })
|
||||
textList += " "+Translations.translateBonusOrPenalty(unique)
|
||||
for(promotions in unit.promotions.filter { it !in originalUnit.promotions})
|
||||
textList += " "+promotions.tr()
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -49,9 +49,9 @@ class BattleTable(val worldScreen: WorldScreen): Table() {
|
|||
val defender: ICombatant? = Battle(worldScreen.gameInfo).getMapCombatantOfTile(selectedTile)
|
||||
|
||||
if(defender==null ||
|
||||
defender.getCivilization()==worldScreen.currentPlayerCiv
|
||||
defender.getCivInfo()==worldScreen.currentPlayerCiv
|
||||
|| !(UnCivGame.Current.viewEntireMapForDebug
|
||||
|| attacker.getCivilization().exploredTiles.contains(selectedTile.position))) {
|
||||
|| attacker.getCivInfo().exploredTiles.contains(selectedTile.position))) {
|
||||
hide()
|
||||
return
|
||||
}
|
||||
|
|
|
@ -76,6 +76,11 @@ class UnitActions {
|
|||
val newunit = unit.civInfo.placeUnitNearTile(unitTile.position, upgradedUnit.name)
|
||||
newunit.health = unit.health
|
||||
newunit.promotions = unit.promotions
|
||||
|
||||
for(promotion in unit.baseUnit.promotions)
|
||||
if(promotion !in newunit.promotions.promotions)
|
||||
newunit.promotions.addPromotion(promotion,true)
|
||||
|
||||
newunit.updateUniques()
|
||||
newunit.currentMovement = 0f
|
||||
worldScreen.shouldUpdate = true
|
||||
|
|
Loading…
Reference in a new issue