Civilopedia phase7 (#4628)

* Civilopedia phase 7 - Terrain

* Civilopedia phase 7 - Terrain - tuning

* Civilopedia phase 7 - Terrain - patch1 "for"

* Civilopedia phase 7 - Terrain - patch2 for #4641
This commit is contained in:
SomeTroglodyte 2021-07-27 09:41:25 +02:00 committed by GitHub
parent 8c9e7fa7da
commit 34717008b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
43 changed files with 483 additions and 220 deletions

View File

@ -96,8 +96,9 @@
"unbuildable": true,
"defenceBonus": 0.25,
"occursOn": ["Tundra","Plains","Grassland","Hill"],
"uniques": ["Provides a one-time Production bonus to the closest city when cut down", "Rough terrain",
"Blocks line-of-sight from tiles at same elevation", "Resistant to nukes", "Can be destroyed by nukes"]
"uniques": ["Rough terrain", "Provides a one-time Production bonus to the closest city when cut down",
"Blocks line-of-sight from tiles at same elevation", "Resistant to nukes", "Can be destroyed by nukes"],
"civilopediaText": [{"text":"A Camp can be built here without cutting it down", "link":"Improvement/Camp"}]
},
{
"name": "Jungle",
@ -118,7 +119,8 @@
"unbuildable": true,
"defenceBonus": -0.15,
"occursOn": ["Grassland"],
"uniques": ["Rare feature"]
"uniques": ["Rare feature"],
"civilopediaText": [{"text":"Only Polders can be built here", "link":"Improvement/Polder"}]
},
{
"name": "Fallout",

View File

@ -90,7 +90,7 @@
"terrainsCanBeBuiltOn": ["Plains","Grassland","Desert","Hill","Tundra","Snow","Forest","Jungle"],
"turnsToBuild": 6,
"techRequired": "Engineering",
"uniques": ["Gives a defensive bonus of [50]%", "Can be built outside your borders"],
"uniques": ["Can be built outside your borders", "Gives a defensive bonus of [50]%"],
"shortcutKey": "O"
},
@ -102,9 +102,9 @@
"uniques": ["Can be built outside your borders", "Costs [1] gold per turn when in your territory"],
"shortcutKey": "R",
"civilopediaText": [
{text:"Reduces movement cost to ½ if the other tile also has a Road or Railroad"},
{text:"Reduces movement cost to ⅓ with Machinery",link:"Technology/Machinery"},
{text:"Requires Engineering to bridge rivers",link:"Technology/Engineering"}
{"text":"Reduces movement cost to ½ if the other tile also has a Road or Railroad"},
{"text":"Reduces movement cost to ⅓ with Machinery", "link":"Technology/Machinery"},
{"text":"Requires Engineering to bridge rivers", "link":"Technology/Engineering"}
]
},
{
@ -113,7 +113,7 @@
"techRequired": "Railroads",
"uniques": ["Can be built outside your borders", "Costs [2] gold per turn when in your territory"],
"shortcutKey": "R",
"civilopediaText": [{text:"Reduces movement cost to ⅒ if the other tile also has a Railroad"}]
"civilopediaText": [{"text":"Reduces movement cost to ⅒ if the other tile also has a Railroad"}]
},
// Removals
@ -124,7 +124,7 @@
"techRequired": "Mining",
"uniques": ["Can be built outside your borders"],
"shortcutKey": "X",
"civilopediaText": [{text:"Provides a one-time Production bonus depending on distance to the closest city once finished"}]
"civilopediaText": [{"text":"Provides a one-time Production bonus depending on distance to the closest city once finished"}]
},
{
"name": "Remove Jungle",
@ -196,8 +196,8 @@
},
{
"name": "Citadel",
"uniques": ["Gives a defensive bonus of [100]%", "Deal 30 damage to adjacent enemy units", "Great Improvement", "Can be built just outside your borders"],
"civilopediaText": [{text:"Constructing it will take over the tiles around it and assign them to your closest city"}]
"uniques": ["Great Improvement", "Gives a defensive bonus of [100]%", "Deal 30 damage to adjacent enemy units", "Can be built just outside your borders"],
"civilopediaText": [{"text":"Constructing it will take over the tiles around it and assign them to your closest city"}]
},
//Civilization unique improvements
@ -206,7 +206,7 @@
"uniqueTo": "Polynesia",
"culture": 1,
"turnsToBuild": 4,
"uniques": ["[+1 Culture] for each adjacent [Moai]", "Can only be built on [Coastal] tiles", "[+1 Gold] once [Flight] is discovered"],
"uniques": ["Can only be built on [Coastal] tiles", "[+1 Culture] for each adjacent [Moai]", "[+1 Gold] once [Flight] is discovered"],
"techRequired": "Construction",
"shortcutKey": "M"
},
@ -216,7 +216,8 @@
"terrainsCanBeBuiltOn": ["Hill"],
"food": 1,
"turnsToBuild": 7,
"uniques": ["[+1 Food] for each adjacent [Mountain]", "Cannot be built on [Bonus resource] tiles",
"uniques": ["Cannot be built on [Bonus resource] tiles",
"[+1 Food] for each adjacent [Mountain]",
"[+1 Food] on [Fresh water] tiles once [Civil Service] is discovered",
"[+1 Food] on [non-fresh water] tiles once [Fertilizer] is discovered"],
"techRequired": "Construction",
@ -232,13 +233,29 @@
"techRequired": "Guilds",
"shortcutKey": "F"
},
{ "name": "Ancient ruins", "uniques": ["Unpillagable"],
"civilopediaText": [{text:"Ancient ruins provide a one-time random bonus when explored"}] },
"civilopediaText": [
{"text":"Ancient ruins provide a one-time random bonus when explored"},
{},
{"text":"The possible rewards are:"},
{"text":"a stash of gold", "indent":1, "starred":true, "color":"#ffeb7f"},
{"text":"survivors (adds population to a city)", "indent":1, "starred":true, "color":"#81c784"},
{"text":"discover a lost technology", "indent":1, "starred":true, "color":"#7f7fff"},
{"text":"a unit joins you", "indent":1, "starred":true},
{"text":"your exploring unit receives training", "indent":1, "starred":true}, // "link":"Tutorial/Experience"
{"text":"discover cultural artifacts", "indent":1, "starred":true, "color":"#cf8ff7"},
{"text":"find a crudely-drawn map", "indent":1, "starred":true}
]
},
{ "name": "City ruins", "uniques": ["Unpillagable"],
"civilopediaText": [{text:"A bleak reminder of the destruction wreaked by War"}] },
"civilopediaText": [{"text":"A bleak reminder of the destruction wreaked by War"}] },
{ "name": "City center", "uniques": ["Unpillagable", "Indestructible"],
"civilopediaText": [{text:"Marks the center of a city"},{text:"Appearance changes with the technological era of the owning civilization"}] },
"civilopediaText": [
{"text":"Marks the center of a city"},
{"text":"Appearance changes with the technological era of the owning civilization"}
]
},
{ "name": "Barbarian encampment", "uniques": ["Unpillagable"],
"civilopediaText": [{text:"Home to uncivilized barbarians, will spawn a hostile unit from time to time"}] }
"civilopediaText": [{"text":"Home to uncivilized barbarians, will spawn a hostile unit from time to time"}] }
]

View File

@ -951,16 +951,16 @@ Upgrades to [upgradedUnit] = Melhorar para [upgradedUnit]
Obsolete with [obsoleteTech] = Obsoleto com [obsoleteTech]
Occurs on [listOfTerrains] = Ocorre em [listOfTerrains]
Placed on [terrainType] = Colocado em [terrainType]
Can be found on = Pode ser encontrado em
Can be found on = Pode ser encontrado em
Improved by [improvement] = Melhorado por [improvement]
Bonus stats for improvement = Bônus de estatísticas por melhoria
Buildings that consume this resource = Construções que consomem esse recurso
Units that consume this resource = Unidades que consomem esse recurso
Can be built on = Pode ser construído em
Can be built on = Pode ser construído em
Defence bonus = Bônus de defesa
Movement cost = Custo de movimento
Rough Terrain = Terreno Bruto
for = Por
for = Por
Missing translations: = Traduções faltando:
Version = Versão
Resolution = Resolução

View File

@ -941,16 +941,16 @@ Upgrades to [upgradedUnit] = Подобрява се до [upgradedUnit]
Obsolete with [obsoleteTech] = Остарял/а/о от [obsoleteTech]
Occurs on [listOfTerrains] = Появява се на [listOfTerrains]
Placed on [terrainType] = Поставен на [terrainType]
Can be found on = Може да се открие на
Can be found on = Може да се открие на
Improved by [improvement] = Подобрено от [improvement]
Bonus stats for improvement = Бонус за подобрение
Buildings that consume this resource = Сгради, изискващи този ресурс
Units that consume this resource = Единици, изискващи този ресурс
Can be built on = Може да се построи на
Can be built on = Може да се построи на
Defence bonus = Защитен бонус
Movement cost = Струва (движение)
Rough Terrain = Пресечен терен
for = за
for = за
Missing translations: = Липса на превод:
Version = Версия
Resolution = Резолюция

View File

@ -861,16 +861,16 @@ Upgrades to [upgradedUnit] = Vylepšení na [upgradedUnit]
Obsolete with [obsoleteTech] = Zastará s technologií [obsoleteTech]
Occurs on [listOfTerrains] = Nalézá se na [listOfTerrains]
Placed on [terrainType] = Umístěn na [terrainType]
Can be found on = Může se objevit na
Can be found on = Může se objevit na
Improved by [improvement] = Vylepšeno díky [improvement]
Bonus stats for improvement = Bonusové statistiky pro vylepšení
Buildings that consume this resource = Budovy spotřebovávající tuto surovinu
Units that consume this resource = Jednotky spotřebovávající tuto surovinu
Can be built on = Může být vybudováno na
Can be built on = Může být vybudováno na
Defence bonus = Obranný bonus
Movement cost = Náročnost pohybu
Rough Terrain = Obtížný terén
for = za
for = za
Missing translations: = Chybějící překlady:
Version = Verze
Resolution = Rozlišení

View File

@ -927,16 +927,16 @@ Upgrades to [upgradedUnit] = Wordt opgewaardeerd tot [upgradedUnit]
Obsolete with [obsoleteTech] = Overbodig met [obsoleteTech]
Occurs on [listOfTerrains] = Doet zich voor op [listOfTerrains]
Placed on [terrainType] = Geplaatst op [terrainType]
Can be found on = Kan gevonden worden op
Can be found on = Kan gevonden worden op
Improved by [improvement] = Verbeterd door [improvement]
Bonus stats for improvement = Bonus statistieken door verbetering
Buildings that consume this resource = Gebouwen die deze grondstof gebruiken
Units that consume this resource = Eenheden die deze grondstof gebruiken
Can be built on = Kan gebouwd worden op
Can be built on = Kan gebouwd worden op
Defence bonus = Verdedigingsbonus
Movement cost = Bewegingskost
Rough Terrain = Ruw terrein
for = voor
for = voor
Missing translations: = Ontbrekende vertalingen:
Version = Versie
Resolution = Resolutie

View File

@ -1596,8 +1596,6 @@ Occurs on [listOfTerrains] =
# Requires translation!
Placed on [terrainType] =
# Requires translation!
Can be found on =
# Requires translation!
Improved by [improvement] =
# Requires translation!
Bonus stats for improvement =
@ -1606,16 +1604,12 @@ Buildings that consume this resource =
# Requires translation!
Units that consume this resource =
# Requires translation!
Can be built on =
# Requires translation!
Defence bonus =
# Requires translation!
Movement cost =
# Requires translation!
Rough Terrain =
# Requires translation!
for =
# Requires translation!
Missing translations: =
# Requires translation!
Version =

View File

@ -875,17 +875,17 @@ Upgrades to [upgradedUnit] = Päivittyy yksiköksi [upgradedUnit]
Obsolete with [obsoleteTech] = Vanhentuu tutkittaessa teknologian [obsoleteTech]
Occurs on [listOfTerrains] = Esiintyy: [listOfTerrains]
Placed on [terrainType] = Sijoitettu maastoon [terrainType]
Can be found on = Voidaan löytää:
Can be found on = Voidaan löytää
Improved by [improvement] = Parannettu parannuksella [improvement]
Bonus stats for improvement = Bonukset parannukselle
Buildings that consume this resource = Rakennukset jotka kuluttavat tätä resurssia
Units that consume this resource = Yksiköt jotka kuluttavat tätä resurssia
Can be built on = Voidaan rakentaa:
Can be built on = Voidaan rakentaa
Defence bonus = Puolustusbonus
Movement cost = Liikkumisen hinta
Rough Terrain = Vaikea Maasto
# Requires translation!
for =
for =
Missing translations: = Puuttuvat käännökset
Version = Versio
Resolution = Resoluutio

View File

@ -910,16 +910,16 @@ Upgrades to [upgradedUnit] = Améliorer en [upgradedUnit]
Obsolete with [obsoleteTech] = Obsolète avec [obsoleteTech]
Occurs on [listOfTerrains] = Possible sur [listOfTerrains]
Placed on [terrainType] = Placé en [terrainType]
Can be found on = Peut être trouvé sur
Can be found on = Peut être trouvé sur
Improved by [improvement] = Amélioré par [improvement]
Bonus stats for improvement = Bonus de case aménagée
Buildings that consume this resource = Bâtiments consommant cette ressource
Units that consume this resource = Unités consommant cette ressource
Can be built on = Peut être construit sur
Can be built on = Peut être construit sur
Defence bonus = Bonus de défense
Movement cost = Coût de mouvement
Rough Terrain = Terrain accidenté
for = pour
for = pour
Missing translations: = Traductions manquantes:
Version = Version
Resolution = Résolution

View File

@ -229,7 +229,7 @@ Number of City-States = Anzahl Stadtstaaten
One City Challenge = Herausforderung nur eine Stadt
No Barbarians = Keine Barbaren
No Ancient Ruins = Keine altertümlichen Ruinen
No Natural Wonders = Keine Natürlichen Wunder
No Natural Wonders = Keine Naturwunder
Victory Conditions = Siegbedingungen
Scientific = Wissenschaftlich
Domination = Vorherrschaft
@ -772,7 +772,7 @@ Our Civilization: = Unsere Zivilisation:
Known and alive ([numberOfCivs]) = Bekannt und am Leben ([numberOfCivs])
Known and defeated ([numberOfCivs]) = Bekannt und besiegt ([numberOfCivs])
Tiles = Felder
Natural Wonders = Natürliche Wunder
Natural Wonders = Naturwunder
Treasury deficit = Schatzkammerdefizit
# Victory
@ -839,21 +839,25 @@ Unique to [civName], replaces [unitName] = Einzigartig für Zivilisation [civNam
Unique to [civName] = Einzigartig für Zivilisation [civName]
Tutorials = Tutorials
Cost = Kosten
May contain [listOfResources] = kann [listOfResources] enthalten
May contain [listOfResources] = Kann [listOfResources] enthalten
May contain: = Kann folgende Ressourcen enthalten:
Upgrades to [upgradedUnit] = Kann zu [upgradedUnit] aufrüsten
Obsolete with [obsoleteTech] = Überflüssig mit [obsoleteTech]
Occurs on [listOfTerrains] = Kommt vor in [listOfTerrains]
Occurs on: = Kommt vor in:
Placed on [terrainType] = Platziert auf [terrainType]
Can be found on = Kann gefunden werden in
Can be found on = Kann gefunden werden in
Improved by [improvement] = Wird verbessert durch [improvement]
Bonus stats for improvement = Boni für Verbesserung
Buildings that consume this resource = Gebäude welche diese Ressource brauchen
Units that consume this resource = Einheiten welche diese Ressource brauchen
Can be built on = Kann gebaut werden auf
Buildings that consume this resource = Gebäude welche diese Ressource verbrauchen
Buildings that require this resource worked near the city = Gebäude welche diese Ressource bewirtschaftet in der Nähe der Stadt benötigen
Units that consume this resource = Einheiten welche diese Ressource verbrauchen
Can be built on = Kann gebaut werden auf
Can be constructed by = Kann erbaut werden von
Defence bonus = Verteidigungsbonus
Movement cost = Bewegungskosten
Rough Terrain = Unwegsames Gelände
for = für
for = für
Missing translations: = Fehlende Übersetzungen:
Version = Version
Resolution = Auflösung
@ -938,21 +942,16 @@ All policies adopted = Alle Politiken sind bereits verabschiedet
Choose an Icon and name for your Religion = Wähle ein Symbol und einen Namen für deine Religion
Choose a [$beliefType] belief! = Wähle einen [$beliefType] Glauben!
Found [religionName] = [religionName] gründen
# Requires translation!
Choose a pantheon =
# Requires translation!
Found Religion =
# Requires translation!
Found Pantheon =
# Requires translation!
Follow [belief] =
# Requires translation!
Religions and Beliefs =
Choose a pantheon = Wähle einen Pantheon
Found Religion = Religion gründen
Found Pantheon = Pantheon gründen
Follow [belief] = An [belief] glauben
Religions and Beliefs = Religionen und Glaube
# Terrains
Impassable = Unpassierbar
Rare feature = Seltene Eigenschaft
Rare feature = Seltene Geländeform
# Resources
@ -1100,6 +1099,8 @@ in all cities with a garrison = in allen Städten mit einer Garnison
# Requires translation!
Ancestor Worship =
# Requires translation!
Pantheon = Pantheon
# Requires translation!
Dance of the Aurora =
@ -1183,6 +1184,8 @@ Stone Circles =
# Requires translation!
Divine inspiration =
# Requires translation!
Follower = Anhänger
[stats] from every Wonder = [stats] von jedem Wunder
# Requires translation!
@ -2603,9 +2606,9 @@ If my defeat is, without any doubt, the will of God, then I will accept it. = We
God blesses those who deserve it. I am Isabel of Spain. = Gott segnet diejenigen, die dessen würdig sind. Ich bin Isabella von Spanien.
I hope this deal will receive your blessing. = Ich hoffe dieser Handel wird Euren Segen erhalten.
Seven Cities of Gold = Die Sieben Goldenen Städte
Double Happiness from Natural Wonders = Verdoppelt Zufriedenheit von Natürlichen Wundern
Tile yields from Natural Wonders doubled = Verdoppelt Felderträge von Natürlichen Wundern
100 Gold for discovering a Natural Wonder (bonus enhanced to 500 Gold if first to discover it) = 100 Gold beim Entdecken eines Natürlichen Wunders (Bonus erhöht sich auf 500 Gold, wenn zuerst entdeckt)
Double Happiness from Natural Wonders = Verdoppelt Zufriedenheit von Naturwundern
Tile yields from Natural Wonders doubled = Verdoppelt Felderträge von Naturwundern
100 Gold for discovering a Natural Wonder (bonus enhanced to 500 Gold if first to discover it) = 100 Gold beim Entdecken eines Naturwunders (Bonus erhöht sich auf 500 Gold, wenn zuerst entdeckt)
Blessed Isabella, servant of God, holy queen of Castille and León! Your people greet and welcome you. You are the ruler of Spain, a beautiful and ancient country at the crossroads of the world between Europe and Africa, one shore on the Mediterranean and the other on the mighty Atlantic Ocean. The Spanish are a multicultural people with roots in the Muslim and Christian worlds. A seafaring race, Spanish explorers found and conquered much of the New World, and, for many centuries, its gold and silver brought Spain unrivalled wealth and power, making the Spanish court the envy of the world. = Gesegnete Isabella, Dienerin Gottes, heilige Königin von Kastilien und León! Euer Volk grüßt und heißt euch willkommen. Ihr seid die Herrscherin Spaniens, eines schönen und alten Landes an der Kreuzung der Welt zwischen Europa und Afrika, das eine Ufer am Mittelmeer, das andere am mächtigen Atlantik. Die Spanier sind ein multikulturelles Volk mit Wurzeln in der muslimischen und christlichen Welt. Als Seefahrervolk entdeckten und eroberten spanische Entdecker einen Großteil der Neuen Welt, und über viele Jahrhunderte hinweg bescherten sie Spanien mit ihrem Gold und Silber unvergleichlichen Reichtum und Macht, so dass der spanische Hof von der ganzen Welt beneidet wurde.
O fair and virtuous Isabella! Will you rebuild the Spanish empire and show the world again the greatness of your people? Will you take up the mantle of the holy monarchy, and vanquish your foes under heaven's watchful eyes? Your adoring subjects await your command! Will you build a civilization that stands the test of time? = O schöne und tugendhafte Isabella! Werdet Ihr das spanische Reich wieder aufbauen und der Welt erneut die Größe eures Volkes zeigen? Werdet Ihr den Mantel der heiligen Monarchie übernehmen und eure Feinde unter den wachsamen Augen des Himmels bezwingen? Eure anbetenden Untertanen erwarten Euer Kommando! Könnt Ihr eine Zivilisation aufbauen, die dem Test der Zeit standhält?
Madrid = Madrid
@ -3329,8 +3332,8 @@ Great People can change the course of a Civilization! You will be rewarded for a
Find Player = Findet Spieler
You have yet to discover where [param] set up their cities. You will be rewarded for finding their territories. = Sie müssen noch herausfinden, wo [param] die Städte eingerichtet hat. Ihr werdet belohnt, wenn Ihr sie findet.
Find Natural Wonder = Findet Natürliche Wunder
Send your best explorers on a quest to discover Natural Wonders. Nobody knows the location of [param] yet. = Sendet Eure besten Entdecker auf die Suche nach Natürlichen Wundern. Noch kennt niemand den Standort von [param].
Find Natural Wonder = Findet Naturwunder
Send your best explorers on a quest to discover Natural Wonders. Nobody knows the location of [param] yet. = Sendet Eure besten Entdecker auf die Suche nach Naturwundern. Noch kennt niemand den Standort von [param].
#################### Lines from Religions from Civ V - Vanilla ####################
@ -3555,7 +3558,7 @@ Ocean = Ozean
Coast = Küste
Occurs at temperature between [param] and [param2] and humidity between [param3] and [amount] = Tritt auf bei temperaturen zwischen [param] und [param2] und einer Feuchtigkeit zwischen [param3] und [amount]
Occurs at temperature between [param] and [param2] and humidity between [param3] and [amount] = Tritt auf bei Temperaturen zwischen [param] und [param2] und einer Feuchtigkeit zwischen [param3] und [amount]
Grassland = Wiese
Plains = Ebene
@ -3567,16 +3570,14 @@ Desert = Wüste
Lakes = Seen
Has an elevation of [amount] for visibility calculations = Hat eine Erhebung von [amount] für die Berechnung der Sichtweite
# Requires translation!
Occurs in chains at high elevations =
Occurs in chains at high elevations = Bildet Ketten bei größeren Erhebungen
Mountain = Berge
Snow = Schnee
[amount] Strength for cities built on this terrain = [amount] Stärke für Städte, die auf diesem Terrain gebaut werden
[amount] Sight for [param] units = [amount] Sichtweite für [param] Einheit
# Requires translation!
Occurs in groups around high elevations =
Occurs in groups around high elevations = Tritt gruppiert auf rund um größere Erhebungen
Hill = Hügel
Provides a one-time Production bonus to the closest city when cut down = Bietet der nächstgelegenen Stadt einen einmaligen Produktionsbonus, wenn niedergeschnitten
@ -3679,7 +3680,7 @@ Customs house = Zollamt
Holy site = Heilige Stätte
Deal 30 damage to adjacent enemy units = Fügt angrgenzenden gegnerischen Einheiten 30 Schadenspunkte pro Runde zu
Deal 30 damage to adjacent enemy units = Fügt angrenzenden gegnerischen Einheiten 30 Schadenspunkte pro Runde zu
Can be built just outside your borders = Kann, auch ein Feld weit, außerhalb Deiner eigenen Grenzen gebaut werden
Citadel = Zitadelle
@ -4337,7 +4338,7 @@ Great Improvements also provide any strategic resources that are under them, so
Removing Terrain Features = Geländemerkmale entfernen
Certain tiles have terrain features - like Flood plains or Forests - on top of them. Some of these layers, like Jungle, Marsh and Forest, can be removed by workers.\nRemoving the terrain feature does not remove any resources in the tile, and is usually required in order to work those resources. = Bestimmte Felder haben zusätzliche Geländemerkmale, sozusagen auf ihnen drauf. - überflutete Ebenen oder Wälder -\nDie Geländemerkmale Dschungel, Sumpf und Wald können von Arbeitern entfernt werden.\nDas Entfernen von Geländemerkmalen entfernt nicht die eventuell vorhandene Ressource des Feldes und ist in der Regel nötig, um die Ressource zu bewirtschaften.
Natural Wonders, such as the Mt. Fuji, the Rock of Gibraltar and the Great Barrier Reef, are unique, impassable terrain features, masterpieces of mother Nature, which possess exceptional qualities that make them very different from the average terrain.\nThey benefit by giving you large sums of Culture, Science, Gold or Production if worked by your Cities, which is why you might need to bring them under your empire as soon as possible. = Natürliche Wunder wie der Mount Fuji, der Felsen von Gibraltar oder das Great Barrier Reef sind einzigartige Geländeformen, Meisterwerke der Mutter Natur, die außergewöhnliche Qualitäten besitzen, die sich komplett von gewöhnlichem Gelände unterscheiden.\n\nEinheiten können sie nicht betreten, aber Städte können sie bewirtschaften und besondere Erträge erlangen - was vielleicht Grund genug ist, sie bald unter Kontrolle Deines Reichs zu bringen.\n\nAllein ihre Entdeckung erhöht bereits die Zufriedenheit der Bevölkerung.
Natural Wonders, such as the Mt. Fuji, the Rock of Gibraltar and the Great Barrier Reef, are unique, impassable terrain features, masterpieces of mother Nature, which possess exceptional qualities that make them very different from the average terrain.\nThey benefit by giving you large sums of Culture, Science, Gold or Production if worked by your Cities, which is why you might need to bring them under your empire as soon as possible. = Naturwunder wie der Mount Fuji, der Felsen von Gibraltar oder das Great Barrier Reef sind einzigartige Geländeformen, Meisterwerke der Mutter Natur, die außergewöhnliche Qualitäten besitzen, die sich komplett von gewöhnlichem Gelände unterscheiden.\n\nEinheiten können sie nicht betreten, aber Städte können sie bewirtschaften und besondere Erträge erlangen - was vielleicht Grund genug ist, sie bald unter Kontrolle Deines Reichs zu bringen.\n\nAllein ihre Entdeckung erhöht bereits die Zufriedenheit der Bevölkerung.
Keyboard = Tastatur
If you have a keyboard, some shortcut keys become available. Unit command or improvement picker keys, for example, are shown directly in their corresponding buttons. = Wenn du eine Tastatur verwendest, werden einige Tastenkombinationen verfügbar. Die Tasten, z.B. für den Einheitenbefehl oder zur Auswahl einer Verbesserung, werden direkt in den entsprechenden Schaltflächen angezeigt.

View File

@ -934,16 +934,16 @@ Upgrades to [upgradedUnit] = [upgradedUnit] egységgé fejlődik
Obsolete with [obsoleteTech] = [obsoleteTech] elavulttá teszi
Occurs on [listOfTerrains] = [listOfTerrains] terepeken fordulhat elő
Placed on [terrainType] = [terrainType] terepen helyezkedik el
Can be found on = Megtalálható
Can be found on = Megtalálható
Improved by [improvement] = [improvement] által fejlesztve
Bonus stats for improvement = Bónusz fejlesztésre
Buildings that consume this resource = Épületek amit ezt az alapanyagot használják
Units that consume this resource = Egységek amik ezt az alapanyagot használják
Can be built on = Építhető
Can be built on = Építhető
Defence bonus = Védelmi bónusz
Movement cost = Mozgási költség
Rough Terrain = Nehéz terep
for = számára
for = számára
Missing translations: = Hiányzó fordítások:
Version = Verzió
Resolution = Felbontás

View File

@ -845,16 +845,16 @@ Upgrades to [upgradedUnit] = Tingkatkan menjadi [upgradedUnit]
Obsolete with [obsoleteTech] = Ketinggalan zaman dengan [obsoleteTech]
Occurs on [listOfTerrains] = Terjadi pada [listOfTerrains]
Placed on [terrainType] = Ditempatkan pada [terrainType]
Can be found on = Dapat ditemukan di
Can be found on = Dapat ditemukan di
Improved by [improvement] = Ditingkatkan dengan [improvement]
Bonus stats for improvement = Bonus stats untuk peningkatan
Buildings that consume this resource = Bangunan yang menggunakan sumber daya ini
Units that consume this resource = Unit yang menggunakan sumber daya ini
Can be built on = Dapat dibangun di
Can be built on = Dapat dibangun di
Defence bonus = Bonus pertahanan
Movement cost = Biaya pergerakan
Rough Terrain = Medan Kasar
for = untuk
for = untuk
Missing translations: = Terjemahan belum ada:
Version = Versi
Resolution = Resolusi

View File

@ -845,16 +845,16 @@ Upgrades to [upgradedUnit] = Aggiorna a [upgradedUnit]
Obsolete with [obsoleteTech] = Diventa obsoleta con [obsoleteTech]
Occurs on [listOfTerrains] = Si può trovare su [listOfTerrains]
Placed on [terrainType] = Si trova su [terrainType]
Can be found on = Può trovarsi su
Can be found on = Può trovarsi su
Improved by [improvement] = Può essere migliorato/a da [improvement]
Bonus stats for improvement = Bonus per miglioramento
Buildings that consume this resource = Edifici che consumano questa risorsa
Units that consume this resource = Unità che consumano questa risorsa
Can be built on = Può essere costruito/a su:
Can be built on = Può essere costruito/a su
Defence bonus = Bonus di Difesa
Movement cost = Costi di movimento
Rough Terrain = Terreno accidentato
for = per
for = per
Missing translations: = Traduzioni mancanti:
Version = Versione
Resolution = Risoluzione

View File

@ -933,17 +933,17 @@ Upgrades to [upgradedUnit] = [upgradedUnit]へアップグレード
Obsolete with [obsoleteTech] = [obsoleteTech]で廃止
Occurs on [listOfTerrains] = [listOfTerrains]で発生
Placed on [terrainType] = [terrainType]に配置
Can be found on = 入手可能条件:
Can be found on = 入手可能条件:
Improved by [improvement] = [improvement]で改善
Bonus stats for improvement = タイル施設によるボーナス統計:
Buildings that consume this resource = この資源を消費する建物:
Units that consume this resource = この資源を消費するユニット:
Can be built on = 建設可能タイル:
Can be built on = 建設可能タイル
Defence bonus = 防衛ボーナス
Movement cost = 移動コスト
Rough Terrain = 起伏の多い地形
for = が以下のものがある場合に付与:
Missing translations: = 欠落している翻訳:
for = が以下のものがある場合に付与:
Missing translations: = 欠落している翻訳:
Version = バージョン
Resolution = 解像度
Tileset = タイルセット

View File

@ -845,16 +845,16 @@ Upgrades to [upgradedUnit] = [upgradedUnit](으)로 업그레이드 가능
Obsolete with [obsoleteTech] = [obsoleteTech] 연구 후 생산 불가
Occurs on [listOfTerrains] = 발생하는 지형: [listOfTerrains]
Placed on [terrainType] = [terrainType]으로 간주됨
Can be found on = 발견되는 지형:
Can be found on = 발견되는 지형:
Improved by [improvement] = 개발하는 시설: [improvement]
Bonus stats for improvement = 개발시 보너스
Buildings that consume this resource = 소모하는 건물
Units that consume this resource = 소모하는 유닛
Can be built on = 건설가능 지형:
Can be built on = 건설가능 지형
Defence bonus = 방어 보너스
Movement cost = 소모 행동력
Rough Terrain = 험지
for = 이(가) 다음 자원에 추가됨:
for = 이(가) 다음 자원에 추가됨:
Missing translations: = 미완성 번역 목록:
Version = 버전
Resolution = 해상도

View File

@ -1009,16 +1009,16 @@ Upgrades to [upgradedUnit] = Naujovinimas į [upgradedUnit]
Obsolete with [obsoleteTech] = Pasenęs naudojant [obsoleteTech]
Occurs on [listOfTerrains] = Įvyksta [listOfTerrains]
Placed on [terrainType] = Padėta ant [terrainType]
Can be found on = Galima rasti
Can be found on = Galima rasti
Improved by [improvement] = Patobulinta [improvement]
Bonus stats for improvement = Premijų statistika už tobulinimą
Buildings that consume this resource = Pastatai, kurie naudoja šį išteklius
Units that consume this resource = Vienetai, kurie naudoja šį išteklius
Can be built on = Galima pastatyti
Can be built on = Galima pastatyti
Defence bonus = Gynybos premija
Movement cost = Judėjimo kaina
Rough Terrain = Grubus reljefas
for = dėl
for = dėl
Missing translations: = Trūksta vertimų:
Version = Versija
Resolution = Rezoliucija

View File

@ -1225,19 +1225,17 @@ Occurs on [listOfTerrains] =
# Requires translation!
Placed on [terrainType] =
# Requires translation!
Can be found on =
# Requires translation!
Improved by [improvement] =
# Requires translation!
Bonus stats for improvement =
Buildings that consume this resource = binaan yang makan ini bahan
Units that consume this resource = orang yang makan ini bahan
Can be built on = bole dibina di
Can be built on = bole dibina di
Defence bonus = bonus pertahanan
Movement cost = kos pergerakan
# Requires translation!
Rough Terrain =
for = untuk
for = untuk
# Requires translation!
Missing translations: =
Version = versi

View File

@ -993,16 +993,16 @@ Upgrades to [upgradedUnit] = Be [upgradedUnit] behine mišavad
Obsolete with [obsoleteTech] = Bā [obsoleteTech] mansooḵ mišavad
Occurs on [listOfTerrains] = Rooye [listOfTerrains] etefāğ mioftad
Placed on [terrainType] = Ğarār gerefte rooye [terrainType]
Can be found on = Peydā mišavad rooye
Can be found on = Peydā mišavad rooye
Improved by [improvement] = Behbood-sāḵte šode bā [improvement]
Bonus stats for improvement = Ḵavās ezāfe šode beḵāter e behbood-sāzi
Buildings that consume this resource = Sāḵtemān hāyi ke in manba rā masraf mikonand
Units that consume this resource = Niroo hāyi ke in manba rā masraf mikonand
Can be built on = Mitavānad sāḵte šavad rooye
Can be built on = Mitavānad sāḵte šavad rooye
Defence bonus = Emtiāz e defāi
Movement cost = Hazine ye harekat
Rough Terrain = Zamin e nāhamvār
for = barāye
for = barāye
Missing translations: = Tarjome hāye nāmojood:
Version = Nosḵe
Resolution = Vozooh e tasvir

View File

@ -990,16 +990,16 @@ Upgrades to [upgradedUnit] = Be [upgradedUnit] behine mishavad
Obsolete with [obsoleteTech] = Baa [obsoleteTech] mansookh mishavad
Occurs on [listOfTerrains] = Rooye [listOfTerrains] etefaagh mioftad
Placed on [terrainType] = Gharaar gerefte rooye [terrainType]
Can be found on = Peydaa mishavad rooye
Can be found on = Peydaa mishavad rooye
Improved by [improvement] = Behbood-saakhte shode baa [improvement]
Bonus stats for improvement = Khavaas ezaafe shode bekhaater e behbood-saazi
Buildings that consume this resource = Saakhtemaan haayi ke in manba raa masraf mikonand
Units that consume this resource = Niroo haayi ke in manba raa masraf mikonand
Can be built on = Mitavaanad saakhte shavad rooye
Can be built on = Mitavaanad saakhte shavad rooye
Defence bonus = Emtiaaz e defaai
Movement cost = Hazine ye harekat
Rough Terrain = Zamin e naahamvaar
for = baraaye
for = baraaye
Missing translations: = Tarjome haaye naamojood:
Version = Noskhe
Resolution = Vozooh e tasvir

View File

@ -936,16 +936,16 @@ Upgrades to [upgradedUnit] = Ulepsza się do [upgradedUnit]
Obsolete with [obsoleteTech] = Przestarzałe po wynalezieniu: [obsoleteTech]
Occurs on [listOfTerrains] = Występuje na [listOfTerrains]
Placed on [terrainType] = Umieszczone na [terrainType]
Can be found on = Może zostać znaleziony na
Can be found on = Może zostać znaleziony na
Improved by [improvement] = Ulepszane przez [improvement]
Bonus stats for improvement = Dodatkowe statystyki po ulepszeniu
Buildings that consume this resource = Budynki pochłaniające ten surowiec
Units that consume this resource = Jednostki wymagające tego surowca
Can be built on = Może być zbudowany na
Can be built on = Może być zbudowany na
Defence bonus = Premia do obrony
Movement cost = Koszt ruchu
Rough Terrain = Trudny Teren
for = dla
for = dla
Missing translations: = Brakujące tłumaczenia:
Version = Wersja
Resolution = Rozdzielczość

View File

@ -877,16 +877,16 @@ Upgrades to [upgradedUnit] = Melhorar para [upgradedUnit]
Obsolete with [obsoleteTech] = Obsoleta(0) com [obsoleteTech]
Occurs on [listOfTerrains] = Ocorre em [listOfTerrains]
Placed on [terrainType] = Colocado em [terrainType]
Can be found on = Pode ser encontrado em
Can be found on = Pode ser encontrado em
Improved by [improvement] = Melhorado por [improvement]
Bonus stats for improvement = Bonus de estatisticas por melhoria
Buildings that consume this resource = Construções que consomem esse recurso
Units that consume this resource = Unidades que consomem esse recurso
Can be built on = Pode ser construido em
Can be built on = Pode ser construido em
Defence bonus = Bonus de defesa
Movement cost = Custo de movimento
Rough Terrain = Terreno acidentado
for = para
for = para
Missing translations: = Traduções a faltar:
Version = Versão
Resolution = Resolução

View File

@ -1032,7 +1032,7 @@ Upgrades to [upgradedUnit] = Îmbunătățiri la [upgradedUnit]
Obsolete with [obsoleteTech] =
Occurs on [listOfTerrains] = Apare pe [listOfTerrains]
Placed on [terrainType] = Plasat pe [terrainType]
Can be found on = Se poate găsi pe
Can be found on = Se poate găsi pe
# Requires translation!
Improved by [improvement] =
# Requires translation!
@ -1041,12 +1041,12 @@ Bonus stats for improvement =
Buildings that consume this resource =
# Requires translation!
Units that consume this resource =
Can be built on = Se poate construi pe
Can be built on = Se poate construi pe
Defence bonus = Bonus de apărare
Movement cost = Cost de deplasare
# Requires translation!
Rough Terrain =
for = pentru
for = pentru
Missing translations: = Traduceri lipsă:
Version = Versiune
Resolution = Rezoluție

View File

@ -845,16 +845,16 @@ Upgrades to [upgradedUnit] = Улучшается до: [upgradedUnit]
Obsolete with [obsoleteTech] = Устаревает при открытии технологии [obsoleteTech]
Occurs on [listOfTerrains] = Появляется на: [listOfTerrains]
Placed on [terrainType] = Появляется вместо: [terrainType]
Can be found on = Может быть найден на клетках:
Can be found on = Может быть найден на клетках
Improved by [improvement] = Улучшение: [improvement]
Bonus stats for improvement = Бонусы за улучшение
Buildings that consume this resource = Здания, которые потребляют этот ресурс
Units that consume this resource = Юниты, которые потребляют этот ресурс
Can be built on = Можно строить на:
Can be built on = Можно строить на
Defence bonus = Бонус к защите
Movement cost = Стоимость передвижения
Rough Terrain = Пересеченная местность
for = за
for = за
Missing translations: = Отсутствующие переводы:
Version = Версия
Resolution = Разрешение

View File

@ -845,16 +845,16 @@ Upgrades to [upgradedUnit] = 可升级为[upgradedUnit]
Obsolete with [obsoleteTech] = 研发下列科技后过时:[obsoleteTech]
Occurs on [listOfTerrains] = 可能出现在以下地形:[listOfTerrains]
Placed on [terrainType] = 可出现在[terrainType]之上
Can be found on = 可能发现该资源的地形地貌:
Can be found on = 可能发现该资源的地形地貌:
Improved by [improvement] = 开发该资源所需设施:[improvement]
Bonus stats for improvement = 开发该资源后设施所获奖励效果:
Buildings that consume this resource = 消耗该资源的建筑:
Units that consume this resource = 消耗该资源的单位:
Can be built on = 可以建造于:
Can be built on = 可以建造于:
Defence bonus = 防御力加成
Movement cost = 移动力消耗
Rough Terrain = 崎岖地形
for = ,当建造在拥有下列资源的地块上时:
for = ,当建造在拥有下列资源的地块上时:
Missing translations: = 未翻译的词条:
Version = 版本
Resolution = 分辨率

View File

@ -852,16 +852,16 @@ Upgrades to [upgradedUnit] = Mejora a [upgradedUnit]
Obsolete with [obsoleteTech] = Se hace obsoleto con [obsoleteTech]
Occurs on [listOfTerrains] = Ocurre en [listOfTerrains]
Placed on [terrainType] = Colocado en [terrainType]
Can be found on = Se puede encontrar en
Can be found on = Se puede encontrar en
Improved by [improvement] = Mejorado por [improvement]
Bonus stats for improvement = Atributos bonus de la mejora
Buildings that consume this resource = Edificios que consumen este recurso
Units that consume this resource = Unidades que consumen este recurso
Can be built on = Se puede construir en
Can be built on = Se puede construir en
Defence bonus = Bonus de defensa
Movement cost = Coste de movimiento
Rough Terrain = Terreno Abrupto
for = para
for = para
Missing translations: = Traducciones restantes:
Version = Versión
Resolution = Resolución

View File

@ -845,16 +845,16 @@ Upgrades to [upgradedUnit] = Uppgraderas till [upgradedUnit]
Obsolete with [obsoleteTech] = Föråldras med [obsoleteTech]
Occurs on [listOfTerrains] = Befinner sig på [listOfTerrains]
Placed on [terrainType] = Placeras på [terrainType]
Can be found on = Kan finnas på
Can be found on = Kan finnas på
Improved by [improvement] = Förbättras av [improvement]
Bonus stats for improvement = Bonusstatistik för förbättring
Buildings that consume this resource = Byggnader som konsumerar denna resurs
Units that consume this resource = Enheter som konsumerar denna resurs
Can be built on = Kan byggas på
Can be built on = Kan byggas på
Defence bonus = Försvarsbonus
Movement cost = Förflyttningskostnad
Rough Terrain = Kuperad Terräng
for = för
for = för
Missing translations: = Saknade översättningar:
Version = Version
Resolution = Upplösning

View File

@ -820,14 +820,14 @@ May contain [listOfResources] = อาจจะประกอบไปด้ว
Upgrades to [upgradedUnit] = อัพเกรดไปเป็น [upgradedUnit]
Obsolete with [obsoleteTech] = ล้าสมัยกับ [obsoleteTech]
Occurs on [listOfTerrains] = เกิดขึ้นบน [listOfTerrains]
Can be found on = สามารถถูกพบได้บน
Can be found on = สามารถถูกพบได้บน
Improved by [improvement] = ปรับปรุงโดย [improvement]
Bonus stats for improvement = แต้มโบนัสสำหรับการปรับปรุง
Can be built on = สามารถสร้างได้บน
Can be built on = สามารถสร้างได้บน
Defence bonus = โบนัสการป้องกัน
Movement cost = ค่าการเคลื่อนย้าย
Rough Terrain = ภูมิประเทศที่ขรุขระ
for = เพื่อ
for = เพื่อ
Missing translations: = การแปลที่หายไป:
Version = เวอร์ชั่น
Resolution = ความละเอียด

View File

@ -932,16 +932,16 @@ Upgrades to [upgradedUnit] = 可升級為[upgradedUnit]
Obsolete with [obsoleteTech] = 研發下列科技後過時:[obsoleteTech]
Occurs on [listOfTerrains] = 可能出現在以下地形:[listOfTerrains]
Placed on [terrainType] = 出現在[terrainType]之上
Can be found on = 可能發現該資源的地形地貌:
Can be found on = 可能發現該資源的地形地貌:
Improved by [improvement] = 開發該資源所需設施:[improvement]
Bonus stats for improvement = 開發該資源後設施所獲獎勵效果:
Buildings that consume this resource = 消耗該資源的建築:
Units that consume this resource = 消耗該資源的單位:
Can be built on = 可以建造於
Can be built on = 可以建造於
Defence bonus = 防禦力加成
Movement cost = 移動力消耗
Rough Terrain = 崎嶇地形
for = ,當建造在擁有下列資源的地區上時:
for = ,當建造在擁有下列資源的地區上時:
Missing translations: = 未翻譯的字串:
Version = 版本
Resolution = 解析度

View File

@ -895,16 +895,16 @@ Upgrades to [upgradedUnit] = [upgradedUnit] sürümüne yükseltir
Obsolete with [obsoleteTech] = [obsoleteTech] araştırıldığından itibaren üretilemez
Occurs on [listOfTerrains] = [listOfTerrains] arazilerinde bulunur
Placed on [terrainType] = [terrainType] üstüne yerleşiktir
Can be found on = Şurada bulunabilir
Can be found on = Şurada bulunabilir
Improved by [improvement] = [improvement] ile geliştirilir
Bonus stats for improvement = Geliştirmelerin sağladığı fazladan verimler
Buildings that consume this resource = Bu kaynağı kullanan binalar
Units that consume this resource = Bu kaynağı kullanan birlikler
Can be built on = Üzerine inşa edilebilir
Can be built on = Üzerine inşa edilebilir
Defence bonus = Savunma bonusu
Movement cost = Hareket maliyeti
Rough Terrain = Engebeli Arazi
for = için
for = için
Missing translations: = Eksik çeviriler:
Version = Sürüm
Resolution = Çözünürlük

View File

@ -862,16 +862,16 @@ Upgrades to [upgradedUnit] = Удосконалюється до «[upgradedUnit
Obsolete with [obsoleteTech] = Застаріває після відкриття технології «[obsoleteTech]»
Occurs on [listOfTerrains] = Зустрічається на таких місцевостях: [listOfTerrains]
Placed on [terrainType] = Є клітиною типу «[terrainType]»
Can be found on = Можна знайти в таких місцевостях:
Can be found on = Можна знайти в таких місцевостях
Improved by [improvement] = Забезпечується вдосконаленням «[improvement]»
Bonus stats for improvement = Бонусні характеристики за удосконалення
Buildings that consume this resource = Будівлі, що потребують цей ресурс
Units that consume this resource = Підрозділи, що потребують цей ресурс
Can be built on = Може бути побудований на клітинах такого типу:
Can be built on = Може бути побудований на клітинах такого типу
Defence bonus = Бонус до захисту
Movement cost = Вартість руху
Rough Terrain = Нерівна місцевість
for = за
for = за
Missing translations: = Відсутні переклади:
Version = Версія
Resolution = Роздільність

View File

@ -770,16 +770,16 @@ Upgrades to [upgradedUnit] = Nâng cấp lên [upgradedUnit]
Obsolete with [obsoleteTech] = Cổ xưa với [obsoleteTech]
Occurs on [listOfTerrains] = Xảy ra tại [listOfTerrains]
Placed on [terrainType] = Được đặt tại [terrainType]
Can be found on = Có thể tìm thấy ở
Can be found on = Có thể tìm thấy ở
Improved by [improvement] = Cải tiến bằng [improvement]
Bonus stats for improvement: = Thưởng chỉ số cho cải tiến:
Buildings that consume this resource: = Các công trình sử dụng tài nguyên này:
Units that consume this resource: = Các đơn vị sử dụng tài nguyên này:
Can be built on = Có thể xây trên
Can be built on = Có thể xây trên
Defence bonus = Thưởng phòng thủ
Movement cost = Chi phí di chuyển
Rough Terrain = Địa hình hiểm trở
for = cho
for = cho
Missing translations: = Phiên dịch còn thiếu:
Version = Phiên bản
Resolution = Đồ họa

View File

@ -842,21 +842,25 @@ Unique to [civName] =
Tutorials =
Cost =
May contain [listOfResources] =
May contain: =
Upgrades to [upgradedUnit] =
Obsolete with [obsoleteTech] =
Occurs on [listOfTerrains] =
Occurs on: =
Placed on [terrainType] =
Can be found on =
Can be found on =
Improved by [improvement] =
Bonus stats for improvement =
Buildings that consume this resource =
Buildings that require this resource worked near the city =
Units that consume this resource =
Can be built on =
Can be built on =
Can be constructed by =
Defence bonus =
Movement cost =
Open terrain =
Rough Terrain =
for =
for =
Missing translations: =
Version =
Resolution =

View File

@ -517,6 +517,7 @@ object Battle {
}
}
// todo: reduce extreme code duplication, parameterize probabilities where an unique already used
private fun nukeStrength1Effect(attacker: MapUnitCombatant, tile: TileInfo) {
// https://forums.civfanatics.com/resources/unit-guide-modern-future-units-g-k.25628/
// https://www.carlsguides.com/strategy/civilization5/units/aircraft-nukes.php

View File

@ -191,6 +191,8 @@ class MapUnit {
tempUniques = uniques
//todo: parameterize [terrainFilter] in 5 to 7 of the following:
// "All tiles costs 1" obsoleted in 3.11.18
allTilesCosts1 = hasUnique("All tiles cost 1 movement") || hasUnique("All tiles costs 1")
canPassThroughImpassableTiles = hasUnique("Can pass through impassable tiles")
@ -681,6 +683,7 @@ class MapUnit {
clearEncampment(tile)
if (!hasUnique("All healing effects doubled") && type.isLandUnit() && baseUnit.isMilitary()) {
//todo: Grants [promotion] to adjacent [unitFilter] units for the rest of the game
val gainDoubleHealPromotion = tile.neighbors
.any { it.hasUnique("Grants Rejuvenation (all healing effects doubled) to adjacent military land units for the rest of the game") }
if (gainDoubleHealPromotion && civInfo.gameInfo.ruleSet.unitPromotions.containsKey("Rejuvenation"))

View File

@ -1,9 +1,9 @@
package com.unciv.models.ruleset
import com.unciv.UncivGame
import com.unciv.models.stats.INamed
import com.unciv.ui.civilopedia.CivilopediaText
import com.unciv.ui.civilopedia.FormattedLine
import java.awt.Color
import java.util.ArrayList
class Belief: INamed, CivilopediaText() {
@ -12,9 +12,11 @@ class Belief: INamed, CivilopediaText() {
var uniques = ArrayList<String>()
val uniqueObjects: List<Unique> by lazy { uniques.map { Unique(it) } }
override fun getCivilopediaTextHeader() = FormattedLine(name, icon="Belief/$name", header=2)
override fun makeLink() = "Belief/$name"
override fun replacesCivilopediaDescription() = true
override fun hasCivilopediaTextLines() = true
override fun getCivilopediaTextLines(ruleset: Ruleset): List<FormattedLine> {
val textList = ArrayList<FormattedLine>()
textList += FormattedLine("{Type}: $type", color=type.color )
@ -23,6 +25,32 @@ class Belief: INamed, CivilopediaText() {
}
return textList
}
companion object {
// private but potentially reusable, therefore not folded into getCivilopediaTextMatching
private fun getBeliefsMatching(name: String, ruleset: Ruleset): Sequence<Belief> {
if (!UncivGame.isCurrentInitialized()) return sequenceOf()
if (!UncivGame.Current.isGameInfoInitialized()) return sequenceOf()
if (!UncivGame.Current.gameInfo.hasReligionEnabled()) return sequenceOf()
return ruleset.beliefs.asSequence().map { it.value }
.filter { belief -> belief.uniqueObjects.any { unique -> unique.params.any { it == name } }
}
}
/** Get CivilopediaText lines for all Beliefs referencing a given name in an unique parameter,
* With optional spacing and "See Also:" header.
*/
fun getCivilopediaTextMatching(
name: String,
ruleset: Ruleset,
withSeeAlso: Boolean = true
): Sequence<FormattedLine> = sequence {
val matchingBeliefs = getBeliefsMatching(name, ruleset)
if (matchingBeliefs.none()) return@sequence
if (withSeeAlso) { yield(FormattedLine()); yield(FormattedLine("{See also}:")) }
yieldAll(matchingBeliefs.map { FormattedLine(it.name, link=it.makeLink(), indent = 1) })
}
}
}
enum class BeliefType(val color: String) {

View File

@ -55,7 +55,7 @@ class Building : NamedStats(), IConstruction, ICivilopediaText {
private var requiredResource: String? = null
/** City can only be built if one of these resources is nearby - it must be improved! */
private var requiredNearbyImprovedResources: List<String>? = null
var requiredNearbyImprovedResources: List<String>? = null
private var cannotBeBuiltWith: String? = null
var cityStrength = 0
var cityHealth = 0
@ -197,10 +197,10 @@ class Building : NamedStats(), IConstruction, ICivilopediaText {
return stats
}
fun makeLink() = if (isAnyWonder()) "Wonder/$name" else "Building/$name"
override fun getCivilopediaTextHeader() = FormattedLine(name, header=2, icon=makeLink())
override fun makeLink() = if (isAnyWonder()) "Wonder/$name" else "Building/$name"
override fun hasCivilopediaTextLines() = true
override fun replacesCivilopediaDescription() = true
override fun getCivilopediaTextLines(ruleset: Ruleset): List<FormattedLine> {
fun Float.formatSignedInt() = (if (this > 0f) "+" else "") + this.toInt().toString()
@ -305,11 +305,12 @@ class Building : NamedStats(), IConstruction, ICivilopediaText {
if (maintenance != 0) textList += FormattedLine("{Maintenance cost}: $maintenance {Gold}")
val seeAlso = ArrayList<FormattedLine>()
for ((other, building) in ruleset.buildings) {
if (building.replaces == name || building.providesFreeBuilding == name || uniques.contains("[$name]") ) {
seeAlso += FormattedLine(other, link=building.makeLink(), indent=1)
}
for (building in ruleset.buildings.values) {
if (building.replaces == name || building.providesFreeBuilding == name
|| building.uniqueObjects.any { unique -> unique.params.any { it ==name } })
seeAlso += FormattedLine(building.name, link=building.makeLink(), indent=1)
}
seeAlso += Belief.getCivilopediaTextMatching(name, ruleset, false)
if (seeAlso.isNotEmpty()) {
textList += FormattedLine()
textList += FormattedLine("{See also}:")

View File

@ -1,7 +1,7 @@
package com.unciv.models.ruleset.tile
enum class ResourceType {
Luxury,
Strategic,
Bonus
enum class ResourceType(val color:String) {
Luxury("#ffeb7f"),
Strategic("#c5a189"),
Bonus("#81c784")
}

View File

@ -2,13 +2,15 @@ package com.unciv.models.ruleset.tile
import com.badlogic.gdx.graphics.Color
import com.unciv.Constants
import com.unciv.models.ruleset.Belief
import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.Unique
import com.unciv.models.stats.NamedStats
import com.unciv.models.translations.tr
import com.unciv.ui.civilopedia.FormattedLine
import com.unciv.ui.civilopedia.ICivilopediaText
import com.unciv.ui.utils.colorFromRGB
class Terrain : NamedStats() {
class Terrain : NamedStats(), ICivilopediaText {
lateinit var type: TerrainType
@ -31,47 +33,122 @@ class Terrain : NamedStats() {
var weight = 10
/** RGB color of base terrain */
@Suppress("PropertyName") // RGB is expected to be in caps
var RGB: List<Int>? = null
var movementCost = 1
var defenceBonus:Float = 0f
var impassable = false
override var civilopediaText = listOf<FormattedLine>()
fun isRough(): Boolean = uniques.contains("Rough terrain")
/** Tests base terrains, features and natural wonders whether they should be treated as Land/Water.
* Currently only used for civilopedia display, as other code can test the tile itself.
*/
fun displayAs(asType: TerrainType, ruleset: Ruleset) =
type == asType
|| occursOn.any {
occursName -> occursName in ruleset.terrains.values
.filter { it.type == asType }
.map { it.name }
}
|| ruleset.terrains[this.turnsInto]?.type == asType
fun getColor(): Color { // Can't be a lazy initialize, because we play around with the resulting color with lerp()s and the like
if (RGB == null) return Color.GOLD
return colorFromRGB(RGB!!)
}
fun getDescription(ruleset: Ruleset): String {
val sb = StringBuilder()
sb.appendLine(this.clone().toString())
if (occursOn.isNotEmpty())
sb.appendLine("Occurs on [${occursOn.joinToString(", ") { it.tr() }}]".tr())
override fun makeLink() = "Terrain/$name"
override fun hasCivilopediaTextLines() = true
override fun replacesCivilopediaDescription() = true
if (turnsInto != null)
sb.appendLine("Placed on [$turnsInto]".tr())
override fun getCivilopediaTextLines(ruleset: Ruleset): List<FormattedLine> {
//todo where should we explain Rivers?
val textList = ArrayList<FormattedLine>()
if (turnsInto != null) {
textList += FormattedLine("Natural Wonder", header=3, color="#3A0")
}
val stats = this.clone()
if (!stats.isEmpty()) {
textList += FormattedLine()
textList += FormattedLine("$stats")
}
if (occursOn.isNotEmpty()) {
textList += FormattedLine()
if (occursOn.size == 1) {
with (occursOn[0]) {
textList += FormattedLine("Occurs on [$this]", link="Terrain/$this")
}
} else {
textList += FormattedLine("Occurs on:")
occursOn.forEach {
textList += FormattedLine(it, link="Terrain/$it", indent=1)
}
}
}
if (turnsInto != null) {
textList += FormattedLine("Placed on [$turnsInto]", link="Terrain/$turnsInto")
}
val resourcesFound = ruleset.tileResources.values.filter { it.terrainsCanBeFoundOn.contains(name) }
if (resourcesFound.isNotEmpty())
sb.appendLine("May contain [${resourcesFound.joinToString(", ") { it.name.tr() }}]".tr())
if (resourcesFound.isNotEmpty()) {
textList += FormattedLine()
if (resourcesFound.size == 1) {
with (resourcesFound[0]) {
textList += FormattedLine("May contain [$this]", link="Resource/$this")
}
} else {
textList += FormattedLine("May contain:")
resourcesFound.forEach {
textList += FormattedLine("$it", link="Resource/$it", indent=1)
}
}
}
if (isRough())
sb.appendLine("Rough terrain".tr())
else
sb.appendLine("Open terrain".tr())
textList += FormattedLine()
// For now, natural wonders show no "open terrain" - may change later
if (turnsInto == null && displayAs(TerrainType.Land, ruleset) && !isRough())
textList += FormattedLine("Open terrain") // Rough is in uniques
uniqueObjects.forEach {
textList += FormattedLine(it)
}
if(uniques.isNotEmpty())
sb.appendLine(uniques.filter{ it != "Rough terrain" }.joinToString{ it.tr() })
if (impassable)
sb.appendLine(Constants.impassable.tr())
else
sb.appendLine("{Movement cost}: $movementCost".tr())
textList += FormattedLine()
textList += if (impassable) FormattedLine(Constants.impassable, color="#A00")
else FormattedLine("{Movement cost}: $movementCost")
if (defenceBonus != 0f)
sb.appendLine("{Defence bonus}: ".tr() + (defenceBonus * 100).toInt() + "%")
textList += FormattedLine("{Defence bonus}: ${(defenceBonus * 100).toInt()}%")
return sb.toString()
val seeAlso = (
//todo: Could vastly be simplified using upcoming INonPerpetualConstruction
ruleset.buildings.values.asSequence()
.filter {
building -> building.uniqueObjects.any {
unique -> unique.params.any { it == name }
}
} +
ruleset.units.values.asSequence()
.filter {
unit -> unit.uniqueObjects.any {
unique -> unique.params.any { it == name }
}
}
).map { FormattedLine(it.name, it.makeLink(), indent=1) } +
Belief.getCivilopediaTextMatching(name, ruleset, false)
if (seeAlso.any()) {
textList += FormattedLine()
textList += FormattedLine("{See also}:")
textList += seeAlso
}
return textList
}
}
}

View File

@ -1,6 +1,7 @@
package com.unciv.models.ruleset.tile
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.models.ruleset.Belief
import com.unciv.logic.map.RoadStatus
import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.Unique
@ -40,17 +41,17 @@ class TileImprovement : NamedStats(), ICivilopediaText {
return realTurnsToBuild.roundToInt()
}
fun getDescription(ruleset: Ruleset, forPickerScreen: Boolean = true): String {
val stringBuilder = StringBuilder()
fun getDescription(ruleset: Ruleset): String {
val lines = ArrayList<String>()
val statsDesc = this.clone().toString()
if (statsDesc.isNotEmpty()) stringBuilder.appendLine(statsDesc)
if (uniqueTo!=null && !forPickerScreen) stringBuilder.appendLine("Unique to [$uniqueTo]".tr())
if (statsDesc.isNotEmpty()) lines += statsDesc
if (!terrainsCanBeBuiltOn.isEmpty()) {
val terrainsCanBeBuiltOnString: ArrayList<String> = arrayListOf()
for (i in terrainsCanBeBuiltOn) {
terrainsCanBeBuiltOnString.add(i.tr())
}
stringBuilder.appendLine("Can be built on ".tr() + terrainsCanBeBuiltOnString.joinToString(", "))//language can be changed when setting changes.
lines += "Can be built on".tr() + terrainsCanBeBuiltOnString.joinToString(", ", " ") //language can be changed when setting changes.
}
val statsToResourceNames = HashMap<String, ArrayList<String>>()
for (tr: TileResource in ruleset.tileResources.values.filter { it.improvement == name }) {
@ -60,15 +61,15 @@ class TileImprovement : NamedStats(), ICivilopediaText {
statsToResourceNames[statsString]!!.add(tr.name.tr())
}
statsToResourceNames.forEach {
stringBuilder.appendLine(it.key + " for ".tr() + it.value.joinToString(", "))
lines += "{${it.key}} {for} ".tr() + it.value.joinToString(", ")
}
if (techRequired != null) stringBuilder.appendLine("Required tech: [$techRequired]".tr())
if (techRequired != null) lines += "Required tech: [$techRequired]".tr()
for(unique in uniques)
stringBuilder.appendLine(unique.tr())
lines += unique.tr()
return stringBuilder.toString()
return lines.joinToString("\n")
}
fun hasUnique(unique: String) = uniques.contains(unique)
@ -100,5 +101,82 @@ class TileImprovement : NamedStats(), ICivilopediaText {
else -> false
}
}
}
override fun makeLink() = "Improvement/$name"
override fun hasCivilopediaTextLines() = true
override fun replacesCivilopediaDescription() = true
override fun getCivilopediaTextLines(ruleset: Ruleset): List<FormattedLine> {
val textList = ArrayList<FormattedLine>()
val statsDesc = this.clone().toString()
if (statsDesc.isNotEmpty()) textList += FormattedLine(statsDesc)
if (uniqueTo!=null) {
textList += FormattedLine()
textList += FormattedLine("Unique to [$uniqueTo]", link="Nation/$uniqueTo")
}
if (terrainsCanBeBuiltOn.isNotEmpty()) {
textList += FormattedLine()
if (terrainsCanBeBuiltOn.size == 1) {
with (terrainsCanBeBuiltOn.first()) {
textList += FormattedLine("{Can be built on} {$this}", link="Terrain/$this")
}
} else {
textList += FormattedLine("{Can be built on}:")
terrainsCanBeBuiltOn.forEach {
textList += FormattedLine(it, link="Terrain/$it", indent=1)
}
}
}
val statsToResourceNames = HashMap<String, ArrayList<String>>()
for (resource in ruleset.tileResources.values.filter { it.improvement == name }) {
val statsString = resource.improvementStats.toString()
if (statsString !in statsToResourceNames)
statsToResourceNames[statsString] = ArrayList()
statsToResourceNames[statsString]!!.add(resource.name)
}
if (statsToResourceNames.isNotEmpty()) {
statsToResourceNames.forEach {
textList += FormattedLine()
if (it.value.size == 1) {
with(it.value[0]) {
textList += FormattedLine("${it.key}{ for }{$this}", link="Resource/$this")
}
} else {
textList += FormattedLine("${it.key}{ for }:")
it.value.forEach { resource ->
textList += FormattedLine(resource, link="Resource/$resource", indent=1)
}
}
}
}
if (techRequired != null) {
textList += FormattedLine()
textList += FormattedLine("Required tech: [$techRequired]", link="Technology/$techRequired")
}
if (uniques.isNotEmpty()) {
textList += FormattedLine()
for (unique in uniqueObjects)
textList += FormattedLine(unique)
}
val unit = ruleset.units.asSequence().firstOrNull {
entry -> entry.value.uniques.any {
it.startsWith("Can construct [$name]")
}
}?.key
if (unit != null) {
textList += FormattedLine()
textList += FormattedLine("{Can be constructed by} {$unit}", link="Unit/$unit")
}
textList += Belief.getCivilopediaTextMatching(name, ruleset)
return textList
}
}

View File

@ -1,12 +1,15 @@
package com.unciv.models.ruleset.tile
import com.unciv.models.ruleset.Belief
import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.Unique
import com.unciv.models.stats.NamedStats
import com.unciv.models.stats.Stats
import com.unciv.models.translations.tr
import com.unciv.ui.civilopedia.FormattedLine
import com.unciv.ui.civilopedia.ICivilopediaText
import java.util.*
class TileResource : NamedStats() {
class TileResource : NamedStats(), ICivilopediaText {
var resourceType: ResourceType = ResourceType.Bonus
var terrainsCanBeFoundOn: List<String> = listOf()
@ -15,33 +18,84 @@ class TileResource : NamedStats() {
var revealedBy: String? = null
var unique: String? = null
override var civilopediaText = listOf<FormattedLine>()
fun getDescription(ruleset: Ruleset): String {
val stringBuilder = StringBuilder()
stringBuilder.appendLine(resourceType.name.tr())
stringBuilder.appendLine(this.clone().toString())
val terrainsCanBeBuiltOnString: ArrayList<String> = arrayListOf()
terrainsCanBeBuiltOnString.addAll(terrainsCanBeFoundOn.map { it.tr() })
stringBuilder.appendLine("Can be found on ".tr() + terrainsCanBeBuiltOnString.joinToString(", "))
stringBuilder.appendln()
stringBuilder.appendLine("Improved by [$improvement]".tr())
stringBuilder.appendLine("{Bonus stats for improvement}: ".tr() + "$improvementStats".tr())
override fun makeLink() = "Resource/$name"
override fun hasCivilopediaTextLines() = true
override fun replacesCivilopediaDescription() = true
override fun getCivilopediaTextLines(ruleset: Ruleset): List<FormattedLine> {
val textList = ArrayList<FormattedLine>()
textList += FormattedLine("${resourceType.name} resource", header = 4, color = resourceType.color)
textList += FormattedLine()
textList += FormattedLine(this.clone().toString())
if (terrainsCanBeFoundOn.isNotEmpty()) {
textList += FormattedLine()
if (terrainsCanBeFoundOn.size == 1) {
with (terrainsCanBeFoundOn[0]) {
textList += FormattedLine("{Can be found on} {$this}", link = "Terrain/$this")
}
} else {
textList += FormattedLine("{Can be found on}:")
terrainsCanBeFoundOn.forEach {
textList += FormattedLine(it, link = "Terrain/$it", indent = 1)
}
}
}
if (improvement != null) {
textList += FormattedLine()
textList += FormattedLine("Improved by [$improvement]", link = "Improvement/$improvement")
if (improvementStats != null && !improvementStats!!.isEmpty())
textList += FormattedLine("{Bonus stats for improvement}: " + improvementStats.toString())
}
val buildingsThatConsumeThis = ruleset.buildings.values.filter { it.getResourceRequirements().containsKey(name) }
if (buildingsThatConsumeThis.isNotEmpty())
stringBuilder.appendLine("{Buildings that consume this resource}: ".tr()
+ buildingsThatConsumeThis.joinToString { it.name.tr() })
if (buildingsThatConsumeThis.isNotEmpty()) {
textList += FormattedLine()
textList += FormattedLine("{Buildings that consume this resource}:")
buildingsThatConsumeThis.forEach {
textList += FormattedLine(it.name, link = "Building/${it.name}", indent = 1)
}
}
val unitsThatConsumeThis = ruleset.units.values.filter { it.getResourceRequirements().containsKey(name) }
if (unitsThatConsumeThis.isNotEmpty())
stringBuilder.appendLine("{Units that consume this resource}: ".tr()
+ unitsThatConsumeThis.joinToString { it.name.tr() })
if (unitsThatConsumeThis.isNotEmpty()) {
textList += FormattedLine()
textList += FormattedLine("{Units that consume this resource}: ")
unitsThatConsumeThis.forEach {
textList += FormattedLine(it.name, link = "Unit/${it.name}", indent = 1)
}
}
if (unique != null) stringBuilder.appendLine(unique!!.tr())
return stringBuilder.toString()
val buildingsRequiringThis = ruleset.buildings.values.filter {
it.requiredNearbyImprovedResources?.contains(name) == true
}
if (buildingsRequiringThis.isNotEmpty()) {
textList += FormattedLine()
textList += FormattedLine("{Buildings that require this resource worked near the city}: ")
buildingsRequiringThis.forEach {
textList += FormattedLine(it.name, link = "Building/${it.name}", indent = 1)
}
}
if (unique != null) {
textList += FormattedLine()
// Marble's unique is not parameterized, so the detour through the object is only useful for mods
textList += FormattedLine(Unique(unique!!))
}
textList += Belief.getCivilopediaTextMatching(name, ruleset)
return textList
}
}
data class ResourceSupply(val resource:TileResource,var amount:Int, val origin:String)
class ResourceSupplyList:ArrayList<ResourceSupply>() {
@ -57,4 +111,4 @@ class ResourceSupplyList:ArrayList<ResourceSupply>() {
for (resourceSupply in resourceSupplyList)
add(resourceSupply.resource, resourceSupply.amount, resourceSupply.origin)
}
}
}

View File

@ -81,9 +81,10 @@ class BaseUnit : INamed, IConstruction, CivilopediaText() {
return lines.joinToString("\n")
}
override fun getCivilopediaTextHeader() = FormattedLine(name, icon="Unit/$name", header=2)
override fun makeLink() = "Unit/$name"
override fun replacesCivilopediaDescription() = true
override fun hasCivilopediaTextLines() = true
override fun getCivilopediaTextLines(ruleset: Ruleset): List<FormattedLine> {
val textList = ArrayList<FormattedLine>()

View File

@ -204,7 +204,7 @@ class CivilopediaScreen(
.map {
CivilopediaEntry(
it.name,
it.getDescription(ruleset),
"",
CivilopediaCategories.Resource.getImage?.invoke(it.name, imageSize),
(it as? ICivilopediaText).takeUnless { ct -> ct==null || ct.isCivilopediaTextEmpty() }
)
@ -213,7 +213,7 @@ class CivilopediaScreen(
.map {
CivilopediaEntry(
it.name,
it.getDescription(ruleset),
"",
CivilopediaCategories.Terrain.getImage?.invoke(it.name, imageSize),
(it as? ICivilopediaText).takeUnless { ct -> ct==null || ct.isCivilopediaTextEmpty() }
)
@ -222,7 +222,7 @@ class CivilopediaScreen(
.map {
CivilopediaEntry(
it.name,
it.getDescription(ruleset, false),
"",
CivilopediaCategories.Improvement.getImage?.invoke(it.name, imageSize),
(it as? ICivilopediaText).takeUnless { ct -> ct==null || ct.isCivilopediaTextEmpty() }
)

View File

@ -367,7 +367,7 @@ object MarkupRenderer {
}
/** Storage class for interface [ICivilopediaText] for use as base class */
open class CivilopediaText : ICivilopediaText {
abstract class CivilopediaText : ICivilopediaText {
override var civilopediaText = listOf<FormattedLine>()
}
/** Storage class for instantiation of the simplest form containing only the lines collection */
@ -377,6 +377,8 @@ class SimpleCivilopediaText(lines: List<FormattedLine>, val isComplete: Boolean
}
override fun hasCivilopediaTextLines() = true
override fun replacesCivilopediaDescription() = isComplete
override fun makeLink() = ""
constructor(strings: Sequence<String>, isComplete: Boolean = false) : this(
strings.map { FormattedLine(it) }.toList(), isComplete)
constructor(first: Sequence<FormattedLine>, strings: Sequence<String>, isComplete: Boolean = false) : this(
@ -388,24 +390,23 @@ class SimpleCivilopediaText(lines: List<FormattedLine>, val isComplete: Boolean
* ### Usage:
* 1. Let [Ruleset] object implement this (e.g. by inheriting class [CivilopediaText] or adding var [civilopediaText] itself)
* 2. Add `"civilopediaText": ["",],` in the json for these objects
* 3. Optionally override [getCivilopediaTextHeader] to supply a header line
* 3. Optionally override [getCivilopediaTextHeader] to supply a different header line
* 4. Optionally override [getCivilopediaTextLines] to supply automatic stuff like tech prerequisites, uniques, etc.
* 4. Optionally override [assembleCivilopediaText] to handle assembly of the final set of lines yourself.
*/
interface ICivilopediaText {
/** List of strings supporting simple [formatting rules][FormattedLine] that [CivilopediaScreen] can render.
* May later be merged with automatic lines generated by the deriving class
* May later be merged with automatic lines generated by the deriving class
* through overridden [getCivilopediaTextHeader] and/or [getCivilopediaTextLines] methods.
*
*/
var civilopediaText: List<FormattedLine>
/** Generate header line from object metadata.
* Default implementation will pull [INamed.name] and render it in 150% normal font size.
* Default implementation will take [INamed.name] and render it in 150% normal font size with an icon from [makeLink].
* @return A [FormattedLine] that will be inserted on top
*/
fun getCivilopediaTextHeader(): FormattedLine? =
if (this is INamed) FormattedLine(name, header = 2)
if (this is INamed) FormattedLine(name, icon=makeLink(), header = 2)
else null
/** Generate automatic lines from object metadata.
@ -467,4 +468,7 @@ interface ICivilopediaText {
}
return SimpleCivilopediaText(newLines.toList(), isComplete = true)
}
/** Create the correct string for a Civilopedia link */
fun makeLink(): String
}