loadfile(GetDataPath() .. "Scripts/Locale.lua")() loadfile(GetDataPath() .. "Scripts/Animate.lua")() -----------------------------Constants--------------------------------- choiceAccepted = 1 choiceRefused = 2 choiceAttacked = 3 choiceEliminate = 1 choiceSpare = 2 leaksNum = 1 denseNum = 2 waterNum = 3 buffaloNum = 4 chiefNum = 5 princessNum = 6 wiseNum = 7 spyKillStage = 1 platformStage = 2 wave3Stage = 3 tmpVar = 0 nativeNames = {loc("Leaks A Lot"), loc("Dense Cloud"), loc("Fiery Water"), loc("Raging Buffalo"), loc("Righteous Beard"), loc("Fell From Heaven"), loc("Wise Oak"), loc("Eagle Eye"), loc("Flaming Worm")} nativeHats = {"Rambo", "RobinHood", "pirate_jack", "zoo_Bunny", "IndianChief", "tiara", "AkuAku", "None", "None"} nativePos = {{887, 329}, {1050, 288}, {1731, 707}, {830, 342}, {1001, 290}, {773, 340}, {953, 305}, {347, 648}, {314, 647}} nativeDir = {"Right", "Left", "Left", "Right", "Left", "Right", "Left", "Right", "Right"} cannibalNames = {loc("Brain Teaser"), loc("Bone Jackson"), loc("Gimme Bones"), loc("Hedgibal Letter"), loc("Bloodpie"), loc("Scalp Muncher"), loc("Back Breaker"), loc("Dahmer"), loc("Meiwes"), loc("Ear Sniffer"), loc("Regurgitator"), loc("Muriel")} cannibalPos = {{3607, 1472}, {3612, 1487}, {3646, 1502}, {3694, 1509}, {3746, 1525}, {3704, 1513}, {3607, 1472}, {3612, 1487}, {3646, 1502}, {3694, 1509}, {3746, 1525}, {3704, 1513}} cannibalDir = {"Left", "Left", "Left", "Left", "Left", "Left", "Left", "Left", "Left", "Left", "Left", "Left"} cyborgPos = {1369, 574} cyborgPos2 = {1308, 148} deployedPos = {2522, 1365} -----------------------------Variables--------------------------------- natives = {} nativeDead = {} nativeHidden = {} nativeRevived = {} nativesNum = 0 cannibals = {} cannibalDead = {} cannibalHidden = {} speakerHog = nil spyHog = nil deployedHog = nil cyborgHidden = false m2Choice = 0 m2DenseDead = 0 m4DenseDead = 0 m4BuffaloDead = 0 m4WaterDead = 0 m4ChiefDead = 0 m4LeaksDead = 0 needRevival = false gearr = nil startElimination = 0 stage = 0 choice = 0 highJumped = false TurnsLeft = 0 startNativesNum = 0 startAnim = {} afterChoiceAnim = {} wave2Anim = {} wave2DeadAnim = {} wave3DeadAnim = {} -----------------------------Animations-------------------------------- function Wave2Reaction() local i = 1 local gearr = nil while nativeDead[i] == true do i = i + 1 end gearr = natives[i] if nativeDead[denseNum] ~= true and band(GetState(natives[denseNum]), gstDrowning) == 0 then AnimInsertStepNext({func = AnimCustomFunction, args = {dense, EmitDenseClouds, {"Left"}}}) AnimInsertStepNext({func = AnimTurn, args = {dense, "Left"}}) end if nativeDead[buffaloNum] ~= true and band(GetState(natives[buffaloNum]), gstDrowning) == 0 then AnimInsertStepNext({func = AnimSay, args = {natives[buffaloNum], loc("Let them have a taste of my fury!"), SAY_SHOUT, 6000}}) end AnimInsertStepNext({func = AnimSay, args = {gearr, loc("There's more of them? When did they become so hungry?"), SAY_SHOUT, 8000}}) end function EmitDenseClouds(dir) local dif if dir == "Left" then dif = 10 else dif = -10 end AnimInsertStepNext({func = AnimVisualGear, args = {natives[denseNum], GetX(natives[denseNum]) + dif, GetY(natives[denseNum]) + dif, vgtSteam, 0, true}, swh = false}) AnimInsertStepNext({func = AnimVisualGear, args = {natives[denseNum], GetX(natives[denseNum]) + dif, GetY(natives[denseNum]) + dif, vgtSteam, 0, true}, swh = false}) AnimInsertStepNext({func = AnimVisualGear, args = {natives[denseNum], GetX(natives[denseNum]) + dif, GetY(natives[denseNum]) + dif, vgtSteam, 0, true}, swh = false}) AnimInsertStepNext({func = AnimWait, args = {natives[denseNum], 800}}) AnimInsertStepNext({func = AnimVisualGear, args = {natives[denseNum], GetX(natives[denseNum]) + dif, GetY(natives[denseNum]) + dif, vgtSteam, 0, true}, swh = false}) AnimInsertStepNext({func = AnimVisualGear, args = {natives[denseNum], GetX(natives[denseNum]) + dif, GetY(natives[denseNum]) + dif, vgtSteam, 0, true}, swh = false}) AnimInsertStepNext({func = AnimWait, args = {natives[denseNum], 800}}) AnimInsertStepNext({func = AnimVisualGear, args = {natives[denseNum], GetX(natives[denseNum]) + dif, GetY(natives[denseNum]) + dif, vgtSteam, 0, true}, swh = false}) end function SaySafe() local i = 1 while gearr == nil do if nativeDead[i] ~= true and nativeHidden[i] ~= true then gearr = natives[i] end i = i + 1 end AnimInsertStepNext({func = AnimSay, args = {natives[wiseNum], "We are indeed.", SAY_SAY, 2500}}) AnimInsertStepNext({func = AnimSay, args = {gearr, "I think we are safe here.", SAY_SAY, 4000}}) end function ReviveNatives() for i = 1, 7 do if nativeHidden[i] == true and nativeDead[i] ~= true then RestoreHog(natives[i]) nativeHidden[i] = false nativeRevived[i] = true AnimInsertStepNext({func = AnimOutOfNowhere, args = {natives[i], unpack(nativePos[i])}}) end end end function WonderAlive() if nativeRevived[waterNum] == true then AnimInsertStepNext({func = AnimSay, args = {natives[waterNum], "I'm...alive? How? Why?", SAY_THINK, 3500}}) AnimInsertStepNext({func = AnimWait, args = {natives[waterNum], 800}}) AnimInsertStepNext({func = AnimTurn, args = {natives[waterNum], "Left"}}) AnimInsertStepNext({func = AnimWait, args = {natives[waterNum], 800}}) AnimInsertStepNext({func = AnimTurn, args = {natives[waterNum], "Right"}}) end if nativeRevived[leaksNum] == true and nativeRevived[denseNum] == true then AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "But why would they help us?", SAY_SAY, 4000}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "It must be the aliens!", SAY_SAY, 3500}}) AnimInsertStepNext({func = AnimSay, args = {natives[princessNum], "You just appeared out of thin air!", SAY_SAY, 5000}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "But...we died!", SAY_SAY, 2500}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "This must be the caves!", SAY_SAY, 3500}}) AnimInsertStepNext({func = AnimSay, args = {natives[denseNum], "Dude, where are we?", SAY_SAY, 3000}}) AnimInsertStepNext({func = AnimWait, args = {natives[leaksNum], 800}}) AnimInsertStepNext({func = AnimTurn, args = {natives[leaksNum], "Right"}}) AnimInsertStepNext({func = AnimTurn, args = {natives[denseNum], "Left"}}) AnimInsertStepNext({func = AnimWait, args = {natives[leaksNum], 800}}) AnimInsertStepNext({func = AnimTurn, args = {natives[leaksNum], "Left"}}) AnimInsertStepNext({func = AnimTurn, args = {natives[denseNum], "Right"}}) AnimInsertStepNext({func = AnimWait, args = {natives[leaksNum], 800}}) AnimInsertStepNext({func = AnimTurn, args = {natives[leaksNum], "Right"}}) AnimInsertStepNext({func = AnimTurn, args = {natives[denseNum], "Left"}}) AnimInsertStepNext({func = AnimWait, args = {natives[leaksNum], 800}}) AnimInsertStepNext({func = AnimTurn, args = {natives[leaksNum], "Left"}}) AnimInsertStepNext({func = AnimTurn, args = {natives[denseNum], "Right"}}) AnimInsertStepNext({func = AnimCustomFunction, swh = false, args = {natives[leaksNum], CondNeedToTurn, {natives[leaksNum], natives[princessNum]}}}) if nativeDead[chiefNum] ~= true then AnimInsertStepNext({func = AnimTurn, args = {natives[chiefNum], "Right"}}) end elseif nativeRevived[leaksNum] == true then AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "Why would they do this?", SAY_SAY, 6000}}) AnimInsertStepNext({func = AnimSay, args = {natives[wiseNum], "It must be the aliens' deed.", SAY_SAY, 5000}}) AnimInsertStepNext({func = AnimSay, args = {natives[wiseNum], "Do not laugh, inexperienced one, for he speaks the truth!", SAY_SAY, 10000}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "Yeah, sure! I died. Hillarious!", SAY_SAY, 6000}}) AnimInsertStepNext({func = AnimSay, args = {gearr, "You're...alive!? But we saw you die!", SAY_SAY, 6000}}) AnimInsertStepNext({func = AnimSay, args = {gearr, "???", SAY_SAY, 2000}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "Wow, what a dream!", SAY_SAY, 3000}}) if nativeDead[chiefNum] ~= true then AnimInsertStepNext({func = AnimTurn, args = {natives[chiefNum], "Right"}}) end AnimInsertStepNext({func = AnimCustomFunction, swh = false, args = {natives[leaksNum], CondNeedToTurn, {natives[leaksNum], natives[wiseNum]}}}) AnimInsertStepNext({func = AnimCustomFunction, swh = false, args = {natives[leaksNum], CondNeedToTurn, {natives[leaksNum], gearr}}}) elseif nativeRevived[denseNum] == true then AnimInsertStepNext({func = AnimSay, args = {natives[denseNum], "Dude, that's so cool!", SAY_SAY, 3000}}) AnimInsertStepNext({func = AnimSay, args = {natives[wiseNum], "It must be the aliens' deed.", SAY_SAY, 5000}}) AnimInsertStepNext({func = AnimSay, args = {natives[denseNum], "But that's impossible!", SAY_SAY, 3000}}) AnimInsertStepNext({func = AnimSay, args = {natives[wiseNum], "It was not a dream, unwise one!", SAY_SAY, 5000}}) AnimInsertStepNext({func = AnimSay, args = {natives[denseNum], "Exactly, man! That was my dream.", SAY_SAY, 5000}}) AnimInsertStepNext({func = AnimSay, args = {gearr, "You're...alive!? But we saw you die!", SAY_SAY, 6000}}) AnimInsertStepNext({func = AnimSay, args = {gearr, "???", SAY_SAY, 2000}}) AnimInsertStepNext({func = AnimSay, args = {natives[denseNum], "Dude, wow! I just had the weirdest high!", SAY_SAY, 6000}}) if nativeDead[chiefNum] ~= true then AnimInsertStepNext({func = AnimTurn, args = {natives[chiefNum], "Right"}}) end AnimInsertStepNext({func = AnimCustomFunction, swh = false, args = {natives[denseNum], CondNeedToTurn, {natives[denseNum], natives[wiseNum]}}}) AnimInsertStepNext({func = AnimCustomFunction, swh = false, args = {natives[denseNum], CondNeedToTurn, {natives[denseNum], gearr}}}) end end function ExplainAlive() if needRevival == true and m4WaterDead == 1 then RestoreCyborg() SetGearPosition(cyborg, unpack(cyborgPos)) AnimInsertStepNext({func = AnimCustomFunction, args = {water, HideCyborg, {}}}) AnimInsertStepNext({func = AnimSwitchHog, args = {water}}) AnimInsertStepNext({func = AnimSay, args = {cyborg, "The answer is...entertaintment. You'll see what I mean.", SAY_SAY, 8000}}) AnimInsertStepNext({func = AnimSay, args = {cyborg, "You're probably wondering why I bought you back...", SAY_SAY, 8000}}) end end function SpyDebate() if m2Choice == choiceAccepted then spyHog = natives[denseNum] AnimInsertStepNext({func = AnimSay, args = {natives[wiseNum], "What shall we do with the traitor?", SAY_SAY, 6000}}) AnimInsertStepNext({func = SetHealth, swh = false, args = {natives[denseNum], 26}}) AnimInsertStepNext({func = AnimVisualGear, args = {GetGearPosition(natives[denseNum]), vgtExplosion, 0, true}}) AnimInsertStepNext({func = AnimSay, args = {natives[wiseNum], "Here, let me help you!", SAY_SAY, 3000}}) if nativeDead[chiefNum] == true then AnimInsertStepNext({func = AnimSay, args = {natives[princessNum], "You killed my father, you monster!", SAY_SAY, 5000}}) end AnimInsertStepNext({func = AnimSay, args = {natives[denseNum], "Look, I had no choice!", SAY_SAY, 3000}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "You have been giving us out to the enemy, haven't you!", SAY_SAY, 7000}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "You're a pathetic liar!", SAY_SAY, 3000}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "Interesting! Last time you said you killed a cannibal!", SAY_SAY, 7000}}) AnimInsertStepNext({func = AnimSay, args = {natives[denseNum], "I told you, I just found them.", SAY_SAY, 4500}}) AnimInsertStepNext({func = AnimCustomFunction, args = {natives[denseNum], EmitDenseClouds, {"Left"}}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "Where did you get the weapons in the forest, Dense Cloud?", SAY_SAY, 8000}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "Not now, Fiery Water!", SAY_SAY, 3000}}) else spyHog = natives[waterNum] AnimInsertStepNext({func = AnimSay, args = {natives[wiseNum], "What shall we do with the traitor?", SAY_SAY, 5000}}) AnimInsertStepNext({func = SetHealth, swh = false, args = {natives[waterNum], 26}}) AnimInsertStepNext({func = AnimVisualGear, args = {nativePos[denseNum][1] + 50, nativePos[denseNum][2], vgtExplosion, 0, true}}) AnimInsertStepNext({func = AnimSay, args = {natives[princessNum], "I can't believe what I'm hearing!", SAY_SAY, 5500}}) AnimInsertStepNext({func = AnimSay, args = {natives[waterNum], "You know what? I don't even regret anything!", SAY_SAY, 7000}}) AnimInsertStepNext({func = AnimSay, args = {natives[princessNum], "In fact, you are the only one that's been acting strangely.", SAY_SAY, 8000}}) AnimInsertStepNext({func = AnimSay, args = {natives[waterNum], "Are you accusing me of something?", SAY_SAY, 3500}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "Seems like every time you take a \"walk\", the enemy find us!", SAY_SAY, 8000}}) AnimInsertStepNext({func = AnimSay, args = {natives[waterNum], "You know...taking a stroll.", SAY_SAY, 3500}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "Where have you been?!", SAY_SAY, 3000}}) end if nativeRevived[waterNum] == true then AnimInsertStepNext({func = AnimSay, args = {natives[waterNum], "You won't believe what happened to me!", SAY_SAY, 5500}}) end AnimInsertStepNext({func = AnimSay, args = {natives[waterNum], "Hey, guys!", SAY_SAY, 2000}}) AnimInsertStepNext({func = AnimMove, args = {natives[waterNum], "Left", nativePos[denseNum][1] + 50, nativePos[denseNum][2]}}) AnimInsertStepNext({func = AnimJump, args = {natives[waterNum], "back"}}) AnimInsertStepNext({func = AnimTurn, args = {natives[waterNum], "Right"}}) AnimInsertStepNext({func = AnimMove, args = {natives[waterNum], "Left", 1228, 412}}) AnimInsertStepNext({func = AnimJump, args = {natives[waterNum], "long"}}) AnimInsertStepNext({func = AnimJump, args = {natives[waterNum], "long"}}) AnimInsertStepNext({func = AnimJump, args = {natives[waterNum], "long"}}) AnimInsertStepNext({func = AnimTurn, args = {natives[waterNum], "Left"}}) AnimInsertStepNext({func = AnimSay, args = {natives[wiseNum], "There must be a spy among us!", SAY_SAY, 4000}}) AnimInsertStepNext({func = AnimSay, args = {natives[princessNum], "We made sure noone followed us!", SAY_SAY, 4000}}) AnimInsertStepNext({func = AnimSay, args = {natives[leaksNum], "What? Here? How did they find us?!", SAY_SAY, 5000}}) end function AnimationSetup() table.insert(startAnim, {func = AnimWait, args = {natives[leaksNum], 3000}}) table.insert(startAnim, {func = AnimCustomFunction, swh = false, args = {natives[leaksNum], SaySafe, {}}}) if needRevival == true then table.insert(startAnim, {func = AnimCustomFunction, swh = false, args = {cyborg, ReviveNatives, {}}}) table.insert(startAnim, {func = AnimCustomFunction, swh = false, args = {natives[leaksNum], WonderAlive, {}}}) table.insert(startAnim, {func = AnimCustomFunction, swh = false, args = {cyborg, ExplainAlive, {}}}) end table.insert(startAnim, {func = AnimCustomFunction, swh = false, args = {natives[leaksNum], RestoreWave, {1}}}) table.insert(startAnim, {func = AnimOutOfNowhere, args = {cannibals[1], unpack(cannibalPos[1])}}) table.insert(startAnim, {func = AnimOutOfNowhere, args = {cannibals[2], unpack(cannibalPos[2])}}) table.insert(startAnim, {func = AnimOutOfNowhere, args = {cannibals[3], unpack(cannibalPos[3])}}) table.insert(startAnim, {func = AnimWait, args = {natives[leaksNum], 1000}}) table.insert(startAnim, {func = AnimCustomFunction, swh = false, args = {natives[leaksNum], SpyDebate, {}}}) AddSkipFunction(startAnim, SkipStartAnim, {}) end function SetupWave2Anim() for i = 7, 1, -1 do if nativeDead[i] ~= true then speakerHog = natives[i] end end table.insert(wave2Anim, {func = AnimOutOfNowhere, args = {cannibals[4], unpack(cannibalPos[4])}}) table.insert(wave2Anim, {func = AnimOutOfNowhere, args = {cannibals[5], unpack(cannibalPos[5])}}) table.insert(wave2Anim, {func = AnimOutOfNowhere, args = {cannibals[6], unpack(cannibalPos[6])}}) table.insert(wave2Anim, {func = AnimSay, args = {speakerHog, "Look out! There's more of them!", SAY_SHOUT, 5000}}) AddSkipFunction(wave2Anim, SkipWave2Anim, {}) end function SetupWave2DeadAnim() for i = 7, 1, -1 do if nativeDead[i] ~= true then deployedHog = natives[i] end end if nativeDead[wiseNum] ~= true and band(GetState(natives[wiseNum]), gstDrowning) == 0 then if nativesNum > 1 then table.insert(wave2DeadAnim, {func = AnimWait, args = {natives[wiseNum], 1500}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "What a strange feeling!", SAY_THINK, 3000}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "I need to warn the others.", SAY_THINK, 3000}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "If only I had a way...", SAY_THINK, 3000}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "Oh, silly me! I forgot that I'm the shaman.", SAY_THINK, 6000}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {natives[wiseNum], TeleportNatives, {}}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {natives[wiseNum], TurnNatives, {natives[wiseNum]}}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {natives[wiseNum], CondNeedToTurn, {natives[wiseNum], deployedHog}}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "I sense another wave of cannibals heading our way!", SAY_SAY, 6500}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "We need to prevent their arrival!", SAY_SAY, 4500}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "Go, quick!", SAY_SAY, 2500}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {natives[wiseNum], DeployHog, {}}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {natives[wiseNum], RestoreCyborg, {}}}) table.insert(wave2DeadAnim, {func = AnimOutOfNowhere, swh = false, args = {cyborg, cyborgPos2[1], cyborgPos2[2]}}) table.insert(wave2DeadAnim, {func = AnimTurn, args = {cyborg, "Left"}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {cyborg, IsolateNatives, {}}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {cyborg, PutCGI, {}}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {cyborg, "I want to see how it handles this!", SAY_SAY, 6000}}) table.insert(wave2DeadAnim, {func = AnimSwitchHog, args = {deployedHog}}) table.insert(wave2DeadAnim, {func = AnimDisappear, args = {cyborg, 0, 0}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {cyborg, DeployHog, {}}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, swh = false, args = {cyborg, HideCyborg, {}}}) else table.insert(wave2DeadAnim, {func = AnimWait, args = {natives[wiseNum], 1500}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "What a strange feeling!", SAY_THINK, 3000}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "I sense another wave of cannibals heading my way!", SAY_THINK, 6500}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "I need to prevent their arrival!", SAY_THINK, 4500}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "If only I had a way...", SAY_THINK, 3000}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {natives[wiseNum], "Oh, silly me! I forgot that I'm the shaman.", SAY_THINK, 6000}}) end else table.insert(wave2DeadAnim, {func = AnimWait, args = {cyborg, 1500}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, swh = false, args = {cyborg, RestoreCyborg, {}}}) table.insert(wave2DeadAnim, {func = AnimOutOfNowhere, args = {cyborg, cyborgPos2[1], cyborgPos2[2]}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {cyborg, TeleportNatives, {}}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {cyborg, TurnNatives, {cyborg}}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {cyborg, "Oh, my! This is even more entertaining than I've expected!", SAY_SAY, 7500}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {cyborg, "You might want to find a way to instantly kill arriving cannibals!", SAY_SAY, 8000}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {cyborg, "I believe there's more of them.", SAY_SAY, 4000}}) if nativesNum > 1 then table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {natives[wiseNum], RestoreCyborg, {}}}) table.insert(wave2DeadAnim, {func = AnimOutOfNowhere, swh = false, args = {cyborg, cyborgPos2[1], cyborgPos2[2]}}) table.insert(wave2DeadAnim, {func = AnimTurn, args = {cyborg, "Left"}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {cyborg, IsolateNatives, {}}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {cyborg, PutCGI, {}}}) table.insert(wave2DeadAnim, {func = AnimSay, args = {cyborg, "I want to see how it handles this!", SAY_SAY, 6000}}) end table.insert(wave2DeadAnim, {func = AnimSwitchHog, args = {deployedHog}}) table.insert(wave2DeadAnim, {func = AnimDisappear, swh = false, args = {cyborg, 0, 0}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, args = {deployedHog, DeployHog, {}}}) table.insert(wave2DeadAnim, {func = AnimCustomFunction, swh = false, args = {cyborg, HideCyborg, {}}}) end AddSkipFunction(wave2DeadAnim, SkipWave2DeadAnim, {}) end function IsolateNatives() PlaceGirder(710, 299, 6) PlaceGirder(690, 299, 6) PlaceGirder(761, 209, 4) PlaceGirder(921, 209, 4) PlaceGirder(1081, 209, 4) PlaceGirder(761, 189, 4) PlaceGirder(921, 189, 4) PlaceGirder(1081, 189, 4) PlaceGirder(761, 169, 4) PlaceGirder(921, 169, 4) PlaceGirder(1081, 169, 4) PlaceGirder(761, 149, 4) PlaceGirder(921, 149, 4) PlaceGirder(1081, 149, 4) PlaceGirder(761, 129, 4) PlaceGirder(921, 129, 4) PlaceGirder(1081, 129, 4) PlaceGirder(1120, 261, 2) PlaceGirder(1140, 261, 2) PlaceGirder(1160, 261, 2) AddAmmo(deployedHog, amDEagle, 0) AddAmmo(deployedHog, amFirePunch, 0) end function PutCGI() AddVisualGear(710, 299, vgtExplosion, 0, true) AddVisualGear(690, 299, vgtExplosion, 0, true) AddVisualGear(761, 209, vgtExplosion, 0, true) AddVisualGear(921, 209, vgtExplosion, 0, true) AddVisualGear(1081, 209, vgtExplosion, 0, true) AddVisualGear(761, 189, vgtExplosion, 0, true) AddVisualGear(921, 189, vgtExplosion, 0, true) AddVisualGear(1081, 189, vgtExplosion, 0, true) AddVisualGear(761, 169, vgtExplosion, 0, true) AddVisualGear(921, 169, vgtExplosion, 0, true) AddVisualGear(1081, 169, vgtExplosion, 0, true) AddVisualGear(761, 149, vgtExplosion, 0, true) AddVisualGear(921, 149, vgtExplosion, 0, true) AddVisualGear(1081, 149, vgtExplosion, 0, true) AddVisualGear(761, 129, vgtExplosion, 0, true) AddVisualGear(921, 129, vgtExplosion, 0, true) AddVisualGear(1081, 129, vgtExplosion, 0, true) AddVisualGear(1120, 261, vgtExplosion, 0, true) AddVisualGear(1140, 261, vgtExplosion, 0, true) AddVisualGear(1160, 261, vgtExplosion, 0, true) end function TeleportNatives() nativePos[waterNum] = {1100, 288} for i = 1, 7 do if nativeDead[i] ~= true then AnimTeleportGear(natives[i], unpack(nativePos[i])) end end end function TurnNatives(hog) for i = 1, 7 do if nativeDead[i] == false then if GetX(natives[i]) < GetX(hog) then AnimTurn(natives[i], "Right") else AnimTurn(natives[i], "Left") end end end end function DeployHog() AnimSwitchHog(deployedHog) AnimTeleportGear(deployedHog, unpack(deployedPos)) if deployedHog ~= natives[wiseNum] then AnimSay(deployedHog, "Why me?!", SAY_THINK, 2000) end end function SetupAfterChoiceAnim() for i = 7, 1, -1 do if nativeDead[i] ~= true then if natives[i] ~= spyHog then speakerHog = natives[i] end end end if choice == choiceEliminate then table.insert(afterChoiceAnim, {func = AnimWait, args = {speakerHog, 1500}}) table.insert(afterChoiceAnim, {func = AnimSay, args = {speakerHog, "He won't be selling us out anymore!", SAY_SAY, 6000}}) if nativeDead[princessNum] ~= true and m4ChiefDead == 1 then table.insert(afterChoiceAnim, {func = AnimSay, args = {natives[princessNum], "That's for my father!", SAY_SAY, 3500}}) end table.insert(afterChoiceAnim, {func = AnimSay, args = {speakerHog, "Let's show those cannibals what we're made of!", SAY_SAY, 7000}}) else table.insert(afterChoiceAnim, {func = AnimCustomFunction, swh = false, args = {natives[leaksNum], CondNeedToTurn, {speakerHog, spyHog}}}) table.insert(afterChoiceAnim, {func = AnimSay, args = {speakerHog, "We'll spare your life for now!", SAY_SAY, 4500}}) table.insert(afterChoiceAnim, {func = AnimSay, args = {spyHog, "May the spirits aid you in all your quests!", SAY_SAY, 7000}}) table.insert(afterChoiceAnim, {func = AnimSay, args = {speakerHog, "I just don't want to sink to your level.", SAY_SAY, 6000}}) table.insert(afterChoiceAnim, {func = AnimSay, args = {speakerHog, "Let's show those cannibals what we're made of!", SAY_SAY, 7000}}) end table.insert(afterChoiceAnim, {func = AnimSay, args = {natives[8], "Let us help, too!", SAY_SAY, 3000}}) table.insert(afterChoiceAnim, {func = AnimTurn, args = {speakerHog, "Left", SAY_SAY, 7000}}) table.insert(afterChoiceAnim, {func = AnimSay, args = {speakerHog, "No. You and the rest of the tribe are safer there!", SAY_SAY, 7000}}) AddSkipFunction(afterChoiceAnim, SkipAfterChoiceAnim, {}) end function SetupHogDeadAnim(gear) hogDeadAnim = {} if nativesNum == 0 then return end local hogDeadStrings = {loc("They killed " .. gear .."! You bastards!"), loc(gear .. "! Why?!"), loc("That was just mean!"), loc("Oh no, not " .. gear .. "!"), loc("Why " .. gear .. "? Why?"), loc("What has " .. gear .. " ever done to you?!")} table.insert(hogDeadAnim, {func = AnimSay, args = {CurrentHedgehog, hogDeadStrings[7 - nativesNum], SAY_SHOUT, 4000}}) end function AfterHogDeadAnim() freshDead = nil TurnTimeLeft = TurnTime end --------------------------Anim skip functions-------------------------- function AfterAfterChoiceAnim() stage = 0 AddEvent(CheckWaveDead, {1}, DoWaveDead, {1}, 0) AddAmmo(speakerHog, amSwitch, 100) SetGearMessage(speakerHog, 0) SetState(speakerHog, 0) TurnTimeLeft = -1 ShowMission("Backstab", "The food bites back", "Defeat the cannibals", 1, 4000) SpawnCrates() end function SkipAfterChoiceAnim() SetGearMessage(CurrentHedgehog, 0) AnimSwitchHog(speakerHog) end function AfterWave2Anim() AddEvent(CheckWaveDead, {2}, DoWaveDead, {2}, 0) SetGearMessage(CurrentHedgehog, 0) SetState(CurrentHedgehog, 0) SpawnCrates() TurnTimeLeft = TurnTime end function SkipWave2DeadAnim() TeleportNatives() DeployHog() HideCyborg() end function SpawnPlatformCrates() SpawnAmmoCrate(2494, 1262, amMine) SpawnAmmoCrate(2574, 1279, amSMine) SpawnAmmoCrate(2575, 1267, amMine) SpawnAmmoCrate(2617, 1259, amSMine) SpawnUtilityCrate(2579, 1254, amMine) SpawnUtilityCrate(2478, 1243, amMine) end function AfterWave2DeadAnim() TurnsLeft = 13 stage = platformStage SpawnPlatformCrates() AddEvent(CheckTurnsOver, {}, DoTurnsOver, {3}, 0) AddEvent(CheckWaveDead, {3}, DoWaveDead, {3}, 0) AddEvent(CheckDeployedDead, {}, DoDeployedDead, {}, 0) TurnTimeLeft = 0 ShowMission("Backstab", "Drills", "You have 12 turns until the next wave arrives.|Make sure the arriving cannibals are greeted appropriately!|If the hog dies, the cause is lost.|Hint: you might want to use some mines...", 1, 12000) end function DoTurnsOver() stage = wave3Stage RestoreWave(3) end function SkipWave2Anim() AnimSwitchHog(speakerHog) end function SkipStartAnim() SetGearPosition(natives[waterNum], nativePos[denseNum][1] + 50, nativePos[denseNum][2]) RestoreWave(1) ReviveNatives() SetGearMessage(CurrentHedgehog, 0) SetState(CurrentHedgehog, 0) if m2Choice == choiceAccepted then spyHog = natives[denseNum] else spyHog = natives[waterNum] end SetHealth(spyHog, 26) end function AfterStartAnim() AnimSwitchHog(natives[leaksNum]) TurnTimeLeft = -1 stage = spyKillStage AddEvent(CheckChoice, {}, DoChoice, {}, 0) AddEvent(CheckKilledOther, {}, DoKilledOther, {}, 0) AddEvent(CheckChoiceRefuse, {}, DoChoiceRefuse, {}, 0) ShowMission("Backstab", "Judas", "Kill the traitor...or spare his life!|Kill him or press [Precise]!", 1, 8000) ---------------------- SetHealth(natives[leaksNum], 1) end -----------------------------Events------------------------------------ function CheckTurnsOver() return TurnsLeft == 0 end function CheckDeployedDead() return deployedDead end function DoDeployedDead() ShowMission("Backstab", "Brutus", "You have failed to save the tribe!", 0, 6000) ParseCommand("teamgone " .. loc("Natives")) ParseCommand("teamgone " .. loc("Tribe")) TurnTimeLeft = 0 end function CheckChoice() return choice ~= 0 and tmpVar == 0 end function CheckDeaths() for i = 1, 7 do if natives[i] ~= spyHog and band(GetState(natives[i]), gstAttacked) ~= 0 then return true end end return false end function DoChoice() RemoveEventFunc(CheckChoiceRefuse) SetupAfterChoiceAnim() AddAnim(afterChoiceAnim) AddFunction({func = AfterAfterChoiceAnim, args = {}}) end function CheckChoiceRefuse() return highJumped == true and StoppedGear(CurrentHedgehog) end function DoChoiceRefuse() choice = choiceSpare end function CheckKilledOther() if stage ~= spyKillStage then return false end return (nativesNum < startNativesNum and choice ~= choiceEliminate) or (nativesNum < startNativesNum - 1 and choice == choiceEliminate) end function DoKilledOther() ShowMission("Backstab", "Brutus", "You have killed an innocent hedgehog!", 0, 6000) ParseCommand("teamgone " .. loc("Natives")) ParseCommand("teamgone " .. loc("Tribe")) TurnTimeLeft = 0 end function CheckWaveDead(index) for i = (index - 1) * 3 + 1, index * 3 do if cannibalDead[i] ~= true or CurrentHedgehog == cannibals[i] then return false end end return true end function DoWaveDead(index) TurnTimeLeft = 0 if index == 1 then RestoreWave(2) SetupWave2Anim() AddAnim(wave2Anim) AddFunction({func = AfterWave2Anim, args = {}}) elseif index == 2 then SetupWave2DeadAnim() AddAnim(wave2DeadAnim) AddFunction({func = AfterWave2DeadAnim, args = {}}) elseif index == 3 then HideNatives() SetupWave3DeadAnim() AddAnim(wave3DeadAnim) AddFunction({func = AfterWave3DeadAnim, args = {}}) end end function HideNatives() for i = 1, 9 do if nativeDead[i] ~= true and natives[i] ~= deployedHog then if nativeHidden[i] ~= true then HideHog(natives[i]) nativeHidden[i] = true end end end end function SetupWave3DeadAnim() table.insert(wave3DeadAnim, {func = AnimTurn, args = {deployedHog, "Left"}}) table.insert(wave3DeadAnim, {func = AnimSay, args = {deployedHog, "That ought to show them!", SAY_SAY, 4000}}) table.insert(wave3DeadAnim, {func = AnimSay, args = {deployedHog, "Guys, do you think there's more of them?", SAY_SHOUT, 7000}}) table.insert(wave3DeadAnim, {func = AnimVisualGear, args = {deployedHog, unpack(nativePos[wiseNum]), vgtEvilTrace, 0, true}}) table.insert(wave3DeadAnim, {func = AnimWait, args = {deployedHog, 1000}}) table.insert(wave3DeadAnim, {func = AnimSay, args = {deployedHog, "Where are they?!", SAY_THINK, 3000}}) table.insert(wave3DeadAnim, {func = AnimCustomFunction, args = {deployedHog, RestoreCyborg, {}}}) table.insert(wave3DeadAnim, {func = AnimOutOfNowhere, args = {cyborg, 4040, 782}}) table.insert(wave3DeadAnim, {func = AnimSay, args = {cyborg, "These primitive people are so funny!", SAY_THINK, 6500}}) table.insert(wave3DeadAnim, {func = AnimMove, args = {cyborg, "Right", 4060, 0}}) table.insert(wave3DeadAnim, {func = AnimCustomFunction, args = {deployedHog, HideCyborg, {}}}) table.insert(wave3DeadAnim, {func = AnimSay, args = {deployedHog, "I need to find the others!", SAY_THINK, 4500}}) table.insert(wave3DeadAnim, {func = AnimSay, args = {deployedHog, "I have to follow that alien.", SAY_THINK, 4500}}) end function SkipWave3DeadAnim() AnimSwitchHog(deployedHog) end function AfterWave3DeadAnim() if nativeDead[leaksNum] == true then SaveCampaignVar("M5LeaksDead", "1") else SaveCampaignVar("M5LeaksDead", "0") end if nativeDead[denseNum] == true then SaveCampaignVar("M5DenseDead", "1") else SaveCampaignVar("M5DenseDead", "0") end if nativeDead[waterNum] == true then SaveCampaignVar("M5WaterDead", "1") else SaveCampaignVar("M5WaterDead", "0") end if nativeDead[buffaloNum] == true then SaveCampaignVar("M5BuffaloDead", "1") else SaveCampaignVar("M5BuffaloDead", "0") end if nativeDead[princessNum] == true then SaveCampaignVar("M5PrincessDead", "1") else SaveCampaignVar("M5PrincessDead", "0") end if nativeDead[wiseNum] == true then SaveCampaignVar("M5WiseDead", "1") else SaveCampaignVar("M5WiseDead", "0") end if nativeDead[chiefNum] == true then SaveCampaignVar("M5ChiefDead", "1") else SaveCampaignVar("M5ChiefDead", "0") end SaveCampaignVar("M5Choice", "" .. choice) SaveCampaignVar("Progress", "5") for i = 1, 7 do if natives[i] == deployedHog then SaveCampaignVar("M5DeployedNum", "" .. i) end end ParseCommand("teamgone " .. loc("Tribe")) ParseCommand("teamgone " .. loc("Assault Team")) ParseCommand("teamgone " .. loc("Reinforcements")) ParseCommand("teamgone " .. loc("011101001")) TurnTimeLeft = 0 end -----------------------------Misc-------------------------------------- function SpawnCrates() SpawnAmmoCrate(0, 0, amDrill) SpawnAmmoCrate(0, 0, amGrenade) SpawnAmmoCrate(0, 0, amBazooka) SpawnAmmoCrate(0, 0, amDynamite) SpawnAmmoCrate(0, 0, amGrenade) SpawnAmmoCrate(0, 0, amMine) SpawnAmmoCrate(0, 0, amShotgun) SpawnAmmoCrate(0, 0, amFlamethrower) SpawnAmmoCrate(0, 0, amMolotov) SpawnAmmoCrate(0, 0, amSMine) SpawnAmmoCrate(0, 0, amMortar) SpawnUtilityCrate(0, 0, amRope) SpawnUtilityCrate(0, 0, amRope) SpawnUtilityCrate(0, 0, amParachute) SpawnUtilityCrate(0, 0, amParachute) SetHealth(SpawnHealthCrate(0, 0), 25) SetHealth(SpawnHealthCrate(0, 0), 25) SetHealth(SpawnHealthCrate(0, 0), 25) SetHealth(SpawnHealthCrate(0, 0), 25) SetHealth(SpawnHealthCrate(0, 0), 25) SetHealth(SpawnHealthCrate(0, 0), 25) end function RestoreWave(index) for i = (index - 1) * 3 + 1, index * 3 do if cannibalHidden[i] == true then RestoreHog(cannibals[i]) FollowGear(cannibals[i]) cannibalHidden[i] = false end end end function GetVariables() m2DenseDead = tonumber(GetCampaignVar("M2DenseDead")) m2Choice = tonumber(GetCampaignVar("M2Choice")) m4DenseDead = tonumber(GetCampaignVar("M4DenseDead")) m4LeaksDead = tonumber(GetCampaignVar("M4LeaksDead")) m4ChiefDead = tonumber(GetCampaignVar("M4ChiefDead")) m4WaterDead = tonumber(GetCampaignVar("M4WaterDead")) m4BuffaloDead = tonumber(GetCampaignVar("M4BuffaloDead")) end function HideCyborg() if cyborgHidden == false then HideHog(cyborg) cyborgHidden = true end end function RestoreCyborg() if cyborgHidden == true then RestoreHog(cyborg) cyborgHidden = false end end function SetupPlace() startElimination = 1 HideHog(cyborg) cyborgHidden = true for i = 1, 9 do HideHog(cannibals[i]) cannibalHidden[i] = true end if m4LeaksDead == 1 then HideHog(natives[leaksNum]) nativeHidden[leaksNum] = true needRevival = true end if m4DenseDead == 1 then if m2Choice ~= choiceAccepted then DeleteGear(natives[denseNum]) else HideHog(natives[denseNum]) nativeHidden[denseNum] = true needRevival = true end end if m4WaterDead == 1 then HideHog(natives[waterNum]) nativeHidden[waterNum] = true needRevival = true end if m4ChiefDead == 1 then DeleteGear(natives[chiefNum]) SetGearPosition(natives[princessNum], unpack(nativePos[buffaloNum])) nativePos[princessNum] = nativePos[buffaloNum] end if m4BuffaloDead == 1 then DeleteGear(natives[buffaloNum]) end startElimination = 0 PlaceGirder(3568, 1461, 1) PlaceGirder(440, 523, 5) PlaceGirder(350, 441, 1) PlaceGirder(405, 553, 5) PlaceGirder(316, 468, 1) PlaceGirder(1319, 168, 0) startNativesNum = nativesNum end function SetupEvents() end function SetupAmmo() AddAmmo(natives[princessNum], amSwitch, 0) end function AddHogs() AddTeam(loc("Natives"), 29439, "Bone", "Island", "HillBilly", "cm_birdy") for i = 1, 7 do natives[i] = AddHog(nativeNames[i], 0, 100, nativeHats[i]) end nativesNum = 7 AddTeam(loc("Tribe"), 29438, "Bone", "Island", "HillBilly", "cm_birdy") for i = 8, 9 do natives[i] = AddHog(nativeNames[i], 0, 100, nativeHats[i]) end AddTeam(loc("Assault Team"), 14483456, "Skull", "Island", "Pirate", "cm_vampire") for i = 1, 6 do cannibals[i] = AddHog(cannibalNames[i], 1, 50, "vampirichog") end AddTeam(loc("Reinforcements"), 14483456, "Skull", "Island", "Pirate", "cm_vampire") for i = 7, 9 do cannibals[i] = AddHog(cannibalNames[i], 1, 50, "vampirichog") end AddTeam(loc("011101001"), 14483456, "ring", "UFO", "Robot", "cm_star") cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1") for i = 1, 9 do SetGearPosition(natives[i], unpack(nativePos[i])) AnimTurn(natives[i], nativeDir[i]) end SetGearPosition(cyborg, 0, 0) for i = 1, 9 do SetGearPosition(cannibals[i], unpack(cannibalPos[i])) AnimTurn(cannibals[i], cannibalDir[i]) end end function CondNeedToTurn(hog1, hog2) xl, xd = GetX(hog1), GetX(hog2) if xl > xd then AnimInsertStepNext({func = AnimTurn, args = {hog1, "Left"}}) AnimInsertStepNext({func = AnimTurn, args = {hog2, "Right"}}) elseif xl < xd then AnimInsertStepNext({func = AnimTurn, args = {hog2, "Left"}}) AnimInsertStepNext({func = AnimTurn, args = {hog1, "Right"}}) end end -----------------------------Main Functions---------------------------- function onGameInit() Seed = 2 GameFlags = gfSolidLand TurnTime = 60000 CaseFreq = 0 MinesNum = 6 MinesTime = 3000 Explosives = 6 Delay = 10 Map = "Cave" Theme = "Nature" SuddenDeathTurns = 3000 AddHogs() AnimInit() end function onGameStart() GetVariables() SetupAmmo() SetupPlace() AnimationSetup() SetupEvents() AddAnim(startAnim) AddFunction({func = AfterStartAnim, args = {}}) end function onGameTick() AnimUnWait() if ShowAnimation() == false then return end ExecuteAfterAnimations() CheckEvents() end function onGearDelete(gear) for i = 1, 7 do if gear == natives[i] then nativeDead[i] = true nativesNum = nativesNum - 1 if startElimination == 0 then freshDead = nativeNames[i] end end end for i = 1, 9 do if gear == cannibals[i] then cannibalDead[i] = true end end if gear == spyHog and stage == spyKillStage then freshDead = nil choice = choiceEliminate tmpVar = 1 end end function onGearAdd(gear) end function onAmmoStoreInit() SetAmmo(amDEagle, 9, 0, 0, 0) SetAmmo(amSniperRifle, 4, 0, 0, 0) SetAmmo(amFirePunch, 9, 0, 0, 0) SetAmmo(amWhip, 9, 0, 0, 0) SetAmmo(amBaseballBat, 9, 0, 0, 0) SetAmmo(amHammer, 9, 0, 0, 0) SetAmmo(amLandGun, 9, 0, 0, 0) SetAmmo(amSnowball, 8, 0, 0, 0) SetAmmo(amGirder, 4, 0, 0, 2) SetAmmo(amParachute, 4, 0, 0, 2) SetAmmo(amSwitch, 8, 0, 0, 2) SetAmmo(amSkip, 8, 0, 0, 0) SetAmmo(amRope, 5, 0, 0, 3) SetAmmo(amBlowTorch, 3, 0, 0, 3) SetAmmo(amPickHammer, 0, 0, 0, 3) SetAmmo(amLowGravity, 0, 0, 0, 2) SetAmmo(amDynamite, 0, 0, 0, 3) SetAmmo(amBazooka, 4, 0, 0, 4) SetAmmo(amGrenade, 4, 0, 0, 4) SetAmmo(amMine, 2, 0, 0, 2) SetAmmo(amSMine, 2, 0, 0, 2) SetAmmo(amMolotov, 2, 0, 0, 3) SetAmmo(amFlamethrower, 2, 0, 0, 3) SetAmmo(amShotgun, 4, 0, 0, 4) SetAmmo(amTeleport, 0, 0, 0, 2) SetAmmo(amDrill, 0, 0, 0, 4) SetAmmo(amMortar, 0, 0, 0, 4) end j = 0 function onNewTurn() tmpVar = 0 if AnimInProgress() then TurnTimeLeft = -1 return end if GetHogTeamName(CurrentHedgehog) == loc("Tribe") then TurnTimeLeft = 0 return end TurnsLeft = TurnsLeft - 1 if stage == spyKillStage then if CurrentHedgehog == spyHog or GetHogTeamName(CurrentHedgehog) ~= loc("Natives") then TurnTimeLeft = 0 else SetGearMessage(CurrentHedgehog, 0) TurnTimeLeft = -1 end else if freshDead ~= nil and GetHogTeamName(CurrentHedgehog) == loc("Natives") then SetupHogDeadAnim(freshDead) AddAnim(hogDeadAnim) AddFunction({func = AfterHogDeadAnim, args = {}}) end end end function onGearDamage(gear, damage) end function onPrecise() if GameTime > 2500 then SetAnimSkip(true) end if stage == spyKillStage then highJumped = true end end