diff --git a/android/Images/NationIcons/Denmark.png b/android/Images/NationIcons/Denmark.png new file mode 100644 index 0000000000..6447bf6c7d Binary files /dev/null and b/android/Images/NationIcons/Denmark.png differ diff --git a/android/Images/UnitIcons/Berserker.png b/android/Images/UnitIcons/Berserker.png new file mode 100644 index 0000000000..1785760b4d Binary files /dev/null and b/android/Images/UnitIcons/Berserker.png differ diff --git a/android/Images/UnitIcons/Norwegian Ski Infantry.png b/android/Images/UnitIcons/Norwegian Ski Infantry.png new file mode 100644 index 0000000000..e67794768b Binary files /dev/null and b/android/Images/UnitIcons/Norwegian Ski Infantry.png differ diff --git a/android/assets/jsons/Nations.json b/android/assets/jsons/Nations.json index 646d8873e6..ec86ebdde3 100644 --- a/android/assets/jsons/Nations.json +++ b/android/assets/jsons/Nations.json @@ -607,9 +607,7 @@ "Huaras","Riobamba","Caxamalca","Sausa","Tambo Colorado","Huaca","Tumbes","Chan Chan","Sipan","Pachacamac", "Llactapata","Pisac","Kuelap","Pajaten","Chucuito","Choquequirao"] }, - /* { - //NEEDS SNOW AND ICE "name": "Denmark", "leaderName": "Harald Bluetooth", "adjective": ["Danish"], @@ -633,7 +631,7 @@ "Sarpsborg","Odense","Aalborg","Stavanger","Vorbasse","Schleswig","Kristiansand","Halogaland","Randers", "Fredrikstad","Kolding","Horsens","Tromsoe","Vejle","Koge","Sandnes","Holstebro","Slagelse","Drammen", "Hillerod","Sonderborg","Skien","Svendborg","Holbaek","Hjorring","Fladstrand","Haderslev","Ringsted","Skrive"] - }, + }, /* { "name": "Sweden", "leaderName": "Gustavus Adolphus", diff --git a/android/assets/jsons/Units.json b/android/assets/jsons/Units.json index 92cdfb1540..97ca138c30 100644 --- a/android/assets/jsons/Units.json +++ b/android/assets/jsons/Units.json @@ -484,7 +484,6 @@ "attackSound": "metalhit" //Aside from the Great Generals II promotion, Samurai should also create Fishing Boats (not now, surely) }, - /* { "name": "Berserker", "replaces": "Longswordsman", @@ -493,7 +492,7 @@ "movement": 3, "strength": 21, "cost": 120, - "requiredTech": "Steel", + "requiredTech": "Metal Casting", "upgradesTo": "Musketman", "obsoleteTech": "Metallurgy", "requiredResource": "Iron", @@ -503,7 +502,6 @@ "attackSound": "metalhit" //Danish unique unit. Can attack from the sea without any penalty, and moves faster. }, - */ { "name": "Pikeman", "unitType": "Melee", @@ -894,10 +892,8 @@ "hurryCostModifier": 20, "attackSound": "shot" }, - - /* { - "name": "Norvegian Ski Infantry", + "name": "Norwegian Ski Infantry", "unitType": "Melee", "replaces": "Rifleman", "uniqueTo": "Denmark", @@ -907,11 +903,10 @@ "requiredTech": "Rifling", "obsoleteTech": "Replaceable Parts", "upgradesTo": "Great War Infantry", - "uniques": ["Bonus in Snow, Tundra and Hills"], + "uniques": ["+25% bonus in Snow, Tundra and Hills", "Double movement in Snow, Tundra and Hills"], "hurryCostModifier": 20, "attackSound": "shot" }, - */ { "name": "Cavalry", "unitType": "Mounted", diff --git a/core/src/com/unciv/logic/battle/BattleDamage.kt b/core/src/com/unciv/logic/battle/BattleDamage.kt index 2dd5b0393f..4c6720b69e 100644 --- a/core/src/com/unciv/logic/battle/BattleDamage.kt +++ b/core/src/com/unciv/logic/battle/BattleDamage.kt @@ -125,7 +125,7 @@ object BattleDamage { else modifiers["Attacker Bonus"] = bonus } - if(attacker.unit.isEmbarked()) + if(attacker.unit.isEmbarked() && !attacker.unit.hasUnique("Amphibious")) modifiers["Landing"] = -0.5f if (attacker.isMelee()) { @@ -206,6 +206,14 @@ object BattleDamage { if(!tile.isFriendlyTerritory(unit.getCivInfo()) && unit.unit.hasUnique("+20% bonus outside friendly territory")) modifiers["Foreign Land"] = 0.2f + if (unit.unit.hasUnique("+25% bonus in Snow, Tundra and Hills") && + (tile.baseTerrain == Constants.snow + || tile.baseTerrain == Constants.tundra + || tile.baseTerrain == Constants.hill) && + // except when there is a vegetation + (tile.terrainFeature != Constants.forest + || tile.terrainFeature != Constants.jungle)) + modifiers[tile.baseTerrain] = 0.25f if(unit.getCivInfo().nation.unique == UniqueAbility.WAYFINDING && tile.getTilesInDistance(2).any { it.improvement=="Moai" }) modifiers["Moai"] = 0.1f diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 577d9d59c3..7b98111c47 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -38,6 +38,7 @@ class MapUnit { @Transient var roughTerrainPenalty = false @Transient var doubleMovementInCoast = false @Transient var doubleMovementInForestAndJungle = false + @Transient var doubleMovementInSnowTundraAndHills = false lateinit var owner: String lateinit var name: String @@ -133,10 +134,11 @@ class MapUnit { uniques.addAll(promotions.promotions.map { currentTile.tileMap.gameInfo.ruleSet.unitPromotions[it]!!.effect }) tempUniques = uniques - if("Ignores terrain cost" in uniques) ignoresTerrainCost=true - if("Rough terrain penalty" in uniques) roughTerrainPenalty=true - if("Double movement in coast" in uniques) doubleMovementInCoast=true - if("Double movement rate through Forest and Jungle" in uniques) doubleMovementInForestAndJungle=true + if("Ignores terrain cost" in uniques) ignoresTerrainCost = true + if("Rough terrain penalty" in uniques) roughTerrainPenalty = true + if("Double movement in coast" in uniques) doubleMovementInCoast = true + if("Double movement rate through Forest and Jungle" in uniques) doubleMovementInForestAndJungle = true + if("Double movement in Snow, Tundra and Hills" in uniques) doubleMovementInSnowTundraAndHills = true } fun hasUnique(unique:String): Boolean { @@ -227,6 +229,7 @@ class MapUnit { fun getEmbarkedMovement(): Int { var movement=2 movement += civInfo.tech.getTechUniques().count { it == "Increases embarked movement +1" } + if (civInfo.nation.unique == UniqueAbility.VIKING_FURY) movement +=1 return movement } diff --git a/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt b/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt index 66056aaa8b..27316627c1 100644 --- a/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt +++ b/core/src/com/unciv/logic/map/UnitMovementAlgorithms.kt @@ -10,7 +10,8 @@ class UnitMovementAlgorithms(val unit:MapUnit) { // This function is called ALL THE TIME and should be as time-optimal as possible! fun getMovementCostBetweenAdjacentTiles(from: TileInfo, to: TileInfo, civInfo: CivilizationInfo): Float { - if ((from.isLand != to.isLand) && unit.type.isLandUnit()) + if ((from.isLand != to.isLand) && unit.type.isLandUnit() && + (unit.civInfo.nation.unique != UniqueAbility.VIKING_FURY)) return 100f // this is embarkment or disembarkment, and will take the entire turn var extraCost = 0f @@ -39,6 +40,11 @@ class UnitMovementAlgorithms(val unit:MapUnit) { if (unit.doubleMovementInCoast && to.baseTerrain == Constants.coast) return 1 / 2f + extraCost + if (unit.doubleMovementInSnowTundraAndHills && to.baseTerrain == Constants.hill) + return 1f + extraCost // usually hills take 2 + if (unit.doubleMovementInSnowTundraAndHills && (to.baseTerrain == Constants.snow || to.baseTerrain == Constants.tundra)) + return 1 / 2f + extraCost + return to.getLastTerrain().movementCost.toFloat() + extraCost // no road } diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt index 9360911c8e..59e8613a3e 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt @@ -3,6 +3,7 @@ package com.unciv.ui.worldscreen.unit import com.badlogic.gdx.graphics.Color import com.unciv.Constants import com.unciv.UncivGame +import com.unciv.UniqueAbility import com.unciv.logic.automation.UnitAutomation import com.unciv.logic.automation.WorkerAutomation import com.unciv.logic.civilization.CivilizationInfo @@ -183,8 +184,13 @@ object UnitActions { } tile.improvement = null if (tile.resource!=null) tile.getOwner()?.updateDetailedCivResources() // this might take away a resource - if (!unit.hasUnique("No movement cost to pillage")) unit.useMovementPoints(1f) + + if (!unit.hasUnique("No movement cost to pillage") && + (!unit.type.isMelee() || unit.civInfo.nation.unique != UniqueAbility.VIKING_FURY)) + unit.useMovementPoints(1f) + unit.healBy(25) + }.takeIf { unit.currentMovement > 0 && canPillage(unit, tile) }) }