share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/united.lua
branchspacecampaign
changeset 9308 4bddcc1a1450
parent 9296 5cc010e79431
parent 9306 c9978ada9a3d
child 9310 1469147c110f
equal deleted inserted replaced
9296:5cc010e79431 9308:4bddcc1a1450
     1 HedgewarsScriptLoad("/Scripts/Locale.lua")
       
     2 HedgewarsScriptLoad("/Scripts/Animate.lua")
       
     3 
       
     4 -----------------------------Constants---------------------------------
       
     5 choiceAccept = 1
       
     6 choiceRefuse = 2
       
     7 choiceAttack = 3
       
     8 
       
     9 leaksPos = {2067, 509}
       
    10 densePos = {1882, 503}
       
    11 waterPos = {3100, 930}
       
    12 buffaloPos = {2609, 494}
       
    13 chiefPos = {2538, 617}
       
    14 cannibalPos = {{2219, 1339}, {2322, 1357}, {805, 784}, {3876, 1048},
       
    15               {1101, 916}, {2854, 1408}, {1974, 486}, {1103, 961}}
       
    16 
       
    17 HogNames = {loc("Olive"), loc("Brain Stu"), loc("Brainila"), loc("Salivaslurper"),
       
    18             loc("Spleenlover"), loc("Thighlicker"), loc("NomNom"), loc("Mindy")}
       
    19 
       
    20 natives = {}
       
    21 -----------------------------Variables---------------------------------
       
    22 cannibals = {}
       
    23 cannibalDead = {}
       
    24 cannibalHidden = {}
       
    25 cratesSpawned = {}
       
    26 healthCratesSpawned = {}
       
    27 
       
    28 sdrmv = 0
       
    29 denseDead = false
       
    30 leaksDead = false
       
    31 waterDead = false
       
    32 buffaloDead = false
       
    33 chiefDead = false
       
    34 nativesDead = {}
       
    35 
       
    36 m2Choice = 0
       
    37 m2DenseDead = 0
       
    38 
       
    39 startAnim = {}
       
    40 wave2Anim = {}
       
    41 finalAnim = {}
       
    42 --------------------------Anim skip functions--------------------------
       
    43 function AfterHogDeadAnim()
       
    44   freshDead = nil
       
    45   TurnTimeLeft = TurnTime
       
    46 end
       
    47 
       
    48 function AfterStartAnim()
       
    49   local goal = loc("Defeat the cannibals!|")
       
    50   local chiefgoal = loc("Try to protect the chief! You won't lose if he dies, but it is advised that he survives.")
       
    51   TurnTimeLeft = TurnTime
       
    52   ShowMission(loc("United We Stand"), loc("Invasion"), goal .. chiefgoal, 1, 6000)
       
    53 end
       
    54 
       
    55 function SkipStartAnim()
       
    56   AnimSetGearPosition(water, 2467, 754)
       
    57   if cratesSpawned[1] ~= true then
       
    58     SpawnCrates(1)
       
    59   end
       
    60   if healthCratesSpawned[1] ~= true then
       
    61     SpawnHealthCrates(1)
       
    62   end
       
    63   if cannibalHidden[1] == true then
       
    64     RestoreWave(1)
       
    65   end
       
    66   AnimSwitchHog(leaks)
       
    67 end
       
    68 
       
    69 function SkipWave2Anim()
       
    70   if cratesSpawned[2] ~= true then
       
    71     SpawnCrates(2)
       
    72   end
       
    73   if healthCratesSpawned[2] ~= true then
       
    74     SpawnHealthCrates(2)
       
    75   end
       
    76   if cannibalHidden[5] == true then
       
    77     RestoreWave(2)
       
    78   end
       
    79   AnimSwitchHog(cannibals[5])
       
    80 end
       
    81 
       
    82 function AfterWave2Anim()
       
    83   TurnTimeLeft = 0
       
    84 end
       
    85 
       
    86 function AfterFinalAnim()
       
    87   if leaksDead == true then
       
    88     SaveCampaignVar("M4LeaksDead", "1")
       
    89   else
       
    90     SaveCampaignVar("M4LeaksDead", "0")
       
    91   end
       
    92   if chiefDead == true then
       
    93     SaveCampaignVar("M4ChiefDead", "1")
       
    94   else
       
    95     SaveCampaignVar("M4ChiefDead", "0")
       
    96   end
       
    97   if buffaloDead == true then
       
    98     SaveCampaignVar("M4BuffaloDead", "1")
       
    99   else
       
   100     SaveCampaignVar("M4BuffaloDead", "0")
       
   101   end
       
   102   if waterDead == true then
       
   103     SaveCampaignVar("M4WaterDead", "1")
       
   104   else
       
   105     SaveCampaignVar("M4WaterDead", "0")
       
   106   end
       
   107   if denseDead == true then
       
   108     SaveCampaignVar("M4DenseDead", "1")
       
   109   else
       
   110     SaveCampaignVar("M4DenseDead", "0")
       
   111   end
       
   112   if progress and progress<4 then
       
   113     SaveCampaignVar("Progress", "4")
       
   114   end
       
   115   ParseCommand("teamgone " .. loc("011101001"))
       
   116   TurnTimeLeft = 0
       
   117 end
       
   118 -----------------------------Animations--------------------------------
       
   119 function Wave2Reaction()
       
   120   local i = 1
       
   121   local gearr = nil
       
   122   while nativesDead[i] == true do
       
   123     i = i + 1
       
   124   end
       
   125   gearr = natives[i]
       
   126   if denseDead ~= true and band(GetState(dense), gstDrowning) == 0 then
       
   127     AnimInsertStepNext({func = AnimSay, args = {dense, loc("I'm so scared!"), SAY_SAY, 3000}})
       
   128     AnimInsertStepNext({func = AnimCustomFunction, args = {dense, EmitDenseClouds, {"Left"}}})
       
   129     AnimInsertStepNext({func = AnimTurn, args = {dense, "Left"}})
       
   130   end
       
   131   AnimInsertStepNext({func = AnimSay, args = {gearr, loc("There's more of them? When did they become so hungry?"), SAY_SHOUT, 8000}}) 
       
   132 end
       
   133 
       
   134 function EmitDenseClouds(dir)
       
   135   local dif
       
   136   if dir == "Left" then
       
   137     dif = 10
       
   138   else
       
   139     dif = -10
       
   140   end
       
   141   AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false})
       
   142   AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false})
       
   143   AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false})
       
   144   AnimInsertStepNext({func = AnimWait, args = {dense, 800}})
       
   145   AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false})
       
   146   AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false})
       
   147   AnimInsertStepNext({func = AnimWait, args = {dense, 800}})
       
   148   AnimInsertStepNext({func = AnimVisualGear, args = {dense, GetX(dense) + dif, GetY(dense) + dif, vgtSteam, 0, true}, swh = false})
       
   149 end
       
   150 
       
   151 function AnimationSetup()
       
   152   table.insert(startAnim, {func = AnimWait, args = {leaks, 4000}})
       
   153   table.insert(startAnim, {func = AnimCaption, args = {leaks, loc("Back in the village, after telling the villagers about the threat..."), 5000}})
       
   154   table.insert(startAnim, {func = AnimCaption, args = {leaks, loc("Their buildings were very primitive back then, even for an uncivilised island."), 7000}})
       
   155   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}})
       
   156   table.insert(startAnim, {func = AnimSay, args = {chief, loc("That is, indeed, very weird..."), SAY_SAY, 3500}})
       
   157   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}})
       
   158   table.insert(startAnim, {func = AnimSay, args = {buffalo, loc("Haha!"), SAY_SHOUT, 2000}})
       
   159   if denseDead == false then
       
   160     table.insert(startAnim, {func = AnimSay, args = {dense, loc("I'm not sure about that!"), SAY_SAY, 3400}})
       
   161     table.insert(startAnim, {func = AnimSay, args = {dense, loc("They have weapons we've never seen before!"), SAY_SAY, 5000}})
       
   162     table.insert(startAnim, {func = AnimSay, args = {dense, loc("Luckily, I've managed to snatch some of them."), SAY_SAY, 5000}})
       
   163     table.insert(startAnim, {func = AnimCustomFunction, args = {dense, SpawnCrates, {1}}})
       
   164     table.insert(startAnim, {func = AnimSay, args = {dense, loc("Oops...I dropped them."), SAY_SAY, 3000}})
       
   165   else
       
   166     table.insert(startAnim, {func = AnimSay, args = {leaks, loc("I'm not sure about that!"), SAY_SAY, 3400}})
       
   167     table.insert(startAnim, {func = AnimSay, args = {leaks, loc("They have weapons we've never seen before!"), SAY_SAY, 5000}})
       
   168     table.insert(startAnim, {func = AnimCustomFunction, args = {leaks, SpawnCrates, {1}}})
       
   169     table.insert(startAnim, {func = AnimWait, args = {leaks, 1000}})
       
   170     table.insert(startAnim, {func = AnimSay, args = {leaks, loc("They keep appearing like this. It's weird!"), SAY_SAY, 5000}})
       
   171   end
       
   172   table.insert(startAnim, {func = AnimSay, args = {chief, loc("Did anyone follow you?"), SAY_SAY, 3000}})
       
   173   table.insert(startAnim, {func = AnimSay, args = {leaks, loc("No, we made sure of that!"), SAY_SAY, 3500}})
       
   174   table.insert(startAnim, {func = AnimCustomFunction, args = {leaks, SpawnHealthCrates, {1}}})
       
   175   table.insert(startAnim, {func = AnimWait, args = {leaks, 1000}})
       
   176   table.insert(startAnim, {func = AnimSay, args = {chief, loc("First aid kits?!"), SAY_SAY, 3000}})
       
   177   table.insert(startAnim, {func = AnimSay, args = {leaks, loc("I've seen this before. They just appear out of thin air."), SAY_SAY, 7000}})
       
   178   table.insert(startAnim, {func = AnimMove, args = {water, "Left", 3000, 0}})
       
   179   table.insert(startAnim, {func = AnimJump, args = {water, "long"}})
       
   180   table.insert(startAnim, {func = AnimMove, args = {water, "Left", 2655, 0}})
       
   181   table.insert(startAnim, {func = AnimTurn, args = {water, "Right"}})
       
   182   table.insert(startAnim, {func = AnimJump, args = {water, "back"}})
       
   183   table.insert(startAnim, {func = AnimJump, args = {water, "back"}})
       
   184   table.insert(startAnim, {func = AnimTurn, args = {water, "Left"}})
       
   185   table.insert(startAnim, {func = AnimMove, args = {water, "Left", 2467, 754}})
       
   186   table.insert(startAnim, {func = AnimSay, args = {water, loc("Hey guys!"), SAY_SAY, 2500}})
       
   187   table.insert(startAnim, {func = AnimSay, args = {chief, loc("..."), SAY_THINK, 1500}})
       
   188   table.insert(startAnim, {func = AnimSay, args = {chief, loc("Where have you been?"), SAY_SAY, 4000}})
       
   189   table.insert(startAnim, {func = AnimSay, args = {water, loc("Just on a walk."), SAY_SAY, 3000}})
       
   190   table.insert(startAnim, {func = AnimSay, args = {chief, loc("You have chosen the perfect moment to leave."), SAY_SAY, 6000}})
       
   191   table.insert(startAnim, {func = AnimCustomFunction, args = {chief, RestoreWave, {1}}})
       
   192   for i = 1, 4 do
       
   193     table.insert(startAnim, {func = AnimOutOfNowhere, args = {cannibals[i], unpack(cannibalPos[i])}})
       
   194   end
       
   195   table.insert(startAnim, {func = AnimWait, args = {chief, 1500}})
       
   196   table.insert(startAnim, {func = AnimSay, args = {leaks, loc("HOW DO THEY KNOW WHERE WE ARE???"), SAY_SHOUT, 5000}})
       
   197   table.insert(startAnim, {func = AnimSay, args = {chief, loc("We have to protect the village!"), SAY_SAY, 5000}})
       
   198   table.insert(startAnim, {func = AnimSwitchHog, args = {leaks}})
       
   199   AddSkipFunction(startAnim, SkipStartAnim, {})
       
   200 
       
   201   table.insert(wave2Anim, {func = AnimCustomFunction, args = {leaks, RestoreWave, {2}}, swh = false})
       
   202   for i = 5, 8 do
       
   203     table.insert(wave2Anim, {func = AnimOutOfNowhere, args = {cannibals[i], unpack(cannibalPos[i])}})
       
   204   end
       
   205   table.insert(wave2Anim, {func = AnimCustomFunction, args = {leaks, Wave2Reaction, {}}, swh = false})
       
   206   table.insert(wave2Anim, {func = AnimCustomFunction, args = {leaks, SpawnCrates, {2}}, swh = false})
       
   207   table.insert(wave2Anim, {func = AnimCustomFunction, args = {leaks, SpawnHealthCrates, {2}}, swh = false})
       
   208   table.insert(wave2Anim, {func = AnimSwitchHog, args = {cannibals[5]}})
       
   209   AddSkipFunction(wave2Anim, SkipWave2Anim, {})
       
   210 end
       
   211 
       
   212 function SetupHogDeadAnim(gear)
       
   213   hogDeadAnim = {}
       
   214   if nativesNum == 0 then
       
   215     return
       
   216   end
       
   217   local hogDeadStrings = {loc("They killed ") .. gear ..loc("! You bastards!"), 
       
   218                           gear .. loc("! Why?!"), 
       
   219                           loc("That was just mean!"), 
       
   220                           loc("Oh no, not ") .. gear .. "!"}
       
   221   table.insert(hogDeadAnim, {func = AnimSay, args = {CurrentHedgehog, hogDeadStrings[nativesNum], SAY_SHOUT, 4000}})
       
   222 end
       
   223 
       
   224 function SetupFinalAnim()
       
   225   local found = 0
       
   226   local hogs = {}
       
   227   local i = 1
       
   228   if nativesNum >= 2 then
       
   229     while found < 2 do
       
   230       if  nativesDead[i] ~= true then
       
   231         found = found + 1
       
   232         hogs[found] = natives[i]
       
   233       end
       
   234       i = i + 1
       
   235     end
       
   236     if chiefDead ~= true then
       
   237       hogs[2] = chief
       
   238     end
       
   239     table.insert(finalAnim, {func = AnimCustomFunction, args = {hogs[1], CondNeedToTurn, {hogs[1], hogs[2]}}})
       
   240     table.insert(finalAnim, {func = AnimSay, args = {hogs[1], loc("We can't hold them up much longer!"), SAY_SAY, 5000}})
       
   241     table.insert(finalAnim, {func = AnimSay, args = {hogs[1], loc("We need to move!"), SAY_SAY, 3000}})
       
   242     table.insert(finalAnim, {func = AnimSay, args = {hogs[2], loc("But where can we go?"), SAY_SAY, 3000}})
       
   243     table.insert(finalAnim, {func = AnimSay, args = {hogs[1], loc("To the caves..."), SAY_SAY, 2500}})
       
   244     table.insert(finalAnim, {func = AnimSay, args = {hogs[2], loc("Good idea, they'll never find us there!"), SAY_SAY, 5000}})
       
   245   else
       
   246     for i = 1, 5 do
       
   247       if nativesDead[i] ~= true then
       
   248         hogs[1] = natives[i]
       
   249       end
       
   250     end
       
   251     table.insert(finalAnim, {func = AnimSay, args = {hogs[1], loc("I need to move the tribe!"), SAY_THINK, 4000}})
       
   252     table.insert(finalAnim, {func = AnimSay, args = {hogs[1], loc("The caves are well hidden, they won't find us there!"), SAY_THINK, 7000}})
       
   253   end
       
   254 end
       
   255 -----------------------------Misc--------------------------------------
       
   256 function RestoreWave(index)
       
   257   for i = (index - 1) * 4 + 1, index * 4 do
       
   258     RestoreHog(cannibals[i])
       
   259     cannibalHidden[i] = false
       
   260   end
       
   261 end
       
   262 
       
   263 function GetVariables()
       
   264   m2DenseDead = tonumber(GetCampaignVar("M2DenseDead"))
       
   265   if m2DenseDead == 1 then
       
   266     denseDead = true
       
   267   end
       
   268   m2Choice = tonumber(GetCampaignVar("M2Choice"))
       
   269 end
       
   270 
       
   271 function SetupPlace()
       
   272   if m2DenseDead == 1 then
       
   273     sdrmv = 1
       
   274     DeleteGear(dense)
       
   275   end
       
   276   for i = 1, 8 do
       
   277     HideHog(cannibals[i])
       
   278     cannibalHidden[i] = true
       
   279   end
       
   280   HideHog(cyborg)
       
   281 end
       
   282 
       
   283 function SetupEvents()
       
   284   AddEvent(CheckWaveDead, {1}, DoWaveDead, {1}, 0)
       
   285   AddEvent(CheckWaveDead, {2}, DoWaveDead, {2}, 0)
       
   286 end
       
   287 
       
   288 function SetupAmmo()
       
   289   AddAmmo(cannibals[1], amGrenade, 4)
       
   290   AddAmmo(cannibals[1], amBazooka, 4)
       
   291   AddAmmo(cannibals[1], amShotgun, 4)
       
   292   AddAmmo(cannibals[1], amMine, 2)
       
   293   AddAmmo(cannibals[5], amGrenade, 4)
       
   294   AddAmmo(cannibals[5], amBazooka, 4)
       
   295   AddAmmo(cannibals[5], amShotgun, 4)
       
   296   AddAmmo(cannibals[5], amMine, 2)
       
   297   AddAmmo(cannibals[5], amMolotov, 2)
       
   298   AddAmmo(cannibals[5], amFlamethrower, 3)
       
   299 end
       
   300 
       
   301 function AddHogs()
       
   302 	AddTeam(loc("Natives"), 29439, "Bone", "Island", "HillBilly", "cm_birdy")
       
   303 	leaks = AddHog(loc("Leaks A Lot"), 0, 100, "Rambo")
       
   304   dense = AddHog(loc("Dense Cloud"), 0, 100, "RobinHood")
       
   305   water = AddHog(loc("Fiery Water"), 0, 100, "pirate_jack")
       
   306   buffalo = AddHog(loc("Raging Buffalo"), 0, 100, "zoo_Bunny")
       
   307   chief = AddHog(loc("Righteous Beard"), 0, 100, "IndianChief")
       
   308   natives = {leaks, dense, water, buffalo, chief}
       
   309   nativesNum = 5
       
   310 
       
   311   AddTeam(loc("Light Cannfantry"), 14483456, "Skull", "Island", "Pirate", "cm_vampire")
       
   312   for i = 1, 4 do
       
   313     cannibals[i] = AddHog(HogNames[i], 2, 40, "Zombi")
       
   314   end
       
   315 
       
   316   AddTeam(loc("Heavy Cannfantry"), 14483456, "Skull", "Island", "Pirate", "cm_vampire")
       
   317   for i = 5, 8 do
       
   318     cannibals[i] = AddHog(HogNames[i], 2, 55, "vampirichog")
       
   319   end
       
   320 
       
   321   AddTeam(loc("011101001"), 14483456, "ring", "UFO", "Robot", "cm_star")
       
   322   cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1")
       
   323 
       
   324   AnimSetGearPosition(leaks,   unpack(leaksPos))
       
   325   AnimSetGearPosition(dense,   unpack(densePos))
       
   326   AnimSetGearPosition(water,   unpack(waterPos))
       
   327   HogTurnLeft(water, true)
       
   328   AnimSetGearPosition(buffalo, unpack(buffaloPos))
       
   329   HogTurnLeft(buffalo, true)
       
   330   AnimSetGearPosition(chief,   unpack(chiefPos))
       
   331   HogTurnLeft(chief, true)
       
   332   AnimSetGearPosition(cyborg, 0, 0)
       
   333   for i = 1, 8 do
       
   334     AnimSetGearPosition(cannibals[i], unpack(cannibalPos[i]))
       
   335   end
       
   336 end
       
   337 
       
   338 function CondNeedToTurn(hog1, hog2)
       
   339   xl, xd = GetX(hog1), GetX(hog2)
       
   340   if xl > xd then
       
   341     AnimInsertStepNext({func = AnimTurn, args = {hog1, "Left"}})
       
   342     AnimInsertStepNext({func = AnimTurn, args = {hog2, "Right"}})
       
   343   elseif xl < xd then
       
   344     AnimInsertStepNext({func = AnimTurn, args = {hog2, "Left"}})
       
   345     AnimInsertStepNext({func = AnimTurn, args = {hog1, "Right"}})
       
   346   end
       
   347 end
       
   348 
       
   349 function SpawnHealthCrates(index)
       
   350   SetHealth(SpawnHealthCrate(0, 0), 25)
       
   351   SetHealth(SpawnHealthCrate(0, 0), 25)
       
   352   SetHealth(SpawnHealthCrate(0, 0), 25)
       
   353   healthCratesSpawned[index] = true
       
   354 end
       
   355 
       
   356 function SpawnCrates(index)
       
   357   if index == 1 then
       
   358     SpawnAmmoCrate(1943, 408, amBazooka)
       
   359     SpawnAmmoCrate(1981, 464, amGrenade)
       
   360     SpawnAmmoCrate(1957, 459, amShotgun)
       
   361     SpawnAmmoCrate(1902, 450, amDynamite)
       
   362     SpawnUtilityCrate(1982, 405, amPickHammer)
       
   363     SpawnUtilityCrate(2028, 455, amRope)
       
   364     SpawnUtilityCrate(2025, 464, amTeleport)
       
   365   else
       
   366     SpawnUtilityCrate(1982, 405, amBlowTorch)
       
   367     SpawnAmmoCrate(2171, 428, amMolotov)
       
   368     SpawnAmmoCrate(2364, 346, amFlamethrower)
       
   369     SpawnAmmoCrate(2521, 303, amBazooka)
       
   370     SpawnAmmoCrate(2223, 967, amGrenade)
       
   371     SpawnAmmoCrate(1437, 371, amShotgun)
       
   372  end
       
   373   cratesSpawned[index] = true
       
   374 end
       
   375 
       
   376 -----------------------------Events------------------------------------
       
   377 
       
   378 function CheckWaveDead(index)
       
   379   for i = (index - 1) * 4 + 1, index * 4 do
       
   380     if cannibalDead[i] ~= true then
       
   381       return false
       
   382     end
       
   383   end
       
   384   return true
       
   385 end
       
   386 
       
   387 function DoWaveDead(index)
       
   388   SetGearMessage(CurrentHedgehog, 0)
       
   389   SetState(CurrentHedgehog, 0)
       
   390   if index == 1 then
       
   391     AddAnim(wave2Anim)
       
   392     AddFunction({func = AfterWave2Anim, args = {}})
       
   393   elseif index == 2 then
       
   394     SetupFinalAnim()
       
   395     AddAnim(finalAnim)
       
   396     AddFunction({func = AfterFinalAnim, args = {}})
       
   397   end
       
   398 end
       
   399 
       
   400 
       
   401 -----------------------------Main Functions----------------------------
       
   402 
       
   403 function onGameInit()
       
   404 	Seed = 1
       
   405 	GameFlags = 0
       
   406 	TurnTime = 60000 
       
   407 	CaseFreq = 0
       
   408 	MinesNum = 0
       
   409 	MinesTime = 3000
       
   410 	Explosives = 2
       
   411 	Delay = 10 
       
   412   Map = "Hogville"
       
   413 	Theme = "Nature"
       
   414   SuddenDeathTurns = 3000
       
   415 
       
   416   AddHogs()
       
   417   AnimInit()
       
   418 end
       
   419 
       
   420 function onGameStart()
       
   421   progress = tonumber(GetCampaignVar("Progress"))
       
   422   GetVariables()
       
   423   SetupAmmo()
       
   424   SetupPlace()
       
   425   AnimationSetup()
       
   426   SetupEvents()
       
   427   AddAnim(startAnim)
       
   428   AddFunction({func = AfterStartAnim, args = {}})
       
   429 end
       
   430 
       
   431 function onGameTick()
       
   432   AnimUnWait()
       
   433   if ShowAnimation() == false then
       
   434     return
       
   435   end
       
   436   ExecuteAfterAnimations()
       
   437   CheckEvents()
       
   438 end
       
   439 
       
   440 function onGearDelete(gear)
       
   441   if gear == dense then
       
   442     denseDead = true
       
   443     nativesNum = nativesNum - 1
       
   444     nativesDead[2] = true
       
   445     if sdrmv == 1 then
       
   446       freshDead = nil
       
   447     else
       
   448       freshDead = loc("Dense Cloud")
       
   449     end
       
   450   elseif gear == leaks then
       
   451     leaksDead = true
       
   452     nativesNum = nativesNum - 1
       
   453     nativesDead[1] = true
       
   454     freshDead = loc("Leaks A Lot")
       
   455   elseif gear == chief then
       
   456     chiefDead = true
       
   457     nativesNum = nativesNum - 1
       
   458     nativesDead[5] = true
       
   459     freshDead = loc("Righteous Beard")
       
   460   elseif gear == water then
       
   461     waterDead = true
       
   462     nativesNum = nativesNum - 1
       
   463     nativesDead[3] = true
       
   464     freshDead = loc("Fiery Water")
       
   465   elseif gear == buffalo then
       
   466     buffaloDead = true
       
   467     nativesNum = nativesNum - 1
       
   468     nativesDead[4] = true
       
   469     freshDead = loc("Raging Buffalo")
       
   470   else
       
   471     for i = 1, 8 do
       
   472       if gear == cannibals[i] then
       
   473         cannibalDead[i] = true
       
   474       end
       
   475     end
       
   476   end
       
   477 end
       
   478 
       
   479 function onAmmoStoreInit()
       
   480   SetAmmo(amDEagle, 9, 0, 0, 0)
       
   481   SetAmmo(amSniperRifle, 4, 0, 0, 0)
       
   482   SetAmmo(amFirePunch, 9, 0, 0, 0)
       
   483   SetAmmo(amWhip, 9, 0, 0, 0)
       
   484   SetAmmo(amBaseballBat, 9, 0, 0, 0)
       
   485   SetAmmo(amHammer, 9, 0, 0, 0)
       
   486   SetAmmo(amLandGun, 9, 0, 0, 0)
       
   487   SetAmmo(amSnowball, 8, 0, 0, 0)
       
   488   SetAmmo(amGirder, 4, 0, 0, 2)
       
   489   SetAmmo(amParachute, 4, 0, 0, 2)
       
   490   SetAmmo(amSwitch, 8, 0, 0, 2)
       
   491   SetAmmo(amSkip, 8, 0, 0, 0)
       
   492   SetAmmo(amRope, 5, 0, 0, 3)
       
   493   SetAmmo(amBlowTorch, 3, 0, 0, 3)
       
   494   SetAmmo(amPickHammer, 0, 0, 0, 3)
       
   495   SetAmmo(amLowGravity, 0, 0, 0, 2)
       
   496   SetAmmo(amDynamite, 0, 0, 0, 3)
       
   497   SetAmmo(amBazooka, 0, 0, 0, 4)
       
   498   SetAmmo(amGrenade, 0, 0, 0, 5)
       
   499   SetAmmo(amMine, 0, 0, 0, 2)
       
   500   SetAmmo(amMolotov, 0, 0, 0, 3)
       
   501   SetAmmo(amFlamethrower, 0, 0, 0, 3)
       
   502   SetAmmo(amShotgun, 0, 0, 0, 3)
       
   503   SetAmmo(amTeleport, 0, 0, 0, 2)
       
   504   SetAmmo(amFlamethrower, 0, 0, 0, 3)
       
   505 end
       
   506 
       
   507 function onNewTurn()
       
   508   if AnimInProgress() then
       
   509     TurnTimeLeft = -1
       
   510     return
       
   511   end
       
   512   if freshDead ~= nil and GetHogTeamName(CurrentHedgehog) == loc("Natives") then
       
   513     SetupHogDeadAnim(freshDead)
       
   514     AddAnim(hogDeadAnim)
       
   515     AddFunction({func = AfterHogDeadAnim, args = {}})
       
   516   end
       
   517 end
       
   518 
       
   519 function onPrecise()
       
   520   if GameTime > 2500 then
       
   521     SetAnimSkip(true)
       
   522   end
       
   523 end
       
   524