--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/united.lua Mon Jul 01 20:04:32 2013 +0300
@@ -0,0 +1,524 @@
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/Animate.lua")
+
+-----------------------------Constants---------------------------------
+choiceAccept = 1
+choiceRefuse = 2
+choiceAttack = 3
+
+leaksPos = {2067, 509}
+densePos = {1882, 503}
+waterPos = {3100, 930}
+buffaloPos = {2609, 494}
+chiefPos = {2538, 617}
+cannibalPos = {{2219, 1339}, {2322, 1357}, {805, 784}, {3876, 1048},
+ {1101, 916}, {2854, 1408}, {1974, 486}, {1103, 961}}
+
+HogNames = {loc("Olive"), loc("Brain Stu"), loc("Brainila"), loc("Salivaslurper"),
+ loc("Spleenlover"), loc("Thighlicker"), loc("NomNom"), loc("Mindy")}
+
+natives = {}
+-----------------------------Variables---------------------------------
+cannibals = {}
+cannibalDead = {}
+cannibalHidden = {}
+cratesSpawned = {}
+healthCratesSpawned = {}
+
+sdrmv = 0
+denseDead = false
+leaksDead = false
+waterDead = false
+buffaloDead = false
+chiefDead = false
+nativesDead = {}
+
+m2Choice = 0
+m2DenseDead = 0
+
+startAnim = {}
+wave2Anim = {}
+finalAnim = {}
+--------------------------Anim skip functions--------------------------
+function AfterHogDeadAnim()
+ freshDead = nil
+ TurnTimeLeft = TurnTime
+end
+
+function AfterStartAnim()
+ local goal = loc("Defeat the cannibals!|")
+ local chiefgoal = loc("Try to protect the chief! You won't lose if he dies, but it is advised that he survives.")
+ TurnTimeLeft = TurnTime
+ ShowMission(loc("United We Stand"), loc("Invasion"), goal .. chiefgoal, 1, 6000)
+end
+
+function SkipStartAnim()
+ AnimSetGearPosition(water, 2467, 754)
+ if cratesSpawned[1] ~= true then
+ SpawnCrates(1)
+ end
+ if healthCratesSpawned[1] ~= true then
+ SpawnHealthCrates(1)
+ end
+ if cannibalHidden[1] == true then
+ RestoreWave(1)
+ end
+ AnimSwitchHog(leaks)
+end
+
+function SkipWave2Anim()
+ if cratesSpawned[2] ~= true then
+ SpawnCrates(2)
+ end
+ if healthCratesSpawned[2] ~= true then
+ SpawnHealthCrates(2)
+ end
+ if cannibalHidden[5] == true then
+ RestoreWave(2)
+ end
+ AnimSwitchHog(cannibals[5])
+end
+
+function AfterWave2Anim()
+ TurnTimeLeft = 0
+end
+
+function AfterFinalAnim()
+ if leaksDead == true then
+ SaveCampaignVar("M4LeaksDead", "1")
+ else
+ SaveCampaignVar("M4LeaksDead", "0")
+ end
+ if chiefDead == true then
+ SaveCampaignVar("M4ChiefDead", "1")
+ else
+ SaveCampaignVar("M4ChiefDead", "0")
+ end
+ if buffaloDead == true then
+ SaveCampaignVar("M4BuffaloDead", "1")
+ else
+ SaveCampaignVar("M4BuffaloDead", "0")
+ end
+ if waterDead == true then
+ SaveCampaignVar("M4WaterDead", "1")
+ else
+ SaveCampaignVar("M4WaterDead", "0")
+ end
+ if denseDead == true then
+ SaveCampaignVar("M4DenseDead", "1")
+ else
+ SaveCampaignVar("M4DenseDead", "0")
+ end
+ if progress and progress<4 then
+ SaveCampaignVar("Progress", "4")
+ end
+ ParseCommand("teamgone " .. loc("011101001"))
+ TurnTimeLeft = 0
+end
+-----------------------------Animations--------------------------------
+function Wave2Reaction()
+ local i = 1
+ local gearr = nil
+ while nativesDead[i] == true do
+ i = i + 1
+ end
+ gearr = natives[i]
+ if denseDead ~= true and band(GetState(dense), gstDrowning) == 0 then
+ AnimInsertStepNext({func = AnimSay, args = {dense, loc("I'm so scared!"), SAY_SAY, 3000}})
+ AnimInsertStepNext({func = AnimCustomFunction, args = {dense, EmitDenseClouds, {"Left"}}})
+ AnimInsertStepNext({func = AnimTurn, args = {dense, "Left"}})
+ 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 = {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 AnimationSetup()
+ table.insert(startAnim, {func = AnimWait, args = {leaks, 4000}})
+ table.insert(startAnim, {func = AnimCaption, args = {leaks, loc("Back in the village, after telling the villagers about the threat..."), 5000}})
+ table.insert(startAnim, {func = AnimCaption, args = {leaks, loc("Their buildings were very primitive back then, even for an uncivilised island."), 7000}})
+ table.insert(startAnim, {func = AnimSay, args = {chief, loc("Young one, you are telling us that they can instantly change location without a shaman?"), SAY_SAY, 8000}})
+ table.insert(startAnim, {func = AnimSay, args = {chief, loc("That is, indeed, very weird..."), SAY_SAY, 3500}})
+ table.insert(startAnim, {func = AnimSay, args = {buffalo, loc("If they try coming here, they can have a taste of my delicious knuckles!"), SAY_SHOUT, 8000}})
+ table.insert(startAnim, {func = AnimSay, args = {buffalo, loc("Haha!"), SAY_SHOUT, 2000}})
+ if denseDead == false then
+ table.insert(startAnim, {func = AnimSay, args = {dense, loc("I'm not sure about that!"), SAY_SAY, 3400}})
+ table.insert(startAnim, {func = AnimSay, args = {dense, loc("They have weapons we've never seen before!"), SAY_SAY, 5000}})
+ table.insert(startAnim, {func = AnimSay, args = {dense, loc("Luckily, I've managed to snatch some of them."), SAY_SAY, 5000}})
+ table.insert(startAnim, {func = AnimCustomFunction, args = {dense, SpawnCrates, {1}}})
+ table.insert(startAnim, {func = AnimSay, args = {dense, loc("Oops...I dropped them."), SAY_SAY, 3000}})
+ else
+ table.insert(startAnim, {func = AnimSay, args = {leaks, loc("I'm not sure about that!"), SAY_SAY, 3400}})
+ table.insert(startAnim, {func = AnimSay, args = {leaks, loc("They have weapons we've never seen before!"), SAY_SAY, 5000}})
+ table.insert(startAnim, {func = AnimCustomFunction, args = {leaks, SpawnCrates, {1}}})
+ table.insert(startAnim, {func = AnimWait, args = {leaks, 1000}})
+ table.insert(startAnim, {func = AnimSay, args = {leaks, loc("They keep appearing like this. It's weird!"), SAY_SAY, 5000}})
+ end
+ table.insert(startAnim, {func = AnimSay, args = {chief, loc("Did anyone follow you?"), SAY_SAY, 3000}})
+ table.insert(startAnim, {func = AnimSay, args = {leaks, loc("No, we made sure of that!"), SAY_SAY, 3500}})
+ table.insert(startAnim, {func = AnimCustomFunction, args = {leaks, SpawnHealthCrates, {1}}})
+ table.insert(startAnim, {func = AnimWait, args = {leaks, 1000}})
+ table.insert(startAnim, {func = AnimSay, args = {chief, loc("First aid kits?!"), SAY_SAY, 3000}})
+ table.insert(startAnim, {func = AnimSay, args = {leaks, loc("I've seen this before. They just appear out of thin air."), SAY_SAY, 7000}})
+ table.insert(startAnim, {func = AnimMove, args = {water, "Left", 3000, 0}})
+ table.insert(startAnim, {func = AnimJump, args = {water, "long"}})
+ table.insert(startAnim, {func = AnimMove, args = {water, "Left", 2655, 0}})
+ table.insert(startAnim, {func = AnimTurn, args = {water, "Right"}})
+ table.insert(startAnim, {func = AnimJump, args = {water, "back"}})
+ table.insert(startAnim, {func = AnimJump, args = {water, "back"}})
+ table.insert(startAnim, {func = AnimTurn, args = {water, "Left"}})
+ table.insert(startAnim, {func = AnimMove, args = {water, "Left", 2467, 754}})
+ table.insert(startAnim, {func = AnimSay, args = {water, loc("Hey guys!"), SAY_SAY, 2500}})
+ table.insert(startAnim, {func = AnimSay, args = {chief, loc("..."), SAY_THINK, 1500}})
+ table.insert(startAnim, {func = AnimSay, args = {chief, loc("Where have you been?"), SAY_SAY, 4000}})
+ table.insert(startAnim, {func = AnimSay, args = {water, loc("Just on a walk."), SAY_SAY, 3000}})
+ table.insert(startAnim, {func = AnimSay, args = {chief, loc("You have chosen the perfect moment to leave."), SAY_SAY, 6000}})
+ table.insert(startAnim, {func = AnimCustomFunction, args = {chief, RestoreWave, {1}}})
+ for i = 1, 4 do
+ table.insert(startAnim, {func = AnimOutOfNowhere, args = {cannibals[i], unpack(cannibalPos[i])}})
+ end
+ table.insert(startAnim, {func = AnimWait, args = {chief, 1500}})
+ table.insert(startAnim, {func = AnimSay, args = {leaks, loc("HOW DO THEY KNOW WHERE WE ARE???"), SAY_SHOUT, 5000}})
+ table.insert(startAnim, {func = AnimSay, args = {chief, loc("We have to protect the village!"), SAY_SAY, 5000}})
+ table.insert(startAnim, {func = AnimSwitchHog, args = {leaks}})
+ AddSkipFunction(startAnim, SkipStartAnim, {})
+
+ table.insert(wave2Anim, {func = AnimCustomFunction, args = {leaks, RestoreWave, {2}}, swh = false})
+ for i = 5, 8 do
+ table.insert(wave2Anim, {func = AnimOutOfNowhere, args = {cannibals[i], unpack(cannibalPos[i])}})
+ end
+ table.insert(wave2Anim, {func = AnimCustomFunction, args = {leaks, Wave2Reaction, {}}, swh = false})
+ table.insert(wave2Anim, {func = AnimCustomFunction, args = {leaks, SpawnCrates, {2}}, swh = false})
+ table.insert(wave2Anim, {func = AnimCustomFunction, args = {leaks, SpawnHealthCrates, {2}}, swh = false})
+ table.insert(wave2Anim, {func = AnimSwitchHog, args = {cannibals[5]}})
+ AddSkipFunction(wave2Anim, SkipWave2Anim, {})
+end
+
+function SetupHogDeadAnim(gear)
+ hogDeadAnim = {}
+ if nativesNum == 0 then
+ return
+ end
+ local hogDeadStrings = {loc("They killed ") .. gear ..loc("! You bastards!"),
+ gear .. loc("! Why?!"),
+ loc("That was just mean!"),
+ loc("Oh no, not ") .. gear .. "!"}
+ table.insert(hogDeadAnim, {func = AnimSay, args = {CurrentHedgehog, hogDeadStrings[nativesNum], SAY_SHOUT, 4000}})
+end
+
+function SetupFinalAnim()
+ local found = 0
+ local hogs = {}
+ local i = 1
+ if nativesNum >= 2 then
+ while found < 2 do
+ if nativesDead[i] ~= true then
+ found = found + 1
+ hogs[found] = natives[i]
+ end
+ i = i + 1
+ end
+ if chiefDead ~= true then
+ hogs[2] = chief
+ end
+ table.insert(finalAnim, {func = AnimCustomFunction, args = {hogs[1], CondNeedToTurn, {hogs[1], hogs[2]}}})
+ table.insert(finalAnim, {func = AnimSay, args = {hogs[1], loc("We can't hold them up much longer!"), SAY_SAY, 5000}})
+ table.insert(finalAnim, {func = AnimSay, args = {hogs[1], loc("We need to move!"), SAY_SAY, 3000}})
+ table.insert(finalAnim, {func = AnimSay, args = {hogs[2], loc("But where can we go?"), SAY_SAY, 3000}})
+ table.insert(finalAnim, {func = AnimSay, args = {hogs[1], loc("To the caves..."), SAY_SAY, 2500}})
+ table.insert(finalAnim, {func = AnimSay, args = {hogs[2], loc("Good idea, they'll never find us there!"), SAY_SAY, 5000}})
+ else
+ for i = 1, 5 do
+ if nativesDead[i] ~= true then
+ hogs[1] = natives[i]
+ end
+ end
+ table.insert(finalAnim, {func = AnimSay, args = {hogs[1], loc("I need to move the tribe!"), SAY_THINK, 4000}})
+ table.insert(finalAnim, {func = AnimSay, args = {hogs[1], loc("The caves are well hidden, they won't find us there!"), SAY_THINK, 7000}})
+ end
+end
+-----------------------------Misc--------------------------------------
+function RestoreWave(index)
+ for i = (index - 1) * 4 + 1, index * 4 do
+ RestoreHog(cannibals[i])
+ cannibalHidden[i] = false
+ end
+end
+
+function GetVariables()
+ m2DenseDead = tonumber(GetCampaignVar("M2DenseDead"))
+ if m2DenseDead == 1 then
+ denseDead = true
+ end
+ m2Choice = tonumber(GetCampaignVar("M2Choice"))
+end
+
+function SetupPlace()
+ if m2DenseDead == 1 then
+ sdrmv = 1
+ DeleteGear(dense)
+ end
+ for i = 1, 8 do
+ HideHog(cannibals[i])
+ cannibalHidden[i] = true
+ end
+ HideHog(cyborg)
+end
+
+function SetupEvents()
+ AddEvent(CheckWaveDead, {1}, DoWaveDead, {1}, 0)
+ AddEvent(CheckWaveDead, {2}, DoWaveDead, {2}, 0)
+end
+
+function SetupAmmo()
+ AddAmmo(cannibals[1], amGrenade, 4)
+ AddAmmo(cannibals[1], amBazooka, 4)
+ AddAmmo(cannibals[1], amShotgun, 4)
+ AddAmmo(cannibals[1], amMine, 2)
+ AddAmmo(cannibals[5], amGrenade, 4)
+ AddAmmo(cannibals[5], amBazooka, 4)
+ AddAmmo(cannibals[5], amShotgun, 4)
+ AddAmmo(cannibals[5], amMine, 2)
+ AddAmmo(cannibals[5], amMolotov, 2)
+ AddAmmo(cannibals[5], amFlamethrower, 3)
+end
+
+function AddHogs()
+ AddTeam(loc("Natives"), 29439, "Bone", "Island", "HillBilly", "cm_birdy")
+ leaks = AddHog(loc("Leaks A Lot"), 0, 100, "Rambo")
+ dense = AddHog(loc("Dense Cloud"), 0, 100, "RobinHood")
+ water = AddHog(loc("Fiery Water"), 0, 100, "pirate_jack")
+ buffalo = AddHog(loc("Raging Buffalo"), 0, 100, "zoo_Bunny")
+ chief = AddHog(loc("Righteous Beard"), 0, 100, "IndianChief")
+ natives = {leaks, dense, water, buffalo, chief}
+ nativesNum = 5
+
+ AddTeam(loc("Light Cannfantry"), 14483456, "Skull", "Island", "Pirate", "cm_vampire")
+ for i = 1, 4 do
+ cannibals[i] = AddHog(HogNames[i], 2, 40, "Zombi")
+ end
+
+ AddTeam(loc("Heavy Cannfantry"), 14483456, "Skull", "Island", "Pirate", "cm_vampire")
+ for i = 5, 8 do
+ cannibals[i] = AddHog(HogNames[i], 2, 55, "vampirichog")
+ end
+
+ AddTeam(loc("011101001"), 14483456, "ring", "UFO", "Robot", "cm_star")
+ cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1")
+
+ AnimSetGearPosition(leaks, unpack(leaksPos))
+ AnimSetGearPosition(dense, unpack(densePos))
+ AnimSetGearPosition(water, unpack(waterPos))
+ HogTurnLeft(water, true)
+ AnimSetGearPosition(buffalo, unpack(buffaloPos))
+ HogTurnLeft(buffalo, true)
+ AnimSetGearPosition(chief, unpack(chiefPos))
+ HogTurnLeft(chief, true)
+ AnimSetGearPosition(cyborg, 0, 0)
+ for i = 1, 8 do
+ AnimSetGearPosition(cannibals[i], unpack(cannibalPos[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
+
+function SpawnHealthCrates(index)
+ SetHealth(SpawnHealthCrate(0, 0), 25)
+ SetHealth(SpawnHealthCrate(0, 0), 25)
+ SetHealth(SpawnHealthCrate(0, 0), 25)
+ healthCratesSpawned[index] = true
+end
+
+function SpawnCrates(index)
+ if index == 1 then
+ SpawnAmmoCrate(1943, 408, amBazooka)
+ SpawnAmmoCrate(1981, 464, amGrenade)
+ SpawnAmmoCrate(1957, 459, amShotgun)
+ SpawnAmmoCrate(1902, 450, amDynamite)
+ SpawnUtilityCrate(1982, 405, amPickHammer)
+ SpawnUtilityCrate(2028, 455, amRope)
+ SpawnUtilityCrate(2025, 464, amTeleport)
+ else
+ SpawnUtilityCrate(1982, 405, amBlowTorch)
+ SpawnAmmoCrate(2171, 428, amMolotov)
+ SpawnAmmoCrate(2364, 346, amFlamethrower)
+ SpawnAmmoCrate(2521, 303, amBazooka)
+ SpawnAmmoCrate(2223, 967, amGrenade)
+ SpawnAmmoCrate(1437, 371, amShotgun)
+ end
+ cratesSpawned[index] = true
+end
+
+-----------------------------Events------------------------------------
+
+function CheckWaveDead(index)
+ for i = (index - 1) * 4 + 1, index * 4 do
+ if cannibalDead[i] ~= true then
+ return false
+ end
+ end
+ return true
+end
+
+function DoWaveDead(index)
+ SetGearMessage(CurrentHedgehog, 0)
+ SetState(CurrentHedgehog, 0)
+ if index == 1 then
+ AddAnim(wave2Anim)
+ AddFunction({func = AfterWave2Anim, args = {}})
+ elseif index == 2 then
+ SetupFinalAnim()
+ AddAnim(finalAnim)
+ AddFunction({func = AfterFinalAnim, args = {}})
+ end
+end
+
+
+-----------------------------Main Functions----------------------------
+
+function onGameInit()
+ Seed = 1
+ GameFlags = 0
+ TurnTime = 60000
+ CaseFreq = 0
+ MinesNum = 0
+ MinesTime = 3000
+ Explosives = 2
+ Delay = 10
+ Map = "Hogville"
+ Theme = "Nature"
+ SuddenDeathTurns = 3000
+
+ AddHogs()
+ AnimInit()
+end
+
+function onGameStart()
+ progress = tonumber(GetCampaignVar("Progress"))
+ 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)
+ if gear == dense then
+ denseDead = true
+ nativesNum = nativesNum - 1
+ nativesDead[2] = true
+ if sdrmv == 1 then
+ freshDead = nil
+ else
+ freshDead = loc("Dense Cloud")
+ end
+ elseif gear == leaks then
+ leaksDead = true
+ nativesNum = nativesNum - 1
+ nativesDead[1] = true
+ freshDead = loc("Leaks A Lot")
+ elseif gear == chief then
+ chiefDead = true
+ nativesNum = nativesNum - 1
+ nativesDead[5] = true
+ freshDead = loc("Righteous Beard")
+ elseif gear == water then
+ waterDead = true
+ nativesNum = nativesNum - 1
+ nativesDead[3] = true
+ freshDead = loc("Fiery Water")
+ elseif gear == buffalo then
+ buffaloDead = true
+ nativesNum = nativesNum - 1
+ nativesDead[4] = true
+ freshDead = loc("Raging Buffalo")
+ else
+ for i = 1, 8 do
+ if gear == cannibals[i] then
+ cannibalDead[i] = true
+ end
+ end
+ end
+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, 0, 0, 0, 4)
+ SetAmmo(amGrenade, 0, 0, 0, 5)
+ SetAmmo(amMine, 0, 0, 0, 2)
+ SetAmmo(amMolotov, 0, 0, 0, 3)
+ SetAmmo(amFlamethrower, 0, 0, 0, 3)
+ SetAmmo(amShotgun, 0, 0, 0, 3)
+ SetAmmo(amTeleport, 0, 0, 0, 2)
+ SetAmmo(amFlamethrower, 0, 0, 0, 3)
+end
+
+function onNewTurn()
+ if AnimInProgress() then
+ TurnTimeLeft = -1
+ return
+ end
+ if freshDead ~= nil and GetHogTeamName(CurrentHedgehog) == loc("Natives") then
+ SetupHogDeadAnim(freshDead)
+ AddAnim(hogDeadAnim)
+ AddFunction({func = AfterHogDeadAnim, args = {}})
+ end
+end
+
+function onPrecise()
+ if GameTime > 2500 then
+ SetAnimSkip(true)
+ end
+end
+