diff --git a/android/Images/UnitPromotionIcons/Indirect_Fire_(Civ5).png b/android/Images/UnitPromotionIcons/Indirect_Fire_(Civ5).png new file mode 100644 index 0000000000..28f18387c1 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Indirect_Fire_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Range_(Civ5).png b/android/Images/UnitPromotionIcons/Range_(Civ5).png new file mode 100644 index 0000000000..e6c26e7a97 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Range_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Sentry_(Civ5).png b/android/Images/UnitPromotionIcons/Sentry_(Civ5).png new file mode 100644 index 0000000000..824afa92c6 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Sentry_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Siege_(Civ5).png b/android/Images/UnitPromotionIcons/Siege_(Civ5).png new file mode 100644 index 0000000000..3e9b692755 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Siege_(Civ5).png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index c399f6b77b..8fb36cb6b1 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -1082,52 +1082,80 @@ UnitPromotionIcons/Drill_I_(Civ5) orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/March_(Civ5) +UnitPromotionIcons/Indirect_Fire_(Civ5) rotate: false xy: 940, 418 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Scouting_III_(Civ5) +UnitPromotionIcons/March_(Civ5) rotate: false xy: 825, 1693 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Scouting_II_(Civ5) +UnitPromotionIcons/Range_(Civ5) rotate: false xy: 472, 97 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Scouting_I_(Civ5) +UnitPromotionIcons/Scouting_III_(Civ5) rotate: false xy: 994, 845 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Shock_III_(Civ5) +UnitPromotionIcons/Scouting_II_(Civ5) rotate: false xy: 1814, 1479 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Shock_II_(Civ5) +UnitPromotionIcons/Scouting_I_(Civ5) rotate: false xy: 940, 396 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Shock_I_(Civ5) +UnitPromotionIcons/Sentry_(Civ5) rotate: false xy: 825, 1671 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 +UnitPromotionIcons/Shock_III_(Civ5) + rotate: false + xy: 494, 97 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Shock_II_(Civ5) + rotate: false + xy: 1836, 1479 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Shock_I_(Civ5) + rotate: false + xy: 940, 374 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Siege_(Civ5) + rotate: false + xy: 825, 1649 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 diff --git a/android/assets/game.png b/android/assets/game.png index 39dd08c551..bb52abad67 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/UnitPromotions.json b/android/assets/jsons/UnitPromotions.json index 6800a7817a..fcb12b8a3c 100644 --- a/android/assets/jsons/UnitPromotions.json +++ b/android/assets/jsons/UnitPromotions.json @@ -108,5 +108,29 @@ effect:"Bonus vs wounded units 33%", unitTypes:["Mounted"] } + { + name:"Siege", + prerequisites:["Accuracy I","Barrage I","Shock II","Drill II"], + effect:"Bonus vs City 25%", + unitTypes:["Melee","Ranged","Siege","Mounted"] + } + { + name:"Sentry", + prerequisites:["Accuracy I","Barrage I","Shock II","Drill II"], + effect:"+1 Visibility Range", + unitTypes:["Melee","Mounted"] + } + { + name:"Range", + prerequisites:["Accuracy III","Barrage III"], + effect:"+1 Range", + unitTypes:["Ranged","Siege"] + } + { + name:"Indirect Fire", + prerequisites:["Accuracy III","Barrage III"], + effect:"Ranged attacks may be performed over obstacles", + unitTypes:["Ranged","Siege"] + } ] \ No newline at end of file diff --git a/android/assets/jsons/Units.json b/android/assets/jsons/Units.json index fc60a7e9f3..2fb1429a16 100644 --- a/android/assets/jsons/Units.json +++ b/android/assets/jsons/Units.json @@ -278,7 +278,7 @@ range:3, cost: 320, requiredTech:"Dynamite", - uniques:["Bonus vs City 200%","No defensive terrain bonus","Must set up to ranged attack","Limited Visibility"], + uniques:["Bonus vs City 200%","No defensive terrain bonus","Must set up to ranged attack","Limited Visibility","Indirect Fire"], hurryCostModifier:20 }, diff --git a/android/build.gradle b/android/build.gradle index 3e7f8c29dd..fef8874ad7 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -21,8 +21,8 @@ android { applicationId "com.unciv.game" minSdkVersion 14 targetSdkVersion 26 - versionCode 120 - versionName "2.7.7" + versionCode 121 + versionName "2.7.8" } buildTypes { release { diff --git a/core/src/com/unciv/logic/automation/UnitAutomation.kt b/core/src/com/unciv/logic/automation/UnitAutomation.kt index b654535e9a..221f151c29 100644 --- a/core/src/com/unciv/logic/automation/UnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/UnitAutomation.kt @@ -108,7 +108,7 @@ class UnitAutomation{ .filter { containsAttackableEnemy(it,unit.civInfo) } val distanceToTiles = unit.getDistanceToTiles() - val rangeOfAttack = if(MapUnitCombatant(unit).isMelee()) 1 else unit.getBaseUnit().range + val rangeOfAttack = unit.getRange() val attackableTiles = ArrayList() // The >0.1 (instead of >0) solves a bug where you've moved 2/3 road tiles, @@ -170,20 +170,20 @@ class UnitAutomation{ } private fun tryHeadTowardsEnemyCity(unit: MapUnit): Boolean { + if(unit.civInfo.cities.isEmpty()) return false var enemyCities = unit.civInfo.exploredTiles.map { unit.civInfo.gameInfo.tileMap[it] } .filter { it.isCityCenter() && it.getOwner() != unit.civInfo } if(unit.getBaseUnit().unitType.isRanged()) enemyCities = enemyCities.filterNot { it.getCity()!!.health==1 } - if (enemyCities.isNotEmpty() && unit.civInfo.cities.isNotEmpty()) { - val closestReachableEnemyCity = enemyCities - .filter { unit.movementAlgs().canReach(it) } - .minBy { city -> - unit.civInfo.cities.map { HexMath().getDistance(city.position, it.getCenterTile().position) }.min()!! - } - if (closestReachableEnemyCity != null) { - unit.movementAlgs().headTowards(closestReachableEnemyCity) - return true - } + + val closestReachableEnemyCity = enemyCities + .filter { unit.movementAlgs().canReach(it) } + .minBy { city -> + unit.civInfo.cities.map { HexMath().getDistance(city.position, it.getCenterTile().position) }.min()!! + } + if (closestReachableEnemyCity != null) { + unit.movementAlgs().headTowards(closestReachableEnemyCity) + return true } return false } diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index 485d1c1eb2..91e1480285 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -88,7 +88,7 @@ class Battle(val gameInfo:GameInfo=UnCivGame.Current.gameInfo) { // XP! if(attacker.isMelee()){ - if(defender.getCivilization() != attacker.getCivilization()) // unit was not captured but actually attacked + if(defender.getUnitType()!=UnitType.Civilian) // unit was not captured but actually attacked { if (attacker is MapUnitCombatant) attacker.unit.promotions.XP += 5 if (defender is MapUnitCombatant) defender.unit.promotions.XP += 4 diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 2c843d09b2..d86a74964c 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -221,4 +221,11 @@ class MapUnit { fun setTransients(){ promotions.unit=this } + + fun getRange(): Int { + if(getBaseUnit().unitType.isMelee()) return 1 + var range = getBaseUnit().range + if(hasUnique("+1 Range")) range++ + return range + } } \ No newline at end of file