From b9f79376ce951bf0f34ab7e70af671481ad87f86 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sat, 5 Oct 2019 20:46:10 +0300 Subject: [PATCH 1/8] Transportation upkeep no longer disappears after adopting Trade Unions - kudos ..,,,! --- core/src/com/unciv/logic/civilization/CivInfoStats.kt | 3 ++- .../ui/worldscreen/optionstable/WorldScreenOptionsTable.kt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/com/unciv/logic/civilization/CivInfoStats.kt b/core/src/com/unciv/logic/civilization/CivInfoStats.kt index 5c5e8f716b..15c4aa8a27 100644 --- a/core/src/com/unciv/logic/civilization/CivInfoStats.kt +++ b/core/src/com/unciv/logic/civilization/CivInfoStats.kt @@ -48,7 +48,8 @@ class CivInfoStats(val civInfo: CivilizationInfo){ } } } - if (civInfo.policies.isAdopted("Trade Unions")) transportationUpkeep *= (2 / 3f).toInt() + if (civInfo.policies.isAdopted("Trade Unions")) + transportationUpkeep = (transportationUpkeep * 2 / 3f).toInt() return transportationUpkeep } diff --git a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt index c5bc155c8b..033e88bed5 100644 --- a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt +++ b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt @@ -271,7 +271,8 @@ class WorldScreenOptionsTable(val worldScreen:WorldScreen) : PopupTable(worldScr GameBasics.Translations.getLanguages().map { Language(it) }.sortedByDescending { it.percentComplete } .forEach { languageArray.add(it) } languageSelectBox.items = languageArray - languageSelectBox.selected = languageArray.first { it.language == UnCivGame.Current.settings.language } + val matchingLanguage = languageArray.firstOrNull { it.language == UnCivGame.Current.settings.language } + languageSelectBox.selected = if (matchingLanguage != null) matchingLanguage else languageArray.first() innerTable.add(languageSelectBox).pad(10f).row() languageSelectBox.addListener(object : ChangeListener() { From d1fb55a75e3bbc5c9f6b9bd929a232b19956adc0 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sat, 5 Oct 2019 20:58:33 +0300 Subject: [PATCH 2/8] Resolved #1152 - New units no longer skip over unassignable tiles (land tiles for water units, mountains) when spawning --- core/src/com/unciv/logic/map/TileMap.kt | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/core/src/com/unciv/logic/map/TileMap.kt b/core/src/com/unciv/logic/map/TileMap.kt index 64613d2d78..28870c3734 100644 --- a/core/src/com/unciv/logic/map/TileMap.kt +++ b/core/src/com/unciv/logic/map/TileMap.kt @@ -1,12 +1,12 @@ package com.unciv.logic.map import com.badlogic.gdx.math.Vector2 -import com.unciv.models.metadata.GameParameters import com.unciv.logic.GameInfo import com.unciv.logic.HexMath import com.unciv.logic.MapSaver import com.unciv.logic.civilization.CivilizationInfo import com.unciv.models.gamebasics.GameBasics +import com.unciv.models.metadata.GameParameters class TileMap { @@ -74,13 +74,22 @@ class TileMap { fun placeUnitNearTile(position: Vector2, unitName: String, civInfo: CivilizationInfo): MapUnit? { val unit = GameBasics.Units[unitName]!!.getMapUnit() - val tilesInDistance = getTilesInDistance(position, 2) - unit.assignOwner(civInfo,false) // both the civ name and actual civ need to be in here in order to calculate the canMoveTo...Darn - var unitToPlaceTile = tilesInDistance.firstOrNull { unit.movement.canMoveTo(it) && (unit.type.isWaterUnit() || it.isLand) } - if (unitToPlaceTile==null) - unitToPlaceTile = tilesInDistance.firstOrNull { unit.movement.canMoveTo(it) } - if(unitToPlaceTile!=null) { //see if a land unit can be placed on land. if impossible, put it on water. + fun isTileMovePotential(tileInfo:TileInfo): Boolean { + if(unit.type.isWaterUnit()) return tileInfo.isWater || tileInfo.isCityCenter() + else return tileInfo.isLand + } + + var viableTilesToPlaceUnitIn = getTilesInDistance(position, 1).filter { isTileMovePotential(it) } + // This is so that units don't skip over non-potential tiles to go elsewhere - + // e.g. a city 2 tiles away from a lake could spawn water units in the lake...Or spawn beyond a mountain range... + viableTilesToPlaceUnitIn = viableTilesToPlaceUnitIn.union(getTilesAtDistance(position, 2)) + .filter { isTileMovePotential(it) && it.neighbors.any { n->n in viableTilesToPlaceUnitIn } } + + unit.assignOwner(civInfo,false) // both the civ name and actual civ need to be in here in order to calculate the canMoveTo...Darn + val unitToPlaceTile = viableTilesToPlaceUnitIn.firstOrNull { unit.movement.canMoveTo(it) } + + if(unitToPlaceTile!=null) { // only once we know the unit can be placed do we add it to the civ's unit list unit.putInTile(unitToPlaceTile) unit.currentMovement = unit.getMaxMovement().toFloat() From 1aa9640d1c8ffdb42296eb91123ce3eb2173dd9f Mon Sep 17 00:00:00 2001 From: Smashfanful <41149920+Smashfanful@users.noreply.github.com> Date: Sat, 5 Oct 2019 15:22:03 +0200 Subject: [PATCH 3/8] Update Other.json New lines --- android/assets/jsons/Translations/Other.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/android/assets/jsons/Translations/Other.json b/android/assets/jsons/Translations/Other.json index 1ae1af47ea..8f972b5f00 100644 --- a/android/assets/jsons/Translations/Other.json +++ b/android/assets/jsons/Translations/Other.json @@ -1040,6 +1040,14 @@ Portuguese:"Pontos por turno" Russian:"Очки за ход" } + + "Convert production to gold at a rate of 4 to 1":{ + Italian:"Converte la Produzione a Oro a un tasso di 4 a 1" + } + + "Convert production to science at a rate of 4 to 1":{ + Italian:"Converte la Produzione a Scienza a un tasso di 4 a 1" + } ////// Tech picker From 09420786bc914607e34a95d944b08fb9cf10dd69 Mon Sep 17 00:00:00 2001 From: lishaoxia1985 <49801619+lishaoxia1985@users.noreply.github.com> Date: Sun, 6 Oct 2019 02:10:10 +0800 Subject: [PATCH 4/8] modify battle damage calculation method about city attack. (#1141) --- .../Nations/Nations_Simplified_Chinese.json | 2 +- .../assets/jsons/Translations/Buildings.json | 3 ++- .../Translations/Diplomacy,Trade,Nations.json | 7 ++++--- android/assets/jsons/Translations/Other.json | 14 +++++++------- .../assets/jsons/Translations/Policies.json | 6 +++--- .../Tutorials_Simplified_Chinese.json | 19 +++++++++++++++++-- build.gradle | 2 +- .../com/unciv/logic/battle/BattleDamage.kt | 9 +++++---- .../com/unciv/logic/battle/CityCombatant.kt | 9 +++++---- .../unciv/logic/civilization/CivInfoStats.kt | 5 +++-- .../logic/civilization/CivilizationInfo.kt | 4 ++-- .../unciv/logic/civilization/TechManager.kt | 4 ++-- .../diplomacy/DiplomacyManager.kt | 4 ++-- 13 files changed, 54 insertions(+), 34 deletions(-) diff --git a/android/assets/jsons/Nations/Nations_Simplified_Chinese.json b/android/assets/jsons/Nations/Nations_Simplified_Chinese.json index f1e94589a9..50d84eb79e 100644 --- a/android/assets/jsons/Nations/Nations_Simplified_Chinese.json +++ b/android/assets/jsons/Nations/Nations_Simplified_Chinese.json @@ -117,7 +117,7 @@ declaringWar:"小小蝼蚁般的可悲文明,去死吧。", attacked:"可怜的蠢蛋。你在毁灭你自己和你可悲的文明。", defeated:"你什么也没得到。就算把我打倒,我的灵魂也会将你永堕深渊。", - introduction:" 向你致意。我是拉美西斯神,我是所有其他文明的父母之邦——埃及的化身。", + introduction:"向你致意。我是拉美西斯神,我是所有其他文明的父母之邦——埃及的化身。", neutralHello:"真是美好的一天。", neutralLetsHearIt:["继续。","请讲。","我正倾耳听之。"], diff --git a/android/assets/jsons/Translations/Buildings.json b/android/assets/jsons/Translations/Buildings.json index dcedb9ac55..c2008af5c7 100644 --- a/android/assets/jsons/Translations/Buildings.json +++ b/android/assets/jsons/Translations/Buildings.json @@ -153,6 +153,7 @@ } "Free Technology":{ + Simplified_Chinese:"获得1项免费科技" } "'Libraries are as the shrine where all the relics of the ancient saints, full of true virtue, and all that without delusion or imposture are preserved and reposed.' - Sir Francis Bacon":{ @@ -346,7 +347,7 @@ German:"Kostenloser Solzialgrundsatz" Dutch:"Gratis sociaalbeleid" Spanish:"Política social gratis" - Simplified_Chinese:"可免费推行1项社会政策" + Simplified_Chinese:"免费推行1项社会政策" Portuguese:"Politica social gratis" Polish:"Darmowy ustrój społeczny" } diff --git a/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json b/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json index f3eea0deb8..5fbd4d21ad 100644 --- a/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json +++ b/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json @@ -588,7 +588,7 @@ French:"Nos articles" Romanian:"Articolele noastre" Spanish:"Nuestros ítems" - Simplified_Chinese:"我们的物品" + Simplified_Chinese:"我们的交易项" Portuguese:"Nossos itens/recursos" German:"Unsere Gegenstände" } @@ -621,7 +621,7 @@ French:"Les articles de [otherCiv]" Romanian:"Articolele de la [otherCiv]" Spanish:"Ítems de [otherCiv]" - Simplified_Chinese:"[otherCiv]的物品" + Simplified_Chinese:"[otherCiv]的交易项" Portuguese:"Itens da(o/e) [otherCiv]" German:"[otherCiv]s Gegenstände" } @@ -684,7 +684,7 @@ French:"Il n'y a rien a échangé" //if it's in case of empty trade it's accurate Romanian:"Nu e nimic pe masă" Spanish:"¿Estas de broma?" - Simplified_Chinese:"表格上没有任何物品" + Simplified_Chinese:"未选中任何交易项" Portuguese:"Não ha nada á mesa" German:"Der Verhandlungstisch ist leer" } @@ -764,6 +764,7 @@ "Declare war on [nation]":{ Italian:"Dichiara guerra a [nation]" + Simplified_Chinese:"宣战[nation]" } "Luxury resources":{ diff --git a/android/assets/jsons/Translations/Other.json b/android/assets/jsons/Translations/Other.json index 8f972b5f00..7be7e2d93e 100644 --- a/android/assets/jsons/Translations/Other.json +++ b/android/assets/jsons/Translations/Other.json @@ -758,7 +758,7 @@ German:"Wartungskosten" Dutch:"Onderhouskosten" Spanish:"Coste de mantenimiento" - Simplified_Chinese:"维护费" + Simplified_Chinese:"建筑维护费" Portuguese:"Custo de manutenção" Japanese:"メンテナンス費用" } @@ -1554,7 +1554,7 @@ French:"Entretien" Romanian:"Întreținere" Spanish:"Mantenimiento" - Simplified_Chinese:"维护费" + Simplified_Chinese:"建筑维护费" Portuguese:"Manutenção" German:"Wartung" } @@ -1565,7 +1565,7 @@ French:"Entretien des transports" Romanian:"Întreținere trasporturi" Spanish:"Mantenimiento de transporte" - Simplified_Chinese:"道(铁)路维护" + Simplified_Chinese:"道(铁)路维护费" Portuguese:"Manutenção de transporte" German:"Unterhalt für Transport" } @@ -1576,7 +1576,7 @@ French:"Entretien des unités" Romanian:"Întreținere unități" Spanish:"Mantenimiento de unidades" - Simplified_Chinese:"单位维护" + Simplified_Chinese:"单位维护费" Portuguese:"Manutenção de unidades" German:"Unterhalt für Einheiten" } @@ -1679,7 +1679,7 @@ German:"Um zu gewinnen vervollständigen\nSie 4 Grundsatzzweige!" French:"Completer 4 Doctrines pour gagner!" Russian:"Завершите 4 ветви общественных институтов\n чтобы победить!" - Simplified_Chinese:"完全推行4项社会政策\n胜利!" + Simplified_Chinese:"完成4个社会政策分支\n胜利!" Portuguese:"Complete 4 árvores de politicas para ganhar" } @@ -1783,14 +1783,14 @@ "Spaceship parts remaining":{ Italian:"Parti dell'astronave rimanenti" French:"Parties de Vaisseau spatial manquantes" - Simplified_Chinese:"未完成建造的飞船组件数量" + Simplified_Chinese:"未完成建造的飞船组件" Russian:"Осталось частей КК" } "Branches completed":{ Italian:"Rami completati" French:"Branches complêtées" - Simplified_Chinese:"已完全推行的社会政策数量" + Simplified_Chinese:"已完成的社会政策分支" Russian:"Ветвей завершено" } diff --git a/android/assets/jsons/Translations/Policies.json b/android/assets/jsons/Translations/Policies.json index f0f1cc2e07..4215c254d9 100644 --- a/android/assets/jsons/Translations/Policies.json +++ b/android/assets/jsons/Translations/Policies.json @@ -630,7 +630,7 @@ Russian:"+1 культура за каждый монумент, храм и монастырь. Даёт бесплатный общественный институт" Romanian:"+1 cultură pentru fiecare monument, templu sau mănăstire. Obține o politică gratuită" Spanish:"+1 cultura por cada monumento, templo y monasterio. Ganas una política gratis" - Simplified_Chinese:"每座纪念碑、神庙和修道院+1文化,获得1次免费推行社会政策的机会" + Simplified_Chinese:"每座纪念碑、神庙和修道院+1文化,免费推行1项社会政策" Portuguese:"+1 cultura por cada monumento, templo e monastério. Ganha uma apolítica grátis" German:"+1 Kultur für jedes Monument, Kloster und Tempel; Ein kostenloser Grundsatz." French:"+1 culture pour chaque monument, temple et monastère, donne une doctrine gratuite" @@ -849,7 +849,7 @@ Russian:"+1 к счастью от каждого редкого ресурса" Romanian:"+1 fericire din fiecare resursă de lux" Spanish:"+1 felicidad por cada recurso de lujo" - Simplified_Chinese:"每个奢侈资源+1快乐" + Simplified_Chinese:"每种奢侈资源额外+1快乐" Portuguese:"+1 Felicidade por cade recurso de luxo" German:"+1 Zufriedenheit für jede Luxusresource" French:"+1 Bonheur pour chaque ressource de luxe" @@ -1005,7 +1005,7 @@ Russian:"Даёт 2 бесплатные технологии" Romanian:"Obține 2 tehnologii gratuite" Spanish:"Ganas 2 tecnologías gratis" - Simplified_Chinese:"给予2项免费科技" + Simplified_Chinese:"获得2项免费科技" Portuguese:"Ganhe 2 tecnologias grátis" German:"2 kostenlose Technologien" French:"2 technologies gratuites" diff --git a/android/assets/jsons/Tutorials/Tutorials_Simplified_Chinese.json b/android/assets/jsons/Tutorials/Tutorials_Simplified_Chinese.json index a70f016ad4..e222615ebd 100644 --- a/android/assets/jsons/Tutorials/Tutorials_Simplified_Chinese.json +++ b/android/assets/jsons/Tutorials/Tutorials_Simplified_Chinese.json @@ -233,7 +233,7 @@ ], [ "在Unciv游戏中,有三种赢得胜利的方式。分别是:", - "文化胜利---完全推行4项社会政策;", + "文化胜利---完成4个社会政策分支;", "征服胜利---通过消灭其他文明成为世界上唯一的存在;", "科技胜利---成为第一个建造太空飞船飞向遥远的半人马阿尔法星的文明。" ], @@ -282,6 +282,21 @@ ] ] + ConqueredEnemyCity: [ + [ + "恭喜!您已经攻占了一座敌人的城市!", + "您可以选择摧毁、傀儡甚至吞并它。", + "“摧毁城市”可以令城市人口每回合-1,人口为0时城市将完全被摧毁。" + ], + [ + "“傀儡城市”意味着您将无法控制该城市的产能,", + "好处是该城市将不会额外增加您研发科技和推行社会政策时的花费,同时该城市人口产生的不满是正常值的1.5倍。", + "“吞并城市”将会给予您该城市的绝对控制权,但该城市人口产生的不满将是正常值的2倍。", + "在城市内建造“法庭”可以使人口产生的不满降低到正常值。", + "可以在任何时候吞并已傀儡的城市,但已吞并的城市无法再变为傀儡状态。选择前请考虑清楚!" + ] + ] + BarbarianEncountered: [ [ "您遇到蛮族了!", @@ -303,7 +318,7 @@ "NO!看起来游戏好像出现了灾难性的Bug!", "这绝对不应该发生!", "请将游戏存档信息发送给我,方法如下:", - "依次点击“菜单->储存游戏->复制到剪贴板”,将剪贴板的内容通过email发送给我。", + "依次点击“菜单->储存游戏->复制当前游戏数据到剪贴板”,将剪贴板的内容通过email发送给我。", "我的email地址:yairm210@hotmail.com。我会尽快处理!" ] ] diff --git a/build.gradle b/build.gradle index dd586de743..34b8d99833 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ buildscript { } dependencies { classpath 'de.richsource.gradle.plugins:gwt-gradle-plugin:0.6' - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:3.5.1' classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.1' } } diff --git a/core/src/com/unciv/logic/battle/BattleDamage.kt b/core/src/com/unciv/logic/battle/BattleDamage.kt index db29033383..0763b797dd 100644 --- a/core/src/com/unciv/logic/battle/BattleDamage.kt +++ b/core/src/com/unciv/logic/battle/BattleDamage.kt @@ -9,6 +9,7 @@ import kotlin.collections.HashMap import kotlin.collections.set import kotlin.math.max import kotlin.math.pow +import kotlin.math.roundToInt class BattleDamageModifier(val vs:String,val modificationAmount:Float){ fun getText(): String = "vs $vs" @@ -199,8 +200,8 @@ class BattleDamage{ } private fun getHealthDependantDamageRatio(combatant: ICombatant): Float { - return if (combatant.getUnitType() == UnitType.City) 0.75f - else if(combatant.getCivInfo().nation.unique == "Units fight as though they were at full strength even when damaged" && !combatant.getUnitType().isAirUnit()) + return if(combatant.getUnitType() == UnitType.City + || combatant.getCivInfo().nation.unique == "Units fight as though they were at full strength even when damaged" && !combatant.getUnitType().isAirUnit()) 1f else 1 - (100 - combatant.getHealth()) / 300f// Each 3 points of health reduces damage dealt by 1% like original game } @@ -228,12 +229,12 @@ class BattleDamage{ if(attacker.isRanged()) return 0 if(defender.getUnitType().isCivilian()) return 0 val ratio = getAttackingStrength(attacker,defender) / getDefendingStrength(attacker,defender) - return (damageModifier(ratio, true) * getHealthDependantDamageRatio(defender)).toInt() + return (damageModifier(ratio, true) * getHealthDependantDamageRatio(defender)).roundToInt() } fun calculateDamageToDefender(attacker: ICombatant, defender: ICombatant): Int { val ratio = getAttackingStrength(attacker,defender) / getDefendingStrength(attacker,defender) - return (damageModifier(ratio,false) * getHealthDependantDamageRatio(attacker)).toInt() + return (damageModifier(ratio,false) * getHealthDependantDamageRatio(attacker)).roundToInt() } fun damageModifier(attackerToDefenderRatio:Float, damageToAttacker:Boolean): Float { diff --git a/core/src/com/unciv/logic/battle/CityCombatant.kt b/core/src/com/unciv/logic/battle/CityCombatant.kt index b7678ad12f..6b69945d68 100644 --- a/core/src/com/unciv/logic/battle/CityCombatant.kt +++ b/core/src/com/unciv/logic/battle/CityCombatant.kt @@ -6,6 +6,7 @@ import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.map.TileInfo import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.unit.UnitType +import kotlin.math.roundToInt class CityCombatant(val city: CityInfo) : ICombatant { override fun getMaxHealth(): Int { @@ -26,7 +27,7 @@ class CityCombatant(val city: CityInfo) : ICombatant { } override fun getUnitType(): UnitType = UnitType.City - override fun getAttackingStrength(): Int = getCityStrength()*2/5 // I remember reading this but I don't recall where + override fun getAttackingStrength(): Int = (getCityStrength() * 0.75).roundToInt() override fun getDefendingStrength(): Int{ if(isDefeated()) return 1 return getCityStrength() @@ -34,7 +35,7 @@ class CityCombatant(val city: CityInfo) : ICombatant { fun getCityStrength(): Int { // Civ fanatics forum, from a modder who went through the original code var strength = 8f - if(city.isCapital()) strength+=2.5f + if(city.isCapital()) strength+=2f strength += (city.population.population/5) * 2 // Each 5 pop gives 2 defence val cityTile = city.getCenterTile() if(cityTile.baseTerrain== Constants.hill) strength+=5 @@ -50,14 +51,14 @@ class CityCombatant(val city: CityInfo) : ICombatant { // Garrisoned unit gives up to 20% of strength to city, health-dependant if(cityTile.militaryUnit!=null) - strength += cityTile.militaryUnit!!.baseUnit().strength * cityTile.militaryUnit!!.health/100f + strength += cityTile.militaryUnit!!.baseUnit().strength * (cityTile.militaryUnit!!.health / 100f) * 0.2f var buildingsStrength = city.cityConstructions.getBuiltBuildings().sumBy{ it.cityStrength }.toFloat() if(getCivInfo().containsBuildingUnique("Defensive buildings in all cities are 25% more effective")) buildingsStrength*=1.25f strength += buildingsStrength - return strength.toInt() + return strength.roundToInt() } override fun toString(): String {return city.name} // for debug diff --git a/core/src/com/unciv/logic/civilization/CivInfoStats.kt b/core/src/com/unciv/logic/civilization/CivInfoStats.kt index 15c4aa8a27..f7e9fe0e2c 100644 --- a/core/src/com/unciv/logic/civilization/CivInfoStats.kt +++ b/core/src/com/unciv/logic/civilization/CivInfoStats.kt @@ -102,7 +102,8 @@ class CivInfoStats(val civInfo: CivilizationInfo){ val statMap = HashMap() statMap["Base happiness"] = civInfo.getDifficulty().baseHappiness.toFloat() - var happinessPerUniqueLuxury = 5f + civInfo.getDifficulty().extraHappinessPerLuxury + // TODO - happinessPerUnique should be difficulty-dependent, 5 on Settler and Chieftian and 4 on other difficulties (should be parameter, not in code) + var happinessPerUniqueLuxury = 4f + civInfo.getDifficulty().extraHappinessPerLuxury if (civInfo.policies.isAdopted("Protectionism")) happinessPerUniqueLuxury += 1 statMap["Luxury resources"]= civInfo.getCivResources().map { it.resource } .count { it.resourceType === ResourceType.Luxury } * happinessPerUniqueLuxury @@ -135,4 +136,4 @@ class CivInfoStats(val civInfo: CivilizationInfo){ return statMap } -} \ No newline at end of file +} diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 765405abe2..3ab5685d2e 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -417,7 +417,7 @@ class CivilizationInfo { fun addGreatPerson(greatPerson: String, city:CityInfo) { placeUnitNearTile(city.location, greatPerson) - addNotification("A [$greatPerson] has been born!".tr(), city.location, Color.GOLD) + addNotification("A [$greatPerson] has been born!", city.location, Color.GOLD) } fun placeUnitNearTile(location: Vector2, unitName: String): MapUnit? { @@ -456,7 +456,7 @@ class CivilizationInfo { .filter { !it.unitType.isCivilian() && it.unitType.isLandUnit() } .random() placeUnitNearTile(city.location, militaryUnit.name) - addNotification("[${otherCiv.civName}] gave us a [${militaryUnit.name}] as gift near [${city.name}]!".tr(), null, Color.GREEN) + addNotification("[${otherCiv.civName}] gave us a [${militaryUnit.name}] as gift near [${city.name}]!", null, Color.GREEN) } //endregion diff --git a/core/src/com/unciv/logic/civilization/TechManager.kt b/core/src/com/unciv/logic/civilization/TechManager.kt index fadbc0c189..c7c45c16ae 100644 --- a/core/src/com/unciv/logic/civilization/TechManager.kt +++ b/core/src/com/unciv/logic/civilization/TechManager.kt @@ -139,9 +139,9 @@ class TechManager { val currentEra = civInfo.getEra() if (previousEra < currentEra) { - civInfo.addNotification("You have entered the [$currentEra era]!".tr(), null, Color.GOLD) + civInfo.addNotification("You have entered the [$currentEra era]!", null, Color.GOLD) GameBasics.PolicyBranches.values.filter { it.era == currentEra } - .forEach { civInfo.addNotification("[" + it.name + "] policy branch unlocked!".tr(), null, Color.PURPLE) } + .forEach { civInfo.addNotification("[" + it.name + "] policy branch unlocked!", null, Color.PURPLE) } } val revealedResource = GameBasics.TileResources.values.firstOrNull { techName == it.revealedBy } diff --git a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt index 2b65f661fb..4c96f0974a 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt @@ -185,8 +185,8 @@ class DiplomacyManager() { trades.remove(trade) val otherCivTrades = otherCiv().getDiplomacyManager(civInfo).trades otherCivTrades.removeAll{ it.equals(trade.reverse()) } - civInfo.addNotification("One of our trades with [$otherCivName] has been cut short".tr(),null, Color.GOLD) - otherCiv().addNotification("One of our trades with [${civInfo.civName}] has been cut short".tr(),null, Color.GOLD) + civInfo.addNotification("One of our trades with [$otherCivName] has been cut short",null, Color.GOLD) + otherCiv().addNotification("One of our trades with [${civInfo.civName}] has been cut short",null, Color.GOLD) } } } From 2f2ace5f3cd81b66bd012921c34e272873facece Mon Sep 17 00:00:00 2001 From: Smashfanful <41149920+Smashfanful@users.noreply.github.com> Date: Sat, 5 Oct 2019 20:14:00 +0200 Subject: [PATCH 5/8] Update Buildings.json (#1153) --- android/assets/jsons/Translations/Buildings.json | 1 + 1 file changed, 1 insertion(+) diff --git a/android/assets/jsons/Translations/Buildings.json b/android/assets/jsons/Translations/Buildings.json index c2008af5c7..fb9b259a31 100644 --- a/android/assets/jsons/Translations/Buildings.json +++ b/android/assets/jsons/Translations/Buildings.json @@ -153,6 +153,7 @@ } "Free Technology":{ + Italian:"Dona una tecnologia gratuita" Simplified_Chinese:"获得1项免费科技" } From 8d31d2c0ad17253e3e7074a327fd98f5e687a097 Mon Sep 17 00:00:00 2001 From: Smashfanful <41149920+Smashfanful@users.noreply.github.com> Date: Fri, 4 Oct 2019 15:58:14 +0200 Subject: [PATCH 6/8] Update Tutorials_Italian.json Update --- .../jsons/Tutorials/Tutorials_Italian.json | 150 ++++++++++-------- 1 file changed, 83 insertions(+), 67 deletions(-) diff --git a/android/assets/jsons/Tutorials/Tutorials_Italian.json b/android/assets/jsons/Tutorials/Tutorials_Italian.json index 361094f72a..f81c357829 100644 --- a/android/assets/jsons/Tutorials/Tutorials_Italian.json +++ b/android/assets/jsons/Tutorials/Tutorials_Italian.json @@ -9,50 +9,50 @@ ], // this will be displayed as 4 lines of text in-game as well [ "Le politiche sono divise in rami, ognuno dei quali concede un'abilità bonus", - " bonus quanto tutte le sue politiche sono state adottate." + " bonus quanto tutte le sue politiche sono state adottate." ], [ - "Ad ogni politica adottata, e ad ogni nuova città fondata, il costo ", - " di adozione per un'altra politica aumenta, quindi pianifica con cautela!" + "Per ogni politica adottata, e per ogni nuova città fondata, il costo ", + " di adozione per un'altra politica aumenta, quindi pianifica con cautela!" ] ], CityEntered: [ [ "Benvenuto nella tua prima città!", - "Per ora, possiedi solo 1 abitante, ma la popolazione crescerà quando possiedi del cibo in eccesso", - "In modo simile, la città espanderà i suoi confini quando accumulerà cultura sufficiente,", - " che normalmente non si genera dalle caselle, ma piuttosto dagli edifici." + "Per ora, possiede solo 1 abitante, ma la popolazione crescerà quando possiedi del cibo in eccesso", + "In modo simile, la città espanderà i suoi confini quando accumulerà cultura sufficiente, ", + " che normalmente non si genera dalle caselle, ma piuttosto dagli edifici." ], [ - "Ogni abitante nella tua città può sfruttare una singola casella, dando alla città gli introiti della casella.", + "Ogni abitante nella tua città può sfruttare una singola casella, dando alla città gli introiti che essa contiene.", "Puoi assegnare e togliere lavoro agli abitanti cliccando sulle caselle, ", - " ma, ovviamente, puoi dare lavoro solo se hai ancora abitanti non attivi." + " ma, ovviamente, puoi dare lavoro solo se possiedi abitanti non attivi." ], [ - "La casella centrale di una città è sempre sfruttata e non richiede abitanti,", - " ma non può contenere miglioramenti.", - "La produzione cittadina tira sempre verso la costruzione attuale. ", + "La casella centrale di una città è sempre sfruttata e non richiede abitanti, ", + " ma non può contenere miglioramenti.", + "La produzione cittadina tira sempre verso la costruzione attuale.", "Puoi scegliere la costruzione cliccando sul tasto costruzione in basso a sinistra." ] ], TechPickerScreen : [ [ - "La tecnologia è centrale per la tua civiltà,", - " perché quante più tecnologie ricerchi", + "La tecnologia è centrale per la tua civiltà, ", + " perché quante più tecnologie ricerchi ", " più abilità, unità, miglioramenti ed edifici ti saranno concessi." ], [ "La maggior parte delle tecnologie sono dipese dalla ricerca di altre tecnologie, ", - " ma puoi scegliere a quale tecnologia aspiri, e la tua civiltà", - " ricercherà le tecnologie necessarie per arrivarci." + " ma puoi scegliere a quale tecnologia aspiri, e la tua civiltà ", + " ricercherà le tecnologie necessarie per arrivarci." ] [ "Ricorda di restare competitivo nella corsa tecnologica, perché se rimani ", - " troppo indietro in tale campo ti ritroverai nella stessa situazione degli Aztechi, che ", - " dovettero affrontare i moschetti e i cannoni spagnoli armati solo di fionde e spade in ossidiana." - " La storia ci insegna che in casi come questo vince sempre chi possiede la tecnologia più avanzata." + " troppo indietro in tale campo ti ritroverai nella stessa situazione degli Aztechi, che ", + " dovettero affrontare i moschetti e i cannoni spagnoli armati solo di fionde e spade in ossidiana." + "La storia ci insegna che in casi come questo vince sempre chi possiede la tecnologia più avanzata." ] ], @@ -60,23 +60,23 @@ CityFounded : [ [ "Hai fondato una città!", - "Le Città sono la linfa vitale del tuo impero, perchè producono globalmente,", - " oro e scienza, che puoi vedere nella barra superiore.", - "Clicca sul nome della città per entrare nella schermata cittadina, dove puoi assegnare", - " abitanti, scegliere la produzione, e vedere le informazioni della Città." + "Le Città sono la linfa vitale del tuo impero, perchè producono globalmente ", + " oro e scienza, che puoi vedere nella barra superiore.", + "Clicca sul nome della città per entrare nella schermata cittadina, dove puoi assegnare ", + " abitanti, scegliere la produzione, e vedere le informazioni della Città." ], [ - "Una volta fondata la tua prima città, potrai iniziare a produrre una nuova unità,", - " e iniziare a ricercare la tua prima tecnologia.", - "Non mi dilungherò troppo nella parte tecnologica, per adesso (ci penserà il manuale),", - " quindi parliamo della produzione." + "Una volta fondata la tua prima città, potrai iniziare a produrre una nuova unità, ", + " e iniziare a ricercare la tua prima tecnologia.", + "Non mi dilungherò troppo nella parte tecnologica, per adesso (ci penserà il manuale), ", + " quindi parliamo della produzione." ], [ "Le prime cose producibili dalla città saranno lo Scout e il Guerriero." - "Generalmente preferisco il Guerriero, in quanto utile per difendersi, oltre che aggiornabile", - " allo Spadaccino nelle fasi successive per una modesta somma di denaro e una certa risorsa.", - "Gli Scout non sono da meno, però, soprattutto se ti trovi in un'area abbondante di foreste e colline,", - " terreni sui quali non ci sono penalità di movimento per lo Scout." + "Generalmente preferisco il Guerriero, in quanto utile per difendersi, oltre che aggiornabile ", + " allo Spadaccino nelle fasi successive per una modesta somma di denaro e una certa risorsa.", + "Gli Scout non sono da meno, però, soprattutto se ti trovi in un'area abbondante di foreste e colline, ", + " terreni sui quali non ci sono penalità di movimento per lo Scout." "Se sei un veterano del genere 4X, prova a costruire un Guerriero e uno Scout seguito da un Colono.", "In gran parte dei giochi di questo tipo, una rapida espansione è un'azione critica.", ], @@ -87,25 +87,25 @@ "Salve! Benvenuto su Unciv!", "I giochi di tipo Civilization possono essere complessi, quindi ti guideremo passo dopo passo.", "La tua prima missione è fondare la tua Città Capitale.", - "È invero assai importante perché la tua Capitale sarà la tua Città più prospera.", + "È invero assai importante perché di solito la tua Capitale sarà la tua Città più prospera.", "Molti dei bonus del gioco si applicano solo sulla tua Capitale, centro del tuo impero." ], [ "Come si fa a sapere se un punto è appropriato?", "Non è facile rispondere a questa domanda, ma cercare e costruire accanto a risorse di lusso è un'ottima idea.", - "Le risorse di lusso sono caselle che possiedono oggetti come gemme, cotome o seta," - " (e sono indicate da un sorriso vicino all'icona della risorsa)", + "Le risorse di lusso sono caselle che possiedono oggetti come gemme, cotome o seta, " + " (e sono indicate da un sorriso vicino all'icona della risorsa)", "Queste risorse rendono felici i tuoi cittadini." - "Tieni d'occhio anche le risorse necessarie per costruire alcune unità e strutture, come il Ferro." + "Tieni d'occhio anche le risorse necessarie per costruire alcune unità e strutture, come il Ferro o i Cavalli." ], [ - "Le Città, però, non hanno un'area predefinita dove possono lavorare (ce ne occuperemo dopo)," - " quindi non è obbligatorio fondare città vicino alle risorse.", - "Mettiamo, per esempio, che tu voalia usare del Ferro ma la risorse si trova vicino a un deserto." - "Non serve fondare la città accanto a quel deserto, e puoi invece farlo qualche casella più in là,", - " in terre più prospere, e, con un po' di fortuna, la città, crescendo, avrà accesso alla risorsa.", - "Se ti serve subito, però, sarà necessario fondarla nelle sue immediate vicinanze,", - " e potrebbe servire fin da subito, ma di solito avrai il lusso del tempo." + "Le Città, però, non hanno un'area predefinita dove possono lavorare (ce ne occuperemo dopo), " + " quindi non è obbligatorio fondare città vicino alle risorse.", + "Mettiamo, per esempio, che tu voglia usare del Ferro ma la risorsa si trova vicino a un deserto." + "Non serve fondare la città accanto a quel deserto, e puoi invece farlo qualche casella più in là, ", + " in terre più prospere, e, con un po' di fortuna, la città, crescendo, avrà accesso alla risorsa.", + "Se ti serve subito, però, sarà necessario fondarla nelle sue immediate vicinanze, ", + " e potrebbe servire fin da subito, ma di solito avrai il lusso del tempo." ], ], @@ -120,15 +120,15 @@ "All'aumentare della popolazione troverai sempre più difficile mantenerne la felicità." ], [ - "Inolte, per costruire degli edifici che incrementano la Felicità, dovrai ricercarne l'apposita tecnologia.", - "Controlla la tua Felicità (indicata da un sorriso nella barra superiore dell'interfaccia): se scende", - " sotto lo zero, non solo la tua economia ne avrà da soffrire, ma i tuoi eserciti", - " avranno una tremenda penalità inflitta alla loro efficacia in combattimento." + "Inoltre, per costruire degli edifici che incrementano la Felicità, dovrai ricercarne l'apposita tecnologia.", + "Controlla la tua Felicità (indicata da un sorriso nella barra superiore dell'interfaccia): ", + " se scende sotto lo zero, non solo la tua economia ne avrà da soffrire, ", + " ma i tuoi eserciti avranno una pessima penalità inflitta alla loro efficacia in combattimento." ], [ "Questa è la ragione per cui è molto difficile espandersi rapidamente in Unciv.", "Non è certo impossibile, ma come nuovo giocatore non dovresti farlo.", - "Pertanto, basta fare con calma, esplora, e migliora i tuoi terreni utilizzando i Lavoratori.", + "Pertanto, basta fare con calma, esplorare, e migliorare i tuoi terreni utilizzando i Lavoratori.", "Se vuoi fondare nuove Città, fallo solo su punti che credi appropriati." ], ], @@ -170,12 +170,12 @@ NextTurn: [ [ - "Nei tuoi primi turni, avrai ben poche opzioni, ma con il crescere della tua civiltà, lo stesso accadrà ", - " alla quantità di cose che richiedono la tua attenzione." + "Nei tuoi primi turni, avrai ben poche opzioni, ma con il crescere della tua civiltà, aumenterà anche ", + " la quantità di cose che richiedono la tua attenzione." ] [ "Ah, dimenticavo! Qualsiasi cosa tu faccia, nelle prime fasi del gioco ricordati sempre ", - " di inviare qualche unità (il tuo Scout, ad esempio) ad esplorare il mondo (se non l'hai già fatto). ", + " di inviare qualche unità (il tuo Scout, ad esempio) ad esplorare il mondo (se non l'hai già fatto).", "Se non sai cosa ti succede intorno, qualche vicino avido ti tirerà certamente ", " qualche tiro mancino, e l'esperienza potrebbe esserti fatale!" ] @@ -184,7 +184,7 @@ ContactMe: [ [ "Salve! Se sei giunto/a fin qui, forse avrai visto che il gioco è al momento incompleto.", - "UnCiv dovrebbe essere open-source e gratuito per sempre, quindi nessuna pubblicità o altre siocchezze." + "UnCiv dovrebbe essere open-source e gratuito per sempre, quindi privo di pubblicità o altre siocchezze." ], [ "Ciò che mi motiva a continuare il progetto, oltre al fatto che è fantastico, ", @@ -220,25 +220,9 @@ [ "Sei entrato in un'Età dell'Oro! Che fortuna!", "I punti Età dell'Oro si accumulano ad ogni turno dalla felicità totale della tua civiltà.", - "Durante l'Età dell'Oro, generi Cultura e Produzione il 20% in più, ", + "Durante l'Età dell'Oro, generi il 20% in più di Cultura e Produzione, ", " e ogni casella che frutta minimo un punto Oro ne frutta uno aggiuntivo." ] - [ - "Fondate le tue prime due/tre Città saranno passati già almeno 100/150 turni di gioco.", - "Ora dovresti pensare a come, esattamente, vorresti vincere... se non l'hai già pensato." - ], - [ - "Tre sono i modi per vincere una partita qualsiasi Unciv. Eccole:", - "Culturale: Completa 4 Rami delle Politiche", - "Dominazione: Sopravvivi come l'ultima civiltà", - "Scientifica: Costruisci per primo un'astronave per Alpha Centauri" - ], - [ - "Riassumendo, queste sono le basi perUnciv.", - "Fonda una capitale prospera, espanditi lentamente per gestire la tua felicità ed economia, ", - " e impostati una condizione di vittoria che desideri conseguire.", - "Ovviamente, vi è molto più di questo, ma prima di tuffarti dovresti innanzitutto imparare a nuotare.", - ] ], SecondCity: [ @@ -248,6 +232,22 @@ "Nota che ogni strada costa 1 Oro di manutenzione al turno, quindi attendi di " " possedere una forte economia finché le città crescono!" ] + [ + "Fondate le tue prime due/tre Città, saranno passati già almeno 100/150 turni di gioco.", + "Ora dovresti pensare a come, esattamente, vorresti vincere... se non l'hai già fatto." + ], + [ + "Tre sono i modi per vincere una partita qualsiasi in Unciv:", + "Culturale: Completa 4 Rami delle Politiche Sociali", + "Dominazione: Sopravvivi come l'ultima civiltà distruggendo tutte le altre", + "Scientifica: Costruisci per primo un'astronave per Alpha Centauri riunendone tutte le parti dell'astronave" + ], + [ + "Riassumendo, queste sono le basi per Unciv.", + "Fonda una capitale prospera, espanditi lentamente per gestire la tua felicità ed economia, ", + " e impostati una condizione di vittoria che desideri conseguire.", + "Ovviamente, vi è molto più di questo, ma prima di tuffarti dovresti innanzitutto imparare a nuotare.", + ] ], EnemyCity: [ @@ -287,6 +287,22 @@ ] ], + ConqueredEnemyCity: [ + [ + "Hai conquistato una città nemica!", + "Ora puoi scegliere se raderla al suolo, ridurla a stato fantoccio o annetterla al tuo impero.", + "Se scegli la prima opzione, la città perderà un abitante al turno, fino a scomparire del tutto." + ], + [ + "Porla come stato fantoccio non ti consente di controllarne la produzione, ma in compenso", + " non incrementerà i tuoi costi tecnologici o di politica, e la popolazione genererà " + " soltanto un'infelicità 1.5 volte superiore alla norma.", + "Se annetti la città, potrai farne quello che desideri, ma l'infelicità della popolazione sarà raddoppiata!", + "Puoi mitigare il tutto costruendo un palazzo di giustizia, ripristinando l'infelicità della popolazione.", + "Puoi annettere una città fantoccio quando vuoi, ma ricorda che è un processo irreversibile!" + ] + ], + BarbarianEncountered: [ [ "Hai incontrato un'unità barbarica!", From 815ce27f6c4ec8f328f7d7bd48428a1dd7e6f42b Mon Sep 17 00:00:00 2001 From: Smashfanful <41149920+Smashfanful@users.noreply.github.com> Date: Sat, 5 Oct 2019 15:28:08 +0200 Subject: [PATCH 7/8] Update Units,Promotions.json --- .../assets/jsons/Translations/Units,Promotions.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/android/assets/jsons/Translations/Units,Promotions.json b/android/assets/jsons/Translations/Units,Promotions.json index 2a736985cb..f7eb8957c6 100644 --- a/android/assets/jsons/Translations/Units,Promotions.json +++ b/android/assets/jsons/Translations/Units,Promotions.json @@ -3,7 +3,7 @@ ///////// Unit types "Civilian":{ - Italian:"civile" //Unità civile + Italian:"unità civile" //Unità civile Russian:"Мирный" French:"Civile" Romanian:"Civil" @@ -34,7 +34,7 @@ "WaterCivilian":{ // In the file "Uints.json", every unit have the "unitType", i think we should show the "unitType" in wiki,because some units get a bonus attack to other units. English:"Water Civilian" - Italian:"marittima civile" //Unità marittima civile + Italian:"unità marittima civile" //Unità marittima civile Simplified_Chinese:"海上平民单位" French:"Civil embarqué" Russian:"Мирный, морской" @@ -1429,7 +1429,7 @@ } "Bonus vs [unitType]":{ - Italian:"Bonus contro unità [unitType]" // es. Bonus contro unità da tiro + Italian:"Bonus contro [unitType]" // es. Bonus contro unità da tiro Russian:"Бонус против [unitType]" French:"Bonus contre [unitType]" Romanian:"Bonus contra [unitType]" @@ -1441,7 +1441,7 @@ } "Penalty vs [unitType]":{ - Italian:"Malus contro unità [unitType]" + Italian:"Malus contro [unitType]" Russian:"Штраф против [unitType]" French:"Pénalité contre [unitType]" Romanian:"Penalizare contra [unitType]" @@ -1968,7 +1968,7 @@ } "1 extra Interception may be made per turn":{ - Italian:"Può eseguire 1 Intercettazione extra per turno" + Italian:"Può eseguire un'Intercettazione extra per turno" French:"1 interception supplémentaire par tour" Russian:"+1 Перехват за ход" Simplified_Chinese:"1额外拦截次数/回合" From 272f58fe5d0b4f1871a8898d6af4e882e0ff7dba Mon Sep 17 00:00:00 2001 From: Smashfanful <41149920+Smashfanful@users.noreply.github.com> Date: Sat, 5 Oct 2019 15:28:14 +0200 Subject: [PATCH 8/8] Update NewGame,SaveGame,LoadGame,Options.json New line --- .../jsons/Translations/NewGame,SaveGame,LoadGame,Options.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/android/assets/jsons/Translations/NewGame,SaveGame,LoadGame,Options.json b/android/assets/jsons/Translations/NewGame,SaveGame,LoadGame,Options.json index 8a1058ff5e..667bd88d9a 100644 --- a/android/assets/jsons/Translations/NewGame,SaveGame,LoadGame,Options.json +++ b/android/assets/jsons/Translations/NewGame,SaveGame,LoadGame,Options.json @@ -412,6 +412,10 @@ Italian:"Forse hai inserito troppi giocatori o altri parametri?" Russian:"Может, у вас слишком много игроков для такой небольшой карты?" } + + "No human players selected!":{ + Italian:"È necessario almeno un giocatore umano!" + } ////////////// Save and load game