diff -r 12ffbbf81ee1 -r 543729d313f5 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/enemy.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/enemy.lua Sat May 04 00:56:27 2019 +0200 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/enemy.lua Sat May 04 19:07:58 2019 +0200 @@ -21,6 +21,7 @@ HedgewarsScriptLoad("/Scripts/Locale.lua") HedgewarsScriptLoad("/Scripts/Animate.lua") +HedgewarsScriptLoad("/Scripts/Utils.lua") --------------------------------------------Constants------------------------------------ @@ -97,6 +98,7 @@ gearDead = {} hedgeHidden = {} +trackedMines = {} startAnim = {} finalAnim = {} @@ -410,6 +412,7 @@ function FailedMission() RestoreHedge(cyborg) AnimOutOfNowhere(cyborg, unpack(cyborgPos[1])) + ClearMinesAroundCyborg() if CheckCyborgsDead() then AnimSay(cyborg, loc("Hmmm...it's a draw. How unfortunate!"), SAY_THINK, 6000) elseif leader ~= nil then @@ -435,6 +438,7 @@ RestoreHedge(cyborg) CondNeedToTurn2(cyborg, players[1]) SetupFinalAnim() + ClearMinesAroundCyborg() AddAnim(finalAnim) AddFunction({func = WinMission, args = {}}) end @@ -461,6 +465,22 @@ end end +function ClearMinesAroundCyborg() + if GetHealth(cyborg) then + local vaporized = 0 + for mine, _ in pairs(trackedMines) do + if GetHealth(mine) and GetHealth(cyborg) and gearIsInBox(mine, GetX(cyborg) - 50, GetY(cyborg) - 50, 100, 100) == true then + AddVisualGear(GetX(mine), GetY(mine), vgtSmoke, 0, false) + DeleteGear(mine) + vaporized = vaporized + 1 + end + end + if vaporized > 0 then + PlaySound(sndVaporize) + end + end +end + function GetVariables() progress = tonumber(GetCampaignVar("Progress")) m5DeployedNum = tonumber(GetCampaignVar("M5DeployedNum")) or leaksNum @@ -615,9 +635,20 @@ CheckEvents() end +function onGearAdd(gear) + local gt = GetGearType(gear) + if gt == gtMine or gt == gtSMine or gt == gtAirMine then + trackedMines[gear] = true + end +end + function onGearDelete(gear) + local gt = GetGearType(gear) + if gt == gtMine or gt == gtSMine or gt == gtAirMine then + trackedMines[gear] = nil + end gearDead[gear] = true - if GetGearType(gear) == gtHedgehog then + if gt == gtHedgehog then if GetHogTeamName(gear) == nativesTeamName then for i = 1, nativesLeft do if natives[i] == gear then