diff -r 48cd0e70b163 -r d32d573aeb64 share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/enemy.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/enemy.lua Sat Aug 18 11:34:49 2012 +0300 @@ -0,0 +1,669 @@ +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 +girlNum = 6 +wiseNum = 7 +ramonNum = 8 +spikyNum = 9 + +denseScene = 1 +princessScene = 2 +waterScene = 3 +cyborgScene = 4 + +nativeNames = {loc("Leaks A Lot"), loc("Dense Cloud"), loc("Fiery Water"), + loc("Raging Buffalo"), loc("Righteous Beard"), loc("Fell From Grace"), + loc("Wise Oak"), loc("Ramon"), loc("Spiky Cheese") + } + +nativeHats = {"Rambo", "RobinHood", "pirate_jack", "zoo_Bunny", "IndianChief", + "tiara", "AkuAku", "rasta", "hair_yellow"} + +nativePos = {{1259, 120}, {2378, 796}, {424, 1299}, {3322, 260}, {1022, 1550}} +nativeDir = {"Right", "Left", "Right", "Left", "Right"} + +cannibalNames = {loc("Honest Lee"), loc("Vegan Jack"), loc("Sirius Lee"), + loc("Brutal Lily")} +cannibalPos = {{162, 266}, {2159, 1517}, {3311, 1621}, {1180, 1560}} +cannibalDir = {"Right", "Left", "Left", "Right"} +cannibalsNum = 4 + +playersDir = {"Right", "Left", "Right", "Left", "Right", "Right", "Left", "Left", "Right"} +playersAntiDir = {"Left", "Right", "Left", "Right", "Left", "Left", "Right", "Right", "Left"} + +cyborgNames = {loc("Smith 0.97"), loc("Smith 0.98"), loc("Smith 0.99a"), + loc("Smith 0.99b"), loc("Smith 0.99f"), loc("Smith 1.0")} +cyborgPos = {{2162, 20}, {2458, 564}, {542, 1133}, {3334, 1427}} +cyborgDir = "Right" +cyborgsNum = 6 +cyborgsPos = {{1490, 330}, {1737, 1005}, {2972, 922}, {1341, 1571}, + {751, 543}, {3889, 907}} +cyborgsDir = {"Right", "Right", "Left", "Right", "Right", "Left"} + +leaderPos = {3474, 151} +leaderDir = "Left" + +-----------------------------Variables--------------------------------- +natives = {} +origNatives = {} + +cyborgs = {} +cyborg = nil + +cannibals = {} +players = {} +leader = nil + +gearDead = {} +hedgeHidden = {} + +startAnim = {} +finalAnim = {} +-----------------------------Animations-------------------------------- +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 + +function CondNeedToTurn2(hog1, hog2) + xl, xd = GetX(hog1), GetX(hog2) + if xl > xd then + AnimTurn(hog1, "Left") + AnimTurn(hog2, "Right") + elseif xl < xd then + AnimTurn(hog2, "Left") + AnimTurn(hog1, "Right") + end +end + +function EmitDenseClouds(dir) + local dif + if dir == "Left" then + dif = 10 + else + dif = -10 + end + if dir == nil then + dx, dy = GetGearVelocity(dense) + if dx < 0 then + dif = 10 + else + dif = -10 + end + end + AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false}) + AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false}) + AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false}) + AnimInsertStepNext({func = AnimWait, args = {dense, 800}}) + AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false}) + AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false}) + AnimInsertStepNext({func = AnimWait, args = {dense, 800}}) + AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false}) +end + +function RestoreNatives(cgi) + for i = 1, playersNum do + RestoreHedge(players[i]) + AnimOutOfNowhere(players[i], GetGearPosition(players[i])) + end +end + +function AnimationSetup() + SetupCyborgStartAnim() + SetupPeopleStartAnim() + SetupEnemyStartAnim() + AddSkipFunction(startAnim, SkipStartAnim, {}) +end + +function SetupCyborgStartAnim() + table.insert(startAnim, {func = AnimWait, args = {cyborg, 3000}}) + table.insert(startAnim, {func = AnimTurn, args = {cyborg, "Left"}}) + table.insert(startAnim, {func = AnimWait, args = {cyborg, 800}}) + table.insert(startAnim, {func = AnimTurn, args = {cyborg, "Right"}}) + table.insert(startAnim, {func = AnimWait, args = {cyborg, 800}}) + table.insert(startAnim, {func = AnimTurn, args = {cyborg, "Left"}}) + table.insert(startAnim, {func = AnimWait, args = {cyborg, 800}}) + table.insert(startAnim, {func = AnimTeleportGear, args = {cyborg, unpack(cyborgPos[2])}}) + table.insert(startAnim, {func = AnimWait, args = {cyborg, 800}}) + table.insert(startAnim, {func = AnimTurn, args = {cyborg, "Right"}}) + table.insert(startAnim, {func = AnimWait, args = {cyborg, 800}}) + table.insert(startAnim, {func = AnimTurn, args = {cyborg, "Left"}}) + table.insert(startAnim, {func = AnimWait, args = {cyborg, 800}}) + table.insert(startAnim, {func = AnimTeleportGear, args = {cyborg, unpack(cyborgPos[3])}}) + table.insert(startAnim, {func = AnimWait, args = {cyborg, 1800}}) + table.insert(startAnim, {func = AnimTeleportGear, args = {cyborg, unpack(cyborgPos[4])}}) + table.insert(startAnim, {func = AnimWait, args = {cyborg, 800}}) + table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("Everything looks OK..."), SAY_THINK, 2500}}) + table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("This will be fun!"), SAY_THINK, 2500}}) + table.insert(startAnim, {func = AnimJump, args = {cyborg, "high"}}) + table.insert(startAnim, {func = AnimCustomFunction, args = {cyborg, RestoreNatives, {true}}}) + table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("HAHA!"), SAY_SHOUT, 2000}}) + table.insert(startAnim, {func = AnimSwitchHog, args = {players[1]}}) + table.insert(startAnim, {func = AnimDisappear, swh = false, args = {cyborg, unpack(cyborgPos[4])}}) + table.insert(startAnim, {func = HideHedge, swh = false, args = {cyborg}}) +end + +function SetupPeopleStartAnim() + for i = 1, playersNum do + table.insert(startAnim, {func = AnimTurn, swh = false, args = {players[i], playersAntiDir[i]}}) + end + table.insert(startAnim, {func = AnimWait, args = {players[1], 800}}) + for i = 1, playersNum do + table.insert(startAnim, {func = AnimTurn, swh = false, args = {players[i], playersDir[i]}}) + end + table.insert(startAnim, {func = AnimWait, args = {players[1], 800}}) + table.insert(startAnim, {func = AnimSay, args = {players[1], loc("What is this place?"), SAY_SHOUT, 2500}}) + if m5LeaksDead == 1 then + table.insert(startAnim, {func = AnimSay, args = {players[1], loc("And how am I alive?!"), SAY_SAY, 3000}}) + end + table.insert(startAnim, {func = AnimCustomFunction, args = {players[1], CondNeedToTurn, {players[1], players[2]}}}) + table.insert(startAnim, {func = AnimSay, args = {players[2], loc("It must be the cyborgs again!"), SAY_SAY, 4000}}) + table.insert(startAnim, {func = AnimSay, args = {players[3], loc("Looks like the whole world is falling apart!"), SAY_SAY, 6000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("Look out! We're surrounded by cannibals!"), SAY_SHOUT, 6000}}) + table.insert(startAnim, {func = AnimCustomFunction, args = {players[4], CondNeedToTurn, {players[4], cannibals[1]}}}) + table.insert(startAnim, {func = AnimCustomFunction, args = {players[4], CondNeedToTurn, {players[1], cannibals[1]}}}) + table.insert(startAnim, {func = AnimSay, args = {players[4], loc("Cannibals?! You're the cannibals!"), SAY_SHOUT, 4000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("WHAT?! You're the ones attacking us!"), SAY_SHOUT, 5000}}) + table.insert(startAnim, {func = AnimSay, args = {players[4], loc("You have kidnapped our whole tribe!"), SAY_SHOUT, 4000}}) + table.insert(startAnim, {func = AnimSay, args = {players[1], loc("You've been assaulting us, we have been just defending ourselves!"), SAY_SHOUT, 8000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("I can't believe this!"), SAY_SHOUT, 3000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("Have we ever attacked you first?"), SAY_SHOUT, 5000}}) + table.insert(startAnim, {func = AnimSay, args = {players[4], loc("Yes!"), SAY_SHOUT, 2000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("When?"), SAY_SHOUT, 2000}}) + table.insert(startAnim, {func = AnimSay, args = {players[4], loc("Uhmm...ok no."), SAY_SHOUT, 2000}}) + table.insert(startAnim, {func = AnimSay, args = {players[1], loc("But you're cannibals. It's what you do."), SAY_SHOUT, 5000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("Again with the 'cannibals' thing!"), SAY_SHOUT, 4000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("Where do you get that?!"), SAY_SHOUT, 3000}}) + table.insert(startAnim, {func = AnimSay, args = {players[4], loc("Everyone knows this."), SAY_SHOUT, 2500}}) + table.insert(startAnim, {func = AnimSay, args = {players[1], loc("I didn't until about a month ago."), SAY_SHOUT, 4000}}) + table.insert(startAnim, {func = AnimSay, args = {players[4], loc("Hmmm...actually...I didn't either."), SAY_SHOUT, 4000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("About a month ago, a cyborg came and told us that you're the cannibals!"), SAY_SHOUT, 8000}}) + table.insert(startAnim, {func = AnimSay, args = {players[1], loc("A cy-what?"), SAY_SHOUT, 2000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("Cyborg. It's what the aliens call themselves."), SAY_SHOUT, 5000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("They told us to wear these clothes. They said that this is the newest trend."), SAY_SHOUT, 8000}}) + table.insert(startAnim, {func = AnimSay, args = {players[1], loc("They've been manipulating us all this time!"), SAY_SHOUT, 5000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("They must be trying to weaken us!"), SAY_SHOUT, 5000}}) + table.insert(startAnim, {func = AnimSay, args = {players[1], loc("We have to unite and defeat those cylergs!"), SAY_SHOUT, 5000}}) + table.insert(startAnim, {func = AnimSay, args = {cannibals[1], loc("We can't let them take over our little island!"), SAY_SHOUT, 5000}}) +end + +function RestoreCyborgs(cgi) + if cyborgsRestored == true then + return + end + for i = 1, cyborgsNum do + RestoreHedge(cyborgs[i]) + if cgi == true then + AnimOutOfNowhere(cyborgs[i], unpack(cyborgsPos[i])) + end + end + RestoreHedge(leader) + AnimOutOfNowhere(leader, unpack(leaderPos)) + cyborgsRestored = true +end + +function SetupEnemyStartAnim() + local gear + table.insert(startAnim, {func = AnimCustomFunction, args = {cannibals[1], RestoreCyborgs, {true}}}) + if m8EnemyFled == 1 then + gear = leader + else + gear = cyborgs[2] + end + table.insert(startAnim, {func = AnimCustomFunction, args = {players[1], CondNeedToTurn, {players[4], gear}}}) + table.insert(startAnim, {func = AnimCustomFunction, args = {players[1], CondNeedToTurn, {players[1], gear}}}) + table.insert(startAnim, {func = AnimSay, args = {gear, loc("You have finally figured it out!"), SAY_SHOUT, 4500}}) + table.insert(startAnim, {func = AnimSay, args = {gear, loc("You blood needers are pretty slow, you know!"), SAY_SHOUT, 5500}}) + table.insert(startAnim, {func = AnimSay, args = {players[1], loc("Why do you want to take over our island?"), SAY_SHOUT, 5500}}) + table.insert(startAnim, {func = AnimSay, args = {gear, loc("Do you have any idea how valuable grass is?"), SAY_SHOUT, 5500}}) + table.insert(startAnim, {func = AnimSay, args = {gear, loc("This island is the only place left on Earth with grass on it!"), SAY_SHOUT, 7000}}) + table.insert(startAnim, {func = AnimSay, args = {gear, loc("It's worth more than wood!"), SAY_SHOUT, 4000}}) + table.insert(startAnim, {func = AnimSay, args = {gear, loc("That makes it almost invaluable!"), SAY_SHOUT, 4500}}) + table.insert(startAnim, {func = AnimSay, args = {players[1], loc("We have nowhere else to live!"), SAY_SHOUT, 4500}}) + table.insert(startAnim, {func = AnimSay, args = {gear, loc("That's not our problem!"), SAY_SHOUT, 4500}}) + table.insert(startAnim, {func = AnimSay, args = {players[1], loc("We'll give you a problem then!"), SAY_SHOUT, 5000}}) + table.insert(startAnim, {func = AnimSwitchHog, args = {gear}}) +end + +function SetupFinalAnim() + finalAnim = { + {func = AnimGearWait, args = {cyborg, 1000}}, + {func = AnimSay, args = {cyborg, loc("Nicely done, blood needer!"), SAY_SAY, 3000}}, + {func = AnimSay, args = {cyborg, loc("You have won the game by proving true cooperative skills!"), SAY_SAY, 7000}}, + {func = AnimSay, args = {cyborg, loc("You have proven yourselves worthy!"), SAY_SAY, 4000}}, + {func = AnimSay, args = {players[1], loc("Game? Was this a game to you?!"), SAY_SAY, 4000}}, + {func = AnimSay, args = {cyborg, loc("Well, yes. This was a cyborg television show."), SAY_SAY, 5500}}, + {func = AnimSay, args = {cyborg, loc("It is called 'Hogs of Steel'."), SAY_SAY, 4000}}, + {func = AnimSay, args = {players[1], loc("Are you saying that many of us have died for your entertainment?"), SAY_SAY, 8000}}, + {func = AnimSay, args = {players[1], loc("Our tribe, our beautiful island!"), SAY_SAY, 4000}}, + {func = AnimSay, args = {players[1], loc("All gone...everything!"), SAY_SAY, 3000}}, + {func = AnimSay, args = {cyborg, loc("But the ones alive are stronger in their heart!"), SAY_SAY, 6000}}, + {func = AnimSay, args = {cyborg, loc("Just kidding, none of you have died!"), SAY_SAY, 5000}}, + {func = AnimSay, args = {cyborg, loc("I mean, none of you ceased to live."), SAY_SAY, 5000}}, + {func = AnimSay, args = {cyborg, loc("You'll see what I mean!"), SAY_SAY, 4000}}, + {func = AnimSay, args = {cyborg, loc("They are all waiting back in the village, haha."), SAY_SAY, 7000}}, + {func = AnimSay, args = {players[1], loc("You are playing with our lives here!"), SAY_SAY, 6000}}, + {func = AnimSay, args = {players[1], loc("Do you think you're some kind of god?"), SAY_SAY, 6000}}, + {func = AnimSay, args = {cyborg, loc("Interesting idea, haha!"), SAY_SAY, 2000}}, + {func = AnimSwitchHog, args = {players[1]}}, + {func = AnimWait, args = {players[1], 1}}, + {func = AnimDisappear, swh = false, args = {cyborg, unpack(cyborgPos[4])}}, + {func = HideHedge, swh = false, args = {cyborg}}, + {func = AnimSay, args = {players[1], loc("What a douche!"), SAY_SAY, 2000}}, + } +end +--------------------------Anim skip functions-------------------------- +function SkipStartAnim() + RestoreNatives() + RestoreCyborgs() + SetGearMessage(CurrentHedgehog, 0) + AnimSwitchHog(cyborgs[1]) + AnimWait(cyborg, 1) + AddFunction({func = HideHedge, args = {cyborg}}) +end + +function AfterStartAnim() + ShowMission(loc("The Enemy Of My Enemy"), loc("The Union"), loc("Defeat the cyborgs!"), 1, 0) + PutWeaponCrates() + PutHealthCrates() + TurnTimeLeft = 0 +end + +function PutHealthCrates() + for i = 1, 10 do + SpawnHealthCrate(0, 0) + end +end + +function PutWeaponCrates() + SpawnAmmoCrate(2399, 622, amNapalm, 2) + SpawnAmmoCrate(2199, -18, amBee, 2) + SpawnAmmoCrate(2088, 430, amBee, 2) + SpawnAmmoCrate(237, 20, amMortar, 4) + SpawnAmmoCrate(312, 1107, amMolotov, 3) + SpawnAmmoCrate(531, 1123, amWatermelon, 2) + SpawnAmmoCrate(1253, 1444, amFlamethrower, 5) + SpawnAmmoCrate(994, 1364, amBaseballBat, 3) + SpawnAmmoCrate(1104, 1553, amMine, 6) + SpawnAmmoCrate(2277, 803, amDynamite, 2) + SpawnAmmoCrate(1106, 184, amRCPlane, 3) + SpawnAmmoCrate(1333, 28, amSMine, 4) + SpawnAmmoCrate(90, 279, amAirAttack, 2) + SpawnAmmoCrate(288, 269, amBee, 2) + SpawnAmmoCrate(818, 1633, amBaseballBat, 2) +end +-----------------------------Events------------------------------------ +function CheckNativesDead() + return nativesLeft == 0 +end + +function CheckCannibalsDead() + return cannibalsLeft == 0 +end + +function CheckPlayersDead() + return playersLeft == 0 +end + +function CheckCyborgsDead() + return (cyborgsLeft == 0 and (leader == nil or gearDead[leader] == true)) +end + +function DoNativesDead() + nativesDeadFresh = true + TurnTimeLeft = 0 +end + +function DoCannibalsDead() + cannibalsDeadFresh = true + TurnTimeLeft = 0 +end + +function DoPlayersDead() + RemoveEventFunc(CheckNativesDead) + RemoveEventFunc(CheckCannibalsDead) + RemoveEventFunc(CheckCyborgsDead) + playersDeadFresh = true + TurnTimeLeft = 0 +end + +function DoCyborgsDead() +-- RemoveEventFunc(CheckNativesDead) +-- RemoveEventFunc(CheckCannibalsDead) + cyborgsDeadFresh= true + TurnTimeLeft = 0 +end + +function CheckGearsDead(gearList) + for i = 1, # gearList do + if gearDead[gearList[i]] ~= true then + return false + end + end + return true +end + +function CheckGearDead(gear) + return gearDead[gear] +end + +function FailedMission() + RestoreHedge(cyborg) + AnimOutOfNowhere(cyborg, unpack(cyborgPos[1])) + if CheckCyborgsDead() then + AnimSay(cyborg, loc("Hmmm...it's a draw. How unfortunate!"), SAY_THINK, 6000) + elseif leader ~= nil then + CondNeedToTurn2(cyborg, leader) + AddAnim({{func = AnimSay, args = {leader, loc("Yay, we won!"), SAY_SAY, 2000}}, + {func = AnimSay, args = {cyborg, loc("Nice work!"), SAY_SAY, 2000}}}) + else + CondNeedToTurn2(cyborg, cyborgs[1]) + AddAnim({{func = AnimSay, args = {cyborgs[1], loc("Yay, we won!"), SAY_SAY, 2000}}, + {func = AnimSay, args = {cyborg, loc("Nice work!"), SAY_SAY, 2000}}}) + end + AddFunction({func = LoseMission, args = {}}) +end + +function LoseMission() + ParseCommand("teamgone " .. loc("Natives")) + ParseCommand("teamgone " .. loc("Cannibals")) + ParseCommand("teamgone " .. loc("011101001")) + TurnTimeLeft = 0 +end + +function WonMission() + RestoreHedge(cyborg) + CondNeedToTurn2(cyborg, players[1]) + SetupFinalAnim() + AddAnim(finalAnim) + AddFunction({func = WinMission, args = {}}) +end + +function WinMission() + SaveCampaignVar("Progress", "9") + ParseCommand("teamgone " .. loc("011101001")) + TurnTimeLeft = 0 +end +-----------------------------Misc-------------------------------------- +function HideHedge(hedge) + if hedgeHidden[hedge] ~= true then + HideHog(hedge) + hedgeHidden[hedge] = true + end +end + +function RestoreHedge(hedge) + if hedgeHidden[hedge] == true then + RestoreHog(hedge) + hedgeHidden[hedge] = false + end +end + +function GetVariables() + m5DeployedNum = tonumber(GetCampaignVar("M5DeployedNum")) + m2Choice = tonumber(GetCampaignVar("M2Choice")) + m5Choice = tonumber(GetCampaignVar("M5Choice")) + m2DenseDead = tonumber(GetCampaignVar("M2DenseDead")) + m4DenseDead = tonumber(GetCampaignVar("M4DenseDead")) + m5DenseDead = tonumber(GetCampaignVar("M5DenseDead")) + m4LeaksDead = tonumber(GetCampaignVar("M4LeaksDead")) + m5LeaksDead = tonumber(GetCampaignVar("M5LeaksDead")) + m4ChiefDead = tonumber(GetCampaignVar("M4ChiefDead")) + m5ChiefDead = tonumber(GetCampaignVar("M5ChiefDead")) + m4WaterDead = tonumber(GetCampaignVar("M4WaterDead")) + m5WaterDead = tonumber(GetCampaignVar("M5WaterDead")) + m4BuffaloDead = tonumber(GetCampaignVar("M4BuffaloDead")) + m5BuffaloDead = tonumber(GetCampaignVar("M5BuffaloDead")) + m5WiseDead = tonumber(GetCampaignVar("M5WiseDead")) + m5GirlDead = tonumber(GetCampaignVar("M5GirlDead")) + m8DeployedDead = tonumber(GetCampaignVar("M8DeployedDead")) + m8PrincessDead = tonumber(GetCampaignVar("M8PrincessDead")) + m8RamonDead = tonumber(GetCampaignVar("M8RamonDead")) + m8SpikyDead = tonumber(GetCampaignVar("M8SpikyDead")) + m8DeployedLeader = tonumber(GetCampaignVar("M8DeployedLeader")) + m8PrincessLeader = tonumber(GetCampaignVar("M8PrincessLeader")) + m8EnemyFled = tonumber(GetCampaignVar("M8EnemyFled")) + m8Scene = tonumber(GetCampaignVar("M8Scene")) +end + +function SetupPlace() + for i = 1, playersNum do + HideHedge(players[i]) + end + for i = 1, cyborgsNum do + HideHedge(cyborgs[i]) + end + if leader ~= nil then + HideHedge(leader) + end +end + +function SetupEvents() + AddNewEvent(CheckPlayersDead, {}, DoPlayersDead, {}, 0) + AddNewEvent(CheckNativesDead, {}, DoNativesDead, {}, 0) + AddNewEvent(CheckCannibalsDead, {}, DoCannibalsDead, {}, 0) + AddNewEvent(CheckCyborgsDead, {}, DoCyborgsDead, {}, 0) +end + +function SetupAmmo() + AddAmmo(cyborgs[1], amClusterBomb, 100) + AddAmmo(cyborgs[1], amMortar, 100) + AddAmmo(cyborgs[1], amDynamite, 2) + AddAmmo(cyborgs[1], amAirAttack, 2) + AddAmmo(cyborgs[1], amTeleport, 100) + + if leader ~= nil then + AddAmmo(leader, amClusterBomb, 100) + AddAmmo(leader, amMortar, 100) + AddAmmo(leader, amDynamite, 100) + AddAmmo(leader, amAirAttack, 3) + AddAmmo(leader, amTeleport, 100) + end +end + +function AddHogs() + AddTeam(loc("011101001"), 14483456, "ring", "UFO", "Robot", "cm_star") + cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1") + + AddTeam(loc("Natives"), 29439, "Bone", "Island", "HillBilly", "cm_birdy") + natives[1] = AddHog(nativeNames[leaksNum], 0, 100, nativeHats[leaksNum]) + if m5DeployedNum ~= leaksNum and m8DeployedLeader == 0 then + natives[2] = AddHog(nativeNames[m5DeployedNum], 0, 100, nativeHats[m5DeployedNum]) + end + table.insert(natives, AddHog(nativeNames[ramonNum], 0, 100, nativeHats[ramonNum])) + table.insert(natives, AddHog(nativeNames[spikyNum], 0, 100, nativeHats[spikyNum])) + if m8PrincessLeader == 0 then + table.insert(natives, AddHog(loc("Fell From Heaven"), 0, 100, "tiara")) + end + nativesNum = #natives + nativesLeft = nativesNum + cannibalsLeft = cannibalsNum + for i = 1, nativesNum do + table.insert(players, natives[i]) + end + + AddTeam(loc("Cannibals"), 29439, "Bone", "Island", "HillBilly", "cm_birdy") + for i = 1, cannibalsNum do + cannibals[i] = AddHog(cannibalNames[i], 0, 100, "Zombi") + table.insert(players, cannibals[i]) + end + playersNum = #players + playersLeft = playersNum + + AddTeam(loc("Hedge-cogs"), 14483455, "ring", "UFO", "Robot", "cm_star") + for i = 1, cyborgsNum do + cyborgs[i] = AddHog(cyborgNames[i], 2, 80, "cyborg2") + end + + if m8EnemyFled == 1 then + AddTeam(loc("Leader"), 14483455, "ring", "UFO", "Robot", "cm_star") + if m8Scene == denseScene then + leader = AddHog(loc("Dense Cloud"), 2, 200, nativeHats[denseNum]) + elseif m8Scene == waterScene then + leader = AddHog(loc("Fiery Water"), 2, 200, nativeHats[waterNum]) + elseif m8Scene == princessScene then + leader = AddHog(loc("Fell From Heaven"), 2, 200, "tiara") + else + leader = AddHog(loc("Nancy Screw"), 2, 200, "cyborg2") + end + end + + cyborgsLeft = cyborgsNum + + for i = 1, nativesNum do + AnimSetGearPosition(natives[i], unpack(nativePos[i])) + AnimTurn(natives[i], nativeDir[i]) + end + for i = 1, cannibalsNum do + AnimSetGearPosition(cannibals[i], unpack(cannibalPos[i])) + AnimTurn(cannibals[i], cannibalDir[i]) + end + for i = 1, cyborgsNum do + AnimSetGearPosition(cyborgs[i], unpack(cyborgsPos[i])) + AnimTurn(cyborgs[i], cyborgsDir[i]) + end + AnimSetGearPosition(cyborg, unpack(cyborgPos[1])) + AnimTurn(cyborg, cyborgDir) + if leader ~= nil then + AnimSetGearPosition(leader, unpack(leaderPos)) + AnimTurn(leader, leaderDir[i]) + end +end + +-----------------------------Main Functions---------------------------- + +function onGameInit() + Seed = 0 + GameFlags = gfSolidLand + TurnTime = 60000 + CaseFreq = 0 + MinesNum = 0 + MinesTime = 3000 + Explosives = 0 + Delay = 10 + Map = "Islands" + Theme = "EarthRise" + SuddenDeathTurns = 20 + + GetVariables() + AnimInit() + AddHogs() +end + +function onGameStart() + 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) + gearDead[gear] = true + if GetGearType(gear) == gtHedgehog then + if GetHogTeamName(gear) == loc("Natives") then + for i = 1, nativesLeft do + if natives[i] == gear then + table.remove(natives, i) + table.remove(players, i) + nativesLeft = nativesLeft - 1 + playersLeft = playersLeft - 1 + end + end + elseif GetHogTeamName(gear) == loc("Cannibals") then + for i = 1, cannibalsLeft do + if cannibals[i] == gear then + table.remove(cannibals, i) + table.remove(players, nativesLeft + i) + cannibalsLeft = cannibalsLeft - 1 + playersLeft = playersLeft - 1 + end + end + elseif GetHogTeamName(gear) == loc("Hedge-cogs") then + for i = 1, cyborgsLeft do + if cyborgs[i] == gear then + table.remove(cyborgs, i) + end + end + cyborgsLeft = cyborgsLeft - 1 + end + end +end + +function onGearAdd(gear) +end + +function onAmmoStoreInit() + SetAmmo(amSkip, 9, 0, 0, 0) + SetAmmo(amSwitch, 9, 0, 0, 0) + SetAmmo(amDEagle, 9, 0, 0, 0) + SetAmmo(amSniperRifle, 9, 0, 0, 0) + SetAmmo(amBazooka, 8, 0, 0, 0) + SetAmmo(amGrenade, 7, 0, 0, 0) + SetAmmo(amFirePunch, 9, 0, 0, 0) + SetAmmo(amShotgun, 9, 0, 0, 0) + + SetAmmo(amParachute, 9, 0, 0, 0) + SetAmmo(amRope, 9, 0, 0, 0) + SetAmmo(amPickHammer, 9, 0, 0, 0) + SetAmmo(amBlowTorch, 9, 0, 0, 0) +end + +function onNewTurn() + if AnimInProgress() then + TurnTimeLeft = -1 + return + end + if playersDeadFresh then + playersDeadFresh = false + FailedMission() + elseif cyborgsDeadFresh then + cyborgsDeadFresh = false + WonMission() + elseif nativesDeadFresh and GetHogTeamName(CurrentHedgehog) == loc("Cannibals") then + AnimSay(CurrentHedgehog, loc("Your deaths will be avenged, cannibals!"), SAY_SHOUT, 0) + nativesDeadFresh = false + elseif cannibalsDeadFresh and GetHogTeamName(CurrentHedgehog) == loc("Natives") then + AnimSay(CurrentHedgehog, loc("Your deaths will be avenged, cannibals!"), SAY_SHOUT, 0) + cannibalsDeadFresh = false + end +end + +function onGearDamage(gear, damage) +end + +function onPrecise() + if GameTime > 3000 and AnimInProgress() then + SetAnimSkip(true) + end +end