Index: binaries/data/mods/public/globalscripts/Templates.js =================================================================== --- binaries/data/mods/public/globalscripts/Templates.js +++ binaries/data/mods/public/globalscripts/Templates.js @@ -356,8 +356,9 @@ ret.speed = { "walk": getEntityValue("UnitMotion/WalkSpeed"), }; - if (template.UnitMotion.Run) - ret.speed.run = getEntityValue("UnitMotion/Run/Speed"); + ret.speed.run = getEntityValue("UnitMotion/WalkSpeed"); + if (template.UnitMotion.RunMultiplier) + ret.speed.run *= getEntityValue("UnitMotion/RunMultiplier"); } if (template.ProductionQueue) Index: binaries/data/mods/public/simulation/components/Formation.js =================================================================== --- binaries/data/mods/public/simulation/components/Formation.js +++ binaries/data/mods/public/simulation/components/Formation.js @@ -861,7 +861,7 @@ { var cmpUnitMotion = Engine.QueryInterface(ent, IID_UnitMotion); if (cmpUnitMotion) - minSpeed = Math.min(minSpeed, cmpUnitMotion.GetWalkSpeed()); + minSpeed = Math.min(minSpeed, cmpUnitMotion.GetBaseSpeed()); } minSpeed *= this.GetSpeedMultiplier(); Index: binaries/data/mods/public/simulation/components/GuiInterface.js =================================================================== --- binaries/data/mods/public/simulation/components/GuiInterface.js +++ binaries/data/mods/public/simulation/components/GuiInterface.js @@ -603,8 +603,8 @@ let cmpUnitMotion = Engine.QueryInterface(ent, IID_UnitMotion); if (cmpUnitMotion) ret.speed = { - "walk": cmpUnitMotion.GetWalkSpeed(), - "run": cmpUnitMotion.GetRunSpeed() + "walk": cmpUnitMotion.GetBaseSpeed(), + "run": cmpUnitMotion.GetBaseSpeed() * cmpUnitMotion.GetTopSpeedRatio(), }; return ret; Index: binaries/data/mods/public/simulation/components/UnitAI.js =================================================================== --- binaries/data/mods/public/simulation/components/UnitAI.js +++ binaries/data/mods/public/simulation/components/UnitAI.js @@ -1,3 +1,5 @@ +const WALKING_SPEED = 1.0 + function UnitAI() {} UnitAI.prototype.Schema = @@ -1705,21 +1707,6 @@ this.StopTimer(); }, - "MoveStarted": function(msg) { - // Adapt the speed to the one of the target if needed - var cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion); - if (cmpUnitMotion.IsInTargetRange(this.isGuardOf, 0, 3*this.guardRange)) - { - var cmpUnitAI = Engine.QueryInterface(this.isGuardOf, IID_UnitAI); - if (cmpUnitAI) - { - var speed = cmpUnitAI.GetWalkSpeed(); - if (speed < this.GetWalkSpeed()) - this.SetMoveSpeed(speed); - } - } - }, - "MoveCompleted": function() { this.SetMoveSpeed(this.GetWalkSpeed()); if (!this.MoveToTargetRangeExplicit(this.isGuardOf, 0, this.guardRange)) @@ -4080,20 +4067,13 @@ UnitAI.prototype.GetWalkSpeed = function() { - var cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion); - return cmpUnitMotion.GetWalkSpeed(); + return 1.0; }; UnitAI.prototype.GetRunSpeed = function() { var cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion); - var runSpeed = cmpUnitMotion.GetRunSpeed(); - var walkSpeed = cmpUnitMotion.GetWalkSpeed(); - if (runSpeed <= walkSpeed) - return runSpeed; - var cmpHealth = Engine.QueryInterface(this.entity, IID_Health); - var health = cmpHealth.GetHitpoints()/cmpHealth.GetMaxHitpoints(); - return (health*runSpeed + (1-health)*walkSpeed); + return cmpUnitMotion.GetTopSpeedRatio(); }; /** @@ -4323,7 +4303,8 @@ if (name == "move") { // Speed to switch from walking to running animations - var runThreshold = (this.GetWalkSpeed() + this.GetRunSpeed()) / 2; + let cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion); + let runThreshold = cmpUnitMotion.GetBaseSpeed() * 1.2; cmpVisual.SelectMovementAnimation(runThreshold); return; @@ -5707,8 +5688,8 @@ UnitAI.prototype.SetMoveSpeed = function(speed) { - var cmpMotion = Engine.QueryInterface(this.entity, IID_UnitMotion); - cmpMotion.SetSpeed(speed); + var cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion); + cmpUnitMotion.SetSpeed(speed); }; UnitAI.prototype.SetHeldPosition = function(x, z) Index: binaries/data/mods/public/simulation/components/UnitMotionFlying.js =================================================================== --- binaries/data/mods/public/simulation/components/UnitMotionFlying.js +++ binaries/data/mods/public/simulation/components/UnitMotionFlying.js @@ -299,7 +299,7 @@ return this.IsInPointRange(targetPos.x, targetPos.y, minRange, maxRange); }; -UnitMotionFlying.prototype.GetWalkSpeed = function() +UnitMotionFlying.prototype.GetSpeed = function() { return +this.template.MaxSpeed; }; @@ -311,7 +311,7 @@ UnitMotionFlying.prototype.GetRunSpeed = function() { - return this.GetWalkSpeed(); + return this.GetSpeed(); }; UnitMotionFlying.prototype.GetCurrentSpeed = function() Index: binaries/data/mods/public/simulation/components/tests/test_UnitAI.js =================================================================== --- binaries/data/mods/public/simulation/components/tests/test_UnitAI.js +++ binaries/data/mods/public/simulation/components/tests/test_UnitAI.js @@ -83,7 +83,7 @@ }); AddMock(unit, IID_UnitMotion, { - GetWalkSpeed: function() { return 1; }, + GetBaseSpeed: function() { return 1; }, MoveToFormationOffset: function(target, x, z) { }, IsInTargetRange: function(target, min, max) { return true; }, MoveToTargetRange: function(target, min, max) { }, @@ -137,6 +137,7 @@ }); AddMock(controller, IID_UnitMotion, { + GetBaseSpeed: function() { return 1; }, SetSpeed: function(speed) { }, MoveToPointRange: function(x, z, minRange, maxRange) { }, GetPassabilityClassName: function() { return "default"; }, @@ -234,7 +235,7 @@ }); AddMock(unit + i, IID_UnitMotion, { - GetWalkSpeed: function() { return 1; }, + GetBaseSpeed: function() { return 1; }, MoveToFormationOffset: function(target, x, z) { }, IsInTargetRange: function(target, min, max) { return true; }, MoveToTargetRange: function(target, min, max) { }, @@ -280,6 +281,7 @@ }); AddMock(controller, IID_UnitMotion, { + GetBaseSpeed: function() { return 1; }, SetSpeed: function(speed) { }, MoveToPointRange: function(x, z, minRange, maxRange) { }, IsInTargetRange: function(target, min, max) { return true; }, Index: binaries/data/mods/public/simulation/components/tests/test_UnitMotionFlying.js =================================================================== --- binaries/data/mods/public/simulation/components/tests/test_UnitMotionFlying.js +++ binaries/data/mods/public/simulation/components/tests/test_UnitMotionFlying.js @@ -26,12 +26,12 @@ "PassabilityClass": "unrestricted" }); -TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetWalkSpeed(), 1.0); +TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetSpeed(), 1.0); TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetRunSpeed(), 1.0); TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 0); cmpUnitMotionFlying.SetSpeed(2.0); -TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetWalkSpeed(), 1.0); +TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetSpeed(), 1.0); TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetRunSpeed(), 1.0); TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 0); Index: binaries/data/mods/public/simulation/data/auras/structures/maur_pillar.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/structures/maur_pillar.json +++ binaries/data/mods/public/simulation/data/auras/structures/maur_pillar.json @@ -3,8 +3,7 @@ "radius": 75, "affects": ["Trader"], "modifications": [ - { "value": "UnitMotion/WalkSpeed", "multiply": 1.20 }, - { "value": "UnitMotion/Run/Speed", "multiply": 1.20 } + { "value": "UnitMotion/WalkSpeed", "multiply": 1.20 } ], "auraName": "Edict of Ashoka", "auraDescription": "All traders in range +20% speed.", Index: binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_iphicrates_1.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_iphicrates_1.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_iphicrates_1.json @@ -5,8 +5,7 @@ { "value": "Armour/Pierce", "add": 1 }, { "value": "Armour/Hack", "add": 1 }, { "value": "Armour/Crush", "add": 1 }, - { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 }, - { "value": "UnitMotion/Run/Speed", "multiply": 1.15 } + { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 } ], "auraName": "Formation Reforms", "auraDescription": "All soldiers in his formation +15% speed and +1 armor." Index: binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_iphicrates_2.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_iphicrates_2.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_iphicrates_2.json @@ -2,8 +2,7 @@ "type": "global", "affects": ["Javelin Infantry"], "modifications": [ - { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 }, - { "value": "UnitMotion/Run/Speed", "multiply": 1.15 } + { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 } ], "auraName": "Peltast Reforms", "auraDescription": "All javelin infantry +15% speed." Index: binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_themistocles_1.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_themistocles_1.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_themistocles_1.json @@ -3,8 +3,7 @@ "affects": ["Ship"], "affectedPlayers": ["MutualAlly"], "modifications": [ - { "value": "UnitMotion/WalkSpeed", "multiply": 1.5 }, - { "value": "UnitMotion/Run/Speed", "multiply": 1.5 } + { "value": "UnitMotion/WalkSpeed", "multiply": 1.5 } ], "auraName": "Naval Commander Aura", "auraDescription": "When garrisoned in a ship, his ship is +50% faster." Index: binaries/data/mods/public/simulation/data/auras/units/heroes/brit_hero_boudicca.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/brit_hero_boudicca.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/brit_hero_boudicca.json @@ -4,7 +4,6 @@ "affects": ["Champion"], "modifications": [ { "value": "UnitMotion/WalkSpeed", "multiply": 1.25 }, - { "value": "UnitMotion/Run/Speed", "multiply": 1.25 }, { "value": "Attack/Melee/Hack", "multiply": 1.2 }, { "value": "Attack/Melee/Pierce", "multiply": 1.2 }, { "value": "Attack/Melee/Crush", "multiply": 1.2 }, Index: binaries/data/mods/public/simulation/data/auras/units/heroes/brit_hero_caratacos.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/brit_hero_caratacos.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/brit_hero_caratacos.json @@ -2,8 +2,7 @@ "type": "global", "affects": ["Soldier", "Siege"], "modifications": [ - { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 }, - { "value": "UnitMotion/Run/Speed", "multiply": 1.15 } + { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 } ], "auraName": "Hero Aura", "auraDescription": "All soldiers and siege engines +15% speed." Index: binaries/data/mods/public/simulation/data/auras/units/heroes/cart_hero_hamilcar.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/cart_hero_hamilcar.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/cart_hero_hamilcar.json @@ -2,8 +2,7 @@ "type": "global", "affects": ["Soldier", "Siege"], "modifications": [ - { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 }, - { "value": "UnitMotion/Run/Speed", "multiply": 1.15 } + { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 } ], "auraName": "Lightning Aura", "auraDescription": "All soldiers and siege engines +15% speed." Index: binaries/data/mods/public/simulation/data/auras/units/heroes/pers_hero_darius.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/pers_hero_darius.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/pers_hero_darius.json @@ -2,8 +2,7 @@ "type": "global", "affects": ["Soldier", "Siege"], "modifications": [ - { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 }, - { "value": "UnitMotion/Run/Speed", "multiply": 1.15 } + { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 } ], "auraName": "Leadership Aura", "auraDescription": "+15% movement speed for all soldiers and siege engines." Index: binaries/data/mods/public/simulation/data/auras/units/heroes/sele_hero_seleucus_victor.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/sele_hero_seleucus_victor.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/sele_hero_seleucus_victor.json @@ -4,7 +4,6 @@ "affects": ["Elephant Champion"], "modifications": [ { "value": "UnitMotion/WalkSpeed", "multiply": 1.2 }, - { "value": "UnitMotion/Run/Speed", "multiply": 1.2 }, { "value": "Attack/Melee/Hack", "multiply": 1.2 }, { "value": "Attack/Melee/Crush", "multiply": 1.2 } ], Index: binaries/data/mods/public/simulation/templates/gaia/fauna_camel.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_camel.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_camel.xml @@ -32,11 +32,6 @@ 3.0 - - 9.0 - 600.0 - 5.0 - fauna/camel.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_chicken.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_chicken.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_chicken.xml @@ -40,9 +40,6 @@ 1.0 - - 6.0 - fauna/chicken.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_crocodile.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_crocodile.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_crocodile.xml @@ -39,9 +39,6 @@ 2.0 - - 18.0 - 20 Index: binaries/data/mods/public/simulation/templates/gaia/fauna_deer.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_deer.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_deer.xml @@ -14,11 +14,6 @@ 2.0 - - 10.0 - 600.0 - 5.0 - fauna/deer.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_gazelle.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_gazelle.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_gazelle.xml @@ -12,12 +12,6 @@ pitch - - - 600.0 - 5.0 - - fauna/gazelle.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe.xml @@ -32,11 +32,6 @@ 4.0 - - 12.0 - 600.0 - 5.0 - fauna/giraffe_adult.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe_infant.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe_infant.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe_infant.xml @@ -21,11 +21,6 @@ 4.0 - - 10.0 - 600.0 - 5.0 - fauna/giraffe_baby.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_hawk.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_hawk.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_hawk.xml @@ -7,7 +7,7 @@ 1.0 - 1000.0 + 1000.0 @@ -22,7 +22,7 @@ 40.0 4.0 false - unrestricted + unrestricted fauna/hawk.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_horse.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_horse.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_horse.xml @@ -27,11 +27,6 @@ 5.0 - - 12.0 - 600.0 - 5.0 - fauna/horse_a.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_lion.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_lion.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_lion.xml @@ -30,9 +30,6 @@ 3.0 - - 15.0 - fauna/lion.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_lioness.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_lioness.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_lioness.xml @@ -30,9 +30,6 @@ 3.0 - - 15.0 - fauna/lioness.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml @@ -39,11 +39,6 @@ 2.0 - - 5.0 - 600.0 - 5.0 - fauna/peacock.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml @@ -45,9 +45,6 @@ ship-small 4.0 - - 35.0 - false Index: binaries/data/mods/public/simulation/templates/gaia/fauna_wildebeest.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_wildebeest.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_wildebeest.xml @@ -19,11 +19,6 @@ 6.0 - - 15.0 - 600.0 - 5.0 - fauna/wildebeest.xml Index: binaries/data/mods/public/simulation/templates/gaia/fauna_zebra.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_zebra.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_zebra.xml @@ -18,11 +18,6 @@ 6.0 - - 15.0 - 600.0 - 5.0 - fauna/zebra.xml Index: binaries/data/mods/public/simulation/templates/template_formation.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_formation.xml +++ binaries/data/mods/public/simulation/templates/template_formation.xml @@ -32,10 +32,10 @@ 0.75 + true 2 aggressive 12.0 - true true true Index: binaries/data/mods/public/simulation/templates/template_unit.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit.xml +++ binaries/data/mods/public/simulation/templates/template_unit.xml @@ -108,13 +108,6 @@ false 9 - - 15.0 - 50.0 - 0.0 - 0.1 - 0.2 - default Index: binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml @@ -55,7 +55,7 @@ 150 - 2.0 + 1.6 1.0 5 @@ -94,11 +94,7 @@ 16.5 - - 26.0 - 600.0 - 5.0 - + 2.5 92 Index: binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee_spearman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee_spearman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee_spearman.xml @@ -19,10 +19,5 @@ 22.0 - - 40.0 - 600.0 - 5.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee_swordsman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee_swordsman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee_swordsman.xml @@ -29,10 +29,5 @@ 20.0 - - 28.75 - 600.0 - 5.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml +++ binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml @@ -26,8 +26,5 @@ 17.5 - - 28.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelinist.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelinist.xml +++ binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelinist.xml @@ -26,8 +26,5 @@ 17.5 - - 28.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry.xml @@ -59,11 +59,6 @@ 16.5 - - 26.0 - 1000.0 - 10.0 - 96 Index: binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml @@ -34,10 +34,5 @@ 20.5 - - 28.0 - 1000.0 - 10.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelinist.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelinist.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelinist.xml @@ -34,10 +34,5 @@ 20.5 - - 28.0 - 1000.0 - 10.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_spearman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_spearman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_spearman.xml @@ -29,8 +29,5 @@ 25.0 - - 40.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_swordsman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_swordsman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_swordsman.xml @@ -30,8 +30,5 @@ 23.0 - - 40.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_champion_elephant.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_elephant.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_elephant.xml @@ -59,11 +59,6 @@ large 8.5 - - 14.0 - 1000.0 - 10.0 - 100 Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry.xml @@ -46,11 +46,6 @@ 8.5 - - 17.5 - 600.0 - 5.0 - 84 Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml @@ -36,8 +36,5 @@ 11.0 - - 18.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelinist.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelinist.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelinist.xml @@ -36,8 +36,5 @@ 16.0 - - 18.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_pikeman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_pikeman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_pikeman.xml @@ -43,10 +43,5 @@ 7.0 - - 13.0 - 600.0 - 5.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_spearman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_spearman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_spearman.xml @@ -40,10 +40,5 @@ 11.5 - - 23.0 - 600.0 - 5.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_swordsman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_swordsman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_swordsman.xml @@ -34,10 +34,5 @@ 12.5 - - 16.0 - 600.0 - 5.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_dog.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_dog.xml +++ binaries/data/mods/public/simulation/templates/template_unit_dog.xml @@ -87,11 +87,7 @@ 14.5 - - 26.0 - 600.0 - 5.0 - + 2.5 30 Index: binaries/data/mods/public/simulation/templates/template_unit_fauna.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna.xml @@ -33,9 +33,7 @@ 6.5 - - 15.0 - + 2.0 true Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_elephant.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_elephant.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_elephant.xml @@ -53,9 +53,6 @@ large 3.0 - - 10.0 - fauna/elephant_african_forest.xml Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml @@ -53,8 +53,6 @@ ship-small 11.5 - - 15.0 - + 1.0 Index: binaries/data/mods/public/simulation/templates/template_unit_hero.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero.xml @@ -62,9 +62,6 @@ 10.5 - - 22.5 - 88 Index: binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry.xml @@ -50,11 +50,7 @@ 16.5 - - 26.0 - 1000.0 - 16.0 - + 2.5 100 Index: binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelinist.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelinist.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelinist.xml @@ -39,10 +39,5 @@ 17.0 - - 28.0 - 1000.0 - 16.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_hero_elephant_melee.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_elephant_melee.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_elephant_melee.xml @@ -51,11 +51,6 @@ large 8.5 - - 14.0 - 1000.0 - 10.0 - 80 Index: binaries/data/mods/public/simulation/templates/template_unit_hero_infantry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_infantry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_infantry.xml @@ -38,4 +38,7 @@ actor/human/death/{gender}_death.xml + + 1.6 + Index: binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_pikeman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_pikeman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_pikeman.xml @@ -33,8 +33,5 @@ 8.5 - - 17.5 - Index: binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_spearman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_spearman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_spearman.xml @@ -32,8 +32,5 @@ 9 - - 18.75 - Index: binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_swordsman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_swordsman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_swordsman.xml @@ -21,11 +21,6 @@ 9.5 - - 20.0 - 600.0 - 8.0 - 80 Index: binaries/data/mods/public/simulation/templates/template_unit_infantry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry.xml @@ -74,7 +74,6 @@ 100 - 2.0 1.0 0.5 @@ -119,9 +118,7 @@ 9 - - 18.75 - + 1.6 80 Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_pikeman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_pikeman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_pikeman.xml @@ -37,8 +37,5 @@ 6.0 - - 8.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_spearman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_spearman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_spearman.xml @@ -32,8 +32,5 @@ 8.5 - - 15.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_swordsman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_swordsman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_swordsman.xml @@ -29,8 +29,5 @@ 9.5 - - 16.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged.xml @@ -34,4 +34,7 @@ attack/weapon/arrowfly.xml + + 2.0 + Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml @@ -38,8 +38,5 @@ 8.0 - - 18.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelinist.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelinist.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelinist.xml @@ -32,8 +32,5 @@ 13.5 - - 24.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml @@ -32,8 +32,5 @@ 11.0 - - 24.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_mechanical.xml +++ binaries/data/mods/public/simulation/templates/template_unit_mechanical.xml @@ -22,4 +22,7 @@ 4.0 + + 1.0 + Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_bireme.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_bireme.xml +++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_bireme.xml @@ -69,8 +69,5 @@ 14 - - 18.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_fire.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_fire.xml +++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_fire.xml @@ -46,9 +46,6 @@ ship-small 17.5 - - 22.0 - 60 Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_quinquereme.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_quinquereme.xml +++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_quinquereme.xml @@ -77,9 +77,6 @@ 16 - - 20 - 110 Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_trireme.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_trireme.xml +++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_trireme.xml @@ -69,8 +69,5 @@ 16 - - 20.0 - Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_ballista.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_ballista.xml +++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_ballista.xml @@ -61,9 +61,6 @@ 8 - - 12.0 - 120 Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_onager.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_onager.xml +++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_onager.xml @@ -69,9 +69,6 @@ 7 - - 10.0 - 120 Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_ram.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_ram.xml +++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_ram.xml @@ -49,9 +49,6 @@ 8 - - 11.0 - 80 Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_tower.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_tower.xml +++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_tower.xml @@ -71,9 +71,6 @@ 6.5 - - 10.0 - 80 Index: binaries/data/mods/public/simulation/templates/template_unit_support.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_support.xml +++ binaries/data/mods/public/simulation/templates/template_unit_support.xml @@ -31,4 +31,7 @@ passive + + 2.0 + Index: binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml +++ binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml @@ -92,11 +92,6 @@ 9.5 - - 16.0 - 200.0 - 0.0 - 32 Index: binaries/data/mods/public/simulation/templates/template_unit_support_healer.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_support_healer.xml +++ binaries/data/mods/public/simulation/templates/template_unit_support_healer.xml @@ -41,11 +41,6 @@ 9 - - 12.0 - 200.0 - 0.0 - 30 Index: binaries/data/mods/public/simulation/templates/template_unit_support_slave.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_support_slave.xml +++ binaries/data/mods/public/simulation/templates/template_unit_support_slave.xml @@ -49,7 +49,6 @@ 1 - 2.0 1.0 0.5 @@ -85,10 +84,5 @@ 8 - - 15.0 - 1000.0 - 8.0 - Index: binaries/data/mods/public/simulation/templates/units/athen_mechanical_siege_lithobolos_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/athen_mechanical_siege_lithobolos_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/athen_mechanical_siege_lithobolos_unpacked.xml @@ -10,9 +10,6 @@ 0.001 - - 0.001 - units/athenians/siege_rock.xml Index: binaries/data/mods/public/simulation/templates/units/athen_mechanical_siege_oxybeles_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/athen_mechanical_siege_oxybeles_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/athen_mechanical_siege_oxybeles_unpacked.xml @@ -10,9 +10,6 @@ 0.001 - - 0.001 - units/athenians/siege_spear.xml Index: binaries/data/mods/public/simulation/templates/units/cart_mechanical_siege_ballista_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/cart_mechanical_siege_ballista_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/cart_mechanical_siege_ballista_unpacked.xml @@ -10,9 +10,6 @@ 0.001 - - 0.001 - units/carthaginians/siege_rock.xml Index: binaries/data/mods/public/simulation/templates/units/cart_mechanical_siege_oxybeles_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/cart_mechanical_siege_oxybeles_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/cart_mechanical_siege_oxybeles_unpacked.xml @@ -10,9 +10,6 @@ 0.001 - - 0.001 - units/carthaginians/siege_spear.xml Index: binaries/data/mods/public/simulation/templates/units/gaul_champion_fanatic.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/gaul_champion_fanatic.xml +++ binaries/data/mods/public/simulation/templates/units/gaul_champion_fanatic.xml @@ -24,11 +24,6 @@ 5 - - 1.5 - 600.0 - 5.0 - units/celts/fanatic.xml Index: binaries/data/mods/public/simulation/templates/units/mace_mechanical_siege_lithobolos_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/mace_mechanical_siege_lithobolos_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/mace_mechanical_siege_lithobolos_unpacked.xml @@ -10,9 +10,6 @@ 0.001 - - 0.001 - units/hellenes/siege_rock.xml Index: binaries/data/mods/public/simulation/templates/units/mace_mechanical_siege_oxybeles_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/mace_mechanical_siege_oxybeles_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/mace_mechanical_siege_oxybeles_unpacked.xml @@ -10,9 +10,6 @@ 0.001 - - 0.001 - units/hellenes/siege_spear.xml Index: binaries/data/mods/public/simulation/templates/units/maur_elephant_archer_b.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/maur_elephant_archer_b.xml +++ binaries/data/mods/public/simulation/templates/units/maur_elephant_archer_b.xml @@ -40,11 +40,6 @@ large 8.5 - - 14.0 - 1000.0 - 10.0 - units/mauryans/elephant_archer_b.xml Index: binaries/data/mods/public/simulation/templates/units/maur_hero_chanakya.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/maur_hero_chanakya.xml +++ binaries/data/mods/public/simulation/templates/units/maur_hero_chanakya.xml @@ -53,11 +53,6 @@ 9 - - 12.0 - 200.0 - 0.0 - 30 Index: binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml +++ binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml @@ -69,9 +69,6 @@ large 5.5 - - 10.0 - 50 Index: binaries/data/mods/public/simulation/templates/units/ptol_mechanical_siege_lithobolos_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/ptol_mechanical_siege_lithobolos_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/ptol_mechanical_siege_lithobolos_unpacked.xml @@ -10,9 +10,6 @@ 0.001 - - 0.001 - units/hellenes/siege_rock.xml Index: binaries/data/mods/public/simulation/templates/units/ptol_mechanical_siege_polybolos_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/ptol_mechanical_siege_polybolos_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/ptol_mechanical_siege_polybolos_unpacked.xml @@ -10,9 +10,6 @@ 0.001 - - 0.001 - units/ptolemies/siege_spear.xml Index: binaries/data/mods/public/simulation/templates/units/rome_mechanical_siege_ballista_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/rome_mechanical_siege_ballista_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/rome_mechanical_siege_ballista_unpacked.xml @@ -15,9 +15,6 @@ 0.001 - - 0.001 - units/romans/siege_rock.xml Index: binaries/data/mods/public/simulation/templates/units/rome_mechanical_siege_onager_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/rome_mechanical_siege_onager_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/rome_mechanical_siege_onager_unpacked.xml @@ -24,9 +24,6 @@ 0.001 - - 0.001 - 88 Index: binaries/data/mods/public/simulation/templates/units/rome_mechanical_siege_scorpio_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/rome_mechanical_siege_scorpio_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/rome_mechanical_siege_scorpio_unpacked.xml @@ -10,9 +10,6 @@ 0.001 - - 0.001 - units/romans/siege_scorpio.xml Index: binaries/data/mods/public/simulation/templates/units/sele_mechanical_siege_lithobolos_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/sele_mechanical_siege_lithobolos_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/sele_mechanical_siege_lithobolos_unpacked.xml @@ -10,9 +10,6 @@ 0.001 - - 0.001 - units/hellenes/siege_rock.xml Index: binaries/data/mods/public/simulation/templates/units/spart_mechanical_siege_oxybeles_unpacked.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/spart_mechanical_siege_oxybeles_unpacked.xml +++ binaries/data/mods/public/simulation/templates/units/spart_mechanical_siege_oxybeles_unpacked.xml @@ -10,9 +10,6 @@ 0.001 - - 0.001 - units/athenians/siege_spear.xml Index: source/simulation2/components/CCmpUnitMotion.cpp =================================================================== --- source/simulation2/components/CCmpUnitMotion.cpp +++ source/simulation2/components/CCmpUnitMotion.cpp @@ -131,14 +131,18 @@ // Template state: bool m_FormationController; - fixed m_WalkSpeed, m_OriginalWalkSpeed; // in metres per second - fixed m_RunSpeed, m_OriginalRunSpeed; + + fixed m_TemplateWalkSpeed, m_TemplateTopSpeedRatio; pass_class_t m_PassClass; std::string m_PassClassName; // Dynamic state: entity_pos_t m_Clearance; + + // cached for efficiency + fixed m_TechModifiedWalkSpeed, m_TechModifiedTopSpeedRatio; + bool m_Moving; bool m_FacePointAfterMove; @@ -229,7 +233,10 @@ entity_pos_t m_TargetMinRange; entity_pos_t m_TargetMaxRange; + // actual unit speed, after technology and ratio fixed m_Speed; + // cached for convenience + fixed m_SpeedRatio; // Current mean speed (over the last turn). fixed m_CurSpeed; @@ -259,14 +266,8 @@ "" "" "" - "" - "" - "" - "" - "" - "" - "" - "" + "" + "" "" "" "" @@ -281,14 +282,12 @@ m_Moving = false; m_FacePointAfterMove = true; - m_WalkSpeed = m_OriginalWalkSpeed = paramNode.GetChild("WalkSpeed").ToFixed(); - m_Speed = m_WalkSpeed; - m_CurSpeed = fixed::Zero(); + m_TechModifiedWalkSpeed = m_TemplateWalkSpeed = m_Speed = paramNode.GetChild("WalkSpeed").ToFixed(); + m_SpeedRatio = fixed::FromInt(1); - if (paramNode.GetChild("Run").IsOk()) - m_RunSpeed = m_OriginalRunSpeed = paramNode.GetChild("Run").GetChild("Speed").ToFixed(); - else - m_RunSpeed = m_OriginalRunSpeed = m_WalkSpeed; + m_TechModifiedTopSpeedRatio = m_TemplateTopSpeedRatio = fixed::FromInt(1); + if (paramNode.GetChild("RunMultiplier").IsOk()) + m_TechModifiedTopSpeedRatio = m_TemplateTopSpeedRatio = paramNode.GetChild("RunMultiplier").ToFixed(); CmpPtr cmpPathfinder(GetSystemEntity()); if (cmpPathfinder) @@ -339,6 +338,8 @@ serialize.NumberFixed_Unbounded("target max range", m_TargetMaxRange); serialize.NumberFixed_Unbounded("speed", m_Speed); + serialize.NumberFixed_Unbounded("speed ratio", m_SpeedRatio); + serialize.NumberFixed_Unbounded("current speed", m_CurSpeed); serialize.Bool("moving", m_Moving); @@ -417,17 +418,11 @@ if (!cmpValueModificationManager) break; - fixed newWalkSpeed = cmpValueModificationManager->ApplyModifications(L"UnitMotion/WalkSpeed", m_OriginalWalkSpeed, GetEntityId()); - fixed newRunSpeed = cmpValueModificationManager->ApplyModifications(L"UnitMotion/Run/Speed", m_OriginalRunSpeed, GetEntityId()); + m_TechModifiedWalkSpeed = cmpValueModificationManager->ApplyModifications(L"UnitMotion/WalkSpeed", m_TemplateWalkSpeed, GetEntityId()); + m_TechModifiedTopSpeedRatio = cmpValueModificationManager->ApplyModifications(L"UnitMotion/RunMultiplier", m_TemplateTopSpeedRatio, GetEntityId()); - // update m_Speed (the actual speed) if set to one of the variables - if (m_Speed == m_WalkSpeed) - m_Speed = newWalkSpeed; - else if (m_Speed == m_RunSpeed) - m_Speed = newRunSpeed; + m_Speed = m_SpeedRatio.Multiply(GetBaseSpeed()); - m_WalkSpeed = newWalkSpeed; - m_RunSpeed = newRunSpeed; break; } } @@ -444,16 +439,33 @@ return m_Moving; } - virtual fixed GetWalkSpeed() const + virtual fixed GetBaseSpeed() + { + return m_TechModifiedWalkSpeed; + } + + virtual fixed GetSpeed() + { + return m_Speed; + } + + virtual fixed GetSpeedRatio() + { + return m_SpeedRatio; + } + + virtual fixed GetTopSpeedRatio() { - return m_WalkSpeed; + return m_TechModifiedTopSpeedRatio; } - virtual fixed GetRunSpeed() const + virtual void SetSpeed(fixed ratio) { - return m_RunSpeed; + m_SpeedRatio = std::min(ratio, GetTopSpeedRatio()); + m_Speed = m_SpeedRatio.Multiply(GetBaseSpeed()); } + virtual pass_class_t GetPassabilityClass() const { return m_PassClass; @@ -477,11 +489,6 @@ return m_CurSpeed; } - virtual void SetSpeed(fixed speed) - { - m_Speed = speed; - } - virtual void SetFacePointAfterMove(bool facePointAfterMove) { m_FacePointAfterMove = facePointAfterMove; @@ -855,12 +862,7 @@ // Keep track of the current unit's position during the update CFixedVector2D pos = initialPos; - // If in formation, run to keep up; otherwise just walk - fixed basicSpeed; - if (IsFormationMember()) - basicSpeed = GetRunSpeed(); - else - basicSpeed = m_Speed; // (typically but not always WalkSpeed) + fixed basicSpeed = m_Speed; // Find the speed factor of the underlying terrain // (We only care about the tile we start on - it doesn't matter if we're moving Index: source/simulation2/components/ICmpUnitMotion.h =================================================================== --- source/simulation2/components/ICmpUnitMotion.h +++ source/simulation2/components/ICmpUnitMotion.h @@ -92,26 +92,39 @@ virtual fixed GetCurrentSpeed() const = 0; /** - * Set the current movement speed. + * Get whether the unit is moving. */ - virtual void SetSpeed(fixed speed) = 0; + virtual bool IsMoving() const = 0; /** - * Get whether the unit is moving. + * Get how much faster/slower we are at than normal. */ - virtual bool IsMoving() const = 0; + virtual fixed GetSpeedRatio() = 0; /** - * Get the default speed that this unit will have when walking, in metres per second. + * Get how much faster than our regular speed we can go. */ - virtual fixed GetWalkSpeed() const = 0; + virtual fixed GetTopSpeedRatio() = 0; /** - * Get the default speed that this unit will have when running, in metres per second. + * Set the current movement speed. + * 'speed' in % of top speed (ie 3.0 will be 3 times top speed). */ - virtual fixed GetRunSpeed() const = 0; + virtual void SetSpeed(fixed speed) = 0; + + /** + * Get the unit theoretical speed in metres per second. + * GetActualSpeed will return historical speed + * This is affected by SetSpeed. + */ + virtual fixed GetSpeed() = 0; /** + * Get the unit base/walk speed in metres per second. + * This is NOT affected by SetSpeed. + */ + virtual fixed GetBaseSpeed() = 0; + /** * Set whether the unit will turn to face the target point after finishing moving. */ virtual void SetFacePointAfterMove(bool facePointAfterMove) = 0; Index: source/simulation2/components/ICmpUnitMotion.cpp =================================================================== --- source/simulation2/components/ICmpUnitMotion.cpp +++ source/simulation2/components/ICmpUnitMotion.cpp @@ -31,10 +31,11 @@ DEFINE_INTERFACE_METHOD_2("FaceTowardsPoint", void, ICmpUnitMotion, FaceTowardsPoint, entity_pos_t, entity_pos_t) DEFINE_INTERFACE_METHOD_0("StopMoving", void, ICmpUnitMotion, StopMoving) DEFINE_INTERFACE_METHOD_CONST_0("GetCurrentSpeed", fixed, ICmpUnitMotion, GetCurrentSpeed) +DEFINE_INTERFACE_METHOD_0("GetTopSpeedRatio", fixed, ICmpUnitMotion, GetTopSpeedRatio) DEFINE_INTERFACE_METHOD_1("SetSpeed", void, ICmpUnitMotion, SetSpeed, fixed) DEFINE_INTERFACE_METHOD_CONST_0("IsMoving", bool, ICmpUnitMotion, IsMoving) -DEFINE_INTERFACE_METHOD_CONST_0("GetWalkSpeed", fixed, ICmpUnitMotion, GetWalkSpeed) -DEFINE_INTERFACE_METHOD_CONST_0("GetRunSpeed", fixed, ICmpUnitMotion, GetRunSpeed) +DEFINE_INTERFACE_METHOD_0("GetSpeed", fixed, ICmpUnitMotion, GetSpeed) +DEFINE_INTERFACE_METHOD_0("GetBaseSpeed", fixed, ICmpUnitMotion, GetBaseSpeed) DEFINE_INTERFACE_METHOD_CONST_0("GetPassabilityClassName", std::string, ICmpUnitMotion, GetPassabilityClassName) DEFINE_INTERFACE_METHOD_CONST_0("GetUnitClearance", entity_pos_t, ICmpUnitMotion, GetUnitClearance) DEFINE_INTERFACE_METHOD_1("SetFacePointAfterMove", void, ICmpUnitMotion, SetFacePointAfterMove, bool) @@ -91,19 +92,24 @@ m_Script.CallVoid("SetSpeed", speed); } + virtual fixed GetTopSpeedRatio() + { + return m_Script.Call("GetTopSpeedRatio"); + } + virtual bool IsMoving() const { return m_Script.Call("IsMoving"); } - virtual fixed GetWalkSpeed() const + virtual fixed GetSpeed() { - return m_Script.Call("GetWalkSpeed"); + return m_Script.Call("GetSpeed"); } - virtual fixed GetRunSpeed() const + virtual fixed GetBaseSpeed() { - return m_Script.Call("GetRunSpeed"); + return m_Script.Call("GetBaseSpeed"); } virtual void SetFacePointAfterMove(bool facePointAfterMove) @@ -116,6 +122,11 @@ return m_Script.Call("GetPassabilityClass"); } + virtual fixed GetSpeedRatio() + { + return fixed::FromInt(1); + } + virtual std::string GetPassabilityClassName() const { return m_Script.Call("GetPassabilityClassName"); Index: source/tools/atlas/GameInterface/ActorViewer.cpp =================================================================== --- source/tools/atlas/GameInterface/ActorViewer.cpp +++ source/tools/atlas/GameInterface/ActorViewer.cpp @@ -381,7 +381,7 @@ { CmpPtr cmpUnitMotion(m.Simulation2, m.Entity); if (cmpUnitMotion) - speed = cmpUnitMotion->GetWalkSpeed().ToFloat(); + speed = cmpUnitMotion->GetBaseSpeed().ToFloat(); else speed = 7.f; // typical unit speed @@ -391,7 +391,7 @@ { CmpPtr cmpUnitMotion(m.Simulation2, m.Entity); if (cmpUnitMotion) - speed = cmpUnitMotion->GetRunSpeed().ToFloat(); + speed = cmpUnitMotion->GetBaseSpeed().ToFloat() * cmpUnitMotion->GetTopSpeedRatio().ToFloat(); else speed = 12.f; // typical unit speed