diff -r bb44fd4d8809 -r 2c884bb73975 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/dragon.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/dragon.lua Sun Apr 16 06:08:24 2017 +0200 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/dragon.lua Sun Apr 16 08:19:33 2017 +0200 @@ -171,6 +171,10 @@ crates = {} cratesNum = 0 jetCrate = nil + +cyborgsKilledBeforeCrates = false +cratesTaken = false +doneCyborgsDead = false -----------------------------Animations-------------------------------- function EmitDenseClouds(dir) local dif @@ -258,12 +262,27 @@ table.insert(killAnim, {func = AnimOutOfNowhere, args = {cyborg, unpack(cyborgPos)}}) table.insert(killAnim, {func = AnimCustomFunction, args = {cyborg, CondNeedToTurn, {cyborg, native}}}) table.insert(killAnim, {func = AnimSay, args = {cyborg, string.format(loc("You bear impressive skills, %s!"), nativeUnNames[m5DeployedNum]), SAY_SHOUT, 4000}}) - table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("However, my mates don't agree with me on letting you go..."), SAY_SHOUT, 7000}}) - table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("I guess you'll have to kill them."), SAY_SHOUT, 4000}}) + if CheckCyborgsDead() then + table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("I see you already took care of your enemies."), SAY_SHOUT, 7000}}) + table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("Those were scheduled for disposal anyway."), SAY_SHOUT, 4000}}) + table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("So you basically did the dirty work for us."), SAY_SHOUT, 4000}}) + cyborgsKilledBeforeCrates = true + else + table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("However, my mates don't agree with me on letting you go..."), SAY_SHOUT, 7000}}) + table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("I guess you'll have to kill them."), SAY_SHOUT, 4000}}) + end table.insert(killAnim, {func = AnimDisappear, args = {cyborg, unpack(cyborgPos)}}) table.insert(killAnim, {func = AnimSwitchHog, args = {native}}) table.insert(killAnim, {func = AnimWait, args = {native, 1}}) table.insert(killAnim, {func = AnimCustomFunction, args = {native, HideHedge, {cyborg}}}) + + local function checkCyborgsAgain() + if CheckCyborgsDead() then + DoCyborgsDead() + end + end + table.insert(killAnim, {func = AnimCustomFunction, args = {native, checkCyborgsAgain, {}}}) + AddSkipFunction(killAnim, SkipKillAnim, {}) end @@ -272,7 +291,9 @@ table.insert(killedAnim, {func = AnimOutOfNowhere, args = {cyborg, unpack(secondPos[2])}}) table.insert(killedAnim, {func = AnimOutOfNowhere, args = {native, unpack(secondPos[1])}}) table.insert(killedAnim, {func = AnimCustomFunction, args = {cyborg, CondNeedToTurn, {cyborg, native}}}) - table.insert(killedAnim, {func = AnimSay, args = {cyborg, string.format(loc("Nice work, %s!"), nativeUnNames[m5DeployedNum]), SAY_SHOUT, 4000}}) + if not cyborgsKilledBeforeCrates then + table.insert(killedAnim, {func = AnimSay, args = {cyborg, string.format(loc("Nice work, %s!"), nativeUnNames[m5DeployedNum]), SAY_SHOUT, 4000}}) + end table.insert(killedAnim, {func = AnimSay, args = {cyborg, loc("As a reward for your performance, here's some new technology!"), SAY_SHOUT, 8000}}) table.insert(killedAnim, {func = AnimSay, args = {cyborg, loc("Use it wisely!"), SAY_SHOUT, 3000}}) table.insert(killedAnim, {func = AnimDisappear, args = {cyborg, unpack(secondPos[2])}}) @@ -355,12 +376,15 @@ end function DoCyborgsDead() - NullifyAmmo() - RestoreHedge(cyborg) - SetupKilledAnim() - SetGearMessage(CurrentHedgehog, 0) - AddAnim(killedAnim) - AddFunction({func = AfterKilledAnim, args = {}}) + if cratesTaken and not doneCyborgsDead then + NullifyAmmo() + RestoreHedge(cyborg) + SetupKilledAnim() + SetGearMessage(CurrentHedgehog, 0) + AddAnim(killedAnim) + AddFunction({func = AfterKilledAnim, args = {}}) + doneCyborgsDead = true + end end @@ -373,6 +397,7 @@ end function DoCratesTaken() + cratesTaken = true SetupKillAnim() SetGearMessage(CurrentHedgehog, 0) AddAnim(killAnim) @@ -434,6 +459,9 @@ function CyborgDeadReact() freshDead = nil if cyborgsLeft == 0 then + if not cratesTaken then + AnimSay(native, loc("I still have to collect the crates."), SAY_THINK, 8000) + end return end AnimSay(native, reactions[cyborgsLeft])