--- /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