Organized building order and icon credits

This commit is contained in:
Yair Morgenstern 2018-10-13 21:53:17 +03:00
parent b528ef38e9
commit b4c17f7664
6 changed files with 400 additions and 334 deletions

View file

@ -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

View file

@ -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",

View file

@ -452,7 +452,7 @@
row:6,
prerequisites:["Flight","Computers"]
}
]
]
},
{
columnNumber: 15,

View file

@ -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

View file

@ -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}

View 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"
}
}
}