diff --git a/android/assets/UnitIcons/Longbowman.png b/android/assets/UnitIcons/Longbowman.png new file mode 100644 index 0000000000..7f61324ee9 Binary files /dev/null and b/android/assets/UnitIcons/Longbowman.png differ diff --git a/android/assets/jsons/Translations.json b/android/assets/jsons/Translations.json index e63e184c5d..be4861ab4e 100644 --- a/android/assets/jsons/Translations.json +++ b/android/assets/jsons/Translations.json @@ -102,6 +102,9 @@ Romanian:"Dispune" } + "Found city":{ + } + "Promote":{ } diff --git a/android/assets/jsons/Units.json b/android/assets/jsons/Units.json index 07934da2d2..548cd08511 100644 --- a/android/assets/jsons/Units.json +++ b/android/assets/jsons/Units.json @@ -136,6 +136,19 @@ requiredTech:"Machinery", hurryCostModifier:20 }, + { + name:"Longbowman", + unitType:"Ranged", + range:3, + movement:2, + strength:13, + rangedStrength:18, + replaces:"Crossbowman", + uniqueTo:"England", + cost: 120, + requiredTech:"Machinery", + hurryCostModifier:20 + }, { name:"Trebuchet", unitType:"Siege", diff --git a/core/src/com/unciv/logic/automation/UnitAutomation.kt b/core/src/com/unciv/logic/automation/UnitAutomation.kt index 996af3d845..582f622e2f 100644 --- a/core/src/com/unciv/logic/automation/UnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/UnitAutomation.kt @@ -59,7 +59,7 @@ class UnitAutomation{ } else { // Range attack, so enemy needs to be in range - return attackableTiles.filter { unit.getTile().getTilesInDistance(2).contains(it) } + return attackableTiles.filter { unit.getTile().getTilesInDistance(unit.getBaseUnit().range).contains(it) } } } diff --git a/core/src/com/unciv/models/gamebasics/Technology.kt b/core/src/com/unciv/models/gamebasics/Technology.kt index 9cb2099371..3e14dfe4d1 100644 --- a/core/src/com/unciv/models/gamebasics/Technology.kt +++ b/core/src/com/unciv/models/gamebasics/Technology.kt @@ -1,5 +1,6 @@ package com.unciv.models.gamebasics +import com.unciv.UnCivGame import com.unciv.ui.utils.tr import java.util.* @@ -16,7 +17,9 @@ class Technology : ICivilopedia { SB.appendln(impimpString.tr()) } - val enabledUnits = GameBasics.Units.values.filter { it.requiredTech==name } + var enabledUnits = GameBasics.Units.values.filter { it.requiredTech==name && (it.uniqueTo==null || it.uniqueTo==UnCivGame.Current.gameInfo.getPlayerCivilization().civName) } + val replacedUnits = enabledUnits.map { it.replaces }.filterNotNull() + enabledUnits = enabledUnits.filter { it.name !in replacedUnits} if(enabledUnits.isNotEmpty()) SB.appendln("{Units enabled}: "+enabledUnits.map { it.name + " ("+it.getShortDescription()+")" }.joinToString()) val enabledBuildings = GameBasics.Buildings.values.filter { it.requiredTech==name } diff --git a/core/src/com/unciv/models/gamebasics/unit/Unit.kt b/core/src/com/unciv/models/gamebasics/unit/Unit.kt index 0e292d2776..c2ca187050 100644 --- a/core/src/com/unciv/models/gamebasics/unit/Unit.kt +++ b/core/src/com/unciv/models/gamebasics/unit/Unit.kt @@ -18,6 +18,7 @@ class Unit : INamed, IConstruction, ICivilopedia { var movement: Int = 0 var strength:Int = 0 var rangedStrength:Int = 0 + var range:Int = 2 lateinit var unitType: UnitType internal var unbuildable: Boolean = false // for special units like great people var requiredTech:String? = null