diff --git a/Credits.md b/Credits.md index 5a4219d0de..2d291476df 100644 --- a/Credits.md +++ b/Credits.md @@ -68,6 +68,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc ### Modern * [Helmet](https://thenounproject.com/term/helmet/25216/) By Daniel Turner for Great War Infantry +* [Cap](https://thenounproject.com/search/?q=kepi&i=950267) By Creative Mania for Foreign Legion * [Tank](https://thenounproject.com/term/tank/1287510/) By corpus delicti for Landship * [Warship](https://thenounproject.com/term/warship/1597474/) By zidney for Destroyer * [Battleship](https://thenounproject.com/search/?q=battleship&i=1986807) By Vitaliy Gorbachev, KZ for Battleship diff --git a/android/Images/UnitIcons/Foreign Legion.png b/android/Images/UnitIcons/Foreign Legion.png new file mode 100644 index 0000000000..9803e6ddf1 Binary files /dev/null and b/android/Images/UnitIcons/Foreign Legion.png differ diff --git a/android/assets/jsons/Translations.json b/android/assets/jsons/Translations.json index 3977f744cd..ab2b3ebd8b 100644 --- a/android/assets/jsons/Translations.json +++ b/android/assets/jsons/Translations.json @@ -6763,7 +6763,7 @@ German:"Panzerschiff" } - // Modern units (do these, yes) + // Modern units "Landship":{ Italian:"Nave di terra" Romanian:"Vehicul terestru" @@ -6773,6 +6773,7 @@ German:"Landschiff" French:"Véhicule terrestre" //official translation but ugly } + "Great War Infantry":{ Italian:"Fante della Grande Guerra" Romanian:"Infanteria Marelui Război" @@ -6782,6 +6783,13 @@ German:"Weltkriegs Infanterie" French:"Infanterie de la grande guerre" } + + "Foreign Legion":{} + "+20% bonus outside friendly territory":{} + "Foreign Land":{ // for battle table combat percentage + } + + "Destroyer":{ Italian:"Cacciatorpediniere" Romanian:"Distrugător" diff --git a/android/assets/jsons/Units.json b/android/assets/jsons/Units.json index ec69f5b668..286e940e30 100644 --- a/android/assets/jsons/Units.json +++ b/android/assets/jsons/Units.json @@ -991,6 +991,20 @@ obsoleteTech:"Plastics" attackSound:"shot" }, + { + name:"Foreign Legion", + unitType:"Melee", + replaces:"Great War Infantry", + uniqueTo:"France", + movement:2, + strength:50, + cost: 320, + requiredTech:"Replaceable Parts", + hurryCostModifier:20, + upgradesTo:"Infantry", + obsoleteTech:"Plastics" + attackSound:"shot" + }, { name:"Infantry", unitType:"Melee", diff --git a/android/build.gradle b/android/build.gradle index 665ebf202f..f11ecce6bd 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -21,8 +21,8 @@ android { applicationId "com.unciv.app" minSdkVersion 14 targetSdkVersion 28 - versionCode 226 - versionName "2.14.6" + versionCode 227 + versionName "2.14.7" } // Had to add this crap for Travis to build, it wanted to sign the app diff --git a/core/src/com/unciv/logic/battle/BattleDamage.kt b/core/src/com/unciv/logic/battle/BattleDamage.kt index 35bec71f10..96563b652d 100644 --- a/core/src/com/unciv/logic/battle/BattleDamage.kt +++ b/core/src/com/unciv/logic/battle/BattleDamage.kt @@ -1,6 +1,7 @@ package com.unciv.logic.battle import com.unciv.logic.map.MapUnit +import com.unciv.logic.map.TileInfo import com.unciv.models.gamebasics.unit.UnitType import kotlin.math.max @@ -88,6 +89,8 @@ class BattleDamage{ val modifiers = getGeneralModifiers(attacker, defender) if(attacker is MapUnitCombatant) { + modifiers.putAll(getTileSpecificModifiers(attacker,defender.getTile())) + val defenderTile = defender.getTile() val isDefenderInRoughTerrain = defenderTile.baseTerrain=="Hill" || defenderTile.terrainFeature == "Forest" || defenderTile.terrainFeature == "Jungle" for (BDM in getBattleDamageModifiersOfUnit(attacker.unit)) { @@ -112,11 +115,8 @@ class BattleDamage{ modifiers["Attacker Bonus"] =modifiers["Attacker Bonus"]!! + bonus else modifiers["Attacker Bonus"] = bonus } - - if(defenderTile.getOwner()!=null && !attacker.getCivInfo().isAtWarWith(defenderTile.getOwner()!!) - && attacker.getCivInfo().getBuildingUniques().contains("+15% combat strength for units fighting in friendly territory")) - modifiers["Himeji Castle"] = 0.15f } + else if (attacker is CityCombatant) { if (attacker.getCivInfo().policies.isAdopted("Oligarchy") && attacker.city.getCenterTile().militaryUnit != null) modifiers["Oligarchy"] = 0.5f @@ -144,6 +144,8 @@ class BattleDamage{ val modifiers = getGeneralModifiers(defender, attacker) + modifiers.putAll(getTileSpecificModifiers(defender, defender.getTile())) + if (!defender.unit.hasUnique("No defensive terrain bonus")) { val tileDefenceBonus = defender.getTile().getDefensiveBonus() if (tileDefenceBonus > 0) modifiers["Terrain"] = tileDefenceBonus @@ -170,16 +172,23 @@ class BattleDamage{ } } - if(defenderTile.getOwner()!=null && !defender.getCivInfo().isAtWarWith(defenderTile.getOwner()!!) - && defender.getCivInfo().getBuildingUniques().contains("+15% combat strength for units fighting in friendly territory")) - modifiers["Himeji Castle"] = 0.15f - if (defender.unit.isFortified()) modifiers["Fortification"] = 0.2f * defender.unit.getFortificationTurns() return modifiers } + private fun getTileSpecificModifiers(unit: MapUnitCombatant, tile: TileInfo): HashMap { + val modifiers = HashMap() + val isFriendlyTerritory = tile.getOwner()!=null && !unit.getCivInfo().isAtWarWith(tile.getOwner()!!) + if(isFriendlyTerritory && unit.getCivInfo().getBuildingUniques().contains("+15% combat strength for units fighting in friendly territory")) + modifiers["Himeji Castle"] = 0.15f + if(!isFriendlyTerritory && unit.unit.hasUnique("+20% bonus outside friendly territory")) + modifiers["Foreign Land"] = 0.2f + + return modifiers + } + private fun modifiersToMultiplicationBonus(modifiers: HashMap): Float { // modifiers are like 0.1 for a 10% bonus, -0.1 for a 10% loss var finalModifier = 1f