mirror of
https://github.com/yairm210/Unciv.git
synced 2025-01-10 07:16:54 +07:00
1 line
478 KiB
JSON
1 line
478 KiB
JSON
{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Welcome to MkDocs For full documentation visit mkdocs.org . Commands mkdocs new [dir-name] - Create a new project. mkdocs serve - Start the live-reloading docs server. mkdocs build - Build the documentation site. mkdocs -h - Print help message and exit. Project layout mkdocs.yml # The configuration file. docs/ index.md # The documentation homepage. ... # Other markdown pages, images and other files.","title":"Welcome to MkDocs"},{"location":"#welcome-to-mkdocs","text":"For full documentation visit mkdocs.org .","title":"Welcome to MkDocs"},{"location":"#commands","text":"mkdocs new [dir-name] - Create a new project. mkdocs serve - Start the live-reloading docs server. mkdocs build - Build the documentation site. mkdocs -h - Print help message and exit.","title":"Commands"},{"location":"#project-layout","text":"mkdocs.yml # The configuration file. docs/ index.md # The documentation homepage. ... # Other markdown pages, images and other files.","title":"Project layout"},{"location":"Credits/","text":"Icon Credits Flag Icons made by Freepik from www.flaticon.com and licensed by Creative Commons 3.0 New Unciv logo made by u-ndefined on Discord Base tile icons for the \"Fantasy Hex\" tileset belong to CuddlyClover @ https://cuddlyclover.itch.io/fantasy-hex-tiles with a few additions by me Trees for the jungle tiles in the \"Fantasy Hex\" are extracted from Desert Strike for the Amiga Almost all the improvements and units made by The Bucketeer on Discord Tile icons for the \"ThorfMaps tileset belong to Thorfinn Tait and are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Based on work at www.thorfmaps.com. Unless otherwise specified, all the following are from the Noun Project licenced under either Creative Commons or Public Domain Stat icons Gear by Alex Bickov for Production Apple by Pedro Gon\u00e7alves for Food gold by Eliricon for Gold Beaker by Delwar Hossain for Science Music by Naomi Atkinson for Culture Smiley by Alexander Skowalsky for Happiness Dove by Sandra for Faith User by St\u00e9phanie Rusch for Population Unhappy By Daryl Vandermont for Malcontent Units Ancient Era Hammer By Hea Poh Lin for Worker Flag By Melvin Poppelaars for Settler Eagle By anggun for Scout Axe By ehab.abdullah for Warrior Haka By Josh for Maori Warrior Spiked Club by Hamish Bow And Arrow By Viktor Ostrovsky for Archer Bow By Arthur Shlain for Bowman Javelin By WEBTECHOPS LLP for Atlatlist arrows by Ayub Irawan for Skirmisher Fishing Vessel By Luis Prado for Work Boats Greek Trireme By Zachary McCune for Trireme Greek Trireme By Zachary McCune for Quinquereme. The original work has been modified. dragon by BGBOXXX Design for Dromon Viking Boat by Eucalyp for Galley Chariot By Andrew Doane for Chariot Archer Elephant By Luis Prado for War Elephant Centaur by Michael Wohlwend for Horse Archer Spear By Stephen Copinger for Spearman Greek shield for Hoplite ram by Becris for Battering Ram Spear by lastspark for Marauder Spiked club for Brute Hoplite by Eucalyp for Immortal Slingshot by James Keuning for Slinger warrior By DinosoftLab for Pictish Warrior (combined with Shamrock, see Promotions) Classical Era Catapult By Jakub Ukrop Unloaded Crossbow By Hamish as Ballista Bow and arrow By Lars Meiertoberens for Composite Bowman Sword By Guilherme Furtado for Swordsman Mohawk By Dairy Free Design for Mohawk Warrior Roman Helmet By parkjisun for Legion Horse By AFY Studio for Horseman Horse Head By Juan Pablo Bravo for Companion Cavalry Elephant By Angriawan Ditya Zulkarnain for African Forest Elephant. The original work has been modified. Horse By Ranah Pixel Studio for Cataphract Medieval Era Ship By Vanisha for Galleass Crossbow By Creaticca Creative Agency for Crossbowman Longbow By Hamish for Longbowman Trebuchet By Ben Davis Sword By uzeir syarief for Longswordsman Samurai By Chanut is Industries Spear By Alvaro Cabrera for Pikeman Halberd parkjisun for Landsknecht Knight By Tyler Glaude Renaissance Era Portuguese Caravel by Zack McCune for Caravel Cannon By Orin Zuu Musket By Cezary Lopacinski for Musketman Tarbouche By Mohamed Amine for Janissary Black powder musket By Jarem Fyre for Minuteman Rapier By Hamish for Musketeer Ship By Orin Zuu for Frigate Pirate by Berkah Icon for Privateer Pirate by Smalllike for Sea Beggar* Ship By Mungang Kim for Ship of the Line Lance By parkjisun for Lancer Sword By Daniela Baptista for Sipahi Helmet by Robert Bjurshagen for Hakkapeliitta Industrial Era Rifle By Chameleon Design for Rifleman Bayonet By food lover for Carolean soldier by ProSymbols for Mehal Sefari Horse By Bakunetso Kaito for Cavalry horse racing By Sergio Morozov for Cossack Marching Band by Darrin Loeliger, US for Hussar. The original work has been modified. Artillery By Creative Mania Ship By Aisyah for Ironclad Modern Era Submarine By Hea Poh Lin, MY Helmet By Daniel Turner for Great War Infantry Cap By Creative Mania for Foreign Legion xm8 By Xela Ub for Infantry Icon for Carrier made by JackRainy , based on Aircraft Carrier By IcoLabs, BR Battleship By Vitaliy Gorbachev, KZ for Battleship machine-gun By Joana Pereira for Machine Gun artillery by Izwar Muis for Anti-Aircraft Gun Tank By corpus delicti for Landship Warship By zidney for Destroyer Atomic Era Water Gun by ProSymbols for Marine Parachute by Nociconist for Paratrooper Tank By jeff for Tank Tank Manuel Dixken, DE for Panzer Anti-Tank Gun By Tom Fricker atomic bomb by AmruID for Atomic Bomb Military vehicle By Luke Anthony Firth For Rocket Artillery Missile By Eucalyp for Mobile SAM Information Era Submarine by Freepik adapted for Nuclear Submarine APC By Luke Anthony Firth for Mechanized Infantry Battleship by Edi Prastyo for Missile Cruiser Modern Armor By Public Domain Nouns for Modern Armor Nuclear Missile By Lluisa Iborra, ES Robot by Lluisa Iborra, ES for Giant Death Robot Missile By ProSymbols for SS Booster Rocket By BomSymbols for SS Cockpit Engine By Andre for SS Engine Chamber By IYIKON for SS Stasis Chamber All Eras Pallet By James Keuning for Great Artist Gear By Melvin Salas for Great Engineer Beaker By Delwar Hossain for Great Scientist Dove by sandra for Great Prophet General By anbileru adaleru for Great General Religion by Bruno G\u00e4tjens Gonz\u00e1lez adapted for Missionary invisibility cloak by Locad for Inquisitor Resources Saffron By parkjisun for Dye Can By Nick Bluth for Aluminum Coal By Michael Wohlwend Anvil By Jason Dilworth for Iron Deer By Richard Nixon Banana By Adrian Coquet Oil By Tiago Maricate (also as Civilopedia category icon) Statue By Joris Hoogendoorn for Marble Ribbon By Anton for Silk Stone By AFY Studio Goblet By Pedro Santos for Silver Sugar By ahmad Spice By ahmad Radiation symbol By icon 54 for Uranium Wine By Adrien Coquet Wheat By Juraj Sedlak Sheep By Unrecognized Elephant By Kelsey Armstrong for Ivory Cattle By Daniela Baptista Leather By Alen Krummenacher for Furs Gem By Lluisa Iborra Joss Stick By Hea Poh Lin for Incense Pottery By Laymik, UA for Porcelain Jewelry By Shocho, IN Lemons By sachin modgekar, IN for Citrus Pipes By Nibras@design for Copper Crab By YuguDesign Truffle By parkjisun Salt By HAMEL KHALED, DZ Improvements Woodcutting axe By Chanut is Industries for Lumber Mill Monument By Setyo Ari Wibowo for Landmark Farm By Bonnie Beach Bank By Scott Dunlap for Customs House Academy By CJS Factory By RULI for Manufactory Mine By Edward Boatman Corral By Luis Prado for Pasture Plants By hendra sudibyo for Plantation Pickaxe By Creative Stall for Quarry Food stall By I Putu Kharismayadi for Trading post Road By REVA Ruins By Creative Stall for Ancient runs Ruins By Paulo Volkova for City ruins Fishing Net By Made for Fishing Boats Moai By Template Fort By Adrien Coquet Citadel By Adrien Coquet Village by Andrey Vasiliev pumping station by Peter van Driel for Polder Buildings Ancient Era Storehouse By Pedro Santos for Granary Shinto Gate by Alexander Skowalsky for Shrine Pyramid by Oscar Y\u00e1\u00f1ez for Mayan Pyramid Great Wall Of China By Arthur Shlain for Walls Markadan Tower by Vectors Market for Walls of Babylon Block By Monjin Friends for Stone Works korean palace By 1516 for Palace Obelisk By Eliricon for Monument obelisk By IconMark for Stele Cross swords By Creaticca Creative Agency for Barracks Fortress By Creative Stall for Krepost Paper By anam Circus By Ralph Schmitzer Stonehenge By icon 54 Ho Chi Minh mausoleum By Ph\u1ea1m Thanh L\u1ed9c for Mausoleum of Halicarnassus Icon for Statue of Zeus made by JackRainy , based on King By Eucalyp temple By Fabio Meroni for Temple of Artemis Classical Era Lighthouse By Dolly Holmes Lighthouse By Hea Poh Lin for The Great Lighthouse Temple By 1516 Anubis By Carpe Diem for Burial Tomb Parthenon By Christopher T. Howlett for The Oracle Stadium By sandra for Colosseum Terracotta Army By Ph\u1ea1m Thanh L\u1ed9c Stadium By Creaticca Creative Agency for Circus Maximus Market By sofi Bazaar By Tokka Elkholy Shekel Coin By Till Teenck for Mint Aqueduct By Arthur Shlain Great Wall By icon 54 Rice Field by Graphic Engineer for Terrace farm Canoe By Viktor Fedyuk (Tim P) for Floating Gardens Arc de Triomphe By Andrejs Kirma, LV for National Epic Bank by By P Thanga Vignesh for National Treasury Judge By Kriszti\u00e1n M\u00e1ty\u00e1s for Courthouse Petra By Ranah Pixel Studio for Petra Medieval Era College By Alexander Skowalsky for University Wat Arun Ratchawararam Ratchawaramahawihan By J\u00f3zsef Bal\u00e1zs-Heged\u00fcs for Wat College By Vectors Market for National College Chichen Itza By Hea Poh Lin Castle By Mint Shirt Red Fort , Gateway of India By Arunabh Jain, IN for Mughal Fort Angkor Wat By Ph\u1ea1m Thanh L\u1ed9c for Angkor Wat Alhambra By Ph\u1ea1m Thanh L\u1ed9c Books By Abir Alward for Oxford University Forge By Monjin Friends Anchor By Saeful Muslim for Harbor Hand saw By b farias for Workshop House By sofy for Longhouse Hagia Sophia By Felipe Alvarado Factory By Maxim Kulikov for Ironworks Notre Dame By Marco Livolsi Shield and Swords By Alina Oleynik for Armory Machu Picchu By Chanut is Industries Garden By Bharat Mosque by yanti for Great Mosque of Djenne Renaissance Era Museum by zidney Hermitage By Yuri Mamaev The Louvre By roundicons.com Forbidden City By 1516 Theatre By b farias Tower of Pisa By Pedro Santos Himeji Castle By Chanut is Industries Windmill By corpus delicti Coffee by SURYANI, ID for Coffee House Taj Mahal By Felipe Alvarado Observatory By Nathan Driskell Opera House By Xinh Studio Chinese traditional tower By 1516 for Porcelain Tower Bank By projecthayat Harbor By Rflor for Seaport Mansion by Freepik for Satrap's Court Bullets By Aldric Rodriguez for Arsenal St. Petersburg By Carpe Diem for Kremlin Ceilidh By P Thanga Vignesh for Ceilidh Hall Industrial Era Books By Minh Do for Public School Hospital By Adrien Coquet Stock exchange By Pundimon Military By myiconfinder for Military Academy Factory By icon 54 Modern Era Stadium By Karuna Lalvani Signal Tower By Nociconist for Broadcast Tower Hangar By Rflor for Military Base Eiffel Tower By Felipe Alvarado Statue of Liberty By 1516 Microscope By Arafat Uddin for Research Lab Christ the redeemer By Stefan Spieler for Cristo Redentor Neuschwanstein By Vectors Market Big Ben By Ben Davis, RO Atomic Era Chemistry By Creative Stall for Medical Lab Pentagon By Maxim Kulikov Solar panel By Modik for Solar Plant Recycle By Umer Younas, PK for Recycling Center Opera House Sydney By Pham Duy Phuong Hung for Sydney Opera House Water dam By Symbolon for Hydro Plant Manhattan Project By corpus delicti, GR Nuclear Plant By Andrejs Kirma Spaceship By Dinosoft Labs for Apollo Program Information Era CN Tower Toronto By mikicon for CN tower War Shelter by Frepik for Bomb Shelter Hubble Telescope By Scott Lewis for Hubble Space Telescope Build By Michael G Brown for Spaceship Factory United Nations by Imam for United Nations All Era's Illuminati by emilegraphics for the Utopia Project Christian Church by Andrejs Kirma for Monastery cathedral by Pixel Bazaar for Cathedral Mosque by yanti for Mosque Pagoda by Xinh Studio for Pagoda Social Policies Tradition coat of arms By Martina Krasnayova for Oligarchy Apple By EnQiu for Landed Elite Crown By Alexander Skowalsky for Monarchy Pyramid By Creative Stall for Aristocracy Gavel By Rflor for Legalism Liberty People By Elizabeth Lopez for Citizenship Assembly By No\u00ebl Rasendrason for Republic People By Gregor Cresnar for Meritocracy People By Wilson Joseph for Representation Torch By Hea Poh Lin for Collective Rule Honor Sword By dsathiyaraj for Military Tradition Castle By Gabriele Malaspina for Military Caste Roman Armor By Parkjisun for Professional Army Shield By Kimmi Studio for Discipline Spartan Helmet By Joni Ramadhan for Warrior Code Piety Protestantism By Evgeni Moryakov for Reformation Temple By N.K.Narasimhan for Theocracy Religion By Ben Avery for Free Religion Flame By Ian Shoobridge for Mandate Of Heaven Patronage Adapted from Gold by Aneeque Ahmed for Philantropy Ornament by Tommy Suhartomo for Aesthetics Book Gift by Wolf B\u00f6se for Scholasticism agreement by RomanP for Cultural Diplomacy professor by Andrew Doane for Educated Elite Commerce Trade By Gregor Cresnar for Trade Unions Pie Chart By Adrien Coquet for Protectionism Coins By icon 54 for Mercantilism Sextant By lastspark for Naval Tradition captain by taamir468 and Wheel by Andrejs Kirma for Merchant Navy Rationalism Science By Three Six Five for Scientific Revolution Graph By Ben Davis for Secularism Logic By Jenya K for Sovereignty Dialogue By ProSymbols for Free Thought Logic By Arthur Shlain for Humanism Freedom Social Network By Kirby Wu for Civil Society Gender Equality By corpus delicti for Universal Suffrage Feather By Eduardo Souza for Constitution Voting By Nikita Kozin for Democracy Mic By Aybige for Free Speech Autocracy War By Abdul Karim for Total War Military Grade By Ben Davis for Militarism Military Medal By iconsphere for Fascism Newspaper By Trishul for Populism Riot Police By Dan Hetteix for Police State Order Adapted from Plan by Cattaleeya Thongsriphong for Planned Economy Flag by Muhammad Tajudin for Nationalism Communism By Valerio Poltrini for Socialism Hammer and Sickle by Dmitry Baranovskiy for Communism United by Izwar Muis for United Front Technologies Ancient Agriculture By OCHA Visual Information Unit Jug By Vladimir Belochkin for Pottery Archery By icon 54 Mining By art shop Sailing By Daniela Baptista Sundial By Bonegolem for Calendar Cuneiform By Michael Wohlwend for Writing Trap By Sergey Demushkin for Trapping innovative By Matt Brooks for The Wheel Bricks By Vaibhav Radhakrishnan for Construction Mallet By Ben Avery for Bronze Working Classical Telescope for Optics Horse Riding By Hea Poh Lin for Horseback Riding Abacus By Yo! Baba for Mathematics Arch By Andrejs Kirma for Construction Brain By Tony Gines for Philosophy Coins By Adrien Coquet for Currency Engineering Blueprint By Sachin Modgekar for Engineering Metalworking By Symbolon for Iron Working Medieval Judaism By Ben Davis for Theology Institution By Luis Prado for Civil Service Compass By Bernar Novalyi Education By Tomas Knopp Casting By Jasmine Rae Friedrich Bar association By Miroslav Kurdov for Guilds Knight By Robert Bjurshagen for Chivalry Camel By Orin Zuu for Camel Archer Machinery By Greenhill Lever By Jakob Ukrop for Physics Sword By Jonathan P Lambert for Steel Renaissance Telescope By ProSymbols for Astronomy Sound waves By Makarenko Andrey for Acoustics Banking By Delwar Hossein Printing Press By Mike Wirth Flintlock By Madison Apple for Gunpowder Fossil By Raf Verbraeken for Archaeology Sextant By lastspark for Navigation Architecture By Andrew Doane Money Growth By DesignNex for Economics Metal Block By Creaticca Creative Agency for Metallurgy Chemistry By Creative Stall Industrial Science By Dinosoft Labs for Scientific Theory Factory By Lil Squid for Industrialization Rifle By Alexander Skowalsky for Rifling Grenade By Dama Adhikara for Military Science Fertilizer By Jae Deasigner Bacteria By Maxim Kulikov for Biology Electricity By Ben Davis Turbines By Leonardo Schneider for Steam Power Dynamite By Simon Martin Modern Gears By Aiden Icons for Replaceable Parts Radio By Arthur Shlain Piston By Proletkult Graphik for Combustion Plastic By Yu luck Microphone By Viktor Vorobyev for Mass Media Flight By Genius Icons Train By Federico Panzano for Railroad Fridge By b farias for Refrigeration telegraph by Luke Anthony Firth for Telegraph* Atomic Pill By Alex Arseneau for Pharmaceuticals Satellite Dish By Vectors Market for Radar Ecology By ProSymbols Nuclear Reactor By Jeremie Sommet for Nuclear Fission Rocket By kareemov for Rocketry Computer By Shastry for Computers Information telecommunications by Wichai Wi for Telcommunications Tactics By Grafix Point for Mobile Tactics Rocket Kusdarti for Advanced Ballistics Satellite By Ben Davis for Satellites Robotic Arm By Karl Gilbert for Robotics Laser by Andrew Doane for Lasers global by Rank Sol for Globilization Atom By Kelsey Armstrong for Particle Physics Nanoparticles By Gyan Lakhwani for Nanotechnology Thermonuclear fusion by Olena Panasovska, UA for Nuclear Fusion Electronics By Cuby Design Radar By CINDYFLA, ID for Stealth Future Information Technology By Vectors Markeet for Future Tech Terrain Hills By Juraj Sedl\u00e1k Mountains By icon 54 Forest by Milinda Courey for Jungle Forest By Lance B Palm Tree By Tatiana for Oasis Water By Kozan for Marsh Harvest By Made for Flood plains Puddle By Bakunetsu Kaito for Lakes Island By Chanut is Industries for Atoll Iceberg By Jaime Carrion for Ice Nations Eye of Horus By Lilit Kalachyan for Egypt Russia By Eugen Belyakoff Dragon Head By Ravignir for China Lion By parkjisun for Babylon Omega By icon 54 for Greece Shield By Nathan Driskell for America Fleaur de Lis By Jessika Gadoury for France Crown By Peter van Driel for England Wreath by VectorBakery or Roman Iron Cross By Souvik Maity for Germany Star and Crecent for Arabia Family Crest Komon by sahua d for Japan Ashika Chakra by sahua d for India Variation on crescent moon by Estu Suhartono for The Ottomans Korea by CJS for Korea Two Sword Scimitars by Those Icons for Persia Swirl by IronSV for Polynesia Dharmachakra by Parkjisun for Siam Inca by Ravignir for Inca Sun symbol black by Eddo for The Huns Lion by Nikki Rodriguez for The Netherlands Three Crowns by Daniel Falk for Sweden Flag of Austria by Olena Panasovska, UA for Austria. The original work has been modified. Elephant by Hea Poh Lin for Carthage. The original work has been modified. Orthodox Cross by Avana Vana for Byzantium Iroquois by Ravignir for Iroquois Songhai by Ravignir for Songhai Celtic Knot by Ervin Bolat for the Celts Ethiopian Icon created in Gimp by Unciv team from the following: Lion by IronSV royal crown by Vectors Market Spear by Firza Alamsyah pennant by Sara Jeffries Maya civilization by Olena Panasovska for The Maya Promotions Sight By Jejen Juliansyah Nur Agung for Scouting skill bow rain arrow by Maxicons for Barrage Bomb By Angelo Troiano for Bombardment Private E2 By Yeong Rong Kim for Shock Private First Class By Yeong Rong Kim for Drill Medic By Yohann Berger for Medic City By iconcheese for Siege Skull and Crossbones By Anton Outkine for Coastal Raider Spear By Deemak Daksina for Formation Wall By Graphic Tigers for Volley Lightning By Mooms for Blitz Move By Sandra for Mobility accuracy By vigtographics for Targeting location by Humantech for Accuracy Plane By Tran Minh Villageois for Interception Hammer by Thengakola for Air Repair Hook By Yeong Rong Kim for Boarding Party Leaf By Paul Verhulst for Indirect Fire Move By Muneer A.Safiah for Logistics Evasion By Anna Sophie for Evasion Interrupt by Stephen Plaster for Ambush Submarine by Lloyd Humphreys for Wolfpack Axe by Brian Oppenlander for Woodsman Competition by luca fruzza Icon for Flight Deck is made by JackRainy Icon for Armor Plating is made by JackRainy Slingshot by James Keuning for Slinger Withdraw Anchor by Gregor Cresnar for Amphibious survival knife by b faris for Survivalism Shamrock By P Thanga Vignesh for Pictish Courage home sweet home By Silviu Ojog for Home Sweet Home Religions Lightning Bolt by sian huxtable for Pantheon Christianity by Public Domain Nouns for Christianity Islam by Muhammed Riza for Islam taoism by parkjisun for Taosim Buddhism by Julio Yanes for Buddhism Hinduism by Mugda Damle for Hinduism Confucianism by Dabid J. Pascual for Confucianism Judaism by Dabid J. Pascual for Judaism Shinto by Dabid J. Pascual for Shinto Sikhism by Dabid J. Pascual for Sikhism Tengrism by Dabid J. Pascual for Tengriism Zoroastrianism by Dabid J. Pascual for Zoroastrianism praying by parkjisun for Religion (Civilopedia concept entry) praying by Gan Khoon Lay for Follower Hero by Andrew J. Young for Founder yell by Adrien Coquet for Enhancer Others Circle By Aybige Arrow By Joe Mortell for movement Swap By iconomania for swapping units Connection By Travis Avery Skull By Vladimir Belochkin for disbanding units Crosshair By Bakunetsu Kaito for selecting enemies to attack City By Felix Westphal Fire By Lloyd Humphreys for \"city being razed\" icon Sleep By Saeful Muslim Banner By Emir Palavan for embarked units Arrow By uzeir syarief for moving between idle units Replace By Mike Rowe for switching tiles between cities Resistance By HeadsOfBirds Viking Hat By my name is mud for pillaging improvements Aim By Kaviashri for ranged strength Capitol By Loren Klein for City-States Aircraft By Tom Fricker for aircraft icon in city button radar scan By icon 54 for Range short range radar by Vectors Point for Intercept range Puppet By Ben Davis for puppeted cities City By Muhajir ila Robbi in the Icon center Lock by Vadim Solomakhin for locked tiles Hourglass by I Create Stuff for the 'Turn' icon Shield by Gregor Cresnar for Religious Strength skill sword flame by Maxicons) for Remove Heresy Pencil by Muhamad Aldi Maulana for Enter Text Prompt Button / Pencil Parchment by hans draiman for Cultured City-States connection by Popular for Mercantile City-States crossed sword by ProSymbols for Militaristic City-States ship helm by Vectors Market for Maritime City-States Magnifying Glass by John Caserta for Mod filter tick by Adrien Coquet on Nation picker people by Wilson Joseph as base for Civilopedia category Nations Mountains by Andrew J. Young as base for Civilopedia category Terrains File:Maya.svg for Mayan numerals East side of stela C, Quirigua for Mayan calendar symbols Footprints by Abdul Wahhab for movement overlay toggle, slightly modified. Currently unused. Arrows.svg by Intralexical (@will-ca), CC0. Main menu Lightning by Rohith M S for Quickstart Loading by Universal Icons for Load Game New by Alice Design for New Game Go back by Salvia Santos for Resume Multiplayer by Roy Charles Options By Thengakola Package by shashank singh Sound credits Sounds are from FreeSound.org unless otherwise noted and are either Creative Commons or Public Domain unless otherwise noted Soft two-fingered snap By EathanMarkson as 'click' for most clicks Pencil1 By stijn as 'paper' for opening and closing the tech picker SawInOut01 By kingof_thelab for construction picking? Chain Snare #1 By lovesbody as 'fortify' Level up By Marregheriti as 'upgrade' for upgrading units levelup By Seidhepriest as 'chimes' for special actions (free tech, build city, hurry wonder etc.) Coin By TheDJoe93 as 'coin' for purchasing tiles and constructions fast simple chop 1 By dave.dev as 'whoosh' for moving units around, also in edited form to produce the 'swap units' sound. Military kick By Dodgy C as 'promote' for unit promotions Tank reload By KieranKeegan as 'setup' for siege unit setup Scribble_short By waldram as 'policy' for adopting policies Hit Impact by Mrguff as 'throw' for catapult & trebuchet attacks Slingshot fly by 2 by saturdaysoundguy as 'arrow' for arrow attacks Metal hit slide by orginaljun as 'nonmetalhit' for pre-metal melee sounds klick_anlauf By jascha as 'metalhit' for metal melee sounds Horse's whinny By Kubuzz as 'horse' for cavalry attack sounds machine gun 001 - loop By pgi as 'machinegun' for machine gun attack sound uzzi_full_single By Deganoth as 'shot' for bullet attacks Grenade Launcher 2 By Daniel Simon as city bombard sound (CC Attribution 3.0 license) Woosh by Mark DiAngelo as 'slider' sound (CC Attribution 3.0 license) Tornado-Siren-II by Delilah as part of 'nuke' sound (CC Attribution 3.0 license) Explosion-Ultra-Bass by Mark DiAngelo as part of 'nuke' sound (CC Attribution 3.0 license) Short Choir by Breviceps as 'choir' for free great person pick Death Robot! Robotic scream by vultraz168 for Giant Death Robot Attack (CC0 1.0 Universal license) ceremonial cannon fire by DylanSmithSound for cannon artillery fire by Tomashevsky for artillery 20mm cannons by Piotr123 for ship guns \"bombing\" is made by the Unciv team using Audacity from lancaster bomber by confusion_music - aircraft Artillery Explosion (Close) (Mixed) by EFlexMusic - impact SFX Hit drop/bomb effect 5 by old_waveplay - bass \"jetgun\" for Jet Fighter attack is made by the Unciv team using Audacity from Fighter Jet Aircraft Fly by (synthesised) by Headphaze Machine Gun 001 - triple shot by pgi Excerpt from Tanks Shooting by qubodup for tankshot \"torpedo\" is made by the Unciv team using Audacity from Torpedo launch underwater by jobro Artillery Explosion (Close) (Mixed) by EFlexMusic elephant 44 by y89312 for Naruesan's Elephant sound Excerpt from Missile Strike by BaDoink for guided missile Excerpt from FireBurning_v2.wav by pcaeldries for 'remove heresy' action of inquisitor ( License ) Music The following music is from https://filmmusic.io \" Thatched Villagers \" by Kevin MacLeod (https://incompetech.com)","title":"Icon Credits"},{"location":"Credits/#icon-credits","text":"Flag Icons made by Freepik from www.flaticon.com and licensed by Creative Commons 3.0 New Unciv logo made by u-ndefined on Discord Base tile icons for the \"Fantasy Hex\" tileset belong to CuddlyClover @ https://cuddlyclover.itch.io/fantasy-hex-tiles with a few additions by me Trees for the jungle tiles in the \"Fantasy Hex\" are extracted from Desert Strike for the Amiga Almost all the improvements and units made by The Bucketeer on Discord Tile icons for the \"ThorfMaps tileset belong to Thorfinn Tait and are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Based on work at www.thorfmaps.com. Unless otherwise specified, all the following are from the Noun Project licenced under either Creative Commons or Public Domain","title":"Icon Credits"},{"location":"Credits/#stat-icons","text":"Gear by Alex Bickov for Production Apple by Pedro Gon\u00e7alves for Food gold by Eliricon for Gold Beaker by Delwar Hossain for Science Music by Naomi Atkinson for Culture Smiley by Alexander Skowalsky for Happiness Dove by Sandra for Faith User by St\u00e9phanie Rusch for Population Unhappy By Daryl Vandermont for Malcontent","title":"Stat icons"},{"location":"Credits/#units","text":"","title":"Units"},{"location":"Credits/#ancient-era","text":"Hammer By Hea Poh Lin for Worker Flag By Melvin Poppelaars for Settler Eagle By anggun for Scout Axe By ehab.abdullah for Warrior Haka By Josh for Maori Warrior Spiked Club by Hamish Bow And Arrow By Viktor Ostrovsky for Archer Bow By Arthur Shlain for Bowman Javelin By WEBTECHOPS LLP for Atlatlist arrows by Ayub Irawan for Skirmisher Fishing Vessel By Luis Prado for Work Boats Greek Trireme By Zachary McCune for Trireme Greek Trireme By Zachary McCune for Quinquereme. The original work has been modified. dragon by BGBOXXX Design for Dromon Viking Boat by Eucalyp for Galley Chariot By Andrew Doane for Chariot Archer Elephant By Luis Prado for War Elephant Centaur by Michael Wohlwend for Horse Archer Spear By Stephen Copinger for Spearman Greek shield for Hoplite ram by Becris for Battering Ram Spear by lastspark for Marauder Spiked club for Brute Hoplite by Eucalyp for Immortal Slingshot by James Keuning for Slinger warrior By DinosoftLab for Pictish Warrior (combined with Shamrock, see Promotions)","title":"Ancient Era"},{"location":"Credits/#classical-era","text":"Catapult By Jakub Ukrop Unloaded Crossbow By Hamish as Ballista Bow and arrow By Lars Meiertoberens for Composite Bowman Sword By Guilherme Furtado for Swordsman Mohawk By Dairy Free Design for Mohawk Warrior Roman Helmet By parkjisun for Legion Horse By AFY Studio for Horseman Horse Head By Juan Pablo Bravo for Companion Cavalry Elephant By Angriawan Ditya Zulkarnain for African Forest Elephant. The original work has been modified. Horse By Ranah Pixel Studio for Cataphract","title":"Classical Era"},{"location":"Credits/#medieval-era","text":"Ship By Vanisha for Galleass Crossbow By Creaticca Creative Agency for Crossbowman Longbow By Hamish for Longbowman Trebuchet By Ben Davis Sword By uzeir syarief for Longswordsman Samurai By Chanut is Industries Spear By Alvaro Cabrera for Pikeman Halberd parkjisun for Landsknecht Knight By Tyler Glaude","title":"Medieval Era"},{"location":"Credits/#renaissance-era","text":"Portuguese Caravel by Zack McCune for Caravel Cannon By Orin Zuu Musket By Cezary Lopacinski for Musketman Tarbouche By Mohamed Amine for Janissary Black powder musket By Jarem Fyre for Minuteman Rapier By Hamish for Musketeer Ship By Orin Zuu for Frigate Pirate by Berkah Icon for Privateer Pirate by Smalllike for Sea Beggar* Ship By Mungang Kim for Ship of the Line Lance By parkjisun for Lancer Sword By Daniela Baptista for Sipahi Helmet by Robert Bjurshagen for Hakkapeliitta","title":"Renaissance Era"},{"location":"Credits/#industrial-era","text":"Rifle By Chameleon Design for Rifleman Bayonet By food lover for Carolean soldier by ProSymbols for Mehal Sefari Horse By Bakunetso Kaito for Cavalry horse racing By Sergio Morozov for Cossack Marching Band by Darrin Loeliger, US for Hussar. The original work has been modified. Artillery By Creative Mania Ship By Aisyah for Ironclad","title":"Industrial Era"},{"location":"Credits/#modern-era","text":"Submarine By Hea Poh Lin, MY Helmet By Daniel Turner for Great War Infantry Cap By Creative Mania for Foreign Legion xm8 By Xela Ub for Infantry Icon for Carrier made by JackRainy , based on Aircraft Carrier By IcoLabs, BR Battleship By Vitaliy Gorbachev, KZ for Battleship machine-gun By Joana Pereira for Machine Gun artillery by Izwar Muis for Anti-Aircraft Gun Tank By corpus delicti for Landship Warship By zidney for Destroyer","title":"Modern Era"},{"location":"Credits/#atomic-era","text":"Water Gun by ProSymbols for Marine Parachute by Nociconist for Paratrooper Tank By jeff for Tank Tank Manuel Dixken, DE for Panzer Anti-Tank Gun By Tom Fricker atomic bomb by AmruID for Atomic Bomb Military vehicle By Luke Anthony Firth For Rocket Artillery Missile By Eucalyp for Mobile SAM","title":"Atomic Era"},{"location":"Credits/#information-era","text":"Submarine by Freepik adapted for Nuclear Submarine APC By Luke Anthony Firth for Mechanized Infantry Battleship by Edi Prastyo for Missile Cruiser Modern Armor By Public Domain Nouns for Modern Armor Nuclear Missile By Lluisa Iborra, ES Robot by Lluisa Iborra, ES for Giant Death Robot Missile By ProSymbols for SS Booster Rocket By BomSymbols for SS Cockpit Engine By Andre for SS Engine Chamber By IYIKON for SS Stasis Chamber","title":"Information Era"},{"location":"Credits/#all-eras","text":"Pallet By James Keuning for Great Artist Gear By Melvin Salas for Great Engineer Beaker By Delwar Hossain for Great Scientist Dove by sandra for Great Prophet General By anbileru adaleru for Great General Religion by Bruno G\u00e4tjens Gonz\u00e1lez adapted for Missionary invisibility cloak by Locad for Inquisitor","title":"All Eras"},{"location":"Credits/#resources","text":"Saffron By parkjisun for Dye Can By Nick Bluth for Aluminum Coal By Michael Wohlwend Anvil By Jason Dilworth for Iron Deer By Richard Nixon Banana By Adrian Coquet Oil By Tiago Maricate (also as Civilopedia category icon) Statue By Joris Hoogendoorn for Marble Ribbon By Anton for Silk Stone By AFY Studio Goblet By Pedro Santos for Silver Sugar By ahmad Spice By ahmad Radiation symbol By icon 54 for Uranium Wine By Adrien Coquet Wheat By Juraj Sedlak Sheep By Unrecognized Elephant By Kelsey Armstrong for Ivory Cattle By Daniela Baptista Leather By Alen Krummenacher for Furs Gem By Lluisa Iborra Joss Stick By Hea Poh Lin for Incense Pottery By Laymik, UA for Porcelain Jewelry By Shocho, IN Lemons By sachin modgekar, IN for Citrus Pipes By Nibras@design for Copper Crab By YuguDesign Truffle By parkjisun Salt By HAMEL KHALED, DZ","title":"Resources"},{"location":"Credits/#improvements","text":"Woodcutting axe By Chanut is Industries for Lumber Mill Monument By Setyo Ari Wibowo for Landmark Farm By Bonnie Beach Bank By Scott Dunlap for Customs House Academy By CJS Factory By RULI for Manufactory Mine By Edward Boatman Corral By Luis Prado for Pasture Plants By hendra sudibyo for Plantation Pickaxe By Creative Stall for Quarry Food stall By I Putu Kharismayadi for Trading post Road By REVA Ruins By Creative Stall for Ancient runs Ruins By Paulo Volkova for City ruins Fishing Net By Made for Fishing Boats Moai By Template Fort By Adrien Coquet Citadel By Adrien Coquet Village by Andrey Vasiliev pumping station by Peter van Driel for Polder","title":"Improvements"},{"location":"Credits/#buildings","text":"","title":"Buildings"},{"location":"Credits/#ancient-era_1","text":"Storehouse By Pedro Santos for Granary Shinto Gate by Alexander Skowalsky for Shrine Pyramid by Oscar Y\u00e1\u00f1ez for Mayan Pyramid Great Wall Of China By Arthur Shlain for Walls Markadan Tower by Vectors Market for Walls of Babylon Block By Monjin Friends for Stone Works korean palace By 1516 for Palace Obelisk By Eliricon for Monument obelisk By IconMark for Stele Cross swords By Creaticca Creative Agency for Barracks Fortress By Creative Stall for Krepost Paper By anam Circus By Ralph Schmitzer Stonehenge By icon 54 Ho Chi Minh mausoleum By Ph\u1ea1m Thanh L\u1ed9c for Mausoleum of Halicarnassus Icon for Statue of Zeus made by JackRainy , based on King By Eucalyp temple By Fabio Meroni for Temple of Artemis","title":"Ancient Era"},{"location":"Credits/#classical-era_1","text":"Lighthouse By Dolly Holmes Lighthouse By Hea Poh Lin for The Great Lighthouse Temple By 1516 Anubis By Carpe Diem for Burial Tomb Parthenon By Christopher T. Howlett for The Oracle Stadium By sandra for Colosseum Terracotta Army By Ph\u1ea1m Thanh L\u1ed9c Stadium By Creaticca Creative Agency for Circus Maximus Market By sofi Bazaar By Tokka Elkholy Shekel Coin By Till Teenck for Mint Aqueduct By Arthur Shlain Great Wall By icon 54 Rice Field by Graphic Engineer for Terrace farm Canoe By Viktor Fedyuk (Tim P) for Floating Gardens Arc de Triomphe By Andrejs Kirma, LV for National Epic Bank by By P Thanga Vignesh for National Treasury Judge By Kriszti\u00e1n M\u00e1ty\u00e1s for Courthouse Petra By Ranah Pixel Studio for Petra","title":"Classical Era"},{"location":"Credits/#medieval-era_1","text":"College By Alexander Skowalsky for University Wat Arun Ratchawararam Ratchawaramahawihan By J\u00f3zsef Bal\u00e1zs-Heged\u00fcs for Wat College By Vectors Market for National College Chichen Itza By Hea Poh Lin Castle By Mint Shirt Red Fort , Gateway of India By Arunabh Jain, IN for Mughal Fort Angkor Wat By Ph\u1ea1m Thanh L\u1ed9c for Angkor Wat Alhambra By Ph\u1ea1m Thanh L\u1ed9c Books By Abir Alward for Oxford University Forge By Monjin Friends Anchor By Saeful Muslim for Harbor Hand saw By b farias for Workshop House By sofy for Longhouse Hagia Sophia By Felipe Alvarado Factory By Maxim Kulikov for Ironworks Notre Dame By Marco Livolsi Shield and Swords By Alina Oleynik for Armory Machu Picchu By Chanut is Industries Garden By Bharat Mosque by yanti for Great Mosque of Djenne","title":"Medieval Era"},{"location":"Credits/#renaissance-era_1","text":"Museum by zidney Hermitage By Yuri Mamaev The Louvre By roundicons.com Forbidden City By 1516 Theatre By b farias Tower of Pisa By Pedro Santos Himeji Castle By Chanut is Industries Windmill By corpus delicti Coffee by SURYANI, ID for Coffee House Taj Mahal By Felipe Alvarado Observatory By Nathan Driskell Opera House By Xinh Studio Chinese traditional tower By 1516 for Porcelain Tower Bank By projecthayat Harbor By Rflor for Seaport Mansion by Freepik for Satrap's Court Bullets By Aldric Rodriguez for Arsenal St. Petersburg By Carpe Diem for Kremlin Ceilidh By P Thanga Vignesh for Ceilidh Hall","title":"Renaissance Era"},{"location":"Credits/#industrial-era_1","text":"Books By Minh Do for Public School Hospital By Adrien Coquet Stock exchange By Pundimon Military By myiconfinder for Military Academy Factory By icon 54","title":"Industrial Era"},{"location":"Credits/#modern-era_1","text":"Stadium By Karuna Lalvani Signal Tower By Nociconist for Broadcast Tower Hangar By Rflor for Military Base Eiffel Tower By Felipe Alvarado Statue of Liberty By 1516 Microscope By Arafat Uddin for Research Lab Christ the redeemer By Stefan Spieler for Cristo Redentor Neuschwanstein By Vectors Market Big Ben By Ben Davis, RO","title":"Modern Era"},{"location":"Credits/#atomic-era_1","text":"Chemistry By Creative Stall for Medical Lab Pentagon By Maxim Kulikov Solar panel By Modik for Solar Plant Recycle By Umer Younas, PK for Recycling Center Opera House Sydney By Pham Duy Phuong Hung for Sydney Opera House Water dam By Symbolon for Hydro Plant Manhattan Project By corpus delicti, GR Nuclear Plant By Andrejs Kirma Spaceship By Dinosoft Labs for Apollo Program","title":"Atomic Era"},{"location":"Credits/#information-era_1","text":"CN Tower Toronto By mikicon for CN tower War Shelter by Frepik for Bomb Shelter Hubble Telescope By Scott Lewis for Hubble Space Telescope Build By Michael G Brown for Spaceship Factory United Nations by Imam for United Nations","title":"Information Era"},{"location":"Credits/#all-eras_1","text":"Illuminati by emilegraphics for the Utopia Project Christian Church by Andrejs Kirma for Monastery cathedral by Pixel Bazaar for Cathedral Mosque by yanti for Mosque Pagoda by Xinh Studio for Pagoda","title":"All Era's"},{"location":"Credits/#social-policies","text":"","title":"Social Policies"},{"location":"Credits/#tradition","text":"coat of arms By Martina Krasnayova for Oligarchy Apple By EnQiu for Landed Elite Crown By Alexander Skowalsky for Monarchy Pyramid By Creative Stall for Aristocracy Gavel By Rflor for Legalism","title":"Tradition"},{"location":"Credits/#liberty","text":"People By Elizabeth Lopez for Citizenship Assembly By No\u00ebl Rasendrason for Republic People By Gregor Cresnar for Meritocracy People By Wilson Joseph for Representation Torch By Hea Poh Lin for Collective Rule","title":"Liberty"},{"location":"Credits/#honor","text":"Sword By dsathiyaraj for Military Tradition Castle By Gabriele Malaspina for Military Caste Roman Armor By Parkjisun for Professional Army Shield By Kimmi Studio for Discipline Spartan Helmet By Joni Ramadhan for Warrior Code","title":"Honor"},{"location":"Credits/#piety","text":"Protestantism By Evgeni Moryakov for Reformation Temple By N.K.Narasimhan for Theocracy Religion By Ben Avery for Free Religion Flame By Ian Shoobridge for Mandate Of Heaven","title":"Piety"},{"location":"Credits/#patronage","text":"Adapted from Gold by Aneeque Ahmed for Philantropy Ornament by Tommy Suhartomo for Aesthetics Book Gift by Wolf B\u00f6se for Scholasticism agreement by RomanP for Cultural Diplomacy professor by Andrew Doane for Educated Elite","title":"Patronage"},{"location":"Credits/#commerce","text":"Trade By Gregor Cresnar for Trade Unions Pie Chart By Adrien Coquet for Protectionism Coins By icon 54 for Mercantilism Sextant By lastspark for Naval Tradition captain by taamir468 and Wheel by Andrejs Kirma for Merchant Navy","title":"Commerce"},{"location":"Credits/#rationalism","text":"Science By Three Six Five for Scientific Revolution Graph By Ben Davis for Secularism Logic By Jenya K for Sovereignty Dialogue By ProSymbols for Free Thought Logic By Arthur Shlain for Humanism","title":"Rationalism"},{"location":"Credits/#freedom","text":"Social Network By Kirby Wu for Civil Society Gender Equality By corpus delicti for Universal Suffrage Feather By Eduardo Souza for Constitution Voting By Nikita Kozin for Democracy Mic By Aybige for Free Speech","title":"Freedom"},{"location":"Credits/#autocracy","text":"War By Abdul Karim for Total War Military Grade By Ben Davis for Militarism Military Medal By iconsphere for Fascism Newspaper By Trishul for Populism Riot Police By Dan Hetteix for Police State","title":"Autocracy"},{"location":"Credits/#order","text":"Adapted from Plan by Cattaleeya Thongsriphong for Planned Economy Flag by Muhammad Tajudin for Nationalism Communism By Valerio Poltrini for Socialism Hammer and Sickle by Dmitry Baranovskiy for Communism United by Izwar Muis for United Front","title":"Order"},{"location":"Credits/#technologies","text":"","title":"Technologies"},{"location":"Credits/#ancient","text":"Agriculture By OCHA Visual Information Unit Jug By Vladimir Belochkin for Pottery Archery By icon 54 Mining By art shop Sailing By Daniela Baptista Sundial By Bonegolem for Calendar Cuneiform By Michael Wohlwend for Writing Trap By Sergey Demushkin for Trapping innovative By Matt Brooks for The Wheel Bricks By Vaibhav Radhakrishnan for Construction Mallet By Ben Avery for Bronze Working","title":"Ancient"},{"location":"Credits/#classical","text":"Telescope for Optics Horse Riding By Hea Poh Lin for Horseback Riding Abacus By Yo! Baba for Mathematics Arch By Andrejs Kirma for Construction Brain By Tony Gines for Philosophy Coins By Adrien Coquet for Currency Engineering Blueprint By Sachin Modgekar for Engineering Metalworking By Symbolon for Iron Working","title":"Classical"},{"location":"Credits/#medieval","text":"Judaism By Ben Davis for Theology Institution By Luis Prado for Civil Service Compass By Bernar Novalyi Education By Tomas Knopp Casting By Jasmine Rae Friedrich Bar association By Miroslav Kurdov for Guilds Knight By Robert Bjurshagen for Chivalry Camel By Orin Zuu for Camel Archer Machinery By Greenhill Lever By Jakob Ukrop for Physics Sword By Jonathan P Lambert for Steel","title":"Medieval"},{"location":"Credits/#renaissance","text":"Telescope By ProSymbols for Astronomy Sound waves By Makarenko Andrey for Acoustics Banking By Delwar Hossein Printing Press By Mike Wirth Flintlock By Madison Apple for Gunpowder Fossil By Raf Verbraeken for Archaeology Sextant By lastspark for Navigation Architecture By Andrew Doane Money Growth By DesignNex for Economics Metal Block By Creaticca Creative Agency for Metallurgy Chemistry By Creative Stall","title":"Renaissance"},{"location":"Credits/#industrial","text":"Science By Dinosoft Labs for Scientific Theory Factory By Lil Squid for Industrialization Rifle By Alexander Skowalsky for Rifling Grenade By Dama Adhikara for Military Science Fertilizer By Jae Deasigner Bacteria By Maxim Kulikov for Biology Electricity By Ben Davis Turbines By Leonardo Schneider for Steam Power Dynamite By Simon Martin","title":"Industrial"},{"location":"Credits/#modern","text":"Gears By Aiden Icons for Replaceable Parts Radio By Arthur Shlain Piston By Proletkult Graphik for Combustion Plastic By Yu luck Microphone By Viktor Vorobyev for Mass Media Flight By Genius Icons Train By Federico Panzano for Railroad Fridge By b farias for Refrigeration telegraph by Luke Anthony Firth for Telegraph*","title":"Modern"},{"location":"Credits/#atomic","text":"Pill By Alex Arseneau for Pharmaceuticals Satellite Dish By Vectors Market for Radar Ecology By ProSymbols Nuclear Reactor By Jeremie Sommet for Nuclear Fission Rocket By kareemov for Rocketry Computer By Shastry for Computers","title":"Atomic"},{"location":"Credits/#information","text":"telecommunications by Wichai Wi for Telcommunications Tactics By Grafix Point for Mobile Tactics Rocket Kusdarti for Advanced Ballistics Satellite By Ben Davis for Satellites Robotic Arm By Karl Gilbert for Robotics Laser by Andrew Doane for Lasers global by Rank Sol for Globilization Atom By Kelsey Armstrong for Particle Physics Nanoparticles By Gyan Lakhwani for Nanotechnology Thermonuclear fusion by Olena Panasovska, UA for Nuclear Fusion Electronics By Cuby Design Radar By CINDYFLA, ID for Stealth","title":"Information"},{"location":"Credits/#future","text":"Information Technology By Vectors Markeet for Future Tech","title":"Future"},{"location":"Credits/#terrain","text":"Hills By Juraj Sedl\u00e1k Mountains By icon 54 Forest by Milinda Courey for Jungle Forest By Lance B Palm Tree By Tatiana for Oasis Water By Kozan for Marsh Harvest By Made for Flood plains Puddle By Bakunetsu Kaito for Lakes Island By Chanut is Industries for Atoll Iceberg By Jaime Carrion for Ice","title":"Terrain"},{"location":"Credits/#nations","text":"Eye of Horus By Lilit Kalachyan for Egypt Russia By Eugen Belyakoff Dragon Head By Ravignir for China Lion By parkjisun for Babylon Omega By icon 54 for Greece Shield By Nathan Driskell for America Fleaur de Lis By Jessika Gadoury for France Crown By Peter van Driel for England Wreath by VectorBakery or Roman Iron Cross By Souvik Maity for Germany Star and Crecent for Arabia Family Crest Komon by sahua d for Japan Ashika Chakra by sahua d for India Variation on crescent moon by Estu Suhartono for The Ottomans Korea by CJS for Korea Two Sword Scimitars by Those Icons for Persia Swirl by IronSV for Polynesia Dharmachakra by Parkjisun for Siam Inca by Ravignir for Inca Sun symbol black by Eddo for The Huns Lion by Nikki Rodriguez for The Netherlands Three Crowns by Daniel Falk for Sweden Flag of Austria by Olena Panasovska, UA for Austria. The original work has been modified. Elephant by Hea Poh Lin for Carthage. The original work has been modified. Orthodox Cross by Avana Vana for Byzantium Iroquois by Ravignir for Iroquois Songhai by Ravignir for Songhai Celtic Knot by Ervin Bolat for the Celts Ethiopian Icon created in Gimp by Unciv team from the following: Lion by IronSV royal crown by Vectors Market Spear by Firza Alamsyah pennant by Sara Jeffries Maya civilization by Olena Panasovska for The Maya","title":"Nations"},{"location":"Credits/#promotions","text":"Sight By Jejen Juliansyah Nur Agung for Scouting skill bow rain arrow by Maxicons for Barrage Bomb By Angelo Troiano for Bombardment Private E2 By Yeong Rong Kim for Shock Private First Class By Yeong Rong Kim for Drill Medic By Yohann Berger for Medic City By iconcheese for Siege Skull and Crossbones By Anton Outkine for Coastal Raider Spear By Deemak Daksina for Formation Wall By Graphic Tigers for Volley Lightning By Mooms for Blitz Move By Sandra for Mobility accuracy By vigtographics for Targeting location by Humantech for Accuracy Plane By Tran Minh Villageois for Interception Hammer by Thengakola for Air Repair Hook By Yeong Rong Kim for Boarding Party Leaf By Paul Verhulst for Indirect Fire Move By Muneer A.Safiah for Logistics Evasion By Anna Sophie for Evasion Interrupt by Stephen Plaster for Ambush Submarine by Lloyd Humphreys for Wolfpack Axe by Brian Oppenlander for Woodsman Competition by luca fruzza Icon for Flight Deck is made by JackRainy Icon for Armor Plating is made by JackRainy Slingshot by James Keuning for Slinger Withdraw Anchor by Gregor Cresnar for Amphibious survival knife by b faris for Survivalism Shamrock By P Thanga Vignesh for Pictish Courage home sweet home By Silviu Ojog for Home Sweet Home","title":"Promotions"},{"location":"Credits/#religions","text":"Lightning Bolt by sian huxtable for Pantheon Christianity by Public Domain Nouns for Christianity Islam by Muhammed Riza for Islam taoism by parkjisun for Taosim Buddhism by Julio Yanes for Buddhism Hinduism by Mugda Damle for Hinduism Confucianism by Dabid J. Pascual for Confucianism Judaism by Dabid J. Pascual for Judaism Shinto by Dabid J. Pascual for Shinto Sikhism by Dabid J. Pascual for Sikhism Tengrism by Dabid J. Pascual for Tengriism Zoroastrianism by Dabid J. Pascual for Zoroastrianism praying by parkjisun for Religion (Civilopedia concept entry) praying by Gan Khoon Lay for Follower Hero by Andrew J. Young for Founder yell by Adrien Coquet for Enhancer","title":"Religions"},{"location":"Credits/#others","text":"Circle By Aybige Arrow By Joe Mortell for movement Swap By iconomania for swapping units Connection By Travis Avery Skull By Vladimir Belochkin for disbanding units Crosshair By Bakunetsu Kaito for selecting enemies to attack City By Felix Westphal Fire By Lloyd Humphreys for \"city being razed\" icon Sleep By Saeful Muslim Banner By Emir Palavan for embarked units Arrow By uzeir syarief for moving between idle units Replace By Mike Rowe for switching tiles between cities Resistance By HeadsOfBirds Viking Hat By my name is mud for pillaging improvements Aim By Kaviashri for ranged strength Capitol By Loren Klein for City-States Aircraft By Tom Fricker for aircraft icon in city button radar scan By icon 54 for Range short range radar by Vectors Point for Intercept range Puppet By Ben Davis for puppeted cities City By Muhajir ila Robbi in the Icon center Lock by Vadim Solomakhin for locked tiles Hourglass by I Create Stuff for the 'Turn' icon Shield by Gregor Cresnar for Religious Strength skill sword flame by Maxicons) for Remove Heresy Pencil by Muhamad Aldi Maulana for Enter Text Prompt Button / Pencil Parchment by hans draiman for Cultured City-States connection by Popular for Mercantile City-States crossed sword by ProSymbols for Militaristic City-States ship helm by Vectors Market for Maritime City-States Magnifying Glass by John Caserta for Mod filter tick by Adrien Coquet on Nation picker people by Wilson Joseph as base for Civilopedia category Nations Mountains by Andrew J. Young as base for Civilopedia category Terrains File:Maya.svg for Mayan numerals East side of stela C, Quirigua for Mayan calendar symbols Footprints by Abdul Wahhab for movement overlay toggle, slightly modified. Currently unused. Arrows.svg by Intralexical (@will-ca), CC0.","title":"Others"},{"location":"Credits/#main-menu","text":"Lightning by Rohith M S for Quickstart Loading by Universal Icons for Load Game New by Alice Design for New Game Go back by Salvia Santos for Resume Multiplayer by Roy Charles Options By Thengakola Package by shashank singh","title":"Main menu"},{"location":"Credits/#sound-credits","text":"Sounds are from FreeSound.org unless otherwise noted and are either Creative Commons or Public Domain unless otherwise noted Soft two-fingered snap By EathanMarkson as 'click' for most clicks Pencil1 By stijn as 'paper' for opening and closing the tech picker SawInOut01 By kingof_thelab for construction picking? Chain Snare #1 By lovesbody as 'fortify' Level up By Marregheriti as 'upgrade' for upgrading units levelup By Seidhepriest as 'chimes' for special actions (free tech, build city, hurry wonder etc.) Coin By TheDJoe93 as 'coin' for purchasing tiles and constructions fast simple chop 1 By dave.dev as 'whoosh' for moving units around, also in edited form to produce the 'swap units' sound. Military kick By Dodgy C as 'promote' for unit promotions Tank reload By KieranKeegan as 'setup' for siege unit setup Scribble_short By waldram as 'policy' for adopting policies Hit Impact by Mrguff as 'throw' for catapult & trebuchet attacks Slingshot fly by 2 by saturdaysoundguy as 'arrow' for arrow attacks Metal hit slide by orginaljun as 'nonmetalhit' for pre-metal melee sounds klick_anlauf By jascha as 'metalhit' for metal melee sounds Horse's whinny By Kubuzz as 'horse' for cavalry attack sounds machine gun 001 - loop By pgi as 'machinegun' for machine gun attack sound uzzi_full_single By Deganoth as 'shot' for bullet attacks Grenade Launcher 2 By Daniel Simon as city bombard sound (CC Attribution 3.0 license) Woosh by Mark DiAngelo as 'slider' sound (CC Attribution 3.0 license) Tornado-Siren-II by Delilah as part of 'nuke' sound (CC Attribution 3.0 license) Explosion-Ultra-Bass by Mark DiAngelo as part of 'nuke' sound (CC Attribution 3.0 license) Short Choir by Breviceps as 'choir' for free great person pick Death Robot! Robotic scream by vultraz168 for Giant Death Robot Attack (CC0 1.0 Universal license) ceremonial cannon fire by DylanSmithSound for cannon artillery fire by Tomashevsky for artillery 20mm cannons by Piotr123 for ship guns \"bombing\" is made by the Unciv team using Audacity from lancaster bomber by confusion_music - aircraft Artillery Explosion (Close) (Mixed) by EFlexMusic - impact SFX Hit drop/bomb effect 5 by old_waveplay - bass \"jetgun\" for Jet Fighter attack is made by the Unciv team using Audacity from Fighter Jet Aircraft Fly by (synthesised) by Headphaze Machine Gun 001 - triple shot by pgi Excerpt from Tanks Shooting by qubodup for tankshot \"torpedo\" is made by the Unciv team using Audacity from Torpedo launch underwater by jobro Artillery Explosion (Close) (Mixed) by EFlexMusic elephant 44 by y89312 for Naruesan's Elephant sound Excerpt from Missile Strike by BaDoink for guided missile Excerpt from FireBurning_v2.wav by pcaeldries for 'remove heresy' action of inquisitor ( License )","title":"Sound credits"},{"location":"Credits/#music","text":"The following music is from https://filmmusic.io \" Thatched Villagers \" by Kevin MacLeod (https://incompetech.com)","title":"Music"},{"location":"Game%20Making%20Tips/","text":"Tips and tricks for making a LibGDX game Here are a bunch of things I've learned from by brief excursion into the world of game making. Some of our will be obvious to you, some will not. Use Kotlin Unciv started its life as a Unity project in C#, was shifted to Java and LibGDX, and finally to Kotlin. I regret every minute that I spent writing events in Java, this is probably the most significant change that your application could see. Use Scene2d Unless you plan on creating images on the fly, you'll probably be using prerendered assets. Placing them manually is akin to manually positioning html tags, instead of using html heirarchy and css to guide positions. So too is Scene2d - as a placement framework. it's relatively simple to understand, especially when you... Ignore Horizontal and Vertical groups - use Table I personally found that table has all the functionality of the above, and more. Each class has a different syntax too, so I found it much simpler to just stick with Table for everything. Table does just about EVERYTHING! It's insanely amazing! If your game is getting slow, use the Android profiler in Android Studio The top-down CPU chart is the best code profiler I've ever seen, use it to your advantage! Cache everything Caching is a trade-off between purer, state-agnostic code and higher performance. Coming from a PC background, I automatically assume that anything less than O(n^2) is less than a milisecond and therefore, not a cachinhg candidate. This is not so in mobile development. This becomes especially relevant when you need to save and load game data which has lots of connected parts - you have to avoid circular references, and you want to minimise the save size, but you need to reconstruct the missing links when loading. Minimize String operations All the tip and tricks you've heard to minimize String operations? Use them! String constants should be consts, use StringBuilders (or just ArrayLists of strings that you later .joinToString()) Sequences everywhere! One thing I did not expect to be such an issue is intermediate lists when sorting and mapping. But apparently, the memory allocation for these tasks is Serious Business. So whenever possible, take your list and .asSequence() it before actiating list operations - this results in huge savings of both time and memory! The only time you shouldn't be doing this, though, is when you want to cache the specific values for future use - sequences will go through the whole process every time you iterate on them, so just .toList() them when you've gotten the final results! General tips for making an Open Source game Lower the entry bar - for both programmers and players I think that most Open Source games suffer from this problem - those that are in are way in, but those that are out and want to join have to learn the ecosystem. Documentation is a big issue here, but so are detailed instructions - and I mean \"Spoonfeeding\". Treat new developers as if they've never used Git before - it's possible they haven't! Explain how to dowload the sourecode, the tools, how to get the game running locally, how to make changes and how to submit them. Same think with new players - getting the game up and running should be AS SIMPLE AS HUMANLY POSSIBLE - you want people to play your game, don't you? This includes: Source-To-Executable automation - I use Travis Play stores and the like Internal game tutorials - your players will NEVER BE SATISFIED with this last point, but at least do what you candidate Community, Community, Community! I, personally, underestimated this point for about a year after launch. I communicated with players through the Google Play Store and Github issues, and that seemed to be enough. It was only after repeated urgings from players that I opened a Discord server - and that gradually lead to a massive change! You see, it's not ABOUT programmer-to-player interaction. There will always be a small number of core devs relative to the large playerbase. The key to the community is the player-to-player interaction. Explaining things, questions, ideas, things that players bounc off each other, not only make the amorphous community a better pllace, but actually lead to a better game! Another think to remember is that there's a larger community around you - the Open Source community, the Linux community, etc. There are lots of people who will play your game only because it's open source, and it also means they don't have as many options. For example... Being the best 4X game means competing with the biggest names out there Being the best 4X game for Linux means many less competitors, but All The Cool Kids (tm) are multiplatforming nowadays so you're still outperformed. Being the best Open Source 4X game means about 5 competitors, and no money is involved either so the average entry is not as polished. Being the best Open Source 4X game for Android... means having so few competitors that it's totally doable. Everything is marketing. Your game's name, the icon, screenshots, everythig a player sees about your game is marketing. Icons and bylines are especially important, since they're the first things your players will probably see. I saw an almost 50% (!) by changing the icon, after seveeral experiments, which Google Play lets you conduct very easily. Translations are part of your source code This may be slightly contraversial, so I'll explain. We went though a number of iterations regarding how to save translations until we arrived at the current format. The important parts are: Game translation files should be AUTO GENERATED. This allows you to add new objects into the game with impunity, knowing that corresponding lines will be auto-added to the translations. Translations for each language should be stored separately - this allows concurrent modification of several independant languages with no risk of conflict Translations should be PR'd in! This allows other speakers to question or change the proposed translations, and allows you to run tests on your translations. If you require a specific format, this is invaluable as it means that bad translations will be rejected at the door. Open source problems require open (source?) solutions TL;DR, consider using APIs that are free, even if they're not Open Source. Multiplayer requires syncing game files beween clients, even when one of them is not currently online. The 'correct' way to solve this would probably be to have an online DB and a service which handles user requests. Since this is an Open Source game, I'm working on a 0$ budget, so we just store all the files in Dropbox and upload/download there. Is this secure? No, but does it need to be? You need to think of the cost vs the value. Same thing with Mods. Steam is big and secure so it handles its mods itself. We are small and open, so we just allow to download from Github, which lets us use all of Github's built in functions (user management, readmes, stars, versioning...) at no extra cost. And unlike the Dropbox usage, which is basically abuse, Github is built for thiss kind of thing! This is exactly the kind of use case they were thinking of to start with! The Reckoning There comes a time in every project where the cool stuff is done. All the cutting-edge awesomeness and algorithmic playdough is done, and now all (hah) it needs is polish. You know who loves polish? Players! Sure, there are some that say \"a good game is good even if it's basic\" but they have standards for what a basic game should have as well. And the numbers don't lie. Polished games sell themselves better, and so are played more. You know who doesn't love polish? DEVELOPERS. When your game is relatively simple, then the options for polish are more limited, but the more complex the game, the more polish-venues there are. And it can be an ABSOLUTE GRIND. Another weird use-case, another ingame option, \"better performance\" (I must have spent dozens of hours on different performance related actions) And the worst thing is, that everyone notices when it's missing, but no one notices when it's there. A hundred versions of polish - literally - and the average player may notice only a slight change. And then comes the moment when you ask yourself, why bother? What are we even doing here? For me, the answers are as follows: A. To build something truly great, you have to keep going way beyond when it stops being fun. B. There's a community of people that like what you're doing and want there to be more of it :) C. You know you want to keep coding, and what, you think you're going to start another project and it'll work out as well? You've tried that multiple times, and let's face it the chance of you making a second game that goes so well is really small unless you invest in it as much time as you have in this, and yeah, then you'll be back in this position again. And that's basically the loop I've been in for the last hundred versions or so! Solve bugs, fix edge cases, improve AI, accept PRs. Lots of mod-related changes, both to stop the game breaking when people do things in mods that they shouldn't and to allow them more freedom in making them. I don't think I'll ever really continue to finish G&K, I'm DEFINITELY not planning on implementing BNW mechanics which frankly I think are...not great. That's where I am right now. Kind of done with the game, but considering that I thought that half a year ago and releases are still releasing roughly every week, also kind of not.","title":"Tips and tricks for making a LibGDX game"},{"location":"Game%20Making%20Tips/#tips-and-tricks-for-making-a-libgdx-game","text":"Here are a bunch of things I've learned from by brief excursion into the world of game making. Some of our will be obvious to you, some will not.","title":"Tips and tricks for making a LibGDX game"},{"location":"Game%20Making%20Tips/#use-kotlin","text":"Unciv started its life as a Unity project in C#, was shifted to Java and LibGDX, and finally to Kotlin. I regret every minute that I spent writing events in Java, this is probably the most significant change that your application could see.","title":"Use Kotlin"},{"location":"Game%20Making%20Tips/#use-scene2d","text":"Unless you plan on creating images on the fly, you'll probably be using prerendered assets. Placing them manually is akin to manually positioning html tags, instead of using html heirarchy and css to guide positions. So too is Scene2d - as a placement framework. it's relatively simple to understand, especially when you...","title":"Use Scene2d"},{"location":"Game%20Making%20Tips/#ignore-horizontal-and-vertical-groups-use-table","text":"I personally found that table has all the functionality of the above, and more. Each class has a different syntax too, so I found it much simpler to just stick with Table for everything. Table does just about EVERYTHING! It's insanely amazing!","title":"Ignore Horizontal and Vertical groups - use Table"},{"location":"Game%20Making%20Tips/#if-your-game-is-getting-slow-use-the-android-profiler-in-android-studio","text":"The top-down CPU chart is the best code profiler I've ever seen, use it to your advantage!","title":"If your game is getting slow, use the Android profiler in Android Studio"},{"location":"Game%20Making%20Tips/#cache-everything","text":"Caching is a trade-off between purer, state-agnostic code and higher performance. Coming from a PC background, I automatically assume that anything less than O(n^2) is less than a milisecond and therefore, not a cachinhg candidate. This is not so in mobile development. This becomes especially relevant when you need to save and load game data which has lots of connected parts - you have to avoid circular references, and you want to minimise the save size, but you need to reconstruct the missing links when loading.","title":"Cache everything"},{"location":"Game%20Making%20Tips/#minimize-string-operations","text":"All the tip and tricks you've heard to minimize String operations? Use them! String constants should be consts, use StringBuilders (or just ArrayLists of strings that you later .joinToString())","title":"Minimize String operations"},{"location":"Game%20Making%20Tips/#sequences-everywhere","text":"One thing I did not expect to be such an issue is intermediate lists when sorting and mapping. But apparently, the memory allocation for these tasks is Serious Business. So whenever possible, take your list and .asSequence() it before actiating list operations - this results in huge savings of both time and memory! The only time you shouldn't be doing this, though, is when you want to cache the specific values for future use - sequences will go through the whole process every time you iterate on them, so just .toList() them when you've gotten the final results!","title":"Sequences everywhere!"},{"location":"Game%20Making%20Tips/#general-tips-for-making-an-open-source-game","text":"","title":"General tips for making an Open Source game"},{"location":"Game%20Making%20Tips/#lower-the-entry-bar-for-both-programmers-and-players","text":"I think that most Open Source games suffer from this problem - those that are in are way in, but those that are out and want to join have to learn the ecosystem. Documentation is a big issue here, but so are detailed instructions - and I mean \"Spoonfeeding\". Treat new developers as if they've never used Git before - it's possible they haven't! Explain how to dowload the sourecode, the tools, how to get the game running locally, how to make changes and how to submit them. Same think with new players - getting the game up and running should be AS SIMPLE AS HUMANLY POSSIBLE - you want people to play your game, don't you? This includes: Source-To-Executable automation - I use Travis Play stores and the like Internal game tutorials - your players will NEVER BE SATISFIED with this last point, but at least do what you candidate","title":"Lower the entry bar - for both programmers and players"},{"location":"Game%20Making%20Tips/#community-community-community","text":"I, personally, underestimated this point for about a year after launch. I communicated with players through the Google Play Store and Github issues, and that seemed to be enough. It was only after repeated urgings from players that I opened a Discord server - and that gradually lead to a massive change! You see, it's not ABOUT programmer-to-player interaction. There will always be a small number of core devs relative to the large playerbase. The key to the community is the player-to-player interaction. Explaining things, questions, ideas, things that players bounc off each other, not only make the amorphous community a better pllace, but actually lead to a better game! Another think to remember is that there's a larger community around you - the Open Source community, the Linux community, etc. There are lots of people who will play your game only because it's open source, and it also means they don't have as many options. For example... Being the best 4X game means competing with the biggest names out there Being the best 4X game for Linux means many less competitors, but All The Cool Kids (tm) are multiplatforming nowadays so you're still outperformed. Being the best Open Source 4X game means about 5 competitors, and no money is involved either so the average entry is not as polished. Being the best Open Source 4X game for Android... means having so few competitors that it's totally doable.","title":"Community, Community, Community!"},{"location":"Game%20Making%20Tips/#everything-is-marketing","text":"Your game's name, the icon, screenshots, everythig a player sees about your game is marketing. Icons and bylines are especially important, since they're the first things your players will probably see. I saw an almost 50% (!) by changing the icon, after seveeral experiments, which Google Play lets you conduct very easily.","title":"Everything is marketing."},{"location":"Game%20Making%20Tips/#translations-are-part-of-your-source-code","text":"This may be slightly contraversial, so I'll explain. We went though a number of iterations regarding how to save translations until we arrived at the current format. The important parts are: Game translation files should be AUTO GENERATED. This allows you to add new objects into the game with impunity, knowing that corresponding lines will be auto-added to the translations. Translations for each language should be stored separately - this allows concurrent modification of several independant languages with no risk of conflict Translations should be PR'd in! This allows other speakers to question or change the proposed translations, and allows you to run tests on your translations. If you require a specific format, this is invaluable as it means that bad translations will be rejected at the door.","title":"Translations are part of your source code"},{"location":"Game%20Making%20Tips/#open-source-problems-require-open-source-solutions","text":"TL;DR, consider using APIs that are free, even if they're not Open Source. Multiplayer requires syncing game files beween clients, even when one of them is not currently online. The 'correct' way to solve this would probably be to have an online DB and a service which handles user requests. Since this is an Open Source game, I'm working on a 0$ budget, so we just store all the files in Dropbox and upload/download there. Is this secure? No, but does it need to be? You need to think of the cost vs the value. Same thing with Mods. Steam is big and secure so it handles its mods itself. We are small and open, so we just allow to download from Github, which lets us use all of Github's built in functions (user management, readmes, stars, versioning...) at no extra cost. And unlike the Dropbox usage, which is basically abuse, Github is built for thiss kind of thing! This is exactly the kind of use case they were thinking of to start with!","title":"Open source problems require open (source?) solutions"},{"location":"Game%20Making%20Tips/#the-reckoning","text":"There comes a time in every project where the cool stuff is done. All the cutting-edge awesomeness and algorithmic playdough is done, and now all (hah) it needs is polish. You know who loves polish? Players! Sure, there are some that say \"a good game is good even if it's basic\" but they have standards for what a basic game should have as well. And the numbers don't lie. Polished games sell themselves better, and so are played more. You know who doesn't love polish? DEVELOPERS. When your game is relatively simple, then the options for polish are more limited, but the more complex the game, the more polish-venues there are. And it can be an ABSOLUTE GRIND. Another weird use-case, another ingame option, \"better performance\" (I must have spent dozens of hours on different performance related actions) And the worst thing is, that everyone notices when it's missing, but no one notices when it's there. A hundred versions of polish - literally - and the average player may notice only a slight change. And then comes the moment when you ask yourself, why bother? What are we even doing here? For me, the answers are as follows: A. To build something truly great, you have to keep going way beyond when it stops being fun. B. There's a community of people that like what you're doing and want there to be more of it :) C. You know you want to keep coding, and what, you think you're going to start another project and it'll work out as well? You've tried that multiple times, and let's face it the chance of you making a second game that goes so well is really small unless you invest in it as much time as you have in this, and yeah, then you'll be back in this position again. And that's basically the loop I've been in for the last hundred versions or so! Solve bugs, fix edge cases, improve AI, accept PRs. Lots of mod-related changes, both to stop the game breaking when people do things in mods that they shouldn't and to allow them more freedom in making them. I don't think I'll ever really continue to finish G&K, I'm DEFINITELY not planning on implementing BNW mechanics which frankly I think are...not great. That's where I am right now. Kind of done with the game, but considering that I thought that half a year ago and releases are still releasing roughly every week, also kind of not.","title":"The Reckoning"},{"location":"unique%20parameters/","text":"This page contains an overview of all different parameters used in uniques and what values can be filled into them. Each of the different parameter types is described below, including all possible values for them. These are split into two categories: - descriptions: e.g., \"the name of any unit\" - Text that looks like this . This last one must be used exactly the same Note that all of these are case-sensitive! action An action that a unit can preform. Currently, there are only two actions part of this: - Spread Religion - Remove Foreign religions from your own cities amount This indicates a whole number, possibly with a + or - sign, such as 2 , +13 , or -3 . baseTerrain The name of any terrain that is a base terrain according to the json file. baseUnitFilter Unit filters can be divided up into two parts: baseUnitFilter s and mapUnitFilter s. The former is tested against the unit as it appears in the json. This means it doesn't have an owning civ or tile it stands on, just its base properties. The latter is tested against the unit as it appears on the map, including its nation, tile, health and all other properties. The following are allowed to be used: - unit name - unit type - e.g. Melee, Ranged, WaterSubmarine, etc. - Land , Water , Air - land units , water units , air units - non-air for non-air non-missile units - Military , military units - Civilian , civilian units - All - Melee - Ranged - Nuclear Weapon - Great Person , Great - Embarked - Any exact unique the unit has - Any exact unique the unit type has - Any combination of the above (will match only if all match). The format is {filter1} {filter2} and can match any number of filters. For example: [{Military} {Water}] units, [{non-air} {Armor}] units, etc. No space or other text is allowed between the [ and the first { . belief The name of any belief beliefType Pantheon , Follower , Founder or Enhancer . buildingFilter Allows to only activate a unique for certain buildings. Allowed options are: All Buildings , Building Wonders , Wonders National Wonder World Wonder -- All wonders that are not national wonders building name The name of the building it replaces (so for example uniques for libraries will apply to paper makers as well) an exact unique the building has (e.g.: spaceship part ) Culture , Gold , etc. if the building is stat-related for that stat. Stat-related buildings are defined as one of the following: Provides that stat directly (e.g. +1 Culture) Provides a percentage bonus for that stat (e.g. +10% Production) Provides that stat as a bonus for resources (e.g. +1 Food from every Wheat) Provides that stat per some amount of population (e.g. +1 Science for every 2 population [cityFilter]) buildingName The name of any one building cityFilter cityFilters allow us to choose the range of cities affected by this unique: in this city in all cities in other cities in all coastal cities in capital in all non-occupied cities - all cities that are not puppets and don't have extra unhappiness from being recently conquered in all cities with a world wonder in all cities connected to capital in all cities with a garrison in non-enemy foreign cities - In all cities owned by civs other than you that you are not at war with in foreign cities in annexed cities in holy cities in City-State cities in cities following this religion - Should only be used in pantheon/follower uniques for religions in all cities in which the majority religion is a major religion in all cities in which the majority religion is a enhanced religion combatantFilter This indicates a combatant, which can either be a unit or a city (when bombarding). Must either be City or a mapUnitFilter . constructionFilter A filter for used when testing the current construction of a city. All values of baseUnitFilter and buildingFilter are allowed. costOrStrength Cost or Strength era The name of any era foundingOrEnhancing founding or enhancing great person The name of any great person improvementFilter For filtering a specific improvement. Allowed values are: - improvement name (Note that \"Road\" and \"Railroad\" do work as improvementFilters, but not as tileFilters at the moment.) - All - Great Improvements , Great - All Road - for Roads & Railroads improvementName The name of any improvement mapUnitFilter This indicates a unit as placed on the map. Compare with baseUnitFilter . It can be any value noted in baseUnitFilter or one of the following: - Wounded , wounded units - City-State - Barbarians , Barbarian - Again, any combination of the above is also allowed, e.g. [{Wounded} {Water}] units. plunderableStat All the following stats can be plundered: Gold , Science , Culture , Faith policy The name of any policy promotion The name of any promotion regionType Used for dividing the world into regions in each of which a single player is placed at the start of the game. Allowed values are Hybrid and the name of any terrain that has one of the following two uniques: - A Region is formed with at least [amount]% [simpleTerrain] tiles, with priority [amount] - A Region is formed with at least [amount]% [simpleTerrain] tiles and [simpleTerrain] tiles, with priority [amount] resource The name of any resource simpleTerrain Used by NaturalWonderGenerator to place natural wonders Allowed values are: - Land - Water - Elevated - The name of any terrain specialist The name of any specialist stats This indicates a text comprised of specific stats and is slightly more complex. Each stats is comprised of several stat changes, each in the form of +{amount} {stat} , where 'stat' is one of the seven major stats mentioned above. For example: +1 Science . These can be strung together with \", \" between them, for example: +2 Production, +3 Food . stat This is one of the 7 major stats in the game - Gold , Science , Production , Food , Happiness , Culture and Faith . Note that the stat names need to be capitalized! tech The name of any tech terrainFilter This indicates the terrain on a single tile. The following values are allowed: A filter names a specific json attribute (by name): Base terrain Terrain features Base terrain uniques Terrain feature uniques Resource Natural wonder Or the filter is a constant string choosing a derived test: All Water , Land Coastal (at least one direct neighbor is a coast) River (as in all 'river on tile' contexts, it means 'adjacent to a river on at least one side') Open terrain , Rough terrain (note all terrain not having the rough unique is counted as open) Friendly Land - land belonging to you, or other civs with open borders to you Foreign Land - any land that isn't friendly land Enemy land - any land belonging to a civ you are at war with Water resource , Strategic resource , Luxury resource , Bonus resource Natural Wonder (as opposed to above which means testing for a specific Natural Wonder by name, this tests for any of them) Please note all of these are case-sensitive . Also note: Resource filters depend on whether a viewing civ is known in the context where the filter runs. Water and specific tests require a viewing civ, and if the resource needs a tech to be visible, that tech to be researched by the viewing civ. The other resource category tests can succeed without a known viewing civ only for resources not requiring any tech. So - test your mod! So for instance, the unique \"[stats] from [tileFilter] tiles [cityFilter]\" can match several cases: terrainQuality Used to indicate for what use the terrain should be viewed when dividing the world into regions, in each of which a single player is placed at the start of the game. Allowed values are: - improvement name (Note that \"Road\" and \"Railroad\" do work as improvementFilters, but not as tileFilters at the moment.) - \"All\" - \"Great Improvements\", \"Great\" - \"All Road\" - for Roads & Railroads tileFilter Anything that can be used either in an improvementFilter or in a tileFilter can be used here victoryType The name of any victory type: - Neutral - Cultural - Diplomatic - Domination - Scientific - Time","title":"Unique parameters"},{"location":"unique%20parameters/#action","text":"An action that a unit can preform. Currently, there are only two actions part of this: - Spread Religion - Remove Foreign religions from your own cities","title":"action"},{"location":"unique%20parameters/#amount","text":"This indicates a whole number, possibly with a + or - sign, such as 2 , +13 , or -3 .","title":"amount"},{"location":"unique%20parameters/#baseterrain","text":"The name of any terrain that is a base terrain according to the json file.","title":"baseTerrain"},{"location":"unique%20parameters/#baseunitfilter","text":"Unit filters can be divided up into two parts: baseUnitFilter s and mapUnitFilter s. The former is tested against the unit as it appears in the json. This means it doesn't have an owning civ or tile it stands on, just its base properties. The latter is tested against the unit as it appears on the map, including its nation, tile, health and all other properties. The following are allowed to be used: - unit name - unit type - e.g. Melee, Ranged, WaterSubmarine, etc. - Land , Water , Air - land units , water units , air units - non-air for non-air non-missile units - Military , military units - Civilian , civilian units - All - Melee - Ranged - Nuclear Weapon - Great Person , Great - Embarked - Any exact unique the unit has - Any exact unique the unit type has - Any combination of the above (will match only if all match). The format is {filter1} {filter2} and can match any number of filters. For example: [{Military} {Water}] units, [{non-air} {Armor}] units, etc. No space or other text is allowed between the [ and the first { .","title":"baseUnitFilter"},{"location":"unique%20parameters/#belief","text":"The name of any belief","title":"belief"},{"location":"unique%20parameters/#belieftype","text":"Pantheon , Follower , Founder or Enhancer .","title":"beliefType"},{"location":"unique%20parameters/#buildingfilter","text":"Allows to only activate a unique for certain buildings. Allowed options are: All Buildings , Building Wonders , Wonders National Wonder World Wonder -- All wonders that are not national wonders building name The name of the building it replaces (so for example uniques for libraries will apply to paper makers as well) an exact unique the building has (e.g.: spaceship part ) Culture , Gold , etc. if the building is stat-related for that stat. Stat-related buildings are defined as one of the following: Provides that stat directly (e.g. +1 Culture) Provides a percentage bonus for that stat (e.g. +10% Production) Provides that stat as a bonus for resources (e.g. +1 Food from every Wheat) Provides that stat per some amount of population (e.g. +1 Science for every 2 population [cityFilter])","title":"buildingFilter"},{"location":"unique%20parameters/#buildingname","text":"The name of any one building","title":"buildingName"},{"location":"unique%20parameters/#cityfilter","text":"cityFilters allow us to choose the range of cities affected by this unique: in this city in all cities in other cities in all coastal cities in capital in all non-occupied cities - all cities that are not puppets and don't have extra unhappiness from being recently conquered in all cities with a world wonder in all cities connected to capital in all cities with a garrison in non-enemy foreign cities - In all cities owned by civs other than you that you are not at war with in foreign cities in annexed cities in holy cities in City-State cities in cities following this religion - Should only be used in pantheon/follower uniques for religions in all cities in which the majority religion is a major religion in all cities in which the majority religion is a enhanced religion","title":"cityFilter"},{"location":"unique%20parameters/#combatantfilter","text":"This indicates a combatant, which can either be a unit or a city (when bombarding). Must either be City or a mapUnitFilter .","title":"combatantFilter"},{"location":"unique%20parameters/#constructionfilter","text":"A filter for used when testing the current construction of a city. All values of baseUnitFilter and buildingFilter are allowed.","title":"constructionFilter"},{"location":"unique%20parameters/#costorstrength","text":"Cost or Strength","title":"costOrStrength"},{"location":"unique%20parameters/#era","text":"The name of any era","title":"era"},{"location":"unique%20parameters/#foundingorenhancing","text":"founding or enhancing","title":"foundingOrEnhancing"},{"location":"unique%20parameters/#great-person","text":"The name of any great person","title":"great person"},{"location":"unique%20parameters/#improvementfilter","text":"For filtering a specific improvement. Allowed values are: - improvement name (Note that \"Road\" and \"Railroad\" do work as improvementFilters, but not as tileFilters at the moment.) - All - Great Improvements , Great - All Road - for Roads & Railroads","title":"improvementFilter"},{"location":"unique%20parameters/#improvementname","text":"The name of any improvement","title":"improvementName"},{"location":"unique%20parameters/#mapunitfilter","text":"This indicates a unit as placed on the map. Compare with baseUnitFilter . It can be any value noted in baseUnitFilter or one of the following: - Wounded , wounded units - City-State - Barbarians , Barbarian - Again, any combination of the above is also allowed, e.g. [{Wounded} {Water}] units.","title":"mapUnitFilter"},{"location":"unique%20parameters/#plunderablestat","text":"All the following stats can be plundered: Gold , Science , Culture , Faith","title":"plunderableStat"},{"location":"unique%20parameters/#policy","text":"The name of any policy","title":"policy"},{"location":"unique%20parameters/#promotion","text":"The name of any promotion","title":"promotion"},{"location":"unique%20parameters/#regiontype","text":"Used for dividing the world into regions in each of which a single player is placed at the start of the game. Allowed values are Hybrid and the name of any terrain that has one of the following two uniques: - A Region is formed with at least [amount]% [simpleTerrain] tiles, with priority [amount] - A Region is formed with at least [amount]% [simpleTerrain] tiles and [simpleTerrain] tiles, with priority [amount]","title":"regionType"},{"location":"unique%20parameters/#resource","text":"The name of any resource","title":"resource"},{"location":"unique%20parameters/#simpleterrain","text":"Used by NaturalWonderGenerator to place natural wonders Allowed values are: - Land - Water - Elevated - The name of any terrain","title":"simpleTerrain"},{"location":"unique%20parameters/#specialist","text":"The name of any specialist","title":"specialist"},{"location":"unique%20parameters/#stats","text":"This indicates a text comprised of specific stats and is slightly more complex. Each stats is comprised of several stat changes, each in the form of +{amount} {stat} , where 'stat' is one of the seven major stats mentioned above. For example: +1 Science . These can be strung together with \", \" between them, for example: +2 Production, +3 Food .","title":"stats"},{"location":"unique%20parameters/#stat","text":"This is one of the 7 major stats in the game - Gold , Science , Production , Food , Happiness , Culture and Faith . Note that the stat names need to be capitalized!","title":"stat"},{"location":"unique%20parameters/#tech","text":"The name of any tech","title":"tech"},{"location":"unique%20parameters/#terrainfilter","text":"This indicates the terrain on a single tile. The following values are allowed: A filter names a specific json attribute (by name): Base terrain Terrain features Base terrain uniques Terrain feature uniques Resource Natural wonder Or the filter is a constant string choosing a derived test: All Water , Land Coastal (at least one direct neighbor is a coast) River (as in all 'river on tile' contexts, it means 'adjacent to a river on at least one side') Open terrain , Rough terrain (note all terrain not having the rough unique is counted as open) Friendly Land - land belonging to you, or other civs with open borders to you Foreign Land - any land that isn't friendly land Enemy land - any land belonging to a civ you are at war with Water resource , Strategic resource , Luxury resource , Bonus resource Natural Wonder (as opposed to above which means testing for a specific Natural Wonder by name, this tests for any of them) Please note all of these are case-sensitive . Also note: Resource filters depend on whether a viewing civ is known in the context where the filter runs. Water and specific tests require a viewing civ, and if the resource needs a tech to be visible, that tech to be researched by the viewing civ. The other resource category tests can succeed without a known viewing civ only for resources not requiring any tech. So - test your mod! So for instance, the unique \"[stats] from [tileFilter] tiles [cityFilter]\" can match several cases:","title":"terrainFilter"},{"location":"unique%20parameters/#terrainquality","text":"Used to indicate for what use the terrain should be viewed when dividing the world into regions, in each of which a single player is placed at the start of the game. Allowed values are: - improvement name (Note that \"Road\" and \"Railroad\" do work as improvementFilters, but not as tileFilters at the moment.) - \"All\" - \"Great Improvements\", \"Great\" - \"All Road\" - for Roads & Railroads","title":"terrainQuality"},{"location":"unique%20parameters/#tilefilter","text":"Anything that can be used either in an improvementFilter or in a tileFilter can be used here","title":"tileFilter"},{"location":"unique%20parameters/#victorytype","text":"The name of any victory type: - Neutral - Cultural - Diplomatic - Domination - Scientific - Time","title":"victoryType"},{"location":"uniques/","text":"Table of Contents Triggerable uniques Global uniques Nation uniques Tech uniques FollowerBelief uniques Building uniques Unit uniques Promotion uniques Terrain uniques Improvement uniques Resource uniques Ruins uniques CityState uniques Conditional uniques Deprecated uniques Triggerable uniques \ud83d\udd37 Free [baseUnitFilter] appears Example: \"Free [Melee] appears\" Applicable to: Triggerable \ud83d\udd37 [amount] free [baseUnitFilter] units appear Example: \"[20] free [Melee] units appear\" Applicable to: Triggerable \ud83d\udd37 Free Social Policy Applicable to: Triggerable \ud83d\udd37 [amount] Free Social Policies Example: \"[20] Free Social Policies\" Applicable to: Triggerable \ud83d\udd37 Empire enters golden age Applicable to: Triggerable \ud83d\udd37 Free Great Person Applicable to: Triggerable \ud83d\udd37 [amount] population [cityFilter] Example: \"[20] population [in all cities]\" Applicable to: Triggerable \ud83d\udd37 Free Technology Applicable to: Triggerable \ud83d\udd37 [amount] Free Technologies Example: \"[20] Free Technologies\" Applicable to: Triggerable \ud83d\udd37 Reveals the entire map Applicable to: Triggerable \ud83d\udd37 Triggers voting for the Diplomatic Victory Applicable to: Triggerable \ud83d\udd37 This Unit gains the [promotion] promotion Example: \"This Unit gains the [Shock I] promotion\" Applicable to: Triggerable \ud83d\udd37 [mapUnitFilter] units gain the [promotion] promotion Example: \"[Wounded] units gain the [Shock I] promotion\" Applicable to: Triggerable \ud83d\udd37 Provides the cheapest [stat] building in your first [amount] cities for free Example: \"Provides the cheapest [Culture] building in your first [20] cities for free\" Applicable to: Triggerable \ud83d\udd37 Provides a [buildingName] in your first [amount] cities for free Example: \"Provides a [Library] in your first [20] cities for free\" Applicable to: Triggerable \ud83d\udd37 Will not be displayed in Civilopedia Applicable to: Triggerable, Global, Nation, Era, Tech, Policy, FounderBelief, FollowerBelief, Building, Wonder, Unit, UnitType, Promotion, Terrain, Improvement, Resource, Ruins, CityState, ModOptions, Conditional Global uniques \ud83d\udd37 [stats] Example: \"[+1 Gold, +2 Production]\" Applicable to: Global, FollowerBelief, Improvement \ud83d\udd37 [stats] [cityFilter] Example: \"[+1 Gold, +2 Production] [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [stats] from every specialist [cityFilter] Example: \"[+1 Gold, +2 Production] from every specialist [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [stats] per [amount] population [cityFilter] Example: \"[+1 Gold, +2 Production] per [20] population [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [stats] in cities with [amount] or more population Example: \"[+1 Gold, +2 Production] in cities with [20] or more population\" Applicable to: Global, FollowerBelief \ud83d\udd37 [stats] in cities on [terrainFilter] tiles Example: \"[+1 Gold, +2 Production] in cities on [Forest] tiles\" Applicable to: Global, FollowerBelief \ud83d\udd37 [stats] from all [buildingFilter] buildings Example: \"[+1 Gold, +2 Production] from all [Culture] buildings\" Applicable to: Global, FollowerBelief \ud83d\udd37 [stats] whenever a Great Person is expended Example: \"[+1 Gold, +2 Production] whenever a Great Person is expended\" Applicable to: Global \ud83d\udd37 [stats] from [tileFilter] tiles [cityFilter] Example: \"[+1 Gold, +2 Production] from [Farm] tiles [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [stats] from [tileFilter] tiles without [tileFilter] [cityFilter] Example: \"[+1 Gold, +2 Production] from [Farm] tiles without [Farm] [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [stats] from every [tileFilter/specialist/buildingFilter] Example: \"[+1 Gold, +2 Production] from every [tileFilter/specialist/buildingFilter]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [stats] from each Trade Route Example: \"[+1 Gold, +2 Production] from each Trade Route\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% [stat] Example: \"[20]% [Culture]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% [stat] [cityFilter] Example: \"[20]% [Culture] [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% [stat] from every [tileFilter/specialist/buildingName] Example: \"[20]% [Culture] from every [tileFilter/specialist/buildingName]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% Yield from every [tileFilter] Example: \"[20]% Yield from every [Farm]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% [stat] from City-States Example: \"[20]% [Culture] from City-States\" Applicable to: Global \ud83d\udd37 Gold from all trade routes +25% Applicable to: Global \ud83d\udd37 Nullifies [stat] [cityFilter] Example: \"Nullifies [Culture] [in all cities]\" Applicable to: Global \ud83d\udd37 Nullifies Growth [cityFilter] Example: \"Nullifies Growth [in all cities]\" Applicable to: Global \ud83d\udd37 [amount]% Production when constructing [buildingFilter] wonders [cityFilter] Example: \"[20]% Production when constructing [Culture] wonders [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% Production when constructing [buildingFilter] buildings [cityFilter] Example: \"[20]% Production when constructing [Culture] buildings [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% Production when constructing [baseUnitFilter] units [cityFilter] Example: \"[20]% Production when constructing [Melee] units [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% Production towards any buildings that already exist in the Capital Example: \"[20]% Production towards any buildings that already exist in the Capital\" Applicable to: Global, FollowerBelief \ud83d\udd37 Tile yields from Natural Wonders doubled Applicable to: Global \ud83d\udd37 Military Units gifted from City-States start with [amount] XP Example: \"Military Units gifted from City-States start with [20] XP\" Applicable to: Global \ud83d\udd37 Militaristic City-States grant units [amount] times as fast when you are at war with a common nation Example: \"Militaristic City-States grant units [20] times as fast when you are at war with a common nation\" Applicable to: Global \ud83d\udd37 Gifts of Gold to City-States generate [amount]% more Influence Example: \"Gifts of Gold to City-States generate [20]% more Influence\" Applicable to: Global \ud83d\udd37 Can spend Gold to annex or puppet a City-State that has been your ally for [amount] turns. Example: \"Can spend Gold to annex or puppet a City-State that has been your ally for [20] turns.\" Applicable to: Global \ud83d\udd37 City-State territory always counts as friendly territory Applicable to: Global \ud83d\udd37 Allied City-States will occasionally gift Great People Applicable to: Global \ud83d\udd37 [amount]% City-State Influence degradation Example: \"[20]% City-State Influence degradation\" Applicable to: Global \ud83d\udd37 Resting point for Influence with City-States is increased by [amount] Example: \"Resting point for Influence with City-States is increased by [20]\" Applicable to: Global \ud83d\udd37 Allied City-States provide [stat] equal to [amount]% of what they produce for themselves Example: \"Allied City-States provide [Culture] equal to [20]% of what they produce for themselves\" Applicable to: Global \ud83d\udd37 [amount]% resources gifted by City-States Example: \"[20]% resources gifted by City-States\" Applicable to: Global \ud83d\udd37 [amount]% Happiness from luxury resources gifted by City-States Example: \"[20]% Happiness from luxury resources gifted by City-States\" Applicable to: Global \ud83d\udd37 City-State Influence recovers at twice the normal rate Applicable to: Global \ud83d\udd37 [amount] units cost no maintenance Example: \"[20] units cost no maintenance\" Applicable to: Global \ud83d\udd37 Cannot build [baseUnitFilter] units Example: \"Cannot build [Melee] units\" Applicable to: Global \ud83d\udd37 [amount]% growth [cityFilter] Example: \"[20]% growth [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% Food is carried over after population increases [cityFilter] Example: \"[20]% Food is carried over after population increases [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 Gain a free [buildingName] [cityFilter] Example: \"Gain a free [Library] [in all cities]\" Applicable to: Global \ud83d\udd37 [amount]% Great Person generation [cityFilter] Example: \"[20]% Great Person generation [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% great person generation [cityFilter] Example: \"[20]% great person generation [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 May choose [amount] additional [beliefType] beliefs when [foundingOrEnhancing] a religion Example: \"May choose [20] additional [Follower] beliefs when [founding] a religion\" Applicable to: Global \ud83d\udd37 May choose [amount] additional belief(s) of any type when [foundingOrEnhancing] a religion Example: \"May choose [20] additional belief(s) of any type when [founding] a religion\" Applicable to: Global \ud83d\udd37 [amount]% unhappiness from population [cityFilter] Example: \"[20]% unhappiness from population [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% unhappiness from specialists [cityFilter] Example: \"[20]% unhappiness from specialists [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% Food consumption by specialists [cityFilter] Example: \"[20]% Food consumption by specialists [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 Provides 1 happiness per 2 additional social policies adopted Applicable to: Global \ud83d\udd37 [amount]% of excess happiness converted to [stat] Example: \"[20]% of excess happiness converted to [Culture]\" Applicable to: Global \ud83d\udd37 [amount]% Culture cost of natural border growth [cityFilter] Example: \"[20]% Culture cost of natural border growth [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% Gold cost of acquiring tiles [cityFilter] Example: \"[20]% Gold cost of acquiring tiles [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] at an increasing price ([amount]) Example: \"May buy [Melee] units for [20] [Culture] [in all cities] at an increasing price ([20])\" Applicable to: Global, FollowerBelief \ud83d\udd37 May buy [buildingFilter] buildings for [amount] [stat] [cityFilter] at an increasing price ([amount]) Example: \"May buy [Culture] buildings for [20] [Culture] [in all cities] at an increasing price ([20])\" Applicable to: Global, FollowerBelief \ud83d\udd37 May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] Example: \"May buy [Melee] units for [20] [Culture] [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 May buy [buildingFilter] buildings for [amount] [stat] [cityFilter] Example: \"May buy [Culture] buildings for [20] [Culture] [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 May buy [baseUnitFilter] units with [stat] [cityFilter] Example: \"May buy [Melee] units with [Culture] [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 May buy [buildingFilter] buildings with [stat] [cityFilter] Example: \"May buy [Culture] buildings with [Culture] [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 May buy [baseUnitFilter] units with [stat] for [amount] times their normal Production cost Example: \"May buy [Melee] units with [Culture] for [20] times their normal Production cost\" Applicable to: Global, FollowerBelief \ud83d\udd37 May buy [buildingFilter] buildings with [stat] for [amount] times their normal Production cost Example: \"May buy [Culture] buildings with [Culture] for [20] times their normal Production cost\" Applicable to: Global, FollowerBelief \ud83d\udd37 Enables conversion of city production to gold Applicable to: Global \ud83d\udd37 Enables conversion of city production to science Applicable to: Global \ud83d\udd37 [stat] cost of purchasing items in cities [amount]% Example: \"[Culture] cost of purchasing items in cities [20]%\" Applicable to: Global, FollowerBelief \ud83d\udd37 [stat] cost of purchasing [buildingFilter] buildings [amount]% Example: \"[Culture] cost of purchasing [Culture] buildings [20]%\" Applicable to: Global, FollowerBelief \ud83d\udd37 [stat] cost of purchasing [baseUnitFilter] units [amount]% Example: \"[Culture] cost of purchasing [Melee] units [20]%\" Applicable to: Global, FollowerBelief \ud83d\udd37 Improves movement speed on roads Applicable to: Global \ud83d\udd37 Roads connect tiles across rivers Applicable to: Global \ud83d\udd37 [amount]% maintenance on road & railroads Example: \"[20]% maintenance on road & railroads\" Applicable to: Global \ud83d\udd37 [amount]% maintenance cost for buildings [cityFilter] Example: \"[20]% maintenance cost for buildings [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 Receive a free Great Person at the end of every [comment] (every 394 years), after researching [tech]. Each bonus person can only be chosen once. Example: \"Receive a free Great Person at the end of every [comment] (every 394 years), after researching [Agriculture]. Each bonus person can only be chosen once.\" Applicable to: Global \ud83d\udd37 Once The Long Count activates, the year on the world screen displays as the traditional Mayan Long Count. Applicable to: Global \ud83d\udd37 Retain [amount]% of the happiness from a luxury after the last copy has been traded away Example: \"Retain [20]% of the happiness from a luxury after the last copy has been traded away\" Applicable to: Global \ud83d\udd37 [amount] Happiness from each type of luxury resource Example: \"[20] Happiness from each type of luxury resource\" Applicable to: Global \ud83d\udd37 Each city founded increases culture cost of policies [amount]% less than normal Example: \"Each city founded increases culture cost of policies [20]% less than normal\" Applicable to: Global \ud83d\udd37 [amount]% Culture cost of adopting new Policies Example: \"[20]% Culture cost of adopting new Policies\" Applicable to: Global \ud83d\udd37 Quantity of strategic resources produced by the empire +[amount]% Example: \"Quantity of strategic resources produced by the empire +[20]%\" Applicable to: Global \ud83d\udd37 Double quantity of [resource] produced Example: \"Double quantity of [Iron] produced\" Applicable to: Global \ud83d\udd37 Double Happiness from Natural Wonders Applicable to: Global \ud83d\udd37 Enables construction of Spaceship parts Applicable to: Global \ud83d\udd37 Enemy land units must spend 1 extra movement point when inside your territory (obsolete upon Dynamite) Applicable to: Global \ud83d\udd37 Production to science conversion in cities increased by 33% Applicable to: Global \ud83d\udd37 Notified of new Barbarian encampments Applicable to: Global \ud83d\udd37 \"Borrows\" city names from other civilizations in the game Applicable to: Global \ud83d\udd37 Units fight as though they were at full strength even when damaged Applicable to: Global \ud83d\udd37 100 Gold for discovering a Natural Wonder (bonus enhanced to 500 Gold if first to discover it) Applicable to: Global \ud83d\udd37 Unhappiness from number of Cities doubled Applicable to: Global \ud83d\udd37 Great General provides double combat bonus Applicable to: Global \ud83d\udd37 Receive a tech boost when scientific buildings/wonders are built in capital Applicable to: Global \ud83d\udd37 May not generate great prophet equivalents naturally Applicable to: Global \ud83d\udd37 67% chance to earn 25 Gold and recruit a Barbarian unit from a conquered encampment Applicable to: Global \ud83d\udd37 50% chance of capturing defeated Barbarian naval units and earning 25 Gold Applicable to: Global \ud83d\udd37 Receive triple Gold from Barbarian encampments and pillaging Cities Applicable to: Global \ud83d\udd37 Enables Open Borders agreements Applicable to: Global \ud83d\udd37 Enables Research agreements Applicable to: Global \ud83d\udd37 Science gained from research agreements [amount]% Example: \"Science gained from research agreements [20]%\" Applicable to: Global \ud83d\udd37 Triggers victory Applicable to: Global \ud83d\udd37 Triggers a Cultural Victory upon completion Applicable to: Global \ud83d\udd37 [amount]% City Strength from defensive buildings Example: \"[20]% City Strength from defensive buildings\" Applicable to: Global \ud83d\udd37 [amount]% tile improvement construction time Example: \"[20]% tile improvement construction time\" Applicable to: Global \ud83d\udd37 [amount]% Gold from Great Merchant trade missions Example: \"[20]% Gold from Great Merchant trade missions\" Applicable to: Global \ud83d\udd37 [mapUnitFilter] Units adjacent to this city heal [amount] HP per turn when healing Example: \"[Wounded] Units adjacent to this city heal [20] HP per turn when healing\" Applicable to: Global, FollowerBelief \ud83d\udd37 [amount]% Golden Age length Example: \"[20]% Golden Age length\" Applicable to: Global \ud83d\udd37 [amount]% Strength for cities Example: \"[20]% Strength for cities\" Applicable to: Global, FollowerBelief \ud83d\udd37 New [baseUnitFilter] units start with [amount] Experience [cityFilter] Example: \"New [Melee] units start with [20] Experience [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 All newly-trained [baseUnitFilter] units [cityFilter] receive the [promotion] promotion Example: \"All newly-trained [Melee] units [in all cities] receive the [Shock I] promotion\" Applicable to: Global, FollowerBelief \ud83d\udd37 [baseUnitFilter] units built [cityFilter] can [action] [amount] extra times Example: \"[Melee] units built [in all cities] can [action] [20] extra times\" Applicable to: Global, FollowerBelief \ud83d\udd37 Enables embarkation for land units Applicable to: Global \ud83d\udd37 Enables embarked units to enter ocean tiles Applicable to: Global \ud83d\udd37 Population loss from nuclear attacks [amount]% [cityFilter] Example: \"Population loss from nuclear attacks [20]% [in all cities]\" Applicable to: Global \ud83d\udd37 [amount]% Natural religion spread [cityFilter] Example: \"[20]% Natural religion spread [in all cities]\" Applicable to: Global, FollowerBelief \ud83d\udd37 Religion naturally spreads to cities [amount] tiles away Example: \"Religion naturally spreads to cities [20] tiles away\" Applicable to: Global, FollowerBelief \ud83d\udd37 Can be continually researched Applicable to: Global \ud83d\udd37 [amount] Unit Supply Example: \"[20] Unit Supply\" Applicable to: Global \ud83d\udd37 [amount] Unit Supply per [amount] population [cityFilter] Example: \"[20] Unit Supply per [20] population [in all cities]\" Applicable to: Global \ud83d\udd37 [amount] Unit Supply per city Example: \"[20] Unit Supply per city\" Applicable to: Global \ud83d\udd37 Units in cities cost no Maintenance Applicable to: Global \ud83d\udd37 Rebel units may spawn Applicable to: Global \ud83d\udd37 [amount]% Strength Example: \"[20]% Strength\" Applicable to: Global, Unit \ud83d\udd37 [amount]% Strength decreasing with distance from the capital Example: \"[20]% Strength decreasing with distance from the capital\" Applicable to: Global, Unit \ud83d\udd37 [amount]% to Flank Attack bonuses Example: \"[20]% to Flank Attack bonuses\" Applicable to: Global, Unit \ud83d\udd37 +30% Strength when fighting City-State units and cities Applicable to: Global \ud83d\udd37 [amount] Movement Example: \"[20] Movement\" Applicable to: Global, Unit \ud83d\udd37 [amount] Sight Example: \"[20] Sight\" Applicable to: Global, Unit, Terrain \ud83d\udd37 [amount] Range Example: \"[20] Range\" Applicable to: Global, Unit \ud83d\udd37 [amount] HP when healing Example: \"[20] HP when healing\" Applicable to: Global, Unit \ud83d\udd37 [amount]% Spread Religion Strength Example: \"[20]% Spread Religion Strength\" Applicable to: Global, Unit \ud83d\udd37 No defensive terrain bonus Applicable to: Global, Unit \ud83d\udd37 No defensive terrain penalty Applicable to: Global, Unit \ud83d\udd37 No movement cost to pillage Applicable to: Global, Unit \ud83d\udd37 May heal outside of friendly territory Applicable to: Global, Unit \ud83d\udd37 All healing effects doubled Applicable to: Global, Unit \ud83d\udd37 Heals [amount] damage if it kills a unit Example: \"Heals [20] damage if it kills a unit\" Applicable to: Global, Unit \ud83d\udd37 Can only heal by pillaging Applicable to: Global, Unit \ud83d\udd37 Normal vision when embarked Applicable to: Global, Unit \ud83d\udd37 Defense bonus when embarked Applicable to: Global, Unit \ud83d\udd37 Embarked units can defend themselves Applicable to: Global \ud83d\udd37 [amount]% maintenance costs Example: \"[20]% maintenance costs\" Applicable to: Global, Unit \ud83d\udd37 [amount]% Gold cost of upgrading Example: \"[20]% Gold cost of upgrading\" Applicable to: Global, Unit \ud83d\udd37 [greatPerson] is earned [amount]% faster Example: \"[greatPerson] is earned [20]% faster\" Applicable to: Global, Unit \ud83d\udd37 Earn [amount]% of the damage done to [mapUnitFilter] units as [plunderableStat] Example: \"Earn [20]% of the damage done to [Wounded] units as [Gold]\" Applicable to: Global, Unit \ud83d\udd37 Upon capturing a city, receive [amount] times its [stat] production as [plunderableStat] immediately Example: \"Upon capturing a city, receive [20] times its [Culture] production as [Gold] immediately\" Applicable to: Global, Unit \ud83d\udd37 Earn [amount]% of killed [mapUnitFilter] unit's [costOrStrength] as [plunderableStat] Example: \"Earn [20]% of killed [Wounded] unit's [Cost] as [Gold]\" Applicable to: Global, Unit \ud83d\udd37 [amount] XP gained from combat Example: \"[20] XP gained from combat\" Applicable to: Global, Unit \ud83d\udd37 [amount]% XP gained from combat Example: \"[20]% XP gained from combat\" Applicable to: Global, Unit \ud83d\udd37 This Unit upgrades for free Applicable to: Global Nation uniques \ud83d\udd37 Will not be chosen for new games Applicable to: Nation \ud83d\udd37 Starts with [tech] Example: \"Starts with [Agriculture]\" Applicable to: Nation Tech uniques \ud83d\udd37 Starting tech Applicable to: Tech \ud83d\udd37 Only available Applicable to: Tech, Policy, Building, Unit, Promotion, Improvement FollowerBelief uniques \ud83d\udd37 [amount]% [stat] from every follower, up to [amount]% Example: \"[20]% [Culture] from every follower, up to [20]%\" Applicable to: FollowerBelief \ud83d\udd37 Earn [amount]% of [mapUnitFilter] unit's [costOrStrength] as [plunderableStat] when killed within 4 tiles of a city following this religion Example: \"Earn [20]% of [Wounded] unit's [Cost] as [Gold] when killed within 4 tiles of a city following this religion\" Applicable to: FollowerBelief Building uniques \ud83d\udd37 Consumes [amount] [resource] Example: \"Consumes [20] [Iron]\" Applicable to: Building, Unit, Improvement \ud83d\udd37 Provides [amount] [resource] Example: \"Provides [20] [Iron]\" Applicable to: Building, Improvement \ud83d\udd37 Unbuildable Applicable to: Building, Unit \ud83d\udd37 Cannot be purchased Applicable to: Building, Unit \ud83d\udd37 Can be purchased with [stat] [cityFilter] Example: \"Can be purchased with [Culture] [in all cities]\" Applicable to: Building, Unit \ud83d\udd37 Can be purchased for [amount] [stat] [cityFilter] Example: \"Can be purchased for [20] [Culture] [in all cities]\" Applicable to: Building, Unit \ud83d\udd37 Limited to [amount] per Civilization Example: \"Limited to [20] per Civilization\" Applicable to: Building, Unit \ud83d\udd37 Hidden until [amount] social policy branches have been completed Example: \"Hidden until [20] social policy branches have been completed\" Applicable to: Building, Unit \ud83d\udd37 Excess Food converted to Production when under construction Applicable to: Building, Unit \ud83d\udd37 Requires at least [amount] population Example: \"Requires at least [20] population\" Applicable to: Building, Unit \ud83d\udd37 Cost increases by [amount] per owned city Example: \"Cost increases by [20] per owned city\" Applicable to: Building \ud83d\udd37 Requires a [buildingName] in all cities Example: \"Requires a [Library] in all cities\" Applicable to: Building \ud83d\udd37 Requires a [buildingName] in at least [amount] cities Example: \"Requires a [Library] in at least [20] cities\" Applicable to: Building \ud83d\udd37 Must be on [terrainFilter] Example: \"Must be on [Forest]\" Applicable to: Building \ud83d\udd37 Must not be on [terrainFilter] Example: \"Must not be on [Forest]\" Applicable to: Building \ud83d\udd37 Must be next to [terrainFilter] Example: \"Must be next to [Forest]\" Applicable to: Building, Improvement \ud83d\udd37 Must not be next to [terrainFilter] Example: \"Must not be next to [Forest]\" Applicable to: Building \ud83d\udd37 Unsellable Applicable to: Building \ud83d\udd37 Obsolete with [tech] Example: \"Obsolete with [Agriculture]\" Applicable to: Building, Improvement, Resource \ud83d\udd37 Indicates the capital city Applicable to: Building \ud83d\udd37 Provides 1 extra copy of each improved luxury resource near this City Applicable to: Building \ud83d\udd37 Destroyed when the city is captured Applicable to: Building \ud83d\udd37 Never destroyed when the city is captured Applicable to: Building \ud83d\udd37 Doubles Gold given to enemy if city is captured Applicable to: Building \ud83d\udd37 Remove extra unhappiness from annexed cities Applicable to: Building \ud83d\udd37 Spaceship part Applicable to: Building, Unit \ud83d\udd37 Hidden when religion is disabled Applicable to: Building, Unit, Ruins \ud83d\udd37 Hidden when [victoryType] Victory is disabled Example: \"Hidden when [Domination] Victory is disabled\" Applicable to: Building, Unit Unit uniques \ud83d\udd37 Founds a new city Applicable to: Unit \ud83d\udd37 Can construct [improvementName] Example: \"Can construct [Trading Post]\" Applicable to: Unit \ud83d\udd37 Can build [improvementFilter/terrainFilter] improvements on tiles Example: \"Can build [improvementFilter/terrainFilter] improvements on tiles\" Applicable to: Unit \ud83d\udd37 May create improvements on water resources Applicable to: Unit \ud83d\udd37 May found a religion Applicable to: Unit \ud83d\udd37 May enhance a religion Applicable to: Unit \ud83d\udd37 Can only attack [combatantFilter] units Example: \"Can only attack [City] units\" Applicable to: Unit \ud83d\udd37 Can only attack [tileFilter] tiles Example: \"Can only attack [Farm] tiles\" Applicable to: Unit \ud83d\udd37 Cannot attack Applicable to: Unit \ud83d\udd37 Must set up to ranged attack Applicable to: Unit \ud83d\udd37 Self-destructs when attacking Applicable to: Unit \ud83d\udd37 Blast radius [amount] Example: \"Blast radius [20]\" Applicable to: Unit \ud83d\udd37 Ranged attacks may be performed over obstacles Applicable to: Unit \ud83d\udd37 Uncapturable Applicable to: Unit \ud83d\udd37 May withdraw before melee ([amount]%) Example: \"May withdraw before melee ([20]%)\" Applicable to: Unit \ud83d\udd37 Unable to capture cities Applicable to: Unit \ud83d\udd37 Can move after attacking Applicable to: Unit \ud83d\udd37 Can move immediately once bought Applicable to: Unit \ud83d\udd37 Unit will heal every turn, even if it performs an action Applicable to: Unit \ud83d\udd37 All adjacent units heal [amount] HP when healing Example: \"All adjacent units heal [20] HP when healing\" Applicable to: Unit \ud83d\udd37 Eliminates combat penalty for attacking across a coast Applicable to: Unit \ud83d\udd37 6 tiles in every direction always visible Applicable to: Unit \ud83d\udd37 Can carry [amount] [mapUnitFilter] units Example: \"Can carry [20] [Wounded] units\" Applicable to: Unit \ud83d\udd37 Can carry [amount] extra [mapUnitFilter] units Example: \"Can carry [20] extra [Wounded] units\" Applicable to: Unit \ud83d\udd37 Cannot be carried by [mapUnitFilter] units Example: \"Cannot be carried by [Wounded] units\" Applicable to: Unit \ud83d\udd37 May capture killed [mapUnitFilter] units Example: \"May capture killed [Wounded] units\" Applicable to: Unit \ud83d\udd37 Invisible to others Applicable to: Unit \ud83d\udd37 Invisible to non-adjacent units Applicable to: Unit \ud83d\udd37 Can see invisible [mapUnitFilter] units Example: \"Can see invisible [Wounded] units\" Applicable to: Unit \ud83d\udd37 May upgrade to [baseUnitFilter] through ruins-like effects Example: \"May upgrade to [Melee] through ruins-like effects\" Applicable to: Unit \ud83d\udd37 Double movement in [terrainFilter] Example: \"Double movement in [Forest]\" Applicable to: Unit \ud83d\udd37 All tiles cost 1 movement Applicable to: Unit \ud83d\udd37 Can pass through impassable tiles Applicable to: Unit \ud83d\udd37 Ignores terrain cost Applicable to: Unit \ud83d\udd37 Ignores Zone of Control Applicable to: Unit \ud83d\udd37 Rough terrain penalty Applicable to: Unit \ud83d\udd37 Can enter ice tiles Applicable to: Unit \ud83d\udd37 Cannot enter ocean tiles Applicable to: Unit \ud83d\udd37 May enter foreign tiles without open borders Applicable to: Unit \ud83d\udd37 May enter foreign tiles without open borders, but loses [amount] religious strength each turn it ends there Example: \"May enter foreign tiles without open borders, but loses [20] religious strength each turn it ends there\" Applicable to: Unit \ud83d\udd37 Never appears as a Barbarian unit Applicable to: Unit \ud83d\udd37 Religious Unit Applicable to: Unit \ud83d\udd37 Can be added to [comment] in the Capital Example: \"Can be added to [comment] in the Capital\" Applicable to: Unit Promotion uniques \ud83d\udd37 Heal this unit by [amount] HP Example: \"Heal this unit by [20] HP\" Applicable to: Promotion Terrain uniques \ud83d\udd37 Must be adjacent to [amount] [simpleTerrain] tiles Example: \"Must be adjacent to [20] [Elevated] tiles\" Applicable to: Terrain \ud83d\udd37 Must be adjacent to [amount] to [amount] [simpleTerrain] tiles Example: \"Must be adjacent to [20] to [20] [Elevated] tiles\" Applicable to: Terrain \ud83d\udd37 Must not be on [amount] largest landmasses Example: \"Must not be on [20] largest landmasses\" Applicable to: Terrain \ud83d\udd37 Must be on [amount] largest landmasses Example: \"Must be on [20] largest landmasses\" Applicable to: Terrain \ud83d\udd37 Occurs on latitudes from [amount] to [amount] percent of distance equator to pole Example: \"Occurs on latitudes from [20] to [20] percent of distance equator to pole\" Applicable to: Terrain \ud83d\udd37 Occurs in groups of [amount] to [amount] tiles Example: \"Occurs in groups of [20] to [20] tiles\" Applicable to: Terrain \ud83d\udd37 Neighboring tiles will convert to [baseTerrain] Example: \"Neighboring tiles will convert to [Grassland]\" Applicable to: Terrain \ud83d\udd37 Neighboring tiles except [baseTerrain] will convert to [baseTerrain] Example: \"Neighboring tiles except [Grassland] will convert to [Grassland]\" Applicable to: Terrain \ud83d\udd37 Grants 500 Gold to the first civilization to discover it Applicable to: Terrain \ud83d\udd37 Units ending their turn on this terrain take [amount] damage Example: \"Units ending their turn on this terrain take [20] damage\" Applicable to: Terrain \ud83d\udd37 Grants [promotion] ([comment]) to adjacent [mapUnitFilter] units for the rest of the game Example: \"Grants [Shock I] ([comment]) to adjacent [Wounded] units for the rest of the game\" Applicable to: Terrain \ud83d\udd37 [amount] Strength for cities built on this terrain Example: \"[20] Strength for cities built on this terrain\" Applicable to: Terrain \ud83d\udd37 Provides a one-time Production bonus to the closest city when cut down Applicable to: Terrain \ud83d\udd37 Tile provides yield without assigned population Applicable to: Terrain, Improvement \ud83d\udd37 Nullifies all other stats this tile provides Applicable to: Terrain \ud83d\udd37 Only [improvementFilter] improvements may be built on this tile Example: \"Only [All Road] improvements may be built on this tile\" Applicable to: Terrain \ud83d\udd37 Blocks line-of-sight from tiles at same elevation Applicable to: Terrain \ud83d\udd37 Has an elevation of [amount] for visibility calculations Example: \"Has an elevation of [20] for visibility calculations\" Applicable to: Terrain \ud83d\udd37 Always Fertility [amount] for Map Generation Example: \"Always Fertility [20] for Map Generation\" Applicable to: Terrain \ud83d\udd37 [amount] to Fertility for Map Generation Example: \"[20] to Fertility for Map Generation\" Applicable to: Terrain \ud83d\udd37 A Region is formed with at least [amount]% [simpleTerrain] tiles, with priority [amount] Example: \"A Region is formed with at least [20]% [Elevated] tiles, with priority [20]\" Applicable to: Terrain \ud83d\udd37 A Region is formed with at least [amount]% [simpleTerrain] tiles and [simpleTerrain] tiles, with priority [amount] Example: \"A Region is formed with at least [20]% [Elevated] tiles and [Elevated] tiles, with priority [20]\" Applicable to: Terrain \ud83d\udd37 A Region can not contain more [simpleTerrain] tiles than [simpleTerrain] tiles Example: \"A Region can not contain more [Elevated] tiles than [Elevated] tiles\" Applicable to: Terrain \ud83d\udd37 Base Terrain on this tile is not counted for Region determination Applicable to: Terrain \ud83d\udd37 Starts in regions of this type receive an extra [resource] Example: \"Starts in regions of this type receive an extra [Iron]\" Applicable to: Terrain \ud83d\udd37 Never receives any resources Applicable to: Terrain \ud83d\udd37 Becomes [terrainName] when adjacent to [terrainFilter] Example: \"Becomes [terrainName] when adjacent to [Forest]\" Applicable to: Terrain \ud83d\udd37 Considered [terrainQuality] when determining start locations Example: \"Considered [Undesirable] when determining start locations\" Applicable to: Terrain \ud83d\udd37 Doesn't generate naturally Applicable to: Terrain, Resource \ud83d\udd37 Occurs at temperature between [amount] and [amount] and humidity between [amount] and [amount] Example: \"Occurs at temperature between [20] and [20] and humidity between [20] and [20]\" Applicable to: Terrain \ud83d\udd37 Occurs in chains at high elevations Applicable to: Terrain \ud83d\udd37 Occurs in groups around high elevations Applicable to: Terrain \ud83d\udd37 Every [amount] tiles with this terrain will receive a major deposit of a strategic resource. Example: \"Every [20] tiles with this terrain will receive a major deposit of a strategic resource.\" Applicable to: Terrain \ud83d\udd37 Rare feature Applicable to: Terrain \ud83d\udd37 Resistant to nukes Applicable to: Terrain \ud83d\udd37 Can be destroyed by nukes Applicable to: Terrain \ud83d\udd37 Fresh water Applicable to: Terrain \ud83d\udd37 Rough terrain Applicable to: Terrain Improvement uniques \ud83d\udd37 Can also be built on tiles adjacent to fresh water Applicable to: Improvement \ud83d\udd37 [stats] from [tileFilter] tiles Example: \"[+1 Gold, +2 Production] from [Farm] tiles\" Applicable to: Improvement \ud83d\udd37 [stats] for each adjacent [tileFilter] Example: \"[+1 Gold, +2 Production] for each adjacent [Farm]\" Applicable to: Improvement \ud83d\udd37 Can be built outside your borders Applicable to: Improvement \ud83d\udd37 Can be built just outside your borders Applicable to: Improvement \ud83d\udd37 Cannot be built on [tileFilter] tiles Example: \"Cannot be built on [Farm] tiles\" Applicable to: Improvement \ud83d\udd37 Does not need removal of [tileFilter] Example: \"Does not need removal of [Farm]\" Applicable to: Improvement \ud83d\udd37 Gives a defensive bonus of [amount]% Example: \"Gives a defensive bonus of [20]%\" Applicable to: Improvement \ud83d\udd37 Costs [amount] gold per turn when in your territory Example: \"Costs [20] gold per turn when in your territory\" Applicable to: Improvement \ud83d\udd37 Adjacent enemy units ending their turn take [amount] damage Example: \"Adjacent enemy units ending their turn take [20] damage\" Applicable to: Improvement \ud83d\udd37 Great Improvement Applicable to: Improvement \ud83d\udd37 Provides a random bonus when entered Applicable to: Improvement \ud83d\udd37 Unpillagable Applicable to: Improvement \ud83d\udd37 Indestructible Applicable to: Improvement \ud83d\udd37 Irremovable Applicable to: Improvement Resource uniques \ud83d\udd37 Generated with weight [amount] Example: \"Generated with weight [20]\" Applicable to: Resource \ud83d\udd37 Minor deposits generated with weight [amount] Example: \"Minor deposits generated with weight [20]\" Applicable to: Resource \ud83d\udd37 Generated near City States with weight [amount] Example: \"Generated near City States with weight [20]\" Applicable to: Resource \ud83d\udd37 Special placement during map generation Applicable to: Resource \ud83d\udd37 Generated on every [amount] tiles Example: \"Generated on every [20] tiles\" Applicable to: Resource \ud83d\udd37 Guaranteed with Strategic Balance resource option Applicable to: Resource \ud83d\udd37 Deposits in [tileFilter] tiles always provide [amount] resources Example: \"Deposits in [Farm] tiles always provide [20] resources\" Applicable to: Resource \ud83d\udd37 Can only be created by Mercantile City-States Applicable to: Resource Ruins uniques \ud83d\udd37 Free [baseUnitFilter] found in the ruins Example: \"Free [Melee] found in the ruins\" Applicable to: Ruins \ud83d\udd37 [amount] population in a random city Example: \"[20] population in a random city\" Applicable to: Ruins \ud83d\udd37 [amount] free random researchable Tech(s) from the [era] Example: \"[20] free random researchable Tech(s) from the [Ancient era]\" Applicable to: Ruins \ud83d\udd37 Gain [amount] [stat] Example: \"Gain [20] [Culture]\" Applicable to: Ruins \ud83d\udd37 Gain [amount]-[amount] [stat] Example: \"Gain [20]-[20] [Culture]\" Applicable to: Ruins \ud83d\udd37 Gain enough Faith for a Pantheon Applicable to: Ruins \ud83d\udd37 Gain enough Faith for [amount]% of a Great Prophet Example: \"Gain enough Faith for [20]% of a Great Prophet\" Applicable to: Ruins \ud83d\udd37 Reveal up to [amount/'all'] [tileFilter] within a [amount] tile radius Example: \"Reveal up to [amount/'all'] [Farm] within a [20] tile radius\" Applicable to: Ruins \ud83d\udd37 From a randomly chosen tile [amount] tiles away from the ruins, reveal tiles up to [amount] tiles away with [amount]% chance Example: \"From a randomly chosen tile [20] tiles away from the ruins, reveal tiles up to [20] tiles away with [20]% chance\" Applicable to: Ruins \ud83d\udd37 This Unit gains [amount] XP Example: \"This Unit gains [20] XP\" Applicable to: Ruins \ud83d\udd37 This Unit upgrades for free including special upgrades Applicable to: Ruins \ud83d\udd37 Only available after [amount] turns Example: \"Only available after [20] turns\" Applicable to: Ruins \ud83d\udd37 Hidden before founding a Pantheon Applicable to: Ruins \ud83d\udd37 Hidden after founding a Pantheon Applicable to: Ruins \ud83d\udd37 Hidden after generating a Great Prophet Applicable to: Ruins CityState uniques \ud83d\udd37 Provides [stats] per turn Example: \"Provides [+1 Gold, +2 Production] per turn\" Applicable to: CityState \ud83d\udd37 Provides [stats] [cityFilter] per turn Example: \"Provides [+1 Gold, +2 Production] [in all cities] per turn\" Applicable to: CityState \ud83d\udd37 Provides [amount] Happiness Example: \"Provides [20] Happiness\" Applicable to: CityState \ud83d\udd37 Provides military units every \u2248[amount] turns Example: \"Provides military units every \u2248[20] turns\" Applicable to: CityState \ud83d\udd37 Provides a unique luxury Applicable to: CityState Conditional uniques \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional \ud83d\udd37 Example: \" \" Applicable to: Conditional Deprecated uniques \"[stats] from every Wonder\" - Deprecated as of 3.19.1, replace with \"[stats] from every [Wonder]\" \"[stats] from every [buildingFilter] in cities where this religion has at least [amount] followers\" - Deprecated as of 3.19.3, replace with \"[stats] from every [buildingFilter] \" \"+25% Production towards any buildings that already exist in the Capital\" - Deprecated as of 3.19.3, replace with \"[+25]% Production towards any buildings that already exist in the Capital\" \"[amount]% of food is carried over after population increases\" - Deprecated as of 3.19.2, replace with \"[amount]% Food is carried over after population increases [in this city]\" \"[amount]% of food is carried over [cityFilter] after population increases\" - Deprecated as of 3.19.2, replace with \"[amount]% Food is carried over after population increases [cityFilter]\" \"[amount]% Culture cost of natural border growth [cityFilter]\" - Deprecated as of 3.19.2, replace with \"[amount]% Culture cost of natural border growth [cityFilter]\" \"-[amount]% Culture cost of acquiring tiles [cityFilter]\" - Deprecated as of 3.19.1, replace with \"[-amount]% Culture cost of natural border growth [cityFilter]\" \"[amount]% cost of natural border growth\" - Deprecated as of 3.19.1, replace with \"[amount]% Culture cost of natural border growth [in all cities]\" \"-[amount]% Gold cost of acquiring tiles [cityFilter]\" - Deprecated as of 3.19.1, replace with \"[-amount]% Gold cost of acquiring tiles [cityFilter]\" \"[stat] cost of purchasing [baseUnitFilter] units in cities [amount]%\" - Deprecated as of 3.19.3, replace with \"[stat] cost of purchasing [baseUnitFilter] units [amount]%\" \"+[amount]% attacking strength for cities with garrisoned units\" - Deprecated as of 3.19.1, replace with \"[+amount]% Strength for cities \" \"Can embark and move over Coasts and Oceans immediately\" - Deprecated as of 3.19.9, replace with \"Enables embarkation for land units \", \"Enables embarked units to enter ocean tiles \" \"Population loss from nuclear attacks -[amount]%\" - Deprecated as of 3.19.2, replace with \"Population loss from nuclear attacks [-amount]% [in this city]\" \"[amount]% Natural religion spread [cityFilter] with [tech/policy]\" - Deprecated as of 3.19.3, replace with \"[amount]% Natural religion spread [cityFilter] \" OR \"[amount]% Natural religion spread [cityFilter] \" \"[amount] HP when healing in [tileFilter] tiles\" - Deprecated as of 3.19.4, replace with \"[amount] HP when healing \" \"Melee units pay no movement cost to pillage\" - Deprecated as of 3.18.17, replace with \"No movement cost to pillage \" \"Heal adjacent units for an additional 15 HP per turn\" - Deprecated as of 3.19.3, replace with \"All adjacent units heal [+15] HP when healing\" \"+[amount]% attack strength to all [mapUnitFilter] units for [amount2] turns\" - Deprecated as of 3.19.8, replace with \"[+amount]% Strength \" \"Golden Age length increased by [amount]%\" - Deprecated as of 3.18.17, replace with \"[+amount]% Golden Age length\" \"+[amount]% Defensive Strength for cities\" - Deprecated as of 3.18.17, replace with \"[+amount]% Strength for cities \" \"[amount]% Attacking Strength for cities\" - Deprecated as of 3.18.17, replace with \"[+amount]% Strength for cities \" \"[amount]% Strength for [mapUnitFilter] units which have another [mapUnitFilter] unit in an adjacent tile\" - Deprecated as of 3.18.17, replace with \"[amount]% Strength \" \"Gold cost of upgrading [baseUnitFilter] units reduced by [amount]%\" - Deprecated as of 3.18.17, replace with \"[-amount]% Gold cost of upgrading \" \"Double gold from Great Merchant trade missions\" - Deprecated as of 3.18.17, replace with \"[+100]% Gold from Great Merchant trade missions\" \"Defensive buildings in all cities are 25% more effective\" - Deprecated as of 3.18.17, replace with \"[+25]% City Strength from defensive buildings\" \"Maintenance on roads & railroads reduced by [amount]%\" - Deprecated as of 3.18.17, replace with \"[-amount]% maintenance on road & railroads\" \"-[amount]% maintenance cost for buildings [cityFilter]\" - Deprecated as of 3.18.17, replace with \"[-amount]% maintenance cost for buildings [cityFilter]\" \"+[amount] happiness from each type of luxury resource\" - Deprecated as of 3.18.17, replace with \"[+amount] Happiness from each type of luxury resource\" \"Culture cost of adopting new Policies reduced by [amount]%\" - Deprecated as of 3.18.17, replace with \"[-amount]% Culture cost of adopting new Policies\" \"[amount]% Culture cost of adopting new policies\" - Deprecated as of 3.19.1, replace with \"[amount]% Culture cost of adopting new Policies\" \"Quantity of Resources gifted by City-States increased by [amount]%\" - Deprecated as of 3.18.17, replace with \"[+amount]% resources gifted by City-States\" \"City-State Influence degrades [amount]% slower\" - Deprecated as of 3.18.17, replace with \"[-amount]% City-State Influence degradation\" \"Happiness from Luxury Resources gifted by City-States increased by [amount]%\" - Deprecated as of 3.18.17, replace with \"[+amount]% Happiness from luxury resources gifted by City-States\" \"+[amount]% [stat] from every [tileFilter/specialist/buildingName]\" - Deprecated as of 3.18.17, replace with \"[+amount]% [stat] from every [tileFilter/specialist/buildingName]\" \"+[amount]% yield from every [tileFilter]\" - Deprecated as of 3.18.17, replace with \"[+amount]% Yield from every [tileFilter]\" \"[stats] per turn from cities before [tech/policy]\" - Deprecated as of 3.18.14, replace with \"[stats] [in all cities] \" OR \"[stats] [in all cities] \" \"[mapUnitFilter] units gain [amount]% more Experience from combat\" - Deprecated as of 3.18.12, replace with \"[amount]% XP gained from combat \" \"[amount]% maintenance costs for [mapUnitFilter] units\" - Deprecated as of 3.18.14, replace with \"[amount]% maintenance costs \" \"50% of excess happiness added to culture towards policies\" - Deprecated as of 3.18.2, replace with \"[50]% of excess happiness converted to [Culture]\" \"-[amount]% food consumption by specialists [cityFilter]\" - Deprecated as of 3.18.2, replace with \"[-amount]% Food consumption by specialists [cityFilter]\" \"May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] starting from the [era] at an increasing price ([amount])\" - Deprecated as of 3.17.9, removed as of 3.19.3, replace with \"May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] at an increasing price ([amount]) \" \"Provides a free [buildingName] [cityFilter]\" - Deprecated as of 3.17.7 - removed 3.18.19, replace with \"Gain a free [buildingName] [cityFilter]\" \"+[amount]% [stat] [cityFilter]\" - Deprecated as of 3.17.10 - removed 3.18.18, replace with \"[+amount]% [stat] [cityFilter]\" \"+[amount]% [stat] in all cities\" - Deprecated as of 3.17.10 - removed 3.18.18, replace with \"[+amount]% [stat] [in all cities]\" \"[amount]% [stat] while the empire is happy\" - Deprecated as of 3.17.1 - removed 3.18.18, replace with \"[amount]% [stat] [in all cities] \" \"Immediately creates the cheapest available cultural building in each of your first [amount] cities for free\" - Deprecated as of 3.16.15 - removed 3.18.4, replace with \"Provides the cheapest [stat] building in your first [amount] cities for free\" \"Immediately creates a [buildingName] in each of your first [amount] cities for free\" - Deprecated as of 3.16.15 - removed 3.18.4, replace with \"Provides a [buildingName] in your first [amount] cities for free\" \"[mapUnitFilter] units deal +[amount]% damage\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+amount]% Strength \" \"+10% Strength for all units during Golden Age\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+10]% Strength \" \"[amount]% Strength for [mapUnitFilter] units in [tileFilter]\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount]% Strength \" \"+15% Combat Strength for all units when attacking Cities\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+15]% Strength \" \"+[amount] Movement for all [mapUnitFilter] units\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+amount] Movement \" \"+1 Movement for all units during Golden Age\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+1] Movement \" \"[amount] Sight for all [mapUnitFilter] units\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount] Sight \" \"[amount]% Spread Religion Strength for [mapUnitFilter] units\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount]% Spread Religion Strength \" \"+[amount]% Production when constructing [baseUnitFilter] units [cityFilter]\" - Deprecated as of 3.17.10 - removed 3.18.5, replace with \"[+amount]% Production when constructing [baseUnitFilter] units [cityFilter]\" \"+[amount]% Production when constructing [stat] buildings\" - Deprecated as of 3.17.10 - removed 3.18.5, replace with \"[+amount]% Production when constructing [stat] buildings [in all cities]\" \"+[amount]% Production when constructing [constructionFilter]\" - Deprecated as of 3.17.10 - removed 3.18.5, replace with \"[+amount]% Production when constructing [constructionFilter] buildings [in all cities]\" \"+[amount]% Production when constructing a [buildingName]\" - Deprecated as of 3.17.10 - removed 3.18.5, replace with \"[amount]% Production when constructing [buildingName] buildings [in all cities]\" \"+[amount]% Production when constructing [constructionFilter] [cityFilter]\" - Deprecated as of 3.17.10 - removed 3.18.5, replace with \"[amount]% Production when constructing [constructionFilter] buildings [cityFilter]\" \"Increases embarked movement +1\" - Deprecated As of 3.16.11 - removed 3.17.11, replace with \"[+1] Movement \" \"+1 Movement for all embarked units\" - Deprecated As of 3.16.11 - removed 3.17.11, replace with \"[+1] Movement \" \"Unhappiness from population decreased by [amount]%\" - Deprecated As of 3.16.11 - removed 3.17.11, replace with \"[-amount]% unhappiness from population [in all cities]\" \"Unhappiness from population decreased by [amount]% [cityFilter]\" - Deprecated As of 3.16.11 - removed 3.17.11, replace with \"[-amount]% unhappiness from population [cityFilter]\" \"+[amount]% growth [cityFilter]\" - Deprecated As of 3.16.14 - removed 3.17.11, replace with \"[+amount]% growth [cityFilter]\" \"+[amount]% growth [cityFilter] when not at war\" - Deprecated As of 3.16.14 - removed 3.17.11, replace with \"[+amount]% growth [cityFilter] \" \"-[amount]% [mapUnitFilter] unit maintenance costs\" - Deprecated As of 3.16.16 - removed as of 3.17.11, replace with \"[-amount]% maintenance costs \" \"-[amount]% unit upkeep costs\" - Deprecated As of 3.16.16 - removed 3.17.11, replace with \"[amount]% maintenance costs \" \"[stats] from every specialist\" - Deprecated As of 3.16.16 - removed 3.17.11, replace with \"[stats] from every specialist [in all cities]\" \"[stats] if this city has at least [amount] specialists\" - Deprecated As of 3.16.16 - removed 3.17.11, replace with \"[stats] \" \"+1 happiness from each type of luxury resource\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+1] Happiness from each type of luxury resource\" \"-33% unit upkeep costs\" - Deprecated Extremely old - used for auto-updates only, replace with \"[-33]% maintenance costs \" \"-50% food consumption by specialists\" - Deprecated Extremely old - used for auto-updates only, replace with \"[-50]% Food consumption by specialists [in all cities]\" \"+50% attacking strength for cities with garrisoned units\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+50]% Strength for cities \" \"Incompatible with [policy/tech/promotion]\" - Deprecated as of 3.19.8, replace with \"Only available \" OR \"Only available \" OR \"Only available \" \"Not displayed as an available construction without [buildingName/tech/resource/policy]\" - Deprecated as of 3.19.8, replace with \"Only available \" OR \"Only available \" OR \"Only available \" OR \"Only available \" \"Unlocked with [buildingName/tech/era/policy]\" - Deprecated as of 3.19.12, replace with \"Only available \" OR \"Only available \" OR \"Only available \" OR \"Only available \" \"Requires [buildingName/tech/era/policy]\" - Deprecated as of 3.19.12, replace with \"Only available \" OR \"Only available \" OR \"Only available \" OR \"Only available \" \"Cannot be built with [buildingName]\" - Deprecated as of 3.19.9, replace with \"Only available \" \"Requires a [buildingName] in this city\" - Deprecated as of 3.19.9, replace with \"Only available \" \"[stats] with [resource]\" - Deprecated as of 3.19.7, replace with \"[stats] \" \"Not displayed as an available construction unless [buildingName] is built\" - Deprecated as of 3.16.11, replace with \"Not displayed as an available construction without [buildingName]\" \"[stats] once [tech] is discovered\" - Deprecated as of 3.17.10 - removed 3.18.19, replace with \"[stats] \" \"Eliminates combat penalty for attacking from the sea\" - Deprecated as of 3.19.8, replace with \"Eliminates combat penalty for attacking across a coast\" \"[amount]% Bonus XP gain\" - Deprecated as of 3.18.12, replace with \"[amount]% XP gained from combat\" \"Cannot enter ocean tiles until Astronomy\" - Deprecated as of 3.18.6, replace with \"Cannot enter ocean tiles \" \"+[amount]% Strength when attacking\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+amount]% Strength \" \"+[amount]% Strength when defending\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+amount]% Strength \" \"[amount]% Strength when defending vs [mapUnitFilter] units\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount]% Strength \" \"+[amount]% defence in [tileFilter] tiles\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount]% Strength \" \"+[amount]% Strength in [tileFilter]\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount]% Strength \" \"[amount] Visibility Range\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount] Sight\" \"Limited Visibility\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[-1] Sight\" \"Double movement in coast\" - Deprecated As of 3.17.1 - removed 3.17.13, replace with \"Double movement in [Coast]\" \"Double movement rate through Forest and Jungle\" - Deprecated As of 3.17.1 - removed 3.17.13, replace with \"Double movement in [terrainFilter]\" \"Double movement in Snow, Tundra and Hills\" - Deprecated As of 3.17.1 - removed 3.17.13, replace with \"Double movement in [terrainFilter]\" \"+[amount]% Strength\" - Deprecated As of 3.17.3 - removed 3.17.13, replace with \"[+amount]% Strength\" \"-[amount]% Strength\" - Deprecated As of 3.17.3 - removed 3.17.13, replace with \"[-amount]% Strength\" \"+[amount]% Strength vs [combatantFilter]\" - Deprecated As of 3.17.3 - removed 3.17.13, replace with \"[+amount]% Strength \" OR \"[+amount]% Strength \" \"-[amount]% Strength vs [combatantFilter]\" - Deprecated As of 3.17.3 - removed 3.17.13, replace with \"[-amount]% Strength \" OR \"[+amount]% Strength \" \"+[amount]% Combat Strength\" - Deprecated As of 3.17.3 - removed 3.17.13, replace with \"[+amount]% Strength\" \"+1 Visibility Range\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+1] Sight\" \"+[amount] Visibility Range\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+amount] Sight\" \"+[amount] Sight for all [mapUnitFilter] units\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+amount] Sight \" \"+2 Visibility Range\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+2] Sight\" \"Can build improvements on tiles\" - Deprecated Extremely old - used for auto-updates only, replace with \"Can build [Land] improvements on tiles\" \"Science gained from research agreements +50%\" - Deprecated Extremely old - used for auto-updates only, replace with \"Science gained from research agreements [+50]%\" \"Deal [amount] damage to adjacent enemy units\" - Deprecated as of 3.18.17, replace with \"Adjacent enemy units ending their turn take [amount] damage\" \"Cannot be built on [tileFilter] tiles until [tech] is discovered\" - Deprecated as of 3.18.5, replace with \"Cannot be built on [tileFilter] tiles \" \"[stats] on [tileFilter] tiles once [tech] is discovered\" - Deprecated as of 3.17.10 - removed 3.18.19, replace with \"[stats] from [tileFilter] tiles \" \"Deal 30 damage to adjacent enemy units\" - Deprecated as of 3.17.10 - removed 3.18.19, replace with \"Adjacent enemy units ending their turn take [30] damage\"","title":"Uniques"},{"location":"uniques/#table-of-contents","text":"Triggerable uniques Global uniques Nation uniques Tech uniques FollowerBelief uniques Building uniques Unit uniques Promotion uniques Terrain uniques Improvement uniques Resource uniques Ruins uniques CityState uniques Conditional uniques Deprecated uniques","title":"Table of Contents"},{"location":"uniques/#triggerable-uniques","text":"","title":"Triggerable uniques"},{"location":"uniques/#free-baseunitfilter-appears","text":"Example: \"Free [Melee] appears\" Applicable to: Triggerable","title":"🔷 Free [baseUnitFilter] appears"},{"location":"uniques/#amount-free-baseunitfilter-units-appear","text":"Example: \"[20] free [Melee] units appear\" Applicable to: Triggerable","title":"🔷 [amount] free [baseUnitFilter] units appear"},{"location":"uniques/#free-social-policy","text":"Applicable to: Triggerable","title":"🔷 Free Social Policy"},{"location":"uniques/#amount-free-social-policies","text":"Example: \"[20] Free Social Policies\" Applicable to: Triggerable","title":"🔷 [amount] Free Social Policies"},{"location":"uniques/#empire-enters-golden-age","text":"Applicable to: Triggerable","title":"🔷 Empire enters golden age"},{"location":"uniques/#free-great-person","text":"Applicable to: Triggerable","title":"🔷 Free Great Person"},{"location":"uniques/#amount-population-cityfilter","text":"Example: \"[20] population [in all cities]\" Applicable to: Triggerable","title":"🔷 [amount] population [cityFilter]"},{"location":"uniques/#free-technology","text":"Applicable to: Triggerable","title":"🔷 Free Technology"},{"location":"uniques/#amount-free-technologies","text":"Example: \"[20] Free Technologies\" Applicable to: Triggerable","title":"🔷 [amount] Free Technologies"},{"location":"uniques/#reveals-the-entire-map","text":"Applicable to: Triggerable","title":"🔷 Reveals the entire map"},{"location":"uniques/#triggers-voting-for-the-diplomatic-victory","text":"Applicable to: Triggerable","title":"🔷 Triggers voting for the Diplomatic Victory"},{"location":"uniques/#this-unit-gains-the-promotion-promotion","text":"Example: \"This Unit gains the [Shock I] promotion\" Applicable to: Triggerable","title":"🔷 This Unit gains the [promotion] promotion"},{"location":"uniques/#mapunitfilter-units-gain-the-promotion-promotion","text":"Example: \"[Wounded] units gain the [Shock I] promotion\" Applicable to: Triggerable","title":"🔷 [mapUnitFilter] units gain the [promotion] promotion"},{"location":"uniques/#provides-the-cheapest-stat-building-in-your-first-amount-cities-for-free","text":"Example: \"Provides the cheapest [Culture] building in your first [20] cities for free\" Applicable to: Triggerable","title":"🔷 Provides the cheapest [stat] building in your first [amount] cities for free"},{"location":"uniques/#provides-a-buildingname-in-your-first-amount-cities-for-free","text":"Example: \"Provides a [Library] in your first [20] cities for free\" Applicable to: Triggerable","title":"🔷 Provides a [buildingName] in your first [amount] cities for free"},{"location":"uniques/#will-not-be-displayed-in-civilopedia","text":"Applicable to: Triggerable, Global, Nation, Era, Tech, Policy, FounderBelief, FollowerBelief, Building, Wonder, Unit, UnitType, Promotion, Terrain, Improvement, Resource, Ruins, CityState, ModOptions, Conditional","title":"🔷 Will not be displayed in Civilopedia"},{"location":"uniques/#global-uniques","text":"","title":"Global uniques"},{"location":"uniques/#stats","text":"Example: \"[+1 Gold, +2 Production]\" Applicable to: Global, FollowerBelief, Improvement","title":"🔷 [stats]"},{"location":"uniques/#stats-cityfilter","text":"Example: \"[+1 Gold, +2 Production] [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [stats] [cityFilter]"},{"location":"uniques/#stats-from-every-specialist-cityfilter","text":"Example: \"[+1 Gold, +2 Production] from every specialist [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [stats] from every specialist [cityFilter]"},{"location":"uniques/#stats-per-amount-population-cityfilter","text":"Example: \"[+1 Gold, +2 Production] per [20] population [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [stats] per [amount] population [cityFilter]"},{"location":"uniques/#stats-in-cities-with-amount-or-more-population","text":"Example: \"[+1 Gold, +2 Production] in cities with [20] or more population\" Applicable to: Global, FollowerBelief","title":"🔷 [stats] in cities with [amount] or more population"},{"location":"uniques/#stats-in-cities-on-terrainfilter-tiles","text":"Example: \"[+1 Gold, +2 Production] in cities on [Forest] tiles\" Applicable to: Global, FollowerBelief","title":"🔷 [stats] in cities on [terrainFilter] tiles"},{"location":"uniques/#stats-from-all-buildingfilter-buildings","text":"Example: \"[+1 Gold, +2 Production] from all [Culture] buildings\" Applicable to: Global, FollowerBelief","title":"🔷 [stats] from all [buildingFilter] buildings"},{"location":"uniques/#stats-whenever-a-great-person-is-expended","text":"Example: \"[+1 Gold, +2 Production] whenever a Great Person is expended\" Applicable to: Global","title":"🔷 [stats] whenever a Great Person is expended"},{"location":"uniques/#stats-from-tilefilter-tiles-cityfilter","text":"Example: \"[+1 Gold, +2 Production] from [Farm] tiles [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [stats] from [tileFilter] tiles [cityFilter]"},{"location":"uniques/#stats-from-tilefilter-tiles-without-tilefilter-cityfilter","text":"Example: \"[+1 Gold, +2 Production] from [Farm] tiles without [Farm] [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [stats] from [tileFilter] tiles without [tileFilter] [cityFilter]"},{"location":"uniques/#stats-from-every-tilefilterspecialistbuildingfilter","text":"Example: \"[+1 Gold, +2 Production] from every [tileFilter/specialist/buildingFilter]\" Applicable to: Global, FollowerBelief","title":"🔷 [stats] from every [tileFilter/specialist/buildingFilter]"},{"location":"uniques/#stats-from-each-trade-route","text":"Example: \"[+1 Gold, +2 Production] from each Trade Route\" Applicable to: Global, FollowerBelief","title":"🔷 [stats] from each Trade Route"},{"location":"uniques/#amount-stat","text":"Example: \"[20]% [Culture]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% [stat]"},{"location":"uniques/#amount-stat-cityfilter","text":"Example: \"[20]% [Culture] [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% [stat] [cityFilter]"},{"location":"uniques/#amount-stat-from-every-tilefilterspecialistbuildingname","text":"Example: \"[20]% [Culture] from every [tileFilter/specialist/buildingName]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% [stat] from every [tileFilter/specialist/buildingName]"},{"location":"uniques/#amount-yield-from-every-tilefilter","text":"Example: \"[20]% Yield from every [Farm]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Yield from every [tileFilter]"},{"location":"uniques/#amount-stat-from-city-states","text":"Example: \"[20]% [Culture] from City-States\" Applicable to: Global","title":"🔷 [amount]% [stat] from City-States"},{"location":"uniques/#gold-from-all-trade-routes-25","text":"Applicable to: Global","title":"🔷 Gold from all trade routes +25%"},{"location":"uniques/#nullifies-stat-cityfilter","text":"Example: \"Nullifies [Culture] [in all cities]\" Applicable to: Global","title":"🔷 Nullifies [stat] [cityFilter]"},{"location":"uniques/#nullifies-growth-cityfilter","text":"Example: \"Nullifies Growth [in all cities]\" Applicable to: Global","title":"🔷 Nullifies Growth [cityFilter]"},{"location":"uniques/#amount-production-when-constructing-buildingfilter-wonders-cityfilter","text":"Example: \"[20]% Production when constructing [Culture] wonders [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Production when constructing [buildingFilter] wonders [cityFilter]"},{"location":"uniques/#amount-production-when-constructing-buildingfilter-buildings-cityfilter","text":"Example: \"[20]% Production when constructing [Culture] buildings [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Production when constructing [buildingFilter] buildings [cityFilter]"},{"location":"uniques/#amount-production-when-constructing-baseunitfilter-units-cityfilter","text":"Example: \"[20]% Production when constructing [Melee] units [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Production when constructing [baseUnitFilter] units [cityFilter]"},{"location":"uniques/#amount-production-towards-any-buildings-that-already-exist-in-the-capital","text":"Example: \"[20]% Production towards any buildings that already exist in the Capital\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Production towards any buildings that already exist in the Capital"},{"location":"uniques/#tile-yields-from-natural-wonders-doubled","text":"Applicable to: Global","title":"🔷 Tile yields from Natural Wonders doubled"},{"location":"uniques/#military-units-gifted-from-city-states-start-with-amount-xp","text":"Example: \"Military Units gifted from City-States start with [20] XP\" Applicable to: Global","title":"🔷 Military Units gifted from City-States start with [amount] XP"},{"location":"uniques/#militaristic-city-states-grant-units-amount-times-as-fast-when-you-are-at-war-with-a-common-nation","text":"Example: \"Militaristic City-States grant units [20] times as fast when you are at war with a common nation\" Applicable to: Global","title":"🔷 Militaristic City-States grant units [amount] times as fast when you are at war with a common nation"},{"location":"uniques/#gifts-of-gold-to-city-states-generate-amount-more-influence","text":"Example: \"Gifts of Gold to City-States generate [20]% more Influence\" Applicable to: Global","title":"🔷 Gifts of Gold to City-States generate [amount]% more Influence"},{"location":"uniques/#can-spend-gold-to-annex-or-puppet-a-city-state-that-has-been-your-ally-for-amount-turns","text":"Example: \"Can spend Gold to annex or puppet a City-State that has been your ally for [20] turns.\" Applicable to: Global","title":"🔷 Can spend Gold to annex or puppet a City-State that has been your ally for [amount] turns."},{"location":"uniques/#city-state-territory-always-counts-as-friendly-territory","text":"Applicable to: Global","title":"🔷 City-State territory always counts as friendly territory"},{"location":"uniques/#allied-city-states-will-occasionally-gift-great-people","text":"Applicable to: Global","title":"🔷 Allied City-States will occasionally gift Great People"},{"location":"uniques/#amount-city-state-influence-degradation","text":"Example: \"[20]% City-State Influence degradation\" Applicable to: Global","title":"🔷 [amount]% City-State Influence degradation"},{"location":"uniques/#resting-point-for-influence-with-city-states-is-increased-by-amount","text":"Example: \"Resting point for Influence with City-States is increased by [20]\" Applicable to: Global","title":"🔷 Resting point for Influence with City-States is increased by [amount]"},{"location":"uniques/#allied-city-states-provide-stat-equal-to-amount-of-what-they-produce-for-themselves","text":"Example: \"Allied City-States provide [Culture] equal to [20]% of what they produce for themselves\" Applicable to: Global","title":"🔷 Allied City-States provide [stat] equal to [amount]% of what they produce for themselves"},{"location":"uniques/#amount-resources-gifted-by-city-states","text":"Example: \"[20]% resources gifted by City-States\" Applicable to: Global","title":"🔷 [amount]% resources gifted by City-States"},{"location":"uniques/#amount-happiness-from-luxury-resources-gifted-by-city-states","text":"Example: \"[20]% Happiness from luxury resources gifted by City-States\" Applicable to: Global","title":"🔷 [amount]% Happiness from luxury resources gifted by City-States"},{"location":"uniques/#city-state-influence-recovers-at-twice-the-normal-rate","text":"Applicable to: Global","title":"🔷 City-State Influence recovers at twice the normal rate"},{"location":"uniques/#amount-units-cost-no-maintenance","text":"Example: \"[20] units cost no maintenance\" Applicable to: Global","title":"🔷 [amount] units cost no maintenance"},{"location":"uniques/#cannot-build-baseunitfilter-units","text":"Example: \"Cannot build [Melee] units\" Applicable to: Global","title":"🔷 Cannot build [baseUnitFilter] units"},{"location":"uniques/#amount-growth-cityfilter","text":"Example: \"[20]% growth [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% growth [cityFilter]"},{"location":"uniques/#amount-food-is-carried-over-after-population-increases-cityfilter","text":"Example: \"[20]% Food is carried over after population increases [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Food is carried over after population increases [cityFilter]"},{"location":"uniques/#gain-a-free-buildingname-cityfilter","text":"Example: \"Gain a free [Library] [in all cities]\" Applicable to: Global","title":"🔷 Gain a free [buildingName] [cityFilter]"},{"location":"uniques/#amount-great-person-generation-cityfilter","text":"Example: \"[20]% Great Person generation [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Great Person generation [cityFilter]"},{"location":"uniques/#amount-great-person-generation-cityfilter_1","text":"Example: \"[20]% great person generation [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% great person generation [cityFilter]"},{"location":"uniques/#may-choose-amount-additional-belieftype-beliefs-when-foundingorenhancing-a-religion","text":"Example: \"May choose [20] additional [Follower] beliefs when [founding] a religion\" Applicable to: Global","title":"🔷 May choose [amount] additional [beliefType] beliefs when [foundingOrEnhancing] a religion"},{"location":"uniques/#may-choose-amount-additional-beliefs-of-any-type-when-foundingorenhancing-a-religion","text":"Example: \"May choose [20] additional belief(s) of any type when [founding] a religion\" Applicable to: Global","title":"🔷 May choose [amount] additional belief(s) of any type when [foundingOrEnhancing] a religion"},{"location":"uniques/#amount-unhappiness-from-population-cityfilter","text":"Example: \"[20]% unhappiness from population [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% unhappiness from population [cityFilter]"},{"location":"uniques/#amount-unhappiness-from-specialists-cityfilter","text":"Example: \"[20]% unhappiness from specialists [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% unhappiness from specialists [cityFilter]"},{"location":"uniques/#amount-food-consumption-by-specialists-cityfilter","text":"Example: \"[20]% Food consumption by specialists [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Food consumption by specialists [cityFilter]"},{"location":"uniques/#provides-1-happiness-per-2-additional-social-policies-adopted","text":"Applicable to: Global","title":"🔷 Provides 1 happiness per 2 additional social policies adopted"},{"location":"uniques/#amount-of-excess-happiness-converted-to-stat","text":"Example: \"[20]% of excess happiness converted to [Culture]\" Applicable to: Global","title":"🔷 [amount]% of excess happiness converted to [stat]"},{"location":"uniques/#amount-culture-cost-of-natural-border-growth-cityfilter","text":"Example: \"[20]% Culture cost of natural border growth [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Culture cost of natural border growth [cityFilter]"},{"location":"uniques/#amount-gold-cost-of-acquiring-tiles-cityfilter","text":"Example: \"[20]% Gold cost of acquiring tiles [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Gold cost of acquiring tiles [cityFilter]"},{"location":"uniques/#may-buy-baseunitfilter-units-for-amount-stat-cityfilter-at-an-increasing-price-amount","text":"Example: \"May buy [Melee] units for [20] [Culture] [in all cities] at an increasing price ([20])\" Applicable to: Global, FollowerBelief","title":"🔷 May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] at an increasing price ([amount])"},{"location":"uniques/#may-buy-buildingfilter-buildings-for-amount-stat-cityfilter-at-an-increasing-price-amount","text":"Example: \"May buy [Culture] buildings for [20] [Culture] [in all cities] at an increasing price ([20])\" Applicable to: Global, FollowerBelief","title":"🔷 May buy [buildingFilter] buildings for [amount] [stat] [cityFilter] at an increasing price ([amount])"},{"location":"uniques/#may-buy-baseunitfilter-units-for-amount-stat-cityfilter","text":"Example: \"May buy [Melee] units for [20] [Culture] [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 May buy [baseUnitFilter] units for [amount] [stat] [cityFilter]"},{"location":"uniques/#may-buy-buildingfilter-buildings-for-amount-stat-cityfilter","text":"Example: \"May buy [Culture] buildings for [20] [Culture] [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 May buy [buildingFilter] buildings for [amount] [stat] [cityFilter]"},{"location":"uniques/#may-buy-baseunitfilter-units-with-stat-cityfilter","text":"Example: \"May buy [Melee] units with [Culture] [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 May buy [baseUnitFilter] units with [stat] [cityFilter]"},{"location":"uniques/#may-buy-buildingfilter-buildings-with-stat-cityfilter","text":"Example: \"May buy [Culture] buildings with [Culture] [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 May buy [buildingFilter] buildings with [stat] [cityFilter]"},{"location":"uniques/#may-buy-baseunitfilter-units-with-stat-for-amount-times-their-normal-production-cost","text":"Example: \"May buy [Melee] units with [Culture] for [20] times their normal Production cost\" Applicable to: Global, FollowerBelief","title":"🔷 May buy [baseUnitFilter] units with [stat] for [amount] times their normal Production cost"},{"location":"uniques/#may-buy-buildingfilter-buildings-with-stat-for-amount-times-their-normal-production-cost","text":"Example: \"May buy [Culture] buildings with [Culture] for [20] times their normal Production cost\" Applicable to: Global, FollowerBelief","title":"🔷 May buy [buildingFilter] buildings with [stat] for [amount] times their normal Production cost"},{"location":"uniques/#enables-conversion-of-city-production-to-gold","text":"Applicable to: Global","title":"🔷 Enables conversion of city production to gold"},{"location":"uniques/#enables-conversion-of-city-production-to-science","text":"Applicable to: Global","title":"🔷 Enables conversion of city production to science"},{"location":"uniques/#stat-cost-of-purchasing-items-in-cities-amount","text":"Example: \"[Culture] cost of purchasing items in cities [20]%\" Applicable to: Global, FollowerBelief","title":"🔷 [stat] cost of purchasing items in cities [amount]%"},{"location":"uniques/#stat-cost-of-purchasing-buildingfilter-buildings-amount","text":"Example: \"[Culture] cost of purchasing [Culture] buildings [20]%\" Applicable to: Global, FollowerBelief","title":"🔷 [stat] cost of purchasing [buildingFilter] buildings [amount]%"},{"location":"uniques/#stat-cost-of-purchasing-baseunitfilter-units-amount","text":"Example: \"[Culture] cost of purchasing [Melee] units [20]%\" Applicable to: Global, FollowerBelief","title":"🔷 [stat] cost of purchasing [baseUnitFilter] units [amount]%"},{"location":"uniques/#improves-movement-speed-on-roads","text":"Applicable to: Global","title":"🔷 Improves movement speed on roads"},{"location":"uniques/#roads-connect-tiles-across-rivers","text":"Applicable to: Global","title":"🔷 Roads connect tiles across rivers"},{"location":"uniques/#amount-maintenance-on-road-railroads","text":"Example: \"[20]% maintenance on road & railroads\" Applicable to: Global","title":"🔷 [amount]% maintenance on road & railroads"},{"location":"uniques/#amount-maintenance-cost-for-buildings-cityfilter","text":"Example: \"[20]% maintenance cost for buildings [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% maintenance cost for buildings [cityFilter]"},{"location":"uniques/#receive-a-free-great-person-at-the-end-of-every-comment-every-394-years-after-researching-tech-each-bonus-person-can-only-be-chosen-once","text":"Example: \"Receive a free Great Person at the end of every [comment] (every 394 years), after researching [Agriculture]. Each bonus person can only be chosen once.\" Applicable to: Global","title":"🔷 Receive a free Great Person at the end of every [comment] (every 394 years), after researching [tech]. Each bonus person can only be chosen once."},{"location":"uniques/#once-the-long-count-activates-the-year-on-the-world-screen-displays-as-the-traditional-mayan-long-count","text":"Applicable to: Global","title":"🔷 Once The Long Count activates, the year on the world screen displays as the traditional Mayan Long Count."},{"location":"uniques/#retain-amount-of-the-happiness-from-a-luxury-after-the-last-copy-has-been-traded-away","text":"Example: \"Retain [20]% of the happiness from a luxury after the last copy has been traded away\" Applicable to: Global","title":"🔷 Retain [amount]% of the happiness from a luxury after the last copy has been traded away"},{"location":"uniques/#amount-happiness-from-each-type-of-luxury-resource","text":"Example: \"[20] Happiness from each type of luxury resource\" Applicable to: Global","title":"🔷 [amount] Happiness from each type of luxury resource"},{"location":"uniques/#each-city-founded-increases-culture-cost-of-policies-amount-less-than-normal","text":"Example: \"Each city founded increases culture cost of policies [20]% less than normal\" Applicable to: Global","title":"🔷 Each city founded increases culture cost of policies [amount]% less than normal"},{"location":"uniques/#amount-culture-cost-of-adopting-new-policies","text":"Example: \"[20]% Culture cost of adopting new Policies\" Applicable to: Global","title":"🔷 [amount]% Culture cost of adopting new Policies"},{"location":"uniques/#quantity-of-strategic-resources-produced-by-the-empire-amount","text":"Example: \"Quantity of strategic resources produced by the empire +[20]%\" Applicable to: Global","title":"🔷 Quantity of strategic resources produced by the empire +[amount]%"},{"location":"uniques/#double-quantity-of-resource-produced","text":"Example: \"Double quantity of [Iron] produced\" Applicable to: Global","title":"🔷 Double quantity of [resource] produced"},{"location":"uniques/#double-happiness-from-natural-wonders","text":"Applicable to: Global","title":"🔷 Double Happiness from Natural Wonders"},{"location":"uniques/#enables-construction-of-spaceship-parts","text":"Applicable to: Global","title":"🔷 Enables construction of Spaceship parts"},{"location":"uniques/#enemy-land-units-must-spend-1-extra-movement-point-when-inside-your-territory-obsolete-upon-dynamite","text":"Applicable to: Global","title":"🔷 Enemy land units must spend 1 extra movement point when inside your territory (obsolete upon Dynamite)"},{"location":"uniques/#production-to-science-conversion-in-cities-increased-by-33","text":"Applicable to: Global","title":"🔷 Production to science conversion in cities increased by 33%"},{"location":"uniques/#notified-of-new-barbarian-encampments","text":"Applicable to: Global","title":"🔷 Notified of new Barbarian encampments"},{"location":"uniques/#borrows-city-names-from-other-civilizations-in-the-game","text":"Applicable to: Global","title":"🔷 \"Borrows\" city names from other civilizations in the game"},{"location":"uniques/#units-fight-as-though-they-were-at-full-strength-even-when-damaged","text":"Applicable to: Global","title":"🔷 Units fight as though they were at full strength even when damaged"},{"location":"uniques/#100-gold-for-discovering-a-natural-wonder-bonus-enhanced-to-500-gold-if-first-to-discover-it","text":"Applicable to: Global","title":"🔷 100 Gold for discovering a Natural Wonder (bonus enhanced to 500 Gold if first to discover it)"},{"location":"uniques/#unhappiness-from-number-of-cities-doubled","text":"Applicable to: Global","title":"🔷 Unhappiness from number of Cities doubled"},{"location":"uniques/#great-general-provides-double-combat-bonus","text":"Applicable to: Global","title":"🔷 Great General provides double combat bonus"},{"location":"uniques/#receive-a-tech-boost-when-scientific-buildingswonders-are-built-in-capital","text":"Applicable to: Global","title":"🔷 Receive a tech boost when scientific buildings/wonders are built in capital"},{"location":"uniques/#may-not-generate-great-prophet-equivalents-naturally","text":"Applicable to: Global","title":"🔷 May not generate great prophet equivalents naturally"},{"location":"uniques/#67-chance-to-earn-25-gold-and-recruit-a-barbarian-unit-from-a-conquered-encampment","text":"Applicable to: Global","title":"🔷 67% chance to earn 25 Gold and recruit a Barbarian unit from a conquered encampment"},{"location":"uniques/#50-chance-of-capturing-defeated-barbarian-naval-units-and-earning-25-gold","text":"Applicable to: Global","title":"🔷 50% chance of capturing defeated Barbarian naval units and earning 25 Gold"},{"location":"uniques/#receive-triple-gold-from-barbarian-encampments-and-pillaging-cities","text":"Applicable to: Global","title":"🔷 Receive triple Gold from Barbarian encampments and pillaging Cities"},{"location":"uniques/#enables-open-borders-agreements","text":"Applicable to: Global","title":"🔷 Enables Open Borders agreements"},{"location":"uniques/#enables-research-agreements","text":"Applicable to: Global","title":"🔷 Enables Research agreements"},{"location":"uniques/#science-gained-from-research-agreements-amount","text":"Example: \"Science gained from research agreements [20]%\" Applicable to: Global","title":"🔷 Science gained from research agreements [amount]%"},{"location":"uniques/#triggers-victory","text":"Applicable to: Global","title":"🔷 Triggers victory"},{"location":"uniques/#triggers-a-cultural-victory-upon-completion","text":"Applicable to: Global","title":"🔷 Triggers a Cultural Victory upon completion"},{"location":"uniques/#amount-city-strength-from-defensive-buildings","text":"Example: \"[20]% City Strength from defensive buildings\" Applicable to: Global","title":"🔷 [amount]% City Strength from defensive buildings"},{"location":"uniques/#amount-tile-improvement-construction-time","text":"Example: \"[20]% tile improvement construction time\" Applicable to: Global","title":"🔷 [amount]% tile improvement construction time"},{"location":"uniques/#amount-gold-from-great-merchant-trade-missions","text":"Example: \"[20]% Gold from Great Merchant trade missions\" Applicable to: Global","title":"🔷 [amount]% Gold from Great Merchant trade missions"},{"location":"uniques/#mapunitfilter-units-adjacent-to-this-city-heal-amount-hp-per-turn-when-healing","text":"Example: \"[Wounded] Units adjacent to this city heal [20] HP per turn when healing\" Applicable to: Global, FollowerBelief","title":"🔷 [mapUnitFilter] Units adjacent to this city heal [amount] HP per turn when healing"},{"location":"uniques/#amount-golden-age-length","text":"Example: \"[20]% Golden Age length\" Applicable to: Global","title":"🔷 [amount]% Golden Age length"},{"location":"uniques/#amount-strength-for-cities","text":"Example: \"[20]% Strength for cities\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Strength for cities"},{"location":"uniques/#new-baseunitfilter-units-start-with-amount-experience-cityfilter","text":"Example: \"New [Melee] units start with [20] Experience [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 New [baseUnitFilter] units start with [amount] Experience [cityFilter]"},{"location":"uniques/#all-newly-trained-baseunitfilter-units-cityfilter-receive-the-promotion-promotion","text":"Example: \"All newly-trained [Melee] units [in all cities] receive the [Shock I] promotion\" Applicable to: Global, FollowerBelief","title":"🔷 All newly-trained [baseUnitFilter] units [cityFilter] receive the [promotion] promotion"},{"location":"uniques/#baseunitfilter-units-built-cityfilter-can-action-amount-extra-times","text":"Example: \"[Melee] units built [in all cities] can [action] [20] extra times\" Applicable to: Global, FollowerBelief","title":"🔷 [baseUnitFilter] units built [cityFilter] can [action] [amount] extra times"},{"location":"uniques/#enables-embarkation-for-land-units","text":"Applicable to: Global","title":"🔷 Enables embarkation for land units"},{"location":"uniques/#enables-embarked-units-to-enter-ocean-tiles","text":"Applicable to: Global","title":"🔷 Enables embarked units to enter ocean tiles"},{"location":"uniques/#population-loss-from-nuclear-attacks-amount-cityfilter","text":"Example: \"Population loss from nuclear attacks [20]% [in all cities]\" Applicable to: Global","title":"🔷 Population loss from nuclear attacks [amount]% [cityFilter]"},{"location":"uniques/#amount-natural-religion-spread-cityfilter","text":"Example: \"[20]% Natural religion spread [in all cities]\" Applicable to: Global, FollowerBelief","title":"🔷 [amount]% Natural religion spread [cityFilter]"},{"location":"uniques/#religion-naturally-spreads-to-cities-amount-tiles-away","text":"Example: \"Religion naturally spreads to cities [20] tiles away\" Applicable to: Global, FollowerBelief","title":"🔷 Religion naturally spreads to cities [amount] tiles away"},{"location":"uniques/#can-be-continually-researched","text":"Applicable to: Global","title":"🔷 Can be continually researched"},{"location":"uniques/#amount-unit-supply","text":"Example: \"[20] Unit Supply\" Applicable to: Global","title":"🔷 [amount] Unit Supply"},{"location":"uniques/#amount-unit-supply-per-amount-population-cityfilter","text":"Example: \"[20] Unit Supply per [20] population [in all cities]\" Applicable to: Global","title":"🔷 [amount] Unit Supply per [amount] population [cityFilter]"},{"location":"uniques/#amount-unit-supply-per-city","text":"Example: \"[20] Unit Supply per city\" Applicable to: Global","title":"🔷 [amount] Unit Supply per city"},{"location":"uniques/#units-in-cities-cost-no-maintenance","text":"Applicable to: Global","title":"🔷 Units in cities cost no Maintenance"},{"location":"uniques/#rebel-units-may-spawn","text":"Applicable to: Global","title":"🔷 Rebel units may spawn"},{"location":"uniques/#amount-strength","text":"Example: \"[20]% Strength\" Applicable to: Global, Unit","title":"🔷 [amount]% Strength"},{"location":"uniques/#amount-strength-decreasing-with-distance-from-the-capital","text":"Example: \"[20]% Strength decreasing with distance from the capital\" Applicable to: Global, Unit","title":"🔷 [amount]% Strength decreasing with distance from the capital"},{"location":"uniques/#amount-to-flank-attack-bonuses","text":"Example: \"[20]% to Flank Attack bonuses\" Applicable to: Global, Unit","title":"🔷 [amount]% to Flank Attack bonuses"},{"location":"uniques/#30-strength-when-fighting-city-state-units-and-cities","text":"Applicable to: Global","title":"🔷 +30% Strength when fighting City-State units and cities"},{"location":"uniques/#amount-movement","text":"Example: \"[20] Movement\" Applicable to: Global, Unit","title":"🔷 [amount] Movement"},{"location":"uniques/#amount-sight","text":"Example: \"[20] Sight\" Applicable to: Global, Unit, Terrain","title":"🔷 [amount] Sight"},{"location":"uniques/#amount-range","text":"Example: \"[20] Range\" Applicable to: Global, Unit","title":"🔷 [amount] Range"},{"location":"uniques/#amount-hp-when-healing","text":"Example: \"[20] HP when healing\" Applicable to: Global, Unit","title":"🔷 [amount] HP when healing"},{"location":"uniques/#amount-spread-religion-strength","text":"Example: \"[20]% Spread Religion Strength\" Applicable to: Global, Unit","title":"🔷 [amount]% Spread Religion Strength"},{"location":"uniques/#no-defensive-terrain-bonus","text":"Applicable to: Global, Unit","title":"🔷 No defensive terrain bonus"},{"location":"uniques/#no-defensive-terrain-penalty","text":"Applicable to: Global, Unit","title":"🔷 No defensive terrain penalty"},{"location":"uniques/#no-movement-cost-to-pillage","text":"Applicable to: Global, Unit","title":"🔷 No movement cost to pillage"},{"location":"uniques/#may-heal-outside-of-friendly-territory","text":"Applicable to: Global, Unit","title":"🔷 May heal outside of friendly territory"},{"location":"uniques/#all-healing-effects-doubled","text":"Applicable to: Global, Unit","title":"🔷 All healing effects doubled"},{"location":"uniques/#heals-amount-damage-if-it-kills-a-unit","text":"Example: \"Heals [20] damage if it kills a unit\" Applicable to: Global, Unit","title":"🔷 Heals [amount] damage if it kills a unit"},{"location":"uniques/#can-only-heal-by-pillaging","text":"Applicable to: Global, Unit","title":"🔷 Can only heal by pillaging"},{"location":"uniques/#normal-vision-when-embarked","text":"Applicable to: Global, Unit","title":"🔷 Normal vision when embarked"},{"location":"uniques/#defense-bonus-when-embarked","text":"Applicable to: Global, Unit","title":"🔷 Defense bonus when embarked"},{"location":"uniques/#embarked-units-can-defend-themselves","text":"Applicable to: Global","title":"🔷 Embarked units can defend themselves"},{"location":"uniques/#amount-maintenance-costs","text":"Example: \"[20]% maintenance costs\" Applicable to: Global, Unit","title":"🔷 [amount]% maintenance costs"},{"location":"uniques/#amount-gold-cost-of-upgrading","text":"Example: \"[20]% Gold cost of upgrading\" Applicable to: Global, Unit","title":"🔷 [amount]% Gold cost of upgrading"},{"location":"uniques/#greatperson-is-earned-amount-faster","text":"Example: \"[greatPerson] is earned [20]% faster\" Applicable to: Global, Unit","title":"🔷 [greatPerson] is earned [amount]% faster"},{"location":"uniques/#earn-amount-of-the-damage-done-to-mapunitfilter-units-as-plunderablestat","text":"Example: \"Earn [20]% of the damage done to [Wounded] units as [Gold]\" Applicable to: Global, Unit","title":"🔷 Earn [amount]% of the damage done to [mapUnitFilter] units as [plunderableStat]"},{"location":"uniques/#upon-capturing-a-city-receive-amount-times-its-stat-production-as-plunderablestat-immediately","text":"Example: \"Upon capturing a city, receive [20] times its [Culture] production as [Gold] immediately\" Applicable to: Global, Unit","title":"🔷 Upon capturing a city, receive [amount] times its [stat] production as [plunderableStat] immediately"},{"location":"uniques/#earn-amount-of-killed-mapunitfilter-units-costorstrength-as-plunderablestat","text":"Example: \"Earn [20]% of killed [Wounded] unit's [Cost] as [Gold]\" Applicable to: Global, Unit","title":"🔷 Earn [amount]% of killed [mapUnitFilter] unit's [costOrStrength] as [plunderableStat]"},{"location":"uniques/#amount-xp-gained-from-combat","text":"Example: \"[20] XP gained from combat\" Applicable to: Global, Unit","title":"🔷 [amount] XP gained from combat"},{"location":"uniques/#amount-xp-gained-from-combat_1","text":"Example: \"[20]% XP gained from combat\" Applicable to: Global, Unit","title":"🔷 [amount]% XP gained from combat"},{"location":"uniques/#this-unit-upgrades-for-free","text":"Applicable to: Global","title":"🔷 This Unit upgrades for free"},{"location":"uniques/#nation-uniques","text":"","title":"Nation uniques"},{"location":"uniques/#will-not-be-chosen-for-new-games","text":"Applicable to: Nation","title":"🔷 Will not be chosen for new games"},{"location":"uniques/#starts-with-tech","text":"Example: \"Starts with [Agriculture]\" Applicable to: Nation","title":"🔷 Starts with [tech]"},{"location":"uniques/#tech-uniques","text":"","title":"Tech uniques"},{"location":"uniques/#starting-tech","text":"Applicable to: Tech","title":"🔷 Starting tech"},{"location":"uniques/#only-available","text":"Applicable to: Tech, Policy, Building, Unit, Promotion, Improvement","title":"🔷 Only available"},{"location":"uniques/#followerbelief-uniques","text":"","title":"FollowerBelief uniques"},{"location":"uniques/#amount-stat-from-every-follower-up-to-amount","text":"Example: \"[20]% [Culture] from every follower, up to [20]%\" Applicable to: FollowerBelief","title":"🔷 [amount]% [stat] from every follower, up to [amount]%"},{"location":"uniques/#earn-amount-of-mapunitfilter-units-costorstrength-as-plunderablestat-when-killed-within-4-tiles-of-a-city-following-this-religion","text":"Example: \"Earn [20]% of [Wounded] unit's [Cost] as [Gold] when killed within 4 tiles of a city following this religion\" Applicable to: FollowerBelief","title":"🔷 Earn [amount]% of [mapUnitFilter] unit's [costOrStrength] as [plunderableStat] when killed within 4 tiles of a city following this religion"},{"location":"uniques/#building-uniques","text":"","title":"Building uniques"},{"location":"uniques/#consumes-amount-resource","text":"Example: \"Consumes [20] [Iron]\" Applicable to: Building, Unit, Improvement","title":"🔷 Consumes [amount] [resource]"},{"location":"uniques/#provides-amount-resource","text":"Example: \"Provides [20] [Iron]\" Applicable to: Building, Improvement","title":"🔷 Provides [amount] [resource]"},{"location":"uniques/#unbuildable","text":"Applicable to: Building, Unit","title":"🔷 Unbuildable"},{"location":"uniques/#cannot-be-purchased","text":"Applicable to: Building, Unit","title":"🔷 Cannot be purchased"},{"location":"uniques/#can-be-purchased-with-stat-cityfilter","text":"Example: \"Can be purchased with [Culture] [in all cities]\" Applicable to: Building, Unit","title":"🔷 Can be purchased with [stat] [cityFilter]"},{"location":"uniques/#can-be-purchased-for-amount-stat-cityfilter","text":"Example: \"Can be purchased for [20] [Culture] [in all cities]\" Applicable to: Building, Unit","title":"🔷 Can be purchased for [amount] [stat] [cityFilter]"},{"location":"uniques/#limited-to-amount-per-civilization","text":"Example: \"Limited to [20] per Civilization\" Applicable to: Building, Unit","title":"🔷 Limited to [amount] per Civilization"},{"location":"uniques/#hidden-until-amount-social-policy-branches-have-been-completed","text":"Example: \"Hidden until [20] social policy branches have been completed\" Applicable to: Building, Unit","title":"🔷 Hidden until [amount] social policy branches have been completed"},{"location":"uniques/#excess-food-converted-to-production-when-under-construction","text":"Applicable to: Building, Unit","title":"🔷 Excess Food converted to Production when under construction"},{"location":"uniques/#requires-at-least-amount-population","text":"Example: \"Requires at least [20] population\" Applicable to: Building, Unit","title":"🔷 Requires at least [amount] population"},{"location":"uniques/#cost-increases-by-amount-per-owned-city","text":"Example: \"Cost increases by [20] per owned city\" Applicable to: Building","title":"🔷 Cost increases by [amount] per owned city"},{"location":"uniques/#requires-a-buildingname-in-all-cities","text":"Example: \"Requires a [Library] in all cities\" Applicable to: Building","title":"🔷 Requires a [buildingName] in all cities"},{"location":"uniques/#requires-a-buildingname-in-at-least-amount-cities","text":"Example: \"Requires a [Library] in at least [20] cities\" Applicable to: Building","title":"🔷 Requires a [buildingName] in at least [amount] cities"},{"location":"uniques/#must-be-on-terrainfilter","text":"Example: \"Must be on [Forest]\" Applicable to: Building","title":"🔷 Must be on [terrainFilter]"},{"location":"uniques/#must-not-be-on-terrainfilter","text":"Example: \"Must not be on [Forest]\" Applicable to: Building","title":"🔷 Must not be on [terrainFilter]"},{"location":"uniques/#must-be-next-to-terrainfilter","text":"Example: \"Must be next to [Forest]\" Applicable to: Building, Improvement","title":"🔷 Must be next to [terrainFilter]"},{"location":"uniques/#must-not-be-next-to-terrainfilter","text":"Example: \"Must not be next to [Forest]\" Applicable to: Building","title":"🔷 Must not be next to [terrainFilter]"},{"location":"uniques/#unsellable","text":"Applicable to: Building","title":"🔷 Unsellable"},{"location":"uniques/#obsolete-with-tech","text":"Example: \"Obsolete with [Agriculture]\" Applicable to: Building, Improvement, Resource","title":"🔷 Obsolete with [tech]"},{"location":"uniques/#indicates-the-capital-city","text":"Applicable to: Building","title":"🔷 Indicates the capital city"},{"location":"uniques/#provides-1-extra-copy-of-each-improved-luxury-resource-near-this-city","text":"Applicable to: Building","title":"🔷 Provides 1 extra copy of each improved luxury resource near this City"},{"location":"uniques/#destroyed-when-the-city-is-captured","text":"Applicable to: Building","title":"🔷 Destroyed when the city is captured"},{"location":"uniques/#never-destroyed-when-the-city-is-captured","text":"Applicable to: Building","title":"🔷 Never destroyed when the city is captured"},{"location":"uniques/#doubles-gold-given-to-enemy-if-city-is-captured","text":"Applicable to: Building","title":"🔷 Doubles Gold given to enemy if city is captured"},{"location":"uniques/#remove-extra-unhappiness-from-annexed-cities","text":"Applicable to: Building","title":"🔷 Remove extra unhappiness from annexed cities"},{"location":"uniques/#spaceship-part","text":"Applicable to: Building, Unit","title":"🔷 Spaceship part"},{"location":"uniques/#hidden-when-religion-is-disabled","text":"Applicable to: Building, Unit, Ruins","title":"🔷 Hidden when religion is disabled"},{"location":"uniques/#hidden-when-victorytype-victory-is-disabled","text":"Example: \"Hidden when [Domination] Victory is disabled\" Applicable to: Building, Unit","title":"🔷 Hidden when [victoryType] Victory is disabled"},{"location":"uniques/#unit-uniques","text":"","title":"Unit uniques"},{"location":"uniques/#founds-a-new-city","text":"Applicable to: Unit","title":"🔷 Founds a new city"},{"location":"uniques/#can-construct-improvementname","text":"Example: \"Can construct [Trading Post]\" Applicable to: Unit","title":"🔷 Can construct [improvementName]"},{"location":"uniques/#can-build-improvementfilterterrainfilter-improvements-on-tiles","text":"Example: \"Can build [improvementFilter/terrainFilter] improvements on tiles\" Applicable to: Unit","title":"🔷 Can build [improvementFilter/terrainFilter] improvements on tiles"},{"location":"uniques/#may-create-improvements-on-water-resources","text":"Applicable to: Unit","title":"🔷 May create improvements on water resources"},{"location":"uniques/#may-found-a-religion","text":"Applicable to: Unit","title":"🔷 May found a religion"},{"location":"uniques/#may-enhance-a-religion","text":"Applicable to: Unit","title":"🔷 May enhance a religion"},{"location":"uniques/#can-only-attack-combatantfilter-units","text":"Example: \"Can only attack [City] units\" Applicable to: Unit","title":"🔷 Can only attack [combatantFilter] units"},{"location":"uniques/#can-only-attack-tilefilter-tiles","text":"Example: \"Can only attack [Farm] tiles\" Applicable to: Unit","title":"🔷 Can only attack [tileFilter] tiles"},{"location":"uniques/#cannot-attack","text":"Applicable to: Unit","title":"🔷 Cannot attack"},{"location":"uniques/#must-set-up-to-ranged-attack","text":"Applicable to: Unit","title":"🔷 Must set up to ranged attack"},{"location":"uniques/#self-destructs-when-attacking","text":"Applicable to: Unit","title":"🔷 Self-destructs when attacking"},{"location":"uniques/#blast-radius-amount","text":"Example: \"Blast radius [20]\" Applicable to: Unit","title":"🔷 Blast radius [amount]"},{"location":"uniques/#ranged-attacks-may-be-performed-over-obstacles","text":"Applicable to: Unit","title":"🔷 Ranged attacks may be performed over obstacles"},{"location":"uniques/#uncapturable","text":"Applicable to: Unit","title":"🔷 Uncapturable"},{"location":"uniques/#may-withdraw-before-melee-amount","text":"Example: \"May withdraw before melee ([20]%)\" Applicable to: Unit","title":"🔷 May withdraw before melee ([amount]%)"},{"location":"uniques/#unable-to-capture-cities","text":"Applicable to: Unit","title":"🔷 Unable to capture cities"},{"location":"uniques/#can-move-after-attacking","text":"Applicable to: Unit","title":"🔷 Can move after attacking"},{"location":"uniques/#can-move-immediately-once-bought","text":"Applicable to: Unit","title":"🔷 Can move immediately once bought"},{"location":"uniques/#unit-will-heal-every-turn-even-if-it-performs-an-action","text":"Applicable to: Unit","title":"🔷 Unit will heal every turn, even if it performs an action"},{"location":"uniques/#all-adjacent-units-heal-amount-hp-when-healing","text":"Example: \"All adjacent units heal [20] HP when healing\" Applicable to: Unit","title":"🔷 All adjacent units heal [amount] HP when healing"},{"location":"uniques/#eliminates-combat-penalty-for-attacking-across-a-coast","text":"Applicable to: Unit","title":"🔷 Eliminates combat penalty for attacking across a coast"},{"location":"uniques/#6-tiles-in-every-direction-always-visible","text":"Applicable to: Unit","title":"🔷 6 tiles in every direction always visible"},{"location":"uniques/#can-carry-amount-mapunitfilter-units","text":"Example: \"Can carry [20] [Wounded] units\" Applicable to: Unit","title":"🔷 Can carry [amount] [mapUnitFilter] units"},{"location":"uniques/#can-carry-amount-extra-mapunitfilter-units","text":"Example: \"Can carry [20] extra [Wounded] units\" Applicable to: Unit","title":"🔷 Can carry [amount] extra [mapUnitFilter] units"},{"location":"uniques/#cannot-be-carried-by-mapunitfilter-units","text":"Example: \"Cannot be carried by [Wounded] units\" Applicable to: Unit","title":"🔷 Cannot be carried by [mapUnitFilter] units"},{"location":"uniques/#may-capture-killed-mapunitfilter-units","text":"Example: \"May capture killed [Wounded] units\" Applicable to: Unit","title":"🔷 May capture killed [mapUnitFilter] units"},{"location":"uniques/#invisible-to-others","text":"Applicable to: Unit","title":"🔷 Invisible to others"},{"location":"uniques/#invisible-to-non-adjacent-units","text":"Applicable to: Unit","title":"🔷 Invisible to non-adjacent units"},{"location":"uniques/#can-see-invisible-mapunitfilter-units","text":"Example: \"Can see invisible [Wounded] units\" Applicable to: Unit","title":"🔷 Can see invisible [mapUnitFilter] units"},{"location":"uniques/#may-upgrade-to-baseunitfilter-through-ruins-like-effects","text":"Example: \"May upgrade to [Melee] through ruins-like effects\" Applicable to: Unit","title":"🔷 May upgrade to [baseUnitFilter] through ruins-like effects"},{"location":"uniques/#double-movement-in-terrainfilter","text":"Example: \"Double movement in [Forest]\" Applicable to: Unit","title":"🔷 Double movement in [terrainFilter]"},{"location":"uniques/#all-tiles-cost-1-movement","text":"Applicable to: Unit","title":"🔷 All tiles cost 1 movement"},{"location":"uniques/#can-pass-through-impassable-tiles","text":"Applicable to: Unit","title":"🔷 Can pass through impassable tiles"},{"location":"uniques/#ignores-terrain-cost","text":"Applicable to: Unit","title":"🔷 Ignores terrain cost"},{"location":"uniques/#ignores-zone-of-control","text":"Applicable to: Unit","title":"🔷 Ignores Zone of Control"},{"location":"uniques/#rough-terrain-penalty","text":"Applicable to: Unit","title":"🔷 Rough terrain penalty"},{"location":"uniques/#can-enter-ice-tiles","text":"Applicable to: Unit","title":"🔷 Can enter ice tiles"},{"location":"uniques/#cannot-enter-ocean-tiles","text":"Applicable to: Unit","title":"🔷 Cannot enter ocean tiles"},{"location":"uniques/#may-enter-foreign-tiles-without-open-borders","text":"Applicable to: Unit","title":"🔷 May enter foreign tiles without open borders"},{"location":"uniques/#may-enter-foreign-tiles-without-open-borders-but-loses-amount-religious-strength-each-turn-it-ends-there","text":"Example: \"May enter foreign tiles without open borders, but loses [20] religious strength each turn it ends there\" Applicable to: Unit","title":"🔷 May enter foreign tiles without open borders, but loses [amount] religious strength each turn it ends there"},{"location":"uniques/#never-appears-as-a-barbarian-unit","text":"Applicable to: Unit","title":"🔷 Never appears as a Barbarian unit"},{"location":"uniques/#religious-unit","text":"Applicable to: Unit","title":"🔷 Religious Unit"},{"location":"uniques/#can-be-added-to-comment-in-the-capital","text":"Example: \"Can be added to [comment] in the Capital\" Applicable to: Unit","title":"🔷 Can be added to [comment] in the Capital"},{"location":"uniques/#promotion-uniques","text":"","title":"Promotion uniques"},{"location":"uniques/#heal-this-unit-by-amount-hp","text":"Example: \"Heal this unit by [20] HP\" Applicable to: Promotion","title":"🔷 Heal this unit by [amount] HP"},{"location":"uniques/#terrain-uniques","text":"","title":"Terrain uniques"},{"location":"uniques/#must-be-adjacent-to-amount-simpleterrain-tiles","text":"Example: \"Must be adjacent to [20] [Elevated] tiles\" Applicable to: Terrain","title":"🔷 Must be adjacent to [amount] [simpleTerrain] tiles"},{"location":"uniques/#must-be-adjacent-to-amount-to-amount-simpleterrain-tiles","text":"Example: \"Must be adjacent to [20] to [20] [Elevated] tiles\" Applicable to: Terrain","title":"🔷 Must be adjacent to [amount] to [amount] [simpleTerrain] tiles"},{"location":"uniques/#must-not-be-on-amount-largest-landmasses","text":"Example: \"Must not be on [20] largest landmasses\" Applicable to: Terrain","title":"🔷 Must not be on [amount] largest landmasses"},{"location":"uniques/#must-be-on-amount-largest-landmasses","text":"Example: \"Must be on [20] largest landmasses\" Applicable to: Terrain","title":"🔷 Must be on [amount] largest landmasses"},{"location":"uniques/#occurs-on-latitudes-from-amount-to-amount-percent-of-distance-equator-to-pole","text":"Example: \"Occurs on latitudes from [20] to [20] percent of distance equator to pole\" Applicable to: Terrain","title":"🔷 Occurs on latitudes from [amount] to [amount] percent of distance equator to pole"},{"location":"uniques/#occurs-in-groups-of-amount-to-amount-tiles","text":"Example: \"Occurs in groups of [20] to [20] tiles\" Applicable to: Terrain","title":"🔷 Occurs in groups of [amount] to [amount] tiles"},{"location":"uniques/#neighboring-tiles-will-convert-to-baseterrain","text":"Example: \"Neighboring tiles will convert to [Grassland]\" Applicable to: Terrain","title":"🔷 Neighboring tiles will convert to [baseTerrain]"},{"location":"uniques/#neighboring-tiles-except-baseterrain-will-convert-to-baseterrain","text":"Example: \"Neighboring tiles except [Grassland] will convert to [Grassland]\" Applicable to: Terrain","title":"🔷 Neighboring tiles except [baseTerrain] will convert to [baseTerrain]"},{"location":"uniques/#grants-500-gold-to-the-first-civilization-to-discover-it","text":"Applicable to: Terrain","title":"🔷 Grants 500 Gold to the first civilization to discover it"},{"location":"uniques/#units-ending-their-turn-on-this-terrain-take-amount-damage","text":"Example: \"Units ending their turn on this terrain take [20] damage\" Applicable to: Terrain","title":"🔷 Units ending their turn on this terrain take [amount] damage"},{"location":"uniques/#grants-promotion-comment-to-adjacent-mapunitfilter-units-for-the-rest-of-the-game","text":"Example: \"Grants [Shock I] ([comment]) to adjacent [Wounded] units for the rest of the game\" Applicable to: Terrain","title":"🔷 Grants [promotion] ([comment]) to adjacent [mapUnitFilter] units for the rest of the game"},{"location":"uniques/#amount-strength-for-cities-built-on-this-terrain","text":"Example: \"[20] Strength for cities built on this terrain\" Applicable to: Terrain","title":"🔷 [amount] Strength for cities built on this terrain"},{"location":"uniques/#provides-a-one-time-production-bonus-to-the-closest-city-when-cut-down","text":"Applicable to: Terrain","title":"🔷 Provides a one-time Production bonus to the closest city when cut down"},{"location":"uniques/#tile-provides-yield-without-assigned-population","text":"Applicable to: Terrain, Improvement","title":"🔷 Tile provides yield without assigned population"},{"location":"uniques/#nullifies-all-other-stats-this-tile-provides","text":"Applicable to: Terrain","title":"🔷 Nullifies all other stats this tile provides"},{"location":"uniques/#only-improvementfilter-improvements-may-be-built-on-this-tile","text":"Example: \"Only [All Road] improvements may be built on this tile\" Applicable to: Terrain","title":"🔷 Only [improvementFilter] improvements may be built on this tile"},{"location":"uniques/#blocks-line-of-sight-from-tiles-at-same-elevation","text":"Applicable to: Terrain","title":"🔷 Blocks line-of-sight from tiles at same elevation"},{"location":"uniques/#has-an-elevation-of-amount-for-visibility-calculations","text":"Example: \"Has an elevation of [20] for visibility calculations\" Applicable to: Terrain","title":"🔷 Has an elevation of [amount] for visibility calculations"},{"location":"uniques/#always-fertility-amount-for-map-generation","text":"Example: \"Always Fertility [20] for Map Generation\" Applicable to: Terrain","title":"🔷 Always Fertility [amount] for Map Generation"},{"location":"uniques/#amount-to-fertility-for-map-generation","text":"Example: \"[20] to Fertility for Map Generation\" Applicable to: Terrain","title":"🔷 [amount] to Fertility for Map Generation"},{"location":"uniques/#a-region-is-formed-with-at-least-amount-simpleterrain-tiles-with-priority-amount","text":"Example: \"A Region is formed with at least [20]% [Elevated] tiles, with priority [20]\" Applicable to: Terrain","title":"🔷 A Region is formed with at least [amount]% [simpleTerrain] tiles, with priority [amount]"},{"location":"uniques/#a-region-is-formed-with-at-least-amount-simpleterrain-tiles-and-simpleterrain-tiles-with-priority-amount","text":"Example: \"A Region is formed with at least [20]% [Elevated] tiles and [Elevated] tiles, with priority [20]\" Applicable to: Terrain","title":"🔷 A Region is formed with at least [amount]% [simpleTerrain] tiles and [simpleTerrain] tiles, with priority [amount]"},{"location":"uniques/#a-region-can-not-contain-more-simpleterrain-tiles-than-simpleterrain-tiles","text":"Example: \"A Region can not contain more [Elevated] tiles than [Elevated] tiles\" Applicable to: Terrain","title":"🔷 A Region can not contain more [simpleTerrain] tiles than [simpleTerrain] tiles"},{"location":"uniques/#base-terrain-on-this-tile-is-not-counted-for-region-determination","text":"Applicable to: Terrain","title":"🔷 Base Terrain on this tile is not counted for Region determination"},{"location":"uniques/#starts-in-regions-of-this-type-receive-an-extra-resource","text":"Example: \"Starts in regions of this type receive an extra [Iron]\" Applicable to: Terrain","title":"🔷 Starts in regions of this type receive an extra [resource]"},{"location":"uniques/#never-receives-any-resources","text":"Applicable to: Terrain","title":"🔷 Never receives any resources"},{"location":"uniques/#becomes-terrainname-when-adjacent-to-terrainfilter","text":"Example: \"Becomes [terrainName] when adjacent to [Forest]\" Applicable to: Terrain","title":"🔷 Becomes [terrainName] when adjacent to [terrainFilter]"},{"location":"uniques/#considered-terrainquality-when-determining-start-locations","text":"Example: \"Considered [Undesirable] when determining start locations\" Applicable to: Terrain","title":"🔷 Considered [terrainQuality] when determining start locations"},{"location":"uniques/#doesnt-generate-naturally","text":"Applicable to: Terrain, Resource","title":"🔷 Doesn't generate naturally"},{"location":"uniques/#occurs-at-temperature-between-amount-and-amount-and-humidity-between-amount-and-amount","text":"Example: \"Occurs at temperature between [20] and [20] and humidity between [20] and [20]\" Applicable to: Terrain","title":"🔷 Occurs at temperature between [amount] and [amount] and humidity between [amount] and [amount]"},{"location":"uniques/#occurs-in-chains-at-high-elevations","text":"Applicable to: Terrain","title":"🔷 Occurs in chains at high elevations"},{"location":"uniques/#occurs-in-groups-around-high-elevations","text":"Applicable to: Terrain","title":"🔷 Occurs in groups around high elevations"},{"location":"uniques/#every-amount-tiles-with-this-terrain-will-receive-a-major-deposit-of-a-strategic-resource","text":"Example: \"Every [20] tiles with this terrain will receive a major deposit of a strategic resource.\" Applicable to: Terrain","title":"🔷 Every [amount] tiles with this terrain will receive a major deposit of a strategic resource."},{"location":"uniques/#rare-feature","text":"Applicable to: Terrain","title":"🔷 Rare feature"},{"location":"uniques/#resistant-to-nukes","text":"Applicable to: Terrain","title":"🔷 Resistant to nukes"},{"location":"uniques/#can-be-destroyed-by-nukes","text":"Applicable to: Terrain","title":"🔷 Can be destroyed by nukes"},{"location":"uniques/#fresh-water","text":"Applicable to: Terrain","title":"🔷 Fresh water"},{"location":"uniques/#rough-terrain","text":"Applicable to: Terrain","title":"🔷 Rough terrain"},{"location":"uniques/#improvement-uniques","text":"","title":"Improvement uniques"},{"location":"uniques/#can-also-be-built-on-tiles-adjacent-to-fresh-water","text":"Applicable to: Improvement","title":"🔷 Can also be built on tiles adjacent to fresh water"},{"location":"uniques/#stats-from-tilefilter-tiles","text":"Example: \"[+1 Gold, +2 Production] from [Farm] tiles\" Applicable to: Improvement","title":"🔷 [stats] from [tileFilter] tiles"},{"location":"uniques/#stats-for-each-adjacent-tilefilter","text":"Example: \"[+1 Gold, +2 Production] for each adjacent [Farm]\" Applicable to: Improvement","title":"🔷 [stats] for each adjacent [tileFilter]"},{"location":"uniques/#can-be-built-outside-your-borders","text":"Applicable to: Improvement","title":"🔷 Can be built outside your borders"},{"location":"uniques/#can-be-built-just-outside-your-borders","text":"Applicable to: Improvement","title":"🔷 Can be built just outside your borders"},{"location":"uniques/#cannot-be-built-on-tilefilter-tiles","text":"Example: \"Cannot be built on [Farm] tiles\" Applicable to: Improvement","title":"🔷 Cannot be built on [tileFilter] tiles"},{"location":"uniques/#does-not-need-removal-of-tilefilter","text":"Example: \"Does not need removal of [Farm]\" Applicable to: Improvement","title":"🔷 Does not need removal of [tileFilter]"},{"location":"uniques/#gives-a-defensive-bonus-of-amount","text":"Example: \"Gives a defensive bonus of [20]%\" Applicable to: Improvement","title":"🔷 Gives a defensive bonus of [amount]%"},{"location":"uniques/#costs-amount-gold-per-turn-when-in-your-territory","text":"Example: \"Costs [20] gold per turn when in your territory\" Applicable to: Improvement","title":"🔷 Costs [amount] gold per turn when in your territory"},{"location":"uniques/#adjacent-enemy-units-ending-their-turn-take-amount-damage","text":"Example: \"Adjacent enemy units ending their turn take [20] damage\" Applicable to: Improvement","title":"🔷 Adjacent enemy units ending their turn take [amount] damage"},{"location":"uniques/#great-improvement","text":"Applicable to: Improvement","title":"🔷 Great Improvement"},{"location":"uniques/#provides-a-random-bonus-when-entered","text":"Applicable to: Improvement","title":"🔷 Provides a random bonus when entered"},{"location":"uniques/#unpillagable","text":"Applicable to: Improvement","title":"🔷 Unpillagable"},{"location":"uniques/#indestructible","text":"Applicable to: Improvement","title":"🔷 Indestructible"},{"location":"uniques/#irremovable","text":"Applicable to: Improvement","title":"🔷 Irremovable"},{"location":"uniques/#resource-uniques","text":"","title":"Resource uniques"},{"location":"uniques/#generated-with-weight-amount","text":"Example: \"Generated with weight [20]\" Applicable to: Resource","title":"🔷 Generated with weight [amount]"},{"location":"uniques/#minor-deposits-generated-with-weight-amount","text":"Example: \"Minor deposits generated with weight [20]\" Applicable to: Resource","title":"🔷 Minor deposits generated with weight [amount]"},{"location":"uniques/#generated-near-city-states-with-weight-amount","text":"Example: \"Generated near City States with weight [20]\" Applicable to: Resource","title":"🔷 Generated near City States with weight [amount]"},{"location":"uniques/#special-placement-during-map-generation","text":"Applicable to: Resource","title":"🔷 Special placement during map generation"},{"location":"uniques/#generated-on-every-amount-tiles","text":"Example: \"Generated on every [20] tiles\" Applicable to: Resource","title":"🔷 Generated on every [amount] tiles"},{"location":"uniques/#guaranteed-with-strategic-balance-resource-option","text":"Applicable to: Resource","title":"🔷 Guaranteed with Strategic Balance resource option"},{"location":"uniques/#deposits-in-tilefilter-tiles-always-provide-amount-resources","text":"Example: \"Deposits in [Farm] tiles always provide [20] resources\" Applicable to: Resource","title":"🔷 Deposits in [tileFilter] tiles always provide [amount] resources"},{"location":"uniques/#can-only-be-created-by-mercantile-city-states","text":"Applicable to: Resource","title":"🔷 Can only be created by Mercantile City-States"},{"location":"uniques/#ruins-uniques","text":"","title":"Ruins uniques"},{"location":"uniques/#free-baseunitfilter-found-in-the-ruins","text":"Example: \"Free [Melee] found in the ruins\" Applicable to: Ruins","title":"🔷 Free [baseUnitFilter] found in the ruins"},{"location":"uniques/#amount-population-in-a-random-city","text":"Example: \"[20] population in a random city\" Applicable to: Ruins","title":"🔷 [amount] population in a random city"},{"location":"uniques/#amount-free-random-researchable-techs-from-the-era","text":"Example: \"[20] free random researchable Tech(s) from the [Ancient era]\" Applicable to: Ruins","title":"🔷 [amount] free random researchable Tech(s) from the [era]"},{"location":"uniques/#gain-amount-stat","text":"Example: \"Gain [20] [Culture]\" Applicable to: Ruins","title":"🔷 Gain [amount] [stat]"},{"location":"uniques/#gain-amount-amount-stat","text":"Example: \"Gain [20]-[20] [Culture]\" Applicable to: Ruins","title":"🔷 Gain [amount]-[amount] [stat]"},{"location":"uniques/#gain-enough-faith-for-a-pantheon","text":"Applicable to: Ruins","title":"🔷 Gain enough Faith for a Pantheon"},{"location":"uniques/#gain-enough-faith-for-amount-of-a-great-prophet","text":"Example: \"Gain enough Faith for [20]% of a Great Prophet\" Applicable to: Ruins","title":"🔷 Gain enough Faith for [amount]% of a Great Prophet"},{"location":"uniques/#reveal-up-to-amountall-tilefilter-within-a-amount-tile-radius","text":"Example: \"Reveal up to [amount/'all'] [Farm] within a [20] tile radius\" Applicable to: Ruins","title":"🔷 Reveal up to [amount/'all'] [tileFilter] within a [amount] tile radius"},{"location":"uniques/#from-a-randomly-chosen-tile-amount-tiles-away-from-the-ruins-reveal-tiles-up-to-amount-tiles-away-with-amount-chance","text":"Example: \"From a randomly chosen tile [20] tiles away from the ruins, reveal tiles up to [20] tiles away with [20]% chance\" Applicable to: Ruins","title":"🔷 From a randomly chosen tile [amount] tiles away from the ruins, reveal tiles up to [amount] tiles away with [amount]% chance"},{"location":"uniques/#this-unit-gains-amount-xp","text":"Example: \"This Unit gains [20] XP\" Applicable to: Ruins","title":"🔷 This Unit gains [amount] XP"},{"location":"uniques/#this-unit-upgrades-for-free-including-special-upgrades","text":"Applicable to: Ruins","title":"🔷 This Unit upgrades for free including special upgrades"},{"location":"uniques/#only-available-after-amount-turns","text":"Example: \"Only available after [20] turns\" Applicable to: Ruins","title":"🔷 Only available after [amount] turns"},{"location":"uniques/#hidden-before-founding-a-pantheon","text":"Applicable to: Ruins","title":"🔷 Hidden before founding a Pantheon"},{"location":"uniques/#hidden-after-founding-a-pantheon","text":"Applicable to: Ruins","title":"🔷 Hidden after founding a Pantheon"},{"location":"uniques/#hidden-after-generating-a-great-prophet","text":"Applicable to: Ruins","title":"🔷 Hidden after generating a Great Prophet"},{"location":"uniques/#citystate-uniques","text":"","title":"CityState uniques"},{"location":"uniques/#provides-stats-per-turn","text":"Example: \"Provides [+1 Gold, +2 Production] per turn\" Applicable to: CityState","title":"🔷 Provides [stats] per turn"},{"location":"uniques/#provides-stats-cityfilter-per-turn","text":"Example: \"Provides [+1 Gold, +2 Production] [in all cities] per turn\" Applicable to: CityState","title":"🔷 Provides [stats] [cityFilter] per turn"},{"location":"uniques/#provides-amount-happiness","text":"Example: \"Provides [20] Happiness\" Applicable to: CityState","title":"🔷 Provides [amount] Happiness"},{"location":"uniques/#provides-military-units-every-amount-turns","text":"Example: \"Provides military units every \u2248[20] turns\" Applicable to: CityState","title":"🔷 Provides military units every \u2248[amount] turns"},{"location":"uniques/#provides-a-unique-luxury","text":"Applicable to: CityState","title":"🔷 Provides a unique luxury"},{"location":"uniques/#conditional-uniques","text":"","title":"Conditional uniques"},{"location":"uniques/#_1","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_2","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_3","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_4","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_5","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_6","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_7","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_8","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_9","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_10","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_11","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_12","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_13","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_14","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_15","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_16","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_17","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_18","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_19","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_20","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_21","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_22","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_23","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_24","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_25","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_26","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_27","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_28","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_29","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_30","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_31","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_32","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_33","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_34","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_35","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_36","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_37","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_38","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_39","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_40","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_41","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_42","text":"Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_43","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#_44","text":"Example: \" \" Applicable to: Conditional","title":"🔷 "},{"location":"uniques/#deprecated-uniques","text":"\"[stats] from every Wonder\" - Deprecated as of 3.19.1, replace with \"[stats] from every [Wonder]\" \"[stats] from every [buildingFilter] in cities where this religion has at least [amount] followers\" - Deprecated as of 3.19.3, replace with \"[stats] from every [buildingFilter] \" \"+25% Production towards any buildings that already exist in the Capital\" - Deprecated as of 3.19.3, replace with \"[+25]% Production towards any buildings that already exist in the Capital\" \"[amount]% of food is carried over after population increases\" - Deprecated as of 3.19.2, replace with \"[amount]% Food is carried over after population increases [in this city]\" \"[amount]% of food is carried over [cityFilter] after population increases\" - Deprecated as of 3.19.2, replace with \"[amount]% Food is carried over after population increases [cityFilter]\" \"[amount]% Culture cost of natural border growth [cityFilter]\" - Deprecated as of 3.19.2, replace with \"[amount]% Culture cost of natural border growth [cityFilter]\" \"-[amount]% Culture cost of acquiring tiles [cityFilter]\" - Deprecated as of 3.19.1, replace with \"[-amount]% Culture cost of natural border growth [cityFilter]\" \"[amount]% cost of natural border growth\" - Deprecated as of 3.19.1, replace with \"[amount]% Culture cost of natural border growth [in all cities]\" \"-[amount]% Gold cost of acquiring tiles [cityFilter]\" - Deprecated as of 3.19.1, replace with \"[-amount]% Gold cost of acquiring tiles [cityFilter]\" \"[stat] cost of purchasing [baseUnitFilter] units in cities [amount]%\" - Deprecated as of 3.19.3, replace with \"[stat] cost of purchasing [baseUnitFilter] units [amount]%\" \"+[amount]% attacking strength for cities with garrisoned units\" - Deprecated as of 3.19.1, replace with \"[+amount]% Strength for cities \" \"Can embark and move over Coasts and Oceans immediately\" - Deprecated as of 3.19.9, replace with \"Enables embarkation for land units \", \"Enables embarked units to enter ocean tiles \" \"Population loss from nuclear attacks -[amount]%\" - Deprecated as of 3.19.2, replace with \"Population loss from nuclear attacks [-amount]% [in this city]\" \"[amount]% Natural religion spread [cityFilter] with [tech/policy]\" - Deprecated as of 3.19.3, replace with \"[amount]% Natural religion spread [cityFilter] \" OR \"[amount]% Natural religion spread [cityFilter] \" \"[amount] HP when healing in [tileFilter] tiles\" - Deprecated as of 3.19.4, replace with \"[amount] HP when healing \" \"Melee units pay no movement cost to pillage\" - Deprecated as of 3.18.17, replace with \"No movement cost to pillage \" \"Heal adjacent units for an additional 15 HP per turn\" - Deprecated as of 3.19.3, replace with \"All adjacent units heal [+15] HP when healing\" \"+[amount]% attack strength to all [mapUnitFilter] units for [amount2] turns\" - Deprecated as of 3.19.8, replace with \"[+amount]% Strength \" \"Golden Age length increased by [amount]%\" - Deprecated as of 3.18.17, replace with \"[+amount]% Golden Age length\" \"+[amount]% Defensive Strength for cities\" - Deprecated as of 3.18.17, replace with \"[+amount]% Strength for cities \" \"[amount]% Attacking Strength for cities\" - Deprecated as of 3.18.17, replace with \"[+amount]% Strength for cities \" \"[amount]% Strength for [mapUnitFilter] units which have another [mapUnitFilter] unit in an adjacent tile\" - Deprecated as of 3.18.17, replace with \"[amount]% Strength \" \"Gold cost of upgrading [baseUnitFilter] units reduced by [amount]%\" - Deprecated as of 3.18.17, replace with \"[-amount]% Gold cost of upgrading \" \"Double gold from Great Merchant trade missions\" - Deprecated as of 3.18.17, replace with \"[+100]% Gold from Great Merchant trade missions\" \"Defensive buildings in all cities are 25% more effective\" - Deprecated as of 3.18.17, replace with \"[+25]% City Strength from defensive buildings\" \"Maintenance on roads & railroads reduced by [amount]%\" - Deprecated as of 3.18.17, replace with \"[-amount]% maintenance on road & railroads\" \"-[amount]% maintenance cost for buildings [cityFilter]\" - Deprecated as of 3.18.17, replace with \"[-amount]% maintenance cost for buildings [cityFilter]\" \"+[amount] happiness from each type of luxury resource\" - Deprecated as of 3.18.17, replace with \"[+amount] Happiness from each type of luxury resource\" \"Culture cost of adopting new Policies reduced by [amount]%\" - Deprecated as of 3.18.17, replace with \"[-amount]% Culture cost of adopting new Policies\" \"[amount]% Culture cost of adopting new policies\" - Deprecated as of 3.19.1, replace with \"[amount]% Culture cost of adopting new Policies\" \"Quantity of Resources gifted by City-States increased by [amount]%\" - Deprecated as of 3.18.17, replace with \"[+amount]% resources gifted by City-States\" \"City-State Influence degrades [amount]% slower\" - Deprecated as of 3.18.17, replace with \"[-amount]% City-State Influence degradation\" \"Happiness from Luxury Resources gifted by City-States increased by [amount]%\" - Deprecated as of 3.18.17, replace with \"[+amount]% Happiness from luxury resources gifted by City-States\" \"+[amount]% [stat] from every [tileFilter/specialist/buildingName]\" - Deprecated as of 3.18.17, replace with \"[+amount]% [stat] from every [tileFilter/specialist/buildingName]\" \"+[amount]% yield from every [tileFilter]\" - Deprecated as of 3.18.17, replace with \"[+amount]% Yield from every [tileFilter]\" \"[stats] per turn from cities before [tech/policy]\" - Deprecated as of 3.18.14, replace with \"[stats] [in all cities] \" OR \"[stats] [in all cities] \" \"[mapUnitFilter] units gain [amount]% more Experience from combat\" - Deprecated as of 3.18.12, replace with \"[amount]% XP gained from combat \" \"[amount]% maintenance costs for [mapUnitFilter] units\" - Deprecated as of 3.18.14, replace with \"[amount]% maintenance costs \" \"50% of excess happiness added to culture towards policies\" - Deprecated as of 3.18.2, replace with \"[50]% of excess happiness converted to [Culture]\" \"-[amount]% food consumption by specialists [cityFilter]\" - Deprecated as of 3.18.2, replace with \"[-amount]% Food consumption by specialists [cityFilter]\" \"May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] starting from the [era] at an increasing price ([amount])\" - Deprecated as of 3.17.9, removed as of 3.19.3, replace with \"May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] at an increasing price ([amount]) \" \"Provides a free [buildingName] [cityFilter]\" - Deprecated as of 3.17.7 - removed 3.18.19, replace with \"Gain a free [buildingName] [cityFilter]\" \"+[amount]% [stat] [cityFilter]\" - Deprecated as of 3.17.10 - removed 3.18.18, replace with \"[+amount]% [stat] [cityFilter]\" \"+[amount]% [stat] in all cities\" - Deprecated as of 3.17.10 - removed 3.18.18, replace with \"[+amount]% [stat] [in all cities]\" \"[amount]% [stat] while the empire is happy\" - Deprecated as of 3.17.1 - removed 3.18.18, replace with \"[amount]% [stat] [in all cities] \" \"Immediately creates the cheapest available cultural building in each of your first [amount] cities for free\" - Deprecated as of 3.16.15 - removed 3.18.4, replace with \"Provides the cheapest [stat] building in your first [amount] cities for free\" \"Immediately creates a [buildingName] in each of your first [amount] cities for free\" - Deprecated as of 3.16.15 - removed 3.18.4, replace with \"Provides a [buildingName] in your first [amount] cities for free\" \"[mapUnitFilter] units deal +[amount]% damage\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+amount]% Strength \" \"+10% Strength for all units during Golden Age\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+10]% Strength \" \"[amount]% Strength for [mapUnitFilter] units in [tileFilter]\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount]% Strength \" \"+15% Combat Strength for all units when attacking Cities\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+15]% Strength \" \"+[amount] Movement for all [mapUnitFilter] units\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+amount] Movement \" \"+1 Movement for all units during Golden Age\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+1] Movement \" \"[amount] Sight for all [mapUnitFilter] units\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount] Sight \" \"[amount]% Spread Religion Strength for [mapUnitFilter] units\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount]% Spread Religion Strength \" \"+[amount]% Production when constructing [baseUnitFilter] units [cityFilter]\" - Deprecated as of 3.17.10 - removed 3.18.5, replace with \"[+amount]% Production when constructing [baseUnitFilter] units [cityFilter]\" \"+[amount]% Production when constructing [stat] buildings\" - Deprecated as of 3.17.10 - removed 3.18.5, replace with \"[+amount]% Production when constructing [stat] buildings [in all cities]\" \"+[amount]% Production when constructing [constructionFilter]\" - Deprecated as of 3.17.10 - removed 3.18.5, replace with \"[+amount]% Production when constructing [constructionFilter] buildings [in all cities]\" \"+[amount]% Production when constructing a [buildingName]\" - Deprecated as of 3.17.10 - removed 3.18.5, replace with \"[amount]% Production when constructing [buildingName] buildings [in all cities]\" \"+[amount]% Production when constructing [constructionFilter] [cityFilter]\" - Deprecated as of 3.17.10 - removed 3.18.5, replace with \"[amount]% Production when constructing [constructionFilter] buildings [cityFilter]\" \"Increases embarked movement +1\" - Deprecated As of 3.16.11 - removed 3.17.11, replace with \"[+1] Movement \" \"+1 Movement for all embarked units\" - Deprecated As of 3.16.11 - removed 3.17.11, replace with \"[+1] Movement \" \"Unhappiness from population decreased by [amount]%\" - Deprecated As of 3.16.11 - removed 3.17.11, replace with \"[-amount]% unhappiness from population [in all cities]\" \"Unhappiness from population decreased by [amount]% [cityFilter]\" - Deprecated As of 3.16.11 - removed 3.17.11, replace with \"[-amount]% unhappiness from population [cityFilter]\" \"+[amount]% growth [cityFilter]\" - Deprecated As of 3.16.14 - removed 3.17.11, replace with \"[+amount]% growth [cityFilter]\" \"+[amount]% growth [cityFilter] when not at war\" - Deprecated As of 3.16.14 - removed 3.17.11, replace with \"[+amount]% growth [cityFilter] \" \"-[amount]% [mapUnitFilter] unit maintenance costs\" - Deprecated As of 3.16.16 - removed as of 3.17.11, replace with \"[-amount]% maintenance costs \" \"-[amount]% unit upkeep costs\" - Deprecated As of 3.16.16 - removed 3.17.11, replace with \"[amount]% maintenance costs \" \"[stats] from every specialist\" - Deprecated As of 3.16.16 - removed 3.17.11, replace with \"[stats] from every specialist [in all cities]\" \"[stats] if this city has at least [amount] specialists\" - Deprecated As of 3.16.16 - removed 3.17.11, replace with \"[stats] \" \"+1 happiness from each type of luxury resource\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+1] Happiness from each type of luxury resource\" \"-33% unit upkeep costs\" - Deprecated Extremely old - used for auto-updates only, replace with \"[-33]% maintenance costs \" \"-50% food consumption by specialists\" - Deprecated Extremely old - used for auto-updates only, replace with \"[-50]% Food consumption by specialists [in all cities]\" \"+50% attacking strength for cities with garrisoned units\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+50]% Strength for cities \" \"Incompatible with [policy/tech/promotion]\" - Deprecated as of 3.19.8, replace with \"Only available \" OR \"Only available \" OR \"Only available \" \"Not displayed as an available construction without [buildingName/tech/resource/policy]\" - Deprecated as of 3.19.8, replace with \"Only available \" OR \"Only available \" OR \"Only available \" OR \"Only available \" \"Unlocked with [buildingName/tech/era/policy]\" - Deprecated as of 3.19.12, replace with \"Only available \" OR \"Only available \" OR \"Only available \" OR \"Only available \" \"Requires [buildingName/tech/era/policy]\" - Deprecated as of 3.19.12, replace with \"Only available \" OR \"Only available \" OR \"Only available \" OR \"Only available \" \"Cannot be built with [buildingName]\" - Deprecated as of 3.19.9, replace with \"Only available \" \"Requires a [buildingName] in this city\" - Deprecated as of 3.19.9, replace with \"Only available \" \"[stats] with [resource]\" - Deprecated as of 3.19.7, replace with \"[stats] \" \"Not displayed as an available construction unless [buildingName] is built\" - Deprecated as of 3.16.11, replace with \"Not displayed as an available construction without [buildingName]\" \"[stats] once [tech] is discovered\" - Deprecated as of 3.17.10 - removed 3.18.19, replace with \"[stats] \" \"Eliminates combat penalty for attacking from the sea\" - Deprecated as of 3.19.8, replace with \"Eliminates combat penalty for attacking across a coast\" \"[amount]% Bonus XP gain\" - Deprecated as of 3.18.12, replace with \"[amount]% XP gained from combat\" \"Cannot enter ocean tiles until Astronomy\" - Deprecated as of 3.18.6, replace with \"Cannot enter ocean tiles \" \"+[amount]% Strength when attacking\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+amount]% Strength \" \"+[amount]% Strength when defending\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[+amount]% Strength \" \"[amount]% Strength when defending vs [mapUnitFilter] units\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount]% Strength \" \"+[amount]% defence in [tileFilter] tiles\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount]% Strength \" \"+[amount]% Strength in [tileFilter]\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount]% Strength \" \"[amount] Visibility Range\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[amount] Sight\" \"Limited Visibility\" - Deprecated as of 3.17.5 - removed 3.18.5, replace with \"[-1] Sight\" \"Double movement in coast\" - Deprecated As of 3.17.1 - removed 3.17.13, replace with \"Double movement in [Coast]\" \"Double movement rate through Forest and Jungle\" - Deprecated As of 3.17.1 - removed 3.17.13, replace with \"Double movement in [terrainFilter]\" \"Double movement in Snow, Tundra and Hills\" - Deprecated As of 3.17.1 - removed 3.17.13, replace with \"Double movement in [terrainFilter]\" \"+[amount]% Strength\" - Deprecated As of 3.17.3 - removed 3.17.13, replace with \"[+amount]% Strength\" \"-[amount]% Strength\" - Deprecated As of 3.17.3 - removed 3.17.13, replace with \"[-amount]% Strength\" \"+[amount]% Strength vs [combatantFilter]\" - Deprecated As of 3.17.3 - removed 3.17.13, replace with \"[+amount]% Strength \" OR \"[+amount]% Strength \" \"-[amount]% Strength vs [combatantFilter]\" - Deprecated As of 3.17.3 - removed 3.17.13, replace with \"[-amount]% Strength \" OR \"[+amount]% Strength \" \"+[amount]% Combat Strength\" - Deprecated As of 3.17.3 - removed 3.17.13, replace with \"[+amount]% Strength\" \"+1 Visibility Range\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+1] Sight\" \"+[amount] Visibility Range\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+amount] Sight\" \"+[amount] Sight for all [mapUnitFilter] units\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+amount] Sight \" \"+2 Visibility Range\" - Deprecated Extremely old - used for auto-updates only, replace with \"[+2] Sight\" \"Can build improvements on tiles\" - Deprecated Extremely old - used for auto-updates only, replace with \"Can build [Land] improvements on tiles\" \"Science gained from research agreements +50%\" - Deprecated Extremely old - used for auto-updates only, replace with \"Science gained from research agreements [+50]%\" \"Deal [amount] damage to adjacent enemy units\" - Deprecated as of 3.18.17, replace with \"Adjacent enemy units ending their turn take [amount] damage\" \"Cannot be built on [tileFilter] tiles until [tech] is discovered\" - Deprecated as of 3.18.5, replace with \"Cannot be built on [tileFilter] tiles \" \"[stats] on [tileFilter] tiles once [tech] is discovered\" - Deprecated as of 3.17.10 - removed 3.18.19, replace with \"[stats] from [tileFilter] tiles \" \"Deal 30 damage to adjacent enemy units\" - Deprecated as of 3.17.10 - removed 3.18.19, replace with \"Adjacent enemy units ending their turn take [30] damage\"","title":"Deprecated uniques"},{"location":"wiki/Audiovisual-Mods/","text":"Audiovisual Mods The 'Permanent audiovisual mod' feature Mods can override built-in graphics Mods can supply additional tilesets - see separate page Mods can supply additional graphics not included in the base game Mods can override built-in sounds Mods can supply additional music tracks Permanent audiovisual mods The following chapters describe possibilities that will work while a mod is active . It is either selected for the current game (during new game creation, cannot be changed after that for saved games), meaning all its rules and resources will be used. Or it is marked as 'Permanent audiovisual mod' in the mod manager (you must select it in the 'installed' column to get the checkbox). In that case only graphics and audio will be active, the rule changes will be ignored (if it contains any) unless the first way is also used. Override built-in graphics If a mod supplies an image with the same name and path as one included in the base game (and its atlas is up to date), and the mod is active, the mod's graphics will be used instead of the built-in one. For example, if you include a file named \"Images/OtherIcons/Link.png\" in your mod, you will be overriding the little chain links icon denoting linked lines in Civilopedia. Please note, as for adding items, your graphics should keep the size and color choices of the original, or the result may be surprising, e.g. when the game tries to tint such an image. Supply additional graphics Currently there are two kinds where the game has display capability but does not supply graphics itself, as described in the next paragraphs: Adding Wonder Splash Screens You can add wonder images to mods and they'll be displayed instead of the standard icon when a wonder is finished. The image needs to be a .png and 2:1 ratio so for example 200x100 px. Add the images to /Images/WonderImages/ . They need to be named according to the name field in Buildings.json , so for example \"Temple of Artemis.png\" or \"Stonehenge.png\" Remember, to be compatible with mobile devices, a fresh atlas needs to be generated including these. Adding Leader Portraits The base game comes without Leader Portraits, but is able to display them in greetings, Civilopedia, diplomacy screens, or the nation picker. A mod can supply these, by adding their images to /Images/LeaderIcons/ . The file name must correspond exactly with the leader name of a nation as defined in Nations.json, or they will be ignored. These work best if they are square, between 100x100 and 256x256 pixels, and include some transparent border within that area. For example, here is mod showing how to add leader portraits, which can complement the base game. Override built-in sounds This works like graphics, except no atlas is involved. E.g. you include a sounds/Click.mp3, it will play instead of the normal click sound. These files must stay short and small. A sound larger than 1MB when uncompressed may break or not play at all on mobile devices. Unciv tries to standardize on 24kHz sample rate, joint stereo, low-bitrate VBR (-128kbps) mp3. Only mp3 and ogg formats will be recognized (but an existing mp3 can be overridden with an ogg file). Supply additional music Sound files (mp3 or ogg) in a mod /music folder will be recognized and used when the mod is active. Except for context-specific music as described in the following paragraphs, tracks will play randomly from all available tracks (with a little bias to avoid close repetition of tracks). There is no overriding - a \"thatched-villagers.mp3\" in a mod will play in addition to and with the same likelihood as the file that the base game offers to download for you. There is no hard technical limit on bitrate or length, but large bandwidth requirements may lead to stuttering (The end of a \"next turn\", right before the world map is updated, and with very large maps, is the most likely to cause this). Context-sensitive music: Overview The Music Controller will generally play one track after another, with a pause (can be changed in options) between. Leave-game confirmation dialog is opened playback will fade out and pause and can resume when it is closed. There are various 'triggers' in the game code initiating a choice for a new track. The new track will, if necessary, fade out the currently playing track quickly before it starts playing. Track choice involves context provided by the trigger and a random factor, and an attempt is made to not repeat any track until at least eight others have played. Mods can provide their own music folder, and if they are active its contents will be treated exactly the same as those in the main music folder. Mods should control usage of their tracks by careful choice of file name. Mod developers can watch console output for messages logging track choice with trigger parameters or loading errors. One track is special: The Thatched Villagers (see also credits.md). The game is able to download it if the music folder is empty, and it is played when the music volume slider is used. It is also a fallback track should certain problems occur (a broken file, however, will shut down the player until another trigger happens). Context-sensitive music: List of Triggers Triggers indicate context (call it intent, mood, whatever, it doesn't matter) by optionally providing a prefix and/or suffix to match against the file name. There are a few flags as well influencing choice or behaviour - one flag function is to make prefix or suffix mandatory, meaning if no available file matches the track chooser will do nothing. Otherwise, a next track will always be chosen from the available list by sorting and then picking the first entry. Sorting is done by in order of precedence: Prefix match, Suffix match, Recently played, and a random number. Therefore, as currently no triggers have an empty prefix, files matching none of the prefixes will never play unless there are less than eight files matching the requested prefix. The current list of triggers is as follows: Description Prefix M[^M] Suffix M[^X] Flags Automatic next-track[^0] Ambient Launch game[^1] Menu Every 10th turn (player civ name) M Peace or War[^2] F[^F] New game: Select a mod (mod name) M Theme S[^S] New game: Pick a nation for a player (nation name) M Theme or Peace S[^S] Diplomacy: Select player (nation name) M Peace or War[^3] S[^S] First contact[^4] (civ name) M Theme or Peace M War declaration[^5] (civ name) M War M Civ defeated (civ name) Defeat M Golden Age (civ name) M Golden M N[^N] Wonder built (wonder name) M Built M N[^N] Tech researched (tech name) M Researched M N[^N] Map editor: Select nation start location (nation name) M Theme S[^S] N[^N] Options: Volume slider or Default track downloaded D[^D] Options: Click currently playing label[^6] M Ambient S[^S] Legend: [^N]: Not implemented [^M]: Prefix must match. If no matching file is found, the trigger will do nothing. [^X]: Suffix must match. If no matching file is found, the trigger will do nothing. [^S]: Stop after playback. No automatic next choice. [^F]: Slow fadeout of replaced track. [^D]: Always plays the default file. [^0]: Whenever a track finishes and the configured silence has elapsed, an 'Ambient' track without any context is chosen. Also triggered by 'resume' (e.g. switching to another app and back on Android) [^1]: First opening of the Main Menu (or the initial language picker). [^2]: Whether the active player is at war with anybody. [^3]: According to your relation to the picked player. [^4]: Excluding City States. [^5]: Both in the alert when another player declares War on you and declaring War yourself in Diplomacy screen. [^6]: Yes these flags are not optimal.","title":"Audiovisual Mods"},{"location":"wiki/Audiovisual-Mods/#audiovisual-mods","text":"The 'Permanent audiovisual mod' feature Mods can override built-in graphics Mods can supply additional tilesets - see separate page Mods can supply additional graphics not included in the base game Mods can override built-in sounds Mods can supply additional music tracks","title":"Audiovisual Mods"},{"location":"wiki/Audiovisual-Mods/#permanent-audiovisual-mods","text":"The following chapters describe possibilities that will work while a mod is active . It is either selected for the current game (during new game creation, cannot be changed after that for saved games), meaning all its rules and resources will be used. Or it is marked as 'Permanent audiovisual mod' in the mod manager (you must select it in the 'installed' column to get the checkbox). In that case only graphics and audio will be active, the rule changes will be ignored (if it contains any) unless the first way is also used.","title":"Permanent audiovisual mods"},{"location":"wiki/Audiovisual-Mods/#override-built-in-graphics","text":"If a mod supplies an image with the same name and path as one included in the base game (and its atlas is up to date), and the mod is active, the mod's graphics will be used instead of the built-in one. For example, if you include a file named \"Images/OtherIcons/Link.png\" in your mod, you will be overriding the little chain links icon denoting linked lines in Civilopedia. Please note, as for adding items, your graphics should keep the size and color choices of the original, or the result may be surprising, e.g. when the game tries to tint such an image.","title":"Override built-in graphics"},{"location":"wiki/Audiovisual-Mods/#supply-additional-graphics","text":"Currently there are two kinds where the game has display capability but does not supply graphics itself, as described in the next paragraphs:","title":"Supply additional graphics"},{"location":"wiki/Audiovisual-Mods/#adding-wonder-splash-screens","text":"You can add wonder images to mods and they'll be displayed instead of the standard icon when a wonder is finished. The image needs to be a .png and 2:1 ratio so for example 200x100 px. Add the images to /Images/WonderImages/ . They need to be named according to the name field in Buildings.json , so for example \"Temple of Artemis.png\" or \"Stonehenge.png\" Remember, to be compatible with mobile devices, a fresh atlas needs to be generated including these.","title":"Adding Wonder Splash Screens"},{"location":"wiki/Audiovisual-Mods/#adding-leader-portraits","text":"The base game comes without Leader Portraits, but is able to display them in greetings, Civilopedia, diplomacy screens, or the nation picker. A mod can supply these, by adding their images to /Images/LeaderIcons/ . The file name must correspond exactly with the leader name of a nation as defined in Nations.json, or they will be ignored. These work best if they are square, between 100x100 and 256x256 pixels, and include some transparent border within that area. For example, here is mod showing how to add leader portraits, which can complement the base game.","title":"Adding Leader Portraits"},{"location":"wiki/Audiovisual-Mods/#override-built-in-sounds","text":"This works like graphics, except no atlas is involved. E.g. you include a sounds/Click.mp3, it will play instead of the normal click sound. These files must stay short and small. A sound larger than 1MB when uncompressed may break or not play at all on mobile devices. Unciv tries to standardize on 24kHz sample rate, joint stereo, low-bitrate VBR (-128kbps) mp3. Only mp3 and ogg formats will be recognized (but an existing mp3 can be overridden with an ogg file).","title":"Override built-in sounds"},{"location":"wiki/Audiovisual-Mods/#supply-additional-music","text":"Sound files (mp3 or ogg) in a mod /music folder will be recognized and used when the mod is active. Except for context-specific music as described in the following paragraphs, tracks will play randomly from all available tracks (with a little bias to avoid close repetition of tracks). There is no overriding - a \"thatched-villagers.mp3\" in a mod will play in addition to and with the same likelihood as the file that the base game offers to download for you. There is no hard technical limit on bitrate or length, but large bandwidth requirements may lead to stuttering (The end of a \"next turn\", right before the world map is updated, and with very large maps, is the most likely to cause this).","title":"Supply additional music"},{"location":"wiki/Audiovisual-Mods/#context-sensitive-music-overview","text":"The Music Controller will generally play one track after another, with a pause (can be changed in options) between. Leave-game confirmation dialog is opened playback will fade out and pause and can resume when it is closed. There are various 'triggers' in the game code initiating a choice for a new track. The new track will, if necessary, fade out the currently playing track quickly before it starts playing. Track choice involves context provided by the trigger and a random factor, and an attempt is made to not repeat any track until at least eight others have played. Mods can provide their own music folder, and if they are active its contents will be treated exactly the same as those in the main music folder. Mods should control usage of their tracks by careful choice of file name. Mod developers can watch console output for messages logging track choice with trigger parameters or loading errors. One track is special: The Thatched Villagers (see also credits.md). The game is able to download it if the music folder is empty, and it is played when the music volume slider is used. It is also a fallback track should certain problems occur (a broken file, however, will shut down the player until another trigger happens).","title":"Context-sensitive music: Overview"},{"location":"wiki/Audiovisual-Mods/#context-sensitive-music-list-of-triggers","text":"Triggers indicate context (call it intent, mood, whatever, it doesn't matter) by optionally providing a prefix and/or suffix to match against the file name. There are a few flags as well influencing choice or behaviour - one flag function is to make prefix or suffix mandatory, meaning if no available file matches the track chooser will do nothing. Otherwise, a next track will always be chosen from the available list by sorting and then picking the first entry. Sorting is done by in order of precedence: Prefix match, Suffix match, Recently played, and a random number. Therefore, as currently no triggers have an empty prefix, files matching none of the prefixes will never play unless there are less than eight files matching the requested prefix. The current list of triggers is as follows: Description Prefix M[^M] Suffix M[^X] Flags Automatic next-track[^0] Ambient Launch game[^1] Menu Every 10th turn (player civ name) M Peace or War[^2] F[^F] New game: Select a mod (mod name) M Theme S[^S] New game: Pick a nation for a player (nation name) M Theme or Peace S[^S] Diplomacy: Select player (nation name) M Peace or War[^3] S[^S] First contact[^4] (civ name) M Theme or Peace M War declaration[^5] (civ name) M War M Civ defeated (civ name) Defeat M Golden Age (civ name) M Golden M N[^N] Wonder built (wonder name) M Built M N[^N] Tech researched (tech name) M Researched M N[^N] Map editor: Select nation start location (nation name) M Theme S[^S] N[^N] Options: Volume slider or Default track downloaded D[^D] Options: Click currently playing label[^6] M Ambient S[^S] Legend: [^N]: Not implemented [^M]: Prefix must match. If no matching file is found, the trigger will do nothing. [^X]: Suffix must match. If no matching file is found, the trigger will do nothing. [^S]: Stop after playback. No automatic next choice. [^F]: Slow fadeout of replaced track. [^D]: Always plays the default file. [^0]: Whenever a track finishes and the configured silence has elapsed, an 'Ambient' track without any context is chosen. Also triggered by 'resume' (e.g. switching to another app and back on Android) [^1]: First opening of the Main Menu (or the initial language picker). [^2]: Whether the active player is at war with anybody. [^3]: According to your relation to the picked player. [^4]: Excluding City States. [^5]: Both in the alert when another player declares War on you and declaring War yourself in Diplomacy screen. [^6]: Yes these flags are not optimal.","title":"Context-sensitive music: List of Triggers"},{"location":"wiki/Building-locally-without-Android-Studio/","text":"If you also have JDK 11 installed, you can compile Unciv on your own by cloning (or downloading and unzipping) the project, opening a terminal in the Unciv folder and run the following commands: Windows Running: gradlew desktop:run Building: gradlew desktop:dist Linux/Mac OS Running: ./gradlew desktop:run Building: ./gradlew desktop:dist If the terminal returns Permission denied or Command not found on Mac/Linux, run chmod +x ./gradlew first. This is a one-time procedure. If you get an error that Android SDK folder wasn't found, firstly install it by doing in terminal: sudo apt update && sudo apt install android-sdk (Debian, Ubuntu, Mint etc.) After that you should put its folder to the file local.properties by adding this line: sdk.dir = /path/to/android/sdk which can be /usr/lib/android-sdk or something other. If during the first launch it throws an error that the JDK version is wrong try this JDK installation . Gradle may take up to several minutes to download files. Be patient. After building, the output .JAR file should be in /desktop/build/libs/Unciv.jar For actual development, you'll probably need to download Android Studio and build it yourself - see Contributing :)","title":"Building locally without Android Studio"},{"location":"wiki/Building-locally-without-Android-Studio/#windows","text":"Running: gradlew desktop:run Building: gradlew desktop:dist","title":"Windows"},{"location":"wiki/Building-locally-without-Android-Studio/#linuxmac-os","text":"Running: ./gradlew desktop:run Building: ./gradlew desktop:dist If the terminal returns Permission denied or Command not found on Mac/Linux, run chmod +x ./gradlew first. This is a one-time procedure. If you get an error that Android SDK folder wasn't found, firstly install it by doing in terminal: sudo apt update && sudo apt install android-sdk (Debian, Ubuntu, Mint etc.) After that you should put its folder to the file local.properties by adding this line: sdk.dir = /path/to/android/sdk which can be /usr/lib/android-sdk or something other. If during the first launch it throws an error that the JDK version is wrong try this JDK installation . Gradle may take up to several minutes to download files. Be patient. After building, the output .JAR file should be in /desktop/build/libs/Unciv.jar For actual development, you'll probably need to download Android Studio and build it yourself - see Contributing :)","title":"Linux/Mac OS"},{"location":"wiki/Civilization-related-JSON-files/","text":"Beliefs.json Buildings.json Nations.json Policies.json Quests.json Religions.json Specialists.json Techs.json - Column structure - Tech structure Beliefs.json link to original This file contains the beliefs that can be chosen for religions in your mod. Each belief can have the following attributes: | attribute | Type | Optional or not | notes | | --------- | ---- | --------------- | ----- | | name | String | Required | Name of the belief | | type | String | Required | The type of the belief. Valid values are: \"Pantheon\", \"Follower\", \"Founder\" and \"Enhancer\". | | uniques | List of Strings | defaults to none | The unique abilities this belief adds to cities following it. May be chosen from the list of building uniques here , as well as the general uniques on that page | | civilopediaText | List | Default empty | see civilopediaText chapter | Buildings.json link to original This file should contain all the buildings and wonders you want to use in your mod. Each building can have the following attributes: | attribute | Type | Optional or not | notes | | --------- | ---- | --------------- | ----- | | name | String | required | Name of the building | | cost | Integer (\u22650) | defaults to 0 | Amount of production required to build the building | | food | Integer | defaults to 0 | Food produced by the building | | production | Integer | defaults to 0 | Production produced by the building | | gold | Integer | defaults to 0 | etc. | | happiness | Integer | defaults to 0 | | | culture | Integer | defaults to 0 | | | science | Integer | defaults to 0 | | | faith | Integer | defaults to 0 | | | maintenance | Integer (\u22650) | defaults to 0 | Maintenance cost of the building | | isWonder | Boolean | defaults to false | Whether this building is a global wonder | | isNationalWonder | Boolean | defaults to false | Whether this building is a national wonder | | requiredBuilding | String | defaults to none | A building that has to be built before this building can be built. Must be in Buildings.json | | cannotBeBuiltWith | String | defaults to none | The building [cannotBeBuiltWith] and this building cannot exist in the same city together. Should be in Buildings.json | | providesFreeBuilding | String | defaults to none | When the building is built, [providesFreeBuilding] is also automatically added to the city | | requiredTech | String | defaults to none | The tech that should be researched before this building may be built. Must be in Techs.json | | requiredResource | String | defaults to none | The resource that is consumed when building this building. Must be in TileResources.json | | requiredNearbyImprovedResources | List of Strings | defaults to none | The building can only be built if any of the resources in this list are within the borders of this city and have been improved. Each resource must be in TileResources.json | | replaces | String | defaults to none | The name of a building that should be replaced by this building. Must be in Buildings.json | | uniqueTo | String | defaults to none | If supplied, only the nation with this name can build this building. Must be in Nations.json | | xpForNewUnits | Integer | defaults to 0 | XP granted automatically to units built in this city | | cityStrength | Integer | defaults to 0 | Strength bonus the city in which this building is built receives | | cityHealth | Integer | defaults to 0 | Health bonus the city in which this building is built receives | | hurryCostModifier | Integer | defaults to 0 | When this building is bought using gold or faith, the price is increased by this much percent | | quote | String | defaults to none | If this building is a (national) wonder, this string will be shown on the completion popup | | uniques | List of Strings | defaults to none | List of unique abilities this building has. Most of these can be found here | | replacementTextForUniques | String | defaults to none | If provided, this string will be shown instead of all of the uniques | | percentStatBonus | Object | defaults to none | Percentual bonus for stats provided by the building. Valid keys are the names of stats (production, gold, science, etc.), valid values are Integers (\u22650) | | greatPersonPoints | Object | defaults to none | How many great person points for each type will be generated per turn. Valid keys are the names of great people (Great Scientist, Great Engineer, etc. .), valid values are Integers (\u22650) | | specialistSlots | Object | defaults to none | Specialist slots provided by this building. Valid keys are the names of specialists (as defined in Specialists.json ), valid values are Integers, the amount of slots provided for this specialist | | civilopediaText | List | Default empty | see civilopediaText chapter | Nations.json Link to original This file contains all the nations and city states, including Barbarians and Spectator. Attribute Type Optional? Notes name String Required leaderName String Default empty Omit only for city states! If you want LeaderPortraits, the image file names must match exactly, including case. style String Default empty Modifier appended to pixel unit image names adjective String Default empty Currently unused cityStateType Enum Default absent Distinguishes Major Civilizations from City States (Cultured, Maritime, Mercantile, Militaristic) startBias List Default empty Zero or more of: terrainFilter or \"Avoid [terrainFilter]\". Two or more will be logically \"and\"-ed, and if the filters result in no choices, the entire attribute is ignored (e.g. \"startBias\": [\"Snow\",\"Tundra\"] will never work). preferredVictoryType Enum Default Neutral Neutral, Cultural, Diplomatic, Domination or Scientific startIntroPart1 String Default empty Introductory blurb shown to Player on game start... startIntroPart2 String Default empty ... second paragraph. NO \"TBD\"!!! Leave empty to skip that alert. declaringWar String Default empty another greeting attacked String Default empty another greeting defeated String Default empty another greeting introduction String Default empty another greeting neutralHello String Default empty another greeting hateHello String Default empty another greeting tradeRequest String Default empty another greeting innerColor 3x Integer Default black R, G, B for outer ring of nation icon outerColor 3x Integer Required R, G, B for inner circle of nation icon uniqueName String Default empty Decorative name for the special characteristic of this Nation uniqueText String Default empty Replacement text for \"uniques\". If empty, uniques are listed individually. uniques List Default empty Properties of the civilization - see here cities List Default empty City names used sequentially for newly founded cities. civilopediaText List Default empty see civilopediaText chapter Policies.json Link to original This file lists the available social policies that can be \"bought\" with culture. They are organized in 'branches', each branch has an 'opener', one or more 'member' policies, and a 'finisher'. Therefore this file is organized using two levels - branch and member policy. The properties of the 'opener' are defined with the branch level, while the 'finisher' has an entry on the member level which must be named as branch name + \" Complete\", case sensitive. Each policy branch can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | | | era | String | Required | Unlocking era as defined in Eras.json | | uniques | List | Default empty | List of effects, see here | | policies | List | Default empty | List of member policies | Each member policy can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | | | row | Integer | Required | Placement in UI, each unit approximately half the icon size | | column | Integer | Required | Placement in UI, each unit approximately half the icon size | | requires | List | Default empty | List of prerequisite policy names | | uniques | List | Default empty | List of effects, see here | Quests.json Link to original This file contains the Quests that may be given to major Civilizations by City States. Attribute Type Optional? Notes name String Required Unique identifier name of the quest, it is also shown description String Required Description of the quest shown to players type Enum Default Individual Individual or Global influece Float Default 40 Influence reward gained on quest completion duration Integer Default 0 Maximum number of turns to complete the quest, 0 if there's no turn limit minimumCivs Integer Default 1 Minimum number of Civs needed to start the quest. It is meaningful only for type = Global Religions.json Link to original This is just a list of Strings specifying all predefined Religion names. Corresponding icons must exist, that's all to it. After all, they're just containers for Beliefs . Specialists.json Link to original This file should contain a list of all possible specialists that you want in your mod. Each specialist can have the following attributes: | attribute | type | optional or not | notes | | --------- | ---- | --------------- | ----- | | name | String | required | Name of the specialist | | food | Integer | defaults to 0 | Amount of food produced by this specialist | | production | Integer | defaults to 0 | Amount of production produced by this specialist | | gold | Integer | defaults to 0 | etc. | | culture | Integer | defaults to 0 | | | science | Integer | defaults to 0 | | faith | Integer | defaults to 0 | | color | List of 3 Integers | required | Color of the image for this specialist | | greatPersonPoints | Object | defaults to none | Great person points generated by this specialist. Valid keys are the names of the great person(Great Scientist, Great Merachant, etc.), valid values are Integers (\u22650) | Techs.json Link to original This file contains all the technologies. It is organized into an outer list of 'columns' which in turn contain one or more tech each. Column structure Attribute Type Optional? Notes columnNumber Integer Required Horizontal placement in the Tech Tree. era String Required References Eras.json . techCost Integer Required Default cost of the techs in this column. buildingCost Integer Required Default cost of buildings requiring this tech. wonderCost Integer Required Default cost of wonders requiring this tech. techs List of Techs Required List of techs as follows - pay attention to the nesting of {} and []. Tech structure Attribute Type Optional? Notes name String Required The name of this Technology. row Integer Defaults to 0 Vertical placement in the Tech Tree, must be unique per column. cost Integer Defaults to column techCost The amount of science required to research this tech. prerequisites List Default empty A list of the names of techs that are prerequisites of this tech. Only direct prerequisites are necessary. quote String Default empty A nice story presented to the player when they research this tech. uniques List Default empty Properties granted by the tech - see here . civilopediaText List Default empty see civilopediaText chapter .","title":"Civilization related JSON files"},{"location":"wiki/Civilization-related-JSON-files/#beliefsjson","text":"link to original This file contains the beliefs that can be chosen for religions in your mod. Each belief can have the following attributes: | attribute | Type | Optional or not | notes | | --------- | ---- | --------------- | ----- | | name | String | Required | Name of the belief | | type | String | Required | The type of the belief. Valid values are: \"Pantheon\", \"Follower\", \"Founder\" and \"Enhancer\". | | uniques | List of Strings | defaults to none | The unique abilities this belief adds to cities following it. May be chosen from the list of building uniques here , as well as the general uniques on that page | | civilopediaText | List | Default empty | see civilopediaText chapter |","title":"Beliefs.json"},{"location":"wiki/Civilization-related-JSON-files/#buildingsjson","text":"link to original This file should contain all the buildings and wonders you want to use in your mod. Each building can have the following attributes: | attribute | Type | Optional or not | notes | | --------- | ---- | --------------- | ----- | | name | String | required | Name of the building | | cost | Integer (\u22650) | defaults to 0 | Amount of production required to build the building | | food | Integer | defaults to 0 | Food produced by the building | | production | Integer | defaults to 0 | Production produced by the building | | gold | Integer | defaults to 0 | etc. | | happiness | Integer | defaults to 0 | | | culture | Integer | defaults to 0 | | | science | Integer | defaults to 0 | | | faith | Integer | defaults to 0 | | | maintenance | Integer (\u22650) | defaults to 0 | Maintenance cost of the building | | isWonder | Boolean | defaults to false | Whether this building is a global wonder | | isNationalWonder | Boolean | defaults to false | Whether this building is a national wonder | | requiredBuilding | String | defaults to none | A building that has to be built before this building can be built. Must be in Buildings.json | | cannotBeBuiltWith | String | defaults to none | The building [cannotBeBuiltWith] and this building cannot exist in the same city together. Should be in Buildings.json | | providesFreeBuilding | String | defaults to none | When the building is built, [providesFreeBuilding] is also automatically added to the city | | requiredTech | String | defaults to none | The tech that should be researched before this building may be built. Must be in Techs.json | | requiredResource | String | defaults to none | The resource that is consumed when building this building. Must be in TileResources.json | | requiredNearbyImprovedResources | List of Strings | defaults to none | The building can only be built if any of the resources in this list are within the borders of this city and have been improved. Each resource must be in TileResources.json | | replaces | String | defaults to none | The name of a building that should be replaced by this building. Must be in Buildings.json | | uniqueTo | String | defaults to none | If supplied, only the nation with this name can build this building. Must be in Nations.json | | xpForNewUnits | Integer | defaults to 0 | XP granted automatically to units built in this city | | cityStrength | Integer | defaults to 0 | Strength bonus the city in which this building is built receives | | cityHealth | Integer | defaults to 0 | Health bonus the city in which this building is built receives | | hurryCostModifier | Integer | defaults to 0 | When this building is bought using gold or faith, the price is increased by this much percent | | quote | String | defaults to none | If this building is a (national) wonder, this string will be shown on the completion popup | | uniques | List of Strings | defaults to none | List of unique abilities this building has. Most of these can be found here | | replacementTextForUniques | String | defaults to none | If provided, this string will be shown instead of all of the uniques | | percentStatBonus | Object | defaults to none | Percentual bonus for stats provided by the building. Valid keys are the names of stats (production, gold, science, etc.), valid values are Integers (\u22650) | | greatPersonPoints | Object | defaults to none | How many great person points for each type will be generated per turn. Valid keys are the names of great people (Great Scientist, Great Engineer, etc. .), valid values are Integers (\u22650) | | specialistSlots | Object | defaults to none | Specialist slots provided by this building. Valid keys are the names of specialists (as defined in Specialists.json ), valid values are Integers, the amount of slots provided for this specialist | | civilopediaText | List | Default empty | see civilopediaText chapter |","title":"Buildings.json"},{"location":"wiki/Civilization-related-JSON-files/#nationsjson","text":"Link to original This file contains all the nations and city states, including Barbarians and Spectator. Attribute Type Optional? Notes name String Required leaderName String Default empty Omit only for city states! If you want LeaderPortraits, the image file names must match exactly, including case. style String Default empty Modifier appended to pixel unit image names adjective String Default empty Currently unused cityStateType Enum Default absent Distinguishes Major Civilizations from City States (Cultured, Maritime, Mercantile, Militaristic) startBias List Default empty Zero or more of: terrainFilter or \"Avoid [terrainFilter]\". Two or more will be logically \"and\"-ed, and if the filters result in no choices, the entire attribute is ignored (e.g. \"startBias\": [\"Snow\",\"Tundra\"] will never work). preferredVictoryType Enum Default Neutral Neutral, Cultural, Diplomatic, Domination or Scientific startIntroPart1 String Default empty Introductory blurb shown to Player on game start... startIntroPart2 String Default empty ... second paragraph. NO \"TBD\"!!! Leave empty to skip that alert. declaringWar String Default empty another greeting attacked String Default empty another greeting defeated String Default empty another greeting introduction String Default empty another greeting neutralHello String Default empty another greeting hateHello String Default empty another greeting tradeRequest String Default empty another greeting innerColor 3x Integer Default black R, G, B for outer ring of nation icon outerColor 3x Integer Required R, G, B for inner circle of nation icon uniqueName String Default empty Decorative name for the special characteristic of this Nation uniqueText String Default empty Replacement text for \"uniques\". If empty, uniques are listed individually. uniques List Default empty Properties of the civilization - see here cities List Default empty City names used sequentially for newly founded cities. civilopediaText List Default empty see civilopediaText chapter","title":"Nations.json"},{"location":"wiki/Civilization-related-JSON-files/#policiesjson","text":"Link to original This file lists the available social policies that can be \"bought\" with culture. They are organized in 'branches', each branch has an 'opener', one or more 'member' policies, and a 'finisher'. Therefore this file is organized using two levels - branch and member policy. The properties of the 'opener' are defined with the branch level, while the 'finisher' has an entry on the member level which must be named as branch name + \" Complete\", case sensitive. Each policy branch can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | | | era | String | Required | Unlocking era as defined in Eras.json | | uniques | List | Default empty | List of effects, see here | | policies | List | Default empty | List of member policies | Each member policy can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | | | row | Integer | Required | Placement in UI, each unit approximately half the icon size | | column | Integer | Required | Placement in UI, each unit approximately half the icon size | | requires | List | Default empty | List of prerequisite policy names | | uniques | List | Default empty | List of effects, see here |","title":"Policies.json"},{"location":"wiki/Civilization-related-JSON-files/#questsjson","text":"Link to original This file contains the Quests that may be given to major Civilizations by City States. Attribute Type Optional? Notes name String Required Unique identifier name of the quest, it is also shown description String Required Description of the quest shown to players type Enum Default Individual Individual or Global influece Float Default 40 Influence reward gained on quest completion duration Integer Default 0 Maximum number of turns to complete the quest, 0 if there's no turn limit minimumCivs Integer Default 1 Minimum number of Civs needed to start the quest. It is meaningful only for type = Global","title":"Quests.json"},{"location":"wiki/Civilization-related-JSON-files/#religionsjson","text":"Link to original This is just a list of Strings specifying all predefined Religion names. Corresponding icons must exist, that's all to it. After all, they're just containers for Beliefs .","title":"Religions.json"},{"location":"wiki/Civilization-related-JSON-files/#specialistsjson","text":"Link to original This file should contain a list of all possible specialists that you want in your mod. Each specialist can have the following attributes: | attribute | type | optional or not | notes | | --------- | ---- | --------------- | ----- | | name | String | required | Name of the specialist | | food | Integer | defaults to 0 | Amount of food produced by this specialist | | production | Integer | defaults to 0 | Amount of production produced by this specialist | | gold | Integer | defaults to 0 | etc. | | culture | Integer | defaults to 0 | | | science | Integer | defaults to 0 | | faith | Integer | defaults to 0 | | color | List of 3 Integers | required | Color of the image for this specialist | | greatPersonPoints | Object | defaults to none | Great person points generated by this specialist. Valid keys are the names of the great person(Great Scientist, Great Merachant, etc.), valid values are Integers (\u22650) |","title":"Specialists.json"},{"location":"wiki/Civilization-related-JSON-files/#techsjson","text":"Link to original This file contains all the technologies. It is organized into an outer list of 'columns' which in turn contain one or more tech each.","title":"Techs.json"},{"location":"wiki/Civilization-related-JSON-files/#column-structure","text":"Attribute Type Optional? Notes columnNumber Integer Required Horizontal placement in the Tech Tree. era String Required References Eras.json . techCost Integer Required Default cost of the techs in this column. buildingCost Integer Required Default cost of buildings requiring this tech. wonderCost Integer Required Default cost of wonders requiring this tech. techs List of Techs Required List of techs as follows - pay attention to the nesting of {} and [].","title":"Column structure"},{"location":"wiki/Civilization-related-JSON-files/#tech-structure","text":"Attribute Type Optional? Notes name String Required The name of this Technology. row Integer Defaults to 0 Vertical placement in the Tech Tree, must be unique per column. cost Integer Defaults to column techCost The amount of science required to research this tech. prerequisites List Default empty A list of the names of techs that are prerequisites of this tech. Only direct prerequisites are necessary. quote String Default empty A nice story presented to the player when they research this tech. uniques List Default empty Properties granted by the tech - see here . civilopediaText List Default empty see civilopediaText chapter .","title":"Tech structure"},{"location":"wiki/Coding-standards/","text":"As an open-source project, there will be a lot of eyes on our code. The main purpose of having a coding standard is for the code to be as immediately readable as possible to as many potential contributors, and hence most of it focuses on defaulting to coding structures that exist in other similar languages (Java, C#) when possible. Don't use .let{} and ?: Kotlin is made greater for being strict with nullability. Don't let this fact confuse people new to it. These can be simply replaced by if(x!=null) which is much more readable. They all probably compile to the same bytecode anyway, so when in doubt - readability. for(item in list) and not list.forEach{} For loops go waaaay back, forEach doesn't. As an added bonus, I'm pretty sure that because forEach accepts a function parameter, then when debugging it won't automatically step into these lines, unlike for. Avoid premature abstraction There's no need to create an interface if there is only one implementation of that interface. Doing so obfuscates the actual code that's running and increases the Time To Relevant Code. If abstraction becomes necessary later, we can always do it later.","title":"Coding standards"},{"location":"wiki/Coding-standards/#dont-use-let-and","text":"Kotlin is made greater for being strict with nullability. Don't let this fact confuse people new to it. These can be simply replaced by if(x!=null) which is much more readable. They all probably compile to the same bytecode anyway, so when in doubt - readability.","title":"Don't use .let{} and ?:"},{"location":"wiki/Coding-standards/#foritem-in-list-and-not-listforeach","text":"For loops go waaaay back, forEach doesn't. As an added bonus, I'm pretty sure that because forEach accepts a function parameter, then when debugging it won't automatically step into these lines, unlike for.","title":"for(item in list) and not list.forEach{}"},{"location":"wiki/Coding-standards/#avoid-premature-abstraction","text":"There's no need to create an interface if there is only one implementation of that interface. Doing so obfuscates the actual code that's running and increases the Time To Relevant Code. If abstraction becomes necessary later, we can always do it later.","title":"Avoid premature abstraction"},{"location":"wiki/Creating-a-custom-tileset/","text":"How to make Unciv use your custom tileset You should read the Mods page first before proceeding In order to add a tileset mod (yes, tilesets are just another type of mod), all you need to do is add your images under Images/Tilesets/MyCoolTilesetExample and enable the mod as a permanent visual mod - the game will recognize the tileset, and allow you to pick it in the options menu. Let's look at the example \"Grassland+Jungle+Dyes+Trading post\" to learn how the game decides which images it should use for this tile: When there is a rule variant entry in the tileset config for this tile we will use the entry. Else if there is an image called \"Grassland+Jungle+Dyes+Trading post\" we will use it instead. Otherwise, we will check if there is an image called \"Grassland+Jungle\" (BaseTerrain+Terrainfeatures) and \"Dyes+Trading post\" (Resource+Improvement) and use the remainings of it. Let's say you made an image called \"Grassland+Jungle\" but none called \"Dyes+Trading post\". In the end, we will then use the images \"Grassland+Jungle\", \"Dyes\" and \"Trading post\". All these images can also use era-dependant variants if you want to change the appearance of, let's say, \"Trading post\" throughout the game. Just create images and add the suffix \"-[era name]\". E.g. \"Trading post-Classical era\", \"Trading post-Industrial era\", etc. It is advised to use the layered approach (1 and 3) often because it comes with a few advantages. Mainly: - Decreased filesize (on disk, for downloads) - Easier support for new terrains, improvements, resources, and for changing existing tiles You should keep in mind that the default rendering order is: BaseTerrain, TerrainFeatures, Resource, Improvement. Tileset config This is where tileset configs shine. You can use these to alter the way Unicv renders tiles. To create a config for your tileset you just need to create a new .json file under Jsons/Tilesets/. Just create a .txt file and rename it to MyCoolTilesetExample.json. You only have to add things if you want to change them. Else the default values will be used. This is an example of such a config file that I will explain below: \"useColorAsBaseTerrain\": \"false\", \"unexploredTileColor\": {\"r\":1,\"g\":1,\"b\":1,\"a\":1}, \"fogOfWarColor\": {\"r\":1,\"g\":0,\"b\":0,\"a\":1}, \"ruleVariants\": { \"Grassland+Forest\": [\"Grassland\",\"ForestForGrassland\"], \"Grassland+Jungle+Dyes+Trading post\": [\"Grassland\",\"JungleForGrasslandBack\",\"Dyes+Trading post\",\"JungleForGrasslandFront\"] } useColorAsBaseTerrain A boolean value (\"true\" or \"false\"). Default value: \"true\" If true all tiles will be colored in their corresponding base terrain color. This is how the \"Default\" tileset works. unexploredTileColor A color defined with normalized RGBA values. Default value: \"{\"r\":0.24705882, \"g\":0.24705882, \"b\":0.24705882, \"a\":1}\" (DarkGray) Defines the color of the unexplored tiles. fogOfWarColor A color defined with normalized RGBA values. Default value: \"{\"r\":0, \"g\":0, \"b\":0, \"a\":1}\" (Black) Defines the color of the fog of war. The color gets approximated by 60% to allow the colors of the images below to shine through. ruleVariants A dictionary mapping string to string[]. Default value: empty The ruleVariants are the most powerful part of the tileset config. With this, you can define, for a specific tile, which images and in which order these images should be used. An example is given in the code above. For the tile \"Grassland+Jungle+Dyes+Trading post\" we then use the images \"Grassland\", \"JungleForGrasslandBack\", \"Dyes+Trading post\" and \"JungleForGrasslandFront\" in that order. Nation-coloured units Unciv can colour units according to the civilization that owns them. [PR3231] This is used by providing multiple images per unit, each representing a coloured layer. The image suffixed with \"-1\" will be tinted to the civilization's inner colour, and the image suffixed with \"-2\" will be tinted to the civilization's outer colour. For example: Image Description Colour Archer.png Base image Untinted Archer-1.png Colour layer Nation inner colour Arhcer-2.png Colour layer Nation outer colour The Civ Army Color Style Sheet mod by @AdityaMH and the 5Hex Tileset by @ravignir are very good practical examples of how this can be used.","title":"How to make Unciv use your custom tileset"},{"location":"wiki/Creating-a-custom-tileset/#how-to-make-unciv-use-your-custom-tileset","text":"","title":"How to make Unciv use your custom tileset"},{"location":"wiki/Creating-a-custom-tileset/#you-should-read-the-mods-page-first-before-proceeding","text":"In order to add a tileset mod (yes, tilesets are just another type of mod), all you need to do is add your images under Images/Tilesets/MyCoolTilesetExample and enable the mod as a permanent visual mod - the game will recognize the tileset, and allow you to pick it in the options menu. Let's look at the example \"Grassland+Jungle+Dyes+Trading post\" to learn how the game decides which images it should use for this tile: When there is a rule variant entry in the tileset config for this tile we will use the entry. Else if there is an image called \"Grassland+Jungle+Dyes+Trading post\" we will use it instead. Otherwise, we will check if there is an image called \"Grassland+Jungle\" (BaseTerrain+Terrainfeatures) and \"Dyes+Trading post\" (Resource+Improvement) and use the remainings of it. Let's say you made an image called \"Grassland+Jungle\" but none called \"Dyes+Trading post\". In the end, we will then use the images \"Grassland+Jungle\", \"Dyes\" and \"Trading post\". All these images can also use era-dependant variants if you want to change the appearance of, let's say, \"Trading post\" throughout the game. Just create images and add the suffix \"-[era name]\". E.g. \"Trading post-Classical era\", \"Trading post-Industrial era\", etc. It is advised to use the layered approach (1 and 3) often because it comes with a few advantages. Mainly: - Decreased filesize (on disk, for downloads) - Easier support for new terrains, improvements, resources, and for changing existing tiles You should keep in mind that the default rendering order is: BaseTerrain, TerrainFeatures, Resource, Improvement.","title":"You should read the Mods page first before proceeding"},{"location":"wiki/Creating-a-custom-tileset/#tileset-config","text":"This is where tileset configs shine. You can use these to alter the way Unicv renders tiles. To create a config for your tileset you just need to create a new .json file under Jsons/Tilesets/. Just create a .txt file and rename it to MyCoolTilesetExample.json. You only have to add things if you want to change them. Else the default values will be used. This is an example of such a config file that I will explain below: \"useColorAsBaseTerrain\": \"false\", \"unexploredTileColor\": {\"r\":1,\"g\":1,\"b\":1,\"a\":1}, \"fogOfWarColor\": {\"r\":1,\"g\":0,\"b\":0,\"a\":1}, \"ruleVariants\": { \"Grassland+Forest\": [\"Grassland\",\"ForestForGrassland\"], \"Grassland+Jungle+Dyes+Trading post\": [\"Grassland\",\"JungleForGrasslandBack\",\"Dyes+Trading post\",\"JungleForGrasslandFront\"] }","title":"Tileset config"},{"location":"wiki/Creating-a-custom-tileset/#usecolorasbaseterrain","text":"A boolean value (\"true\" or \"false\"). Default value: \"true\" If true all tiles will be colored in their corresponding base terrain color. This is how the \"Default\" tileset works.","title":"useColorAsBaseTerrain"},{"location":"wiki/Creating-a-custom-tileset/#unexploredtilecolor","text":"A color defined with normalized RGBA values. Default value: \"{\"r\":0.24705882, \"g\":0.24705882, \"b\":0.24705882, \"a\":1}\" (DarkGray) Defines the color of the unexplored tiles.","title":"unexploredTileColor"},{"location":"wiki/Creating-a-custom-tileset/#fogofwarcolor","text":"A color defined with normalized RGBA values. Default value: \"{\"r\":0, \"g\":0, \"b\":0, \"a\":1}\" (Black) Defines the color of the fog of war. The color gets approximated by 60% to allow the colors of the images below to shine through.","title":"fogOfWarColor"},{"location":"wiki/Creating-a-custom-tileset/#rulevariants","text":"A dictionary mapping string to string[]. Default value: empty The ruleVariants are the most powerful part of the tileset config. With this, you can define, for a specific tile, which images and in which order these images should be used. An example is given in the code above. For the tile \"Grassland+Jungle+Dyes+Trading post\" we then use the images \"Grassland\", \"JungleForGrasslandBack\", \"Dyes+Trading post\" and \"JungleForGrasslandFront\" in that order.","title":"ruleVariants"},{"location":"wiki/Creating-a-custom-tileset/#nation-coloured-units","text":"Unciv can colour units according to the civilization that owns them. [PR3231] This is used by providing multiple images per unit, each representing a coloured layer. The image suffixed with \"-1\" will be tinted to the civilization's inner colour, and the image suffixed with \"-2\" will be tinted to the civilization's outer colour. For example: Image Description Colour Archer.png Base image Untinted Archer-1.png Colour layer Nation inner colour Arhcer-2.png Colour layer Nation outer colour The Civ Army Color Style Sheet mod by @AdityaMH and the 5Hex Tileset by @ravignir are very good practical examples of how this can be used.","title":"Nation-coloured units"},{"location":"wiki/Force-rating-calculation/","text":"Force rating Since the question has come up several times, here is a summary of how Force ratings are calculated. Base Unit Force Evaluation First the base unit gets a force evaluation. If the unit has a ranged attack, the starting force is the ranged strength ^ 1.45. Otherwise the starting force is strength ^ 1.5. This is multiplied by the unit's movement ^ 0.3. Nukes get +4000. Then this is multiplied by a bunch of modifiers: * 0.5 if ranged naval * 0.5 if self-destructs when attacking * Half the city attack bonus (So +25% if the unit has +50% when attacking cities) * A Quarter of attack bonuses vs things other than cities * Half the bonus \"when attacking\" * Half the bonus \"when defending\" * +25% if paradrop able * -20% if needs to set up to attack * Half the bonus from certain terrain * +20% bonus per extra attack per turn Individual Unit Force Evaluation Each individual unit has a Force equal to the Base Unit Force, * multiplied by (number of times promoted +1) ^ 0.3. * multiplied by current health as a percentage. Civ Force Ranking The civs Force Ranking is based on the sum of all their units' Force Evaluation (cities are not counted). Only half the Force of naval units is counted. This is multiplied by a gold modifier equal to the square root of current gold, as a percentage. The gold multiplier is constrained to be between 1 and 2, so the max multiplier is 2 which is reached at 10000 gold. Show Me Some Numbers Scout 13 Archer 19 Slinger 19 Dromon 23 Warrior 27 Maori Warrior 27 Brute 27 Bowman 29 Jaguar 36 Catapult 39 Composite Bowman 39 Galleass 41 Chariot Archer 42 War Elephant 44 War Chariot 45 Horse Archer 45 Trireme 46 Spearman 49 Ballista 55 Persian Immortal 56 Horseman 62 Hoplite 63 Swordsman 64 Chu-Ko-Nu 66 Quinquereme 69 African Forest Elephant 72 Battering Ram 80 Cataphract 80 Crossbowman 81 Longbowman 81 Companion Cavalry 84 Legion 86 Mohawk Warrior 86 Pikeman 87 Landsknecht 87 Trebuchet 88 Keshik 89 Frigate 100 Hwach'a 110 Longswordsman 118 Camel Archer 124 Samurai 126 Berserker 133 Knight 134 Conquistador 134 Mandekalu Cavalry 134 Caravel 134 Ship of the Line 139 Musketman 144 Cannon 151 Minuteman 154 Janissary 162 Gatling Gun 169 Musketeer 182 Tercio 182 Naresuan's Elephant 194 Lancer 204 Hakkapeliitta 204 Sipahi 218 Privateer 222 Rifleman 243 Carolean 243 Sea Beggar 244 Artillery 245 Battleship 269 Great War Bomber 290 Cavalry 300 Hussar 320 Triplane 325 Turtle Ship 327 Cossack 337 Norwegian Ski Infantry 345 Guided Missile 378 Carrier 408 Submarine 420 Bomber 425 Great War Infantry 434 Machine Gun 465 Fighter 470 Foreign Legion 477 Ironclad 486 Zero 508 Anti-Tank Gun 542 B17 551 Marine 645 Landship 703 Infantry 720 Nuclear Submarine 735 Stealth Bomber 771 Paratrooper 806 Anti-Aircraft Gun 819 Destroyer 870 Missile Cruiser 888 Rocket Artillery 930 Tank 948 Jet Fighter 988 Helicopter Gunship 992 Mechanized Infantry 1186 Panzer 1223 Mobile SAM 1376 Modern Armor 1620 Giant Death Robot 2977 Atomic Bomb 4714 Nuclear Missile 7906","title":"Force rating"},{"location":"wiki/Force-rating-calculation/#force-rating","text":"Since the question has come up several times, here is a summary of how Force ratings are calculated.","title":"Force rating"},{"location":"wiki/Force-rating-calculation/#base-unit-force-evaluation","text":"First the base unit gets a force evaluation. If the unit has a ranged attack, the starting force is the ranged strength ^ 1.45. Otherwise the starting force is strength ^ 1.5. This is multiplied by the unit's movement ^ 0.3. Nukes get +4000. Then this is multiplied by a bunch of modifiers: * 0.5 if ranged naval * 0.5 if self-destructs when attacking * Half the city attack bonus (So +25% if the unit has +50% when attacking cities) * A Quarter of attack bonuses vs things other than cities * Half the bonus \"when attacking\" * Half the bonus \"when defending\" * +25% if paradrop able * -20% if needs to set up to attack * Half the bonus from certain terrain * +20% bonus per extra attack per turn","title":"Base Unit Force Evaluation"},{"location":"wiki/Force-rating-calculation/#individual-unit-force-evaluation","text":"Each individual unit has a Force equal to the Base Unit Force, * multiplied by (number of times promoted +1) ^ 0.3. * multiplied by current health as a percentage.","title":"Individual Unit Force Evaluation"},{"location":"wiki/Force-rating-calculation/#civ-force-ranking","text":"The civs Force Ranking is based on the sum of all their units' Force Evaluation (cities are not counted). Only half the Force of naval units is counted. This is multiplied by a gold modifier equal to the square root of current gold, as a percentage. The gold multiplier is constrained to be between 1 and 2, so the max multiplier is 2 which is reached at 10000 gold.","title":"Civ Force Ranking"},{"location":"wiki/Force-rating-calculation/#show-me-some-numbers","text":"Scout 13 Archer 19 Slinger 19 Dromon 23 Warrior 27 Maori Warrior 27 Brute 27 Bowman 29 Jaguar 36 Catapult 39 Composite Bowman 39 Galleass 41 Chariot Archer 42 War Elephant 44 War Chariot 45 Horse Archer 45 Trireme 46 Spearman 49 Ballista 55 Persian Immortal 56 Horseman 62 Hoplite 63 Swordsman 64 Chu-Ko-Nu 66 Quinquereme 69 African Forest Elephant 72 Battering Ram 80 Cataphract 80 Crossbowman 81 Longbowman 81 Companion Cavalry 84 Legion 86 Mohawk Warrior 86 Pikeman 87 Landsknecht 87 Trebuchet 88 Keshik 89 Frigate 100 Hwach'a 110 Longswordsman 118 Camel Archer 124 Samurai 126 Berserker 133 Knight 134 Conquistador 134 Mandekalu Cavalry 134 Caravel 134 Ship of the Line 139 Musketman 144 Cannon 151 Minuteman 154 Janissary 162 Gatling Gun 169 Musketeer 182 Tercio 182 Naresuan's Elephant 194 Lancer 204 Hakkapeliitta 204 Sipahi 218 Privateer 222 Rifleman 243 Carolean 243 Sea Beggar 244 Artillery 245 Battleship 269 Great War Bomber 290 Cavalry 300 Hussar 320 Triplane 325 Turtle Ship 327 Cossack 337 Norwegian Ski Infantry 345 Guided Missile 378 Carrier 408 Submarine 420 Bomber 425 Great War Infantry 434 Machine Gun 465 Fighter 470 Foreign Legion 477 Ironclad 486 Zero 508 Anti-Tank Gun 542 B17 551 Marine 645 Landship 703 Infantry 720 Nuclear Submarine 735 Stealth Bomber 771 Paratrooper 806 Anti-Aircraft Gun 819 Destroyer 870 Missile Cruiser 888 Rocket Artillery 930 Tank 948 Jet Fighter 988 Helicopter Gunship 992 Mechanized Infantry 1186 Panzer 1223 Mobile SAM 1376 Modern Armor 1620 Giant Death Robot 2977 Atomic Bomb 4714 Nuclear Missile 7906","title":"Show Me Some Numbers"},{"location":"wiki/From-code-to-deployment/","text":"From code to deployment So, your code works! You've solved all the bugs and now you just need to get it out to everyone! So, how does THAT work? The process has two major parts, one is \"Getting your code in the main repository\" and the other is \"Deploying versions\" - as a developer, you'll be taking an active part in the first process, but the second process is on me =) Getting your code in the main repo First off, push your changes with Git to your own branch at https://github.com/YourUsername/Unciv.git. I hope you've been doing this during development too, but that's none of my business *sips tea* Issue a pull request from https://github.com/YourUsername/Unciv - from the Pull Requests is the simplest The Travis build will check that your proposed change builds properly and passes all tests I'll go over your pull request and will ask questions and request changes - this is not only for code quality and standard, it's mostly so you can learn how the repo works for the next change you make =) When everything looks good, I'll merge your code in and it'll enter the next release! Deploying versions When I'm ready to release a new version I: * Comment \"merge translations\" in one of the open PRs tagged as 'mergeable translation' to trigger the translation branch creation, add a \"summary\" comment to trigger summary generation, merge the PR and delete the branch (so next version translation branch starts fresh) * From my workstation - pull the latest changes and run the translation generation * Change the versionCode and versionName in the Android build.gradle so that Google Play and F-droid can recognize that it's a different release * Add an entry in the changelog.md done, WITHOUT hashtags, and less than 500 characters (that's the limit for Google play entries). The formatting needs to be exact or the text sent to Discord, the Github release etc. won't be complete. * Add a tag to the commit of the version. When the Github action sees that we've added a tag, it will run a build, and this time (because of the configuration we put in the yml file file), it will: * Pack a .jar file, which will work for every operating system with Java * Use Linux and Windows JDKs to create standalone zips for 32 and 64 bit systems, because we can't rely on the fact that users will have a JRE * Download Butler and use it to push the new versions to the itch.io page * Read the changelog.md file to get the changes for the latest version * Upload all of these files to a new release on Github, with the release notes, which will get added to the Releases page * Send an announcement on the Discord server of the version release and release notes via webhook * Pack, Sign, and Upload a new APK to the Google Play Console at 10% rollout * The F-Droid bot checks periodically if we added a new tag. When it recognizes that we did, it will update the yaml file here * When the bot next runs and sees that there's a version it doesn't have a release for, it will attempt to build the new release. The log of the build will be added here (redirects to the latest build), and the new release will eventually be available here About Google Play publishing +We start at a 10% rollout, after a day with no major problems go to 30%, and after another day to 100%. If you were counting that means that most players will get the new version after 2+ days. + +If there were problems, we halt the current rollout, fix the problems, and release a patch version, which starts at 10% again. + +Dear future me - the automation was extremely annoying guesswork to set up, so the facts you need to know are: - There is a user at the Google Cloud Platform Account Manager called Unciv_Upload_Account. There is an access key to this account, in json, stored as the Github secret GOOGLE_PLAY_SERVICE_ACCOUNT_JSON. - This user was granted ADMIN permissions to the Google Play (after much trial and error since nothing else seemed to work) under User > Users and Permissions. Under Manage > Account permissions, you can see that it has Admin. Updating the wiki Pages for the Unciv Github Wiki are kept in the main repository under /docs/wiki . The process to edit the wiki is as follows: Open a pull request in the main Unciv repository that changes files under /docs/wiki . Once the pull request is merged, an account with commit privileges on the Unciv repository leaves a comment saying \" update wiki \". This comment triggers a bot to copy all the wiki files from the main repository into the Github wiki, with a link back to the PR in its commit message for credit. Doing things this way has several distinct advantages over using the Github Wiki web interface directly: Changes can be proposed via PR and proofread or fact-checked. A proper MarkDown editor or IDE can be used to write the wiki, bringing faster editing, clickable links while editing, better live HTML preview, and automatic detection of problems like broken links. The wiki files can also be browsed at https://github.com/yairm210/Unciv/tree/master/docs/wiki. Auto-generated documentation made by the build process can be placed directly in the wiki. However, it also imposes a couple of conventions about how links should best be formatted: Link type Format Example Inter-wiki Should begin with \"./\", and include \".md\". ./Mods.md#other Code or asset file Should begin with \"/\", and be relative to the project root. /android/assets/game.png These formats will allow IDEs like Android studio to resolve these links and check for broken links, while also working on the Github code browser . The bot that updates the wiki from the main repository automatically translates them into formats that are compatible with Github Wikis, which have somewhat non-standard requirements.","title":"From code to deployment"},{"location":"wiki/From-code-to-deployment/#from-code-to-deployment","text":"So, your code works! You've solved all the bugs and now you just need to get it out to everyone! So, how does THAT work? The process has two major parts, one is \"Getting your code in the main repository\" and the other is \"Deploying versions\" - as a developer, you'll be taking an active part in the first process, but the second process is on me =)","title":"From code to deployment"},{"location":"wiki/From-code-to-deployment/#getting-your-code-in-the-main-repo","text":"First off, push your changes with Git to your own branch at https://github.com/YourUsername/Unciv.git. I hope you've been doing this during development too, but that's none of my business *sips tea* Issue a pull request from https://github.com/YourUsername/Unciv - from the Pull Requests is the simplest The Travis build will check that your proposed change builds properly and passes all tests I'll go over your pull request and will ask questions and request changes - this is not only for code quality and standard, it's mostly so you can learn how the repo works for the next change you make =) When everything looks good, I'll merge your code in and it'll enter the next release!","title":"Getting your code in the main repo"},{"location":"wiki/From-code-to-deployment/#deploying-versions","text":"When I'm ready to release a new version I: * Comment \"merge translations\" in one of the open PRs tagged as 'mergeable translation' to trigger the translation branch creation, add a \"summary\" comment to trigger summary generation, merge the PR and delete the branch (so next version translation branch starts fresh) * From my workstation - pull the latest changes and run the translation generation * Change the versionCode and versionName in the Android build.gradle so that Google Play and F-droid can recognize that it's a different release * Add an entry in the changelog.md done, WITHOUT hashtags, and less than 500 characters (that's the limit for Google play entries). The formatting needs to be exact or the text sent to Discord, the Github release etc. won't be complete. * Add a tag to the commit of the version. When the Github action sees that we've added a tag, it will run a build, and this time (because of the configuration we put in the yml file file), it will: * Pack a .jar file, which will work for every operating system with Java * Use Linux and Windows JDKs to create standalone zips for 32 and 64 bit systems, because we can't rely on the fact that users will have a JRE * Download Butler and use it to push the new versions to the itch.io page * Read the changelog.md file to get the changes for the latest version * Upload all of these files to a new release on Github, with the release notes, which will get added to the Releases page * Send an announcement on the Discord server of the version release and release notes via webhook * Pack, Sign, and Upload a new APK to the Google Play Console at 10% rollout * The F-Droid bot checks periodically if we added a new tag. When it recognizes that we did, it will update the yaml file here * When the bot next runs and sees that there's a version it doesn't have a release for, it will attempt to build the new release. The log of the build will be added here (redirects to the latest build), and the new release will eventually be available here","title":"Deploying versions"},{"location":"wiki/From-code-to-deployment/#about-google-play-publishing","text":"+We start at a 10% rollout, after a day with no major problems go to 30%, and after another day to 100%. If you were counting that means that most players will get the new version after 2+ days. + +If there were problems, we halt the current rollout, fix the problems, and release a patch version, which starts at 10% again. + +Dear future me - the automation was extremely annoying guesswork to set up, so the facts you need to know are: - There is a user at the Google Cloud Platform Account Manager called Unciv_Upload_Account. There is an access key to this account, in json, stored as the Github secret GOOGLE_PLAY_SERVICE_ACCOUNT_JSON. - This user was granted ADMIN permissions to the Google Play (after much trial and error since nothing else seemed to work) under User > Users and Permissions. Under Manage > Account permissions, you can see that it has Admin.","title":"About Google Play publishing"},{"location":"wiki/From-code-to-deployment/#updating-the-wiki","text":"Pages for the Unciv Github Wiki are kept in the main repository under /docs/wiki . The process to edit the wiki is as follows: Open a pull request in the main Unciv repository that changes files under /docs/wiki . Once the pull request is merged, an account with commit privileges on the Unciv repository leaves a comment saying \" update wiki \". This comment triggers a bot to copy all the wiki files from the main repository into the Github wiki, with a link back to the PR in its commit message for credit. Doing things this way has several distinct advantages over using the Github Wiki web interface directly: Changes can be proposed via PR and proofread or fact-checked. A proper MarkDown editor or IDE can be used to write the wiki, bringing faster editing, clickable links while editing, better live HTML preview, and automatic detection of problems like broken links. The wiki files can also be browsed at https://github.com/yairm210/Unciv/tree/master/docs/wiki. Auto-generated documentation made by the build process can be placed directly in the wiki. However, it also imposes a couple of conventions about how links should best be formatted: Link type Format Example Inter-wiki Should begin with \"./\", and include \".md\". ./Mods.md#other Code or asset file Should begin with \"/\", and be relative to the project root. /android/assets/game.png These formats will allow IDEs like Android studio to resolve these links and check for broken links, while also working on the Github code browser . The bot that updates the wiki from the main repository automatically translates them into formats that are compatible with Github Wikis, which have somewhat non-standard requirements.","title":"Updating the wiki"},{"location":"wiki/Getting-Started/","text":"This is a guide to editing, building, running and deploying Unciv from code So first things first - the initial \"No assumptions\" setup to have Unciv run from-code on your computer! Install Android Studio - it's free and awesome! Be aware that it's a long download! Install Git, it's the way for us to work together on this project. UI is optional, Android Studio has good Git tools built in :) Getting the code Create a Github account, if you don't already have one Fork the repo (click the \"Fork\" button on the top-right corner of https://github.com/yairm210/Unciv) - this will create a \"copy\" of the code on your account, at https://github.com/YourUsername/Unciv Clone your fork with git - the location will be https://github.com/YourUsername/Unciv.git, visible from the green \"Clone or download\" button at https://github.com/YourUsername/Unciv Load the project in Android Studio, Gradle will attempt the initial sync. If this is your first time with Android Studio, this may require you to accept the Android Build-tools licenses, which works differently on every device, so search for your OS-specific solution. A new install may not be able to do the initial sync - this comes in the form of Unable to find method ''void org.apache.commons.compress.archivers.zip.ZipFile.<init>(java.nio.channels.SeekableByteChannel)'' errors when you try to sync. If you have this problem go into File > Settings > Appearance & Behavior > System Settings > Android SDK Click \"SDK Tools\" Select \"Show Package Details\" in the bottom right Choose version 30.0.3 under \"Android SDK Build-Tools \" Click \"Apply\" In Android Studio, Run > Edit configurations. Click \"+\" to add a new configuration Choose \"Application\" Set the module to Unciv.desktop , main class to com.unciv.app.desktop.DesktopLauncher and <repo_folder>\\android\\assets\\ as the Working directory, OK to close the window If you get a ../../docs/uniques.md (No such file or directory) error that means you forgot to set the working directory! Select the Desktop configuration and click the green arrow button to run! I also recommend going to Settings > Version Control > Commit and turning off 'Before commit - perform code analysis' Unciv uses Gradle to specify dependencies and how to run. In the background, the Gradle gnomes will be off fetching the packages (a one-time effort) and, once that's done, will build the project! Congratulations! Unciv should now be running on your computer! Now we can start changing some code, and later we'll see how your changes make it into the main repository! Now would be a good time to get to know the project in general at the Project Structure overview!","title":"Getting Started"},{"location":"wiki/Home/","text":"Welcome to the Unciv wiki! If you're a developer, you'll probably want to start at the Getting Started page! If you're a translator, head over to Translating! If you're a modder, start here .","title":"Home"},{"location":"wiki/Installing-on-macOS/","text":"There is currently two ways to install UnCiv on macOS. It is recommended that you use the first method as the second one is overly complicated and the end result will be the same. Both installation methods require that you have Java 8 installed on your mac. Installing using JAR If you don't already have Java 8 installed on your mac make sure you download it from the official website . Once you have downloaded the file open it and follow the instructions on screen. Now that you have Java 8 installed it's time to download the latest UnCiv JAR. This can be done from the releases screen here on Github. Download the file called Unciv.jar. After downloading Unciv.jar open Finder on your mac and go to the location where you chose to save the file. Right-click or Control-click the file and chose Open. You will now be prompted with a window saying something similar to macOS cannot verify the developer of \"Unciv.jar\". Are you sure you want to open it? Press the Open button. Congratulations, you have now installed UnCiv. You may want to add a shortcut to the desktop to be able to open the game more easily. (Sadly UnCiv dose not auto update when installing it using this method on macOS so you will need to download the latest Unciv.jar from Github every time you want to update the game.) Installing from source For instructions on how to install UnCiv from source see Building locally without Android Studio . It is not recommended to use this method as it achieves the same result as the first method whilst being much more complicated and prone to errors along the way. (Sadly UnCiv dose not auto update when installing it using this method on macOS so you will need to follow these steps every time you want to update the game.)","title":"Installing on macOS"},{"location":"wiki/Installing-on-macOS/#installing-using-jar","text":"If you don't already have Java 8 installed on your mac make sure you download it from the official website . Once you have downloaded the file open it and follow the instructions on screen. Now that you have Java 8 installed it's time to download the latest UnCiv JAR. This can be done from the releases screen here on Github. Download the file called Unciv.jar. After downloading Unciv.jar open Finder on your mac and go to the location where you chose to save the file. Right-click or Control-click the file and chose Open. You will now be prompted with a window saying something similar to macOS cannot verify the developer of \"Unciv.jar\". Are you sure you want to open it? Press the Open button. Congratulations, you have now installed UnCiv. You may want to add a shortcut to the desktop to be able to open the game more easily. (Sadly UnCiv dose not auto update when installing it using this method on macOS so you will need to download the latest Unciv.jar from Github every time you want to update the game.)","title":"Installing using JAR"},{"location":"wiki/Installing-on-macOS/#installing-from-source","text":"For instructions on how to install UnCiv from source see Building locally without Android Studio . It is not recommended to use this method as it achieves the same result as the first method whilst being much more complicated and prone to errors along the way. (Sadly UnCiv dose not auto update when installing it using this method on macOS so you will need to follow these steps every time you want to update the game.)","title":"Installing from source"},{"location":"wiki/JSON-files-for-mods/","text":"These pages are a work in progress. Information they contain may be incomplete. The JSON files that make up mods can have many different fields, and as not all are used in the base game, this wiki page will contain the full information of each. It will also give a short explanation of the syntax of JSON files. Table of Contents General Overview of JSON files Civilization-related JSON files Beliefs.json Buildings.json Nations.json Policies.json Quests.json Religions.json Specialists.json Techs.json Map-related JSON files Terrains.json TileResources.json TileImprovements.json Ruins.json Tileset-specific json Unit-related JSON files Units.json UnitPromotions.json UnitTypes.json Miscellaneous JSON files Difficulties.json Eras.json ModOptions.json Stats Sounds Civilopedia text General Overview of JSON files Resources: json.org , ISO standard Almost all Unciv JSON files start with a \"[\" and end with a \"]\". In between these are different objects of the type you are describing, each of which is contained between a \"{\" and a \"}\". For example, a very simple units.json may look like: [ { \"name\": \"Warrior\", \"cost\": 16 }, { \"name\": \"Spearman\", \"cost\": 24, \"promotions\": [\"Shock I\", \"Drill I\"] } ] This file contains two unit objects, one for a warrior and one for a spearman. These objects have different attributes, in this case \"name\", \"cost\" and \"promotions\". All these attributes have a certain type, a String (text) for \"name\", an Integer for \"cost\" and a List of Strings for \"promotions\". There are different types of attributes: | type | notes | | --------- | ----- | | String | A word or sentence. Should be between double quotes (\") | | Integer | A number. Can be both positive or negative. Should not be between quotes | | Boolean | A value that can either be 'true' or 'false'. Should not be between quotes | | List of [type] | If multiple values could apply (such as with the promotions above), they should be put inside a list. Each element of the list should be written like a normal attribute, seperated by comma's, and enclosed between square braces. E.g.: [\"Shock I\", \"Shock II\"] or [1, 2, 3]. | | Object | The most complicated type of attribute. An object is comprised of multiple attributes, each of which again has a type. These attributes have a key (the part before the \":\") and a value (the part behind it). For an example, see below. | Example of a Buildings.json adding a new \"Cultural Library\" building which gives +50% science and +50% culture: [ { \"name\": \"Cultural Library\" \"percentStatBonus\" : {\"science\": 50, \"culture\": 50} } ] The keys in this example are \"science\" and \"culture\", and both have the value \"50\". In some sense you can see from these types that JSON files themselves are actually a list of objects, each describing a single building, unit or something else. Information on JSON files used in the game Many parts of Unciv are moddable, and for each there is a seperate json file. There is a json file for buildings, for units, for promotions units can have, for technologies, etc. The different new buildings or units you define can also have lots of different attributes, though not all are required. Below are tables documenting all the different attributes everything can have. Only the attributes which are noted to be 'required' must be provided. All others have a default value that will be used when it is omitted. The individual files are described on separate pages: Civilization-related JSON files Map-related JSON files Unit-related JSON files Miscellaneous JSON files","title":"JSON files for mods"},{"location":"wiki/JSON-files-for-mods/#table-of-contents","text":"General Overview of JSON files Civilization-related JSON files Beliefs.json Buildings.json Nations.json Policies.json Quests.json Religions.json Specialists.json Techs.json Map-related JSON files Terrains.json TileResources.json TileImprovements.json Ruins.json Tileset-specific json Unit-related JSON files Units.json UnitPromotions.json UnitTypes.json Miscellaneous JSON files Difficulties.json Eras.json ModOptions.json Stats Sounds Civilopedia text","title":"Table of Contents"},{"location":"wiki/JSON-files-for-mods/#general-overview-of-json-files","text":"Resources: json.org , ISO standard Almost all Unciv JSON files start with a \"[\" and end with a \"]\". In between these are different objects of the type you are describing, each of which is contained between a \"{\" and a \"}\". For example, a very simple units.json may look like: [ { \"name\": \"Warrior\", \"cost\": 16 }, { \"name\": \"Spearman\", \"cost\": 24, \"promotions\": [\"Shock I\", \"Drill I\"] } ] This file contains two unit objects, one for a warrior and one for a spearman. These objects have different attributes, in this case \"name\", \"cost\" and \"promotions\". All these attributes have a certain type, a String (text) for \"name\", an Integer for \"cost\" and a List of Strings for \"promotions\". There are different types of attributes: | type | notes | | --------- | ----- | | String | A word or sentence. Should be between double quotes (\") | | Integer | A number. Can be both positive or negative. Should not be between quotes | | Boolean | A value that can either be 'true' or 'false'. Should not be between quotes | | List of [type] | If multiple values could apply (such as with the promotions above), they should be put inside a list. Each element of the list should be written like a normal attribute, seperated by comma's, and enclosed between square braces. E.g.: [\"Shock I\", \"Shock II\"] or [1, 2, 3]. | | Object | The most complicated type of attribute. An object is comprised of multiple attributes, each of which again has a type. These attributes have a key (the part before the \":\") and a value (the part behind it). For an example, see below. | Example of a Buildings.json adding a new \"Cultural Library\" building which gives +50% science and +50% culture: [ { \"name\": \"Cultural Library\" \"percentStatBonus\" : {\"science\": 50, \"culture\": 50} } ] The keys in this example are \"science\" and \"culture\", and both have the value \"50\". In some sense you can see from these types that JSON files themselves are actually a list of objects, each describing a single building, unit or something else.","title":"General Overview of JSON files"},{"location":"wiki/JSON-files-for-mods/#information-on-json-files-used-in-the-game","text":"Many parts of Unciv are moddable, and for each there is a seperate json file. There is a json file for buildings, for units, for promotions units can have, for technologies, etc. The different new buildings or units you define can also have lots of different attributes, though not all are required. Below are tables documenting all the different attributes everything can have. Only the attributes which are noted to be 'required' must be provided. All others have a default value that will be used when it is omitted. The individual files are described on separate pages: Civilization-related JSON files Map-related JSON files Unit-related JSON files Miscellaneous JSON files","title":"Information on JSON files used in the game"},{"location":"wiki/Making-a-new-Civilization/","text":"Making a new Civilization So you want to add your favorite civilization? There are a few steps required, so we'll walk you through them! Fill in your Nation info Each civ has some basic information - what the civ name is, the leader's name, colors and city names. In addition, each civ has flavor text when declaring war, intoduction etc. All of these need to be filled in in Nations.json Get your Civ icon Each civ has an icon, like the wreath for Rome, for instant identification. All of these icons are white on a transparent background, and are 100x100 pixels - see icon considerations for details You'll need to put your icon in the NationIcons folder . Same as with the nation name and leader name, the unique ability should also be put in the Nations translation file for bonus points =) Congrats, your Civ is now fully playable! But apart from the flavor, they are boring gameplay-wise, so now we need to add unique abilities! Adding unique units Units in general are added in the Units.json file, with an icon in the UnitIcons folder. The icon must be 200x200 pixels, white on transparent background - see icon considerations for details Remember that these are unique units, so search for an existing unique unit to see how they replace their regular counterparts! Adding unique buildings Same as the units - info is in the Buildings.json file and icons in the BuildingIcons folder, same rules for the icons apply (200x200 pixels, icon considerations) Civ Unique Check out our list of uniques to see all the cool special effects you can add to your civilization! Icon considerations ALL icons must be legally acceptable, meaning they either come from from open sources or you act according to their licence (for Creative Commons, for instance, you have to specify the source and the creator). Icons directly from the base game belong to Firaxis, so I'm not sure we're legally allowed to use them - please use other sources! One source I use constantly is The Noun Project - everything there is Creative Commons or open, so they can all be used! Credits for icons should go in the Credits page","title":"Making a new Civilization"},{"location":"wiki/Making-a-new-Civilization/#making-a-new-civilization","text":"So you want to add your favorite civilization? There are a few steps required, so we'll walk you through them!","title":"Making a new Civilization"},{"location":"wiki/Making-a-new-Civilization/#fill-in-your-nation-info","text":"Each civ has some basic information - what the civ name is, the leader's name, colors and city names. In addition, each civ has flavor text when declaring war, intoduction etc. All of these need to be filled in in Nations.json","title":"Fill in your Nation info"},{"location":"wiki/Making-a-new-Civilization/#get-your-civ-icon","text":"Each civ has an icon, like the wreath for Rome, for instant identification. All of these icons are white on a transparent background, and are 100x100 pixels - see icon considerations for details You'll need to put your icon in the NationIcons folder . Same as with the nation name and leader name, the unique ability should also be put in the Nations translation file for bonus points =) Congrats, your Civ is now fully playable! But apart from the flavor, they are boring gameplay-wise, so now we need to add unique abilities!","title":"Get your Civ icon"},{"location":"wiki/Making-a-new-Civilization/#adding-unique-units","text":"Units in general are added in the Units.json file, with an icon in the UnitIcons folder. The icon must be 200x200 pixels, white on transparent background - see icon considerations for details Remember that these are unique units, so search for an existing unique unit to see how they replace their regular counterparts!","title":"Adding unique units"},{"location":"wiki/Making-a-new-Civilization/#adding-unique-buildings","text":"Same as the units - info is in the Buildings.json file and icons in the BuildingIcons folder, same rules for the icons apply (200x200 pixels, icon considerations)","title":"Adding unique buildings"},{"location":"wiki/Making-a-new-Civilization/#civ-unique","text":"Check out our list of uniques to see all the cool special effects you can add to your civilization!","title":"Civ Unique"},{"location":"wiki/Making-a-new-Civilization/#icon-considerations","text":"ALL icons must be legally acceptable, meaning they either come from from open sources or you act according to their licence (for Creative Commons, for instance, you have to specify the source and the creator). Icons directly from the base game belong to Firaxis, so I'm not sure we're legally allowed to use them - please use other sources! One source I use constantly is The Noun Project - everything there is Creative Commons or open, so they can all be used! Credits for icons should go in the Credits page","title":"Icon considerations"},{"location":"wiki/Map-related-JSON-files/","text":"Terrains.json TileResources.json TileImprovements.json Ruins.json Tileset-specific json Terrains.json This file lists the base terrains, terrain features and natural wonders that can appear on the map. Each terrain entry can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | | | type | Enum | Required | Land, Water, TerrainFeature, NaturalWonder | | occursOn | List | Default none | Only for terrain features and Natural Wonders: The baseTerrain it can be placed on | | turnsInto | String | Default none | Only for Natural Wonders: After placing the Natural Wonder its base terrain is changed to this | | weight | Integer | Default 10 | Only for Natural Wonders: relative weight it will be picked by the map generator | | <stats> | Float | Optional | Per-turn yield or bonus yield for the tile, see Stats | | overrideStats | Boolean | Default false | If on, a feature's yields replace any yield from underlying terrain instead of adding to it | | unbuildable | Boolean | Default false | If true, nothing can be built here - not even resource improvements | | impassable | Boolean | Default false | no unit can enter unless it has a special unique | | movementCost | Integer | Default 1 | base movement cost | | defenceBonus | Float | Default 0 | combat bonus for units being attacked here | | RGB | List Integer * 3 | Default 'Gold' | RGB color for 'Default' tileset display | | uniques | List | Default empty | List of effects, see here | | civilopediaText | List | Default empty | see civilopediaText chapter | Note that many Natural Wonders have hardcoded routines for their placement and are recognized by name (e.g. Great Barrier Reef being more than one tile). TileImprovements.json This file lists the improvements that can be constructed or created on a map tile by a unit (any unit having the appropriate unique). Note that improvements have two visual representations - icon and pixel graphic in the tileset. Omitting the icon results in a horribly ugly user interface, while omitting tileset graphics will just miss out on an optional visualization. If you provide a pixel graphic for FantasyHex, please be aware of the layering system and the ruleVariants in the tileset json. A single graphic may suffice if it has lots of transparency, as it will be drawn on top of all other terrain elements. Each improvement can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | | | terrainsCanBeFoundOn | List | Default empty | Terrains that allow this resource | | techRequired | String | Default none | The name of the technology required to build this improvement | | uniqueTo | String | Default none | The name of the nation this improvement is unique for | | <stats> | Float | Optional | Per-turn bonus yield for the tile, see Stats | | turnsToBuild | Integer | | Number of turns a worker spends building this (ignored for 'create' actions) | | uniques | List | Default empty | List of effects, see here | | shortcutKey | String | Default none | Keyboard binding. At the moment a single character (no function keys or Ctrl combinations) | | civilopediaText | List | Default empty | see civilopediaText chapter | Tiles with no terrains, but positive turns to build, can be built only when the tile has a resource that names this improvement or special uniques are used. (TODO: missing something?) Tiles with no terrains, and no turns to build, are like great improvements - they're placeable. That means a unit could exist with a 'Can create [this]' unique, and that the improvement will not show in a worker's improvement picker dialog. Removable Terrain features will need to be removed before building an improvement - unless the feature is named in terrainsCanBeFoundOn or the unique \"Does not need removal of [terrainFeature]\" is used (e.g. Camp allowed by resource). Special improvements: Road, Railroad, Remove *, Cancel improvement order, City ruins, City center, Barbarian encampment - these have special meanings hardcoded to their names. TileResources.json This file lists the resources that a map tile can have. Note the predefined resource types cannot be altered in json. Note also that resources have two visual representations - icon and pixel graphic in the tileset. Omitting the icon results in a horribly ugly user interface, while omitting tileset graphics will miss out on a visualization on the map. If you provide a pixel graphic for FantasyHex, please be aware of the layering system and the ruleVariants in the tileset json. A single graphic may suffice if it has lots of transparency, as it will be drawn on top of terrain and features but below an improvement - if the single improvement graphic exists at all. Each resource can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | | | resourceType | String | Default Bonus | Bonus, Luxury or Strategic | | terrainsCanBeFoundOn | List | Default empty | Terrains that allow this resource | | <stats> | Float | Optional | Per-turn bonus yield for the tile, see Stats , can be repeated | | improvement | String | Default empty | The improvement ( TileImprovements.json ) for this resource | | improvementStats | Object | Default empty | The additional yield when improved as sub-object with one or more Stats | | revealedBy | String | Default empty | The technology name required to see, work and improve this resource | | unique | String | Default empty | Effects, see here - at the moment only one unique may be added | | civilopediaText | List | Default empty | see civilopediaText chapter | Ruins.json Link to original This file contains the possible rewards ancient ruins give. It is not required, if omitted, the default file for the game is used, even in baseRuleSet mods. Each of the objects in the file represents a single reward you can get from ruins. It has the following properties: attribute Type optional or not notes name String required Name of the ruins. Never shown to the user, but they have to be distinct notification String required Notification added to the user when this reward is chosen. If omitted, an empty notification is shown. Some notifications may have parameters, refer to the table below. weight Integer (\u22650) defaults to 1 Weight this reward should have. Higher weights result in a higher chance of it being chosen* uniques List of Strings defaults to none [uniques]Uniques#one-time-effect) or uniques that will trigger when entering the ruins. If more than 1 unique is added, the notification will be shown multiple times due to a bug. excludedDifficulties List of Strings defaults to None A list of all difficulties on which this reward may not be awarded The exact algorithm for choosing a reward is the following: Create a list of all possible rewards, with rewards with a higher weight appearing multiple times. A reward with weight one will appear once, a reward with weight two will appear twice, etc. Shuffle this list Try give rewards starting from the top of the list. If any of the uniques of the rewards is valid in this context, reward it and stop trying more rewards. Notifications Some of the rewards ruins can give will have results that are not deterministic when writing it in the JSON, so creating a good notification for it would be impossible. An example for this would be the \"Gain [50]-[100] [Gold]\" unique, which will give a random amount of gold. For this reason, we allow some notifications to have parameters, in which values will be filled, such as \"You found [goldAmount] gold in the ruins!\". All the uniques which have this property can be found below. unique parameters Free [] found in the ruins The name of the unit will be filled in the notification, including unique units of the nation [] population in a random city The name of the city to which the population is added will be filled in the notification Gain []-[] [] The exact amount of the stat gained will be filled in the notification [] free random reasearchable Tech(s) from the [] The notification must have placeholders equal to the number of techs granted this way. Each of the names of these free techs will be filled in the notification Gain enough Faith for a Pantheon The amount of faith gained is filled in the notification Gain enough Faith for []% of a Great Prophet The amount of faith gained is filled in the notification Specific uniques A few uniques can be added to ancient ruin effects to modify when they can be earned. These are: - \"Only available after [amount] turns\" - \"Hidden when religion is disabled\" - \"Hidden after a great prophet has been earned\" Tileset-specific json A mod can define new Tilesets or add to existing ones, namely FantasyHex. There is one json file per Tileset, named same as the Tileset, and placed in a subfolder named \"TileSets\" relative to the other json files. This is called TileSetConfig and has the following structure: Attribute Type Optional? Notes useColorAsBaseTerrain Boolean Default true ? WIP unexploredTileColor Color Default Dark Gray {\"r\":0.25,\"g\":0.25,\"b\":0.25,\"a\":1} fogOfWarColor Color Default Black {\"r\":0,\"g\":0,\"b\":0,\"a\":1} ruleVariants List Default empty see below ruleVariants control substitutions when layering images for a tile, they are list looking like: \"ruleVariants\": { \"Grassland+Forest\": [\"Grassland\",\"GrasslandForest\"], \"Plains+Forest\": [\"Plains\",\"PlainsForest\"], \"Plains+Jungle\": [\"Plains\",\"PlainsJungle\"], ... } Each line means \"if the tile content is this... then combine the following png images\". The key part follows a specific order and must match in its entirety, meaning \"Plains+Forest\" is not valid for \"Plains+Forest+Deer\", and when it matches no other image layering is done except roads and units (I think - WIP ). When TileSetConfig's for the same Tileset are combined, for the first three properties the last mod wins, while ruleVariants are merged, meaning only an entry with the same key overwrites an earlier entry. Stats Terrains, features, resources and improvements may list yield statistics. They can be one of the following: - production, food, gold, science, culture, happiness, faith If an object carries general stats, any combination (or none) of these can be specified. For specialized stats, they might come as sub-object in a named field. Example: \"gold\": 2, \"improvement\": \"Quarry\", \"improvementStats\": {\"gold\": 1,\"production\": 1}, The values are usually integers, though the underlying code supports floating point. The effects are, however, insufficiently tested and therefore -so far- using fractional stats is unsupported. Go ahead and thoroughly test that in a mod and help out with feedback \ud83d\ude01.","title":"Map related JSON files"},{"location":"wiki/Map-related-JSON-files/#terrainsjson","text":"This file lists the base terrains, terrain features and natural wonders that can appear on the map. Each terrain entry can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | | | type | Enum | Required | Land, Water, TerrainFeature, NaturalWonder | | occursOn | List | Default none | Only for terrain features and Natural Wonders: The baseTerrain it can be placed on | | turnsInto | String | Default none | Only for Natural Wonders: After placing the Natural Wonder its base terrain is changed to this | | weight | Integer | Default 10 | Only for Natural Wonders: relative weight it will be picked by the map generator | | <stats> | Float | Optional | Per-turn yield or bonus yield for the tile, see Stats | | overrideStats | Boolean | Default false | If on, a feature's yields replace any yield from underlying terrain instead of adding to it | | unbuildable | Boolean | Default false | If true, nothing can be built here - not even resource improvements | | impassable | Boolean | Default false | no unit can enter unless it has a special unique | | movementCost | Integer | Default 1 | base movement cost | | defenceBonus | Float | Default 0 | combat bonus for units being attacked here | | RGB | List Integer * 3 | Default 'Gold' | RGB color for 'Default' tileset display | | uniques | List | Default empty | List of effects, see here | | civilopediaText | List | Default empty | see civilopediaText chapter | Note that many Natural Wonders have hardcoded routines for their placement and are recognized by name (e.g. Great Barrier Reef being more than one tile).","title":"Terrains.json"},{"location":"wiki/Map-related-JSON-files/#tileimprovementsjson","text":"This file lists the improvements that can be constructed or created on a map tile by a unit (any unit having the appropriate unique). Note that improvements have two visual representations - icon and pixel graphic in the tileset. Omitting the icon results in a horribly ugly user interface, while omitting tileset graphics will just miss out on an optional visualization. If you provide a pixel graphic for FantasyHex, please be aware of the layering system and the ruleVariants in the tileset json. A single graphic may suffice if it has lots of transparency, as it will be drawn on top of all other terrain elements. Each improvement can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | | | terrainsCanBeFoundOn | List | Default empty | Terrains that allow this resource | | techRequired | String | Default none | The name of the technology required to build this improvement | | uniqueTo | String | Default none | The name of the nation this improvement is unique for | | <stats> | Float | Optional | Per-turn bonus yield for the tile, see Stats | | turnsToBuild | Integer | | Number of turns a worker spends building this (ignored for 'create' actions) | | uniques | List | Default empty | List of effects, see here | | shortcutKey | String | Default none | Keyboard binding. At the moment a single character (no function keys or Ctrl combinations) | | civilopediaText | List | Default empty | see civilopediaText chapter | Tiles with no terrains, but positive turns to build, can be built only when the tile has a resource that names this improvement or special uniques are used. (TODO: missing something?) Tiles with no terrains, and no turns to build, are like great improvements - they're placeable. That means a unit could exist with a 'Can create [this]' unique, and that the improvement will not show in a worker's improvement picker dialog. Removable Terrain features will need to be removed before building an improvement - unless the feature is named in terrainsCanBeFoundOn or the unique \"Does not need removal of [terrainFeature]\" is used (e.g. Camp allowed by resource). Special improvements: Road, Railroad, Remove *, Cancel improvement order, City ruins, City center, Barbarian encampment - these have special meanings hardcoded to their names.","title":"TileImprovements.json"},{"location":"wiki/Map-related-JSON-files/#tileresourcesjson","text":"This file lists the resources that a map tile can have. Note the predefined resource types cannot be altered in json. Note also that resources have two visual representations - icon and pixel graphic in the tileset. Omitting the icon results in a horribly ugly user interface, while omitting tileset graphics will miss out on a visualization on the map. If you provide a pixel graphic for FantasyHex, please be aware of the layering system and the ruleVariants in the tileset json. A single graphic may suffice if it has lots of transparency, as it will be drawn on top of terrain and features but below an improvement - if the single improvement graphic exists at all. Each resource can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | | | resourceType | String | Default Bonus | Bonus, Luxury or Strategic | | terrainsCanBeFoundOn | List | Default empty | Terrains that allow this resource | | <stats> | Float | Optional | Per-turn bonus yield for the tile, see Stats , can be repeated | | improvement | String | Default empty | The improvement ( TileImprovements.json ) for this resource | | improvementStats | Object | Default empty | The additional yield when improved as sub-object with one or more Stats | | revealedBy | String | Default empty | The technology name required to see, work and improve this resource | | unique | String | Default empty | Effects, see here - at the moment only one unique may be added | | civilopediaText | List | Default empty | see civilopediaText chapter |","title":"TileResources.json"},{"location":"wiki/Map-related-JSON-files/#ruinsjson","text":"Link to original This file contains the possible rewards ancient ruins give. It is not required, if omitted, the default file for the game is used, even in baseRuleSet mods. Each of the objects in the file represents a single reward you can get from ruins. It has the following properties: attribute Type optional or not notes name String required Name of the ruins. Never shown to the user, but they have to be distinct notification String required Notification added to the user when this reward is chosen. If omitted, an empty notification is shown. Some notifications may have parameters, refer to the table below. weight Integer (\u22650) defaults to 1 Weight this reward should have. Higher weights result in a higher chance of it being chosen* uniques List of Strings defaults to none [uniques]Uniques#one-time-effect) or uniques that will trigger when entering the ruins. If more than 1 unique is added, the notification will be shown multiple times due to a bug. excludedDifficulties List of Strings defaults to None A list of all difficulties on which this reward may not be awarded The exact algorithm for choosing a reward is the following: Create a list of all possible rewards, with rewards with a higher weight appearing multiple times. A reward with weight one will appear once, a reward with weight two will appear twice, etc. Shuffle this list Try give rewards starting from the top of the list. If any of the uniques of the rewards is valid in this context, reward it and stop trying more rewards.","title":"Ruins.json"},{"location":"wiki/Map-related-JSON-files/#notifications","text":"Some of the rewards ruins can give will have results that are not deterministic when writing it in the JSON, so creating a good notification for it would be impossible. An example for this would be the \"Gain [50]-[100] [Gold]\" unique, which will give a random amount of gold. For this reason, we allow some notifications to have parameters, in which values will be filled, such as \"You found [goldAmount] gold in the ruins!\". All the uniques which have this property can be found below. unique parameters Free [] found in the ruins The name of the unit will be filled in the notification, including unique units of the nation [] population in a random city The name of the city to which the population is added will be filled in the notification Gain []-[] [] The exact amount of the stat gained will be filled in the notification [] free random reasearchable Tech(s) from the [] The notification must have placeholders equal to the number of techs granted this way. Each of the names of these free techs will be filled in the notification Gain enough Faith for a Pantheon The amount of faith gained is filled in the notification Gain enough Faith for []% of a Great Prophet The amount of faith gained is filled in the notification","title":"Notifications"},{"location":"wiki/Map-related-JSON-files/#specific-uniques","text":"A few uniques can be added to ancient ruin effects to modify when they can be earned. These are: - \"Only available after [amount] turns\" - \"Hidden when religion is disabled\" - \"Hidden after a great prophet has been earned\"","title":"Specific uniques"},{"location":"wiki/Map-related-JSON-files/#tileset-specific-json","text":"A mod can define new Tilesets or add to existing ones, namely FantasyHex. There is one json file per Tileset, named same as the Tileset, and placed in a subfolder named \"TileSets\" relative to the other json files. This is called TileSetConfig and has the following structure: Attribute Type Optional? Notes useColorAsBaseTerrain Boolean Default true ? WIP unexploredTileColor Color Default Dark Gray {\"r\":0.25,\"g\":0.25,\"b\":0.25,\"a\":1} fogOfWarColor Color Default Black {\"r\":0,\"g\":0,\"b\":0,\"a\":1} ruleVariants List Default empty see below ruleVariants control substitutions when layering images for a tile, they are list looking like: \"ruleVariants\": { \"Grassland+Forest\": [\"Grassland\",\"GrasslandForest\"], \"Plains+Forest\": [\"Plains\",\"PlainsForest\"], \"Plains+Jungle\": [\"Plains\",\"PlainsJungle\"], ... } Each line means \"if the tile content is this... then combine the following png images\". The key part follows a specific order and must match in its entirety, meaning \"Plains+Forest\" is not valid for \"Plains+Forest+Deer\", and when it matches no other image layering is done except roads and units (I think - WIP ). When TileSetConfig's for the same Tileset are combined, for the first three properties the last mod wins, while ruleVariants are merged, meaning only an entry with the same key overwrites an earlier entry.","title":"Tileset-specific json"},{"location":"wiki/Map-related-JSON-files/#stats","text":"Terrains, features, resources and improvements may list yield statistics. They can be one of the following: - production, food, gold, science, culture, happiness, faith If an object carries general stats, any combination (or none) of these can be specified. For specialized stats, they might come as sub-object in a named field. Example: \"gold\": 2, \"improvement\": \"Quarry\", \"improvementStats\": {\"gold\": 1,\"production\": 1}, The values are usually integers, though the underlying code supports floating point. The effects are, however, insufficiently tested and therefore -so far- using fractional stats is unsupported. Go ahead and thoroughly test that in a mod and help out with feedback \ud83d\ude01.","title":"Stats"},{"location":"wiki/Miscellaneous-JSON-files/","text":"Difficulties.json Eras.json ModOptions.json Generic Civilopedia Text Difficulties.json Link to original This file defines the difficulty levels a player can choose when starting a new game. Each difficulty level can have the following attributes: | Attribute | Type | Mandatory | Notes | | --------- | ---- | ------- | ----- | | name | String | Required | Name of the difficulty level | | baseHappiness | Integer | Default 0 | | extraHappinessPerLuxury | Float | Default 0 | | researchCostModifier | Float | Default 1 | | unitCostModifier | Float | Default 1 | | buildingCostModifier | Float | Default 1 | | policyCostModifier | Float | Default 1 | | unhappinessModifier | Float | Default 1 | | barbarianBonus | Float | Default 0 | | playerBonusStartingUnits | List of Units | Default empty | Can also be 'Era Starting Unit', maps to startingMilitaryUnit of the Eras file. All other units must be in Units.json ] | | aiCityGrowthModifier | Float | Default 1 | | aiUnitCostModifier | Float | Default 1 | | aiBuildingCostModifier | Float | Default 1 | | aiWonderCostModifier | Float | Default 1 | | aiBuildingMaintenanceModifier | Float | Default 1 | | aiUnitMaintenanceModifier | Float | Default 1 | | aiFreeTechs | List of Techs | Default empty | | aiMajorCivBonusStartingUnits | List of Units | Default empty | See above | | aiCityStateBonusStartingUnits | List of Units | Default empty | See above | | aiUnhappinessModifier | Float | Default 1 | | aisExchangeTechs | Boolean | | Unimplemented | | turnBarbariansCanEnterPlayerTiles | Integer | Default 0 | | clearBarbarianCampReward | Integer | Default 25 | Eras.json Link to original This file should contain all the era's you want to use in your mod. Each era can have the following attributes: | attribute | Type | optional or not | notes | | --------- | ---- | --------------- | ----- | | name | String | required | Name of the era | | researchAgreementCost | Integer (\u22650) | defaults to 300 | Cost of research agreements were the most technologically advanced civ is in this era | | iconRGB | List of 3 Integers | defaults to [255,255,255] | RGB color that icons for technologies of this era should have in the Tech screen | | unitBaseBuyCost | Integer (\u22650) | defaults to 200 | Base cost of buying units with Faith, Food, Science or Culture when no other cost is provided | | startingSettlerCount | Integer (\u22650) | defaults to 1 | Amount of settler units that should be spawned when starting a game in this era | | startingSettlerUnit | String | defaults to \"Settler\" | Name of the unit that should be used for the previous field. Must be in Units.json | | startingWokerCount | Integer (\u22650) | defaults to 0 | Amount of worker units that should be spawned when starting a game in this era | | startingWorkerUnit | String | defaults to \"Worker\" | Name of the unit that should be used for the previous field. Must be in Units.json | | startingMilitaryUnitCount | Integer (\u22650) | defaults to 1 | Amount of military units that should be spawned when starting a game in this era | | startingMilitaryUnit | String | defaults to \"Warrior\" | Name of the unit that should be used for the previous field. Must be in Units.json | | startingGold | Integer (\u22650) | defaults to 0 | Amount of gold each civ should receive when starting a game in this era | | startingCulture | Integer (\u22650) | defaults to 0 | Amount of culture each civ should receive when starting a game in this era | | settlerPopulation | Integer (>0) | defaults to 1 | Default amount of population each city should have when settled when starting a game in this era | | settlerBuildings | List of Strings | defaults to none | Buildings that should automatically be built whenever a city is settled when starting a game in this era | | startingObsoleteWonders | List of Strings | defaults to none | Wonders (and technically buildings) that should be impossible to built when starting a game in this era. Used in the base game to remove all wonders older than 2 era's | ModOptions.json This file is a little different: - Does not exist in Vanilla ruleset - Is entirely optional but will be created after downloading a mod The file can have the following attributes, including the values Unciv sets (no point in a mod author setting those): | Attribute | Type | Defaults | Notes | |-----------|------|-----------|-------| | isBaseRuleset | Boolean | false | Differentiates mods that change the vanilla ruleset or replace it | | maxXPfromBarbarians | Integer | 30 | ...as the name says... | | uniques | List | empty | Mod-wide specials, see here | | techsToRemove | List | empty | List of Technologies to remove (isBaseRuleset=false only) | | buildingsToRemove | List | empty | List of Buildings or Wonders to remove (isBaseRuleset=false only) | | unitsToRemove | List | empty | List of Units to remove (isBaseRuleset=false only) | | nationsToRemove | List | empty | List of Nations to remove (isBaseRuleset=false only) | | lastUpdated | String | empty | Set automatically after download - Last repository update, not necessarily last content change | | modUrl | String | empty | Set automatically after download - URL of repository | | author | String | empty | Set automatically after download - Owner of repository | | modSize | Integer | empty | Set automatically after download - kB in entire repository, not sum of default branch files | Civilopedia text Any 'thing' defined in json and listed in the Civilopedia can supply extra text, specifically for the Civilopedia. This can be used to explain special considerations better when the automatically generated display is insufficient, or for 'flavour', background stories and the like. Such text can be formatted and linked to other Civilopedia entries, within limits. An example of the format is: \"civilopediaText\": [ {\"text\":\"Ancient ruins provide a one-time random bonus when explored\"}, {\"separator\":true}, {\"text\":\"This line is red and links to the Scout including icons\", \"link\":\"Unit/Scout\", \"color\":\"red\"}, {\"text\":\"A big fat header sporting a golden star\", \"header\":1, \"starred\":true, \"color\":\"#ffeb7f\"}, ], List of attributes - note not all combinations are valid: |attribute|type|description| |---------|----|-----------| | text |String|Text to display.| | link |String|Create link and icon, format: Category/Name or external link ('http://','https://','mailto:').| | icon |String|Show icon without linking, format: Category/Name.| | extraImage |String|Display an Image instead of text. Can be a path found in a texture atlas or or the name of a png or jpg in the ExtraImages folder.| | imageSize |Float|Width in world units of the [extraImage], height is calculated preserving aspect ratio. Defaults to available width.| | header |Integer|Header level. 1 means double text size and decreases from there.| | size |Integer|Text size, default is 18. Use size or header but not both.| | indent |Integer|Indent level. 0 means text will follow icons, 1 aligns to the right of all icons, each further step is 30 units.| | padding |Float|Vertical padding between rows, defaults to 5 units.| | color |String|Sets text color, accepts names or 6/3-digit web colors (e.g. #FFA040).| | separator |Boolean|Renders a separator line instead of text. Can be combined only with color and size (line width, default 2).| | starred |Boolean|Decorates text with a star icon - if set, it receives the color instead of the text.| | centered |Boolean|Centers the line (and turns off automatic wrap).| The lines from json will 'surround' the automatically generated lines such that the latter are inserted just above the first json line carrying a link, if any. If no json lines have links, they will be inserted between the automatic title and the automatic info. This method may, however, change in the future.","title":"Miscellaneous JSON files"},{"location":"wiki/Miscellaneous-JSON-files/#difficultiesjson","text":"Link to original This file defines the difficulty levels a player can choose when starting a new game. Each difficulty level can have the following attributes: | Attribute | Type | Mandatory | Notes | | --------- | ---- | ------- | ----- | | name | String | Required | Name of the difficulty level | | baseHappiness | Integer | Default 0 | | extraHappinessPerLuxury | Float | Default 0 | | researchCostModifier | Float | Default 1 | | unitCostModifier | Float | Default 1 | | buildingCostModifier | Float | Default 1 | | policyCostModifier | Float | Default 1 | | unhappinessModifier | Float | Default 1 | | barbarianBonus | Float | Default 0 | | playerBonusStartingUnits | List of Units | Default empty | Can also be 'Era Starting Unit', maps to startingMilitaryUnit of the Eras file. All other units must be in Units.json ] | | aiCityGrowthModifier | Float | Default 1 | | aiUnitCostModifier | Float | Default 1 | | aiBuildingCostModifier | Float | Default 1 | | aiWonderCostModifier | Float | Default 1 | | aiBuildingMaintenanceModifier | Float | Default 1 | | aiUnitMaintenanceModifier | Float | Default 1 | | aiFreeTechs | List of Techs | Default empty | | aiMajorCivBonusStartingUnits | List of Units | Default empty | See above | | aiCityStateBonusStartingUnits | List of Units | Default empty | See above | | aiUnhappinessModifier | Float | Default 1 | | aisExchangeTechs | Boolean | | Unimplemented | | turnBarbariansCanEnterPlayerTiles | Integer | Default 0 | | clearBarbarianCampReward | Integer | Default 25 |","title":"Difficulties.json"},{"location":"wiki/Miscellaneous-JSON-files/#erasjson","text":"Link to original This file should contain all the era's you want to use in your mod. Each era can have the following attributes: | attribute | Type | optional or not | notes | | --------- | ---- | --------------- | ----- | | name | String | required | Name of the era | | researchAgreementCost | Integer (\u22650) | defaults to 300 | Cost of research agreements were the most technologically advanced civ is in this era | | iconRGB | List of 3 Integers | defaults to [255,255,255] | RGB color that icons for technologies of this era should have in the Tech screen | | unitBaseBuyCost | Integer (\u22650) | defaults to 200 | Base cost of buying units with Faith, Food, Science or Culture when no other cost is provided | | startingSettlerCount | Integer (\u22650) | defaults to 1 | Amount of settler units that should be spawned when starting a game in this era | | startingSettlerUnit | String | defaults to \"Settler\" | Name of the unit that should be used for the previous field. Must be in Units.json | | startingWokerCount | Integer (\u22650) | defaults to 0 | Amount of worker units that should be spawned when starting a game in this era | | startingWorkerUnit | String | defaults to \"Worker\" | Name of the unit that should be used for the previous field. Must be in Units.json | | startingMilitaryUnitCount | Integer (\u22650) | defaults to 1 | Amount of military units that should be spawned when starting a game in this era | | startingMilitaryUnit | String | defaults to \"Warrior\" | Name of the unit that should be used for the previous field. Must be in Units.json | | startingGold | Integer (\u22650) | defaults to 0 | Amount of gold each civ should receive when starting a game in this era | | startingCulture | Integer (\u22650) | defaults to 0 | Amount of culture each civ should receive when starting a game in this era | | settlerPopulation | Integer (>0) | defaults to 1 | Default amount of population each city should have when settled when starting a game in this era | | settlerBuildings | List of Strings | defaults to none | Buildings that should automatically be built whenever a city is settled when starting a game in this era | | startingObsoleteWonders | List of Strings | defaults to none | Wonders (and technically buildings) that should be impossible to built when starting a game in this era. Used in the base game to remove all wonders older than 2 era's |","title":"Eras.json"},{"location":"wiki/Miscellaneous-JSON-files/#modoptionsjson","text":"This file is a little different: - Does not exist in Vanilla ruleset - Is entirely optional but will be created after downloading a mod The file can have the following attributes, including the values Unciv sets (no point in a mod author setting those): | Attribute | Type | Defaults | Notes | |-----------|------|-----------|-------| | isBaseRuleset | Boolean | false | Differentiates mods that change the vanilla ruleset or replace it | | maxXPfromBarbarians | Integer | 30 | ...as the name says... | | uniques | List | empty | Mod-wide specials, see here | | techsToRemove | List | empty | List of Technologies to remove (isBaseRuleset=false only) | | buildingsToRemove | List | empty | List of Buildings or Wonders to remove (isBaseRuleset=false only) | | unitsToRemove | List | empty | List of Units to remove (isBaseRuleset=false only) | | nationsToRemove | List | empty | List of Nations to remove (isBaseRuleset=false only) | | lastUpdated | String | empty | Set automatically after download - Last repository update, not necessarily last content change | | modUrl | String | empty | Set automatically after download - URL of repository | | author | String | empty | Set automatically after download - Owner of repository | | modSize | Integer | empty | Set automatically after download - kB in entire repository, not sum of default branch files |","title":"ModOptions.json"},{"location":"wiki/Miscellaneous-JSON-files/#civilopedia-text","text":"Any 'thing' defined in json and listed in the Civilopedia can supply extra text, specifically for the Civilopedia. This can be used to explain special considerations better when the automatically generated display is insufficient, or for 'flavour', background stories and the like. Such text can be formatted and linked to other Civilopedia entries, within limits. An example of the format is: \"civilopediaText\": [ {\"text\":\"Ancient ruins provide a one-time random bonus when explored\"}, {\"separator\":true}, {\"text\":\"This line is red and links to the Scout including icons\", \"link\":\"Unit/Scout\", \"color\":\"red\"}, {\"text\":\"A big fat header sporting a golden star\", \"header\":1, \"starred\":true, \"color\":\"#ffeb7f\"}, ], List of attributes - note not all combinations are valid: |attribute|type|description| |---------|----|-----------| | text |String|Text to display.| | link |String|Create link and icon, format: Category/Name or external link ('http://','https://','mailto:').| | icon |String|Show icon without linking, format: Category/Name.| | extraImage |String|Display an Image instead of text. Can be a path found in a texture atlas or or the name of a png or jpg in the ExtraImages folder.| | imageSize |Float|Width in world units of the [extraImage], height is calculated preserving aspect ratio. Defaults to available width.| | header |Integer|Header level. 1 means double text size and decreases from there.| | size |Integer|Text size, default is 18. Use size or header but not both.| | indent |Integer|Indent level. 0 means text will follow icons, 1 aligns to the right of all icons, each further step is 30 units.| | padding |Float|Vertical padding between rows, defaults to 5 units.| | color |String|Sets text color, accepts names or 6/3-digit web colors (e.g. #FFA040).| | separator |Boolean|Renders a separator line instead of text. Can be combined only with color and size (line width, default 2).| | starred |Boolean|Decorates text with a star icon - if set, it receives the color instead of the text.| | centered |Boolean|Centers the line (and turns off automatic wrap).| The lines from json will 'surround' the automatically generated lines such that the latter are inserted just above the first json line carrying a link, if any. If no json lines have links, they will be inserted between the automatic title and the automatic info. This method may, however, change in the future.","title":"Civilopedia text"},{"location":"wiki/Mods/","text":"What's this about? Everyone has that thing they wish could be in the game. Unfortunately, the game only understands code, so mods are our way to give a degree of freedom to those of us who don't code. Mods can add, replace and remove basic game definitions, such as units, nations, buildings, improvements, resources and terrains. Games loaded with these mods will function according to the mod definition. The game only knows how to recognize existing definitions, so you can't add new unique abilities to nations/units/buildings/etc, only play around with existing ones There are two kinds of mods: Extension mods - these add new nations/units/buildings/resources to a base ruleset - can be either to the default ruleset, or to a base ruleset mod. Easy to do and probably the better place to get started. Base Ruleset mods - these replace the entire existing ruleset - tech tree, units, policies, nations etc - to give an entirely different experience than the base game. These generally require quite a bit of work, but give a whole new experience, and so are the most popular. Creating and editing mods from your phone is NOT RECOMMENDED - it's much easier using a desktop device! Audiovisual Mods I addition to changing the rules - or even without doing so, mods can override existing graphics or sounds, or add music tracks. The game also has the ability to display graphics that are not included in the base game at all, such as leader portrait or wonder splash images, that must be provided by mods. For details, see Audiovisual Mods . Custom tilesets are closely related, see Creating a custom tileset . Such mods are candidates for the \"Permanent audiovisual mod\" switch available on the Mod Management Screen. Note that this feature includes graphics or sounds from the selected mod in all games, even those started before installing the mod. In case of a mod bringing both changed rules and audiovisuals, the 'permanent' feature will include only the media on all games, to use the rules you will still need to select the mod for a new game. Mod names Mods need to conform to github repo naming rules, but best stay simple and use only letters, digits, and dashes - . Dashes are automatically converted to spaces for display and use within Unciv. Many punctuation or extended unicode characters might work, but at best potential users won't find them attractive, at worst we'll refuse support when you run into problems :smiling_imp: Mod components Mods are located in a /mods directory, on Desktop that should be next to your .jar file. Mods typically have 2 subfolders: - jsons - here you should put files that alter the data of game objects, the order of the files is as in the base json files . More information on these can be found here - Images - here you should put game images, as in the base image files . Please read the atlas chapter for important details. In order to remove objects from the game, you'll need to create a ModOptions file in the /jsons subfolder - there's an example here In a base ruleset mod, ALL the original objects are removed - this is done by adding a \"isBaseRuleset\":true configuration to your modOptions file, like so For an example, you can refer to the example mod - just download the Example-Aliens-Mod and put it in a /mods folder next to the jar, run Unciv, start a new game, and you'll be able to enable the mod, which will allow to you pick Aliens as a playable civilization! If you want to add a new civilization as a mod, you should check out the Civ making instructions to see what's required, or see the example Aliens mod =) More on Images and the texture atlas Images are combined (at runtime) into texture images with an 'atlas', so if you see \"game.atlas\" and \"game.png\" files being generated, now you know what for. Most mods will need only one pair of those, the base game has around four. When the game runs from a packaged distribution (android, jar), the texture+atlas files alone are relevant, so you need to include them in your repository and keep them up to date. Actually omitting the original images would work for these uses, but we still recommend including them, so developers running from source can access them. If your mod has lots of images (or large ones), the textures might 'spill' into additional texture \".png\" files - 2048x2048 is the limit for a single texture pack. This is not good for performance, which is why the base game controls which kinds of images go together into one texture(+atlas). This works for mods, too: Create not only one Images folder, but several, the additional ones named \"Images.xyz\", where xyz will become the filename of the additional texture file (So don't use both Images and Images.game - those will clash). Look at the Unciv base game to get a better idea how that works. To minimize texture swaps, try to group them by the situation where in the game they are needed. You can distibute by folder, but having the same subfolders under several \"Images.xyz\" and distributing the images between them will also work. Adding maps to mods You can also add maps to mods, so they'll be available to players who download your mod. A mod can also be maps-only, if all you want to do is share your maps. When you've finished making your map in the Map Editor, save it, and it will be in the /maps folder of your game. Copy it to a /maps folder in your mod , and you're done! Getting your mod out there In order to make your mod downloadable by anyone, you need to create a Github repository (instructions here ) The Images and jsons folders need to be in the root directory of the repo - see here for example. You can then manually download the mod from within the Mod Manager in Unciv: From Unciv's main screen, click \"Mods\" Click \"Download mod from URL\", and enter the location of your Github page The game will automatically download and extract your mod, and it'll be ready to use! Once you've tested that your mod CAN be downloaded, and that it works well once downloaded, you're ready for the final stage - GETTING IT TO THE USERS AUTOMATICALLY. In order to do this, all you need to do is: Go to your Github page Click the gear icon next to the About (top-right part of the page) In 'Topics', add \"unciv-mod\" When you open your app, it will query Github's list of repos with that topic , and now YOUR repo will appear there! I have the mod, now what? The primary use of mods is to add them when starting a new game, or configuring a map. This will mean that both the ruleset of the mod, and the images, will be in use for that specific game/map. For mods which are primarily visual or audio, there is a second use - through the mod manager, you can enable them as permanent audiovisual mods . This means that the images, sounds (or upcoming: music) from the mod will replace the original media everywhere in the game. Mod location for manual loading of mods In general, you should never be manually-loading your mods - not only is this clunky, it's also more error-prone. Unless you have a very specific use-case, you probably shouldn't be doing this. In Android, they should go into the Android/data/com.unciv.app/files/mods directory. In Chromebook, go to \"Play files\", should be on the sidebar on the left side of the window under \"My files\". Click the 3 vertical dots on the top right-hand corner of the window below the \"X\". If the option \"Show all Play folders\" does not have a check next to it click it. You should see some new files that appear on your screen. Now navigate to Android/data/com.unciv.app/files/mods When loading a mod, it needs to be in its own folder in /mods - this is how you will work when you're editing your mod. Other Existing mods can be found here ! A list of uniques and how to use them can be found here ! Some images don't exist at all in the base game, but can be added in mods. For more info, see Audiovisual Mods .","title":"Mods"},{"location":"wiki/Mods/#whats-this-about","text":"Everyone has that thing they wish could be in the game. Unfortunately, the game only understands code, so mods are our way to give a degree of freedom to those of us who don't code. Mods can add, replace and remove basic game definitions, such as units, nations, buildings, improvements, resources and terrains. Games loaded with these mods will function according to the mod definition. The game only knows how to recognize existing definitions, so you can't add new unique abilities to nations/units/buildings/etc, only play around with existing ones There are two kinds of mods: Extension mods - these add new nations/units/buildings/resources to a base ruleset - can be either to the default ruleset, or to a base ruleset mod. Easy to do and probably the better place to get started. Base Ruleset mods - these replace the entire existing ruleset - tech tree, units, policies, nations etc - to give an entirely different experience than the base game. These generally require quite a bit of work, but give a whole new experience, and so are the most popular. Creating and editing mods from your phone is NOT RECOMMENDED - it's much easier using a desktop device!","title":"What's this about?"},{"location":"wiki/Mods/#audiovisual-mods","text":"I addition to changing the rules - or even without doing so, mods can override existing graphics or sounds, or add music tracks. The game also has the ability to display graphics that are not included in the base game at all, such as leader portrait or wonder splash images, that must be provided by mods. For details, see Audiovisual Mods . Custom tilesets are closely related, see Creating a custom tileset . Such mods are candidates for the \"Permanent audiovisual mod\" switch available on the Mod Management Screen. Note that this feature includes graphics or sounds from the selected mod in all games, even those started before installing the mod. In case of a mod bringing both changed rules and audiovisuals, the 'permanent' feature will include only the media on all games, to use the rules you will still need to select the mod for a new game.","title":"Audiovisual Mods"},{"location":"wiki/Mods/#mod-names","text":"Mods need to conform to github repo naming rules, but best stay simple and use only letters, digits, and dashes - . Dashes are automatically converted to spaces for display and use within Unciv. Many punctuation or extended unicode characters might work, but at best potential users won't find them attractive, at worst we'll refuse support when you run into problems :smiling_imp:","title":"Mod names"},{"location":"wiki/Mods/#mod-components","text":"Mods are located in a /mods directory, on Desktop that should be next to your .jar file. Mods typically have 2 subfolders: - jsons - here you should put files that alter the data of game objects, the order of the files is as in the base json files . More information on these can be found here - Images - here you should put game images, as in the base image files . Please read the atlas chapter for important details. In order to remove objects from the game, you'll need to create a ModOptions file in the /jsons subfolder - there's an example here In a base ruleset mod, ALL the original objects are removed - this is done by adding a \"isBaseRuleset\":true configuration to your modOptions file, like so For an example, you can refer to the example mod - just download the Example-Aliens-Mod and put it in a /mods folder next to the jar, run Unciv, start a new game, and you'll be able to enable the mod, which will allow to you pick Aliens as a playable civilization! If you want to add a new civilization as a mod, you should check out the Civ making instructions to see what's required, or see the example Aliens mod =)","title":"Mod components"},{"location":"wiki/Mods/#more-on-images-and-the-texture-atlas","text":"Images are combined (at runtime) into texture images with an 'atlas', so if you see \"game.atlas\" and \"game.png\" files being generated, now you know what for. Most mods will need only one pair of those, the base game has around four. When the game runs from a packaged distribution (android, jar), the texture+atlas files alone are relevant, so you need to include them in your repository and keep them up to date. Actually omitting the original images would work for these uses, but we still recommend including them, so developers running from source can access them. If your mod has lots of images (or large ones), the textures might 'spill' into additional texture \".png\" files - 2048x2048 is the limit for a single texture pack. This is not good for performance, which is why the base game controls which kinds of images go together into one texture(+atlas). This works for mods, too: Create not only one Images folder, but several, the additional ones named \"Images.xyz\", where xyz will become the filename of the additional texture file (So don't use both Images and Images.game - those will clash). Look at the Unciv base game to get a better idea how that works. To minimize texture swaps, try to group them by the situation where in the game they are needed. You can distibute by folder, but having the same subfolders under several \"Images.xyz\" and distributing the images between them will also work.","title":"More on Images and the texture atlas"},{"location":"wiki/Mods/#adding-maps-to-mods","text":"You can also add maps to mods, so they'll be available to players who download your mod. A mod can also be maps-only, if all you want to do is share your maps. When you've finished making your map in the Map Editor, save it, and it will be in the /maps folder of your game. Copy it to a /maps folder in your mod , and you're done!","title":"Adding maps to mods"},{"location":"wiki/Mods/#getting-your-mod-out-there","text":"In order to make your mod downloadable by anyone, you need to create a Github repository (instructions here ) The Images and jsons folders need to be in the root directory of the repo - see here for example. You can then manually download the mod from within the Mod Manager in Unciv: From Unciv's main screen, click \"Mods\" Click \"Download mod from URL\", and enter the location of your Github page The game will automatically download and extract your mod, and it'll be ready to use! Once you've tested that your mod CAN be downloaded, and that it works well once downloaded, you're ready for the final stage - GETTING IT TO THE USERS AUTOMATICALLY. In order to do this, all you need to do is: Go to your Github page Click the gear icon next to the About (top-right part of the page) In 'Topics', add \"unciv-mod\" When you open your app, it will query Github's list of repos with that topic , and now YOUR repo will appear there!","title":"Getting your mod out there"},{"location":"wiki/Mods/#i-have-the-mod-now-what","text":"The primary use of mods is to add them when starting a new game, or configuring a map. This will mean that both the ruleset of the mod, and the images, will be in use for that specific game/map. For mods which are primarily visual or audio, there is a second use - through the mod manager, you can enable them as permanent audiovisual mods . This means that the images, sounds (or upcoming: music) from the mod will replace the original media everywhere in the game.","title":"I have the mod, now what?"},{"location":"wiki/Mods/#mod-location-for-manual-loading-of-mods","text":"In general, you should never be manually-loading your mods - not only is this clunky, it's also more error-prone. Unless you have a very specific use-case, you probably shouldn't be doing this. In Android, they should go into the Android/data/com.unciv.app/files/mods directory. In Chromebook, go to \"Play files\", should be on the sidebar on the left side of the window under \"My files\". Click the 3 vertical dots on the top right-hand corner of the window below the \"X\". If the option \"Show all Play folders\" does not have a check next to it click it. You should see some new files that appear on your screen. Now navigate to Android/data/com.unciv.app/files/mods When loading a mod, it needs to be in its own folder in /mods - this is how you will work when you're editing your mod.","title":"Mod location for manual loading of mods"},{"location":"wiki/Mods/#other","text":"Existing mods can be found here ! A list of uniques and how to use them can be found here ! Some images don't exist at all in the base game, but can be added in mods. For more info, see Audiovisual Mods .","title":"Other"},{"location":"wiki/Project-structure-and-major-classes/","text":"Project structure Since LibGDX, and therefore Unciv, are built for multi-platform support, the project structure is built accordingly. 99% of the code is in the Core project, which contains all the platform-independant code. The Desktop and Android folders contain platform-specific things, and the Android folder also contains the game Images and the all-important Assets, which are required for running from Desktop as well, so we bundle them up into the .jar file when releasing. The Test folder contains tests that can be run manually via gradle with ./gradlew tests:test , and are run automatically by Travis for every push. Translations Before we get to the Classes, a word on Languages. Unciv is playable in several handfuls of languages, and there's magic to support that. Whenever you include a new string in code you will need to give it a quick evaluation - will users see it, and if so, what do I need to do to support its translations. Sometimes you may not need to do anything, sometimes you will add a line to the translation templates , and sometimes you will adapt the string formatting to support the translations. For details, see the 'Translation generation - for developers' chapter . Major classes Civ, and therefore Unciv, is a game with endless interconnectivity - everything affects everything else. In order to have some semblance of order, we'll go over the main classes in the order in which they are serialized. So yes, you can - for instance - get the center tile of a city, a TileInfo, directly from CityInfo. But delving into all the connections would only harm the point of this overview, that's what the actual code is for ;) The Game State: GameInfo CivilizationInfo CityInfo TileMap TileInfo MapUnit RuleSet (unique in that it is not part of the game state) The UI: MainMenuScreen NewGameScreen WorldScreen CityScreen MapEditorScreen Picker Screens - TechPickerScreen, PolicyPickerScreen, ImprovementPickerScreen, PromotionPickerScreen Game State The Game - GameInfo First off, let's clarify: When we say \"The Game\", we mean the state of the game (what turn it is, who the players are, what each one has etc) and not the UI of the game. That is, The Game is the currently played game, not Unciv . The game contains three major parts: The list of the players, or civilizations - List<CivilizationInfo> The map upon which the game is played - TileMap The ruleset by which the game is played - RuleSet . This includes what technologies, buildings, units etc. are available, and IS NOT serialized and deserialized, but comes straight from the game files - more on that later. Parameters unique to this game - difficulty, game speed, victory conditions, etc. When we save the game, or load the game, we're actually serializing and deserializing this class, which means that the this class is the root of the entire game state. Most objects in the \"state tree\" have a transient reference to their parent, meaning the tree can be traversed in-code in all directions, and frequently is. A Civilization - CivilizationInfo This represents one of the players of the game, and NOT a specific nation - meaning, not France, but rather \"Player X who is France in this game\". In another game, there will be another France. As one of the focal points of the game, it contains a lot of important information, the most important of which are: The list of cities the civilization has - List<CityInfo> Which nation this is - references a certain Nation (part of the ruleset) Various Managers for the different aspects of the civilization - PolicyManager , GoldenAgeManager , GreatPersonManager , TechManager , VictoryManager , DiplomacyManager A City - CityInfo This contains the information about a specific city. Beyond basic information like name, location on map etc, the most important classes it contains are: Calculating the yield of the city - CityStats Managers for the various aspects - PopulationManager , CityConstructions , CityExpansionManager The tiles controlled and worked by the city - only their locations are permanently saved in the CityInfo, the actual information is in the TileInfo in the TileMap The map - TileMap This contains mostly helper functions and acts as a wrapper for the list of tiles it contains A tile - TileInfo Each tile is comprised of several layers, and so has information for each. Tiles have, primarily: - A base terrain - Grassland, Hills, Desert etc. References a certain Terrain (part of the ruleset) - An optional terrain feature - Forest, Jungle, Oasis etc. References a certain Terrain (part of the ruleset) - An optional resource - Iron, Dye, Wheat etc. References a certain TileResource (part of the ruleset) - An improvement built on the tile, if any. References a certain TileImprovement (part of the ruleset) - The units that are currently in the tile - MapUnit A unit on the map - MapUnit Unlike buildings, Unit in Unciv has two meanings. One is a Type of unit (like Spearman), and one is a specific instance of a unit (say, a Babylonian Spearman, at a certain position, with X health). MapUnit is a specific instance of a unit, whereas BaseUnit is the type of unit. Main information: - A name - references a specific BaseUnit - Health and Movement - Promotion status - UnitPromotions Ruleset So far so good - but what of everything that makes Civ, Civ? The units, the buildings, the nations, the improvements etc? Since these things remain the same for every game, these are not saved on a per-game basis, but rather are saved in json files in Unciv's asset folder. Each class in the game state that saves one of these will reference it by name, and when the game is running it will check the Ruleset to find the relevant information for that object. The various objects are: - Technology - referenced mainly in CivilizationInfo.TechManager - Nations - referenced mainly in CivilizationInfo - Policy - referenced mainly in CivilizationInfo.PolicyManager (seeing a pattern here?) - Building - referenced mainly in CityInfo.ConstructionManager - BaseUnit - referenced mainly in MapUnit - Promotion - referenced mainly in MapUnit - Terrain - referenced mainly in TileInfo - TileResource - referenced mainly in TileInfo - TileImprovement - referenced mainly in TileInfo There are also Translations in the Ruleset, but they technically have nothing to do with the game state but rather with the UI display. The information for all of these is in json files in android\\assets\\jsons UI UncivGame is the 'base' class for the UI, from which everything starts, but it itself doesn't do much. When we change a screen, we're changing a value in UncivGame, the interesting stuff happens in the screens themselves. The main menu - MainMenuScreen This is what the user sees when first entering the game. It acts as a hub to loading games, adding mods, options etc, without loading an actual game upfront - this allows us to differentiate between \"User can't enter game\" and \"User can't load game\" problems Starting a new game - NewGameScreen This is basically a giant setting screen for GameOptions and MapOptions classes, divided into: GameOptionsTable - game speed, mods, etc MapOptionsTable - either from preexisting map file or generated, in which case: size, map generation type, etc. PlayerPickerTable - What civs are in the game and who controls them The World Screen - WorldScreen 90% of the game is spent on this screen, so naturally it's the fullest, with the most things happening. This is the main hub of the game, with all other screens being opened from it, and closing back to reveal it. Most notable are: * The map itself - a TileMapHolder - with each of the rendered tiles being a TileGroup * The information panels - WorldScreenTopBar for stats and resources, UnitTable for the currently selected unit, TileInfoTable or the currently selected tile, BattleTable for battle simulation, and NotificationsScroll for the notifications * The minimap - MinimapHolder * Buttons linking to other screens - to the TechPickerScreen , EmpireOverviewScreen , and PolicyPickerScreen * The almighty Next Turn button The city screen - CityScreen The second-most important screen. Notable parts: * the City Stats table - should definitely be its own class come to think of it * The construction list and current construction (bottom left) - ConstructionsTable * Existing buildings, specialists and stats drilldown - CityInfoTable Others A few words need to be said about the NextTurn process, but there isn't really a good place for it so I'll put it here. We clone the GameInfo and use a \"new\" GameInfo for each turn because of 2 reasons. The first is multithreading and thread safety, and the second is multiplayer reproducibility. The first point is pretty basic. The NextTurn needs to happen in a separate thread so that the user can still have a responsive game when it's off doing stuff. Stuff in the GameInfo changes on NextTurn, so if you're rendering that same GameInfo, this could cause conflicts. Also, after NextTurn we generally autosave, and if stuff changes in the state while we're trying to serialize it to put it in the save file, that's Not Fun. A single clone solves both of these problems at once. The second point is less obvious. If we use our mutable state, changing stuff in place, then what happens when we're playing in Multiplayer? Multiplayer is based upon the fact that you can receive an entire game state and go from there, and in fact the move to multiplayer was what made the whole \"clone\" thing necessary (on the way it also solved the aforementioned threading problems)","title":"Project structure"},{"location":"wiki/Project-structure-and-major-classes/#project-structure","text":"Since LibGDX, and therefore Unciv, are built for multi-platform support, the project structure is built accordingly. 99% of the code is in the Core project, which contains all the platform-independant code. The Desktop and Android folders contain platform-specific things, and the Android folder also contains the game Images and the all-important Assets, which are required for running from Desktop as well, so we bundle them up into the .jar file when releasing. The Test folder contains tests that can be run manually via gradle with ./gradlew tests:test , and are run automatically by Travis for every push.","title":"Project structure"},{"location":"wiki/Project-structure-and-major-classes/#translations","text":"Before we get to the Classes, a word on Languages. Unciv is playable in several handfuls of languages, and there's magic to support that. Whenever you include a new string in code you will need to give it a quick evaluation - will users see it, and if so, what do I need to do to support its translations. Sometimes you may not need to do anything, sometimes you will add a line to the translation templates , and sometimes you will adapt the string formatting to support the translations. For details, see the 'Translation generation - for developers' chapter .","title":"Translations"},{"location":"wiki/Project-structure-and-major-classes/#major-classes","text":"Civ, and therefore Unciv, is a game with endless interconnectivity - everything affects everything else. In order to have some semblance of order, we'll go over the main classes in the order in which they are serialized. So yes, you can - for instance - get the center tile of a city, a TileInfo, directly from CityInfo. But delving into all the connections would only harm the point of this overview, that's what the actual code is for ;) The Game State: GameInfo CivilizationInfo CityInfo TileMap TileInfo MapUnit RuleSet (unique in that it is not part of the game state) The UI: MainMenuScreen NewGameScreen WorldScreen CityScreen MapEditorScreen Picker Screens - TechPickerScreen, PolicyPickerScreen, ImprovementPickerScreen, PromotionPickerScreen","title":"Major classes"},{"location":"wiki/Project-structure-and-major-classes/#game-state","text":"","title":"Game State"},{"location":"wiki/Project-structure-and-major-classes/#the-game-gameinfo","text":"First off, let's clarify: When we say \"The Game\", we mean the state of the game (what turn it is, who the players are, what each one has etc) and not the UI of the game. That is, The Game is the currently played game, not Unciv . The game contains three major parts: The list of the players, or civilizations - List<CivilizationInfo> The map upon which the game is played - TileMap The ruleset by which the game is played - RuleSet . This includes what technologies, buildings, units etc. are available, and IS NOT serialized and deserialized, but comes straight from the game files - more on that later. Parameters unique to this game - difficulty, game speed, victory conditions, etc. When we save the game, or load the game, we're actually serializing and deserializing this class, which means that the this class is the root of the entire game state. Most objects in the \"state tree\" have a transient reference to their parent, meaning the tree can be traversed in-code in all directions, and frequently is.","title":"The Game - GameInfo"},{"location":"wiki/Project-structure-and-major-classes/#a-civilization-civilizationinfo","text":"This represents one of the players of the game, and NOT a specific nation - meaning, not France, but rather \"Player X who is France in this game\". In another game, there will be another France. As one of the focal points of the game, it contains a lot of important information, the most important of which are: The list of cities the civilization has - List<CityInfo> Which nation this is - references a certain Nation (part of the ruleset) Various Managers for the different aspects of the civilization - PolicyManager , GoldenAgeManager , GreatPersonManager , TechManager , VictoryManager , DiplomacyManager","title":"A Civilization - CivilizationInfo"},{"location":"wiki/Project-structure-and-major-classes/#a-city-cityinfo","text":"This contains the information about a specific city. Beyond basic information like name, location on map etc, the most important classes it contains are: Calculating the yield of the city - CityStats Managers for the various aspects - PopulationManager , CityConstructions , CityExpansionManager The tiles controlled and worked by the city - only their locations are permanently saved in the CityInfo, the actual information is in the TileInfo in the TileMap","title":"A City - CityInfo"},{"location":"wiki/Project-structure-and-major-classes/#the-map-tilemap","text":"This contains mostly helper functions and acts as a wrapper for the list of tiles it contains","title":"The map - TileMap"},{"location":"wiki/Project-structure-and-major-classes/#a-tile-tileinfo","text":"Each tile is comprised of several layers, and so has information for each. Tiles have, primarily: - A base terrain - Grassland, Hills, Desert etc. References a certain Terrain (part of the ruleset) - An optional terrain feature - Forest, Jungle, Oasis etc. References a certain Terrain (part of the ruleset) - An optional resource - Iron, Dye, Wheat etc. References a certain TileResource (part of the ruleset) - An improvement built on the tile, if any. References a certain TileImprovement (part of the ruleset) - The units that are currently in the tile - MapUnit","title":"A tile - TileInfo"},{"location":"wiki/Project-structure-and-major-classes/#a-unit-on-the-map-mapunit","text":"Unlike buildings, Unit in Unciv has two meanings. One is a Type of unit (like Spearman), and one is a specific instance of a unit (say, a Babylonian Spearman, at a certain position, with X health). MapUnit is a specific instance of a unit, whereas BaseUnit is the type of unit. Main information: - A name - references a specific BaseUnit - Health and Movement - Promotion status - UnitPromotions","title":"A unit on the map - MapUnit"},{"location":"wiki/Project-structure-and-major-classes/#ruleset","text":"So far so good - but what of everything that makes Civ, Civ? The units, the buildings, the nations, the improvements etc? Since these things remain the same for every game, these are not saved on a per-game basis, but rather are saved in json files in Unciv's asset folder. Each class in the game state that saves one of these will reference it by name, and when the game is running it will check the Ruleset to find the relevant information for that object. The various objects are: - Technology - referenced mainly in CivilizationInfo.TechManager - Nations - referenced mainly in CivilizationInfo - Policy - referenced mainly in CivilizationInfo.PolicyManager (seeing a pattern here?) - Building - referenced mainly in CityInfo.ConstructionManager - BaseUnit - referenced mainly in MapUnit - Promotion - referenced mainly in MapUnit - Terrain - referenced mainly in TileInfo - TileResource - referenced mainly in TileInfo - TileImprovement - referenced mainly in TileInfo There are also Translations in the Ruleset, but they technically have nothing to do with the game state but rather with the UI display. The information for all of these is in json files in android\\assets\\jsons","title":"Ruleset"},{"location":"wiki/Project-structure-and-major-classes/#ui","text":"UncivGame is the 'base' class for the UI, from which everything starts, but it itself doesn't do much. When we change a screen, we're changing a value in UncivGame, the interesting stuff happens in the screens themselves.","title":"UI"},{"location":"wiki/Project-structure-and-major-classes/#the-main-menu-mainmenuscreen","text":"This is what the user sees when first entering the game. It acts as a hub to loading games, adding mods, options etc, without loading an actual game upfront - this allows us to differentiate between \"User can't enter game\" and \"User can't load game\" problems","title":"The main menu - MainMenuScreen"},{"location":"wiki/Project-structure-and-major-classes/#starting-a-new-game-newgamescreen","text":"This is basically a giant setting screen for GameOptions and MapOptions classes, divided into: GameOptionsTable - game speed, mods, etc MapOptionsTable - either from preexisting map file or generated, in which case: size, map generation type, etc. PlayerPickerTable - What civs are in the game and who controls them","title":"Starting a new game - NewGameScreen"},{"location":"wiki/Project-structure-and-major-classes/#the-world-screen-worldscreen","text":"90% of the game is spent on this screen, so naturally it's the fullest, with the most things happening. This is the main hub of the game, with all other screens being opened from it, and closing back to reveal it. Most notable are: * The map itself - a TileMapHolder - with each of the rendered tiles being a TileGroup * The information panels - WorldScreenTopBar for stats and resources, UnitTable for the currently selected unit, TileInfoTable or the currently selected tile, BattleTable for battle simulation, and NotificationsScroll for the notifications * The minimap - MinimapHolder * Buttons linking to other screens - to the TechPickerScreen , EmpireOverviewScreen , and PolicyPickerScreen * The almighty Next Turn button","title":"The World Screen - WorldScreen"},{"location":"wiki/Project-structure-and-major-classes/#the-city-screen-cityscreen","text":"The second-most important screen. Notable parts: * the City Stats table - should definitely be its own class come to think of it * The construction list and current construction (bottom left) - ConstructionsTable * Existing buildings, specialists and stats drilldown - CityInfoTable","title":"The city screen - CityScreen"},{"location":"wiki/Project-structure-and-major-classes/#others","text":"A few words need to be said about the NextTurn process, but there isn't really a good place for it so I'll put it here. We clone the GameInfo and use a \"new\" GameInfo for each turn because of 2 reasons. The first is multithreading and thread safety, and the second is multiplayer reproducibility. The first point is pretty basic. The NextTurn needs to happen in a separate thread so that the user can still have a responsive game when it's off doing stuff. Stuff in the GameInfo changes on NextTurn, so if you're rendering that same GameInfo, this could cause conflicts. Also, after NextTurn we generally autosave, and if stuff changes in the state while we're trying to serialize it to put it in the save file, that's Not Fun. A single clone solves both of these problems at once. The second point is less obvious. If we use our mutable state, changing stuff in place, then what happens when we're playing in Multiplayer? Multiplayer is based upon the fact that you can receive an entire game state and go from there, and in fact the move to multiplayer was what made the whole \"clone\" thing necessary (on the way it also solved the aforementioned threading problems)","title":"Others"},{"location":"wiki/Regions/","text":"Regions The Concept During the generation of a random map (only; not pre-made maps) the map is split into a number of regions equal to the number of major civs. Each region gets classified according to its prevalent terrain, or if unable to be classified is called a \"hybrid\" region. The region type corresponds to the start bias of the civs as they are distributed. The region type also determines start placement and what luxuries will appear in the region. Example ![](https://user-images.githubusercontent.com/63475501/140308518-ad5a2f50-d5f1-4467-a296-3a67f6d0b007.png) How to define region behavior in your mod The game will work without any extra json definitions, but if you want the region system to work well when generating maps for your mod, these are the relevant uniques to define. Terrains.json \"Always Fertility [amount] for Map Generation\", \"[amount] to Fertility for Map Generation\" - these determine how good a terrain is for purposes of dividing land up fairly. The numbers are arbitrary but should reflect the relative value of the terrains. \"A Region is formed with at least [amount]% [simpleTerrain] tiles, with priority [amount]\", \"A Region is formed with at least [amount]% [simpleTerrain] tiles and [simpleTerrain] tiles, with priority [amount]\" - these determine the rules for when a region is classified as eg a \"desert\" region. Terrains are evaluated in ascending priority order, so in the base ruleset tundra regions are checked first. \"A Region can not contain more [simpleTerrain] tiles than [simpleTerrain] tiles\" - a useful compliment to the sum-of-two-terrains criterium above, if both terrains are in and of themselves terrain types. So in the base ruleset a large enough sum of jungle and forest allows a region to be classified as jungle, but only if there is more jungle than forest. \"Base Terrain on this tile is not counted for Region determination\" - for terrain features that are unremovable or otherwise dominate the tile. Used for Hills in the base ruleset. A region not fulfilling any criteria is classified as \"Hybrid\" \"Considered [terrainQuality] when determining start locations\" - where \"terrainQuality\" is one of \"Food\", \"Production\", \"Desirable\", \"Undesirable\". Usually used together with the \" \" or \" \" to determine what terrain is attractive when determining start locations. Note: if there are none of these for a terrain, the game will use the base stats of the terrain to guess a quality, but if there are any, the game will assume that they are complete.","title":"Regions"},{"location":"wiki/Regions/#regions","text":"","title":"Regions"},{"location":"wiki/Regions/#the-concept","text":"During the generation of a random map (only; not pre-made maps) the map is split into a number of regions equal to the number of major civs. Each region gets classified according to its prevalent terrain, or if unable to be classified is called a \"hybrid\" region. The region type corresponds to the start bias of the civs as they are distributed. The region type also determines start placement and what luxuries will appear in the region. Example ![](https://user-images.githubusercontent.com/63475501/140308518-ad5a2f50-d5f1-4467-a296-3a67f6d0b007.png)","title":"The Concept"},{"location":"wiki/Regions/#how-to-define-region-behavior-in-your-mod","text":"The game will work without any extra json definitions, but if you want the region system to work well when generating maps for your mod, these are the relevant uniques to define.","title":"How to define region behavior in your mod"},{"location":"wiki/Regions/#terrainsjson","text":"\"Always Fertility [amount] for Map Generation\", \"[amount] to Fertility for Map Generation\" - these determine how good a terrain is for purposes of dividing land up fairly. The numbers are arbitrary but should reflect the relative value of the terrains. \"A Region is formed with at least [amount]% [simpleTerrain] tiles, with priority [amount]\", \"A Region is formed with at least [amount]% [simpleTerrain] tiles and [simpleTerrain] tiles, with priority [amount]\" - these determine the rules for when a region is classified as eg a \"desert\" region. Terrains are evaluated in ascending priority order, so in the base ruleset tundra regions are checked first. \"A Region can not contain more [simpleTerrain] tiles than [simpleTerrain] tiles\" - a useful compliment to the sum-of-two-terrains criterium above, if both terrains are in and of themselves terrain types. So in the base ruleset a large enough sum of jungle and forest allows a region to be classified as jungle, but only if there is more jungle than forest. \"Base Terrain on this tile is not counted for Region determination\" - for terrain features that are unremovable or otherwise dominate the tile. Used for Hills in the base ruleset. A region not fulfilling any criteria is classified as \"Hybrid\" \"Considered [terrainQuality] when determining start locations\" - where \"terrainQuality\" is one of \"Food\", \"Production\", \"Desirable\", \"Undesirable\". Usually used together with the \" \" or \" \" to determine what terrain is attractive when determining start locations. Note: if there are none of these for a terrain, the game will use the base stats of the terrain to guess a quality, but if there are any, the game will assume that they are complete.","title":"Terrains.json"},{"location":"wiki/Translating/","text":"Starting out The translation files are at /android/assets/jsons/translations If you're adding a new language, you'll need to create a new file ('Create a new file' to the right of the folder name in the UI), and copy into it the contents of template.properties If you're adding stuff to an existing language, simply start editing the file! You don't need to download anything, all translation work can be done on the Github website :) When you feel that you're ready to add your translation to the game, you'll need to create a merge request, which takes your changes and puts them into the main version of the game - it's pretty straightforward once you do it Pitfalls If a translation template (the stuff to the left of \" = \") contains square brackets, you will have to include each of them verbatim in your translation, but you can move them. Upper/lower case is relevant! e.g. All [personFilter] are cool can be translated as Tous les [personFilter] sont cool , but not as Tous les [personnages] sont cool , and neither as Nous sommes vraiment cool . Failing this is the main cause of your PR's showing up with red \"x\"es and \"checks failed\". Blanks: Watch out for blanks at the start of a line or two of them before the equals sign. If you got such a line - those blanks are part of the translation key and must not be deleted on the left side, and you should probably also include them in your translation (unless your language doesn't need spaces to separate things). Changes in the templates: When we find a typo in the english texts and fix it, or marginally change a wording, the template changes. Often the old template will not be automatically fixed in the existing translations, because it's a lot of work and in most cases the developers cannot be sure the translation is still correct. For you, that might look like your translations are simply disappearing with an update. In such a case, you have the option to use github's history to look up old versions, copy the old translation, place it where the new template now says \"requires translation\" - and proofread and adapt it to the new english version. The history link for each file is in the top right area and has a nice round clock icon. Wait, what just happened? Like most open-source projects, Unciv is developed at Github, so if you don't have a user you'll first have to create one. The way Github works is the following: You create a 'fork' repo, i.e. copy, of Unciv that belongs to your user (myUser/Unciv) You make changes to your copy. These changes are called a 'commit'. You make a pull request, which is basically asking for the changes you made on myUser/Unciv to be merged into the main repo (yairm210/Unciv) When you ask to 'edit' a file in yairm210/Unciv, these stages happen automatically - but it's important to understand what's happening behind the scenes do you understand where the changes actually are! Why not use a crowdsourcing translation website like <...>? Testing. Currently, translations undergo a number of tests for verification. This allows some language changes to be accepted and others not, and it's all in the same platform with the same tests. External translation tools don't allow for this. History and revisions. This is what Git was made for, and nothing like it exists in the world. I'm not exaggerating. Release cycle. We release versions weekly. If we need to take information from an external website every time, and for many that I've checked - you need to download the info as a csv or something and convert it. Every extra step hurts. Discussions. Most crowdsourcing translation websites don't allow for discussions and corrections on translations. Github does. Mass changes. If we're changing the source of the translation but want to keep the various destinations (say, we change \"Gold from trade routes +[amount]%\" to \"+[amount]% Gold from trade routes\"), if all the translation files are in Git we can do that in 1 minute. If it's external, this varies greatly. Other notes Make sure that you make the changes in the 'master' branch in your repo! Each untranslated phrase will have a \"requires translation\" line before it, so you can quickly find them. You don't need to remove them yourself if you don't want to - they will be automatically removed the next time we rebuild the file. Do as much as you're comfortable with - it's a big game with a lot of named objects, so don't feel pressured into doing everything =) Note that Right-to-Left languages such as Arabic and Hebrew are not supported by the framework :/ Translation generation - for developers The automatic template generation Before releasing every version, we regenerate the translation files. Sometimes, new strings (names, uniques, etc) are added in the json files. In order to not have to add every single one to the translation files manually, we have a class - TranslationFileWriter - that, for every language: Goes over the template.properties and copies translation lines For every json file in the jsons folder Selects all string values - both in objects, and in arrays in objects Generates a 'key = value' line This means that every text that ISN'T in the jsons needs to be added manually to the template.properties in order to be translated! That also means if you've been adding new json structures you (or someone) should check TranslationFileWriter and see if it is able to cope with them. Rules for templates added manually Building a new UI and doing something like popup.add(\"Hello world\".toLabel()) is a typical case: This is not contained in json data, so you'll have to add the template to template.properties yourself. For this example, adding Hello world = somewhere in a line of its own could suffice. Note the space at the end - it's absolutely required, and see to it your editor does not destroy your work. If you want to make sure, use Android Studio for git integration, but edit the file in an external editor, then run the unit tests locally before pushing. (to do: add link for instructions how to do that) Leading spaces on a translation line or more than one space between the text and the = would mean these spaces are a key part of the string to be translated . That can work, but be warned: translators often overlook that those spaces are a required part of both template and translation, so if you can do without, then doing without is safer. Translation templates can use placeholders, and there's two varieties: [] and {} . Square ones take precedence over curly ones, and nesting works only with a single level of curly nested inside one level of square. I both cases the symbols themselves ( []{} ) are removed by the translation engine. Square brackets [] mean the outer and inner components are both translated individually. The outer template will use alias names inside the brackets - example: Your code outputs \"Everyone gains [5000] gold!\", then the translation template should be \"Everyone gains [amount] gold! = \". The translation engine would translate the \"Everyone gains [] gold!\" and \"5000\" individually and reassemble them - of course, the number is simply passed through. But in other cases that could be e.g. a Unit name that would be translated, and you could trust that translations for units are already handled just fine. Note that uniques often use the feature, but it is in no way limited to them. It it makes life easier for translators, use it. Curly brackets {} are simpler - the contents within the brackets are translated individually, while the outer parts are passed through verbatim. Example: \"+$amount${Fonts.gold} {Gold}\".toLabel() - note the first ${} is a kotlin template while the second pair becomes part of the string. It tells the translation engine to ignore the numbers and the symbol but to translate the single word \"Gold\".","title":"Translating"},{"location":"wiki/Translating/#starting-out","text":"The translation files are at /android/assets/jsons/translations If you're adding a new language, you'll need to create a new file ('Create a new file' to the right of the folder name in the UI), and copy into it the contents of template.properties If you're adding stuff to an existing language, simply start editing the file! You don't need to download anything, all translation work can be done on the Github website :) When you feel that you're ready to add your translation to the game, you'll need to create a merge request, which takes your changes and puts them into the main version of the game - it's pretty straightforward once you do it","title":"Starting out"},{"location":"wiki/Translating/#pitfalls","text":"If a translation template (the stuff to the left of \" = \") contains square brackets, you will have to include each of them verbatim in your translation, but you can move them. Upper/lower case is relevant! e.g. All [personFilter] are cool can be translated as Tous les [personFilter] sont cool , but not as Tous les [personnages] sont cool , and neither as Nous sommes vraiment cool . Failing this is the main cause of your PR's showing up with red \"x\"es and \"checks failed\". Blanks: Watch out for blanks at the start of a line or two of them before the equals sign. If you got such a line - those blanks are part of the translation key and must not be deleted on the left side, and you should probably also include them in your translation (unless your language doesn't need spaces to separate things). Changes in the templates: When we find a typo in the english texts and fix it, or marginally change a wording, the template changes. Often the old template will not be automatically fixed in the existing translations, because it's a lot of work and in most cases the developers cannot be sure the translation is still correct. For you, that might look like your translations are simply disappearing with an update. In such a case, you have the option to use github's history to look up old versions, copy the old translation, place it where the new template now says \"requires translation\" - and proofread and adapt it to the new english version. The history link for each file is in the top right area and has a nice round clock icon.","title":"Pitfalls"},{"location":"wiki/Translating/#wait-what-just-happened","text":"Like most open-source projects, Unciv is developed at Github, so if you don't have a user you'll first have to create one. The way Github works is the following: You create a 'fork' repo, i.e. copy, of Unciv that belongs to your user (myUser/Unciv) You make changes to your copy. These changes are called a 'commit'. You make a pull request, which is basically asking for the changes you made on myUser/Unciv to be merged into the main repo (yairm210/Unciv) When you ask to 'edit' a file in yairm210/Unciv, these stages happen automatically - but it's important to understand what's happening behind the scenes do you understand where the changes actually are!","title":"Wait, what just happened?"},{"location":"wiki/Translating/#why-not-use-a-crowdsourcing-translation-website-like","text":"Testing. Currently, translations undergo a number of tests for verification. This allows some language changes to be accepted and others not, and it's all in the same platform with the same tests. External translation tools don't allow for this. History and revisions. This is what Git was made for, and nothing like it exists in the world. I'm not exaggerating. Release cycle. We release versions weekly. If we need to take information from an external website every time, and for many that I've checked - you need to download the info as a csv or something and convert it. Every extra step hurts. Discussions. Most crowdsourcing translation websites don't allow for discussions and corrections on translations. Github does. Mass changes. If we're changing the source of the translation but want to keep the various destinations (say, we change \"Gold from trade routes +[amount]%\" to \"+[amount]% Gold from trade routes\"), if all the translation files are in Git we can do that in 1 minute. If it's external, this varies greatly.","title":"Why not use a crowdsourcing translation website like <...>?"},{"location":"wiki/Translating/#other-notes","text":"Make sure that you make the changes in the 'master' branch in your repo! Each untranslated phrase will have a \"requires translation\" line before it, so you can quickly find them. You don't need to remove them yourself if you don't want to - they will be automatically removed the next time we rebuild the file. Do as much as you're comfortable with - it's a big game with a lot of named objects, so don't feel pressured into doing everything =) Note that Right-to-Left languages such as Arabic and Hebrew are not supported by the framework :/","title":"Other notes"},{"location":"wiki/Translating/#translation-generation-for-developers","text":"","title":"Translation generation - for developers"},{"location":"wiki/Translating/#the-automatic-template-generation","text":"Before releasing every version, we regenerate the translation files. Sometimes, new strings (names, uniques, etc) are added in the json files. In order to not have to add every single one to the translation files manually, we have a class - TranslationFileWriter - that, for every language: Goes over the template.properties and copies translation lines For every json file in the jsons folder Selects all string values - both in objects, and in arrays in objects Generates a 'key = value' line This means that every text that ISN'T in the jsons needs to be added manually to the template.properties in order to be translated! That also means if you've been adding new json structures you (or someone) should check TranslationFileWriter and see if it is able to cope with them.","title":"The automatic template generation"},{"location":"wiki/Translating/#rules-for-templates-added-manually","text":"Building a new UI and doing something like popup.add(\"Hello world\".toLabel()) is a typical case: This is not contained in json data, so you'll have to add the template to template.properties yourself. For this example, adding Hello world = somewhere in a line of its own could suffice. Note the space at the end - it's absolutely required, and see to it your editor does not destroy your work. If you want to make sure, use Android Studio for git integration, but edit the file in an external editor, then run the unit tests locally before pushing. (to do: add link for instructions how to do that) Leading spaces on a translation line or more than one space between the text and the = would mean these spaces are a key part of the string to be translated . That can work, but be warned: translators often overlook that those spaces are a required part of both template and translation, so if you can do without, then doing without is safer. Translation templates can use placeholders, and there's two varieties: [] and {} . Square ones take precedence over curly ones, and nesting works only with a single level of curly nested inside one level of square. I both cases the symbols themselves ( []{} ) are removed by the translation engine. Square brackets [] mean the outer and inner components are both translated individually. The outer template will use alias names inside the brackets - example: Your code outputs \"Everyone gains [5000] gold!\", then the translation template should be \"Everyone gains [amount] gold! = \". The translation engine would translate the \"Everyone gains [] gold!\" and \"5000\" individually and reassemble them - of course, the number is simply passed through. But in other cases that could be e.g. a Unit name that would be translated, and you could trust that translations for units are already handled just fine. Note that uniques often use the feature, but it is in no way limited to them. It it makes life easier for translators, use it. Curly brackets {} are simpler - the contents within the brackets are translated individually, while the outer parts are passed through verbatim. Example: \"+$amount${Fonts.gold} {Gold}\".toLabel() - note the first ${} is a kotlin template while the second pair becomes part of the string. It tells the translation engine to ignore the numbers and the symbol but to translate the single word \"Gold\".","title":"Rules for templates added manually"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/","text":"Unciv is, at its core, a remake of Civ V, meaning mechanics-wise there's almost by definition not much place for innovation. In terms of UI, there's nothing here that hasn't been done dozens of times, with far greater polish. However, there is one area where Unciv is groundbreaking: in its accessibility of translations, the possibility space of its mods, and the relationship between them. Translations The translation process So let's start with translation. Surely this is a solved problem, right? Source text + language = translated text, and this information needs to be in a file so the game can read it. What makes us different from, for example, Firaxis? There are a couple of things, but the most significant is that this is an open-source game, and thus the translations are open-source as well. This means translators are both amateurs and not obligated to translate, so if translating is difficult, they simply won't. Amateurs can make mistakes, which is why it's vital that mistakes are easy to spot. That means that formats like \"translation key\" - e.g. DIPLOMACY_GREETING = Siamo lieti di fare la vostra conoscenza. are much less effective than A pleasure to meet you. = Siamo lieti di fare la vostra conoscenza. This format lends itself both the easier translation (it's immediately obvious what needs to be translated) and actual collaboration. A common suggestion that we get (by people with little familiarity with the project) is to \"use a website for translation\". This is not bad advice for a small open source game, but there are multiple disadvantages that (for now) no translation website provides enough advantage to outweigh: Testing . Currently, translations undergo a number of tests for verification - more on that later! This allows some language changes to be accepted and others not, and it's all in the same platform with the same tests. External translation tools don't allow for this. History and revisions . This is what Git was made for, and nothing like it exists in the world. By itself this would not Release cycle . We release versions semiweekly, and if we needed to upload changes to the translation website for every in-game change, and download them for every release, that's extra work. For some websites this is automate-able - for most it is not. Discussions . Most crowdsourcing translation websites don't allow for discussions and corrections on translations. Github makes every translation collaborative work. Mass changes . If we're changing the source of the translation but want to keep the various destinations (say, we change \"Gold from trade routes +[amount]%\" to \"+[amount]% Gold from trade routes\"), if all the translation files are in Git we can do that in 1 minute. If it's external, this varies greatly. Here are some ways that we managed to go wrong in the past: Putting all languages into the same file (\"one big translation dictionary\") - when multiple people edit this file for different languages, they can conflict with each other. Separate to different files for simpler management. Using json - json is great for machines, but less so for humans, who can easily make mistakes. Json format is surprisingly finnicky, miss a closing \" and the whole file is now unreadable. The format we decided to go for is one file per language, delimited by \" = \" for visual separation, in a .properties file. Lines starting in # are considered comments, so we can add comments for translators. Building the translation files As stated, Unciv releases versions semiweekly, and very often these changes include new objects or new UI elements. How do we keep all translation files up to date? In Unciv, all object data is stored in json format. This allows us to iterate on all objects, regardless of type, and extract the various text fields (strings or lists of strings). We avoid duplication by saving all translation texts we've already added, and use the existing translations to populate the \"value\" for each translation \"key\" we found in the json files. Since we rebuild the entire translation file every time, there's currently no way for translators to retain their own comments for future translators. But on the other hand, since for each line that we add we already know if it's translated or not, this allows us to add a # Requires translation line before every non-translated line, which helps translators for languages that are almost fully translated to easily locate the new or changed terms for translation with ctrl+f (and of course this marking will disappear the next time we rebuild the file). Since there are UI texts that are not part of any specific object (like \"Start new game\"), we have a separate template.properties file for texts to translate that are not in the json files. Unlike adding objects, where the developer doesn't need to address the translation files at all since it's all linked, when adding UI elements with new texts devs need to remember to add the texts to template.properties file. Translation placeholders This is all well and good for specific text-to-text translations, but what about translating \"A Temple has been built in Rome\"? The same template could potentially be any building name, or any city name! We do this with placeholders, which looks something like this: [construction] has been built in [cityName] = [cityName] ha costruito [construction] . As you can see, the placement of the parameters can change between languages, so we have to name all parameters. This also means that there can be explicitly wrong translations - if any parameter that appears in the source does not appear in the translated version, we won't be able to display this in-game! This is one of the translation tests that we mentioned earlier - when a translator opens a PR, the game undergoes build & test via the Github Actions, and will notify on failures. Finding the text that warns of the failure within the action output is currently mostly done by devs, but I hope to be able to automate this too someday. To translate a text like \"[Temple] has been built in [Rome]\", therefore, we need to: - Find the relevant translation (we do this by erasing all text between square brackets in input and finding the relevant translation text) - Map placeholder names to input text (construction = Temple, cityName = Rome) - Replace placeholders in translation with TRANSLATED input text (in [cityName] ha costruito [construction] , replace \"[cityName]\" with translation of \"Rome\", and \"[construction]\" with translation of \"Temple\") Translating mod data The translation generation reads information from \"a ruleset\", i.e. the set of jsons defining the game's objects. Every mod is also a ruleset, either replacing or adding to the base ruleset defined in the game. This means that the same translation generation that we do for the base game can also be applied to mods, and so each modder can decide (from within the game) to generate translation files for his mod, and since mods are uploaded to Github to be widely available as part of the mod release methodology, translators will be able to translate those files the exact same way that they translate Unciv's base ruleset. Uniques Moddable unique effects Every object in Unciv can include \"uniques\" - a list of strings, each granting a unique effect that is not applicable for every object of its type. For example, the Palace building has the unique \"Indicates the capital city\", and the settler has the unique \"Founds a new city\". This allows us to share effects between multiple units, and to avoid hardcoding and allow modders to add any effect to any object. Here too we encounter the problem of \"generic\" uniques - how can we have these effects grant a building, some stats, etc, using the same unique for all objects? Why, with placeholders of course! For example, one building has \"Requires a [Library] in all cities\", where \"Library\" can be replaced with any other building for similar effects. We can then extract the parameters from the unique at runtime, to know how to resolve the unique's effects. Since the translation template is the same as the unique template, these uniques are instantly translatable as well! We do have a slight problem, though - since translation texts come directly from the json files, and the json files have \"Requires a [Library] in all cities\", how do we tell the translators not to directly translate \"Library\" but the take the parameter name verbatim? Well, 95% of translation parameters fit nicely into a certain type - units, buildings, techs, terrains etc. So we can search for an object with than name, and since we find a Library building, we can put \"Requires a [buildingName] in all cities = \" as our translation line. Filters As time went on, we noticed that many of our \"uniques\" weren't so unique after all. Many were the same but with slightly different conditions. One affects all cities, one only coastal cities, and one only the city the building is built in. One affects Mounted units, one affects wounded units, one affects all water units, etc. We started compiling these conditions into \"filters\", which limited the number of uniques while expanding their range considerably. Take the following example unique for a building: \"[+1 Food] from [Deer] tiles [in this city]\". In its \"placeholder\" form, this is \"[stats] from [tileFilter] tiles [cityFilter]\". stats can accept any list of stats, e.g. '-2 Gold, +1 Science', '+3 Culture', etc. tileFilter can accept any number of tile parameters (base terrain e.g. 'Plains', terrain type eg. 'Land'/'Water', terrain features e.g. 'Forest', improvements e.g. 'Mine', resources e.g. 'Iron'. cityFilter can accept 'in this city', 'in all cities', 'in capital', 'in coastal cities', etc. There are also filters for units, all acceptable values are documented here . Unique management with Enums The further along we go, the more generic the uniques become, and the more of them there are. Older uniques become new ones, by being merged or made more generic, and the older ones are deprecated. Deprecation notices are put on Discord, but a one-time message is easy to miss, and if you come back after a while you don't know what's changed. Modders discover during gameplay that the values they put for uniques were incorrect. All these problems are solved with a single solution - since all uniques are defined by their text, we can create an enum with ALL existing uniques, which lets us: Find all usages of a unique in the IDE instantly Mark deprecated uniques as such using @Deprecated(\"as of <versionNumber\">) for devs (and modders!) Compare uniques using enum values, which is faster What's more, with a little bit of autodetection magic, we can determine the type of the parameter using its text. Using the above example, \"[stats] from [tileFilter] tiles [cityFilter]\", we can tell by the names of the parameters what each one is supposed to be,. We can then check at loading time for each unique, if its parameter values matches the parameter type it's supposed to have, which lets us catch incorrect parameters. The \"autodetection\" of parameter types for translations can also be fed from here, leading to much more accurate translation texts - instead of detecting from an example (e.g. \"Requires a [Library] in all cities\" from the json), we now use a dev-inputted value like \"Requires a [buildingName] in all cities\". This allows us to accept multiple types, like for e.g. \"Requires [buildingName/techName/policyName]\". Deprecated values can be detected due to the @Deprecated annotation, and can be displayed to the modders when loading the mod, together with the correct replacement. Conditionals Beyond the existing filters for units, buildings, tiles etc, there are some conditions that are global. For example, uniques that take effect when the empire is happy; when a tech has been researched; when the empire is at war; etc. Rather than being 'build in' to specific uniques, these conditions can be seen as extensions of existing uniques and thus globally relevant. For example, instead of \"[+1 Production] [in all cities] when empire is happy\", we can extract the conditional to \"[+1 Production] [in all cities] \". This does two things: A. Turns the 'extra' unique back into a regular \"[stats] [cityFilter]\" unique B. Turns the conditional into an extra piece that can be added onto any other unique Conditionals have a lot of nuance, especially regarding translation and ordering, so work in that field is more gradual. What's next? We have yet to fully map all existing uniques and convert all textual references in the code to Enum usages, and have yet to extract all conditionals from their uniques. We already have a map of what uniques can be put on what objects - it won't take much to add that check as well and warn against uniques that are put on the wrong sorts of objects. Once we build the full inventory of the uniques, instead of the wiki page that needs to be updated manually we'll be able to generate a list of all acceptable uniques and their parameters directly from the source of truth. Put that in a webpage, add hover-links for each parameter type, generate and upload to github.io every version, and watch the magic happen. We'll also be able to notify modders if they use \"unknown\" uniques.","title":"Translations, mods, and modding freedom in Open Source"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/#translations","text":"","title":"Translations"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/#the-translation-process","text":"So let's start with translation. Surely this is a solved problem, right? Source text + language = translated text, and this information needs to be in a file so the game can read it. What makes us different from, for example, Firaxis? There are a couple of things, but the most significant is that this is an open-source game, and thus the translations are open-source as well. This means translators are both amateurs and not obligated to translate, so if translating is difficult, they simply won't. Amateurs can make mistakes, which is why it's vital that mistakes are easy to spot. That means that formats like \"translation key\" - e.g. DIPLOMACY_GREETING = Siamo lieti di fare la vostra conoscenza. are much less effective than A pleasure to meet you. = Siamo lieti di fare la vostra conoscenza. This format lends itself both the easier translation (it's immediately obvious what needs to be translated) and actual collaboration. A common suggestion that we get (by people with little familiarity with the project) is to \"use a website for translation\". This is not bad advice for a small open source game, but there are multiple disadvantages that (for now) no translation website provides enough advantage to outweigh: Testing . Currently, translations undergo a number of tests for verification - more on that later! This allows some language changes to be accepted and others not, and it's all in the same platform with the same tests. External translation tools don't allow for this. History and revisions . This is what Git was made for, and nothing like it exists in the world. By itself this would not Release cycle . We release versions semiweekly, and if we needed to upload changes to the translation website for every in-game change, and download them for every release, that's extra work. For some websites this is automate-able - for most it is not. Discussions . Most crowdsourcing translation websites don't allow for discussions and corrections on translations. Github makes every translation collaborative work. Mass changes . If we're changing the source of the translation but want to keep the various destinations (say, we change \"Gold from trade routes +[amount]%\" to \"+[amount]% Gold from trade routes\"), if all the translation files are in Git we can do that in 1 minute. If it's external, this varies greatly. Here are some ways that we managed to go wrong in the past: Putting all languages into the same file (\"one big translation dictionary\") - when multiple people edit this file for different languages, they can conflict with each other. Separate to different files for simpler management. Using json - json is great for machines, but less so for humans, who can easily make mistakes. Json format is surprisingly finnicky, miss a closing \" and the whole file is now unreadable. The format we decided to go for is one file per language, delimited by \" = \" for visual separation, in a .properties file. Lines starting in # are considered comments, so we can add comments for translators.","title":"The translation process"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/#building-the-translation-files","text":"As stated, Unciv releases versions semiweekly, and very often these changes include new objects or new UI elements. How do we keep all translation files up to date? In Unciv, all object data is stored in json format. This allows us to iterate on all objects, regardless of type, and extract the various text fields (strings or lists of strings). We avoid duplication by saving all translation texts we've already added, and use the existing translations to populate the \"value\" for each translation \"key\" we found in the json files. Since we rebuild the entire translation file every time, there's currently no way for translators to retain their own comments for future translators. But on the other hand, since for each line that we add we already know if it's translated or not, this allows us to add a # Requires translation line before every non-translated line, which helps translators for languages that are almost fully translated to easily locate the new or changed terms for translation with ctrl+f (and of course this marking will disappear the next time we rebuild the file). Since there are UI texts that are not part of any specific object (like \"Start new game\"), we have a separate template.properties file for texts to translate that are not in the json files. Unlike adding objects, where the developer doesn't need to address the translation files at all since it's all linked, when adding UI elements with new texts devs need to remember to add the texts to template.properties file.","title":"Building the translation files"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/#translation-placeholders","text":"This is all well and good for specific text-to-text translations, but what about translating \"A Temple has been built in Rome\"? The same template could potentially be any building name, or any city name! We do this with placeholders, which looks something like this: [construction] has been built in [cityName] = [cityName] ha costruito [construction] . As you can see, the placement of the parameters can change between languages, so we have to name all parameters. This also means that there can be explicitly wrong translations - if any parameter that appears in the source does not appear in the translated version, we won't be able to display this in-game! This is one of the translation tests that we mentioned earlier - when a translator opens a PR, the game undergoes build & test via the Github Actions, and will notify on failures. Finding the text that warns of the failure within the action output is currently mostly done by devs, but I hope to be able to automate this too someday. To translate a text like \"[Temple] has been built in [Rome]\", therefore, we need to: - Find the relevant translation (we do this by erasing all text between square brackets in input and finding the relevant translation text) - Map placeholder names to input text (construction = Temple, cityName = Rome) - Replace placeholders in translation with TRANSLATED input text (in [cityName] ha costruito [construction] , replace \"[cityName]\" with translation of \"Rome\", and \"[construction]\" with translation of \"Temple\")","title":"Translation placeholders"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/#translating-mod-data","text":"The translation generation reads information from \"a ruleset\", i.e. the set of jsons defining the game's objects. Every mod is also a ruleset, either replacing or adding to the base ruleset defined in the game. This means that the same translation generation that we do for the base game can also be applied to mods, and so each modder can decide (from within the game) to generate translation files for his mod, and since mods are uploaded to Github to be widely available as part of the mod release methodology, translators will be able to translate those files the exact same way that they translate Unciv's base ruleset.","title":"Translating mod data"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/#uniques","text":"","title":"Uniques"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/#moddable-unique-effects","text":"Every object in Unciv can include \"uniques\" - a list of strings, each granting a unique effect that is not applicable for every object of its type. For example, the Palace building has the unique \"Indicates the capital city\", and the settler has the unique \"Founds a new city\". This allows us to share effects between multiple units, and to avoid hardcoding and allow modders to add any effect to any object. Here too we encounter the problem of \"generic\" uniques - how can we have these effects grant a building, some stats, etc, using the same unique for all objects? Why, with placeholders of course! For example, one building has \"Requires a [Library] in all cities\", where \"Library\" can be replaced with any other building for similar effects. We can then extract the parameters from the unique at runtime, to know how to resolve the unique's effects. Since the translation template is the same as the unique template, these uniques are instantly translatable as well! We do have a slight problem, though - since translation texts come directly from the json files, and the json files have \"Requires a [Library] in all cities\", how do we tell the translators not to directly translate \"Library\" but the take the parameter name verbatim? Well, 95% of translation parameters fit nicely into a certain type - units, buildings, techs, terrains etc. So we can search for an object with than name, and since we find a Library building, we can put \"Requires a [buildingName] in all cities = \" as our translation line.","title":"Moddable unique effects"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/#filters","text":"As time went on, we noticed that many of our \"uniques\" weren't so unique after all. Many were the same but with slightly different conditions. One affects all cities, one only coastal cities, and one only the city the building is built in. One affects Mounted units, one affects wounded units, one affects all water units, etc. We started compiling these conditions into \"filters\", which limited the number of uniques while expanding their range considerably. Take the following example unique for a building: \"[+1 Food] from [Deer] tiles [in this city]\". In its \"placeholder\" form, this is \"[stats] from [tileFilter] tiles [cityFilter]\". stats can accept any list of stats, e.g. '-2 Gold, +1 Science', '+3 Culture', etc. tileFilter can accept any number of tile parameters (base terrain e.g. 'Plains', terrain type eg. 'Land'/'Water', terrain features e.g. 'Forest', improvements e.g. 'Mine', resources e.g. 'Iron'. cityFilter can accept 'in this city', 'in all cities', 'in capital', 'in coastal cities', etc. There are also filters for units, all acceptable values are documented here .","title":"Filters"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/#unique-management-with-enums","text":"The further along we go, the more generic the uniques become, and the more of them there are. Older uniques become new ones, by being merged or made more generic, and the older ones are deprecated. Deprecation notices are put on Discord, but a one-time message is easy to miss, and if you come back after a while you don't know what's changed. Modders discover during gameplay that the values they put for uniques were incorrect. All these problems are solved with a single solution - since all uniques are defined by their text, we can create an enum with ALL existing uniques, which lets us: Find all usages of a unique in the IDE instantly Mark deprecated uniques as such using @Deprecated(\"as of <versionNumber\">) for devs (and modders!) Compare uniques using enum values, which is faster What's more, with a little bit of autodetection magic, we can determine the type of the parameter using its text. Using the above example, \"[stats] from [tileFilter] tiles [cityFilter]\", we can tell by the names of the parameters what each one is supposed to be,. We can then check at loading time for each unique, if its parameter values matches the parameter type it's supposed to have, which lets us catch incorrect parameters. The \"autodetection\" of parameter types for translations can also be fed from here, leading to much more accurate translation texts - instead of detecting from an example (e.g. \"Requires a [Library] in all cities\" from the json), we now use a dev-inputted value like \"Requires a [buildingName] in all cities\". This allows us to accept multiple types, like for e.g. \"Requires [buildingName/techName/policyName]\". Deprecated values can be detected due to the @Deprecated annotation, and can be displayed to the modders when loading the mod, together with the correct replacement.","title":"Unique management with Enums"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/#conditionals","text":"Beyond the existing filters for units, buildings, tiles etc, there are some conditions that are global. For example, uniques that take effect when the empire is happy; when a tech has been researched; when the empire is at war; etc. Rather than being 'build in' to specific uniques, these conditions can be seen as extensions of existing uniques and thus globally relevant. For example, instead of \"[+1 Production] [in all cities] when empire is happy\", we can extract the conditional to \"[+1 Production] [in all cities] \". This does two things: A. Turns the 'extra' unique back into a regular \"[stats] [cityFilter]\" unique B. Turns the conditional into an extra piece that can be added onto any other unique Conditionals have a lot of nuance, especially regarding translation and ordering, so work in that field is more gradual.","title":"Conditionals"},{"location":"wiki/Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/#whats-next","text":"We have yet to fully map all existing uniques and convert all textual references in the code to Enum usages, and have yet to extract all conditionals from their uniques. We already have a map of what uniques can be put on what objects - it won't take much to add that check as well and warn against uniques that are put on the wrong sorts of objects. Once we build the full inventory of the uniques, instead of the wiki page that needs to be updated manually we'll be able to generate a list of all acceptable uniques and their parameters directly from the source of truth. Put that in a webpage, add hover-links for each parameter type, generate and upload to github.io every version, and watch the magic happen. We'll also be able to notify modders if they use \"unknown\" uniques.","title":"What's next?"},{"location":"wiki/Uniques/","text":"Overview Generated Documentation Unique locations Parameter types stats tileFilter unitFilter cityFilter buildingFilter Overview Every type of object has some traits that are shared across all, or most, objects of its kind. For example, a building's stat increase, cost and required tech; a unit's type, movement and attack; a resource's type, improvement and bonus stats from improvement. All such traits have their own fields in the said object types. But there are also other traits, that are only in a small subset of objects will have. Units that can see submarines from more than one tile away, or can move after attacking, or has a combat bonus against a certain other type of unit. Buildings that give a free great person, or improve stats dependent on the population of a city, or provide extra yield to certain tiles. These traits cannot be given their own fields due to the huge number of them. Instead, every special trait that an object has is encoded into a single parameter: the list of unique traits, or \"uniques\". In the json files, this looks something like \"uniques\": [\"Requires a [Market] in all cities\", \"Cost increases by [30] per owned city\"] . As seen in the above example, in order to provide flexibility and generalization, Uniques have certain parameters , marked by the fact that they are inside square braces. These parameters can be changed, and the game will recognize the text inside them and act accordingly. A list of all available uniques can be found here . Generated Documentation This part of the wiki is human-edited and partially out of date. However, we now have automatically generated documentation, complete for all Uniques that have been updated to the new UniqueType system. It is part of the main source tree and can be found here. . This version should always be up-to-date with the uniques and conditionals currently supported in the game. Unique locations Most uniques are \"Global uniques\" - meaning, they can be put in one of these places: - Nation uniques - Always active for a specific Nation - Policy uniques - Active once the policy has been chosen - Building uniques - Active once the building has been constructed in any city - Tech uniques - Active once the tech has been researched - Era uniques - Active once in the specified era - Religion uniques - Founder & Enhancer beliefs from your religion Most uniques are ongoing - they describe something continuous. Some, however, are one-time actions (free technology, free unit, etc) - these cannot be put in a Nation unique, since unlike the other categories, there is no specific time to activate them. Such uniques will be marked in the documentation as \"one time effect\". Parameter types Parameters come in various types, and will be addressed as such inside the [square brackets]. amount - This indicates a whole number, possibly with a + or - sign, such as \"2\", \"+13\", or \"-3\". unitName, buildingName, improvementName etc - Rather self explanatory. Examples: \"Warrior\", \"Library\", and \"Mine\", accordingly. stat - This is one of the 7 major stats in the game - \"Gold\", \"Science\", \"Production\", \"Food\", \"Happiness\", \"Culture\" and \"Faith\". Note that the stat names need to be capitalized! stats, tileFilter, unitFilter, cityFilter, constructionFilter/buildingFilter - these are more complex and are addressed individually stats This indicates a text comprised of specific stats and is slightly more complex. Each stats is comprised of several stat changes, each in the form of \"+{amount} {stat}\", where 'stat' is one of the seven major stats mentioned above. For example: \"+1 Science\". These can be strung together with \", \" between them, for example: \"+2 Production, +3 Food\". A full example would be, for the \"[stats] from every [buildingName]\" unique: \"[+1 Culture, +1 Gold] from every [Barracks]\" tileFilter TileFilters are split up into two parts: terrainFilters and improvementFilters. TerrainFilters only check if the tile itself has certain characteristics, while the improvementFilters only checks the improvement on a tile. Using the tileFilter itself will check both of these. terrainFilters allow us to specify tiles according to a number of different aspects: A filter names a specific json attribute (by name): Base terrain Terrain features Base terrain uniques Terrain feature uniques Resource Natural wonder Or the filter is a constant string choosing a derived test: \"All\" \"Water\", \"Land\" \"Coastal\" (at least one direct neighbor is a coast) \"River\" (as in all 'river on tile' contexts, it means 'adjacent to a river on at least one side') \"Open terrain\", \"Rough terrain\" (note all terrain not having the rough unique is counted as open) \"Friendly Land\" - land belonging to you, or other civs with open borders to you \"Foreign Land\" - any land that isn't friendly land \"Enemy land\" - any land belonging to a civ you are at war with \"Water resource\", \"Strategic resource\", \"Luxury resource\", \"Bonus resource\" \"Natural Wonder\" (as opposed to above which means testing for a specific Natural Wonder by name, this tests for any of them) Please note all of these are case-sensitive . Also note: Resource filters depend on whether a viewing civ is known in the context where the filter runs. Water and specific tests require a viewing civ, and if the resource needs a tech to be visible, that tech to be researched by the viewing civ. The other resource category tests can succeed without a known viewing civ only for resources not requiring any tech. So - test your mod! So for instance, the unique \"[stats] from [tileFilter] tiles [cityFilter]\" can match several cases: - \"[+2 Food] from [Lakes] tiles [in this city]\" - \"[+1 Gold] from [Water] tiles [in all cities]\" - \"[+1 Production] from [Forest] tiles [in all coastal cities]\" Please note that using resources is most use cases, but not in combat ones. This is due to the fact that resources can be visible to some civs while invisible to others - so if you're attacking with a +10% combat bonus from Coal, while the enemy can't see coal, it could get weird. improvementFilters only check for the improvements on a tile. The following are implemented: - improvement name (Note that \"Road\" and \"Railroad\" do work as improvementFilters, but not as tileFilters at the moment.) - \"All\" - \"Great Improvements\", \"Great\" - \"All Road\" - for Roads & Railroads unitFilter unitFilters allow us to activate uniques for specific units, based on: unit name unit type - e.g. Melee, Ranged, WaterSubmarine, etc. \"Land\", \"Water\", \"Air\" \"land units\", \"water units\", \"air units\" \"non-air\" for non-air non-missile units \"Military\", \"military units\" \"Civilian\", \"civilian units\" \"All\" \"Melee\" \"Ranged\" \"Nuclear Weapon\" \"Great Person\", \"Great\" \"Embarked\" \"Wounded\", \"wounded units\" \"Barbarians\", \"Barbarian\" \"City-State\" Any exact unique the unit has Any exact unique the unit type has Any combination of the above (will match only if all match). The format is \"{filter1} {filter2}\" and can match any number of filters. For example: \"[{Military} {Water}]\" units, \"[{Wounded} {Armor}]\" units, etc. No space or other text is allowed between the \"[\" and the first \"{\". cityFilter cityFilters allow us to choose the range of cities affected by this unique: \"in this city\" \"in all cities\" \"in other cities\" \"in all coastal cities\" \"in capital\" \"in all non-occupied cities\" - all cities that are not puppets and don't have extra unhappiness from being recently conquered \"in all cities with a world wonder\" \"in all cities connected to capital\" \"in all cities with a garrison\" \"in non-enemy foreign cities\" - In all cities owned by civs other than you that you are not at war with \"in foreign cities\" \"in annexed cities\" \"in holy cities\" \"in City-State cities\" \"in cities following this religion\" - Should only be used in pantheon/follower uniques for religions \"in all cities in which the majority religion is a major religion\" \"in all cities in which the majority religion is a enhanced religion\" constructionFilter ConstructionFilters allow us to activate uniques while constructing certain buildings or units. For units, the UnitFilter is called. For Buildings, the following options are implemented: \"All\" \"Buildings\", \"Building\" \"Wonders\", \"Wonders\" \"National Wonder\" \"World Wonder\" -- All wonders that are not national wonders building name The name of the building it replaces (so for example uniques for libraries will apply to paper makers as well) an exact unique the building has (e.g.: \"spaceship part\") \"Culture\", \"Gold\", etc. if the building is \"stat-related\" for that stat. Stat-related buildings are defined as one of the following: Provides that stat directly (e.g. +1 Culture) Provides a percentage bonus for that stat (e.g. +10% Production) Provides that stat as a bonus for resources (e.g. +1 Food for Wheat) Provides that stat per some amount of population (e.g. +1 Science for every 2 population [cityFilter]) Conditionals Some uniques also allow for the placing of conditionals. These are conditions that need to be met for the unique to be active. In the unique \"[+10]% Growth \\<when at war>\", the <when at war> part is a conditional, denoted by the pointy brackets. Making a building with this unique will provide a 10% Growth boost to cities with this building, but only as long as the empire is at war. Multiple conditionals can be applied to the same unique, for example, you can have a promotion with the following unique: \"[+33]% Strength \\<vs [Armored] units> \\<in [Open terrain] tiles>\" Which will only apply the strength boost when fighting armored units in open terrain. This system is currently in development, so only a small amount of conditionals exist, and only a few uniques can have conditionals for now. It will be expanded greatly, improving the amount of combinations that can be made and therefore the amount of different uniques that exist. Uniques that support conditionals will be denoted with a \"\u00a9\" sign for now. \"Quantity of Resources gifted by City-States increased by 100%\" - Replaced with \"Quantity of Resources gifted by City-States increased by [amount]%\"","title":"Uniques"},{"location":"wiki/Uniques/#overview","text":"Every type of object has some traits that are shared across all, or most, objects of its kind. For example, a building's stat increase, cost and required tech; a unit's type, movement and attack; a resource's type, improvement and bonus stats from improvement. All such traits have their own fields in the said object types. But there are also other traits, that are only in a small subset of objects will have. Units that can see submarines from more than one tile away, or can move after attacking, or has a combat bonus against a certain other type of unit. Buildings that give a free great person, or improve stats dependent on the population of a city, or provide extra yield to certain tiles. These traits cannot be given their own fields due to the huge number of them. Instead, every special trait that an object has is encoded into a single parameter: the list of unique traits, or \"uniques\". In the json files, this looks something like \"uniques\": [\"Requires a [Market] in all cities\", \"Cost increases by [30] per owned city\"] . As seen in the above example, in order to provide flexibility and generalization, Uniques have certain parameters , marked by the fact that they are inside square braces. These parameters can be changed, and the game will recognize the text inside them and act accordingly. A list of all available uniques can be found here .","title":"Overview"},{"location":"wiki/Uniques/#generated-documentation","text":"This part of the wiki is human-edited and partially out of date. However, we now have automatically generated documentation, complete for all Uniques that have been updated to the new UniqueType system. It is part of the main source tree and can be found here. . This version should always be up-to-date with the uniques and conditionals currently supported in the game.","title":"Generated Documentation"},{"location":"wiki/Uniques/#unique-locations","text":"Most uniques are \"Global uniques\" - meaning, they can be put in one of these places: - Nation uniques - Always active for a specific Nation - Policy uniques - Active once the policy has been chosen - Building uniques - Active once the building has been constructed in any city - Tech uniques - Active once the tech has been researched - Era uniques - Active once in the specified era - Religion uniques - Founder & Enhancer beliefs from your religion Most uniques are ongoing - they describe something continuous. Some, however, are one-time actions (free technology, free unit, etc) - these cannot be put in a Nation unique, since unlike the other categories, there is no specific time to activate them. Such uniques will be marked in the documentation as \"one time effect\".","title":"Unique locations"},{"location":"wiki/Uniques/#parameter-types","text":"Parameters come in various types, and will be addressed as such inside the [square brackets]. amount - This indicates a whole number, possibly with a + or - sign, such as \"2\", \"+13\", or \"-3\". unitName, buildingName, improvementName etc - Rather self explanatory. Examples: \"Warrior\", \"Library\", and \"Mine\", accordingly. stat - This is one of the 7 major stats in the game - \"Gold\", \"Science\", \"Production\", \"Food\", \"Happiness\", \"Culture\" and \"Faith\". Note that the stat names need to be capitalized! stats, tileFilter, unitFilter, cityFilter, constructionFilter/buildingFilter - these are more complex and are addressed individually","title":"Parameter types"},{"location":"wiki/Uniques/#stats","text":"This indicates a text comprised of specific stats and is slightly more complex. Each stats is comprised of several stat changes, each in the form of \"+{amount} {stat}\", where 'stat' is one of the seven major stats mentioned above. For example: \"+1 Science\". These can be strung together with \", \" between them, for example: \"+2 Production, +3 Food\". A full example would be, for the \"[stats] from every [buildingName]\" unique: \"[+1 Culture, +1 Gold] from every [Barracks]\"","title":"stats"},{"location":"wiki/Uniques/#tilefilter","text":"TileFilters are split up into two parts: terrainFilters and improvementFilters. TerrainFilters only check if the tile itself has certain characteristics, while the improvementFilters only checks the improvement on a tile. Using the tileFilter itself will check both of these. terrainFilters allow us to specify tiles according to a number of different aspects: A filter names a specific json attribute (by name): Base terrain Terrain features Base terrain uniques Terrain feature uniques Resource Natural wonder Or the filter is a constant string choosing a derived test: \"All\" \"Water\", \"Land\" \"Coastal\" (at least one direct neighbor is a coast) \"River\" (as in all 'river on tile' contexts, it means 'adjacent to a river on at least one side') \"Open terrain\", \"Rough terrain\" (note all terrain not having the rough unique is counted as open) \"Friendly Land\" - land belonging to you, or other civs with open borders to you \"Foreign Land\" - any land that isn't friendly land \"Enemy land\" - any land belonging to a civ you are at war with \"Water resource\", \"Strategic resource\", \"Luxury resource\", \"Bonus resource\" \"Natural Wonder\" (as opposed to above which means testing for a specific Natural Wonder by name, this tests for any of them) Please note all of these are case-sensitive . Also note: Resource filters depend on whether a viewing civ is known in the context where the filter runs. Water and specific tests require a viewing civ, and if the resource needs a tech to be visible, that tech to be researched by the viewing civ. The other resource category tests can succeed without a known viewing civ only for resources not requiring any tech. So - test your mod! So for instance, the unique \"[stats] from [tileFilter] tiles [cityFilter]\" can match several cases: - \"[+2 Food] from [Lakes] tiles [in this city]\" - \"[+1 Gold] from [Water] tiles [in all cities]\" - \"[+1 Production] from [Forest] tiles [in all coastal cities]\" Please note that using resources is most use cases, but not in combat ones. This is due to the fact that resources can be visible to some civs while invisible to others - so if you're attacking with a +10% combat bonus from Coal, while the enemy can't see coal, it could get weird. improvementFilters only check for the improvements on a tile. The following are implemented: - improvement name (Note that \"Road\" and \"Railroad\" do work as improvementFilters, but not as tileFilters at the moment.) - \"All\" - \"Great Improvements\", \"Great\" - \"All Road\" - for Roads & Railroads","title":"tileFilter"},{"location":"wiki/Uniques/#unitfilter","text":"unitFilters allow us to activate uniques for specific units, based on: unit name unit type - e.g. Melee, Ranged, WaterSubmarine, etc. \"Land\", \"Water\", \"Air\" \"land units\", \"water units\", \"air units\" \"non-air\" for non-air non-missile units \"Military\", \"military units\" \"Civilian\", \"civilian units\" \"All\" \"Melee\" \"Ranged\" \"Nuclear Weapon\" \"Great Person\", \"Great\" \"Embarked\" \"Wounded\", \"wounded units\" \"Barbarians\", \"Barbarian\" \"City-State\" Any exact unique the unit has Any exact unique the unit type has Any combination of the above (will match only if all match). The format is \"{filter1} {filter2}\" and can match any number of filters. For example: \"[{Military} {Water}]\" units, \"[{Wounded} {Armor}]\" units, etc. No space or other text is allowed between the \"[\" and the first \"{\".","title":"unitFilter"},{"location":"wiki/Uniques/#cityfilter","text":"cityFilters allow us to choose the range of cities affected by this unique: \"in this city\" \"in all cities\" \"in other cities\" \"in all coastal cities\" \"in capital\" \"in all non-occupied cities\" - all cities that are not puppets and don't have extra unhappiness from being recently conquered \"in all cities with a world wonder\" \"in all cities connected to capital\" \"in all cities with a garrison\" \"in non-enemy foreign cities\" - In all cities owned by civs other than you that you are not at war with \"in foreign cities\" \"in annexed cities\" \"in holy cities\" \"in City-State cities\" \"in cities following this religion\" - Should only be used in pantheon/follower uniques for religions \"in all cities in which the majority religion is a major religion\" \"in all cities in which the majority religion is a enhanced religion\"","title":"cityFilter"},{"location":"wiki/Uniques/#constructionfilter","text":"ConstructionFilters allow us to activate uniques while constructing certain buildings or units. For units, the UnitFilter is called. For Buildings, the following options are implemented: \"All\" \"Buildings\", \"Building\" \"Wonders\", \"Wonders\" \"National Wonder\" \"World Wonder\" -- All wonders that are not national wonders building name The name of the building it replaces (so for example uniques for libraries will apply to paper makers as well) an exact unique the building has (e.g.: \"spaceship part\") \"Culture\", \"Gold\", etc. if the building is \"stat-related\" for that stat. Stat-related buildings are defined as one of the following: Provides that stat directly (e.g. +1 Culture) Provides a percentage bonus for that stat (e.g. +10% Production) Provides that stat as a bonus for resources (e.g. +1 Food for Wheat) Provides that stat per some amount of population (e.g. +1 Science for every 2 population [cityFilter])","title":"constructionFilter"},{"location":"wiki/Uniques/#conditionals","text":"Some uniques also allow for the placing of conditionals. These are conditions that need to be met for the unique to be active. In the unique \"[+10]% Growth \\<when at war>\", the <when at war> part is a conditional, denoted by the pointy brackets. Making a building with this unique will provide a 10% Growth boost to cities with this building, but only as long as the empire is at war. Multiple conditionals can be applied to the same unique, for example, you can have a promotion with the following unique: \"[+33]% Strength \\<vs [Armored] units> \\<in [Open terrain] tiles>\" Which will only apply the strength boost when fighting armored units in open terrain. This system is currently in development, so only a small amount of conditionals exist, and only a few uniques can have conditionals for now. It will be expanded greatly, improving the amount of combinations that can be made and therefore the amount of different uniques that exist. Uniques that support conditionals will be denoted with a \"\u00a9\" sign for now. \"Quantity of Resources gifted by City-States increased by 100%\" - Replaced with \"Quantity of Resources gifted by City-States increased by [amount]%\"","title":"Conditionals"},{"location":"wiki/Unit-related-JSON-files/","text":"Units.json UnitPromotions.json UnitTypes.json Units.json Link to original This file should contain a list of all the units, both military and civilian, that you want to use in your mod. Each unit can have the following attributes: | attribute | Type | optional or not | notes | | --------- | ---- | -------- | ----- | | name | String | required | The name of the units (required) | | unitType | String | required | The type of the unit. Must be in UnitTypes.json | | cost | Integer (\u22650) | defaults to 0 | The amount of production required to build this unit | | movement | Integer (\u22650) | defaults to 0 | The amount of movement points the unit has by default | | strength | Integer (\u22650) | defaults to 0 | The melee attack and defensive strength of the unit. If this and rangedStrength are ommited or 0, the unit will be a civilian | | rangedStrength | Integer (\u22650) | defaults to 0 | The ranged attack strength of the unit. If omitted, the unit cannot ranged attack | | range | Integer (\u22650) | defaults to 2 | The default range from which ranged attacks can be preformed | | interceptRange | Integer (\u22650) | defaults to 0 | Air units attacking within in this range will be intercepted | | requiredTech | String | defaults to none | The tech required to build this unit. Must be in Techs.json | | obsoleteTech | String | defaults to none | After researching this tech, the unit can no longer be build. Must be in Techs.json | | requiredResource | String | defaults to none | Resource that is consumed by building this unit. Must be in TileResources.json | | upgradesTo | String | defaults to none | Unit that this unit can upgrade to when it is available. Must be in Units.json | | replaces | String | defaults to none | If this unit is unique to a nation, this is the unit it replaces. Must be in Units.json | | uniqueTo | String | defaults to none | The nation that this unit is unique to. Must be in Nations.json | | hurryCostModifier | Integer | defaults to 0 | If this unit is bought for gold/faith, it's price is increased by so much percent | | promotions | List of Strings | defaults to none | A list of all the promotions the unit automatically receives upon being built. Each promotion must be in UnitPromotions.json | | uniques | List of Strings | defaults to none | A list of the unique abilities this unit has. A list of almost all uniques can be found here | | replacementTextForUniques | String | defaults to none | If provided, this will be displayed instead of the list of uniques. Can be used for better formatting. | | attackSound | String | defaults to none | The sound that is to be played when this unit attacks. For possible values, see sounds | civilopediaText | List | Default empty | see civilopediaText chapter | UnitPromotions.json Link to original This file lists the available unit promotions. Each promotion must have an icon, except progressions ending in \" I\", \" II\", \" III\" (no IV V VI allowed) are rendered by looking up an icon without those suffixes and adding stars. Remember, promotions can be \"bought\" with XP, but also granted by the unit type, buildings, wonders and such. They are preserved when a unit upgrades, therefore special properties of nation unique units that can be inherited when they upgrade should be in a promotion, not uniques/stats in the units json (example: Slinger withdraw). Each promotion can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | See above for \"I, II, III\" progressions | | prerequisites | List | Default empty | Prerequisite promotions | | effect | String | Default empty | Deprecated, use uniques instead | | unitTypes | List | Default empty | The unit types for which this promotion applies as specified in UnitTypes.json | | uniques | List | Default empty | List of effects, see here | | civilopediaText | List | Default empty | see civilopediaText chapter | UnitTypes.json Link to original This optional file is used for defining new types of units. The names of these can be used in unitFilters, and these types determine what domain the unit moves in: over land, over water or through the air. If the file is ommitted, the following are automatically added: Civilian, Melee, Ranged, Scout, Mounted, Armor, Siege, WaterCivilian, WaterMelee, WaterRanged, WaterSubmarine, WaterAircraftCarrier, Fighter, Bomber, AtomicBomber, and Missile. attribute Type optional or not notes name String required The name of the unit type movementType String required The domain through which the unit moves. Allowed values: \"Water\", \"Land\", \"Air\" uniques List of String defaults to none A list of the unique abilities every unit of this type has. A list of almost all uniques can be found here Sounds Standard values are below. The sounds themselves can be found here . arrow, artillery, bombard, bombing, cannon, chimes, choir, click, coin, construction, elephant, fortify, gdrAttack, horse, jetgun, machinegun, metalhit, missile, nonmetalhit, nuke, paper, policy, promote, setup, shipguns, shot, slider, swap, tankshot, throw, torpedo, upgrade, whoosh . Mods can add their own sounds, as long as any new value in attackSound has a corresponding sound file in the mod's sound folder, using one of the formats mp3, ogg or wav (file name extension must match codec used). Remember, names are case sensitive. Small sizes strongly recommended, Unciv's own sounds use 24kHz joint stereo 8-bit VBR at about 50-100kBps.","title":"Unit related JSON files"},{"location":"wiki/Unit-related-JSON-files/#unitsjson","text":"Link to original This file should contain a list of all the units, both military and civilian, that you want to use in your mod. Each unit can have the following attributes: | attribute | Type | optional or not | notes | | --------- | ---- | -------- | ----- | | name | String | required | The name of the units (required) | | unitType | String | required | The type of the unit. Must be in UnitTypes.json | | cost | Integer (\u22650) | defaults to 0 | The amount of production required to build this unit | | movement | Integer (\u22650) | defaults to 0 | The amount of movement points the unit has by default | | strength | Integer (\u22650) | defaults to 0 | The melee attack and defensive strength of the unit. If this and rangedStrength are ommited or 0, the unit will be a civilian | | rangedStrength | Integer (\u22650) | defaults to 0 | The ranged attack strength of the unit. If omitted, the unit cannot ranged attack | | range | Integer (\u22650) | defaults to 2 | The default range from which ranged attacks can be preformed | | interceptRange | Integer (\u22650) | defaults to 0 | Air units attacking within in this range will be intercepted | | requiredTech | String | defaults to none | The tech required to build this unit. Must be in Techs.json | | obsoleteTech | String | defaults to none | After researching this tech, the unit can no longer be build. Must be in Techs.json | | requiredResource | String | defaults to none | Resource that is consumed by building this unit. Must be in TileResources.json | | upgradesTo | String | defaults to none | Unit that this unit can upgrade to when it is available. Must be in Units.json | | replaces | String | defaults to none | If this unit is unique to a nation, this is the unit it replaces. Must be in Units.json | | uniqueTo | String | defaults to none | The nation that this unit is unique to. Must be in Nations.json | | hurryCostModifier | Integer | defaults to 0 | If this unit is bought for gold/faith, it's price is increased by so much percent | | promotions | List of Strings | defaults to none | A list of all the promotions the unit automatically receives upon being built. Each promotion must be in UnitPromotions.json | | uniques | List of Strings | defaults to none | A list of the unique abilities this unit has. A list of almost all uniques can be found here | | replacementTextForUniques | String | defaults to none | If provided, this will be displayed instead of the list of uniques. Can be used for better formatting. | | attackSound | String | defaults to none | The sound that is to be played when this unit attacks. For possible values, see sounds | civilopediaText | List | Default empty | see civilopediaText chapter |","title":"Units.json"},{"location":"wiki/Unit-related-JSON-files/#unitpromotionsjson","text":"Link to original This file lists the available unit promotions. Each promotion must have an icon, except progressions ending in \" I\", \" II\", \" III\" (no IV V VI allowed) are rendered by looking up an icon without those suffixes and adding stars. Remember, promotions can be \"bought\" with XP, but also granted by the unit type, buildings, wonders and such. They are preserved when a unit upgrades, therefore special properties of nation unique units that can be inherited when they upgrade should be in a promotion, not uniques/stats in the units json (example: Slinger withdraw). Each promotion can have the following properties: | Attribute | Type | Optional? | Notes | |-----------|------|-----------|-------| | name | String | Required | See above for \"I, II, III\" progressions | | prerequisites | List | Default empty | Prerequisite promotions | | effect | String | Default empty | Deprecated, use uniques instead | | unitTypes | List | Default empty | The unit types for which this promotion applies as specified in UnitTypes.json | | uniques | List | Default empty | List of effects, see here | | civilopediaText | List | Default empty | see civilopediaText chapter |","title":"UnitPromotions.json"},{"location":"wiki/Unit-related-JSON-files/#unittypesjson","text":"Link to original This optional file is used for defining new types of units. The names of these can be used in unitFilters, and these types determine what domain the unit moves in: over land, over water or through the air. If the file is ommitted, the following are automatically added: Civilian, Melee, Ranged, Scout, Mounted, Armor, Siege, WaterCivilian, WaterMelee, WaterRanged, WaterSubmarine, WaterAircraftCarrier, Fighter, Bomber, AtomicBomber, and Missile. attribute Type optional or not notes name String required The name of the unit type movementType String required The domain through which the unit moves. Allowed values: \"Water\", \"Land\", \"Air\" uniques List of String defaults to none A list of the unique abilities every unit of this type has. A list of almost all uniques can be found here","title":"UnitTypes.json"},{"location":"wiki/Unit-related-JSON-files/#sounds","text":"Standard values are below. The sounds themselves can be found here . arrow, artillery, bombard, bombing, cannon, chimes, choir, click, coin, construction, elephant, fortify, gdrAttack, horse, jetgun, machinegun, metalhit, missile, nonmetalhit, nuke, paper, policy, promote, setup, shipguns, shot, slider, swap, tankshot, throw, torpedo, upgrade, whoosh . Mods can add their own sounds, as long as any new value in attackSound has a corresponding sound file in the mod's sound folder, using one of the formats mp3, ogg or wav (file name extension must match codec used). Remember, names are case sensitive. Small sizes strongly recommended, Unciv's own sounds use 24kHz joint stereo 8-bit VBR at about 50-100kBps.","title":"Sounds"},{"location":"wiki/_Footer/","text":"To edit this wiki, open a pull request against the files under /docs/wiki in the main Unciv repository. ( Details )","title":" Footer"},{"location":"wiki/_Sidebar/","text":"Home Installing on macOS Translating Modding Mods Making a new Civilization Creating a custom tileset JSON files for mods Uniques Images and texture atlas Audiovisual Mods Development Getting Started Coding standards Project structure and major classes Building locally without Android Studio From code to deployment","title":"[Home](.)"},{"location":"wiki/_Sidebar/#home","text":"","title":"Home"},{"location":"wiki/_Sidebar/#installing-on-macos","text":"","title":"Installing on macOS"},{"location":"wiki/_Sidebar/#translating","text":"","title":"Translating"},{"location":"wiki/_Sidebar/#modding","text":"Mods Making a new Civilization Creating a custom tileset JSON files for mods Uniques Images and texture atlas Audiovisual Mods","title":"Modding"},{"location":"wiki/_Sidebar/#development","text":"Getting Started Coding standards Project structure and major classes Building locally without Android Studio From code to deployment","title":"Development"}]} |