Organized building order and icon credits
This commit is contained in:
parent
b528ef38e9
commit
b4c17f7664
6 changed files with 400 additions and 334 deletions
174
Credits.md
174
Credits.md
|
@ -1,12 +1,11 @@
|
|||
# Icon Credits
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
||||
All the following are from [the Noun Project](https://thenounproject.com) licenced under either Creative Commons or Public Domain
|
||||
|
||||
|
||||
## Units
|
||||
|
||||
### Ancient Era
|
||||
|
@ -17,7 +16,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
|
|||
* [Axe](https://thenounproject.com/search/?q=Axe&i=1688143) By ehab.abdullah for Warrior
|
||||
* [Bow And Arrow](https://thenounproject.com/search/?q=Bow%20and%20Arrow&i=338261) By Viktor Ostrovsky for Archer
|
||||
* [Bow](https://thenounproject.com/search/?q=bow&i=101736) By Arthur Shlain for Bowman
|
||||
* Work Boats
|
||||
* [Fishing Vessel](https://thenounproject.com/term/fishing-vessel/23815/) By Luis Prado for Work Boats
|
||||
* [Chariot](https://thenounproject.com/search/?q=Chariot&i=1189930) By Andrew Doane for Chariot Archer
|
||||
* [Spear](https://thenounproject.com/search/?q=Spear&i=11432) By Stephen Copinger for Spearman
|
||||
|
||||
|
@ -85,88 +84,110 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
|
|||
|
||||
## Improvements
|
||||
|
||||
* [Woodcutting axe](https://thenounproject.com/term/woodcutting-axe/1060560/) By Chanut is Industries
|
||||
* [Monument](https://thenounproject.com/term/monument/1175928/) By Setyo Ari Wibowo
|
||||
* [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
|
||||
* [Farm](https://thenounproject.com/term/farm/25362/) By Bonnie Beach
|
||||
* [Unhappy](https://thenounproject.com/term/unhappy/116793/) By Daryl Vandermont
|
||||
* [Bank](https://thenounproject.com/term/bank/1648569/) By Scott Dunlap
|
||||
* [Unhappy](https://thenounproject.com/term/unhappy/116793/) By Daryl Vandermont (doesn't belong here)
|
||||
* [Bank](https://thenounproject.com/term/bank/1648569/) By Scott Dunlap for Customs House
|
||||
* [Academy](https://thenounproject.com/term/academy/1689703/) By CJS
|
||||
* [Factory](https://thenounproject.com/term/factory/1049531/) By RULI
|
||||
* [Factory](https://thenounproject.com/term/factory/1049531/) By RULI for Manufactory
|
||||
* [Mine](https://thenounproject.com/term/mine/543/) By Edward Boatman
|
||||
* [Corral](https://thenounproject.com/term/corral/1340751/) By Luis Prado for Pasture
|
||||
* [Plants](https://thenounproject.com/term/plants/1760916/) By hendra sudibyo
|
||||
* [Pickaxe](https://thenounproject.com/term/pickaxe/175792/) By Creative Stall
|
||||
* [Food stall](https://thenounproject.com/term/food-stall/1618358/) By I Putu Kharismayadi
|
||||
* [Plants](https://thenounproject.com/term/plants/1760916/) By hendra sudibyo for Plantation
|
||||
* [Pickaxe](https://thenounproject.com/term/pickaxe/175792/) By Creative Stall for Quarry
|
||||
* [Food stall](https://thenounproject.com/term/food-stall/1618358/) By I Putu Kharismayadi for Trading post
|
||||
* [Road](https://thenounproject.com/term/road/1600491/) By REVA
|
||||
* [Ruins](https://thenounproject.com/term/ruins/175277/) By Creative Stall
|
||||
* [Ruins](https://thenounproject.com/term/ruins/3849/) By Paulo Volkova
|
||||
* [Ruins](https://thenounproject.com/term/ruins/175277/) By Creative Stall for Ancient runs
|
||||
* [Ruins](https://thenounproject.com/term/ruins/3849/) By Paulo Volkova for City ruins
|
||||
* [Fishing Net](https://thenounproject.com/term/fishing-net/1073133/) By Made for Fishing Boats
|
||||
|
||||
## Buildings
|
||||
|
||||
* [Chinese traditional tower](https://thenounproject.com/term/chinese-traditional-tower/1808410/) By 1516
|
||||
* [Factory](https://thenounproject.com/term/factory/545906/) By icon 54
|
||||
* [Factory](https://thenounproject.com/term/factory/1624235/) By Maxim Kulikov
|
||||
* [Bullets](https://thenounproject.com/term/bullets/810156/) By Aldric Rodriguez
|
||||
* [Observatory](https://thenounproject.com/term/observatory/1259/) By Nathan Driskell
|
||||
* [Opera House](https://thenounproject.com/term/opera-house/446672/) By Xinh Studio
|
||||
* [Aqueduct](https://thenounproject.com/term/aqueduct/24639/) By Arthur Shlain
|
||||
* [Hand saw](https://thenounproject.com/term/hand-saw/990902/) By b farias
|
||||
* [Forge](https://thenounproject.com/term/forge/1044767/) By Monjin Friends
|
||||
* [Books](https://thenounproject.com/term/books/1140218/) By Abir Alward
|
||||
* [Cambodia](https://thenounproject.com/term/cambodia/1809152/) By Wichai Wi
|
||||
* [Stadium](https://thenounproject.com/term/stadium/1152530/) By Creaticca Creative Agency
|
||||
* [Stadium](https://thenounproject.com/term/stadium/1500595/) By sandra
|
||||
* [Stadium](https://thenounproject.com/term/stadium/13872/) By Karuna Lalvani
|
||||
* [Market](https://thenounproject.com/term/market/1723050/) By sofi
|
||||
* [Christian Church](https://thenounproject.com/term/christian-church/1174183/) By Andrejs Kirma
|
||||
* [Notre Dame](https://thenounproject.com/term/notre-dame/1361725/) By Marco Livolsi
|
||||
* [Hagia Sophia](https://thenounproject.com/term/hagia-sophia/1907752/) By Felipe Alvarado
|
||||
* [Shekel Coin](https://thenounproject.com/term/shekel-coin/204154/) By Till Teenck
|
||||
* [Machu Pichu](https://thenounproject.com/term/machu-picchu/1569706/) By Carpe Diem
|
||||
* [Parthenon](https://thenounproject.com/term/parthenon/493272/) By Christopher T. Howlett
|
||||
* [College](https://thenounproject.com/term/college/129978/) By Alexander Skowalsky
|
||||
* [College](https://thenounproject.com/term/college/1203703/) By Vectors Market
|
||||
* [Chichen Itza](https://thenounproject.com/term/chichen-itza/668065/) By Hea Poh Lin
|
||||
* [Great Wall Of China](https://thenounproject.com/term/great-wall-of-china/146039/) By Arthur Shlain
|
||||
* [Cross swords](https://thenounproject.com/term/cross-swords/965398/) By Creaticca Creative Agency
|
||||
* [Temple](https://thenounproject.com/term/temple/1808407/) By 1516
|
||||
* [Anubis](https://thenounproject.com/term/anubis/1080090/) By Carpe Diem
|
||||
* [Stonehenge](https://thenounproject.com/term/stonehenge/543289/) By icon 54
|
||||
### Ancient Era
|
||||
|
||||
* [Storehouse](https://thenounproject.com/term/storehouse/966786/) By Pedro Santos for Granary
|
||||
* [Great Wall Of China](https://thenounproject.com/term/great-wall-of-china/146039/) By Arthur Shlain for Walls
|
||||
* [Block](https://thenounproject.com/term/block/1711553/) By Monjin Friends for Stone Works
|
||||
* [korean palace](https://thenounproject.com/term/korean-palace/1797542/) By 1516 for Palace
|
||||
* [Obelisk](https://thenounproject.com/term/obelisk/749104/) By Eliricon for Monument
|
||||
* [Cross swords](https://thenounproject.com/term/cross-swords/965398/) By Creaticca Creative Agency for Barracks
|
||||
* [Paper](https://thenounproject.com/term/paper/1443472/) By anam
|
||||
* [Circus](https://thenounproject.com/term/circus/743734/) By Ralph Schmitzer
|
||||
* [korean palace](https://thenounproject.com/term/korean-palace/1797542/) By 1516
|
||||
* [Obelisk](https://thenounproject.com/term/obelisk/749104/) By Eliricon
|
||||
* [Storehouse](https://thenounproject.com/term/storehouse/966786/) By Pedro Santos
|
||||
* [Library](https://thenounproject.com/term/library/1122689/) By Rob Crosswell
|
||||
* [Block](https://thenounproject.com/term/block/1711553/) By Monjin Friends
|
||||
* [Water dam](https://thenounproject.com/term/water-dam/1002726/) By Symbolon
|
||||
* [Spaceship](https://thenounproject.com/term/spaceship/1444621/) By Dinosoft Labs
|
||||
* [Nuclear Plant](https://thenounproject.com/term/nuclear-plant/1132340/) By Andrejs Kirma
|
||||
* [Build](https://thenounproject.com/term/build/1156478/) By Michael G Brown
|
||||
* [Missile](https://thenounproject.com/term/missile/799922/) By ProSymbols
|
||||
* [Rocket](https://thenounproject.com/term/rocket/937173/) By BomSymbols
|
||||
* [Engine](https://thenounproject.com/term/engine/1877958/) By Andre
|
||||
* [Chamber](https://thenounproject.com/term/chamber/1242689/) By IYIKON
|
||||
* [Bank](https://thenounproject.com/term/bank/1882194/) By projecthayat
|
||||
* [Forbidden City](https://thenounproject.com/term/forbidden-city/1797540/) By 1516
|
||||
* [Theatre](https://thenounproject.com/term/theatre/1780401/) By b farias
|
||||
* [Taj Mahal](https://thenounproject.com/term/taj-mahal/1907755/) By Felipe Alvarado
|
||||
* [Windmill](https://thenounproject.com/term/windmill/1705107/) By corpus delicti
|
||||
* [Stonehenge](https://thenounproject.com/term/stonehenge/543289/) By icon 54
|
||||
|
||||
### Classical Era
|
||||
|
||||
* [Temple](https://thenounproject.com/term/temple/1808407/) By 1516
|
||||
* [Anubis](https://thenounproject.com/term/anubis/1080090/) By Carpe Diem for Burial Tomb
|
||||
* [Parthenon](https://thenounproject.com/term/parthenon/493272/) By Christopher T. Howlett for The Oracle
|
||||
* [Stadium](https://thenounproject.com/term/stadium/1500595/) By sandra for Colloseum
|
||||
* [Stadium](https://thenounproject.com/term/stadium/1152530/) By Creaticca Creative Agency for Circus Maximus
|
||||
* [Market](https://thenounproject.com/term/market/1723050/) By sofi
|
||||
* [Bazaar](https://thenounproject.com/term/bazaar/902288/) By Tokka Elkholy
|
||||
* [Shekel Coin](https://thenounproject.com/term/shekel-coin/204154/) By Till Teenck for Mint
|
||||
* [Aqueduct](https://thenounproject.com/term/aqueduct/24639/) By Arthur Shlain
|
||||
|
||||
### Medieval Era
|
||||
|
||||
* [College](https://thenounproject.com/term/college/129978/) By Alexander Skowalsky for University
|
||||
* [College](https://thenounproject.com/term/college/1203703/) By Vectors Market for National College
|
||||
* [Chichen Itza](https://thenounproject.com/term/chichen-itza/668065/) By Hea Poh Lin
|
||||
* [Christian Church](https://thenounproject.com/term/christian-church/1174183/) By Andrejs Kirma for Monastary
|
||||
* [Cambodia](https://thenounproject.com/term/cambodia/1809152/) By Wichai Wi for Angkor Wat
|
||||
* [Books](https://thenounproject.com/term/books/1140218/) By Abir Alward for Oxford University
|
||||
* [Forge](https://thenounproject.com/term/forge/1044767/) By Monjin Friends
|
||||
* [Hand saw](https://thenounproject.com/term/hand-saw/990902/) By b farias for Workshop
|
||||
* [Hagia Sophia](https://thenounproject.com/term/hagia-sophia/1907752/) By Felipe Alvarado
|
||||
* [Factory](https://thenounproject.com/term/factory/1624235/) By Maxim Kulikov for Ironworks
|
||||
* [Notre Dame](https://thenounproject.com/term/notre-dame/1361725/) By Marco Livolsi
|
||||
* [Bullets](https://thenounproject.com/term/bullets/810156/) By Aldric Rodriguez for Armory
|
||||
* [Machu Pichu](https://thenounproject.com/term/machu-picchu/1569706/) By Carpe Diem
|
||||
|
||||
### Renaissance Era
|
||||
|
||||
* [Museum](https://thenounproject.com/term/museum/803560/) by zidney
|
||||
* [Hermitage](https://thenounproject.com/term/hermitage/133969/) By Yuri Mamaev
|
||||
* [The Louvre](https://thenounproject.com/term/the-louvre/1577539/) By roundicons.com
|
||||
* [Books](https://thenounproject.com/term/books/1767500/) By Minh Do
|
||||
* [Forbidden City](https://thenounproject.com/term/forbidden-city/1797540/) By 1516
|
||||
* [Theatre](https://thenounproject.com/term/theatre/1780401/) By b farias
|
||||
* [Windmill](https://thenounproject.com/term/windmill/1705107/) By corpus delicti
|
||||
* [Taj Mahal](https://thenounproject.com/term/taj-mahal/1907755/) By Felipe Alvarado
|
||||
* [Observatory](https://thenounproject.com/term/observatory/1259/) By Nathan Driskell
|
||||
* [Opera House](https://thenounproject.com/term/opera-house/446672/) By Xinh Studio
|
||||
* [Chinese traditional tower](https://thenounproject.com/term/chinese-traditional-tower/1808410/) By 1516 for Porcelain Tower
|
||||
* [Bank](https://thenounproject.com/term/bank/1882194/) By projecthayat
|
||||
|
||||
### Industrial Era
|
||||
|
||||
* [Books](https://thenounproject.com/term/books/1767500/) By Minh Do for Public School
|
||||
* [Hospital](https://thenounproject.com/term/hospital/1658509/) By Adrien Coquet
|
||||
* [Stock exchange](https://thenounproject.com/term/stock-exchange/1210199/) By Pundimon
|
||||
* [Christ the redeemer](https://thenounproject.com/term/christ-the-redeemer/56112/) By Stefan Spieler
|
||||
* [Military](https://thenounproject.com/term/military/1857519/) By myiconfinder
|
||||
* [Signal Tower](https://thenounproject.com/term/signal-tower/1547758/) By Nociconist
|
||||
* [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
|
||||
* [Signal Tower](https://thenounproject.com/term/signal-tower/1547758/) By Nociconist for Broadcast Tower
|
||||
* [Eiffel Tower](https://thenounproject.com/term/eiffel-tower/1907757/) By Felipe Alvarado
|
||||
* [Microscope](https://thenounproject.com/term/microscope/1452362/) By Arafat Uddin
|
||||
* [Chemistry](https://thenounproject.com/term/chemistry/175847/) By Creative Stall
|
||||
* [Solar panel](https://thenounproject.com/term/solar-panel/154447/) By Andrew J. Young
|
||||
* [Cathedral](https://thenounproject.com/term/cathedral/1325415/) By Dairy Free Design
|
||||
* [Bazaar](https://thenounproject.com/term/bazaar/902288/) By Tokka Elkholy
|
||||
* [Christ the redeemer](https://thenounproject.com/term/christ-the-redeemer/56112/) By Stefan Spieler for Cristo Redentor
|
||||
|
||||
### Information Era
|
||||
|
||||
* [Chemistry](https://thenounproject.com/term/chemistry/175847/) By Creative Stall for Medical Lab
|
||||
* [Microscope](https://thenounproject.com/term/microscope/1452362/) By Arafat Uddin for Research Lab
|
||||
* [Water dam](https://thenounproject.com/term/water-dam/1002726/) By Symbolon for Hydro Plant
|
||||
* [Solar panel](https://thenounproject.com/term/solar-panel/154447/) By Andrew J. Young for Solar Plant
|
||||
* [Spaceship](https://thenounproject.com/term/spaceship/1444621/) By Dinosoft Labs for Apollo Program
|
||||
* [Build](https://thenounproject.com/term/build/1156478/) By Michael G Brown for Spaceship Factory
|
||||
* [Nuclear Plant](https://thenounproject.com/term/nuclear-plant/1132340/) By Andrejs Kirma
|
||||
|
||||
### Future Era
|
||||
|
||||
* [Missile](https://thenounproject.com/term/missile/799922/) By ProSymbols for SS Booster
|
||||
* [Rocket](https://thenounproject.com/term/rocket/937173/) By BomSymbols for SS Cockpit
|
||||
* [Engine](https://thenounproject.com/term/engine/1877958/) By Andre for SS Engine
|
||||
* [Chamber](https://thenounproject.com/term/chamber/1242689/) By IYIKON for SS Statis Chamber
|
||||
|
||||
## Social Policies
|
||||
|
||||
|
@ -224,7 +245,6 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
|
|||
## Technologies
|
||||
|
||||
### Ancient
|
||||
|
||||
* [Agriculture](https://thenounproject.com/term/agriculture/4221/) By OCHA Visual Information Unit
|
||||
* [Jug](https://thenounproject.com/term/jug/869999/) By Vladimir Belochkin for Pottery
|
||||
* [Archery](https://thenounproject.com/term/archery/213836/) By icon 54
|
||||
|
@ -237,7 +257,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
|
|||
* [Bricks](https://thenounproject.com/term/bricks/1018659/) By Vaibhav Radhakrishnan for Construction
|
||||
* [Mallet](https://thenounproject.com/term/mallet/1306669/) By Ben Avery for Bronze Working
|
||||
|
||||
## Classical
|
||||
### Classical
|
||||
* [Horse Riding](https://thenounproject.com/term/horse-riding/583093/) By Hea Poh Lin
|
||||
* [Abacus](https://thenounproject.com/term/abacus/1943303/) By Yo! Baba for Mathematics
|
||||
* [Arch](https://thenounproject.com/term/arch/1174168/) By Andrejs Kirma for Construction
|
||||
|
@ -246,7 +266,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
|
|||
* [Engineering Blueprint](https://thenounproject.com/term/engineering-blueprint/1588543/) By Sachin Modgekar for Engineering
|
||||
* [Metalworking](https://thenounproject.com/term/metalworking/1561383/) By Symbolon for Iron Working
|
||||
|
||||
## Medieval
|
||||
### Medieval
|
||||
* [Judaism](https://thenounproject.com/term/judaism/324145/) By Ben Davis for Theology
|
||||
* [Institution](https://thenounproject.com/term/institution/260586/) By Luis Prado for Civil Service
|
||||
* [Education](https://thenounproject.com/term/education/1817512/) By Tomas Knopp
|
||||
|
@ -257,7 +277,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
|
|||
* [Lever](https://thenounproject.com/term/lever/4927/) By Jakob Ukrop for Physics
|
||||
* [Sword](https://thenounproject.com/term/sword/1365080/) By Jonathan P Lambert for Steel
|
||||
|
||||
## Renaissance
|
||||
### Renaissance
|
||||
* [Telescope](https://thenounproject.com/term/telescope/1976706/) By ProSymbols for Astronomy
|
||||
* [Sound waves](https://thenounproject.com/term/sound-waves/792661/) By Makarenko Andrey for Acoustics
|
||||
* [Banking](https://thenounproject.com/term/banking/763867/) By Delwar Hossein
|
||||
|
@ -269,7 +289,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
|
|||
* [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
|
||||
|
||||
## Industrial
|
||||
### Industrial
|
||||
* [Science](https://thenounproject.com/term/science/1901524/) By Dinosoft Labs for Scientific Theory
|
||||
* [Factory](https://thenounproject.com/term/factory/26212/) By Lil Squid for Industrialization
|
||||
* [Rifle](https://thenounproject.com/term/rifle/371894/) By Alexander Skowalsky for Rifling
|
||||
|
@ -280,14 +300,14 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
|
|||
* [Turbines](https://thenounproject.com/term/turbine/86212/) By Leonardo Schneider for Steam Power
|
||||
* [Dynamite](https://thenounproject.com/term/dynamite/610652/) By Simon Martin
|
||||
|
||||
## Modern
|
||||
### Modern
|
||||
* [Radio](https://thenounproject.com/term/radio/124575/) By Arthur Shlain
|
||||
* [Piston](https://thenounproject.com/term/piston/1224/) By Proletkult Graphik for Combustion
|
||||
* [Plastic](https://thenounproject.com/term/plastic/478826/) By Yu luck
|
||||
* [Microphone](https://thenounproject.com/term/microphone/470266/) By Viktor Vorobyev for Mass Media
|
||||
* [Flight](https://thenounproject.com/term/flight/1014306/) By Genius Icons
|
||||
|
||||
## Information
|
||||
### Information
|
||||
* [Pill](https://thenounproject.com/term/pill/780458/) By Alex Arseneau for Pharmaceuticals
|
||||
* [Computer](https://thenounproject.com/term/computer/1967529/) By Shastry
|
||||
* [Nuclear Reactor](https://thenounproject.com/term/nuclear-reactor/426463/) By Jeremie Sommet for Nuclear Fission
|
||||
|
@ -295,7 +315,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
|
|||
* [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
|
||||
|
||||
## Future
|
||||
### Future
|
||||
* [Nanoparticles](https://thenounproject.com/term/nanoparticles/822286/) By Gyan Lakhwani for Nanotechnology
|
||||
* [Satellite](https://thenounproject.com/term/satellite/1466641/) By Ben Davis for Satellites
|
||||
* [Atom](https://thenounproject.com/term/atom/1586852/) By Kelsey Armstrong for Particle Physics
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[
|
||||
|
||||
// Ancient Era
|
||||
{
|
||||
name:"Palace",
|
||||
baseDescription: "Indicates that this city is the capital",
|
||||
|
@ -100,52 +100,9 @@
|
|||
maintenance:1,
|
||||
requiredTech:"Bronze Working"
|
||||
},
|
||||
{
|
||||
name:"Temple",
|
||||
culture:3,
|
||||
specialistSlots:{culture:1},
|
||||
requiredBuilding:"Monument",
|
||||
maintenance:2,
|
||||
hurryCostModifier:25,
|
||||
requiredTech:"Philosophy"
|
||||
},
|
||||
{
|
||||
name:"Burial Tomb",
|
||||
replaces:"Temple",
|
||||
uniqueTo:"Egypt",
|
||||
culture:3,
|
||||
happiness:1,
|
||||
specialistSlots:{culture:1},
|
||||
requiredBuilding:"Monument",
|
||||
hurryCostModifier:25,
|
||||
requiredTech:"Philosophy"
|
||||
},
|
||||
{
|
||||
name:"The Oracle",
|
||||
baseDescription: "Provides a free social policy",
|
||||
culture:3,
|
||||
greatPersonPoints:{science:1},
|
||||
isWonder:true,
|
||||
uniques:["Free Social Policy"],
|
||||
requiredTech:"Philosophy"
|
||||
},
|
||||
{
|
||||
name:"National College",
|
||||
science:3,
|
||||
culture:1,
|
||||
isWonder:true,
|
||||
percentStatBonus:{science:50},
|
||||
requiredBuildingInAllCities:"Library",
|
||||
requiredTech:"Civil Service"
|
||||
},
|
||||
{
|
||||
name:"Chichen Itza",
|
||||
culture:1,
|
||||
greatPersonPoints:{production:1},
|
||||
isWonder:true,
|
||||
uniques:["Golden Age length increases +50%"],
|
||||
requiredTech:"Civil Service"
|
||||
},
|
||||
|
||||
// Classical Era
|
||||
|
||||
{
|
||||
name:"Stable",
|
||||
maintenance:1,
|
||||
|
@ -177,6 +134,35 @@
|
|||
hurryCostModifier:25,
|
||||
requiredTech:"Construction"
|
||||
},
|
||||
{
|
||||
name:"Temple",
|
||||
culture:3,
|
||||
specialistSlots:{culture:1},
|
||||
requiredBuilding:"Monument",
|
||||
maintenance:2,
|
||||
hurryCostModifier:25,
|
||||
requiredTech:"Philosophy"
|
||||
},
|
||||
{
|
||||
name:"Burial Tomb",
|
||||
replaces:"Temple",
|
||||
uniqueTo:"Egypt",
|
||||
culture:3,
|
||||
happiness:1,
|
||||
specialistSlots:{culture:1},
|
||||
requiredBuilding:"Monument",
|
||||
hurryCostModifier:25,
|
||||
requiredTech:"Philosophy"
|
||||
},
|
||||
{
|
||||
name:"The Oracle",
|
||||
baseDescription: "Provides a free social policy",
|
||||
culture:3,
|
||||
greatPersonPoints:{science:1},
|
||||
isWonder:true,
|
||||
uniques:["Free Social Policy"],
|
||||
requiredTech:"Philosophy"
|
||||
},
|
||||
{
|
||||
name:"Market",
|
||||
gold:2,
|
||||
|
@ -196,6 +182,24 @@
|
|||
uniques:["Provides 1 extra copy of each improved luxury resource near this City","+2 Gold for each source of Oil and oasis"],
|
||||
requiredTech:"Currency"
|
||||
},
|
||||
{
|
||||
name:"Mint",
|
||||
maintenance:0,
|
||||
requiredNearbyImprovedResources:["Gold","Silver"],
|
||||
resourceBonusStats:{gold:2},
|
||||
hurryCostModifier:25,
|
||||
requiredTech:"Currency"
|
||||
},
|
||||
{
|
||||
name:"Aqueduct",
|
||||
maintenance:1,
|
||||
hurryCostModifier:25,
|
||||
uniques:["40% of food is carried over after a new citizen is born"]
|
||||
requiredTech:"Engineering"
|
||||
},
|
||||
|
||||
// Medieval Era
|
||||
|
||||
{
|
||||
name:"Monastery",
|
||||
maintenance:0,
|
||||
|
@ -204,14 +208,6 @@
|
|||
hurryCostModifier:25,
|
||||
requiredTech:"Theology"
|
||||
},
|
||||
{
|
||||
name:"Notre Dame",
|
||||
culture:1,
|
||||
happiness:10,
|
||||
greatPersonPoints:{gold:1},
|
||||
isWonder:true,
|
||||
requiredTech:"Physics"
|
||||
},
|
||||
{
|
||||
name:"Hagia Sophia",
|
||||
culture:1,
|
||||
|
@ -221,12 +217,21 @@
|
|||
requiredTech:"Theology"
|
||||
},
|
||||
{
|
||||
name:"Mint",
|
||||
maintenance:0,
|
||||
requiredNearbyImprovedResources:["Gold","Silver"],
|
||||
resourceBonusStats:{gold:2},
|
||||
hurryCostModifier:25,
|
||||
requiredTech:"Currency"
|
||||
name:"National College",
|
||||
science:3,
|
||||
culture:1,
|
||||
isWonder:true,
|
||||
percentStatBonus:{science:50},
|
||||
requiredBuildingInAllCities:"Library",
|
||||
requiredTech:"Civil Service"
|
||||
},
|
||||
{
|
||||
name:"Chichen Itza",
|
||||
culture:1,
|
||||
greatPersonPoints:{production:1},
|
||||
isWonder:true,
|
||||
uniques:["Golden Age length increases +50%"],
|
||||
requiredTech:"Civil Service"
|
||||
},
|
||||
{
|
||||
name:"Machu Pichu",
|
||||
|
@ -237,13 +242,6 @@
|
|||
uniques:["Gold from all trade routes +25%"],
|
||||
requiredTech:"Guilds"
|
||||
},
|
||||
{
|
||||
name:"Aqueduct",
|
||||
maintenance:1,
|
||||
hurryCostModifier:25,
|
||||
uniques:["40% of food is carried over after a new citizen is born"]
|
||||
requiredTech:"Engineering"
|
||||
},
|
||||
{
|
||||
name:"Workshop",
|
||||
maintenance:2,
|
||||
|
@ -297,14 +295,6 @@
|
|||
uniques:["Cost of acquiring new tiles reduced by 25%"],
|
||||
requiredTech:"Chivalry"
|
||||
},
|
||||
{
|
||||
name:"Porcelain Tower",
|
||||
culture:1,
|
||||
greatPersonPoints:{science:2},
|
||||
isWonder:true,
|
||||
uniques:["Free great scientist appears","Production to science conversion in cities increased by 33%"],
|
||||
requiredTech:"Architecture"
|
||||
},
|
||||
{
|
||||
name:"Ironworks",
|
||||
production:8,
|
||||
|
@ -313,6 +303,14 @@
|
|||
requiredBuildingInAllCities:"Workshop",
|
||||
requiredTech:"Machinery"
|
||||
},
|
||||
{
|
||||
name:"Notre Dame",
|
||||
culture:1,
|
||||
happiness:10,
|
||||
greatPersonPoints:{gold:1},
|
||||
isWonder:true,
|
||||
requiredTech:"Physics"
|
||||
},
|
||||
{
|
||||
name:"Armory",
|
||||
xpForNewUnits:15,
|
||||
|
@ -321,6 +319,9 @@
|
|||
requiredBuilding:"Barracks",
|
||||
requiredTech:"Steel"
|
||||
},
|
||||
|
||||
// Renaissance Era
|
||||
|
||||
{
|
||||
name:"Observatory",
|
||||
baseDescription: "City must be bordering a mountain",
|
||||
|
@ -329,7 +330,7 @@
|
|||
percentStatBonus:{science:50},
|
||||
requiredBuilding:"Library",
|
||||
requiredTech:"Astronomy"
|
||||
},
|
||||
},
|
||||
{
|
||||
name:"Opera House",
|
||||
culture:4,
|
||||
|
@ -370,24 +371,6 @@
|
|||
requiredBuilding:"Colloseum",
|
||||
requiredTech:"Printing Press"
|
||||
},
|
||||
{
|
||||
name:"Taj Mahal",
|
||||
baseDescription: "Empire enters a golden age",
|
||||
culture:1,
|
||||
happiness:4,
|
||||
isWonder:true,
|
||||
uniques:["Empire enters golden age"],
|
||||
requiredTech:"Architecture"
|
||||
},
|
||||
{
|
||||
name:"Windmill",
|
||||
production:2,
|
||||
specialistSlots:{production:1},
|
||||
hurryCostModifier:25,
|
||||
maintenance:2,
|
||||
percentStatBonus:{production:10},
|
||||
requiredTech:"Economics"
|
||||
},
|
||||
{
|
||||
name:"Museum",
|
||||
culture:5,
|
||||
|
@ -404,7 +387,7 @@
|
|||
isWonder:true,
|
||||
requiredBuildingInAllCities:"Opera House",
|
||||
requiredTech:"Archaeology"
|
||||
},
|
||||
},
|
||||
{
|
||||
name:"The Louvre",
|
||||
baseDescription: "A Free Great Artist appears near the city",
|
||||
|
@ -414,6 +397,35 @@
|
|||
uniques:["Free Great Artist Appears"],
|
||||
requiredTech:"Archaeology"
|
||||
},
|
||||
{
|
||||
name:"Taj Mahal",
|
||||
baseDescription: "Empire enters a golden age",
|
||||
culture:1,
|
||||
happiness:4,
|
||||
isWonder:true,
|
||||
uniques:["Empire enters golden age"],
|
||||
requiredTech:"Architecture"
|
||||
},
|
||||
{
|
||||
name:"Porcelain Tower",
|
||||
culture:1,
|
||||
greatPersonPoints:{science:2},
|
||||
isWonder:true,
|
||||
uniques:["Free great scientist appears","Production to science conversion in cities increased by 33%"],
|
||||
requiredTech:"Architecture"
|
||||
},
|
||||
{
|
||||
name:"Windmill",
|
||||
production:2,
|
||||
specialistSlots:{production:1},
|
||||
hurryCostModifier:25,
|
||||
maintenance:2,
|
||||
percentStatBonus:{production:10},
|
||||
requiredTech:"Economics"
|
||||
},
|
||||
|
||||
// Industrial Era
|
||||
|
||||
{
|
||||
name:"Public School",
|
||||
science:3,
|
||||
|
@ -424,14 +436,6 @@
|
|||
uniques:["+1 Science Per 2 Population"],
|
||||
requiredTech:"Scientific Theory"
|
||||
},
|
||||
{
|
||||
name:"Hospital",
|
||||
food:5,
|
||||
requiredBuilding:"Aqueduct",
|
||||
maintenance:2,
|
||||
hurryCostModifier:0,
|
||||
requiredTech:"Biology"
|
||||
},
|
||||
{
|
||||
name:"Factory",
|
||||
production:4,
|
||||
|
@ -443,6 +447,22 @@
|
|||
requiredResource:"Coal",
|
||||
requiredTech:"Industrialization"
|
||||
},
|
||||
{
|
||||
name:"Military Academy",
|
||||
xpForNewUnits:15,
|
||||
hurryCostModifier:25,
|
||||
maintenance:1,
|
||||
requiredBuilding:"Armory",
|
||||
requiredTech:"Military Science"
|
||||
},
|
||||
{
|
||||
name:"Hospital",
|
||||
food:5,
|
||||
requiredBuilding:"Aqueduct",
|
||||
maintenance:2,
|
||||
hurryCostModifier:0,
|
||||
requiredTech:"Biology"
|
||||
},
|
||||
{
|
||||
name:"Stock Exchange",
|
||||
gold:3,
|
||||
|
@ -452,21 +472,9 @@
|
|||
requiredBuilding:"Bank",
|
||||
requiredTech:"Electricity"
|
||||
},
|
||||
{
|
||||
name:"Cristo Redentor",
|
||||
culture:5,
|
||||
isWonder:true,
|
||||
uniques:["Culture cost of adopting new Policies reduced by 10%"],
|
||||
requiredTech:"Flight"
|
||||
},
|
||||
{
|
||||
name:"Military Academy",
|
||||
xpForNewUnits:15,
|
||||
hurryCostModifier:25,
|
||||
maintenance:1,
|
||||
requiredBuilding:"Armory",
|
||||
requiredTech:"Military Science"
|
||||
},
|
||||
|
||||
// Modern Era
|
||||
|
||||
{
|
||||
name:"Broadcast Tower",
|
||||
culture:3,
|
||||
|
@ -484,13 +492,6 @@
|
|||
uniques:["Provides 1 happiness per social policy"],
|
||||
requiredTech:"Radio"
|
||||
},
|
||||
{
|
||||
name:"Medical Lab",
|
||||
baseDescription: "25% of food carried over after a new citizen is born",
|
||||
requiredBuilding:"Hospital",
|
||||
maintenance:3,
|
||||
requiredTech:"Pharmaceuticals"
|
||||
},
|
||||
{
|
||||
name:"Research Lab",
|
||||
science:4,
|
||||
|
@ -515,22 +516,21 @@
|
|||
requiredTech:"Mass Media"
|
||||
},
|
||||
{
|
||||
name:"Solar Plant",
|
||||
baseDescription: "Can only be built in cities next to deserts; cannot be built in a city with a Nuclear Plant",
|
||||
production:5,
|
||||
percentStatBonus:{production:15},
|
||||
requiredBuilding:"Factory",
|
||||
maintenance:3,
|
||||
cannotBeBuiltWith:"Nuclear Plant",
|
||||
requiredTech:"Ecology",
|
||||
uniques:["Must be next to desert"]
|
||||
},
|
||||
{
|
||||
name:"Apollo Program",
|
||||
cost:1500,
|
||||
name:"Cristo Redentor",
|
||||
culture:5,
|
||||
isWonder:true,
|
||||
uniques:["Enables construction of Spaceship parts"],
|
||||
requiredTech:"Rocketry"
|
||||
uniques:["Culture cost of adopting new Policies reduced by 10%"],
|
||||
requiredTech:"Flight"
|
||||
},
|
||||
|
||||
// Information Era
|
||||
|
||||
{
|
||||
name:"Medical Lab",
|
||||
baseDescription: "25% of food carried over after a new citizen is born",
|
||||
requiredBuilding:"Hospital",
|
||||
maintenance:3,
|
||||
requiredTech:"Pharmaceuticals"
|
||||
},
|
||||
{
|
||||
name:"Nuclear Plant",
|
||||
|
@ -542,6 +542,17 @@
|
|||
requiredResource:"Uranium",
|
||||
requiredTech:"Nuclear Fission"
|
||||
},
|
||||
{
|
||||
name:"Solar Plant",
|
||||
baseDescription: "Can only be built in cities next to deserts; cannot be built in a city with a Nuclear Plant",
|
||||
production:5,
|
||||
percentStatBonus:{production:15},
|
||||
requiredBuilding:"Factory",
|
||||
maintenance:3,
|
||||
cannotBeBuiltWith:"Nuclear Plant",
|
||||
requiredTech:"Ecology",
|
||||
uniques:["Must be next to desert"]
|
||||
},
|
||||
{
|
||||
name:"Spaceship Factory",
|
||||
production:3,
|
||||
|
@ -556,6 +567,16 @@
|
|||
requiredTech:"Robotics",
|
||||
uniques:["Spaceship part"]
|
||||
},
|
||||
{
|
||||
name:"Apollo Program",
|
||||
cost:1500,
|
||||
isWonder:true,
|
||||
uniques:["Enables construction of Spaceship parts"],
|
||||
requiredTech:"Rocketry"
|
||||
},
|
||||
|
||||
// Future Era
|
||||
|
||||
{
|
||||
name:"SS Cockpit",
|
||||
requiredResource:"Aluminum",
|
||||
|
|
|
@ -452,7 +452,7 @@
|
|||
row:6,
|
||||
prerequisites:["Flight","Computers"]
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
columnNumber: 15,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.unciv.logic
|
||||
|
||||
import com.badlogic.gdx.graphics.Color
|
||||
import com.unciv.logic.automation.Automation
|
||||
import com.unciv.logic.automation.NextTurnAutomation
|
||||
import com.unciv.logic.civilization.CivilizationInfo
|
||||
import com.unciv.logic.civilization.Notification
|
||||
import com.unciv.logic.map.TileInfo
|
||||
|
@ -48,7 +48,7 @@ class GameInfo {
|
|||
|
||||
for (civInfo in civilizations.filterNot { it==player || (it.isDefeated() && !it.isBarbarianCivilization()) }){
|
||||
civInfo.startTurn()
|
||||
Automation().automateCivMoves(civInfo)
|
||||
NextTurnAutomation().automateCivMoves(civInfo)
|
||||
}
|
||||
|
||||
if(turns%10 == 0){ // every 10 turns add a barbarian in a random place
|
||||
|
|
|
@ -5,21 +5,15 @@ import com.unciv.logic.battle.CityCombatant
|
|||
import com.unciv.logic.city.CityConstructions
|
||||
import com.unciv.logic.city.CityInfo
|
||||
import com.unciv.logic.civilization.CivilizationInfo
|
||||
import com.unciv.logic.map.MapUnit
|
||||
import com.unciv.logic.map.TileInfo
|
||||
import com.unciv.logic.trade.TradeLogic
|
||||
import com.unciv.logic.trade.TradeType
|
||||
import com.unciv.models.gamebasics.GameBasics
|
||||
import com.unciv.models.gamebasics.unit.BaseUnit
|
||||
import com.unciv.models.gamebasics.unit.UnitType
|
||||
import com.unciv.ui.utils.getRandom
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
import kotlin.math.sqrt
|
||||
|
||||
class Automation {
|
||||
|
||||
|
||||
internal fun rankTile(tile: TileInfo, civInfo: CivilizationInfo): Float {
|
||||
val stats = tile.getTileStats(null, civInfo)
|
||||
var rank = 0.0f
|
||||
|
@ -35,113 +29,7 @@ class Automation {
|
|||
return rank
|
||||
}
|
||||
|
||||
fun automateCivMoves(civInfo: CivilizationInfo) {
|
||||
if (civInfo.tech.techsToResearch.isEmpty()) {
|
||||
val researchableTechs = GameBasics.Technologies.values.filter { civInfo.tech.canBeResearched(it.name) }
|
||||
val techToResearch = researchableTechs.groupBy { it.cost }.minBy { it.key }!!.value.getRandom()
|
||||
civInfo.tech.techsResearched.add(techToResearch.name)
|
||||
}
|
||||
|
||||
while(civInfo.policies.canAdoptPolicy()){
|
||||
val adoptablePolicies = GameBasics.PolicyBranches.values.flatMap { it.policies.union(listOf(it))}
|
||||
.filter { civInfo.policies.isAdoptable(it) }
|
||||
val policyToAdopt = adoptablePolicies.getRandom()
|
||||
civInfo.policies.adopt(policyToAdopt)
|
||||
}
|
||||
|
||||
// trade luxuries for luxuries if you can
|
||||
for(otherCiv in civInfo.diplomacy.values.map { it.otherCiv() }.filterNot { it.isPlayerCivilization() }){
|
||||
val tradeLogic = TradeLogic(civInfo, otherCiv)
|
||||
val ourTradableLuxuryResources = tradeLogic.ourAvailableOffers
|
||||
.filter { it.type==TradeType.Luxury_Resource && it.amount>1 }
|
||||
val theirTradableLuxuryResources = tradeLogic.theirAvailableOffers
|
||||
.filter { it.type==TradeType.Luxury_Resource && it.amount>1 }
|
||||
val weHaveTheyDont = ourTradableLuxuryResources
|
||||
.filter { resource -> tradeLogic.theirAvailableOffers
|
||||
.none { it.name==resource.name && it.type==TradeType.Luxury_Resource } }
|
||||
val theyHaveWeDont = theirTradableLuxuryResources
|
||||
.filter { resource -> tradeLogic.ourAvailableOffers
|
||||
.none { it.name==resource.name && it.type==TradeType.Luxury_Resource } }
|
||||
val numberOfTrades = min(weHaveTheyDont.size,theyHaveWeDont.size)
|
||||
if(numberOfTrades>0){
|
||||
tradeLogic.currentTrade.ourOffers.addAll(weHaveTheyDont.take(numberOfTrades).map { it.copy(amount = 1) })
|
||||
tradeLogic.currentTrade.theirOffers.addAll(theyHaveWeDont.take(numberOfTrades).map { it.copy(amount = 1) })
|
||||
tradeLogic.acceptTrade()
|
||||
}
|
||||
}
|
||||
|
||||
fun getMinDistanceBetweenCities(civ1:CivilizationInfo,civ2:CivilizationInfo): Int {
|
||||
return civ1.cities.map { city -> civ2.cities.map { it.getCenterTile().arialDistanceTo(city.getCenterTile()) }.min()!! }.min()!!
|
||||
}
|
||||
|
||||
// Declare war?
|
||||
if(civInfo.cities.isNotEmpty() && civInfo.diplomacy.isNotEmpty()
|
||||
&& !civInfo.isAtWar()
|
||||
&& civInfo.getCivUnits().filter { !it.baseUnit.unitType.isCivilian() }.size > civInfo.cities.size*2) {
|
||||
|
||||
val enemyCivsByDistanceToOurs = civInfo.diplomacy.values.map { it.otherCiv() }
|
||||
.filterNot { it == civInfo || it.cities.isEmpty() || !civInfo.diplomacy[it.civName]!!.canDeclareWar() }
|
||||
.groupBy { getMinDistanceBetweenCities(civInfo,it) }
|
||||
.toSortedMap()
|
||||
val ourCombatStrength = evaluteCombatStrength(civInfo)
|
||||
for (group in enemyCivsByDistanceToOurs){
|
||||
if(group.key>7) break
|
||||
for(otherCiv in group.value){
|
||||
if(evaluteCombatStrength(otherCiv)*2<ourCombatStrength){
|
||||
civInfo.diplomacy[otherCiv.civName]!!.declareWar()
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
val rangedUnits = mutableListOf<MapUnit>()
|
||||
val meleeUnits = mutableListOf<MapUnit>()
|
||||
val civilianUnits = mutableListOf<MapUnit>()
|
||||
|
||||
for (unit in civInfo.getCivUnits()) {
|
||||
if(unit.promotions.canBePromoted()){
|
||||
val availablePromotions = unit.promotions.getAvailablePromotions()
|
||||
if(availablePromotions.isNotEmpty())
|
||||
unit.promotions.addPromotion(availablePromotions.getRandom().name)
|
||||
}
|
||||
|
||||
val unitType = unit.baseUnit().unitType
|
||||
if(unitType.isRanged()) rangedUnits.add(unit)
|
||||
else if(unitType.isMelee()) meleeUnits.add(unit)
|
||||
else civilianUnits.add(unit)
|
||||
}
|
||||
|
||||
for (unit in civilianUnits) UnitAutomation().automateUnitMoves(unit) // They move first so that combat units can accompany a settler
|
||||
for (unit in rangedUnits) UnitAutomation().automateUnitMoves(unit)
|
||||
for (unit in meleeUnits) UnitAutomation().automateUnitMoves(unit)
|
||||
|
||||
|
||||
for (city in civInfo.cities) {
|
||||
// reassign everyone from scratch
|
||||
city.workedTiles.clear()
|
||||
(0..city.population.population).forEach { city.population.autoAssignPopulation()}
|
||||
chooseNextConstruction(city.cityConstructions)
|
||||
if (city.health < city.getMaxHealth())
|
||||
trainCombatUnit(city) // override previous decision if city is under attack
|
||||
}
|
||||
|
||||
|
||||
// train settler?
|
||||
if (civInfo.cities.any()
|
||||
&& civInfo.happiness > civInfo.cities.size +5
|
||||
&& civInfo.getCivUnits().none { it.name == "Settler" }
|
||||
&& civInfo.cities.none { it.cityConstructions.currentConstruction == "Settler" }) {
|
||||
|
||||
val bestCity = civInfo.cities.maxBy { it.cityStats.currentCityStats.production }!!
|
||||
if(bestCity.cityConstructions.builtBuildings.size > 1) // 2 buildings or more, otherwisse focus on self first
|
||||
bestCity.cityConstructions.currentConstruction = "Settler"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun trainCombatUnit(city: CityInfo) {
|
||||
fun trainCombatUnit(city: CityInfo) {
|
||||
val combatUnits = city.cityConstructions.getConstructableUnits().filter { !it.unitType.isCivilian() }
|
||||
val chosenUnit: BaseUnit
|
||||
if(!city.civInfo.isAtWar() && city.civInfo.cities.any { it.getCenterTile().militaryUnit==null}
|
||||
|
|
137
core/src/com/unciv/logic/automation/NextTurnAutomation.kt
Normal file
137
core/src/com/unciv/logic/automation/NextTurnAutomation.kt
Normal file
|
@ -0,0 +1,137 @@
|
|||
package com.unciv.logic.automation
|
||||
|
||||
import com.unciv.logic.civilization.CivilizationInfo
|
||||
import com.unciv.logic.map.MapUnit
|
||||
import com.unciv.logic.trade.TradeLogic
|
||||
import com.unciv.logic.trade.TradeType
|
||||
import com.unciv.models.gamebasics.GameBasics
|
||||
import com.unciv.ui.utils.getRandom
|
||||
import kotlin.math.min
|
||||
|
||||
class NextTurnAutomation(){
|
||||
|
||||
fun automateCivMoves(civInfo: CivilizationInfo) {
|
||||
chooseTechToResearch(civInfo)
|
||||
adoptPolicy(civInfo)
|
||||
exchangeLuxuries(civInfo)
|
||||
declareWar(civInfo)
|
||||
automateUnits(civInfo)
|
||||
reassignWorkedTiles(civInfo)
|
||||
trainSettler(civInfo)
|
||||
}
|
||||
|
||||
private fun chooseTechToResearch(civInfo: CivilizationInfo) {
|
||||
if (civInfo.tech.techsToResearch.isEmpty()) {
|
||||
val researchableTechs = GameBasics.Technologies.values.filter { civInfo.tech.canBeResearched(it.name) }
|
||||
val techToResearch = researchableTechs.groupBy { it.cost }.minBy { it.key }!!.value.getRandom()
|
||||
civInfo.tech.techsResearched.add(techToResearch.name)
|
||||
}
|
||||
}
|
||||
|
||||
private fun adoptPolicy(civInfo: CivilizationInfo) {
|
||||
while (civInfo.policies.canAdoptPolicy()) {
|
||||
val adoptablePolicies = GameBasics.PolicyBranches.values.flatMap { it.policies.union(listOf(it)) }
|
||||
.filter { civInfo.policies.isAdoptable(it) }
|
||||
val policyToAdopt = adoptablePolicies.getRandom()
|
||||
civInfo.policies.adopt(policyToAdopt)
|
||||
}
|
||||
}
|
||||
|
||||
private fun exchangeLuxuries(civInfo: CivilizationInfo) {
|
||||
for (otherCiv in civInfo.diplomacy.values.map { it.otherCiv() }.filterNot { it.isPlayerCivilization() }) {
|
||||
val tradeLogic = TradeLogic(civInfo, otherCiv)
|
||||
val ourTradableLuxuryResources = tradeLogic.ourAvailableOffers
|
||||
.filter { it.type == TradeType.Luxury_Resource && it.amount > 1 }
|
||||
val theirTradableLuxuryResources = tradeLogic.theirAvailableOffers
|
||||
.filter { it.type == TradeType.Luxury_Resource && it.amount > 1 }
|
||||
val weHaveTheyDont = ourTradableLuxuryResources
|
||||
.filter { resource ->
|
||||
tradeLogic.theirAvailableOffers
|
||||
.none { it.name == resource.name && it.type == TradeType.Luxury_Resource }
|
||||
}
|
||||
val theyHaveWeDont = theirTradableLuxuryResources
|
||||
.filter { resource ->
|
||||
tradeLogic.ourAvailableOffers
|
||||
.none { it.name == resource.name && it.type == TradeType.Luxury_Resource }
|
||||
}
|
||||
val numberOfTrades = min(weHaveTheyDont.size, theyHaveWeDont.size)
|
||||
if (numberOfTrades > 0) {
|
||||
tradeLogic.currentTrade.ourOffers.addAll(weHaveTheyDont.take(numberOfTrades).map { it.copy(amount = 1) })
|
||||
tradeLogic.currentTrade.theirOffers.addAll(theyHaveWeDont.take(numberOfTrades).map { it.copy(amount = 1) })
|
||||
tradeLogic.acceptTrade()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getMinDistanceBetweenCities(civ1: CivilizationInfo, civ2: CivilizationInfo): Int {
|
||||
return civ1.cities.map { city -> civ2.cities.map { it.getCenterTile().arialDistanceTo(city.getCenterTile()) }.min()!! }.min()!!
|
||||
}
|
||||
|
||||
private fun declareWar(civInfo: CivilizationInfo) {
|
||||
if (civInfo.cities.isNotEmpty() && civInfo.diplomacy.isNotEmpty()
|
||||
&& !civInfo.isAtWar()
|
||||
&& civInfo.getCivUnits().filter { !it.baseUnit.unitType.isCivilian() }.size > civInfo.cities.size * 2) {
|
||||
|
||||
val enemyCivsByDistanceToOurs = civInfo.diplomacy.values.map { it.otherCiv() }
|
||||
.filterNot { it == civInfo || it.cities.isEmpty() || !civInfo.diplomacy[it.civName]!!.canDeclareWar() }
|
||||
.groupBy { getMinDistanceBetweenCities(civInfo, it) }
|
||||
.toSortedMap()
|
||||
val ourCombatStrength = Automation().evaluteCombatStrength(civInfo)
|
||||
for (group in enemyCivsByDistanceToOurs) {
|
||||
if (group.key > 7) break
|
||||
for (otherCiv in group.value) {
|
||||
if (Automation().evaluteCombatStrength(otherCiv) * 2 < ourCombatStrength) {
|
||||
civInfo.diplomacy[otherCiv.civName]!!.declareWar()
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun automateUnits(civInfo: CivilizationInfo) {
|
||||
val rangedUnits = mutableListOf<MapUnit>()
|
||||
val meleeUnits = mutableListOf<MapUnit>()
|
||||
val civilianUnits = mutableListOf<MapUnit>()
|
||||
|
||||
for (unit in civInfo.getCivUnits()) {
|
||||
if (unit.promotions.canBePromoted()) {
|
||||
val availablePromotions = unit.promotions.getAvailablePromotions()
|
||||
if (availablePromotions.isNotEmpty())
|
||||
unit.promotions.addPromotion(availablePromotions.getRandom().name)
|
||||
}
|
||||
|
||||
val unitType = unit.baseUnit().unitType
|
||||
if (unitType.isRanged()) rangedUnits.add(unit)
|
||||
else if (unitType.isMelee()) meleeUnits.add(unit)
|
||||
else civilianUnits.add(unit)
|
||||
}
|
||||
|
||||
for (unit in civilianUnits) UnitAutomation().automateUnitMoves(unit) // They move first so that combat units can accompany a settler
|
||||
for (unit in rangedUnits) UnitAutomation().automateUnitMoves(unit)
|
||||
for (unit in meleeUnits) UnitAutomation().automateUnitMoves(unit)
|
||||
}
|
||||
|
||||
private fun reassignWorkedTiles(civInfo: CivilizationInfo) {
|
||||
for (city in civInfo.cities) {
|
||||
city.workedTiles.clear()
|
||||
(0..city.population.population).forEach { city.population.autoAssignPopulation() }
|
||||
Automation().chooseNextConstruction(city.cityConstructions)
|
||||
if (city.health < city.getMaxHealth())
|
||||
Automation().trainCombatUnit(city) // override previous decision if city is under attack
|
||||
}
|
||||
}
|
||||
|
||||
private fun trainSettler(civInfo: CivilizationInfo) {
|
||||
if (civInfo.cities.any()
|
||||
&& civInfo.happiness > civInfo.cities.size + 5
|
||||
&& civInfo.getCivUnits().none { it.name == "Settler" }
|
||||
&& civInfo.cities.none { it.cityConstructions.currentConstruction == "Settler" }) {
|
||||
|
||||
val bestCity = civInfo.cities.maxBy { it.cityStats.currentCityStats.production }!!
|
||||
if (bestCity.cityConstructions.builtBuildings.size > 1) // 2 buildings or more, otherwisse focus on self first
|
||||
bestCity.cityConstructions.currentConstruction = "Settler"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue