diff --git a/binaries/data/mods/public/gui/session/session.js b/binaries/data/mods/public/gui/session/session.js index 174937204d..4ae43544ed 100644 --- a/binaries/data/mods/public/gui/session/session.js +++ b/binaries/data/mods/public/gui/session/session.js @@ -376,6 +376,11 @@ function onSimulationUpdate() updateResearchDisplay(); updateBuildingPlacementPreview(); updateTimeElapsedCounter(simState); + + // Update music state on basis of battle state. + var battleState = Engine.GuiInterfaceCall("GetBattleState", Engine.GetPlayerID()); + if (battleState) + global.music.setState(global.music.states[battleState]); } function updateGroups() diff --git a/binaries/data/mods/public/simulation/components/Attack.js b/binaries/data/mods/public/simulation/components/Attack.js index b632e2fc88..460dfa19a4 100644 --- a/binaries/data/mods/public/simulation/components/Attack.js +++ b/binaries/data/mods/public/simulation/components/Attack.js @@ -698,7 +698,7 @@ Attack.prototype.CauseDamage = function(data) } Engine.PostMessage(data.target, MT_Attacked, - { "attacker": this.entity, "target": data.target, "type": data.type }); + { "attacker": this.entity, "target": data.target, "type": data.type, "damage": -targetState.change }); PlaySound("attack_impact", this.entity); }; diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js index a6f5c9a6b1..8fb1544f56 100644 --- a/binaries/data/mods/public/simulation/components/GuiInterface.js +++ b/binaries/data/mods/public/simulation/components/GuiInterface.js @@ -605,6 +605,13 @@ GuiInterface.prototype.GetStartedResearch = function(player) return ret; } +// Returns the battle state of the player. +GuiInterface.prototype.GetBattleState = function(player) +{ + var cmpBattleDetection = QueryPlayerIDInterface(player, IID_BattleDetection); + return cmpBattleDetection.GetState(); +}; + // Used to show a red square over GUI elements you can't yet afford. GuiInterface.prototype.GetNeededResources = function(player, amounts) { @@ -1697,6 +1704,7 @@ var exposedFunctions = { "IsTechnologyResearched": 1, "CheckTechnologyRequirements": 1, "GetStartedResearch": 1, + "GetBattleState": 1, "GetNeededResources": 1, "GetNextNotification": 1, diff --git a/binaries/data/mods/public/simulation/components/Health.js b/binaries/data/mods/public/simulation/components/Health.js index e200d80081..fac81db94c 100644 --- a/binaries/data/mods/public/simulation/components/Health.js +++ b/binaries/data/mods/public/simulation/components/Health.js @@ -155,6 +155,7 @@ Health.prototype.Reduce = function(amount) Engine.PostMessage(this.entity, MT_HealthChanged, { "from": old, "to": this.hitpoints }); } + state.change = this.hitpoints - old; return state; }; diff --git a/binaries/data/mods/public/simulation/components/interfaces/Attack.js b/binaries/data/mods/public/simulation/components/interfaces/Attack.js index 48aaf484e2..530b490e1a 100644 --- a/binaries/data/mods/public/simulation/components/interfaces/Attack.js +++ b/binaries/data/mods/public/simulation/components/interfaces/Attack.js @@ -2,5 +2,5 @@ Engine.RegisterInterface("Attack"); // Message sent from Attack to the target entity, each // time the target is damaged. -// Data: { attacker: 123, target: 234 } +// Data: { attacker: 123, target: 234, type: "Melee", damage: 123 } Engine.RegisterMessageType("Attacked"); diff --git a/binaries/data/mods/public/simulation/templates/special/player.xml b/binaries/data/mods/public/simulation/templates/special/player.xml index 7ed0741fc7..a2285a9abc 100644 --- a/binaries/data/mods/public/simulation/templates/special/player.xml +++ b/binaries/data/mods/public/simulation/templates/special/player.xml @@ -12,4 +12,5 @@ +