From 8fec196db1f8b47746e5277c54f1f41952a2f6ca Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 12 Sep 2022 23:26:28 +0300 Subject: [PATCH] Got rid of uppercase C in Unciv in ALL places! --- README.md | 2 +- android/assets/Flags.atlas | 59 +- android/assets/Flags.png | Bin 165098 -> 175859 bytes android/assets/jsons/Tutorials.json | 2 +- .../Brazilian_Portuguese.properties | 4 +- .../jsons/translations/Bulgarian.properties | 2 +- .../jsons/translations/Catalan.properties | 26 +- .../jsons/translations/Czech.properties | 8 +- .../jsons/translations/Dutch.properties | 2 +- .../jsons/translations/English.properties | 2 +- .../jsons/translations/Filipino.properties | 2 +- .../jsons/translations/Finnish.properties | 2 +- .../jsons/translations/French.properties | 4 +- .../jsons/translations/German.properties | 6 +- .../jsons/translations/Greek.properties | 2 +- .../jsons/translations/Hungarian.properties | 2 +- .../jsons/translations/Indonesian.properties | 4 +- .../jsons/translations/Italian.properties | 10 +- .../jsons/translations/Japanese.properties | 4 +- .../jsons/translations/Korean.properties | 6 +- .../jsons/translations/Lithuanian.properties | 4 +- .../jsons/translations/Malay.properties | 2 +- .../Persian_(Pinglish-DIN).properties | 2 +- .../Persian_(Pinglish-UN).properties | 2 +- .../jsons/translations/Polish.properties | 2 +- .../jsons/translations/Portuguese.properties | 2 +- .../jsons/translations/Romanian.properties | 4 +- .../jsons/translations/Russian.properties | 4 +- .../Simplified_Chinese.properties | 6 +- .../jsons/translations/Spanish.properties | 4 +- .../jsons/translations/Swedish.properties | 2 +- .../assets/jsons/translations/Thai.properties | 2 +- .../Traditional_Chinese.properties | 8 +- .../jsons/translations/Turkish.properties | 2 +- .../jsons/translations/Ukrainian.properties | 2 +- .../jsons/translations/Vietnamese.properties | 6 +- android/res/values-de/strings.xml | 4 +- android/res/values-fr/strings.xml | 4 +- android/res/values-ro/strings.xml | 2 +- android/res/values/strings.xml | 2 +- .../civilization/ReligionAutomation.kt | 2 +- .../mainmenu/WorldScreenMenuPopup.kt | 2 +- .../src/com/unciv/app/desktop/ImagePacker.kt | 2 +- docs/Other/Installing-on-macOS.md | 10 +- .../metadata/android/ca/full_description.txt | 4 +- .../metadata/android/de/full_description.txt | 4 +- .../android/en-US/full_description.txt | 4 +- .../metadata/android/es/full_description.txt | 4 +- .../metadata/android/fr/full_description.txt | 4 +- .../metadata/android/in/full_description.txt | 4 +- .../metadata/android/ja/full_description.txt | 4 +- .../metadata/android/ko/full_description.txt | 4 +- .../metadata/android/lt/full_description.txt | 2 +- .../android/pt-BR/full_description.txt | 4 +- .../metadata/android/pt/full_description.txt | 4 +- .../metadata/android/ro/full_description.txt | 4 +- .../metadata/android/ru/full_description.txt | 4 +- .../metadata/android/zh/full_description.txt | 4 +- site/search/search_index.json | 2 +- site/wiki/Installing-on-macOS/index.html | 768 +++++++++--------- 60 files changed, 531 insertions(+), 524 deletions(-) diff --git a/README.md b/README.md index 6607828109..969b1039b4 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ Yes! Windows and Linux versions are available at [itch.io](https://yairm210.itch Unciv can also be installed on macOS, a guide on how to do that can be found [here](https://yairm210.github.io/Unciv/Other/Installing-on-macOS/). -If you have Java 8, and are familiar with the command line, there are (considerably smaller) JARs in [Releases](https://github.com/yairm210/UnCiv/releases) which you can run with `java -jar Unciv.jar`. +If you have Java 8, and are familiar with the command line, there are (considerably smaller) JARs in [Releases](https://github.com/yairm210/Unciv/releases) which you can run with `java -jar Unciv.jar`. For Mac users, you'll need to add extra parameters, `java -XstartOnFirstThread -Djava.awt.headless=true -jar Unciv.jar`. If you use Flatpaks, there's a Flatpak by [MayeulC](https://github.com/MayeulC) and you can know more about it [here](https://github.com/flathub/io.github.yairm210.unciv). Flathub link is available in the [Downloads](#downloads) section. diff --git a/android/assets/Flags.atlas b/android/assets/Flags.atlas index 39583522e8..603ab2e453 100644 --- a/android/assets/Flags.atlas +++ b/android/assets/Flags.atlas @@ -123,108 +123,115 @@ FlagIcons/Lithuanian orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Malay +FlagIcons/Macedonian rotate: false xy: 820, 276 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 +FlagIcons/Malay + rotate: false + xy: 684, 4 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 FlagIcons/Persian_(Pinglish-DIN) - rotate: false - xy: 684, 4 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -FlagIcons/Persian_(Pinglish-UN) - rotate: false - xy: 684, 4 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -FlagIcons/Polish rotate: false xy: 820, 140 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Portuguese +FlagIcons/Persian_(Pinglish-UN) + rotate: false + xy: 820, 140 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +FlagIcons/Polish rotate: false xy: 956, 276 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Romanian +FlagIcons/Portuguese rotate: false xy: 820, 4 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Russian +FlagIcons/Romanian rotate: false xy: 956, 140 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Simplified_Chinese +FlagIcons/Russian rotate: false xy: 1092, 276 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Spanish +FlagIcons/Simplified_Chinese rotate: false xy: 956, 4 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Swedish +FlagIcons/Spanish rotate: false xy: 1092, 140 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Thai +FlagIcons/Swedish rotate: false xy: 1228, 276 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Traditional_Chinese +FlagIcons/Thai rotate: false xy: 1092, 4 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Turkish +FlagIcons/Traditional_Chinese rotate: false xy: 1228, 140 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Ukrainian +FlagIcons/Turkish rotate: false xy: 1364, 276 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -FlagIcons/Vietnamese +FlagIcons/Ukrainian rotate: false xy: 1228, 4 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 +FlagIcons/Vietnamese + rotate: false + xy: 1364, 140 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 diff --git a/android/assets/Flags.png b/android/assets/Flags.png index 15ba4e2e9a93f01d39abfb02ff61eb32e4c345e2..31b7f6e2014bbfa421280e1348b8146c00c0b6ef 100644 GIT binary patch literal 175859 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≦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 P0nAOU&X%6O`pf?SgwPch literal 165098 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%0D~PhIN;ES7vsE7ls$SNNz0dTog@B6CjwL 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
    )A>WVWt?FFYwPEFl8JyY+=2Or=NKT`luyw( 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 E0hC9x7ytkO diff --git a/android/assets/jsons/Tutorials.json b/android/assets/jsons/Tutorials.json index 242f9701f7..19de940b30 100644 --- a/android/assets/jsons/Tutorials.json +++ b/android/assets/jsons/Tutorials.json @@ -165,7 +165,7 @@ { "name": "Contact Me", "steps": [ - "Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense.", + "Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense.", "What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best!", "Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store)" ] diff --git a/android/assets/jsons/translations/Brazilian_Portuguese.properties b/android/assets/jsons/translations/Brazilian_Portuguese.properties index 86a4f3f488..8dbda1a0af 100644 --- a/android/assets/jsons/translations/Brazilian_Portuguese.properties +++ b/android/assets/jsons/translations/Brazilian_Portuguese.properties @@ -19,7 +19,7 @@ Fastlane_short_description = Jogo 4X de construção de civilizações # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = Uma reimplementação do jogo de construção civil mais famoso de sempre - rápido, pequeno, sem anúncios, grátis para sempre!\n\nConstrua a sua civilização, pesquise tecnologias, expanda as suas cidades e derrote os seus inimigos!\n\nPedidos? Bugs? A lista de TODO para a aplicação está em https://github.com/yairm210/UnCiv/issues, toda ajuda é bem-vinda!\n\nPerguntas? Comentários? Apenas querendo conversar? Junte-se a nós em https://discord.gg/bjrB4Xw.\n\nQuer ajudar a traduzir o jogo para a sua língua? Envie-me um e-mail para yairm210@hotmail.com.\n\nGrok Java ou Kotlin? Junte-se a nós em https://github.com/yairm210/UnCiv.\n\nO mundo está à espera! Vai transformar a sua civilização num império que resistirá ao tempo?\n\nA permissão de 'ter acesso total à rede' é necessária para downloads iniciados pelo usuário e a funcionalidade multiplayer. Todas as outras permissões listadas são incluídas automaticamente pela API utilizada para implementar as notificações de turno no multiplayer. As permissões de rede são utilizadas para listar mods, descarregar mods, descarregar música e carregar/transferir jogos no multiplayer. Nenhuma outra comunicação com a Internet é iniciada pelo Unciv. +Fastlane_full_description = Uma reimplementação do jogo de construção civil mais famoso de sempre - rápido, pequeno, sem anúncios, grátis para sempre!\n\nConstrua a sua civilização, pesquise tecnologias, expanda as suas cidades e derrote os seus inimigos!\n\nPedidos? Bugs? A lista de TODO para a aplicação está em https://github.com/yairm210/Unciv/issues, toda ajuda é bem-vinda!\n\nPerguntas? Comentários? Apenas querendo conversar? Junte-se a nós em https://discord.gg/bjrB4Xw.\n\nQuer ajudar a traduzir o jogo para a sua língua? Envie-me um e-mail para yairm210@hotmail.com.\n\nGrok Java ou Kotlin? Junte-se a nós em https://github.com/yairm210/Unciv.\n\nO mundo está à espera! Vai transformar a sua civilização num império que resistirá ao tempo?\n\nA permissão de 'ter acesso total à rede' é necessária para downloads iniciados pelo usuário e a funcionalidade multiplayer. Todas as outras permissões listadas são incluídas automaticamente pela API utilizada para implementar as notificações de turno no multiplayer. As permissões de rede são utilizadas para listar mods, descarregar mods, descarregar música e carregar/transferir jogos no multiplayer. Nenhuma outra comunicação com a Internet é iniciada pelo Unciv. # Starting from here normal translations start, as described in @@ -8076,7 +8076,7 @@ Idle Units = Unidades Inativas If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Contact Me = Contate-me -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Olá! Se você jogou até agora, provavelmente já viu que o jogo está incompleto.\n O UnCiv é destinado a ser de código aberto e gratuito para sempre.\n Isso significa que não há anúncios ou outras bobagens. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Olá! Se você jogou até agora, provavelmente já viu que o jogo está incompleto.\n O Unciv é destinado a ser de código aberto e gratuito para sempre.\n Isso significa que não há anúncios ou outras bobagens. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = O que me motiva a continuar trabalhando nisso, \n além do fato de que eu acho fantastico que eu posso, é o apoio dos jogadores - vocês são demais! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Todas as classificações e avaliações que recebo me fazem sorrir =)\n Então me contate! Me mande um email, avaliação, problema do Github\n ou pombo correio, e vamos descobrir como fazer o jogo \n ainda mais incrível!\n(Informação de contato está na Play Store) diff --git a/android/assets/jsons/translations/Bulgarian.properties b/android/assets/jsons/translations/Bulgarian.properties index 6a458d414d..43f4786b07 100644 --- a/android/assets/jsons/translations/Bulgarian.properties +++ b/android/assets/jsons/translations/Bulgarian.properties @@ -9967,7 +9967,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un Contact Me = Връзка С Мен # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/Catalan.properties b/android/assets/jsons/translations/Catalan.properties index fc0c2eab5c..9c2262f731 100644 --- a/android/assets/jsons/translations/Catalan.properties +++ b/android/assets/jsons/translations/Catalan.properties @@ -19,7 +19,7 @@ Fastlane_short_description = Joc de creació de civilitzacions 4X # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = Una reimplementació del joc de construcció de civilitzacions més famós - ràpid, petit, sense anuncis i gratuït!\n\nConstruïu la vostra civilització, investigueu tecnologies, expandiu les ciutats i derroteu els enemics!\n\nSi teniu suggeriments o trobeu algun error, ho podeu comunicar a la llista de problemes de l’aplicació de GitHub. Qualsevol ajuda, per petita que sigui, serà benvinguda!\n\nUniu-vos al canal del Discord si teniu preguntes, comentaris o esteu avorrits.\n\nSi voleu ajudar en la traducció del joc, seguiu les instruccions a l’article d’instruccions de traducció de l’Unciv.\n\nSabeu programar amb Grok Java o Kotlin? Podeu col·laborar amb el desenvolupament del joc a la pàgina de GitHub.\n\nEl món espera! Podreu conduir la vostra civilització i convertir-la en un imperi que sobrevisqui al pas del temps?\n\nL’opció de «permetre accés complet a la xarxa» es necessita per:\n\n- participar en partides multijugador,\n- descarregar i mostrar llistes de contingut addicional (música i mods) i\n- enviar l’edat dels jugadors en mode multijugador.\n\nTots els altres permisos els inclou automàticament l’API per permetre notificacions de torn en partides multijugador. L’Unciv no utilitza la xarxa per cap altre tipus de comunicació. +Fastlane_full_description = Una reimplementació del joc de construcció de civilitzacions més famós - ràpid, petit, sense anuncis i gratuït!\n\nConstruïu la vostra civilització, investigueu tecnologies, expandiu les ciutats i derroteu els enemics!\n\nSi teniu suggeriments o trobeu algun error, ho podeu comunicar a la llista de problemes de l’aplicació de GitHub. Qualsevol ajuda, per petita que sigui, serà benvinguda!\n\nUniu-vos al canal del Discord si teniu preguntes, comentaris o esteu avorrits.\n\nSi voleu ajudar en la traducció del joc, seguiu les instruccions a l’article d’instruccions de traducció de l’Unciv.\n\nSabeu programar amb Grok Java o Kotlin? Podeu col·laborar amb el desenvolupament del joc a la pàgina de GitHub.\n\nEl món espera! Podreu conduir la vostra civilització i convertir-la en un imperi que sobrevisqui al pas del temps?\n\nL’opció de «permetre accés complet a la xarxa» es necessita per:\n\n- participar en partides multijugador,\n- descarregar i mostrar llistes de contingut addicional (música i mods) i\n- enviar l’edat dels jugadors en mode multijugador.\n\nTots els altres permisos els inclou automàticament l’API per permetre notificacions de torn en partides multijugador. L’Unciv no utilitza la xarxa per cap altre tipus de comunicació. # Starting from here normal translations start, as described in @@ -51,14 +51,14 @@ See your stats breakdown!\nEnter the Overview screen (top right corner) >\nClick # Crash screen -An unrecoverable error has occurred in Unciv: = S’ha produït un error greu irrecuperable de l’UnCiv: +An unrecoverable error has occurred in Unciv: = S’ha produït un error greu irrecuperable de l’Unciv: If this keeps happening, you can try disabling mods. = Si continua passant, proveu desactivant els mods. You can also report this on the issue tracker. = També podeu informar del problema a la llista de problemes. Copy = Copia Error report copied. = S’ha copiat l’informe d’error. Open Issue Tracker = Obre la llista de problemes Please copy the error report first. = Si us plau, copieu abans l’informe d’error. -Close Unciv = Tanca l’UnCiv +Close Unciv = Tanca l’Unciv # Buildings @@ -632,7 +632,7 @@ Copy saved game to clipboard = Copia la partida desada al porta-retalls Could not load game! = La partida no s’ha pogut carregar. Could not load game from clipboard! = No s’ha pogut carregar la partida del porta-retalls. Could not load game from custom location! = No s’ha pogut carregar des de la ubicació personalitzada. -The save was created with an incompatible version of Unciv: [version]. Please update Unciv to this version or later and try again. = La desada es va crear amb la versió [version] de l’UnCiv. Actualitzeu el programa a la versió corresponent o posterior i proveu-ho de nou. +The save was created with an incompatible version of Unciv: [version]. Please update Unciv to this version or later and try again. = La desada es va crear amb la versió [version] de l’Unciv. Actualitzeu el programa a la versió corresponent o posterior i proveu-ho de nou. Load [saveFileName] = Carrega «[saveFileName]» Are you sure you want to delete this save? = Esteu segur que voleu esborrar aquesta partida desada? Delete save = Esborra la partida desada @@ -5858,7 +5858,7 @@ Landship = Tanc Mark I #################### Lines from Tutorials #################### Introduction = Introducció -Welcome to Unciv!\nBecause this is a complex game, there are basic tasks to help familiarize you with the game.\nThese are completely optional, and you're welcome to explore the game on your own! = Us donem la benvinguda a l’UnCiv!\nCom és un joc complex, hi ha unes tasques bàsiques perquè us hi familiaritzeu.\nSón completament opcionals i, si voleu, podeu explorar el joc pel vostre compte. +Welcome to Unciv!\nBecause this is a complex game, there are basic tasks to help familiarize you with the game.\nThese are completely optional, and you're welcome to explore the game on your own! = Us donem la benvinguda a l’Unciv!\nCom és un joc complex, hi ha unes tasques bàsiques perquè us hi familiaritzeu.\nSón completament opcionals i, si voleu, podeu explorar el joc pel vostre compte. New Game = Inici de la partida Your first mission is to found your capital city.\nThis is actually an important task because your capital city will probably be your most prosperous.\nMany game bonuses apply only to your capital city and it will probably be the center of your empire. = La vostra primera missió és fundar la vostra ciutat capital.\nÉs una tasca important, ja que la capital serà probablement la ciutat més pròspera.\nMoles bonificacions només s’aplicaran a la capital i possiblment sigui el centre del vostre imperi. @@ -5880,7 +5880,7 @@ Although your city will keep expanding forever, your citizens can only work 3 ti As cities grow in size and influence, you have to deal with a happiness mechanic that is no longer tied to each individual city.\nInstead, your entire empire shares the same level of satisfaction.\nAs your cities grow in population you’ll find that it is more and more difficult to keep your empire happy. = Quan les ciutats creixin en mida i influència, haureu d’ocupar-vos de la mecànica de felicitat que ja no està lligada només a una sola ciutat.\nEl vostre imperi comparteix el mateix nivell de satisfacció.\nA mesura que les ciutats creixin en població, veureu que és més i més difícil mantenir l’imperi feliç. In addition, you can’t even build any city improvements that increase happiness until you’ve done the appropriate research.\nIf your empire’s happiness ever goes below zero the growth rate of your cities will be hurt.\nIf your empire becomes severely unhappy (as indicated by the smiley-face icon at the top of the interface)\n your armies will have a big penalty slapped on to their overall combat effectiveness. = A més a més, no podreu construir millores que augmentin la felicitat fins que hagueu fet la recerca adequada.\nSi la felicitat del vostre imperi baixa per sota de zero, la ràtio de creixement de les ciutats se’n resentirà.\nI si el nivell d’infelicitat és sever (tal com indica la icona de cara somrient de la part de dalt de la interfície)\n els vostres exèrcits sofriran una gran penalització en la seva efectivitat de combat. -This means that it is very difficult to expand quickly in Unciv.\nIt isn’t impossible, but as a new player you probably shouldn't do it.\nSo what should you do? Chill out, scout, and improve the land that you do have by building Workers.\nOnly build new cities once you have found a spot that you believe is appropriate. = Això significa que a l’UnCiv és molt difícil expandir-se de pressa.\nEncara que no és impossible, com a jugador novell no ho hauríeu de fer.\nAixí que, què hauríeu de fer? Relaxar-vos, explorar i millorar el territori que teniu construint treballadors.\nContruïu noves ciutats una vegada hagueu localitzat un lloc que cregueu apropiat. +This means that it is very difficult to expand quickly in Unciv.\nIt isn’t impossible, but as a new player you probably shouldn't do it.\nSo what should you do? Chill out, scout, and improve the land that you do have by building Workers.\nOnly build new cities once you have found a spot that you believe is appropriate. = Això significa que a l’Unciv és molt difícil expandir-se de pressa.\nEncara que no és impossible, com a jugador novell no ho hauríeu de fer.\nAixí que, què hauríeu de fer? Relaxar-vos, explorar i millorar el territori que teniu construint treballadors.\nContruïu noves ciutats una vegada hagueu localitzat un lloc que cregueu apropiat. Unhappiness = Infelicitat It seems that your citizens are unhappy!\nWhile unhappy, your civilization will suffer many detrimental effects, increasing in severity as unhappiness gets higher. = Sembla que els vostres ciutadans estan infeliços.\nLa civilització sofrirà molts efectes perjudicials mentre estiguin infeliços, de manera més severa si la infelicitat també augmenta. @@ -5894,8 +5894,8 @@ Connecting your cities to the capital by roads\n will generate gold via the tra Victory Types = Tipus de victòria Once you’ve settled your first two or three cities you’re probably 100 to 150 turns into the game.\nNow is a good time to start thinking about how, exactly, you want to win – if you haven’t already. = Una vegada hagueu establert dues o tres ciutats, segurament haureu jugat de 100 a 150 torns.\nAra és un bon moment per començar a pensar com voleu guanyar, si no ho heu fet ja. -There are four ways to win in Unciv. They are:\n - Cultural Victory: Complete 5 Social Policy Trees and build the Utopia Project\n - Domination Victory: Survive as the last civilization\n - Science Victory: Be the first to construct a spaceship to Alpha Centauri\n - Diplomatic Victory: Build the United Nations and win the vote = Hi ha quatre maneres de guanyar a l’UnCiv:\n - Victòria cultural: completeu 5 arbres de polítiques socials i construïu el Projecte Utopia.\n - Victòria per dominació: aconseguiu ser l’única civilització existent.\n - Victòria científica: sigueu el primer que construeixi una nau espacial per anar a Alpha Centauri.\n - Victòria diplomàtica: construïu les Nacions Unides i guanyeu el vot. -So to sum it up, these are the basics of Unciv – Found a prosperous first city, expand slowly to manage happiness, and set yourself up for the victory condition you wish to pursue.\nObviously, there is much more to it than that, but it is important not to jump into the deep end before you know how to swim. = En resum, aquestes són les bases de l’UnCiv: fundeu una primera ciutat pròspera, expandiu-vos poc a poc per gestionar la felicitats i escolliu quina condició de victòria voleu aconseguir.\nÉs clar que hi ha molt més, però és important no voler avançar massa ràpid si no coneixeu a fons els conceptes bàsics. +There are four ways to win in Unciv. They are:\n - Cultural Victory: Complete 5 Social Policy Trees and build the Utopia Project\n - Domination Victory: Survive as the last civilization\n - Science Victory: Be the first to construct a spaceship to Alpha Centauri\n - Diplomatic Victory: Build the United Nations and win the vote = Hi ha quatre maneres de guanyar a l’Unciv:\n - Victòria cultural: completeu 5 arbres de polítiques socials i construïu el Projecte Utopia.\n - Victòria per dominació: aconseguiu ser l’única civilització existent.\n - Victòria científica: sigueu el primer que construeixi una nau espacial per anar a Alpha Centauri.\n - Victòria diplomàtica: construïu les Nacions Unides i guanyeu el vot. +So to sum it up, these are the basics of Unciv – Found a prosperous first city, expand slowly to manage happiness, and set yourself up for the victory condition you wish to pursue.\nObviously, there is much more to it than that, but it is important not to jump into the deep end before you know how to swim. = En resum, aquestes són les bases de l’Unciv: fundeu una primera ciutat pròspera, expandiu-vos poc a poc per gestionar la felicitats i escolliu quina condició de victòria voleu aconseguir.\nÉs clar que hi ha molt més, però és important no voler avançar massa ràpid si no coneixeu a fons els conceptes bàsics. Enemy City = Ciutat enemiga Cities can be conquered by reducing their health to 1, and entering the city with a melee unit.\nSince cities heal each turn, it is best to attack with ranged units and use your melee units to defend them until the city has been defeated! = Les ciutats es poden conquerir reduint la seva vida a 1 i llavors entrant amb una unitat d’atac cos a cos.\nCom les ciutats es curen cada torn, és millor atacar-les primer amb unitats d’atac a distància i usar les unitats d’atac cos a cos per defensar-les fins que la ciutat sigui vençuda! @@ -5936,7 +5936,7 @@ Idle Units = Unitats aturades If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Si no voleu moure una unitat aquest torn, feu clic al botó «Unitat següent».\nSi no voleu moure-la durant diversos torns, podeu posar la unitat en mode «Fortifica» o «Dorm».\nLes unitats en fortificació o adormides es poden seleccionar de nou al final del cicle de «Següent unitat», una vegada totes les altres unitats han rebut les seves ordres.\nSi no voleu que se us passi per alt alguna unitat fortificada o adormida al final de l torn, podeu activar «Comprova les unitats aturades» del menú d'opcions. Contact Me = Contacteu amb mi -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Hola! Si heu arribat fins aquí, segurament haureu vist que el joc està incomplet.\nUnCiv està pensat com a joc de codi obert i lliure per sempre.\nAixò significa que no hi haurà anuncis ni altres poca-soltades. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Hola! Si heu arribat fins aquí, segurament haureu vist que el joc està incomplet.\nUnciv està pensat com a joc de codi obert i lliure per sempre.\nAixò significa que no hi haurà anuncis ni altres poca-soltades. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = El que em motiva a continuar treballant-hi,\n a banda del fet que crec que és genial que pugui fer-ho,\n és el suport dels jugadors - sou els millors! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Cada valoració i ressenya que feu, es rep amb il·lusió.\nAixí que contacteu amb mi! Envieu-me un correu, ressenya, problema a GitHub o un colom missatger i mirarem de fer el joc encara més increïble. @@ -5978,7 +5978,7 @@ F1 - Open Civilopedia\nF2 - Empire overview Trades\nF3 - Empire overview Units\n Ctrl-R - Toggle tile resource display\nCtrl-Y - Toggle tile yield display\nCtrl-O - Game options\nCtrl-S - Save game\nCtrl-L - Load game = Ctrl-R - Mostra/Amaga els recursos de les caselles\nCtrl-Y - Mostra/amaga la producció de recursos\nCtrl-O - Opcions del joc\nCtrl-S - Desa la partida\nCtrl-L - Carrega una partida World Screen = Vista del món -This is where you spend most of your time playing Unciv. See the world, control your units, access other screens from here. = Aquí és on es passa la major part del temps quan es juga a l’UnCiv. Es veu el món, es controlen les unitats i des d’aquí es pot accedir a altres vistes. +This is where you spend most of your time playing Unciv. See the world, control your units, access other screens from here. = Aquí és on es passa la major part del temps quan es juga a l’Unciv. Es veu el món, es controlen les unitats i des d’aquí es pot accedir a altres vistes. ①: The menu button - civilopedia, save, load, options... = ① Botó del menú: civilopèdia, desar i carregar partides, opcions... ②: The player/nation whose turn it is - click for diplomacy overview. = ② Jugador/nació que està jugant el seu torn: feu clic per accedir a la vista de diplomàcia. ③: The Technology Button - shows the tech tree which allows viewing or researching technologies. = ③ Botó de tecnologies: mostra l’arbre de tecnologies que permet recercar tecnologies. @@ -6008,10 +6008,10 @@ This is where you spend most of your time playing Unciv. See the world, control ⓕ: Number of turns played with translation into calendar years. Click to see the victory overview. = ⓕ Nombre de torns jugats amb l’equivalència en anys gregorians o d’altres calendaris. Si s’hi fa clic, es mostra la vista de victòria. ⓖ: The number of gold coins in your treasury and income. Clicks lead to the Stats overview screen. = ⓖ El nombre de monedes d’or al vostre tresor i els ingressos. Si s’hi fa clic, es mostra la vista d’estadístiques. ⓗ: The quantity of ☮Faith your citizens have generated, or 'off' if religion is disabled. Clicking it makes you go to the religion overview screen. = ⓗ: La quantitat de ☮Fe que han generat els vostres ciutadans o «Desactivada», si la religió s’ha desactivat. Fent-hi clic us mostrarà la vista general de religió. -ⓧ: In the center of all this - the world map! Here, the "X" marks a spot outside the map. Yes, unless the wrap option was used, Unciv worlds are flat. Don't worry, your ships won't fall off the edge. = ⓧ Al centre de tot, la vista del món! Aquí, la «X» marca un lloc fora del mapa. Sí, els mons de l’UnCiv són plans, a no ser que hagueu activat el mapa envoltant. No us preocupeu, els vostres vaixells no cauran a la fi del món. +ⓧ: In the center of all this - the world map! Here, the "X" marks a spot outside the map. Yes, unless the wrap option was used, Unciv worlds are flat. Don't worry, your ships won't fall off the edge. = ⓧ Al centre de tot, la vista del món! Aquí, la «X» marca un lloc fora del mapa. Sí, els mons de l’Unciv són plans, a no ser que hagueu activat el mapa envoltant. No us preocupeu, els vostres vaixells no cauran a la fi del món. ⓨ: By the way, here's how an empire border looks like - it's in the national colours of the nation owning the territory. = ⓨ Per cert, això és una frontera de l’imperi, que mostra els colors de la nació a la que pertany la frontera. ⓩ: And this is the red targeting circle that led to the attack pane back under ⑬. = ⓩ I aquest és el cercle vermell d’objectiu de l’atac que porta al panell d’atac (el ⑬). -What you don't see: The phone/tablet's back button will pop the question whether you wish to leave Unciv and go back to Real Life. On desktop versions, you can use the ESC key. = El que no es veu: amb el botó de retrocés de la tauleta/telèfon se us preguntarà si voleu sortir de l’UnCiv i tornar a la vida real. En versions d’escriptori, podreu usar la tecla «Esc». +What you don't see: The phone/tablet's back button will pop the question whether you wish to leave Unciv and go back to Real Life. On desktop versions, you can use the ESC key. = El que no es veu: amb el botó de retrocés de la tauleta/telèfon se us preguntarà si voleu sortir de l’Unciv i tornar a la vida real. En versions d’escriptori, podreu usar la tecla «Esc». After building a shrine, your civilization will start generating ☮Faith. = Després de construir un santuari, la civilització comença a generar ☮fe. When enough ☮Faith has been generated, you will be able to found a pantheon. = Quan s’ha generat suficient ☮fe, es pot fundar un panteó. @@ -6068,7 +6068,7 @@ Additionally, when an inquisitor is stationed in or directly next to a city cent The Mayan unique ability, 'The Long Count', comes with a side effect: = L’habilitat exlusiva dels maies, «el compte llarg», té un efecte secundari: Once active, the game's year display will use mayan notation. = Una vegada s’hagi activat, l’any que es mostri durant la partida usarà la notació maia. The Maya measured time in days from what we would call 11th of August, 3114 BCE. A day is called K'in, 20 days are a Winal, 18 Winals are a Tun, 20 Tuns are a K'atun, 20 K'atuns are a B'ak'tun, 20 B'ak'tuns a Piktun, and so on. = Els maia mesuren el temps en dies a partir de l’11 d’agost del 3.114 a.e.c. Un dia s’anomena K'in, 20 dies són un Winal, 18 Winals un Tun, 20 Tuns són un K'atun, 20 K'atuns són un B'ak'tun, 20 B'ak'tuns són un Piktun. -Unciv only displays ය B'ak'tuns, ඹ K'atuns and ම Tuns (from left to right) since that is enough to approximate gregorian calendar years. The Maya numerals are pretty obvious to understand. Have fun deciphering them! = L’UnCiv només mostra ය B'ak'tuns, ඹ K'atuns and ම Tuns (d’esquerra a dreta), ja que amb aquests ja n’hi ha prou per aproximar els anys del calendari gregorià. Els nombres maia són bastant fàcils d’entendre. Us deixem que els desxifreu! +Unciv only displays ය B'ak'tuns, ඹ K'atuns and ම Tuns (from left to right) since that is enough to approximate gregorian calendar years. The Maya numerals are pretty obvious to understand. Have fun deciphering them! = L’Unciv només mostra ය B'ak'tuns, ඹ K'atuns and ම Tuns (d’esquerra a dreta), ja que amb aquests ja n’hi ha prou per aproximar els anys del calendari gregorià. Els nombres maia són bastant fàcils d’entendre. Us deixem que els desxifreu! Your cities will periodically demand different luxury goods to satisfy their desire for new things in life. = Les ciutats demanaran periòdicament diferents béns de luxe per satisfer el seu desig de prosperar. If you manage to acquire the demanded luxury by trade, expansion, or conquest, the city will celebrate We Love The King Day for 20 turns. = Si aconseguiu adquirir el bé demanat per comerç, expansió o conquesta, la ciutat ho celebrarà amb un dia del rei durant 20 torns. diff --git a/android/assets/jsons/translations/Czech.properties b/android/assets/jsons/translations/Czech.properties index 30b911dbf3..8c928534a9 100644 --- a/android/assets/jsons/translations/Czech.properties +++ b/android/assets/jsons/translations/Czech.properties @@ -6568,7 +6568,7 @@ Although your city will keep expanding forever, your citizens can only work 3 ti As cities grow in size and influence, you have to deal with a happiness mechanic that is no longer tied to each individual city.\nInstead, your entire empire shares the same level of satisfaction.\nAs your cities grow in population you’ll find that it is more and more difficult to keep your empire happy. = Jak města rostou a vzkvétají, budeme se muset vypořádat s mechanismem Spokojenosti,\n který již není nadále vypočítáván individuálně pro každé město.\nMísto toho sdílí celá říše společnou úroveň spokojenosti\nS přibývajícím počtem obyvatel zjistíme, že je stále obtížnější udržet populaci naší říše spokojenou. In addition, you can’t even build any city improvements that increase happiness until you’ve done the appropriate research.\nIf your empire’s happiness ever goes below zero the growth rate of your cities will be hurt.\nIf your empire becomes severely unhappy (as indicated by the smiley-face icon at the top of the interface)\n your armies will have a big penalty slapped on to their overall combat effectiveness. = Aby toho nebylo málo, tak budovy zlepšující spokojenost obyvatel nelze stavět bez dokončení příslušného výzkumu.\nV případě že spokojenost v naší říši klesne pod nulu, tak se ve všech městech významně zpomalí přírůstek nových obyvatel.\nPokud bude naše říše velmi nespokojená (jak ukazuje ikona smajlíku v horní liště)\n celá naše armáda (bojové jednotky) obdrží významnou penalizaci a dojde k výraznému oslabení v boji. -This means that it is very difficult to expand quickly in Unciv.\nIt isn’t impossible, but as a new player you probably shouldn't do it.\nSo what should you do? Chill out, scout, and improve the land that you do have by building Workers.\nOnly build new cities once you have found a spot that you believe is appropriate. = To znamená, že ve hře UnCiv je poměrně obtížné rychle expandovat.\nNikdo netvrdí, že je to nemožné, ale novým hráčům se nedoporučuje to dělat.\nTakže co bychom měli dělat? Uklidnit se, vyslat průzkumníky a vylepšovat námi ovládané území pomocí Dělníků.\nNové města budujme až poté, co pro ně najdeme vhodné místo. +This means that it is very difficult to expand quickly in Unciv.\nIt isn’t impossible, but as a new player you probably shouldn't do it.\nSo what should you do? Chill out, scout, and improve the land that you do have by building Workers.\nOnly build new cities once you have found a spot that you believe is appropriate. = To znamená, že ve hře Unciv je poměrně obtížné rychle expandovat.\nNikdo netvrdí, že je to nemožné, ale novým hráčům se nedoporučuje to dělat.\nTakže co bychom měli dělat? Uklidnit se, vyslat průzkumníky a vylepšovat námi ovládané území pomocí Dělníků.\nNové města budujme až poté, co pro ně najdeme vhodné místo. Unhappiness = Nespokojenost It seems that your citizens are unhappy!\nWhile unhappy, your civilization will suffer many detrimental effects, increasing in severity as unhappiness gets higher. = Vypadá to, že vaši obyvatelé jsou nespokojení!\nPři nespokojenosti budou na vaši civilizaci působit škodlivé efekty, jejichž síla bude větší s vyšší nespokojeností. @@ -6582,8 +6582,8 @@ Connecting your cities to the capital by roads\n will generate gold via the tra Victory Types = Druhy vítězství Once you’ve settled your first two or three cities you’re probably 100 to 150 turns into the game.\nNow is a good time to start thinking about how, exactly, you want to win – if you haven’t already. = Poté, co se podaří založit první dvě nebo tři města, uplyne obvykle kolem 100 až 150 tahů ve hře.\nNastává vhodná chvíle popřemýšlet o tom, jakým způsobem vést říši k vítězství. -There are four ways to win in Unciv. They are:\n - Cultural Victory: Complete 5 Social Policy Trees and build the Utopia Project\n - Domination Victory: Survive as the last civilization\n - Science Victory: Be the first to construct a spaceship to Alpha Centauri\n - Diplomatic Victory: Build the United Nations and win the vote = Ve hře UnCiv existují celkem čtyři způsoby jak zvítězit. Jsou to:\n - Kulturní vítězství: Dokončit 5 větví Sociální politiky a vybudovat Projekt Utopie\n - Vítězství nadvládou: Být poslední civilizací, která přežije\n - Vědecké vítězství: Být prvním, kdo postaví kosmickou loď pro cestu na Alfu Kentaura\n - Diplomatické vítězství: Vybudovat Spojené Národy a zvítězit ve volbách -So to sum it up, these are the basics of Unciv – Found a prosperous first city, expand slowly to manage happiness, and set yourself up for the victory condition you wish to pursue.\nObviously, there is much more to it than that, but it is important not to jump into the deep end before you know how to swim. = Toto jsou shrnuté základy hry UnCiv - založit prosperující první město, pomalu se rozšiřovat po mapě se spokojeností pod kontrolou a soustředit se na jednu z cest k vítězství.\nSamozřejmě je toho mnohem více, ale je potřeba postupovat pomalu, s rozvahou a krok po kroku pochopit herní principy. +There are four ways to win in Unciv. They are:\n - Cultural Victory: Complete 5 Social Policy Trees and build the Utopia Project\n - Domination Victory: Survive as the last civilization\n - Science Victory: Be the first to construct a spaceship to Alpha Centauri\n - Diplomatic Victory: Build the United Nations and win the vote = Ve hře Unciv existují celkem čtyři způsoby jak zvítězit. Jsou to:\n - Kulturní vítězství: Dokončit 5 větví Sociální politiky a vybudovat Projekt Utopie\n - Vítězství nadvládou: Být poslední civilizací, která přežije\n - Vědecké vítězství: Být prvním, kdo postaví kosmickou loď pro cestu na Alfu Kentaura\n - Diplomatické vítězství: Vybudovat Spojené Národy a zvítězit ve volbách +So to sum it up, these are the basics of Unciv – Found a prosperous first city, expand slowly to manage happiness, and set yourself up for the victory condition you wish to pursue.\nObviously, there is much more to it than that, but it is important not to jump into the deep end before you know how to swim. = Toto jsou shrnuté základy hry Unciv - založit prosperující první město, pomalu se rozšiřovat po mapě se spokojeností pod kontrolou a soustředit se na jednu z cest k vítězství.\nSamozřejmě je toho mnohem více, ale je potřeba postupovat pomalu, s rozvahou a krok po kroku pochopit herní principy. Enemy City = Nepřátelská města Cities can be conquered by reducing their health to 1, and entering the city with a melee unit.\nSince cities heal each turn, it is best to attack with ranged units and use your melee units to defend them until the city has been defeated! = Města lze dobýt tak, že snížíte jejich zdraví na 1,\n a poté do něj vstoupíme s jednotkou určenou na boj zblízka.\nMěsto se samo opravuje v každém tahu, proto je nejpoužívanější metodou dobývání užití jednotek pro boj na dálku,\n přičemž jednotky pro boj zblízka používáme k jejich ochraně a poté na finální útok na město! @@ -6627,7 +6627,7 @@ Idle Units = Nečinné jednotky If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Contact Me = Kontakt -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Zdravíčko, pokud jste se dostali až sem, pravděpodobně vidíte, že hra ještě stále není zcela dokončená.\nUnCiv je vyvíjena jako hra s otevřeným zdrojovýcm kódem (open-source) a zdarma. Navždy.\nTo znamená žádné reklamy, žádné mikrotransakce ani jiné dosud neobjevené nesmysly :-) +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Zdravíčko, pokud jste se dostali až sem, pravděpodobně vidíte, že hra ještě stále není zcela dokončená.\nUnciv je vyvíjena jako hra s otevřeným zdrojovýcm kódem (open-source) a zdarma. Navždy.\nTo znamená žádné reklamy, žádné mikrotransakce ani jiné dosud neobjevené nesmysly :-) What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = To, co mě motivuje k další práci na hře, kromě faktu že jsem naprosto skvělý a úžasný, je podpora ze strany hráčů - jste prostě nějleší! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Každé hodnocení, komentář či recenze mi vykouzlí úsměv na tváři =)\nNeváhejte mě kontaktovat! Pošlete mi email, napište recenzi, nahlašte problém na Githubu nebo pošlete třeba poštovního holuba a dejte mi vědět, jak hru udělat ještě více úžasnou!\n(Kontaktní údaje naleznete na Play Storu) diff --git a/android/assets/jsons/translations/Dutch.properties b/android/assets/jsons/translations/Dutch.properties index 0d0b78bf17..1a5205111e 100644 --- a/android/assets/jsons/translations/Dutch.properties +++ b/android/assets/jsons/translations/Dutch.properties @@ -8013,7 +8013,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un # Requires translation! Contact Me = # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/English.properties b/android/assets/jsons/translations/English.properties index f47323ca19..4ebfa3cb3b 100644 --- a/android/assets/jsons/translations/English.properties +++ b/android/assets/jsons/translations/English.properties @@ -10712,7 +10712,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un # Requires translation! Contact Me = # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/Filipino.properties b/android/assets/jsons/translations/Filipino.properties index e933cfb420..c22380cd80 100644 --- a/android/assets/jsons/translations/Filipino.properties +++ b/android/assets/jsons/translations/Filipino.properties @@ -7104,7 +7104,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un # Requires translation! Contact Me = # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/Finnish.properties b/android/assets/jsons/translations/Finnish.properties index 08d789539a..e358cbc270 100644 --- a/android/assets/jsons/translations/Finnish.properties +++ b/android/assets/jsons/translations/Finnish.properties @@ -8778,7 +8778,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un # Requires translation! Contact Me = # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/French.properties b/android/assets/jsons/translations/French.properties index b19dd71fdb..e5a4db95f9 100644 --- a/android/assets/jsons/translations/French.properties +++ b/android/assets/jsons/translations/French.properties @@ -19,7 +19,7 @@ Fastlane_short_description = Jeu 4X - Bâtir une civilisation # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = Une réinterprétation open-source du plus célèbre jeu de gestion de civilisation - rapide, léger, sans pubs, et gratuit à jamais!\n\nBâtissez votre empire, recherchez des technologies, étendez vos villes et éliminez vos adversaires!\n\nDes suggestions? Des bugs? La liste des sujets ouverts se trouve sur la page Github - Issues. Toute aide est la bienvenue!\n\nDes questions? Des commentaires? Ou juste du temps libre? Venez discuter avec nous sur le Discord d'Unciv.\n\nVous souhaitez aider à la traduction du jeu dans votre langue? Suivez les instructions de l'article wiki destiné aux traducteurs.\n\nLe codage Kotlin ou Java n'a aucun secret pour vous? N'hésitez pas à participer au développement sur la page Github.\n\nLe monde n'attend plus que vous! Bâtirez-vous une civilisation capable de résister au passage du temps?\n\nL'autorisation 'bénéficier d'un accès complet au réseau' est requise pour les fonctionnalités suivantes:\n- Lister et télécharger les mods disponibles\n- Télécharger la musique\n- Envoyer et télécharger l'état des parties en mode multijoueur en ligne\nToutes les autres autorisations répertoriées sont gérées automatiquement par l'API pour la fonction de notification des tours en mode multijoueur. +Fastlane_full_description = Une réinterprétation open-source du plus célèbre jeu de gestion de civilisation - rapide, léger, sans pubs, et gratuit à jamais!\n\nBâtissez votre empire, recherchez des technologies, étendez vos villes et éliminez vos adversaires!\n\nDes suggestions? Des bugs? La liste des sujets ouverts se trouve sur la page Github - Issues. Toute aide est la bienvenue!\n\nDes questions? Des commentaires? Ou juste du temps libre? Venez discuter avec nous sur le Discord d'Unciv.\n\nVous souhaitez aider à la traduction du jeu dans votre langue? Suivez les instructions de l'article wiki destiné aux traducteurs.\n\nLe codage Kotlin ou Java n'a aucun secret pour vous? N'hésitez pas à participer au développement sur la page Github.\n\nLe monde n'attend plus que vous! Bâtirez-vous une civilisation capable de résister au passage du temps?\n\nL'autorisation 'bénéficier d'un accès complet au réseau' est requise pour les fonctionnalités suivantes:\n- Lister et télécharger les mods disponibles\n- Télécharger la musique\n- Envoyer et télécharger l'état des parties en mode multijoueur en ligne\nToutes les autres autorisations répertoriées sont gérées automatiquement par l'API pour la fonction de notification des tours en mode multijoueur. # Starting from here normal translations start, as described in @@ -5932,7 +5932,7 @@ Idle Units = Unités inactives If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Si vous ne voulez pas déplacer une unité durant ce tour, passez son tour en cliquant de nouveau sur 'Unité suivante'.\nSi vous comptez ne pas la déplacer de sitôt, faites-la Dormir ou Se retrancher, et elle ne sera plus proposée en début de tour.\nSi vous n'avez pas encore décidé quelle action une unité doit effectuer pour le tour en cours, faites-la 'Attendre'. Une unité 'en attente' sera sélectionnée à nouveau à la fin du cycle 'Unité suivante', une fois que toutes les autres unités auront reçu leurs ordres.\nLe paramètre 'Unité suivante' est désactivable dans Options > Vérifier les unités inactives. Contact Me = Me contacter -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Salut ! Si vous avez joué jusqu'ici, vous avez probablement\nremarqué que ce jeu est encore incomplet.\nUnCiv est open-source et gratuit, pour toujours.\nCe qui veut dire qu'il ne contient ni pub ni aucun élément payant. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Salut ! Si vous avez joué jusqu'ici, vous avez probablement\nremarqué que ce jeu est encore incomplet.\nUnciv est open-source et gratuit, pour toujours.\nCe qui veut dire qu'il ne contient ni pub ni aucun élément payant. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = Ce qui me motive à travailler dessus,\nen plus du fait que ça soit vraiment cool,\nc'est le soutien des joueurs - vous êtes les meilleurs ! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Chaque note et commentaire que je reçois me rendent heureux =)\nDonc n'hésitez pas à me contacter ! Envoyez-moi un mail, un avis, ou une Github issue.\nOu encore un pigeon voyageur, et œuvrons à rendre ce jeu\nencore plus incroyable ! (écrivez-moi en anglais si possible)\n(info de contact sur le Play Store) diff --git a/android/assets/jsons/translations/German.properties b/android/assets/jsons/translations/German.properties index 05d5270631..7fbce90a01 100644 --- a/android/assets/jsons/translations/German.properties +++ b/android/assets/jsons/translations/German.properties @@ -19,7 +19,7 @@ Fastlane_short_description = 4X-Spiel: Zivilisationen aufbauen # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = Eine Neuimplementierung vom berühmtesten Zivilisations-Aufbau-Spiel aller Zeiten. Schnell, klein, ohne Spam und für immer frei!\n\nBaue Deine Zivilisation auf, erforsche Technologien, entwickle Deine Städte und besiege Deine Kontrahenten!\n\nWünsche? Bugs? Die Liste der offenen Themen findest du auf der GitHub Issues - Seite - jede noch so kleine Hilfe ist willkommen!\n\nFragen? Kommentare? Einfach nur gelangweilt? Chatte mit uns auf Discord.\n\nWillst Du bei der Übersetzung helfen? Schau im Wiki vorbei, dort ist detailliert beschrieben, wie Übersetzungen erstellt und vorgeschlagen werden.\n\nSchnallst Du Kotlin oder Java? Unterstütze gerne bei der Entwicklung im GitHub Repository.\n\nDie Welt erwartet Dich! Wirst Du deine Zivilisation zu einem Imperium entwickeln, das dem Zahn der Zeit standhält?\n\nDie App-Berechtigung 'Auf alle Netzwerke zugreifen' wird für die folgenden Funktionen benötigt:\n- Abfrage und Herunterladen der verfügbaren Mods\n- Herunterladen von Musik\n- Hoch- und Herunterladen der Speicherstände im Online Mehrspieler-Modus\nDurch die Implementierung der Zug-Benachrichtigung für den Mehrspieler-Modus werden alle anderen aufgeführten Berechtigungen vom API automatisch hinzugefügt. +Fastlane_full_description = Eine Neuimplementierung vom berühmtesten Zivilisations-Aufbau-Spiel aller Zeiten. Schnell, klein, ohne Spam und für immer frei!\n\nBaue Deine Zivilisation auf, erforsche Technologien, entwickle Deine Städte und besiege Deine Kontrahenten!\n\nWünsche? Bugs? Die Liste der offenen Themen findest du auf der GitHub Issues - Seite - jede noch so kleine Hilfe ist willkommen!\n\nFragen? Kommentare? Einfach nur gelangweilt? Chatte mit uns auf Discord.\n\nWillst Du bei der Übersetzung helfen? Schau im Wiki vorbei, dort ist detailliert beschrieben, wie Übersetzungen erstellt und vorgeschlagen werden.\n\nSchnallst Du Kotlin oder Java? Unterstütze gerne bei der Entwicklung im GitHub Repository.\n\nDie Welt erwartet Dich! Wirst Du deine Zivilisation zu einem Imperium entwickeln, das dem Zahn der Zeit standhält?\n\nDie App-Berechtigung 'Auf alle Netzwerke zugreifen' wird für die folgenden Funktionen benötigt:\n- Abfrage und Herunterladen der verfügbaren Mods\n- Herunterladen von Musik\n- Hoch- und Herunterladen der Speicherstände im Online Mehrspieler-Modus\nDurch die Implementierung der Zug-Benachrichtigung für den Mehrspieler-Modus werden alle anderen aufgeführten Berechtigungen vom API automatisch hinzugefügt. # Starting from here normal translations start, as described in @@ -5854,7 +5854,7 @@ Landship = Landkreuzer #################### Lines from Tutorials #################### Introduction = Einführung -Welcome to Unciv!\nBecause this is a complex game, there are basic tasks to help familiarize you with the game.\nThese are completely optional, and you're welcome to explore the game on your own! = Willkommen zu UnCiv!\n Weil es ein komplexes Spiel ist, gibt es Einführungsaufgaben, welche dich mit dem Spiel vertraut machen.\nDiese sind optional und du bist eingeladen das Spiel selbst zu erkunden! +Welcome to Unciv!\nBecause this is a complex game, there are basic tasks to help familiarize you with the game.\nThese are completely optional, and you're welcome to explore the game on your own! = Willkommen zu Unciv!\n Weil es ein komplexes Spiel ist, gibt es Einführungsaufgaben, welche dich mit dem Spiel vertraut machen.\nDiese sind optional und du bist eingeladen das Spiel selbst zu erkunden! New Game = Neues Spiel Your first mission is to found your capital city.\nThis is actually an important task because your capital city will probably be your most prosperous.\nMany game bonuses apply only to your capital city and it will probably be the center of your empire. = Deine erste Aufgabe ist die Hauptstadt zu gründen.\nDies ist eine wichtige Aufgabe, da deine Hauptstadt wahrscheinlich deine beste Stadt ist.\nViele Spielvorteile gelten nur in deiner Hauptstadt und es and ist wahrscheinlich das Zentrum deines Reichs. @@ -5932,7 +5932,7 @@ Idle Units = Inaktive Einheiten If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Wenn du eine Einheit in dieser Runde nicht bewegen möchtest, kannst du sie überspringen, indem du erneut auf 'Nächste Einheit' klickst.\nWenn du sie eine Weile nicht bewegst, kannst du die Einheit in den Festungs- oder Schlafmodus versetzen - \n Einheiten im Festungs- oder Schlafmodus gelten nicht als untätige Einheiten.\nWenn du noch nicht entschieden hast, was eine Einheit in der aktuellen Runde tun soll, wähle den Befehl 'Warten'. Eine 'wartende' Einheit wird am Ende des 'Nächste Einheit'-Durchlaufs wieder ausgewählt, wenn alle anderen Einheiten ihre Befehle erhalten haben.\nWenn du die Funktion 'Nächste Einheit' ganz deaktivieren möchtest, kannst du sie im Menü -> 'Untätige Einheiten anzeigen' umschalten. Contact Me = Kontaktier mich -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Hallo! Wenn du soweit gespielt hast, hast du wahrscheinlich gemerkt, dass das Spiel nicht fertig ist.\nUnCiv ist Open Source und kostenfrei, für immer.\nDas bedeutet, es enthält auch keine Werbung oder andere sinnlose Dinge. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Hallo! Wenn du soweit gespielt hast, hast du wahrscheinlich gemerkt, dass das Spiel nicht fertig ist.\nUnciv ist Open Source und kostenfrei, für immer.\nDas bedeutet, es enthält auch keine Werbung oder andere sinnlose Dinge. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = Was mich (den Entwickler, nicht den Übersetzer) motiviert daran weiterzuarbeiten, abgesehen von dem Fakt, dass es wirklich cool ist, ist die Unterstützung von den Spielern - Ihr seid die Besten! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Jede Bewertung oder Rezension, die das Spiel erhält, bringt mich zum Lächeln =)\n Also sprecht mich an! Schickt mir eine E-Mail, Rezension, ein GitHub-Issue oder eine Brieftaube und lasst uns herausfinden, wie wir dieses Spiel noch besser machen können!\n(Kontaktinformationen finden sich z. B. im Play Store) diff --git a/android/assets/jsons/translations/Greek.properties b/android/assets/jsons/translations/Greek.properties index 43cb208fc2..3601a625a7 100644 --- a/android/assets/jsons/translations/Greek.properties +++ b/android/assets/jsons/translations/Greek.properties @@ -10133,7 +10133,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un # Requires translation! Contact Me = # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/Hungarian.properties b/android/assets/jsons/translations/Hungarian.properties index 573b133ce6..720d93212b 100644 --- a/android/assets/jsons/translations/Hungarian.properties +++ b/android/assets/jsons/translations/Hungarian.properties @@ -8273,7 +8273,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un Contact Me = Kapcsolatfelvétel # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/Indonesian.properties b/android/assets/jsons/translations/Indonesian.properties index ab6e6806a5..fcf5570d56 100644 --- a/android/assets/jsons/translations/Indonesian.properties +++ b/android/assets/jsons/translations/Indonesian.properties @@ -19,7 +19,7 @@ Fastlane_short_description = Gim pembangunan peradaban 4X # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = Reimplementasi permainan pembangunan peradaban terpopuler - cepat, tidak memakan ruang, tanpa iklan, gratis selamanya!\n\nBangun peradabanmu, teliti teknologi-teknologi baru, perluas kota-kotamu dan kalahkan musuh-musuhmu!\n\nPermintaan? Eror? Daftar hal-hal yang akan dilakukan pada aplikasi ada di https://github.com/yairm210/UnCiv/issues, kami menerima bantuan-bantuanmu meskipun hanya sedikit!\n\nPertanyaan? Komentar? Hanya mengisi waktu luang? Bergabunglah dengan kami di https://discord.gg/bjrB4Xw.\n\nMau membantu menerjemahkan gim ini ke dalam bahasamu? Kirim email ke yairm210@hotmail.com.\n\nGrok Java atau Kotlin? Bergabunglah dengan kami di https://github.com/yairm210/UnCiv.\n\nDunia menunggumu! Akankah kamu membangun peradabn menjadi sebuah kerajaan yang akan bertahan seiring berjalannya waktu?\n\nIzin 'memiliki akses jaringan penuh' diperlukan untuk pengunduhan yang diinisiasi pengguna dan fitur multiplayer. Semua izin lainnya telah termasuk secara otomatis oleh API yang digunakan untuk menjalankan notifikasi giliran multiplayer. Izin jaringan digunakan untuk membuat daftar mod, mengunduh mod, mengunduh musik dan mengunggah/mengunduh gim multiplayer. Tidak ada komunikasi internet lainnya yand diinisiasi oleh Unciv. +Fastlane_full_description = Reimplementasi permainan pembangunan peradaban terpopuler - cepat, tidak memakan ruang, tanpa iklan, gratis selamanya!\n\nBangun peradabanmu, teliti teknologi-teknologi baru, perluas kota-kotamu dan kalahkan musuh-musuhmu!\n\nPermintaan? Eror? Daftar hal-hal yang akan dilakukan pada aplikasi ada di https://github.com/yairm210/Unciv/issues, kami menerima bantuan-bantuanmu meskipun hanya sedikit!\n\nPertanyaan? Komentar? Hanya mengisi waktu luang? Bergabunglah dengan kami di https://discord.gg/bjrB4Xw.\n\nMau membantu menerjemahkan gim ini ke dalam bahasamu? Kirim email ke yairm210@hotmail.com.\n\nGrok Java atau Kotlin? Bergabunglah dengan kami di https://github.com/yairm210/Unciv.\n\nDunia menunggumu! Akankah kamu membangun peradabn menjadi sebuah kerajaan yang akan bertahan seiring berjalannya waktu?\n\nIzin 'memiliki akses jaringan penuh' diperlukan untuk pengunduhan yang diinisiasi pengguna dan fitur multiplayer. Semua izin lainnya telah termasuk secara otomatis oleh API yang digunakan untuk menjalankan notifikasi giliran multiplayer. Izin jaringan digunakan untuk membuat daftar mod, mengunduh mod, mengunduh musik dan mengunggah/mengunduh gim multiplayer. Tidak ada komunikasi internet lainnya yand diinisiasi oleh Unciv. # Starting from here normal translations start, as described in @@ -5933,7 +5933,7 @@ Idle Units = Unit Menganggur If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Jika kamu tidak mau menggerakkan suatu unit pada giliran ini, kamu bisa melewati gilirannya dengan mengeklik 'Unit Selanjutnya' lagi.\nJika kamu tidak ingin memindahkannya untuk sementara waktu, kamu dapat membuat unit itu Bertahan atau Istirahat- \n unit yang sedang Bertahan atau Istirahat tidak dianggap sebagai unit yang menganggur.\nJika kamu belum bisa menentukan apa yang harus dilakukan unit tersebut untuk giliran ini, pilih perintah 'Tunggu'. Unit yang sedang 'menunggu' dapat dipilih lagi di akhir putaran setelah semua unit lain telah menerima perintah mereka.\nJika kamu ingin mematikan fitur 'Unit selanjutnya', kamu bisa mengubahnya di Menu -> Cek unit yang menganggur. Contact Me = Kontak Saya -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Halo! Jika kamu telah bermain sejauh ini, kamu mungkin menyadari bahwa game ini belum lengkap.\n UnCiv dibuat dengan sumber yang terbuka dan gratis, selamanya.\n Itu berarti tidak ada iklan dan omong kosong lainnya. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Halo! Jika kamu telah bermain sejauh ini, kamu mungkin menyadari bahwa game ini belum lengkap.\n Unciv dibuat dengan sumber yang terbuka dan gratis, selamanya.\n Itu berarti tidak ada iklan dan omong kosong lainnya. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = Yang memotivasi saya untuk tetap mengerjakan ini, \n selain fakta bahwa saya pikir sangat keren untuk bisa membuat ini,\n adalah dukungan para pemain seperti kamu :) - kalian adalah yang terbaik! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Setiap penilaian dan ulasan yang saya dapatkan membuatku tersenyum :)\n Jadi kontaklah saya! Kirim email, ulasan, isu di Github\n atau merpati pos, dan mari mencari tahu apa yang membuat game ini \n lebih keren!\n(Info kontak ada di Play Store) diff --git a/android/assets/jsons/translations/Italian.properties b/android/assets/jsons/translations/Italian.properties index 8f2c7d48a5..49d84a988a 100644 --- a/android/assets/jsons/translations/Italian.properties +++ b/android/assets/jsons/translations/Italian.properties @@ -5906,7 +5906,7 @@ Connecting your cities to the capital by roads\n will generate gold via the tra Victory Types = Condizioni di vittoria Once you’ve settled your first two or three cities you’re probably 100 to 150 turns into the game.\nNow is a good time to start thinking about how, exactly, you want to win – if you haven’t already. = Una volta fondate le tue prime due/tre città, saranno passati meno di 100, forse 150 turni.\nOra dovresti pensare a come, esattamente, vincere il gioco - se non l'hai già fatto. -There are four ways to win in Unciv. They are:\n - Cultural Victory: Complete 5 Social Policy Trees and build the Utopia Project\n - Domination Victory: Survive as the last civilization\n - Science Victory: Be the first to construct a spaceship to Alpha Centauri\n - Diplomatic Victory: Build the United Nations and win the vote = Quattro sono i modi per vincere in UnCiv:\n- Culturale: Completa 5 rami sociali e costruisci il progetto Utopia\n- Dominazione: Distruggi tutti gli altri giocatori e resta l'ultima civiltà rimasta\nScientifica: Costruisci per primo sei parti specifiche dell'astronave che porterà dei coloni ad Alpha Centauri\nDiplomatica: Costruisci le Nazioni Unite e vinci la votazione finale del Leader Supremo +There are four ways to win in Unciv. They are:\n - Cultural Victory: Complete 5 Social Policy Trees and build the Utopia Project\n - Domination Victory: Survive as the last civilization\n - Science Victory: Be the first to construct a spaceship to Alpha Centauri\n - Diplomatic Victory: Build the United Nations and win the vote = Quattro sono i modi per vincere in Unciv:\n- Culturale: Completa 5 rami sociali e costruisci il progetto Utopia\n- Dominazione: Distruggi tutti gli altri giocatori e resta l'ultima civiltà rimasta\nScientifica: Costruisci per primo sei parti specifiche dell'astronave che porterà dei coloni ad Alpha Centauri\nDiplomatica: Costruisci le Nazioni Unite e vinci la votazione finale del Leader Supremo So to sum it up, these are the basics of Unciv – Found a prosperous first city, expand slowly to manage happiness, and set yourself up for the victory condition you wish to pursue.\nObviously, there is much more to it than that, but it is important not to jump into the deep end before you know how to swim. = In parole povere, queste sono le basi in Unciv: fonda una capitale prospera, espanditi lentamente per gestire la tua felicità, impostati una condizione di vittoria e concentrati su di essa.\nOvviamente, vi è molto più di questo, ma è importante fare un passo alla volta: per imparare a nuotare bisogna prima entrare in acqua. Enemy City = Città nemiche @@ -5948,7 +5948,7 @@ Idle Units = Unità non usate If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Se non vuoi spostare un'unità per questo turno, puoi saltarla cliccando di nuovo su 'Prossima unità'.\nSe non vuoi muoverla per qualche turno, ordinale di Fortificarsi o Riposare.\n(le unità in tali modalità non sono considerate non utilizzate)\nSe non hai ancora deciso cosa fare con l'unità per quel turno, clicca su 'Attendi'; tale unità verrà selezionata di nuovo nel ciclo 'Prossima unità' una volta dato ordini a tutte le altre.\nSe vuoi disabilitare del tutto la caratteristica 'Prossima unità', fallo su Menu -> Controlla unità inutilizzate. Contact Me = Contattami -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Salve! Se sei giunto/a fin qui, forse avrai visto che il gioco è al momento incompleto.\nUnCiv dovrebbe essere open-source e gratuito per sempre, quindi privo di pubblicità o altre siocchezze. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Salve! Se sei giunto/a fin qui, forse avrai visto che il gioco è al momento incompleto.\nUnciv dovrebbe essere open-source e gratuito per sempre, quindi privo di pubblicità o altre siocchezze. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = Ciò che mi motiva a continuare il progetto, oltre al fatto che è fantastico, è il supporto dai giocatori. Vi ringrazio tutti di cuore! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Ogni voto e recensione che mi date mi fa sempre sorridere =)\nPerciò contattatemi! Mandatemi un'email, una recensione, un fattoide Github o un piccione viaggiatore, e vediamo di rendere il gioco ancora più bello! (Informazioni contatti nel Play Store) @@ -5990,7 +5990,7 @@ F1 - Open Civilopedia\nF2 - Empire overview Trades\nF3 - Empire overview Units\n Ctrl-R - Toggle tile resource display\nCtrl-Y - Toggle tile yield display\nCtrl-O - Game options\nCtrl-S - Save game\nCtrl-L - Load game = Ctrl-R - Mostra/nascondi icone risorse\nCtrl-Y - Mostra/nascondi resa celle\nCtrl-O - Opzioni di gioco\nCtrl-S - Salva partita\nCtrl-L - Carica partita World Screen = Schermata mondiale -This is where you spend most of your time playing Unciv. See the world, control your units, access other screens from here. = Qui è dove trascorri la maggior parte del tempo su UnCiv. Vedi il mondo, controlli le tue unità, e accedi alle altre schermate. +This is where you spend most of your time playing Unciv. See the world, control your units, access other screens from here. = Qui è dove trascorri la maggior parte del tempo su Unciv. Vedi il mondo, controlli le tue unità, e accedi alle altre schermate. ①: The menu button - civilopedia, save, load, options... = ①: Il tasto menu - civilopedia, salva e carica, opzioni... ②: The player/nation whose turn it is - click for diplomacy overview. = ②: Il giocatore o la nazione a cui appartiene il turno. Clicca per la panoramica diplomzia. ③: The Technology Button - shows the tech tree which allows viewing or researching technologies. = ③: Il tasto Tecnologia - mostra l'albero tecnologico che permette di visualizzare o ricercare tecnologie. @@ -6020,10 +6020,10 @@ This is where you spend most of your time playing Unciv. See the world, control ⓕ: Number of turns played with translation into calendar years. Click to see the victory overview. = ⓕ: Il numero di turni si traduce in anni del calendario. Cliccaci per vedere la panoramica vittoria. ⓖ: The number of gold coins in your treasury and income. Clicks lead to the Stats overview screen. = ⓖ: Il numero di monete d'oro nella tua tesoreria, e anche i tuoi introiti. Cliccaci per vedere la panoramica Statistiche. ⓗ: The quantity of ☮Faith your citizens have generated, or 'off' if religion is disabled. Clicking it makes you go to the religion overview screen. = ⓗ: La quantità di ☮Fede generata dai tuoi cittadini (OFF se la religione è disattivata). Cliccaci sopra per accedere alla panoramica religione. -ⓧ: In the center of all this - the world map! Here, the "X" marks a spot outside the map. Yes, unless the wrap option was used, Unciv worlds are flat. Don't worry, your ships won't fall off the edge. = ⓧ: Al centro di tutto questo c'è la mappa mondiale, dove la "X" segna un punto fuori dalla mappa. In genere le mappe su UnCiv sono piatte (tranquillo, le tue navi non cadranno dai bordi), ma puoi anche mettere le mappe tonde. +ⓧ: In the center of all this - the world map! Here, the "X" marks a spot outside the map. Yes, unless the wrap option was used, Unciv worlds are flat. Don't worry, your ships won't fall off the edge. = ⓧ: Al centro di tutto questo c'è la mappa mondiale, dove la "X" segna un punto fuori dalla mappa. In genere le mappe su Unciv sono piatte (tranquillo, le tue navi non cadranno dai bordi), ma puoi anche mettere le mappe tonde. ⓨ: By the way, here's how an empire border looks like - it's in the national colours of the nation owning the territory. = ⓨ: A proposito, questo è l'aspetto di un impero - sta nei colori nazionali della civiltà che possiede il territorio. ⓩ: And this is the red targeting circle that led to the attack pane back under ⑬. = ⓩ: E questo è il cerchio rosso che ha portato al pannello d'attacco sotto ⑬. -What you don't see: The phone/tablet's back button will pop the question whether you wish to leave Unciv and go back to Real Life. On desktop versions, you can use the ESC key. = Quello che non vedi è il messaggio che ti chiederà se desideri chiudere UnCiv e tornare un po' al mondo reale. Lo puoi far comparire tramite il tasto indietro su cellulare o tablet, o il tasto Esc sulle versioni desktop. +What you don't see: The phone/tablet's back button will pop the question whether you wish to leave Unciv and go back to Real Life. On desktop versions, you can use the ESC key. = Quello che non vedi è il messaggio che ti chiederà se desideri chiudere Unciv e tornare un po' al mondo reale. Lo puoi far comparire tramite il tasto indietro su cellulare o tablet, o il tasto Esc sulle versioni desktop. After building a shrine, your civilization will start generating ☮Faith. = Una volta costruito un santuario, la tua civiltà comincerà a generare Fede☮. When enough ☮Faith has been generated, you will be able to found a pantheon. = Una volta generata abbastanza Fede☮, potrai fondare un Pantheon. diff --git a/android/assets/jsons/translations/Japanese.properties b/android/assets/jsons/translations/Japanese.properties index e5d8daa3a8..1f84347da4 100644 --- a/android/assets/jsons/translations/Japanese.properties +++ b/android/assets/jsons/translations/Japanese.properties @@ -19,7 +19,7 @@ Fastlane_short_description = 4Xの文明をモチーフとしたターン制の # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = 世界一の文明創造ゲームの再実装!オープンソースなので、永遠に無料!\n\n 文明を造り、テクノロジーを研究し、都市を広げ、ライバル文明を倒す!\n\n リクエスト・バッグなどはこちらにお問い合わせ https://github.com/yairm210/UnCiv/issues\n\n こちらのDiscordでもご参加してください https://discord.gg/bjrB4Xw.\n\n このゲームを自分の母国語に翻訳したいですか? yairm210@hotmail.comまでお問い合わせお願します。\n\n Javaまたは、Kotlinできる方はぜひ参加してください! https://github.com/yairm210/UnCiv.\n\n 時代を超える帝国の文明を造られるのでしょうか?!世界がまっているぞ!\n\n マルチプレイとユーザ開始したダウンロードは、ネットワークアクセス許可が必要です。他のリストされた許可はAPIで自動的にマルチプレイのターン通知を送信するためです。ネットワーク許可は、モッド、ダウンロードしたモッド、音楽ダウンロード、マルチプレイゲームのアップロードとダウンロードをリストするためです。他のネット通信はUncivから開始していません。 +Fastlane_full_description = 世界一の文明創造ゲームの再実装!オープンソースなので、永遠に無料!\n\n 文明を造り、テクノロジーを研究し、都市を広げ、ライバル文明を倒す!\n\n リクエスト・バッグなどはこちらにお問い合わせ https://github.com/yairm210/Unciv/issues\n\n こちらのDiscordでもご参加してください https://discord.gg/bjrB4Xw.\n\n このゲームを自分の母国語に翻訳したいですか? yairm210@hotmail.comまでお問い合わせお願します。\n\n Javaまたは、Kotlinできる方はぜひ参加してください! https://github.com/yairm210/Unciv.\n\n 時代を超える帝国の文明を造られるのでしょうか?!世界がまっているぞ!\n\n マルチプレイとユーザ開始したダウンロードは、ネットワークアクセス許可が必要です。他のリストされた許可はAPIで自動的にマルチプレイのターン通知を送信するためです。ネットワーク許可は、モッド、ダウンロードしたモッド、音楽ダウンロード、マルチプレイゲームのアップロードとダウンロードをリストするためです。他のネット通信はUncivから開始していません。 # Starting from here normal translations start, as described in @@ -7253,7 +7253,7 @@ Idle Units = 動かさないユニット If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Contact Me = 連絡 -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = こんにちは!ここまでプレイされた方は、ゲームに邪魔なものがないことにお気づきでしょう。\nUnCivはオープンソースであり、永遠に無料であることを意味しています。\nつまり、広告やその他の無意味なものは一切ありません。 +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = こんにちは!ここまでプレイされた方は、ゲームに邪魔なものがないことにお気づきでしょう。\nUncivはオープンソースであり、永遠に無料であることを意味しています。\nつまり、広告やその他の無意味なものは一切ありません。 What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = 私がこの作品に取り組み続けるモチベーションになっているのは、\n自分でも驚くほどかっこいいと思っているという事実以外にも、\nプレイヤーのサポートがあるからです。あなたたちに感謝します。 Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = 評価やレビューを受けるたびに、私の顔に笑顔がこぼれます =) \nだから、連絡してください。メール、レビュー、GithubのIssue、またはメールをpigeonに送って、ゲームをさらに素晴らしいものにする方法を考えましょう。\n(連絡先はPlay ストアにあります) diff --git a/android/assets/jsons/translations/Korean.properties b/android/assets/jsons/translations/Korean.properties index 23b34f82a1..936624e09c 100644 --- a/android/assets/jsons/translations/Korean.properties +++ b/android/assets/jsons/translations/Korean.properties @@ -19,7 +19,7 @@ Fastlane_short_description = 4x 문명 구축 게임 # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = 역대 가장 유명한 문명 건설 게임을 가볍고 빠른 프리웨어로 재현합니다.\n\n문명을 건설하고, 기술을 연구하고, 도시를 확장하고, 적을 무찌르세요!\n\n버그나 요청사항은 여기 남겨주세요. https://github.com/yairm210/UnCiv/issues\n아무리 사소한 것이라도 좋습니다!\n\n질문, 후기 또는 그냥 심심하다면 커뮤니티로 오세요. https://discord.gg/bjrB4Xw\n\n번역에 참여하시려면 게임 위키의 번역 페이지를 참고하세요. https://yairm210.github.io/Unciv/Other/Translating\n\n자바나 코틀린에 능숙하시다면 개발에 참여해보세요. https://github.com/yairm210/UnCiv\n\n세계가 당신을 기다립니다! 세월의 시련을 이겨낼 문명을 건설해 주시겠습니까?\n\n사용자가 지시한 다운로드와 멀티플레이에 '완전한 네트워크 접근' 권한이 필요합니다. 그외 모든 권한이 멀티플레이 턴 알림 API에 사용됩니다. 모드 불러오기, 모드 다운로드, 음악 다운로드, 멀티플레이 업로드/다운로드에 네트워크 권한이 사용됩니다. 이상을 제외한 다른 인터넷 연결은 Unciv에 의해 발생하지 않습니다. +Fastlane_full_description = 역대 가장 유명한 문명 건설 게임을 가볍고 빠른 프리웨어로 재현합니다.\n\n문명을 건설하고, 기술을 연구하고, 도시를 확장하고, 적을 무찌르세요!\n\n버그나 요청사항은 여기 남겨주세요. https://github.com/yairm210/Unciv/issues\n아무리 사소한 것이라도 좋습니다!\n\n질문, 후기 또는 그냥 심심하다면 커뮤니티로 오세요. https://discord.gg/bjrB4Xw\n\n번역에 참여하시려면 게임 위키의 번역 페이지를 참고하세요. https://yairm210.github.io/Unciv/Other/Translating\n\n자바나 코틀린에 능숙하시다면 개발에 참여해보세요. https://github.com/yairm210/Unciv\n\n세계가 당신을 기다립니다! 세월의 시련을 이겨낼 문명을 건설해 주시겠습니까?\n\n사용자가 지시한 다운로드와 멀티플레이에 '완전한 네트워크 접근' 권한이 필요합니다. 그외 모든 권한이 멀티플레이 턴 알림 API에 사용됩니다. 모드 불러오기, 모드 다운로드, 음악 다운로드, 멀티플레이 업로드/다운로드에 네트워크 권한이 사용됩니다. 이상을 제외한 다른 인터넷 연결은 Unciv에 의해 발생하지 않습니다. # Starting from here normal translations start, as described in @@ -5856,7 +5856,7 @@ Landship = 지상함 #################### Lines from Tutorials #################### Introduction = 게임 소개 -Welcome to Unciv!\nBecause this is a complex game, there are basic tasks to help familiarize you with the game.\nThese are completely optional, and you're welcome to explore the game on your own! = UnCiv에 오신 것을 환영합니다!\n이 게임은 다소 복잡하기 때문에 적응을 위해 몇가지 도움말을 준비했습니다.\n도움말을 반드시 따라할 필요는 없으며, 마음대로 게임을 둘러보셔도 상관없습니다! +Welcome to Unciv!\nBecause this is a complex game, there are basic tasks to help familiarize you with the game.\nThese are completely optional, and you're welcome to explore the game on your own! = Unciv에 오신 것을 환영합니다!\n이 게임은 다소 복잡하기 때문에 적응을 위해 몇가지 도움말을 준비했습니다.\n도움말을 반드시 따라할 필요는 없으며, 마음대로 게임을 둘러보셔도 상관없습니다! New Game = 게임 시작하기 Your first mission is to found your capital city.\nThis is actually an important task because your capital city will probably be your most prosperous.\nMany game bonuses apply only to your capital city and it will probably be the center of your empire. = 처음에는 수도를 건설해야 하는데 이는 상당히 중요합니다.\n많은 보너스들이 수도에만 주어지므로, 수도는 국가의 중심지로서 가장 번창한 도시가 될 것이기 때문입니다. @@ -5934,7 +5934,7 @@ Idle Units = 대기 If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = 당신이 이번 턴에 유닛을 움직이고 싶지 않다면 "다음 유닛" 버튼을 눌러 행동을 넘길수 있습니다.\n당신이 몇턴간 유닛을 움직이고 싶지 않다면 유닛을 요새화 또는 휴식 상태로 만들 수 있습니다. 요새화 또는 휴식 상태의 유닛은 유휴 상태의 유닛을 간주되지 않습니다.\n당신이 이번 턴에 이 유닛이 어떻게 행동할지 아직 결정하지 못 했다면 "대기" 명령을 내릴수 있습니다. 대기 상태의 유닛은 다른 모든 유닛이 명령을 받은 후에 차례가 돌아옵니다.\n당신이 "다음 유닛" 기능을 비활성화하고 싶다면 설정에서 "유휴 상태 유닛 확인" 기능을 비활성화할 수 있습니다. Contact Me = 개발자의 말 -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = 안녕하십니까?\n여러분이 플레이해주신 이 게임은 현재 미완성입니다.\nUnCiv는 앞으로도 계속 무료 오픈소스로 배포될 예정입니다.\n광고 같은 잡다한 요소는 일절 없을 겁니다. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = 안녕하십니까?\n여러분이 플레이해주신 이 게임은 현재 미완성입니다.\nUnciv는 앞으로도 계속 무료 오픈소스로 배포될 예정입니다.\n광고 같은 잡다한 요소는 일절 없을 겁니다. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = 게임을 개발하는 데 가장 큰 원동력은 개발하는 스스로에 대한 자부심도 있지만\n무엇보다도 게임을 플레이하는 여러분들의 지원이 가장 큽니다.\n플레이어 여러분 항상 감사합니다! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = 여러분이 남기는 모든 평가와 별점이 저를 미소짓게 합니다.\n게임을 재미있게 만들 아이디어를 이메일, 리뷰, Github,\n비둘기편지(?) 등으로 보내주세요!\n(연락처는 구글 플레이스토어를 참조) diff --git a/android/assets/jsons/translations/Lithuanian.properties b/android/assets/jsons/translations/Lithuanian.properties index 7b18942f25..75402c341e 100644 --- a/android/assets/jsons/translations/Lithuanian.properties +++ b/android/assets/jsons/translations/Lithuanian.properties @@ -19,7 +19,7 @@ Fastlane_short_description = 4X civilizacijos kūrimo žaidimas # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = Garsaus civilizacijos žaidimo nauja realizacija - greita, maža, be reklamų, nemokamai! Kurk savo civilizaciją, atrask technologijas, plėsk miestus ir nugalėk priešus! Pasiūlymai? Klaidos? Žiūrėk čia https://github.com/yairm210/UnCiv/issues, bet kokia pagalba sveikintina! Klausimai? Komentarai? Junkis čia https://discord.gg/bjrB4Xw. Nori padėti vertimais į savo ar kitas kalbas? Siųsk laišką čia yairm210@hotmail.com. Programuoji Grok Java ar Kotlin? Junkis čia https://github.com/yairm210/UnCiv. Pasaulis laukia tavęs! Ar pavyks paversti savo civilizaciją į imperiją tvarią laiko ir kitiems iššūkiams? Failų atsisiuntimams ir kelių žaidėjų žaidimui reikalinga interneto teisė 'have full network access'. Kitos reikalingos teisės įdėtos į API. Interneto teisės naudojamos rodyti modifikacijų sąrašą, atsisiųsti modifikacijas, atsisiųsti muziką ir atsiųsti/nusiųsti kelių žaidėjų žaidimo duomenis. Kitokių interneto komunikaciju Unciv žaidimas nekuria. +Fastlane_full_description = Garsaus civilizacijos žaidimo nauja realizacija - greita, maža, be reklamų, nemokamai! Kurk savo civilizaciją, atrask technologijas, plėsk miestus ir nugalėk priešus! Pasiūlymai? Klaidos? Žiūrėk čia https://github.com/yairm210/Unciv/issues, bet kokia pagalba sveikintina! Klausimai? Komentarai? Junkis čia https://discord.gg/bjrB4Xw. Nori padėti vertimais į savo ar kitas kalbas? Siųsk laišką čia yairm210@hotmail.com. Programuoji Grok Java ar Kotlin? Junkis čia https://github.com/yairm210/Unciv. Pasaulis laukia tavęs! Ar pavyks paversti savo civilizaciją į imperiją tvarią laiko ir kitiems iššūkiams? Failų atsisiuntimams ir kelių žaidėjų žaidimui reikalinga interneto teisė 'have full network access'. Kitos reikalingos teisės įdėtos į API. Interneto teisės naudojamos rodyti modifikacijų sąrašą, atsisiųsti modifikacijas, atsisiųsti muziką ir atsiųsti/nusiųsti kelių žaidėjų žaidimo duomenis. Kitokių interneto komunikaciju Unciv žaidimas nekuria. # Starting from here normal translations start, as described in @@ -5934,7 +5934,7 @@ Idle Units = Neužimti daliniai If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Nei nenorite judinti dalinio šį ėjimą, ėjimą galima praleisti paspaudus 'Kitas dalinys', arba 'Palaukti", kad palaukti ėjimų eilėje. \nJei nenorite judinti dalinio ilgesnį laiką, spauskite 'Įsitvirtinti' arba 'Ilsėtis' –\ntokiais atvejais dalinys nelaikomas Neužimtu.\nJei norite atsisakyti funkcijos 'Kitas dalinys', galite atjungti ją per Nustatymus -> Laukiantys daliniai. Contact Me = Susisiek -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Sveiki! Greičiausiai jau pastebėjote, \nkad žaidimas dar tobulinamas.\nUnCiv - atviro kodo nemokamas žaidimas, \ntodėl jame nėra reklamų ir kitokių nesąmonių. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Sveiki! Greičiausiai jau pastebėjote, \nkad žaidimas dar tobulinamas.\nUnciv - atviro kodo nemokamas žaidimas, \ntodėl jame nėra reklamų ir kitokių nesąmonių. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = Darbas nesustoja ne tik \ntodėl kad man tai patinka,\nbet ir dėl žaidėjų palaikymo - ačiū jums! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Jūsų įvertinimai ir atsiliepimai, \npakelia nuotaiką, todėl susiekite su manimi! \n Išsiųskite man paštu ar per Github atsiliepimą ar klausimą,\n parašytą anglų kalba, ir mes kartu aptarsime kaip dar patobulinti žaidimą!\n(Kontaktinė informacija nurodyta Google Play Store) diff --git a/android/assets/jsons/translations/Malay.properties b/android/assets/jsons/translations/Malay.properties index 102cc80b12..345a449360 100644 --- a/android/assets/jsons/translations/Malay.properties +++ b/android/assets/jsons/translations/Malay.properties @@ -9503,7 +9503,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un # Requires translation! Contact Me = # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/Persian_(Pinglish-DIN).properties b/android/assets/jsons/translations/Persian_(Pinglish-DIN).properties index 82c9f2f0cf..41eeea403b 100644 --- a/android/assets/jsons/translations/Persian_(Pinglish-DIN).properties +++ b/android/assets/jsons/translations/Persian_(Pinglish-DIN).properties @@ -10010,7 +10010,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un # Requires translation! Contact Me = # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/Persian_(Pinglish-UN).properties b/android/assets/jsons/translations/Persian_(Pinglish-UN).properties index 62aa8795db..76d8f08b30 100644 --- a/android/assets/jsons/translations/Persian_(Pinglish-UN).properties +++ b/android/assets/jsons/translations/Persian_(Pinglish-UN).properties @@ -9935,7 +9935,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un # Requires translation! Contact Me = # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/Polish.properties b/android/assets/jsons/translations/Polish.properties index 2ed453e70c..e63555fe46 100644 --- a/android/assets/jsons/translations/Polish.properties +++ b/android/assets/jsons/translations/Polish.properties @@ -5943,7 +5943,7 @@ Idle Units = Jednostki nieaktywne If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Jeżeli nie chcesz wykonywać daną jednostką żadnych akcji możesz kliknąć „Następna jednostka”.\nJeżeli nie planujesz w najbliższym czasie żadnych akcji dla jednostki możesz wprowadzić ją w tryb snu „Uśpij” lub fortyfikacji „Fortyfikuj” – takie jednostki nie są brane pod uwagę jako bezczynne.\nJeśli nie możesz zdecydować, co jednostka ma zrobić, wybierz polecenie „Czekaj”. Jednostka oczekująca zostanie ponownie wybrania, gdy pozostałe jednostki otrzymają swoje rozkazy.\nJeżeli chcesz całkowicie wyłączyć funkcję „Następna jednostka”, możesz to zrobić w Opcjach: Rozgrywka → Sprawdzaj jednostki bez rozkazu. Contact Me = Kontakt z autorem -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Witaj!\n\nJeżeli doszedłeś do tego etapu gry zauważyłeś, że gra jest jeszcze niekompletna.\nUnciv to gra na zawsze otwarta i bezpłatna. Oznacza to brak reklam i innych dziwactw. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Witaj!\n\nJeżeli doszedłeś do tego etapu gry zauważyłeś, że gra jest jeszcze niekompletna.\nUnciv to gra na zawsze otwarta i bezpłatna. Oznacza to brak reklam i innych dziwactw. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = To co motywuje mnie daleszej pracy nad grą, poza tym że samo tworzenie sprawia mi frajdę, jest wsparcie ze strony graczy – jesteście najlepsi! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Każda ocena i opinia motywuje mnie do dalszego działania, Więc skontaktuj się ze mną! Wyślij mi maila, opinię albo gołębiem pocztowym, i zastanówmy się jak sprawić, by gra była jeszcze lepsza!\n\n(Informacje kontaktowe znajdują się w Sklepie Play) diff --git a/android/assets/jsons/translations/Portuguese.properties b/android/assets/jsons/translations/Portuguese.properties index a490c39c04..f99b0755ef 100644 --- a/android/assets/jsons/translations/Portuguese.properties +++ b/android/assets/jsons/translations/Portuguese.properties @@ -8151,7 +8151,7 @@ Idle Units = If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Contact Me = Contacta-me -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Olá! Se você jogaste até agora, provavelmente viste que o jogo está incompleto.\nO UnCiv foi criado para ser de código aberto e grátis sempre.\nIsso significa que não há anúncios ou qualquer outra coisa sem sentido. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Olá! Se você jogaste até agora, provavelmente viste que o jogo está incompleto.\nO Unciv foi criado para ser de código aberto e grátis sempre.\nIsso significa que não há anúncios ou qualquer outra coisa sem sentido. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = O que me motiva a continuar a trabalhae nisto, \n além do fato de que eu acho fantastico que eu posso, é o apoio dos jogadores - vocês são demais! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Todas as classificações e avaliações que recebo fazem-me sorrir =)\n Então contacta-me! Manda-me um email, avaliação, problema do Github\n ou pombo correio, e vamos descobrir como fazer o jogo \n ainda mais incrível!\n(Informação de contato está na Play Store) diff --git a/android/assets/jsons/translations/Romanian.properties b/android/assets/jsons/translations/Romanian.properties index c01a81e825..288fa91fb1 100644 --- a/android/assets/jsons/translations/Romanian.properties +++ b/android/assets/jsons/translations/Romanian.properties @@ -19,7 +19,7 @@ Fastlane_short_description = Joc de construire a civilizației 4X # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = O reimplementare a celui mai faimos joc de construire a civilizației din toate timpurile - rapid, mic, fără reclame, gratuit pentru totdeauna!\n\nConstruiește-ți civilizația, cercetează tehnologii, extinde-ți orașele și învinge-ți dușmanii!\n\nCereri? Bug-uri? Lista de toate pentru aplicație este https://github.com/yairm210/UnCiv/issues, fiecare mic ajutor este binevenit!\n\nÎntrebări? Comentarii? Doar plictisit? Alăturați-vă nouă pe https://discord.gg/bjrB4Xw.\n\nVrei să ajuți la traducerea jocului în limba ta? Trimite-mi un e-mail la yairm210@hotmail.com.\n\nGrok Java sau Kotlin? Alăturați-vă nouă la https://github.com/yairm210/UnCiv.\n\nLumea așteaptă! Îți vei construi civilizația într-un imperiu care va rezista testului timpului?\n\nPermisiunea „a avea acces complet la rețea” este necesară pentru descărcări inițiate de utilizator și pentru caracteristica multiplayer. Toate celelalte permisiuni enumerate sunt incluse automat de API-ul utilizat pentru implementarea notificărilor de turnare pentru multiplayer. Permisiunile de rețea sunt folosite pentru a lista mod-uri, a descărca mod-uri, a descărca muzică și pentru a încărca/descărca jocuri multiplayer. Nicio altă comunicare pe internet nu este inițiată de Unciv. +Fastlane_full_description = O reimplementare a celui mai faimos joc de construire a civilizației din toate timpurile - rapid, mic, fără reclame, gratuit pentru totdeauna!\n\nConstruiește-ți civilizația, cercetează tehnologii, extinde-ți orașele și învinge-ți dușmanii!\n\nCereri? Bug-uri? Lista de toate pentru aplicație este https://github.com/yairm210/Unciv/issues, fiecare mic ajutor este binevenit!\n\nÎntrebări? Comentarii? Doar plictisit? Alăturați-vă nouă pe https://discord.gg/bjrB4Xw.\n\nVrei să ajuți la traducerea jocului în limba ta? Trimite-mi un e-mail la yairm210@hotmail.com.\n\nGrok Java sau Kotlin? Alăturați-vă nouă la https://github.com/yairm210/Unciv.\n\nLumea așteaptă! Îți vei construi civilizația într-un imperiu care va rezista testului timpului?\n\nPermisiunea „a avea acces complet la rețea” este necesară pentru descărcări inițiate de utilizator și pentru caracteristica multiplayer. Toate celelalte permisiuni enumerate sunt incluse automat de API-ul utilizat pentru implementarea notificărilor de turnare pentru multiplayer. Permisiunile de rețea sunt folosite pentru a lista mod-uri, a descărca mod-uri, a descărca muzică și pentru a încărca/descărca jocuri multiplayer. Nicio altă comunicare pe internet nu este inițiată de Unciv. # Starting from here normal translations start, as described in @@ -6863,7 +6863,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un Contact Me = Contactează-mă # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/Russian.properties b/android/assets/jsons/translations/Russian.properties index 8dc143bafe..e0eb3de94e 100644 --- a/android/assets/jsons/translations/Russian.properties +++ b/android/assets/jsons/translations/Russian.properties @@ -19,7 +19,7 @@ Fastlane_short_description = 4X-стратегия, посвящённая ст # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = Аналог самой знаменитой игры про создание цивилизации. Работает быстро, весит мало, без рекламы, абсолютно бесплатная!\n\nПостройте свою цивилизацию, исследуйте технологии, расширяйте города и побеждайте врагов!\n\nПожелания? Баги? Список задач для разработки здесь: https://github.com/yairm210/UnCiv/issues. Приветствуем любую, даже небольшую помощь!\n\nВопросы? Комментарии? Просто скучно? Присоединяйтесь к нам: https://discord.gg/bjrB4Xw.\n\nХотите помочь с переводом игры на ваш язык? Принимаю письма по этому адресу: yairm210@hotmail.com.\n\nЯвляетесь знатоком Java или Kotlin? Присоединяйтесь к нам: https://github.com/yairm210/UnCiv.\n\nМир ждёт вас! Сможете ли вы создать цивилизацию, что превратится в империю и выдержит натиск времени?\n\nРазрешения на доступ к Интернету необходим для загрузок, иницируемые пользователем, и для возможности многопользовательской игры. Все остальные разрешения, включаемые автоматически API, используются для уведомления о ходе в многопользовательской игре. Сетевые разрешения используются для получения списка модов, скачивания модов и музыки, отправки и получения многопользовательских игр. Никакие другие обмены по сети не иницируются в Unciv. +Fastlane_full_description = Аналог самой знаменитой игры про создание цивилизации. Работает быстро, весит мало, без рекламы, абсолютно бесплатная!\n\nПостройте свою цивилизацию, исследуйте технологии, расширяйте города и побеждайте врагов!\n\nПожелания? Баги? Список задач для разработки здесь: https://github.com/yairm210/Unciv/issues. Приветствуем любую, даже небольшую помощь!\n\nВопросы? Комментарии? Просто скучно? Присоединяйтесь к нам: https://discord.gg/bjrB4Xw.\n\nХотите помочь с переводом игры на ваш язык? Принимаю письма по этому адресу: yairm210@hotmail.com.\n\nЯвляетесь знатоком Java или Kotlin? Присоединяйтесь к нам: https://github.com/yairm210/Unciv.\n\nМир ждёт вас! Сможете ли вы создать цивилизацию, что превратится в империю и выдержит натиск времени?\n\nРазрешения на доступ к Интернету необходим для загрузок, иницируемые пользователем, и для возможности многопользовательской игры. Все остальные разрешения, включаемые автоматически API, используются для уведомления о ходе в многопользовательской игре. Сетевые разрешения используются для получения списка модов, скачивания модов и музыки, отправки и получения многопользовательских игр. Никакие другие обмены по сети не иницируются в Unciv. # Starting from here normal translations start, as described in @@ -6320,7 +6320,7 @@ Idle Units = Незанятые юниты If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Contact Me = Связь с разработчиком -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Привет! Если вы доиграли до этого момента, то наверно\nзаметили, что игра еще не закончена.\nUnCiv задумана как бесплатная игра с открытым исходным\nкодом, поэтому в ней нет рекламы и прочей ерунды. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Привет! Если вы доиграли до этого момента, то наверно\nзаметили, что игра еще не закончена.\nUnciv задумана как бесплатная игра с открытым исходным\nкодом, поэтому в ней нет рекламы и прочей ерунды. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = Я продолжаю работать\nне только потому что это невероятно круто,\nно и благодаря поддержке игроков - вы лучшие! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Все оценки и отзывы, которые я получаю,\nвызывают улыбку на моем лице =)\nПоэтому свяжитесь со мной! Отправьте мне email, отзыв,\nвопрос на Github, да хоть почтового голубя, и мы вместе\nразберемся, как сделать игру еще более потрясающей!\n(Контактная информация указана в Play Store) diff --git a/android/assets/jsons/translations/Simplified_Chinese.properties b/android/assets/jsons/translations/Simplified_Chinese.properties index 2c98b5ba11..5482d6dbf4 100644 --- a/android/assets/jsons/translations/Simplified_Chinese.properties +++ b/android/assets/jsons/translations/Simplified_Chinese.properties @@ -6056,7 +6056,7 @@ Landship = 履带战车 #################### Lines from Tutorials #################### Introduction = 游戏介绍 -Welcome to Unciv!\nBecause this is a complex game, there are basic tasks to help familiarize you with the game.\nThese are completely optional, and you're welcome to explore the game on your own! = 您好,欢迎来到绚丽多彩的UnCiv游戏世界!\n文明游戏是复杂的,让我们通过一些简单的任务来熟悉它吧。\n这些任务是可选的,当然您也可以自己探索游戏世界! +Welcome to Unciv!\nBecause this is a complex game, there are basic tasks to help familiarize you with the game.\nThese are completely optional, and you're welcome to explore the game on your own! = 您好,欢迎来到绚丽多彩的Unciv游戏世界!\n文明游戏是复杂的,让我们通过一些简单的任务来熟悉它吧。\n这些任务是可选的,当然您也可以自己探索游戏世界! New Game = 开始新游戏 Your first mission is to found your capital city.\nThis is actually an important task because your capital city will probably be your most prosperous.\nMany game bonuses apply only to your capital city and it will probably be the center of your empire. = 您的第一个任务是建立首都,\n这个任务是非常重要的,因为通常情况下首都会成为你的文明最繁荣的城市。\n游戏中解锁政策、科技等带来的很多增益往往只对首都有效,所以首都的发展代表了您的文明的发达程度。 @@ -6134,9 +6134,9 @@ Idle Units = 空闲单位 If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = 如果您不想在本回合移动某个单位,您可以再次单击“下一个单位”跳过对这个单位的操作。\如果您暂时不移动它,您可以让单位进入强化恢复或状态-\n强化或休整中的单位不被视为空闲单位。\如果你还没有决定某个单位在当前回合应该做什么,选择“等待”命令。一旦所有其他单位收到指令,在“下一个单位”周期结束时,将再次开始让您选择“等待”单位。\如果您想完全禁用“下一个空闲单位”功能,可以在菜单->检查空闲单位中切换。 Contact Me = 联系我吧! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = 很好!当您已经熟悉了游戏的大部分内容,\n您会发现游戏目前是不完整的,它还处于开发状态。\n不过UnCiv将永远是开源和免费的,\n这意味着您无须担心广告或付费问题。 +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = 很好!当您已经熟悉了游戏的大部分内容,\n您会发现游戏目前是不完整的,它还处于开发状态。\n不过Unciv将永远是开源和免费的,\n这意味着您无须担心广告或付费问题。 What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = 您的支持将激励着我进一步完善它,\n我一定会竭尽全力、精益求精。\n感谢玩家们的支持--您们是最棒的! -Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = 如果喜欢它,请到Play Store对它进行评价。\n如果您发现了游戏存在的问题或有什么好的意见和建议,\n请联系我!\n我的email地址:yairm210@hotmail.com,\nGitHub项目页面:https://github.com/yairm210/UnCiv。 +Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = 如果喜欢它,请到Play Store对它进行评价。\n如果您发现了游戏存在的问题或有什么好的意见和建议,\n请联系我!\n我的email地址:yairm210@hotmail.com,\nGitHub项目页面:https://github.com/yairm210/Unciv。 Pillaging = 劫掠地块 Military units can pillage improvements, which heals them 25 health and ruins the improvement.\nThe tile can still be worked, but advantages from the improvement - stat bonuses and resources - will be lost.\nWorkers can repair these improvements, which takes less time than building the improvement from scratch.\nPillaging certain improvements will result in your units looting gold from the improvement. = 军事单位可以劫掠地块设施,“劫掠”可以回复单位25点生命值同时将设施化为废墟。\n被“劫掠”的地块仍旧可以工作,但从地块设施获得的效果——例如基本资源加成和战略资源收益——将会消失。\n工人可以修复这些化为废墟的设施,所花费时间将比重新建造它们要少。\n劫掠特定的区块建筑(比如牧场)可以为您带来金钱的收入。 diff --git a/android/assets/jsons/translations/Spanish.properties b/android/assets/jsons/translations/Spanish.properties index aaba853b88..6fdb43ceed 100644 --- a/android/assets/jsons/translations/Spanish.properties +++ b/android/assets/jsons/translations/Spanish.properties @@ -19,7 +19,7 @@ Fastlane_short_description = Juego 4X de crear civilizaciones # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = Una reimplementación del juego de construcción de civilizaciones más famoso de la historia - ¡Rápido, pequeño, sin anuncios, gratis por siempre!\n\n¡Construye tu civilización, investiga tecnologías, expande tus ciudades y derrota a tus enemigos!\n\n¿Peticiones?¿Errores? La lista de cosas por hacer de la aplicación es https://github.com/yairm210/UnCiv/issues, ¡toda pequeña ayuda es bienvenida!\n\n¿Preguntas?¿Errores?¿Aburrido? Únetenos en https://discord.gg/bjrB4Xw.\n\n¿Quieres ayudar a traducir el juego a tu idioma? Envíame un email a yairm210@hotmail.com.\n\n¿Sabes escribir Java o Kotlin? Únetenos en https://github.com/yairm210/UnCiv.¡El mundo espera!¿Convertirás tu civilización en un imperio que resistirá el paso del tiempo?\n\n Se requiere el permiso de "Tener acceso completo a la red" para descargas iniciadas por el usuario y el modo multijugador. Todos los demás permisos listados son incluidos automáticamente por el API usado para implementar las notificaciones de turnos en el modo multijugador. Los permisos de red son usados para contar mods, descargar mods, descargar música y para cargar/descargar partidas multijugador. Unciv no inicia ninguna otra comunicación por Internet. +Fastlane_full_description = Una reimplementación del juego de construcción de civilizaciones más famoso de la historia - ¡Rápido, pequeño, sin anuncios, gratis por siempre!\n\n¡Construye tu civilización, investiga tecnologías, expande tus ciudades y derrota a tus enemigos!\n\n¿Peticiones?¿Errores? La lista de cosas por hacer de la aplicación es https://github.com/yairm210/Unciv/issues, ¡toda pequeña ayuda es bienvenida!\n\n¿Preguntas?¿Errores?¿Aburrido? Únetenos en https://discord.gg/bjrB4Xw.\n\n¿Quieres ayudar a traducir el juego a tu idioma? Envíame un email a yairm210@hotmail.com.\n\n¿Sabes escribir Java o Kotlin? Únetenos en https://github.com/yairm210/Unciv.¡El mundo espera!¿Convertirás tu civilización en un imperio que resistirá el paso del tiempo?\n\n Se requiere el permiso de "Tener acceso completo a la red" para descargas iniciadas por el usuario y el modo multijugador. Todos los demás permisos listados son incluidos automáticamente por el API usado para implementar las notificaciones de turnos en el modo multijugador. Los permisos de red son usados para contar mods, descargar mods, descargar música y para cargar/descargar partidas multijugador. Unciv no inicia ninguna otra comunicación por Internet. # Starting from here normal translations start, as described in @@ -6002,7 +6002,7 @@ Idle Units = Unidades sin Utilizar If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Si no quieres mover una unidad en este turno, puedes saltarla simplemente presionando "Siguiente Unidad".\nSi no la vás a mover por un buen rato, puedes dejarla en "Fortificar" o "Dormir" - \n las unidades en "Fortificar" o "Dormir" no serán presentadas como unidades sin utilizar.\nSi todavía no has decidido qué hacer con una unidad en este turno, escoge "Esperar". Una unidad en "Esperar" será selecionada otra véz al final del ciclo de "Siguiente Unidad", una véz el resto de las unidades hayan recibido ordenes.\nSi quieres desactivar la función de "Siguiente Unidad" por completo, puedes quitarlo en Opciones -> Comprobar unidades sin utilizar. Contact Me = Contacta conmigo -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = ¡Hey! Si has jugado hasta aquí es probable que hayas visto que el juego está sin acabar.\n UnCiv está pensado para ser open-source y gratis, siempre.\n Esto significa que no habrá anuncios ni ninguna chorrada. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = ¡Hey! Si has jugado hasta aquí es probable que hayas visto que el juego está sin acabar.\n Unciv está pensado para ser open-source y gratis, siempre.\n Esto significa que no habrá anuncios ni ninguna chorrada. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = Lo que me motiva para seguir trabajando en esto es, aparte de que es genial que pueda hacerlo, el apoyo de los jugadores, ¡sois los mejores! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Cada valoración y reseña hace que sonría =)\n ¡Así que contactarme! Enviadme un email, una issue en GitHub\n o una paloma mensajera y averiguaremos como hacer el juego\n incluso más increíble. diff --git a/android/assets/jsons/translations/Swedish.properties b/android/assets/jsons/translations/Swedish.properties index 366352f789..6a7d2c217f 100644 --- a/android/assets/jsons/translations/Swedish.properties +++ b/android/assets/jsons/translations/Swedish.properties @@ -6324,7 +6324,7 @@ Idle Units = Sysslolösa Enheter If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Contact Me = Kontakta Mig -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Hej! Om du spelat så här långt, har du förmodligen märkt att spelet för närvarande är ofärdigt.\n UnCiv är tänkt att vara öppen källkod, och gratis, för alltid.\n Det innebär att det finns ingen reklam eller annat nonsens. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Hej! Om du spelat så här långt, har du förmodligen märkt att spelet för närvarande är ofärdigt.\n Unciv är tänkt att vara öppen källkod, och gratis, för alltid.\n Det innebär att det finns ingen reklam eller annat nonsens. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = Det som motiverar mig att fortsätta arbeta på det, \n förutom det faktum att jag tycker det är otrooligt häftigt at jag kan,\n är stödet från spelarna - ni är bäst! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Varje betyg och recension som jag får ger mig ett leende =)\n Så kontakta mig! Skicka mig ett mail, recension, Github-issue\n eller brevduva, och låt oss komma på hur vi kan göra spelet \n ännu häftigare!\n(Kontaktinformation finns i Play Store) diff --git a/android/assets/jsons/translations/Thai.properties b/android/assets/jsons/translations/Thai.properties index c4c800836a..3a948bf467 100644 --- a/android/assets/jsons/translations/Thai.properties +++ b/android/assets/jsons/translations/Thai.properties @@ -8998,7 +8998,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un # Requires translation! Contact Me = -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) diff --git a/android/assets/jsons/translations/Traditional_Chinese.properties b/android/assets/jsons/translations/Traditional_Chinese.properties index 02f88fd72b..db7ef74746 100644 --- a/android/assets/jsons/translations/Traditional_Chinese.properties +++ b/android/assets/jsons/translations/Traditional_Chinese.properties @@ -19,7 +19,7 @@ Fastlane_short_description = 4X 文明帝國遊戲 # Documentation: https://f-droid.org/en/docs/Build_Metadata_Reference/#Description # English to translate: https://github.com/yairm210/Unciv/blob/master/fastlane/metadata/android/en-US/full_description.txt -Fastlane_full_description = 這是一個再現世界著名的文明帝國遊戲,其體積小、快速、無廣告、且永遠免費。\n\n建立你的文明,研究科技,擴張你的城市並且擊敗你的敵人!\n\n有新發現或Bugs想回報? 任何進行中的項目皆列在 https://github.com/yairm210/UnCiv/issues, 不管多小的點子都非常歡迎加入討論!\n\n遊玩有問題? 想找人討論? 或者單純無聊? 歡迎加入Discord群聊 https://discord.gg/bjrB4Xw.\n\n想幫這款遊戲翻譯成你的母語? 歡迎透過Email聯繫: yairm210@hotmail.com.\n\nJava 或 Kotlin高手? 歡迎加入開發行列 https://github.com/yairm210/UnCiv.\n\n世界正在等著你! 你的文明是否經的起時間考驗?\n\n'擁有完整網路權限'存取,主要用於使用者主動發起多人連線遊戲。為了實現多人連線的通知,也需要其他已列出的權限。網路權限主要用於顯示/下載mod,下載音樂,以及上傳/下載多人遊戲進度。沒有其他網路連線會由Unciv遊戲方主動發起。 +Fastlane_full_description = 這是一個再現世界著名的文明帝國遊戲,其體積小、快速、無廣告、且永遠免費。\n\n建立你的文明,研究科技,擴張你的城市並且擊敗你的敵人!\n\n有新發現或Bugs想回報? 任何進行中的項目皆列在 https://github.com/yairm210/Unciv/issues, 不管多小的點子都非常歡迎加入討論!\n\n遊玩有問題? 想找人討論? 或者單純無聊? 歡迎加入Discord群聊 https://discord.gg/bjrB4Xw.\n\n想幫這款遊戲翻譯成你的母語? 歡迎透過Email聯繫: yairm210@hotmail.com.\n\nJava 或 Kotlin高手? 歡迎加入開發行列 https://github.com/yairm210/Unciv.\n\n世界正在等著你! 你的文明是否經的起時間考驗?\n\n'擁有完整網路權限'存取,主要用於使用者主動發起多人連線遊戲。為了實現多人連線的通知,也需要其他已列出的權限。網路權限主要用於顯示/下載mod,下載音樂,以及上傳/下載多人遊戲進度。沒有其他網路連線會由Unciv遊戲方主動發起。 # Starting from here normal translations start, as described in @@ -6577,7 +6577,7 @@ Landship = 履帶戰車 #################### Lines from Tutorials #################### Introduction = 遊戲介紹 -Welcome to Unciv!\nBecause this is a complex game, there are basic tasks to help familiarize you with the game.\nThese are completely optional, and you're welcome to explore the game on your own! = 您好,歡迎來到絢麗多彩的UnCiv遊戲世界!\n文明遊戲是複雜的,讓我們通過一些簡單的任務來熟悉它吧。\n這些任務是可選的,當然您也可以自己探索遊戲世界! +Welcome to Unciv!\nBecause this is a complex game, there are basic tasks to help familiarize you with the game.\nThese are completely optional, and you're welcome to explore the game on your own! = 您好,歡迎來到絢麗多彩的Unciv遊戲世界!\n文明遊戲是複雜的,讓我們通過一些簡單的任務來熟悉它吧。\n這些任務是可選的,當然您也可以自己探索遊戲世界! New Game = 開始新遊戲 Your first mission is to found your capital city.\nThis is actually an important task because your capital city will probably be your most prosperous.\nMany game bonuses apply only to your capital city and it will probably be the center of your empire. = 您的第一個任務是建立首都,\n這個任務是非常重要的,因為通常情況下首都會成為你的文明最繁榮的城市。\n遊戲中解鎖政策、科技等帶來的很多增益往往只對首都有效,所以首都的發展代表了您的文明的發達程度。 @@ -6657,9 +6657,9 @@ Idle Units = 空閒單位 If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Contact Me = 聯繫我吧! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = 很好!當您已經熟悉了遊戲的全部內容,\n您會發現遊戲目前是不完整的,它還處於開發狀態。\n不過UnCiv將永遠是開源和免費的,\n這意味著您無須擔心廣告或付費問題。 +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = 很好!當您已經熟悉了遊戲的全部內容,\n您會發現遊戲目前是不完整的,它還處於開發狀態。\n不過Unciv將永遠是開源和免費的,\n這意味著您無須擔心廣告或付費問題。 What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = 您的支持將激勵著我進一步完善它,\n我一定會竭盡全力、精益求精。\n感謝玩家們的支持--您們是最棒的! -Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = 如果喜歡它,請到Play Store對它進行評價。\n如果您發現了遊戲存在的問題或有什麼好的意見和建議,\n請聯繫我!\n我的email地址:yairm210@hotmail.com,\nGitHub專案頁面:https://github.com/yairm210/UnCiv。 +Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = 如果喜歡它,請到Play Store對它進行評價。\n如果您發現了遊戲存在的問題或有什麼好的意見和建議,\n請聯繫我!\n我的email地址:yairm210@hotmail.com,\nGitHub專案頁面:https://github.com/yairm210/Unciv。 Pillaging = 劫掠 # Requires translation! diff --git a/android/assets/jsons/translations/Turkish.properties b/android/assets/jsons/translations/Turkish.properties index d8b5d50802..6827e28809 100644 --- a/android/assets/jsons/translations/Turkish.properties +++ b/android/assets/jsons/translations/Turkish.properties @@ -7177,7 +7177,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un Contact Me = Bana Ulaşın # Requires translation! -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = # Requires translation! What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = # Requires translation! diff --git a/android/assets/jsons/translations/Ukrainian.properties b/android/assets/jsons/translations/Ukrainian.properties index 680dd0c47b..d4a564fbf5 100644 --- a/android/assets/jsons/translations/Ukrainian.properties +++ b/android/assets/jsons/translations/Ukrainian.properties @@ -6035,7 +6035,7 @@ Idle Units = Незайняті одиниці If you don't want to move a unit this turn, you can skip it by clicking 'Next unit' again.\nIf you won't be moving it for a while, you can have the unit enter Fortify or Sleep mode - \n units in Fortify or Sleep are not considered idle units.\nIf you have not decided yet what an unit should do for the current turn, choose the 'Wait' command. A 'waiting' unit will be selected again at the end of the 'Next Unit' cycle, once all other units have received their orders.\nIf you want to disable the 'Next unit' feature entirely, you can toggle it in Menu -> Check for idle units. = Contact Me = Зв’яжіться зі мною -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Привіт! Якщо ви зайшли так далеко,\n то, напевно, бачили, що гра наразі незавершена.\nUnCiv — це гра безкоштовна та з відкритим вихідним кодом. Так буде завжди,\n тобто це означає, що не буде реклами чи іншої нісенітниці. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Привіт! Якщо ви зайшли так далеко,\n то, напевно, бачили, що гра наразі незавершена.\nUnciv — це гра безкоштовна та з відкритим вихідним кодом. Так буде завжди,\n тобто це означає, що не буде реклами чи іншої нісенітниці. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = Що мотивує мене продовжувати працювати над нею, \n крім того, що я думаю, що це дивовижно, що я можу,\n це підтримка від гравців — ви, хлопці та дівчата, найкращі! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Кожна оцінка та відгуки, які я отримую, викликають радість на моєму обличчі =).\n Тож зв’яжіться зі мною! Надішліть мені електронний лист, відгук, чи опис проблеми на Github\n або поштового голуба для того, щоб розібратися, як зробити гру \n ще більш чудовою!\n(Контактна інформація знаходиться в Google Play) diff --git a/android/assets/jsons/translations/Vietnamese.properties b/android/assets/jsons/translations/Vietnamese.properties index 4a45265416..a23dca837c 100644 --- a/android/assets/jsons/translations/Vietnamese.properties +++ b/android/assets/jsons/translations/Vietnamese.properties @@ -1,7 +1,7 @@ # Tutorial tasks -#Fanpage UnCiv Việt Nam https://www.facebook.com/101649856020305 -#Group UnCiv Việt Nam https://www.facebook.com/groups/1027414197932675 +#Fanpage Unciv Việt Nam https://www.facebook.com/101649856020305 +#Group Unciv Việt Nam https://www.facebook.com/groups/1027414197932675 Move a unit!\nClick on a unit > Click on a destination > Click the arrow popup = Chọn một đơn vị!\n Nhấn vào một đơn vị > Chọn địa điểm cần đến > Nhấn vào mũi tên được hiện lên Found a city!\nSelect the Settler (flag unit) > Click on 'Found city' (bottom-left corner) = Lập thành phố!\n Chọn Người khai hoang (đơn vị hình lá cờ) > Chọn 'Lập thành phố' (góc dưới bên trái) Enter the city screen!\nClick the city button twice = Vào màn hình thành phố!\n Nhấn vào thành phố 2 lần @@ -5364,7 +5364,7 @@ If you don't want to move a unit this turn, you can skip it by clicking 'Next un # Requires translation! Contact Me = -Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n UnCiv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. +Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. = Hi there! If you've played this far, you've probably seen that the game is currently incomplete.\n Unciv is meant to be open-source and free, forever.\n That means no ads or any other nonsense. What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! = What motivates me to keep working on it, \n besides the fact I think it's amazingly cool that I can,\n is the support from the players - you guys are the best! Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) = Every rating and review that I get puts a smile on my face =)\n So contact me! Send me an email, review, Github issue\n or mail pigeon, and let's figure out how to make the game \n even more awesome!\n(Contact info is in the Play Store) diff --git a/android/res/values-de/strings.xml b/android/res/values-de/strings.xml index 783252fda3..d3642fc60a 100644 --- a/android/res/values-de/strings.xml +++ b/android/res/values-de/strings.xml @@ -1,6 +1,6 @@ - UnCiv + Unciv Unciv - Du bist am Zug! Deine Freunde warten auf deinen Zug in [gameName]. Ein Fehler ist aufgetreten @@ -17,4 +17,4 @@ Stacktraces in Zwischenablage kopiert. Kopiere Stacktraces in Zwischenablage Fehler, wiederhole… - \ No newline at end of file + diff --git a/android/res/values-fr/strings.xml b/android/res/values-fr/strings.xml index 90e9dfb4e8..d68d8d7179 100644 --- a/android/res/values-fr/strings.xml +++ b/android/res/values-fr/strings.xml @@ -1,9 +1,9 @@ - UnCiv + Unciv Unciv - C\'est à vous ! Vos amis attendent votre action dans [gameName]. Service de notification du tour multijoueur terminé Une erreur est survenue Configurable dans le menu des options de Unciv - \ No newline at end of file + diff --git a/android/res/values-ro/strings.xml b/android/res/values-ro/strings.xml index 304d090e93..fa93be1dee 100644 --- a/android/res/values-ro/strings.xml +++ b/android/res/values-ro/strings.xml @@ -1,6 +1,6 @@ - UnCiv + Unciv Unciv - Este rândul tău! Prietenii tăi asteaptă după tine in [gameName]. A aparut o eroare diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml index 1598a7ad0c..784c5aaaee 100644 --- a/android/res/values/strings.xml +++ b/android/res/values/strings.xml @@ -3,7 +3,7 @@ - UnCiv + Unciv Unciv - It\'s your turn! Your friends are waiting for your turn in [gameName]. An error has occurred diff --git a/core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt b/core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt index 838bbd6669..c08135b502 100644 --- a/core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt +++ b/core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt @@ -304,7 +304,7 @@ object ReligionAutomation { // adjusts scores of certain beliefs as game evolves (adapted from Civ 5 DLL files on AI belief selection) // enable differentiation of early vs late founding of religion and early vs late enhancement of religion - // this is mainly for mods which may shuffle enhancer and founder beliefs w.r.t. base UnCiv + // this is mainly for mods which may shuffle enhancer and founder beliefs w.r.t. base Unciv var gameTimeScalingPercent = 100 when (civInfo.religionManager.religionState) { ReligionState.FoundingReligion -> { diff --git a/core/src/com/unciv/ui/worldscreen/mainmenu/WorldScreenMenuPopup.kt b/core/src/com/unciv/ui/worldscreen/mainmenu/WorldScreenMenuPopup.kt index a83294afb9..1221216e1c 100644 --- a/core/src/com/unciv/ui/worldscreen/mainmenu/WorldScreenMenuPopup.kt +++ b/core/src/com/unciv/ui/worldscreen/mainmenu/WorldScreenMenuPopup.kt @@ -64,7 +64,7 @@ class WorldScreenCommunityPopup(val worldScreen: WorldScreen) : Popup(worldScree }.row() addButton("Github") { - Gdx.net.openURI("https://github.com/yairm210/UnCiv") + Gdx.net.openURI("https://github.com/yairm210/Unciv") close() }.row() diff --git a/desktop/src/com/unciv/app/desktop/ImagePacker.kt b/desktop/src/com/unciv/app/desktop/ImagePacker.kt index 76d7e5e2ad..01366001bb 100644 --- a/desktop/src/com/unciv/app/desktop/ImagePacker.kt +++ b/desktop/src/com/unciv/app/desktop/ImagePacker.kt @@ -21,7 +21,7 @@ internal object ImagePacker { private fun getDefaultSettings() = TexturePacker.Settings().apply { // Apparently some chipsets, like NVIDIA Tegra 3 graphics chipset (used in Asus TF700T tablet), // don't support non-power-of-two texture sizes - kudos @yuroller! - // https://github.com/yairm210/UnCiv/issues/1340 + // https://github.com/yairm210/Unciv/issues/1340 /** * These should be as big as possible in order to accommodate ALL the images together in one big file. diff --git a/docs/Other/Installing-on-macOS.md b/docs/Other/Installing-on-macOS.md index 293b5874a5..dc7fa65c7a 100644 --- a/docs/Other/Installing-on-macOS.md +++ b/docs/Other/Installing-on-macOS.md @@ -1,18 +1,18 @@ # Installing on macOS -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. +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 1. If you don't already have Java 8 installed on your mac make sure you download it from the [official website](https://java.com/en/download/). Once you have downloaded the file open it and follow the instructions on screen. -2. Now that you have Java 8 installed it's time to download the latest Unciv JAR. This can be done from the [releases](https://github.com/yairm210/UnCiv/releases) screen here on Github. Download the file called Unciv.jar. +2. Now that you have Java 8 installed it's time to download the latest Unciv JAR. This can be done from the [releases](https://github.com/yairm210/Unciv/releases) screen here on Github. Download the file called Unciv.jar. 3. To run the game, you'll need to create to run `java -XstartOnFirstThread -Djava.awt.headless=true -jar Unciv.jar` from a Terminal. 4. Alternatively, you could create a 'Unciv.sh' file containing that line, and then run the new file, to allow you to create shortcuts etc. -_(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.)_ +_(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](../Developers/Building-Locally.md). 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. +For instructions on how to install Unciv from source see [Building locally without Android Studio](../Developers/Building-Locally.md). 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.)_ +_(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.)_ diff --git a/fastlane/metadata/android/ca/full_description.txt b/fastlane/metadata/android/ca/full_description.txt index 80e057e4a8..88a5223c07 100644 --- a/fastlane/metadata/android/ca/full_description.txt +++ b/fastlane/metadata/android/ca/full_description.txt @@ -2,13 +2,13 @@ Una reimplementació del joc de construcció de civilitzacions més famós - rà Construïu la vostra civilització, investigueu tecnologies, expandiu les ciutats i derroteu els enemics! -Si teniu suggeriments o trobeu algun error, ho podeu comunicar a la llista de problemes de l’aplicació de GitHub. Qualsevol ajuda, per petita que sigui, serà benvinguda! +Si teniu suggeriments o trobeu algun error, ho podeu comunicar a la llista de problemes de l’aplicació de GitHub. Qualsevol ajuda, per petita que sigui, serà benvinguda! Uniu-vos al canal del Discord si teniu preguntes, comentaris o esteu avorrits. Si voleu ajudar en la traducció del joc, seguiu les instruccions a l’article d’instruccions de traducció de l’Unciv. -Sabeu programar amb Grok Java o Kotlin? Podeu col·laborar amb el desenvolupament del joc a la pàgina de GitHub. +Sabeu programar amb Grok Java o Kotlin? Podeu col·laborar amb el desenvolupament del joc a la pàgina de GitHub. El món espera! Podreu conduir la vostra civilització i convertir-la en un imperi que sobrevisqui al pas del temps? diff --git a/fastlane/metadata/android/de/full_description.txt b/fastlane/metadata/android/de/full_description.txt index 11ff4b7f79..8ff4653fb3 100644 --- a/fastlane/metadata/android/de/full_description.txt +++ b/fastlane/metadata/android/de/full_description.txt @@ -2,13 +2,13 @@ Eine Neuimplementierung vom berühmtesten Zivilisations-Aufbau-Spiel aller Zeite Baue Deine Zivilisation auf, erforsche Technologien, entwickle Deine Städte und besiege Deine Kontrahenten! -Wünsche? Bugs? Die Liste der offenen Themen findest du auf der GitHub Issues - Seite - jede noch so kleine Hilfe ist willkommen! +Wünsche? Bugs? Die Liste der offenen Themen findest du auf der GitHub Issues - Seite - jede noch so kleine Hilfe ist willkommen! Fragen? Kommentare? Einfach nur gelangweilt? Chatte mit uns auf Discord. Willst Du bei der Übersetzung helfen? Schau im Wiki vorbei, dort ist detailliert beschrieben, wie Übersetzungen erstellt und vorgeschlagen werden. -Schnallst Du Kotlin oder Java? Unterstütze gerne bei der Entwicklung im GitHub Repository. +Schnallst Du Kotlin oder Java? Unterstütze gerne bei der Entwicklung im GitHub Repository. Die Welt erwartet Dich! Wirst Du deine Zivilisation zu einem Imperium entwickeln, das dem Zahn der Zeit standhält? diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index 2e799f91a6..8232572f0b 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -2,13 +2,13 @@ A reimplementation of the most famous civilization-building game ever - fast, sm Build your civilization, research technologies, expand your cities and defeat your foes! -Requests? Bugs? Todo list for the application is https://github.com/yairm210/UnCiv/issues, every small help is welcome! +Requests? Bugs? Todo list for the application is https://github.com/yairm210/Unciv/issues, every small help is welcome! Questions? Comments? Just bored? Join us on https://discord.gg/bjrB4Xw. Want to help translating the game into your language? Send me an email to yairm210@hotmail.com. -Grok Java or Kotlin? Join us at https://github.com/yairm210/UnCiv. +Grok Java or Kotlin? Join us at https://github.com/yairm210/Unciv. The world awaits! Will you build your civilization into an empire that will stand the test of time? diff --git a/fastlane/metadata/android/es/full_description.txt b/fastlane/metadata/android/es/full_description.txt index 2ca1fd0e3e..25e438917c 100644 --- a/fastlane/metadata/android/es/full_description.txt +++ b/fastlane/metadata/android/es/full_description.txt @@ -2,12 +2,12 @@ Una reimplementación del juego de construcción de civilizaciones más famoso d ¡Construye tu civilización, investiga tecnologías, expande tus ciudades y derrota a tus enemigos! -¿Peticiones?¿Errores? La lista de cosas por hacer de la aplicación es https://github.com/yairm210/UnCiv/issues, ¡toda pequeña ayuda es bienvenida! +¿Peticiones?¿Errores? La lista de cosas por hacer de la aplicación es https://github.com/yairm210/Unciv/issues, ¡toda pequeña ayuda es bienvenida! ¿Preguntas?¿Errores?¿Aburrido? Únetenos en https://discord.gg/bjrB4Xw. ¿Quieres ayudar a traducir el juego a tu idioma? Envíame un email a yairm210@hotmail.com. -¿Sabes escribir Java o Kotlin? Únetenos en https://github.com/yairm210/UnCiv.¡El mundo espera!¿Convertirás tu civilización en un imperio que resistirá el paso del tiempo? +¿Sabes escribir Java o Kotlin? Únetenos en https://github.com/yairm210/Unciv.¡El mundo espera!¿Convertirás tu civilización en un imperio que resistirá el paso del tiempo? Se requiere el permiso de "Tener acceso completo a la red" para descargas iniciadas por el usuario y el modo multijugador. Todos los demás permisos listados son incluidos automáticamente por el API usado para implementar las notificaciones de turnos en el modo multijugador. Los permisos de red son usados para contar mods, descargar mods, descargar música y para cargar/descargar partidas multijugador. Unciv no inicia ninguna otra comunicación por Internet. diff --git a/fastlane/metadata/android/fr/full_description.txt b/fastlane/metadata/android/fr/full_description.txt index 2ee614502c..d0f6e29723 100644 --- a/fastlane/metadata/android/fr/full_description.txt +++ b/fastlane/metadata/android/fr/full_description.txt @@ -2,13 +2,13 @@ Une réinterprétation open-source du plus célèbre jeu de gestion de civilisat Bâtissez votre empire, recherchez des technologies, étendez vos villes et éliminez vos adversaires! -Des suggestions? Des bugs? La liste des sujets ouverts se trouve sur la page Github - Issues. Toute aide est la bienvenue! +Des suggestions? Des bugs? La liste des sujets ouverts se trouve sur la page Github - Issues. Toute aide est la bienvenue! Des questions? Des commentaires? Ou juste du temps libre? Venez discuter avec nous sur le Discord d'Unciv. Vous souhaitez aider à la traduction du jeu dans votre langue? Suivez les instructions de l'article wiki destiné aux traducteurs. -Le codage Kotlin ou Java n'a aucun secret pour vous? N'hésitez pas à participer au développement sur la page Github. +Le codage Kotlin ou Java n'a aucun secret pour vous? N'hésitez pas à participer au développement sur la page Github. Le monde n'attend plus que vous! Bâtirez-vous une civilisation capable de résister au passage du temps? diff --git a/fastlane/metadata/android/in/full_description.txt b/fastlane/metadata/android/in/full_description.txt index e2c4c5298f..9e814baac6 100644 --- a/fastlane/metadata/android/in/full_description.txt +++ b/fastlane/metadata/android/in/full_description.txt @@ -2,13 +2,13 @@ Reimplementasi permainan pembangunan peradaban terpopuler - cepat, tidak memakan Bangun peradabanmu, teliti teknologi-teknologi baru, perluas kota-kotamu dan kalahkan musuh-musuhmu! -Permintaan? Eror? Daftar hal-hal yang akan dilakukan pada aplikasi ada di https://github.com/yairm210/UnCiv/issues, kami menerima bantuan-bantuanmu meskipun hanya sedikit! +Permintaan? Eror? Daftar hal-hal yang akan dilakukan pada aplikasi ada di https://github.com/yairm210/Unciv/issues, kami menerima bantuan-bantuanmu meskipun hanya sedikit! Pertanyaan? Komentar? Hanya mengisi waktu luang? Bergabunglah dengan kami di https://discord.gg/bjrB4Xw. Mau membantu menerjemahkan gim ini ke dalam bahasamu? Kirim email ke yairm210@hotmail.com. -Grok Java atau Kotlin? Bergabunglah dengan kami di https://github.com/yairm210/UnCiv. +Grok Java atau Kotlin? Bergabunglah dengan kami di https://github.com/yairm210/Unciv. Dunia menunggumu! Akankah kamu membangun peradabn menjadi sebuah kerajaan yang akan bertahan seiring berjalannya waktu? diff --git a/fastlane/metadata/android/ja/full_description.txt b/fastlane/metadata/android/ja/full_description.txt index 91e4406f37..714a908959 100644 --- a/fastlane/metadata/android/ja/full_description.txt +++ b/fastlane/metadata/android/ja/full_description.txt @@ -2,13 +2,13 @@ 文明を造り、テクノロジーを研究し、都市を広げ、ライバル文明を倒す! - リクエスト・バッグなどはこちらにお問い合わせ https://github.com/yairm210/UnCiv/issues + リクエスト・バッグなどはこちらにお問い合わせ https://github.com/yairm210/Unciv/issues こちらのDiscordでもご参加してください https://discord.gg/bjrB4Xw. このゲームを自分の母国語に翻訳したいですか? yairm210@hotmail.comまでお問い合わせお願します。 - Javaまたは、Kotlinできる方はぜひ参加してください! https://github.com/yairm210/UnCiv. + Javaまたは、Kotlinできる方はぜひ参加してください! https://github.com/yairm210/Unciv. 時代を超える帝国の文明を造られるのでしょうか?!世界がまっているぞ! diff --git a/fastlane/metadata/android/ko/full_description.txt b/fastlane/metadata/android/ko/full_description.txt index f230baa30f..08c4ba58d4 100644 --- a/fastlane/metadata/android/ko/full_description.txt +++ b/fastlane/metadata/android/ko/full_description.txt @@ -2,14 +2,14 @@ 문명을 건설하고, 기술을 연구하고, 도시를 확장하고, 적을 무찌르세요! -버그나 요청사항은 여기 남겨주세요. https://github.com/yairm210/UnCiv/issues +버그나 요청사항은 여기 남겨주세요. https://github.com/yairm210/Unciv/issues 아무리 사소한 것이라도 좋습니다! 질문, 후기 또는 그냥 심심하다면 커뮤니티로 오세요. https://discord.gg/bjrB4Xw 번역에 참여하시려면 게임 위키의 번역 페이지를 참고하세요. https://yairm210.github.io/Unciv/Other/Translating -자바나 코틀린에 능숙하시다면 개발에 참여해보세요. https://github.com/yairm210/UnCiv +자바나 코틀린에 능숙하시다면 개발에 참여해보세요. https://github.com/yairm210/Unciv 세계가 당신을 기다립니다! 세월의 시련을 이겨낼 문명을 건설해 주시겠습니까? diff --git a/fastlane/metadata/android/lt/full_description.txt b/fastlane/metadata/android/lt/full_description.txt index 870cf01388..7e7fb52fa0 100644 --- a/fastlane/metadata/android/lt/full_description.txt +++ b/fastlane/metadata/android/lt/full_description.txt @@ -1 +1 @@ -Garsaus civilizacijos žaidimo nauja realizacija - greita, maža, be reklamų, nemokamai! Kurk savo civilizaciją, atrask technologijas, plėsk miestus ir nugalėk priešus! Pasiūlymai? Klaidos? Žiūrėk čia https://github.com/yairm210/UnCiv/issues, bet kokia pagalba sveikintina! Klausimai? Komentarai? Junkis čia https://discord.gg/bjrB4Xw. Nori padėti vertimais į savo ar kitas kalbas? Siųsk laišką čia yairm210@hotmail.com. Programuoji Grok Java ar Kotlin? Junkis čia https://github.com/yairm210/UnCiv. Pasaulis laukia tavęs! Ar pavyks paversti savo civilizaciją į imperiją tvarią laiko ir kitiems iššūkiams? Failų atsisiuntimams ir kelių žaidėjų žaidimui reikalinga interneto teisė 'have full network access'. Kitos reikalingos teisės įdėtos į API. Interneto teisės naudojamos rodyti modifikacijų sąrašą, atsisiųsti modifikacijas, atsisiųsti muziką ir atsiųsti/nusiųsti kelių žaidėjų žaidimo duomenis. Kitokių interneto komunikaciju Unciv žaidimas nekuria. +Garsaus civilizacijos žaidimo nauja realizacija - greita, maža, be reklamų, nemokamai! Kurk savo civilizaciją, atrask technologijas, plėsk miestus ir nugalėk priešus! Pasiūlymai? Klaidos? Žiūrėk čia https://github.com/yairm210/Unciv/issues, bet kokia pagalba sveikintina! Klausimai? Komentarai? Junkis čia https://discord.gg/bjrB4Xw. Nori padėti vertimais į savo ar kitas kalbas? Siųsk laišką čia yairm210@hotmail.com. Programuoji Grok Java ar Kotlin? Junkis čia https://github.com/yairm210/Unciv. Pasaulis laukia tavęs! Ar pavyks paversti savo civilizaciją į imperiją tvarią laiko ir kitiems iššūkiams? Failų atsisiuntimams ir kelių žaidėjų žaidimui reikalinga interneto teisė 'have full network access'. Kitos reikalingos teisės įdėtos į API. Interneto teisės naudojamos rodyti modifikacijų sąrašą, atsisiųsti modifikacijas, atsisiųsti muziką ir atsiųsti/nusiųsti kelių žaidėjų žaidimo duomenis. Kitokių interneto komunikaciju Unciv žaidimas nekuria. diff --git a/fastlane/metadata/android/pt-BR/full_description.txt b/fastlane/metadata/android/pt-BR/full_description.txt index b846b47371..5ea5f4c002 100644 --- a/fastlane/metadata/android/pt-BR/full_description.txt +++ b/fastlane/metadata/android/pt-BR/full_description.txt @@ -2,13 +2,13 @@ Uma reimplementação do jogo de construção civil mais famoso de sempre - ráp Construa a sua civilização, pesquise tecnologias, expanda as suas cidades e derrote os seus inimigos! -Pedidos? Bugs? A lista de TODO para a aplicação está em https://github.com/yairm210/UnCiv/issues, toda ajuda é bem-vinda! +Pedidos? Bugs? A lista de TODO para a aplicação está em https://github.com/yairm210/Unciv/issues, toda ajuda é bem-vinda! Perguntas? Comentários? Apenas querendo conversar? Junte-se a nós em https://discord.gg/bjrB4Xw. Quer ajudar a traduzir o jogo para a sua língua? Envie-me um e-mail para yairm210@hotmail.com. -Grok Java ou Kotlin? Junte-se a nós em https://github.com/yairm210/UnCiv. +Grok Java ou Kotlin? Junte-se a nós em https://github.com/yairm210/Unciv. O mundo está à espera! Vai transformar a sua civilização num império que resistirá ao tempo? diff --git a/fastlane/metadata/android/pt/full_description.txt b/fastlane/metadata/android/pt/full_description.txt index b846b47371..5ea5f4c002 100644 --- a/fastlane/metadata/android/pt/full_description.txt +++ b/fastlane/metadata/android/pt/full_description.txt @@ -2,13 +2,13 @@ Uma reimplementação do jogo de construção civil mais famoso de sempre - ráp Construa a sua civilização, pesquise tecnologias, expanda as suas cidades e derrote os seus inimigos! -Pedidos? Bugs? A lista de TODO para a aplicação está em https://github.com/yairm210/UnCiv/issues, toda ajuda é bem-vinda! +Pedidos? Bugs? A lista de TODO para a aplicação está em https://github.com/yairm210/Unciv/issues, toda ajuda é bem-vinda! Perguntas? Comentários? Apenas querendo conversar? Junte-se a nós em https://discord.gg/bjrB4Xw. Quer ajudar a traduzir o jogo para a sua língua? Envie-me um e-mail para yairm210@hotmail.com. -Grok Java ou Kotlin? Junte-se a nós em https://github.com/yairm210/UnCiv. +Grok Java ou Kotlin? Junte-se a nós em https://github.com/yairm210/Unciv. O mundo está à espera! Vai transformar a sua civilização num império que resistirá ao tempo? diff --git a/fastlane/metadata/android/ro/full_description.txt b/fastlane/metadata/android/ro/full_description.txt index 468b77b544..fe2c1b5091 100644 --- a/fastlane/metadata/android/ro/full_description.txt +++ b/fastlane/metadata/android/ro/full_description.txt @@ -2,13 +2,13 @@ O reimplementare a celui mai faimos joc de construire a civilizației din toate Construiește-ți civilizația, cercetează tehnologii, extinde-ți orașele și învinge-ți dușmanii! -Cereri? Bug-uri? Lista de toate pentru aplicație este https://github.com/yairm210/UnCiv/issues, fiecare mic ajutor este binevenit! +Cereri? Bug-uri? Lista de toate pentru aplicație este https://github.com/yairm210/Unciv/issues, fiecare mic ajutor este binevenit! Întrebări? Comentarii? Doar plictisit? Alăturați-vă nouă pe https://discord.gg/bjrB4Xw. Vrei să ajuți la traducerea jocului în limba ta? Trimite-mi un e-mail la yairm210@hotmail.com. -Grok Java sau Kotlin? Alăturați-vă nouă la https://github.com/yairm210/UnCiv. +Grok Java sau Kotlin? Alăturați-vă nouă la https://github.com/yairm210/Unciv. Lumea așteaptă! Îți vei construi civilizația într-un imperiu care va rezista testului timpului? diff --git a/fastlane/metadata/android/ru/full_description.txt b/fastlane/metadata/android/ru/full_description.txt index 8a22fc3b10..eddec72032 100644 --- a/fastlane/metadata/android/ru/full_description.txt +++ b/fastlane/metadata/android/ru/full_description.txt @@ -2,13 +2,13 @@ Постройте свою цивилизацию, исследуйте технологии, расширяйте города и побеждайте врагов! -Пожелания? Баги? Список задач для разработки здесь: https://github.com/yairm210/UnCiv/issues. Приветствуем любую, даже небольшую помощь! +Пожелания? Баги? Список задач для разработки здесь: https://github.com/yairm210/Unciv/issues. Приветствуем любую, даже небольшую помощь! Вопросы? Комментарии? Просто скучно? Присоединяйтесь к нам: https://discord.gg/bjrB4Xw. Хотите помочь с переводом игры на ваш язык? Принимаю письма по этому адресу: yairm210@hotmail.com. -Являетесь знатоком Java или Kotlin? Присоединяйтесь к нам: https://github.com/yairm210/UnCiv. +Являетесь знатоком Java или Kotlin? Присоединяйтесь к нам: https://github.com/yairm210/Unciv. Мир ждёт вас! Сможете ли вы создать цивилизацию, что превратится в империю и выдержит натиск времени? diff --git a/fastlane/metadata/android/zh/full_description.txt b/fastlane/metadata/android/zh/full_description.txt index e8797687e7..90cd1b551b 100644 --- a/fastlane/metadata/android/zh/full_description.txt +++ b/fastlane/metadata/android/zh/full_description.txt @@ -2,13 +2,13 @@ 建立你的文明,研究科技,擴張你的城市並且擊敗你的敵人! -有新發現或Bugs想回報? 任何進行中的項目皆列在 https://github.com/yairm210/UnCiv/issues, 不管多小的點子都非常歡迎加入討論! +有新發現或Bugs想回報? 任何進行中的項目皆列在 https://github.com/yairm210/Unciv/issues, 不管多小的點子都非常歡迎加入討論! 遊玩有問題? 想找人討論? 或者單純無聊? 歡迎加入Discord群聊 https://discord.gg/bjrB4Xw. 想幫這款遊戲翻譯成你的母語? 歡迎透過Email聯繫: yairm210@hotmail.com. -Java 或 Kotlin高手? 歡迎加入開發行列 https://github.com/yairm210/UnCiv. +Java 或 Kotlin高手? 歡迎加入開發行列 https://github.com/yairm210/Unciv. 世界正在等著你! 你的文明是否經的起時間考驗? diff --git a/site/search/search_index.json b/site/search/search_index.json index efbcd806dd..e4b6b5c266 100644 --- a/site/search/search_index.json +++ b/site/search/search_index.json @@ -1 +1 @@ -{"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.(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 \\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 | | | 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 | | | 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 | | | 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 | | | 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 | | | 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 | | | 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 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 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 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 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 ) 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 ) 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 \\\", the 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 \\ \\\" 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 \\\", the 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 \\ \\\" 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"}]} \ No newline at end of file +{"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.(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 \\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 | | | 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 | | | 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 | | | 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 | | | 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 | | | 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 | | | 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 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 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 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 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 ) 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 ) 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 \\\", the 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 \\ \\\" 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 \\\", the 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 \\ \\\" 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"}]} diff --git a/site/wiki/Installing-on-macOS/index.html b/site/wiki/Installing-on-macOS/index.html index c044c586e5..85666b9226 100644 --- a/site/wiki/Installing-on-macOS/index.html +++ b/site/wiki/Installing-on-macOS/index.html @@ -2,79 +2,79 @@ - + - - - + + + - - - + + + Installing on macOS - My Docs - - - + + + - - + + - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - + + +
    - - + + Skip to content - +
    - +
    - - - + + +
    - +
    - +
    - - - - - - + + + + + +
    - - - + + +
    - + - - + +
    - - - + + +
    - +
    - - + +
    - - + +

    Installing on macOS

    -

    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.

    +

    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

    1. 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.
    2. -
    3. 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.
    4. +
    5. 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.
    6. 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.
    7. 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.
    8. -
    9. 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.
    10. +
    11. 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.)

    +

    (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.)

    +

    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.)

    + -
    - +
    - +
    - - - + + +
    - - + + - - + + - \ No newline at end of file +