mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 13:55:54 -04:00
Added Range, Sentry, Siege and Indirect Fire promotions
Units now get experience when capturing a city
This commit is contained in:
parent
26b3366d93
commit
b1e17a67c6
BIN
android/Images/UnitPromotionIcons/Indirect_Fire_(Civ5).png
Normal file
BIN
android/Images/UnitPromotionIcons/Indirect_Fire_(Civ5).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
BIN
android/Images/UnitPromotionIcons/Range_(Civ5).png
Normal file
BIN
android/Images/UnitPromotionIcons/Range_(Civ5).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
BIN
android/Images/UnitPromotionIcons/Sentry_(Civ5).png
Normal file
BIN
android/Images/UnitPromotionIcons/Sentry_(Civ5).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
BIN
android/Images/UnitPromotionIcons/Siege_(Civ5).png
Normal file
BIN
android/Images/UnitPromotionIcons/Siege_(Civ5).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
@ -1082,52 +1082,80 @@ UnitPromotionIcons/Drill_I_(Civ5)
|
|||||||
orig: 20, 20
|
orig: 20, 20
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
index: -1
|
||||||
UnitPromotionIcons/March_(Civ5)
|
UnitPromotionIcons/Indirect_Fire_(Civ5)
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 940, 418
|
xy: 940, 418
|
||||||
size: 20, 20
|
size: 20, 20
|
||||||
orig: 20, 20
|
orig: 20, 20
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
index: -1
|
||||||
UnitPromotionIcons/Scouting_III_(Civ5)
|
UnitPromotionIcons/March_(Civ5)
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 825, 1693
|
xy: 825, 1693
|
||||||
size: 20, 20
|
size: 20, 20
|
||||||
orig: 20, 20
|
orig: 20, 20
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
index: -1
|
||||||
UnitPromotionIcons/Scouting_II_(Civ5)
|
UnitPromotionIcons/Range_(Civ5)
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 472, 97
|
xy: 472, 97
|
||||||
size: 20, 20
|
size: 20, 20
|
||||||
orig: 20, 20
|
orig: 20, 20
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
index: -1
|
||||||
UnitPromotionIcons/Scouting_I_(Civ5)
|
UnitPromotionIcons/Scouting_III_(Civ5)
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 994, 845
|
xy: 994, 845
|
||||||
size: 20, 20
|
size: 20, 20
|
||||||
orig: 20, 20
|
orig: 20, 20
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
index: -1
|
||||||
UnitPromotionIcons/Shock_III_(Civ5)
|
UnitPromotionIcons/Scouting_II_(Civ5)
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 1814, 1479
|
xy: 1814, 1479
|
||||||
size: 20, 20
|
size: 20, 20
|
||||||
orig: 20, 20
|
orig: 20, 20
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
index: -1
|
||||||
UnitPromotionIcons/Shock_II_(Civ5)
|
UnitPromotionIcons/Scouting_I_(Civ5)
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 940, 396
|
xy: 940, 396
|
||||||
size: 20, 20
|
size: 20, 20
|
||||||
orig: 20, 20
|
orig: 20, 20
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
index: -1
|
||||||
UnitPromotionIcons/Shock_I_(Civ5)
|
UnitPromotionIcons/Sentry_(Civ5)
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 825, 1671
|
xy: 825, 1671
|
||||||
size: 20, 20
|
size: 20, 20
|
||||||
orig: 20, 20
|
orig: 20, 20
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
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
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 818 KiB After Width: | Height: | Size: 824 KiB |
@ -108,5 +108,29 @@
|
|||||||
effect:"Bonus vs wounded units 33%",
|
effect:"Bonus vs wounded units 33%",
|
||||||
unitTypes:["Mounted"]
|
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"]
|
||||||
|
}
|
||||||
|
|
||||||
]
|
]
|
@ -278,7 +278,7 @@
|
|||||||
range:3,
|
range:3,
|
||||||
cost: 320,
|
cost: 320,
|
||||||
requiredTech:"Dynamite",
|
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
|
hurryCostModifier:20
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -21,8 +21,8 @@ android {
|
|||||||
applicationId "com.unciv.game"
|
applicationId "com.unciv.game"
|
||||||
minSdkVersion 14
|
minSdkVersion 14
|
||||||
targetSdkVersion 26
|
targetSdkVersion 26
|
||||||
versionCode 120
|
versionCode 121
|
||||||
versionName "2.7.7"
|
versionName "2.7.8"
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
|
@ -108,7 +108,7 @@ class UnitAutomation{
|
|||||||
.filter { containsAttackableEnemy(it,unit.civInfo) }
|
.filter { containsAttackableEnemy(it,unit.civInfo) }
|
||||||
|
|
||||||
val distanceToTiles = unit.getDistanceToTiles()
|
val distanceToTiles = unit.getDistanceToTiles()
|
||||||
val rangeOfAttack = if(MapUnitCombatant(unit).isMelee()) 1 else unit.getBaseUnit().range
|
val rangeOfAttack = unit.getRange()
|
||||||
|
|
||||||
val attackableTiles = ArrayList<AttackableTile>()
|
val attackableTiles = ArrayList<AttackableTile>()
|
||||||
// The >0.1 (instead of >0) solves a bug where you've moved 2/3 road tiles,
|
// The >0.1 (instead of >0) solves a bug where you've moved 2/3 road tiles,
|
||||||
@ -170,11 +170,12 @@ class UnitAutomation{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun tryHeadTowardsEnemyCity(unit: MapUnit): Boolean {
|
private fun tryHeadTowardsEnemyCity(unit: MapUnit): Boolean {
|
||||||
|
if(unit.civInfo.cities.isEmpty()) return false
|
||||||
var enemyCities = unit.civInfo.exploredTiles.map { unit.civInfo.gameInfo.tileMap[it] }
|
var enemyCities = unit.civInfo.exploredTiles.map { unit.civInfo.gameInfo.tileMap[it] }
|
||||||
.filter { it.isCityCenter() && it.getOwner() != unit.civInfo }
|
.filter { it.isCityCenter() && it.getOwner() != unit.civInfo }
|
||||||
if(unit.getBaseUnit().unitType.isRanged())
|
if(unit.getBaseUnit().unitType.isRanged())
|
||||||
enemyCities = enemyCities.filterNot { it.getCity()!!.health==1 }
|
enemyCities = enemyCities.filterNot { it.getCity()!!.health==1 }
|
||||||
if (enemyCities.isNotEmpty() && unit.civInfo.cities.isNotEmpty()) {
|
|
||||||
val closestReachableEnemyCity = enemyCities
|
val closestReachableEnemyCity = enemyCities
|
||||||
.filter { unit.movementAlgs().canReach(it) }
|
.filter { unit.movementAlgs().canReach(it) }
|
||||||
.minBy { city ->
|
.minBy { city ->
|
||||||
@ -184,7 +185,6 @@ class UnitAutomation{
|
|||||||
unit.movementAlgs().headTowards(closestReachableEnemyCity)
|
unit.movementAlgs().headTowards(closestReachableEnemyCity)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ class Battle(val gameInfo:GameInfo=UnCivGame.Current.gameInfo) {
|
|||||||
|
|
||||||
// XP!
|
// XP!
|
||||||
if(attacker.isMelee()){
|
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 (attacker is MapUnitCombatant) attacker.unit.promotions.XP += 5
|
||||||
if (defender is MapUnitCombatant) defender.unit.promotions.XP += 4
|
if (defender is MapUnitCombatant) defender.unit.promotions.XP += 4
|
||||||
|
@ -221,4 +221,11 @@ class MapUnit {
|
|||||||
fun setTransients(){
|
fun setTransients(){
|
||||||
promotions.unit=this
|
promotions.unit=this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getRange(): Int {
|
||||||
|
if(getBaseUnit().unitType.isMelee()) return 1
|
||||||
|
var range = getBaseUnit().range
|
||||||
|
if(hasUnique("+1 Range")) range++
|
||||||
|
return range
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user