Specialists work again! =D

This commit is contained in:
Yair Morgenstern 2018-11-12 21:54:11 +02:00
parent 62ef51f38e
commit 0a0b664dfe
17 changed files with 261 additions and 169 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -391,126 +391,126 @@ BuildingIcons/Spaceship Factory
index: -1 index: -1
BuildingIcons/Stable BuildingIcons/Stable
rotate: false rotate: false
xy: 1224, 707 xy: 1122, 605
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/Stadium BuildingIcons/Stadium
rotate: false rotate: false
xy: 1122, 605 xy: 1020, 503
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/Stock Exchange BuildingIcons/Stock Exchange
rotate: false rotate: false
xy: 816, 299 xy: 1632, 1013
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/Stone Works BuildingIcons/Stone Works
rotate: false rotate: false
xy: 1530, 911 xy: 1428, 809
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/Stonehenge BuildingIcons/Stonehenge
rotate: false rotate: false
xy: 1428, 809 xy: 1326, 707
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/Sydney Opera House BuildingIcons/Sydney Opera House
rotate: false rotate: false
xy: 918, 299 xy: 1632, 911
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/Taj Mahal BuildingIcons/Taj Mahal
rotate: false rotate: false
xy: 1632, 911 xy: 1530, 809
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/Temple BuildingIcons/Temple
rotate: false rotate: false
xy: 1530, 809 xy: 1428, 707
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/The Great Library BuildingIcons/The Great Library
rotate: false rotate: false
xy: 1428, 707 xy: 1326, 605
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/The Great Lighthouse BuildingIcons/The Great Lighthouse
rotate: false rotate: false
xy: 1326, 605 xy: 1224, 503
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/The Louvre BuildingIcons/The Louvre
rotate: false rotate: false
xy: 1224, 503 xy: 1122, 401
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/The Oracle BuildingIcons/The Oracle
rotate: false rotate: false
xy: 1122, 401 xy: 1020, 299
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/The Pyramids BuildingIcons/The Pyramids
rotate: false rotate: false
xy: 1020, 299 xy: 1632, 809
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/Theatre BuildingIcons/Theatre
rotate: false rotate: false
xy: 1530, 707 xy: 1428, 605
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/University BuildingIcons/University
rotate: false rotate: false
xy: 1632, 707 xy: 1530, 605
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/Walls BuildingIcons/Walls
rotate: false rotate: false
xy: 1428, 503 xy: 1326, 401
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/Windmill BuildingIcons/Windmill
rotate: false rotate: false
xy: 1530, 503 xy: 1428, 401
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
BuildingIcons/Workshop BuildingIcons/Workshop
rotate: false rotate: false
xy: 1530, 401 xy: 1428, 299
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
@ -692,7 +692,7 @@ ImprovementIcons/Road
index: -1 index: -1
ImprovementIcons/Trading post ImprovementIcons/Trading post
rotate: false rotate: false
xy: 1326, 503 xy: 1224, 401
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
@ -769,14 +769,14 @@ OtherIcons/Sleep
index: -1 index: -1
OtherIcons/Star OtherIcons/Star
rotate: false rotate: false
xy: 1530, 305 xy: 1632, 305
size: 100, 94 size: 100, 94
orig: 100, 94 orig: 100, 94
offset: 0, 0 offset: 0, 0
index: -1 index: -1
OtherIcons/Stop OtherIcons/Stop
rotate: false rotate: false
xy: 1326, 707 xy: 1224, 605
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
@ -811,133 +811,133 @@ PolicyIcons/Aristocracy
index: -1 index: -1
PolicyIcons/Citizenship PolicyIcons/Citizenship
rotate: false rotate: false
xy: 1632, 350 xy: 1734, 1215
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Civil Society PolicyIcons/Civil Society
rotate: false rotate: false
xy: 1734, 1215 xy: 1734, 1163
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Collective Rule PolicyIcons/Collective Rule
rotate: false rotate: false
xy: 1734, 1163 xy: 1734, 1111
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Constitution PolicyIcons/Constitution
rotate: false rotate: false
xy: 1734, 1111 xy: 1734, 1059
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Democracy PolicyIcons/Democracy
rotate: false rotate: false
xy: 1734, 1059 xy: 1734, 1007
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Discipline PolicyIcons/Discipline
rotate: false rotate: false
xy: 1734, 1007 xy: 1734, 955
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Entrepreneurship PolicyIcons/Entrepreneurship
rotate: false rotate: false
xy: 1734, 955 xy: 1734, 903
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Facism PolicyIcons/Facism
rotate: false rotate: false
xy: 1734, 903 xy: 1734, 851
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Free Religion PolicyIcons/Free Religion
rotate: false rotate: false
xy: 1734, 851 xy: 1734, 799
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Free Speech PolicyIcons/Free Speech
rotate: false rotate: false
xy: 1734, 799 xy: 1734, 747
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Free Thought PolicyIcons/Free Thought
rotate: false rotate: false
xy: 1734, 747 xy: 1734, 695
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Humanism PolicyIcons/Humanism
rotate: false rotate: false
xy: 1734, 695 xy: 1734, 643
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Landed Elite PolicyIcons/Landed Elite
rotate: false rotate: false
xy: 1734, 643 xy: 1734, 591
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Legalism PolicyIcons/Legalism
rotate: false rotate: false
xy: 1734, 591 xy: 1734, 539
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Mandate Of Heaven PolicyIcons/Mandate Of Heaven
rotate: false rotate: false
xy: 1734, 539 xy: 1734, 487
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Mercantilism PolicyIcons/Mercantilism
rotate: false rotate: false
xy: 1734, 487 xy: 1734, 435
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Meritocracy PolicyIcons/Meritocracy
rotate: false rotate: false
xy: 1734, 435 xy: 1734, 383
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Militarism PolicyIcons/Militarism
rotate: false rotate: false
xy: 1892, 1237 xy: 1734, 331
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
index: -1 index: -1
PolicyIcons/Military Caste PolicyIcons/Military Caste
rotate: false rotate: false
xy: 1684, 350 xy: 1892, 1237
size: 50, 50 size: 50, 50
orig: 50, 50 orig: 50, 50
offset: 0, 0 offset: 0, 0
@ -1231,49 +1231,49 @@ ResourceIcons/Silver
index: -1 index: -1
ResourceIcons/Spices ResourceIcons/Spices
rotate: false rotate: false
xy: 1326, 809 xy: 1224, 707
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
ResourceIcons/Stone ResourceIcons/Stone
rotate: false rotate: false
xy: 1632, 1013 xy: 1530, 911
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
ResourceIcons/Sugar ResourceIcons/Sugar
rotate: false rotate: false
xy: 1122, 503 xy: 1020, 401
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
ResourceIcons/Uranium ResourceIcons/Uranium
rotate: false rotate: false
xy: 1530, 605 xy: 1428, 503
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
ResourceIcons/Whales ResourceIcons/Whales
rotate: false rotate: false
xy: 1224, 299 xy: 1632, 605
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
ResourceIcons/Wheat ResourceIcons/Wheat
rotate: false rotate: false
xy: 1632, 605 xy: 1530, 503
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
ResourceIcons/Wine ResourceIcons/Wine
rotate: false rotate: false
xy: 1428, 401 xy: 1326, 299
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
@ -1362,9 +1362,16 @@ StatIcons/Science
orig: 200, 200 orig: 200, 200
offset: 0, 0 offset: 0, 0
index: -1 index: -1
StatIcons/Specialist
rotate: false
xy: 1326, 809
size: 100, 100
orig: 100, 100
offset: 0, 0
index: -1
StatIcons/Strength StatIcons/Strength
rotate: false rotate: false
xy: 1224, 605 xy: 1122, 503
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
@ -1798,42 +1805,42 @@ TechIcons/Scientific Theory
index: -1 index: -1
TechIcons/Steam Power TechIcons/Steam Power
rotate: false rotate: false
xy: 1020, 503 xy: 918, 401
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
TechIcons/Steel TechIcons/Steel
rotate: false rotate: false
xy: 918, 401 xy: 816, 299
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
TechIcons/The Wheel TechIcons/The Wheel
rotate: false rotate: false
xy: 1632, 809 xy: 1530, 707
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
TechIcons/Theology TechIcons/Theology
rotate: false rotate: false
xy: 1428, 605 xy: 1326, 503
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
TechIcons/Trapping TechIcons/Trapping
rotate: false rotate: false
xy: 1224, 401 xy: 1122, 299
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
TechIcons/Writing TechIcons/Writing
rotate: false rotate: false
xy: 1428, 299 xy: 1632, 401
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
@ -2071,7 +2078,7 @@ UnitIcons/Musketeer
index: -1 index: -1
UnitIcons/Musketman UnitIcons/Musketman
rotate: false rotate: false
xy: 1632, 402 xy: 1530, 300
size: 100, 99 size: 100, 99
orig: 100, 99 orig: 100, 99
offset: 0, 0 offset: 0, 0
@ -2113,14 +2120,14 @@ UnitIcons/Spearman
index: -1 index: -1
UnitIcons/Swordsman UnitIcons/Swordsman
rotate: false rotate: false
xy: 1020, 401 xy: 918, 299
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitIcons/Trebuchet UnitIcons/Trebuchet
rotate: false rotate: false
xy: 1122, 299 xy: 1632, 707
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
@ -2134,21 +2141,21 @@ UnitIcons/Trireme
index: -1 index: -1
UnitIcons/Warrior UnitIcons/Warrior
rotate: false rotate: false
xy: 1326, 401 xy: 1224, 299
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitIcons/Work Boats UnitIcons/Work Boats
rotate: false rotate: false
xy: 1326, 299 xy: 1632, 503
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitIcons/Worker UnitIcons/Worker
rotate: false rotate: false
xy: 1632, 503 xy: 1530, 401
size: 100, 100 size: 100, 100
orig: 100, 100 orig: 100, 100
offset: 0, 0 offset: 0, 0
@ -2267,175 +2274,175 @@ UnitPromotionIcons/Coastal_Raider_II_(Civ5)
index: -1 index: -1
UnitPromotionIcons/Coastal_Raider_I_(Civ5) UnitPromotionIcons/Coastal_Raider_I_(Civ5)
rotate: false rotate: false
xy: 1632, 328 xy: 1734, 309
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Cover_II_(Civ5) UnitPromotionIcons/Cover_II_(Civ5)
rotate: false rotate: false
xy: 1734, 413 xy: 1786, 697
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Cover_I_(Civ5) UnitPromotionIcons/Cover_I_(Civ5)
rotate: false rotate: false
xy: 1786, 697 xy: 1838, 749
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Drill_III_(Civ5) UnitPromotionIcons/Drill_III_(Civ5)
rotate: false rotate: false
xy: 1838, 749 xy: 226, 1529
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Drill_II_(Civ5) UnitPromotionIcons/Drill_II_(Civ5)
rotate: false rotate: false
xy: 226, 1529 xy: 537, 1733
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Drill_I_(Civ5) UnitPromotionIcons/Drill_I_(Civ5)
rotate: false rotate: false
xy: 537, 1733 xy: 559, 1755
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Formation_II_(Civ5) UnitPromotionIcons/Formation_II_(Civ5)
rotate: false rotate: false
xy: 559, 1755 xy: 2005, 1987
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Formation_I_(Civ5) UnitPromotionIcons/Formation_I_(Civ5)
rotate: false rotate: false
xy: 2005, 1987 xy: 1875, 1857
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Indirect_Fire_(Civ5) UnitPromotionIcons/Indirect_Fire_(Civ5)
rotate: false rotate: false
xy: 1875, 1857 xy: 1863, 1705
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Logistics_(Civ5) UnitPromotionIcons/Logistics_(Civ5)
rotate: false rotate: false
xy: 1863, 1705 xy: 1885, 1727
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/March_(Civ5) UnitPromotionIcons/March_(Civ5)
rotate: false rotate: false
xy: 1885, 1727 xy: 356, 1263
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Mobility_(Civ5) UnitPromotionIcons/Mobility_(Civ5)
rotate: false rotate: false
xy: 356, 1263 xy: 430, 243
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Range_(Civ5) UnitPromotionIcons/Range_(Civ5)
rotate: false rotate: false
xy: 430, 243 xy: 1965, 1653
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Scouting_III_(Civ5) UnitPromotionIcons/Scouting_III_(Civ5)
rotate: false rotate: false
xy: 1965, 1653 xy: 1987, 1675
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Scouting_II_(Civ5) UnitPromotionIcons/Scouting_II_(Civ5)
rotate: false rotate: false
xy: 1987, 1675 xy: 1863, 1551
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Scouting_I_(Civ5) UnitPromotionIcons/Scouting_I_(Civ5)
rotate: false rotate: false
xy: 1863, 1551 xy: 512, 141
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Sentry_(Civ5) UnitPromotionIcons/Sentry_(Civ5)
rotate: false rotate: false
xy: 512, 141 xy: 573, 39
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Shock_III_(Civ5) UnitPromotionIcons/Shock_III_(Civ5)
rotate: false rotate: false
xy: 573, 39 xy: 486, 1393
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Shock_II_(Civ5) UnitPromotionIcons/Shock_II_(Civ5)
rotate: false rotate: false
xy: 486, 1393 xy: 634, 277
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Shock_I_(Civ5) UnitPromotionIcons/Shock_I_(Civ5)
rotate: false rotate: false
xy: 634, 277 xy: 1756, 309
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Siege_(Civ5) UnitPromotionIcons/Siege_(Civ5)
rotate: false rotate: false
xy: 1632, 306 xy: 1786, 675
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Targeting_III_(Civ5) UnitPromotionIcons/Targeting_III_(Civ5)
rotate: false rotate: false
xy: 1654, 328 xy: 1808, 697
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Targeting_II_(Civ5) UnitPromotionIcons/Targeting_II_(Civ5)
rotate: false rotate: false
xy: 1756, 413 xy: 1838, 727
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Targeting_I_(Civ5) UnitPromotionIcons/Targeting_I_(Civ5)
rotate: false rotate: false
xy: 1786, 675 xy: 1860, 749
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0
index: -1 index: -1
UnitPromotionIcons/Volley_(Civ5) UnitPromotionIcons/Volley_(Civ5)
rotate: false rotate: false
xy: 1808, 697 xy: 248, 1529
size: 20, 20 size: 20, 20
orig: 20, 20 orig: 20, 20
offset: 0, 0 offset: 0, 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 797 KiB

After

Width:  |  Height:  |  Size: 797 KiB

View File

@ -112,7 +112,7 @@ class CityConstructions {
} }
//endregion //endregion
//region state0changing functions //region state changing functions
fun addConstruction(constructionToAdd: Int) { fun addConstruction(constructionToAdd: Int) {
if (!inProgressConstructions.containsKey(currentConstruction)) inProgressConstructions[currentConstruction] = 0 if (!inProgressConstructions.containsKey(currentConstruction)) inProgressConstructions[currentConstruction] = 0
inProgressConstructions[currentConstruction] = inProgressConstructions[currentConstruction]!! + constructionToAdd inProgressConstructions[currentConstruction] = inProgressConstructions[currentConstruction]!! + constructionToAdd

View File

@ -124,7 +124,7 @@ class CityInfo {
fun getBuildingUniques(): List<String> = cityConstructions.getBuiltBuildings().flatMap { it.uniques } fun getBuildingUniques(): List<String> = cityConstructions.getBuiltBuildings().flatMap { it.uniques }
fun getGreatPersonPoints(): Stats { fun getGreatPersonPoints(): Stats {
var greatPersonPoints = population.getSpecialists().times(3f) var greatPersonPoints = population.specialists.times(3f)
for (building in cityConstructions.getBuiltBuildings()) for (building in cityConstructions.getBuiltBuildings())
if (building.greatPersonPoints != null) if (building.greatPersonPoints != null)

View File

@ -139,18 +139,20 @@ class CityStats {
return newHappinessList return newHappinessList
} }
fun getStatsOfSpecialist(stat:Stat, policies: HashSet<String>): Stats {
val stats = Stats()
if(stat==Stat.Culture||stat==Stat.Science) stats.add(stat,3f)
else stats.add(stat,2f) // science and gold specialists
if (policies.contains("Commerce Complete")) stats.gold += 1
if (policies.contains("Secularism")) stats.science += 2
return stats
}
private fun getStatsFromSpecialists(specialists: Stats, policies: HashSet<String>): Stats { private fun getStatsFromSpecialists(specialists: Stats, policies: HashSet<String>): Stats {
val stats = Stats() val stats = Stats()
for(entry in specialists.toHashMap().filter { it.value>0 })
// Specialists stats.add(getStatsOfSpecialist(entry.key,policies)*entry.value)
stats.culture += specialists.culture * 3
stats.production += specialists.production * 2
stats.science += specialists.science * 3
stats.gold += specialists.gold * 2
val numOfSpecialists = cityInfo.population.getNumberOfSpecialists()
if (policies.contains("Commerce Complete")) stats.gold += numOfSpecialists.toFloat()
if (policies.contains("Secularism")) stats.science += (numOfSpecialists * 2).toFloat()
return stats return stats
} }
@ -242,7 +244,7 @@ class CityStats {
newBaseStatList["Population"] = Stats().add(Stat.Science, cityInfo.population.population.toFloat()) newBaseStatList["Population"] = Stats().add(Stat.Science, cityInfo.population.population.toFloat())
.add(Stat.Production, cityInfo.population.getFreePopulation().toFloat()) .add(Stat.Production, cityInfo.population.getFreePopulation().toFloat())
newBaseStatList["Tile yields"] = getStatsFromTiles() newBaseStatList["Tile yields"] = getStatsFromTiles()
newBaseStatList["Specialists"] = getStatsFromSpecialists(cityInfo.population.getSpecialists(), civInfo.policies.adoptedPolicies) newBaseStatList["Specialists"] = getStatsFromSpecialists(cityInfo.population.specialists, civInfo.policies.adoptedPolicies)
newBaseStatList["Trade routes"] = getStatsFromTradeRoute() newBaseStatList["Trade routes"] = getStatsFromTradeRoute()
newBaseStatList["Buildings"] = cityInfo.cityConstructions.getStats() newBaseStatList["Buildings"] = cityInfo.cityConstructions.getStats()
newBaseStatList["Policies"] = getStatsFromPolicies(civInfo.policies.adoptedPolicies) newBaseStatList["Policies"] = getStatsFromPolicies(civInfo.policies.adoptedPolicies)

View File

@ -12,7 +12,9 @@ class PopulationManager {
var population = 1 var population = 1
var foodStored = 0 var foodStored = 0
var buildingsSpecialists = HashMap<String, Stats>()
val specialists = Stats()
//var buildingsSpecialists = HashMap<String, Stats>()
//region pure functions //region pure functions
fun clone(): PopulationManager { fun clone(): PopulationManager {
@ -22,15 +24,15 @@ class PopulationManager {
return toReturn return toReturn
} }
fun getSpecialists(): Stats { // fun getSpecialists(): Stats {
val allSpecialists = Stats() // val allSpecialists = Stats()
for (stats in buildingsSpecialists.values) // for (stats in buildingsSpecialists.values)
allSpecialists.add(stats) // allSpecialists.add(stats)
return allSpecialists // return allSpecialists
} // }
fun getNumberOfSpecialists(): Int { fun getNumberOfSpecialists(): Int {
val specialists = getSpecialists() //val specialists = getSpecialists()
return (specialists.science + specialists.production + specialists.culture + specialists.gold).toInt() return (specialists.science + specialists.production + specialists.culture + specialists.gold).toInt()
} }
@ -93,6 +95,20 @@ class PopulationManager {
.minBy { Automation().rankTile(it, cityInfo.civInfo) }!! .minBy { Automation().rankTile(it, cityInfo.civInfo) }!!
cityInfo.workedTiles.remove(lowestRankedWorkedTile.position) cityInfo.workedTiles.remove(lowestRankedWorkedTile.position)
} }
// unassign specialists that cannot be (e.g. the city was captured and one of the specialist buildings was destroyed)
val maxSpecialists = getMaxSpecialists().toHashMap()
val specialistsHashmap = specialists.toHashMap()
for(entry in maxSpecialists)
if(specialistsHashmap[entry.key]!!>entry.value)
specialists.add(entry.key,specialistsHashmap[entry.key]!!-maxSpecialists[entry.key]!!)
}
fun getMaxSpecialists(): Stats {
val maximumSpecialists = Stats()
for (building in cityInfo.cityConstructions.getBuiltBuildings().filter { it.specialistSlots!=null })
maximumSpecialists.add(building.specialistSlots!!)
return maximumSpecialists
} }
} }

View File

@ -107,7 +107,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){
private fun getHappinessTable(): Table { private fun getHappinessTable(): Table {
val happinessTable = Table(skin) val happinessTable = Table(skin)
happinessTable.defaults().pad(5f) happinessTable.defaults().pad(5f)
happinessTable.add(Label("Happiness".tr(), skin).setFont(24)).colspan(2).row() happinessTable.add(Label("Happiness".tr(), skin).setFontSize(24)).colspan(2).row()
for (entry in civInfo.getHappinessForNextTurn()) { for (entry in civInfo.getHappinessForNextTurn()) {
happinessTable.add(entry.key.tr()) happinessTable.add(entry.key.tr())
happinessTable.add(entry.value.toString()).row() happinessTable.add(entry.value.toString()).row()
@ -121,7 +121,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){
private fun getGoldTable(): Table { private fun getGoldTable(): Table {
val goldTable = Table(skin) val goldTable = Table(skin)
goldTable.defaults().pad(5f) goldTable.defaults().pad(5f)
goldTable.add(Label("Gold".tr(), skin).setFont(24)).colspan(2).row() goldTable.add(Label("Gold".tr(), skin).setFontSize(24)).colspan(2).row()
var total=0f var total=0f
for (entry in civInfo.getStatMapForNextTurn()) { for (entry in civInfo.getStatMapForNextTurn()) {
if(entry.value.gold==0f) continue if(entry.value.gold==0f) continue
@ -142,7 +142,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){
val cityInfoTableIcons = Table(skin) val cityInfoTableIcons = Table(skin)
cityInfoTableIcons.defaults().pad(padding).align(Align.center) cityInfoTableIcons.defaults().pad(padding).align(Align.center)
cityInfoTableIcons.add(Label("Cities".tr(), skin).setFont(24)).colspan(8).align(Align.center).row() cityInfoTableIcons.add(Label("Cities".tr(), skin).setFontSize(24)).colspan(8).align(Align.center).row()
cityInfoTableIcons.add() cityInfoTableIcons.add()
cityInfoTableIcons.add(ImageGetter.getStatIcon("Population")).size(iconSize) cityInfoTableIcons.add(ImageGetter.getStatIcon("Population")).size(iconSize)
cityInfoTableIcons.add(ImageGetter.getStatIcon("Food")).size(iconSize) cityInfoTableIcons.add(ImageGetter.getStatIcon("Food")).size(iconSize)

View File

@ -1,19 +1,46 @@
package com.unciv.ui.cityscreen package com.unciv.ui.cityscreen
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.ui.Image import com.badlogic.gdx.scenes.scene2d.ui.*
import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.utils.Align
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.unciv.logic.city.CityInfo
import com.unciv.models.gamebasics.Building import com.unciv.models.gamebasics.Building
import com.unciv.models.stats.Stat import com.unciv.models.stats.Stat
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.*
import com.unciv.ui.utils.ImageGetter.getImage
import com.unciv.ui.utils.onClick
import com.unciv.ui.utils.setFont
class ExpanderTab(private val title:String,skin: Skin):Table(skin){
private val toggle = Table(skin) // the show/hide toggler
private val tab = Table() // what holds the information to be shown/hidden
val innerTable=Table() // the information itself
init{
toggle.defaults().pad(10f)
toggle.background(ImageGetter.getBackground(ImageGetter.getBlue()))
toggle.add("+ $title").apply { actor.setFontSize(24) }
toggle.onClick {
toggle.clearChildren()
if(tab.isVisible) {
toggle.add("- $title").apply { actor.setFontSize(24) }
tab.clear()
}
else {
toggle.add("+ $title").apply { actor.setFontSize(24) }
tab.add(innerTable)
}
tab.isVisible=!tab.isVisible
}
add(toggle).row()
tab.add(innerTable)
add(tab)
}
}
class BuildingsTable(private val cityScreen: CityScreen) : Table() { class BuildingsTable(private val cityScreen: CityScreen) : Table() {
init {
defaults().pad(10f)
}
internal fun update() { internal fun update() {
clear() clear()
@ -31,69 +58,109 @@ class BuildingsTable(private val cityScreen: CityScreen) : Table() {
} }
} }
fun createLabel(text:String): Label {
val label = Label(text, skin)
label.setFont(20)
label.color = Color.GREEN
return label
}
if (!wonders.isEmpty()) { if (!wonders.isEmpty()) {
val wondersExpander = ExpanderTab("Wonders",skin)
add(createLabel("Wonders")).pad(5f).row()
for (building in wonders) for (building in wonders)
add(Label(building.name, skin)).pad(5f).row() wondersExpander.innerTable.add(Label(building.name, skin)).pad(5f).align(Align.left).row()
add(wondersExpander).row()
} }
if (!specialistBuildings.isEmpty()) { if (!specialistBuildings.isEmpty()) {
add(createLabel("Specialist Buildings")).pad(5f).row() val specialistBuildingsExpander = ExpanderTab("Specialist Buildings",skin)
for (building in specialistBuildings) { for (building in specialistBuildings) {
add(Label(building.name, skin)).pad(5f) specialistBuildingsExpander.innerTable.add(Label(building.name, skin)).pad(5f)
val specialists = Table() val specialistIcons = Table()
specialists.row().size(20f).pad(5f) specialistIcons.row().size(20f).pad(5f)
if (!cityInfo.population.buildingsSpecialists.containsKey(building.name)) for(stat in building.specialistSlots!!.toHashMap())
cityInfo.population.buildingsSpecialists[building.name] = Stats() for(i in 0 until stat.value.toInt())
val currentBuildingSpecialists = cityInfo.population.buildingsSpecialists[building.name]!!.toHashMap() specialistIcons.add(getSpecialistIcon(stat.key)).size(20f)
for(stat in Stat.values()){
for (i in 1..(currentBuildingSpecialists[stat]!!).toInt()) {
specialists.add(getSpecialistIcon(
"StatIcons/${stat}Specialist.png", building.name,
currentBuildingSpecialists[stat]!! > i, stat))
}
}
add(specialists).row() specialistBuildingsExpander.innerTable.add(specialistIcons).row()
} }
add(specialistBuildingsExpander).row()
// specialist allocation
addSpecialistAllocation(skin, specialistBuildings, cityInfo)
} }
if (!others.isEmpty()) { if (!others.isEmpty()) {
add(createLabel("Buildings")).pad(5f).row() val buildingsExpanderTab = ExpanderTab("Buildings",skin)
for (building in others) for (building in others)
add(Label(building.name, skin)).pad(5f).row() buildingsExpanderTab.innerTable.add(Label(building.name, skin)).pad(5f).row()
add(buildingsExpanderTab).row()
} }
pack() pack()
} }
private fun addSpecialistAllocation(skin: Skin, specialistBuildings: MutableList<Building>, cityInfo: CityInfo) {
val specialistAllocationExpander = ExpanderTab("Specialist allocation", skin)
specialistAllocationExpander.innerTable.defaults().pad(5f)
private fun getSpecialistIcon(imageName: String, building: String, isFilled: Boolean, stat: Stat): Image {
val specialist = getImage(imageName) val currentSpecialists = cityInfo.population.specialists.toHashMap()
specialist.setSize(50f, 50f) val maximumSpecialists = cityInfo.population.getMaxSpecialists()
if (!isFilled) specialist.color = Color.GRAY
specialist.onClick( { for (entry in maximumSpecialists.toHashMap()) {
val cityInfo = cityScreen.city if (entry.value == 0f) continue
when { val stat = entry.key
isFilled -> cityInfo.population.buildingsSpecialists[building]!!.add(stat,-1f) //unassign // these two are conflictingly named compared to above...
cityInfo.population.getFreePopulation() == 0 -> return@onClick val assignedSpecialists = currentSpecialists[entry.key]!!.toInt()
else -> { val maxSpecialists = entry.value.toInt()
if (!cityInfo.population.buildingsSpecialists.containsKey(building)) if (assignedSpecialists > 0) {
cityInfo.population.buildingsSpecialists[building] = Stats() val unassignButton = TextButton("-", skin)
cityInfo.population.buildingsSpecialists[building]!!.add(stat,1f) //assign!} unassignButton.label.setFontSize(24)
unassignButton.onClick {
cityInfo.population.specialists.add(entry.key, -1f)
cityInfo.cityStats.update()
cityScreen.update()
} }
} specialistAllocationExpander.innerTable.add(unassignButton)
} else specialistAllocationExpander.innerTable.add()
cityInfo.cityStats.update() val specialistTable = Table()
cityScreen.update() for (i in 1..maxSpecialists) {
}) val icon = getSpecialistIcon(stat, i <= assignedSpecialists)
specialistTable.add(icon).size(30f)
}
specialistAllocationExpander.innerTable.add(specialistTable)
if (assignedSpecialists < maxSpecialists) {
val assignButton = TextButton("+", skin)
assignButton.label.setFontSize(24)
assignButton.onClick {
cityInfo.population.specialists.add(entry.key, +1f)
cityInfo.cityStats.update()
cityScreen.update()
}
if (cityInfo.population.getFreePopulation() == 0) assignButton.disable()
specialistAllocationExpander.innerTable.add(assignButton)
} else specialistAllocationExpander.innerTable.add()
specialistAllocationExpander.innerTable.row()
val specialistStatTable = Table().apply { defaults().pad(5f) }
val specialistStats = cityInfo.cityStats.getStatsOfSpecialist(stat, cityInfo.civInfo.policies.adoptedPolicies).toHashMap()
for (entry in specialistStats) {
if (entry.value == 0f) continue
specialistStatTable.add(ImageGetter.getStatIcon(entry.key.toString())).size(20f)
specialistStatTable.add(Label(entry.value.toInt().toString(), skin)).padRight(10f)
}
specialistAllocationExpander.innerTable.add()
specialistAllocationExpander.innerTable.add(specialistStatTable).row()
}
add(specialistAllocationExpander).row()
}
private fun getSpecialistIcon(stat: Stat, isFilled: Boolean =true): Image {
val specialist = ImageGetter.getImage("StatIcons/Specialist")
if (!isFilled) specialist.color = Color.GRAY
else specialist.color=when(stat){
Stat.Production -> Color.BROWN
Stat.Gold -> Color.GOLD
Stat.Science -> Color.BLUE
Stat.Culture -> Color.PURPLE
else -> Color.WHITE
}
return specialist return specialist
} }

View File

@ -140,7 +140,7 @@ class CityScreen(internal val city: CityInfo) : CameraStageBaseScreen() {
} }
val currentCityLabel = Label(city.name+" ("+city.population.population+")", CameraStageBaseScreen.skin) val currentCityLabel = Label(city.name+" ("+city.population.population+")", CameraStageBaseScreen.skin)
currentCityLabel.setFont(25) currentCityLabel.setFontSize(25)
cityPickerTable.add(currentCityLabel) cityPickerTable.add(currentCityLabel)

View File

@ -24,7 +24,7 @@ class CityStatsTable(val cityScreen: CityScreen) : Table(){
val cityStatsHeader = Label("City Stats", CameraStageBaseScreen.skin) val cityStatsHeader = Label("City Stats", CameraStageBaseScreen.skin)
cityStatsHeader.setFont(15) cityStatsHeader.setFontSize(15)
add(cityStatsHeader).colspan(2).pad(10f) add(cityStatsHeader).colspan(2).pad(10f)
row() row()

View File

@ -154,7 +154,7 @@ class WorldTileGroup(tileInfo: TileInfo) : TileGroup(tileInfo) {
val turnsToConstruction = cityConstructions.turnsToConstruction(cityConstructions.currentConstruction) val turnsToConstruction = cityConstructions.turnsToConstruction(cityConstructions.currentConstruction)
val label = Label(turnsToConstruction.toString(),CameraStageBaseScreen.skin) val label = Label(turnsToConstruction.toString(),CameraStageBaseScreen.skin)
label.setFontColor(secondaryColor) label.setFontColor(secondaryColor)
label.setFont(10) label.setFontSize(10)
label.pack() label.pack()
group.addActor(label) group.addActor(label)

View File

@ -41,7 +41,7 @@ class DiplomacyScreen():CameraStageBaseScreen(){
civTable.defaults().pad(10f) civTable.defaults().pad(10f)
val peaceWarStatus = civDiplomacy.diplomaticStatus.toString() val peaceWarStatus = civDiplomacy.diplomaticStatus.toString()
civTable.add(Label(civ.civName.tr() + " ({$peaceWarStatus})".tr(), skin) civTable.add(Label(civ.civName.tr() + " ({$peaceWarStatus})".tr(), skin)
.apply { setFont(22); setFontColor(civ.getNation().getSecondaryColor()) }).row() .apply { setFontSize(22); setFontColor(civ.getNation().getSecondaryColor()) }).row()
val tradeButton = TextButton("Trade".tr(), skin) val tradeButton = TextButton("Trade".tr(), skin)
tradeButton.onClick { tradeButton.onClick {

View File

@ -175,7 +175,7 @@ fun getFont(size: Int): BitmapFont {
return font return font
} }
fun Label.setFont(size:Int): Label { fun Label.setFontSize(size:Int): Label {
style = Label.LabelStyle(style) style = Label.LabelStyle(style)
style.font = getFont(size) style.font = getFont(size)
style = style // because we need it to call the SetStyle function. Yuk, I know. style = style // because we need it to call the SetStyle function. Yuk, I know.

View File

@ -19,7 +19,7 @@ class NotificationsScroll(internal val worldScreen: WorldScreen) : ScrollPane(nu
notificationsTable.clearChildren() notificationsTable.clearChildren()
for (notification in notifications) { for (notification in notifications) {
val label = Label(notification.text.tr(), CameraStageBaseScreen.skin).setFontColor(Color.BLACK) val label = Label(notification.text.tr(), CameraStageBaseScreen.skin).setFontColor(Color.BLACK)
.setFont(14) .setFontSize(14)
val minitable = Table() val minitable = Table()
minitable.add(ImageGetter.getImage("OtherIcons/Circle.png") minitable.add(ImageGetter.getImage("OtherIcons/Circle.png")

View File

@ -174,7 +174,7 @@ class WorldScreen : CameraStageBaseScreen() {
if (civInfo.tech.currentTechnology() == null) { if (civInfo.tech.currentTechnology() == null) {
val buttonPic = Table().apply { background = ImageGetter.getDrawable("OtherIcons/civTableBackground.png").tint(colorFromRGB(7, 46, 43)); defaults().pad(10f) } val buttonPic = Table().apply { background = ImageGetter.getDrawable("OtherIcons/civTableBackground.png").tint(colorFromRGB(7, 46, 43)); defaults().pad(10f) }
buttonPic.add(Label("{Pick a tech}!".tr(), skin).setFontColor(Color.WHITE).setFont(22)) buttonPic.add(Label("{Pick a tech}!".tr(), skin).setFontColor(Color.WHITE).setFontSize(22))
techButton.add(buttonPic) techButton.add(buttonPic)
} }
else { else {

View File

@ -74,8 +74,8 @@ class BattleTable(val worldScreen: WorldScreen): Table() {
else listOf() else listOf()
for(i in 0..max(attackerModifiers.size,defenderModifiers.size)){ for(i in 0..max(attackerModifiers.size,defenderModifiers.size)){
if (attackerModifiers.size > i) add(attackerModifiers[i]).actor.setFont(14) else add() if (attackerModifiers.size > i) add(attackerModifiers[i]).actor.setFontSize(14) else add()
if (defenderModifiers.size > i) add(defenderModifiers[i]).actor.setFont(14) else add() if (defenderModifiers.size > i) add(defenderModifiers[i]).actor.setFontSize(14) else add()
row().pad(2f) row().pad(2f)
} }