share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/first_blood.lua
changeset 7225 e3f2280d9000
parent 7209 f1976889e1a7
child 7228 1b29b8cfb17a
equal deleted inserted replaced
7222:4a17a921ec93 7225:e3f2280d9000
       
     1 loadfile(GetDataPath() .. "Scripts/Locale.lua")()
     1 loadfile(GetDataPath() .. "Scripts/Animate.lua")()
     2 loadfile(GetDataPath() .. "Scripts/Animate.lua")()
     2 
     3 
     3 -----------------------------Variables---------------------------------
     4 -----------------------------Variables---------------------------------
     4 startDialogue = {}
     5 startDialogue = {}
     5 damageAnim = {}
     6 damageAnim = {}
    21 pastMoleHeadAnim = {}
    22 pastMoleHeadAnim = {}
    22 
    23 
    23 
    24 
    24 targets = {}
    25 targets = {}
    25 crates = {}
    26 crates = {}
    26 targXdif2 = {2755, 2638, 2921, 2664, 2973, 3162, 3268, 3067, 3588, 3759, 3062, 1300}
    27 targXdif2 = {2755, 2638, 2921, 2664, 2973, 3162, 3268, 3067, 3062, 1300}
    27 targYdif2 = {1197, 1537, 1646, 1852, 1857, 1804, 1538, 1173, 984, 1290, 1167, 1183}
    28 targYdif2 = {1197, 1537, 1646, 1852, 1857, 1804, 1538, 1173, 1167, 1183}
    28 targXdif1 = {2749, 2909, 2770, 2892, 2836, 1558, 1305}
    29 targXdif1 = {2749, 2909, 2770, 2836, 1558, 1305}
    29 targYdif1 = {1179, 1313, 1734, 1603, 1441, 1152, 1259}
    30 targYdif1 = {1179, 1313, 1734, 1441, 1152, 1259}
    30 targetPosX = {{821, 866, 789}, {614, 656, 638}, {1238, 1237, 1200}, {1558, 1596, 1631}, {2190, 2396, 2457}}
    31 targetPosX = {{821, 866, 789}, {614, 656, 638}, {1238, 1237, 1200}}
    31 targetPosY = {{1342, 1347, 1326}, {1112, 1121, 1061}, {1152, 1111, 1111}, {1132, 1136, 1280}, {1291, 1379, 1317}}
    32 targetPosY = {{1342, 1347, 1326}, {1112, 1121, 1061}, {1152, 1111, 1111}}
    32 crateNum = {7, 12}
    33 crateNum = {7, 10}
    33 
    34 
    34 
    35 
    35 stage = 1
    36 stage = 1
    36 cratesCollected = 0
    37 cratesCollected = 0
    37 chalTries = 0
    38 chalTries = 0
    56 desertTaken = false
    57 desertTaken = false
    57 challengeFailed = false
    58 challengeFailed = false
    58 difficultyChoice = false
    59 difficultyChoice = false
    59 
    60 
    60 goals = {
    61 goals = {
    61   [startDialogue] = {"First Blood", "First Steps", "Press [Left] or [Right] to move around, [Enter] to jump", 1, 4000},
    62   [startDialogue] = {loc("First Blood"), loc("First Steps"), loc("Press [Left] or [Right] to move around, [Enter] to jump"), 1, 4000},
    62   [onShroomAnim] = {"First Blood", "A leap in a leap", "Go on top of the flower", 1, 4000},
    63   [onShroomAnim] = {loc("First Blood"), loc("A leap in a leap"), loc("Go on top of the flower"), 1, 4000},
    63   [onFlowerAnim] = {"First Blood", "Hightime", "Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!", 1, 7000},
    64   [onFlowerAnim] = {loc("First Blood"), loc("Hightime"), loc("Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"), 1, 7000},
    64   [tookParaAnim] = {"First Blood", "Omnivore", "Get on the head of the mole", 1, 4000},
    65   [tookParaAnim] = {loc("First Blood"), loc("Omnivore"), loc("Get on the head of the mole"), 1, 4000},
    65   [onMoleHeadAnim] = {"First Blood", "The Leap of Faith", "Use the parachute ([Space] while in air) to get the next crate", 1, 4000},
    66   [onMoleHeadAnim] = {loc("First Blood"), loc("The Leap of Faith"), loc("Use the parachute ([Space] while in air) to get the next crate"), 1, 4000},
    66   [tookRope2Anim] = {"First Blood", "The Rising", "Do the deed", 1, 4000},
    67   [tookRope2Anim] = {loc("First Blood"), loc("The Rising"), loc("Do the deed"), 1, 4000},
    67   [tookPunchAnim] = {"First Blood", "The Slaughter", "Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air.", 1, 5000},
    68   [tookPunchAnim] = {loc("First Blood"), loc("The Slaughter"), loc("Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."), 1, 5000},
    68   [challengeAnim] = {"First Blood", "The Crate Frenzy", "Collect the crates within the time limit!|If you fail, you'll have to try again.", 1, 5000},
    69   [challengeAnim] = {loc("First Blood"), loc("The Crate Frenzy"), loc("Collect the crates within the time limit!|If you fail, you'll have to try again."), 1, 5000},
    69   [challengeFailedAnim] = {"First Blood", "The Crate Frenzy", "Collect the crates within the time limit!|If you fail, you'll have to try again.", 1, 5000},
    70   [challengeFailedAnim] = {loc("First Blood"), loc("The Crate Frenzy"), loc("Collect the crates within the time limit!|If you fail, you'll have to try again."), 1, 5000},
    70   [challengeCompletedAnim] = {"First Blood", "The Ultimate Weapon", "Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot", 1, 5000},
    71   [challengeCompletedAnim] = {loc("First Blood"), loc("The Ultimate Weapon"), loc("Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"), 1, 5000},
    71   [beforeKillAnim] = {"First Blood", "The First Blood", "Kill the cannibal!", 1, 5000},
    72   [beforeKillAnim] = {loc("First Blood"), loc("The First Blood"), loc("Kill the cannibal!"), 1, 5000},
    72   [closeCannim] = {"First Blood", "The First Blood", "KILL IT!", 1, 5000}
    73   [closeCannim] = {loc("First Blood"), loc("The First Blood"), loc("KILL IT!"), 1, 5000}
    73 }
    74 }
    74 -----------------------------Animations--------------------------------
    75 -----------------------------Animations--------------------------------
    75 function Skipanim(anim)
    76 function Skipanim(anim)
    76   AnimSwitchHog(youngh)
    77   AnimSwitchHog(youngh)
    77   if goals[anim] ~= nil then
    78   if goals[anim] ~= nil then
    90 end
    91 end
    91 
    92 
    92 function AnimationSetup()
    93 function AnimationSetup()
    93   AddSkipFunction(damageAnim, SkipDamageAnim, {damageAnim})
    94   AddSkipFunction(damageAnim, SkipDamageAnim, {damageAnim})
    94   table.insert(damageAnim, {func = AnimWait, args = {youngh, 500}, skipFunc = Skipanim, skipArgs = damageAnim})
    95   table.insert(damageAnim, {func = AnimWait, args = {youngh, 500}, skipFunc = Skipanim, skipArgs = damageAnim})
    95   table.insert(damageAnim, {func = AnimSay, args = {elderh, "Watch your steps, young one!", SAY_SAY, 2000}})
    96   table.insert(damageAnim, {func = AnimSay, args = {elderh, loc("Watch your steps, young one!"), SAY_SAY, 2000}})
    96   table.insert(damageAnim, {func = AnimGearWait, args = {youngh, 500}})
    97   table.insert(damageAnim, {func = AnimGearWait, args = {youngh, 500}})
    97 
    98 
    98   AddSkipFunction(princessDamagedAnim, SkipDamageAnim, {princessDamagedAnim})
    99   AddSkipFunction(princessDamagedAnim, SkipDamageAnim, {princessDamagedAnim})
    99   table.insert(princessDamagedAnim, {func = AnimWait, args = {princess, 500}, skipFunc = Skipanim, skipArgs = princessDamagedAnim})
   100   table.insert(princessDamagedAnim, {func = AnimWait, args = {princess, 500}, skipFunc = Skipanim, skipArgs = princessDamagedAnim})
   100   table.insert(princessDamagedAnim, {func = AnimSay, args = {princess, "Why do men keep hurting me?", SAY_THINK, 3000}})
   101   table.insert(princessDamagedAnim, {func = AnimSay, args = {princess, loc("Why do men keep hurting me?"), SAY_THINK, 3000}})
   101   table.insert(princessDamagedAnim, {func = AnimGearWait, args = {youngh, 500}})
   102   table.insert(princessDamagedAnim, {func = AnimGearWait, args = {youngh, 500}})
   102 
   103 
   103   AddSkipFunction(elderDamagedAnim, SkipDamageAnim, {elderDamagedAnim})
   104   AddSkipFunction(elderDamagedAnim, SkipDamageAnim, {elderDamagedAnim})
   104   table.insert(elderDamagedAnim, {func = AnimWait, args = {elderh, 500}, skipFunc = Skipanim, skipArgs = elderDamagedAnim})
   105   table.insert(elderDamagedAnim, {func = AnimWait, args = {elderh, 500}, skipFunc = Skipanim, skipArgs = elderDamagedAnim})
   105   table.insert(elderDamagedAnim, {func = AnimSay, args = {elderh, "Violence is not the answer to your problems!", SAY_SAY, 3000}})
   106   table.insert(elderDamagedAnim, {func = AnimSay, args = {elderh, loc("Violence is not the answer to your problems!"), SAY_SAY, 3000}})
   106   table.insert(elderDamagedAnim, {func = AnimGearWait, args = {youngh, 500}})
   107   table.insert(elderDamagedAnim, {func = AnimGearWait, args = {youngh, 500}})
   107   
   108   
   108   AddSkipFunction(startDialogue, Skipanim, {startDialogue})
   109   AddSkipFunction(startDialogue, Skipanim, {startDialogue})
   109   table.insert(startDialogue, {func = AnimWait, args = {youngh, 3500}, skipFunc = Skipanim, skipArgs = startDialogue})
   110   table.insert(startDialogue, {func = AnimWait, args = {youngh, 3500}, skipFunc = Skipanim, skipArgs = startDialogue})
   110   table.insert(startDialogue, {func = AnimCaption, args = {youngh, "Once upon a time, on an island with great natural resources, lived two tribes in heated conflict...",  5000}})
   111   table.insert(startDialogue, {func = AnimCaption, args = {youngh, loc("Once upon a time, on an island with great natural resources, lived two tribes in heated conflict..."),  5000}})
   111   table.insert(startDialogue, {func = AnimCaption, args = {youngh, "One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life...", 5000}})
   112   table.insert(startDialogue, {func = AnimCaption, args = {youngh, loc("One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."), 5000}})
   112   table.insert(startDialogue, {func = AnimCaption, args = {youngh, "The other one were all cannibals, spending their time eating the organs of fellow hedgehogs...", 5000}})
   113   table.insert(startDialogue, {func = AnimCaption, args = {youngh, loc("The other one were all cannibals, spending their time eating the organs of fellow hedgehogs..."), 5000}})
   113   table.insert(startDialogue, {func = AnimCaption, args = {youngh, "And so it began...", 1000}})
   114   table.insert(startDialogue, {func = AnimCaption, args = {youngh, loc("And so it began..."), 1000}})
   114   table.insert(startDialogue, {func = AnimSay, args = {elderh, "What are you doing at a distance so great, young one?", SAY_SHOUT, 4000}})
   115   table.insert(startDialogue, {func = AnimSay, args = {elderh, loc("What are you doing at a distance so great, young one?"), SAY_SHOUT, 4000}})
   115   table.insert(startDialogue, {func = AnimSay, args = {elderh, "Come closer, so that your training may continue!", SAY_SHOUT, 6000}})
   116   table.insert(startDialogue, {func = AnimSay, args = {elderh, loc("Come closer, so that your training may continue!"), SAY_SHOUT, 6000}})
   116   table.insert(startDialogue, {func = AnimSay, args = {youngh, "This is it! It's time to make Fell From Heaven fall for me...", SAY_THINK, 6000}})
   117   table.insert(startDialogue, {func = AnimSay, args = {youngh, loc("This is it! It's time to make Fell From Heaven fall for me..."), SAY_THINK, 6000}})
   117   table.insert(startDialogue, {func = AnimJump, args = {youngh, "long"}})
   118   table.insert(startDialogue, {func = AnimJump, args = {youngh, "long"}})
   118   table.insert(startDialogue, {func = AnimTurn, args = {princess, "Right"}})
   119   table.insert(startDialogue, {func = AnimTurn, args = {princess, "Right"}})
   119   table.insert(startDialogue, {func = AnimSwitchHog, args = {youngh}})
   120   table.insert(startDialogue, {func = AnimSwitchHog, args = {youngh}})
   120   table.insert(startDialogue, {func = AnimShowMission, args = {youngh, "First Blood", "First Steps", "Press [Left] or [Right] to move around, [Enter] to jump", 1, 4000}}) 
   121   table.insert(startDialogue, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("First Steps"), loc("Press [Left] or [Right] to move around, [Enter] to jump"), 1, 4000}}) 
   121 
   122 
   122   AddSkipFunction(onShroomAnim, SkipOnShroom, {onShroomAnim})
   123   AddSkipFunction(onShroomAnim, SkipOnShroom, {onShroomAnim})
   123   table.insert(onShroomAnim, {func = AnimSay, args = {elderh, "I can see you have been training diligently.", SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = onShroomAnim})
   124   table.insert(onShroomAnim, {func = AnimSay, args = {elderh, loc("I can see you have been training diligently."), SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = onShroomAnim})
   124   table.insert(onShroomAnim, {func = AnimSay, args = {elderh, "The wind whispers that you are ready to become familiar with tools, now...", SAY_SAY, 4000}})
   125   table.insert(onShroomAnim, {func = AnimSay, args = {elderh, loc("The wind whispers that you are ready to become familiar with tools, now..."), SAY_SAY, 4000}})
   125   table.insert(onShroomAnim, {func = AnimSay, args = {elderh, "Open that crate and we will continue!", SAY_SAY, 5000}})
   126   table.insert(onShroomAnim, {func = AnimSay, args = {elderh, loc("Open that crate and we will continue!"), SAY_SAY, 5000}})
   126   table.insert(onShroomAnim, {func = AnimMove, args = {elderh, "right", 2700, 0}})
   127   table.insert(onShroomAnim, {func = AnimMove, args = {elderh, "right", 2700, 0}})
   127   table.insert(onShroomAnim, {func = AnimTurn, args = {elderh, "Left"}})
   128   table.insert(onShroomAnim, {func = AnimTurn, args = {elderh, "Left"}})
   128   table.insert(onShroomAnim, {func = AnimSay, args = {princess, "He moves like an eagle in the sky.", SAY_THINK, 4000}})
   129   table.insert(onShroomAnim, {func = AnimSay, args = {princess, loc("He moves like an eagle in the sky."), SAY_THINK, 4000}})
   129   table.insert(onShroomAnim, {func = AnimSwitchHog, args = {youngh}})
   130   table.insert(onShroomAnim, {func = AnimSwitchHog, args = {youngh}})
   130   table.insert(onShroomAnim, {func = AnimShowMission, args = {youngh, "First Blood", "A leap in a leap", "Go on top of the flower", 1, 4000}}) 
   131   table.insert(onShroomAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("A leap in a leap"), loc("Go on top of the flower"), 1, 4000}}) 
   131 
   132 
   132   AddSkipFunction(onFlowerAnim, Skipanim, {onFlowerAnim})
   133   AddSkipFunction(onFlowerAnim, Skipanim, {onFlowerAnim})
   133   table.insert(onFlowerAnim, {func = AnimTurn, args = {elderh, "Right"}, skipFunc = Skipanim, skipArgs = onFlowerAnim})
   134   table.insert(onFlowerAnim, {func = AnimTurn, args = {elderh, "Right"}, skipFunc = Skipanim, skipArgs = onFlowerAnim})
   134   table.insert(onFlowerAnim, {func = AnimSay, args = {elderh, "See that crate farther on the right?", SAY_SAY, 4000}})
   135   table.insert(onFlowerAnim, {func = AnimSay, args = {elderh, loc("See that crate farther on the right?"), SAY_SAY, 4000}})
   135   table.insert(onFlowerAnim, {func = AnimSay, args = {elderh, "Swing, Leaks A Lot, on the wings of the wind!", SAY_SAY, 6000}})
   136   table.insert(onFlowerAnim, {func = AnimSay, args = {elderh, loc("Swing, Leaks A Lot, on the wings of the wind!"), SAY_SAY, 6000}})
   136   table.insert(onFlowerAnim, {func = AnimSay, args = {princess, "His arms are so strong!", SAY_THINK, 4000}})
   137   table.insert(onFlowerAnim, {func = AnimSay, args = {princess, loc("His arms are so strong!"), SAY_THINK, 4000}})
   137   table.insert(onFlowerAnim, {func = AnimSwitchHog, args = {youngh}})
   138   table.insert(onFlowerAnim, {func = AnimSwitchHog, args = {youngh}})
   138   table.insert(onFlowerAnim, {func = AnimShowMission, args = {youngh, "First Blood", "Hightime", "Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!", 1, 7000}}) 
   139   table.insert(onFlowerAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("Hightime"), loc("Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"), 1, 7000}}) 
   139   
   140   
   140   AddSkipFunction(tookParaAnim, Skipanim, {tookParaAnim})
   141   AddSkipFunction(tookParaAnim, Skipanim, {tookParaAnim})
   141   table.insert(tookParaAnim, {func = AnimGearWait, args = {youngh, 1000}, skipFunc = Skipanim, skipArgs = tookParaAnim})
   142   table.insert(tookParaAnim, {func = AnimGearWait, args = {youngh, 1000}, skipFunc = Skipanim, skipArgs = tookParaAnim})
   142   table.insert(tookParaAnim, {func = AnimSay, args = {elderh, "Use the rope to get on the head of the mole, young one!", SAY_SHOUT, 4000}})
   143   table.insert(tookParaAnim, {func = AnimSay, args = {elderh, loc("Use the rope to get on the head of the mole, young one!"), SAY_SHOUT, 4000}})
   143   table.insert(tookParaAnim, {func = AnimSay, args = {elderh, "Worry not, for it is a peaceful animal! There is no reason to be afraid...", SAY_SHOUT, 5000}})
   144   table.insert(tookParaAnim, {func = AnimSay, args = {elderh, loc("Worry not, for it is a peaceful animal! There is no reason to be afraid..."), SAY_SHOUT, 5000}})
   144   table.insert(tookParaAnim, {func = AnimSay, args = {elderh, "We all know what happens when you get frightened...", SAY_SAY, 4000}})
   145   table.insert(tookParaAnim, {func = AnimSay, args = {elderh, loc("We all know what happens when you get frightened..."), SAY_SAY, 4000}})
   145   table.insert(tookParaAnim, {func = AnimSay, args = {youngh, "So humiliating...", SAY_SAY, 4000}})
   146   table.insert(tookParaAnim, {func = AnimSay, args = {youngh, loc("So humiliating..."), SAY_SAY, 4000}})
   146   table.insert(tookParaAnim, {func = AnimShowMission, args = {youngh, "First Blood", "Omnivore", "Get on the head of the mole", 1, 4000}}) 
   147   table.insert(tookParaAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("Omnivore"), loc("Get on the head of the mole"), 1, 4000}}) 
   147   table.insert(tookParaAnim, {func = AnimSwitchHog, args = {youngh}})
   148   table.insert(tookParaAnim, {func = AnimSwitchHog, args = {youngh}})
   148 
   149 
   149   AddSkipFunction(onMoleHeadAnim, Skipanim, {onMoleHeadAnim})
   150   AddSkipFunction(onMoleHeadAnim, Skipanim, {onMoleHeadAnim})
   150   table.insert(onMoleHeadAnim, {func = AnimSay, args = {elderh, "Perfect! Now try to get the next crate without hurting yourself!", SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = onMoleHeadAnim})
   151   table.insert(onMoleHeadAnim, {func = AnimSay, args = {elderh, loc("Perfect! Now try to get the next crate without hurting yourself!"), SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = onMoleHeadAnim})
   151   table.insert(onMoleHeadAnim, {func = AnimSay, args = {elderh, "The giant umbrella from the last crate should help break the fall.", SAY_SAY, 4000}})
   152   table.insert(onMoleHeadAnim, {func = AnimSay, args = {elderh, loc("The giant umbrella from the last crate should help break the fall."), SAY_SAY, 4000}})
   152   table.insert(onMoleHeadAnim, {func = AnimSay, args = {princess, "He's so brave...", SAY_THINK, 4000}})
   153   table.insert(onMoleHeadAnim, {func = AnimSay, args = {princess, loc("He's so brave..."), SAY_THINK, 4000}})
   153   table.insert(onMoleHeadAnim, {func = AnimShowMission, args = {youngh, "First Blood", "The Leap of Faith", "Use the parachute ([Space] while in air) to get the next crate", 1, 4000}}) 
   154   table.insert(onMoleHeadAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The Leap of Faith"), loc("Use the parachute ([Space] while in air) to get the next crate"), 1, 4000}}) 
   154   table.insert(onMoleHeadAnim, {func = AnimSwitchHog, args = {youngh}})
   155   table.insert(onMoleHeadAnim, {func = AnimSwitchHog, args = {youngh}})
   155 
   156 
   156   AddSkipFunction(pastMoleHeadAnim, Skipanim, {pastMoleHeadAnim})
   157   AddSkipFunction(pastMoleHeadAnim, Skipanim, {pastMoleHeadAnim})
   157   table.insert(pastMoleHeadAnim, {func = AnimSay, args = {elderh, "I see you have already taken the leap of faith.", SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = pastMoleHeadAnim})
   158   table.insert(pastMoleHeadAnim, {func = AnimSay, args = {elderh, loc("I see you have already taken the leap of faith."), SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = pastMoleHeadAnim})
   158   table.insert(pastMoleHeadAnim, {func = AnimSay, args = {elderh, "Get that crate!", SAY_SAY, 4000}})
   159   table.insert(pastMoleHeadAnim, {func = AnimSay, args = {elderh, loc("Get that crate!"), SAY_SAY, 4000}})
   159   table.insert(pastMoleHeadAnim, {func = AnimSwitchHog, args = {youngh}})
   160   table.insert(pastMoleHeadAnim, {func = AnimSwitchHog, args = {youngh}})
   160 
   161 
   161   AddSkipFunction(tookRope2Anim, Skipanim, {tookRope2Anim})
   162   AddSkipFunction(tookRope2Anim, Skipanim, {tookRope2Anim})
   162   table.insert(tookRope2Anim, {func = AnimSay, args = {elderh, "Impressive...you are still dry as the corpse of a hawk after a week in the desert...", SAY_SAY, 5000}, skipFunc = Skipanim, skipArgs = tookRope2Anim})
   163   table.insert(tookRope2Anim, {func = AnimSay, args = {elderh, loc("Impressive...you are still dry as the corpse of a hawk after a week in the desert..."), SAY_SAY, 5000}, skipFunc = Skipanim, skipArgs = tookRope2Anim})
   163   table.insert(tookRope2Anim, {func = AnimSay, args = {elderh, "You probably know what to do next...", SAY_SAY, 4000}})
   164   table.insert(tookRope2Anim, {func = AnimSay, args = {elderh, loc("You probably know what to do next..."), SAY_SAY, 4000}})
   164   table.insert(tookRope2Anim, {func = AnimShowMission, args = {youngh, "First Blood", "The Rising", "Do the deed", 1, 4000}}) 
   165   table.insert(tookRope2Anim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The Rising"), loc("Do the deed"), 1, 4000}}) 
   165   table.insert(tookRope2Anim, {func = AnimSwitchHog, args = {youngh}})
   166   table.insert(tookRope2Anim, {func = AnimSwitchHog, args = {youngh}})
   166 
   167 
   167   AddSkipFunction(tookPunchAnim, Skipanim, {tookPunchAnim})
   168   AddSkipFunction(tookPunchAnim, Skipanim, {tookPunchAnim})
   168   table.insert(tookPunchAnim, {func = AnimTurn, args = {elderh, "Left"}, skipFunc = Skipanim, skipArgs = tookPunchAnim})
   169   table.insert(tookPunchAnim, {func = AnimTurn, args = {elderh, "Left"}, skipFunc = Skipanim, skipArgs = tookPunchAnim})
   169   table.insert(tookPunchAnim, {func = AnimSay, args = {elderh, "It is time to practice your fighting skills.", SAY_SAY, 4000}})
   170   table.insert(tookPunchAnim, {func = AnimSay, args = {elderh, loc("It is time to practice your fighting skills."), SAY_SAY, 4000}})
   170   table.insert(tookPunchAnim, {func = AnimSay, args = {elderh, "Imagine those targets are the wolves that killed your parents! Take your anger out on them!", SAY_SAY, 5000}})
   171   table.insert(tookPunchAnim, {func = AnimSay, args = {elderh, loc("Imagine those targets are the wolves that killed your parents! Take your anger out on them!"), SAY_SAY, 5000}})
   171   table.insert(tookPunchAnim, {func = AnimShowMission, args = {youngh, "First Blood", "The Slaughter", "Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air.", 1, 5000}}) 
   172   table.insert(tookPunchAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The Slaughter"), loc("Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."), 1, 5000}}) 
   172   table.insert(tookPunchAnim, {func = AnimSwitchHog, args = {youngh}})
   173   table.insert(tookPunchAnim, {func = AnimSwitchHog, args = {youngh}})
   173 
   174 
   174   AddSkipFunction(challengeAnim, Skipanim, {challengeAnim})
   175   AddSkipFunction(challengeAnim, Skipanim, {challengeAnim})
   175   table.insert(challengeAnim, {func = AnimSay, args = {elderh, "I hope you are prepared for a small challenge, young one.", SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = challengeAnim})
   176   table.insert(challengeAnim, {func = AnimSay, args = {elderh, loc("I hope you are prepared for a small challenge, young one."), SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = challengeAnim})
   176   table.insert(challengeAnim, {func = AnimSay, args = {elderh, "Your movement skills will be evaluated now.", SAY_SAY, 4000}})
   177   table.insert(challengeAnim, {func = AnimSay, args = {elderh, loc("Your movement skills will be evaluated now."), SAY_SAY, 4000}})
   177   table.insert(challengeAnim, {func = AnimSay, args = {elderh, "Collect all the crates, but remember, our time in this life is limited!", SAY_SAY, 4000}})
   178   table.insert(challengeAnim, {func = AnimSay, args = {elderh, loc("Collect all the crates, but remember, our time in this life is limited!"), SAY_SAY, 4000}})
   178   table.insert(challengeAnim, {func = AnimSay, args = {elderh, "How difficult would you like it to be?"}})
   179   table.insert(challengeAnim, {func = AnimSay, args = {elderh, loc("How difficult would you like it to be?")}})
   179   table.insert(challengeAnim, {func = AnimSwitchHog, args = {youngh}})
   180   table.insert(challengeAnim, {func = AnimSwitchHog, args = {youngh}})
   180   table.insert(challengeAnim, {func = AnimWait, args = {youngh, 500}})
   181   table.insert(challengeAnim, {func = AnimWait, args = {youngh, 500}})
   181 
   182 
   182   AddSkipFunction(challengeFailedAnim, Skipanim, {challengeFailedAnim})
   183   AddSkipFunction(challengeFailedAnim, Skipanim, {challengeFailedAnim})
   183   table.insert(challengeFailedAnim, {func = AnimSay, args = {elderh, "Hmmm...perhaps a little more time will help.", SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = challengeFailedAnim})
   184   table.insert(challengeFailedAnim, {func = AnimSay, args = {elderh, loc("Hmmm...perhaps a little more time will help."), SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = challengeFailedAnim})
   184   table.insert(challengeFailedAnim, {func = AnimShowMission, args = {youngh, "First Blood", "The Crate Frenzy", "Collect the crates within the time limit!|If you fail, you'll have to try again.", 1, 5000}}) 
   185   table.insert(challengeFailedAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The Crate Frenzy"), loc("Collect the crates within the time limit!|If you fail, you'll have to try again."), 1, 5000}}) 
   185   table.insert(challengeFailedAnim, {func = AnimSwitchHog, args = {youngh}})
   186   table.insert(challengeFailedAnim, {func = AnimSwitchHog, args = {youngh}})
   186 
   187 
   187   AddSkipFunction(challengeCompletedAnim, Skipanim, {challengeCompletedAnim})
   188   AddSkipFunction(challengeCompletedAnim, Skipanim, {challengeCompletedAnim})
   188   table.insert(challengeCompletedAnim, {func = AnimSay, args = {elderh, "The spirits of the ancerstors are surely pleased, Leaks A Lot.", SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = challengeCompletedAnim})
   189   table.insert(challengeCompletedAnim, {func = AnimSay, args = {elderh, loc("The spirits of the ancerstors are surely pleased, Leaks A Lot."), SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = challengeCompletedAnim})
   189   table.insert(challengeCompletedAnim, {func = AnimSay, args = {elderh, "You have proven yourself worthy to see our most ancient secret!", SAY_SAY, 4000}})
   190   table.insert(challengeCompletedAnim, {func = AnimSay, args = {elderh, loc("You have proven yourself worthy to see our most ancient secret!"), SAY_SAY, 4000}})
   190   table.insert(challengeCompletedAnim, {func = AnimSay, args = {elderh, "The weapon in that last crate was bestowed upon us by the ancients!", SAY_SAY, 4000}})
   191   table.insert(challengeCompletedAnim, {func = AnimSay, args = {elderh, loc("The weapon in that last crate was bestowed upon us by the ancients!"), SAY_SAY, 4000}})
   191   table.insert(challengeCompletedAnim, {func = AnimSay, args = {elderh, "Use it with precaution!", SAY_SAY, 4000}})
   192   table.insert(challengeCompletedAnim, {func = AnimSay, args = {elderh, loc("Use it with precaution!"), SAY_SAY, 4000}})
   192   table.insert(challengeCompletedAnim, {func = AnimShowMission, args = {youngh, "First Blood", "The Ultimate Weapon", "Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot", 1, 5000}}) 
   193   table.insert(challengeCompletedAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The Ultimate Weapon"), loc("Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"), 1, 5000}}) 
   193   table.insert(challengeCompletedAnim, {func = AnimSwitchHog, args = {youngh}})
   194   table.insert(challengeCompletedAnim, {func = AnimSwitchHog, args = {youngh}})
   194 
   195 
   195   AddSkipFunction(beforeKillAnim, Skipanim, {beforeKillAnim})
   196   AddSkipFunction(beforeKillAnim, Skipanim, {beforeKillAnim})
   196   table.insert(beforeKillAnim, {func = AnimSay, args = {elderh, "What do my faulty eyes observe? A spy!", SAY_SHOUT, 4000}, skipFunc = Skipanim, skipArgs = beforeKillAnim})
   197   table.insert(beforeKillAnim, {func = AnimSay, args = {elderh, loc("What do my faulty eyes observe? A spy!"), SAY_SHOUT, 4000}, skipFunc = Skipanim, skipArgs = beforeKillAnim})
   197   table.insert(beforeKillAnim, {func = AnimFollowGear, args = {cannibal}})
   198   table.insert(beforeKillAnim, {func = AnimFollowGear, args = {cannibal}})
   198   table.insert(beforeKillAnim, {func = AnimWait, args = {cannibal, 1000}})
   199   table.insert(beforeKillAnim, {func = AnimWait, args = {cannibal, 1000}})
   199   table.insert(beforeKillAnim, {func = AnimSay, args = {elderh, "Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!", SAY_SHOUT, 4000}})
   200   table.insert(beforeKillAnim, {func = AnimSay, args = {elderh, loc("Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"), SAY_SHOUT, 4000}})
   200   table.insert(beforeKillAnim, {func = AnimSay, args = {cannibal, "Oh, my!", SAY_THINK, 4000}})
   201   table.insert(beforeKillAnim, {func = AnimSay, args = {cannibal, loc("Oh, my!"), SAY_THINK, 4000}})
   201   table.insert(beforeKillAnim, {func = AnimShowMission, args = {youngh, "First Blood", "The First Blood", "Kill the cannibal!", 1, 5000}}) 
   202   table.insert(beforeKillAnim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The First Blood"), loc("Kill the cannibal!"), 1, 5000}}) 
   202   table.insert(beforeKillAnim, {func = AnimSwitchHog, args = {youngh}})
   203   table.insert(beforeKillAnim, {func = AnimSwitchHog, args = {youngh}})
   203   
   204   
   204   AddSkipFunction(closeCannim, Skipanim, {closeCannim})
   205   AddSkipFunction(closeCannim, Skipanim, {closeCannim})
   205   table.insert(closeCannim, {func = AnimSay, args = {elderh, "I see you would like his punishment to be more...personal...", SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = closeCannim})
   206   table.insert(closeCannim, {func = AnimSay, args = {elderh, loc("I see you would like his punishment to be more...personal..."), SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = closeCannim})
   206   table.insert(closeCannim, {func = AnimSay, args = {cannibal, "I'm certain that this is a misunderstanding, fellow hedgehogs!", SAY_SAY, 4000}})
   207   table.insert(closeCannim, {func = AnimSay, args = {cannibal, loc("I'm certain that this is a misunderstanding, fellow hedgehogs!"), SAY_SAY, 4000}})
   207   table.insert(closeCannim, {func = AnimSay, args = {cannibal, "If only I were given a chance to explain my being here...", SAY_SAY, 4000}})
   208   table.insert(closeCannim, {func = AnimSay, args = {cannibal, loc("If only I were given a chance to explain my being here..."), SAY_SAY, 4000}})
   208   table.insert(closeCannim, {func = AnimSay, args = {elderh, "Do not let his words fool you, young one! He will stab you in the back as soon as you turn away!", SAY_SAY, 6000}})
   209   table.insert(closeCannim, {func = AnimSay, args = {elderh, loc("Do not let his words fool you, young one! He will stab you in the back as soon as you turn away!"), SAY_SAY, 6000}})
   209   table.insert(closeCannim, {func = AnimSay, args = {elderh, "Here...pick your weapon!", SAY_SAY, 5000}})
   210   table.insert(closeCannim, {func = AnimSay, args = {elderh, loc("Here...pick your weapon!"), SAY_SAY, 5000}})
   210   table.insert(closeCannim, {func = AnimShowMission, args = {youngh, "First Blood", "The First Blood", "KILL IT!", 1, 5000}}) 
   211   table.insert(closeCannim, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("The First Blood"), loc("KILL IT!"), 1, 5000}}) 
   211   table.insert(closeCannim, {func = AnimSwitchHog, args = {youngh}})
   212   table.insert(closeCannim, {func = AnimSwitchHog, args = {youngh}})
   212 
   213 
   213   table.insert(cannKilledAnim, {func = AnimSay, args = {elderh, "Yes, yeees! You are now ready to enter the real world!", SAY_SHOUT, 6000}})
   214   table.insert(cannKilledAnim, {func = AnimSay, args = {elderh, loc("Yes, yeees! You are now ready to enter the real world!"), SAY_SHOUT, 6000}})
   214 
   215 
   215   table.insert(cannKilledEarlyAnim, {func = AnimSay, args = {elderh, "What?! A cannibal? Here? There is no time to waste! Come, you are prepared.", SAY_SHOUT, 4000}})
   216   table.insert(cannKilledEarlyAnim, {func = AnimSay, args = {elderh, loc("What?! A cannibal? Here? There is no time to waste! Come, you are prepared."), SAY_SHOUT, 4000}})
   216 end
   217 end
   217 -----------------------------Events------------------------------------
   218 -----------------------------Events------------------------------------
   218 
   219 
   219 function CheckDamage()
   220 function CheckDamage()
   220   return youngdamaged and StoppedGear(youngh) 
   221   return youngdamaged and StoppedGear(youngh) 
   233 function DoDeath()
   234 function DoDeath()
   234   RemoveEventFunc(CheckKilledOthers)
   235   RemoveEventFunc(CheckKilledOthers)
   235   RemoveEventFunc(CheckDamage)
   236   RemoveEventFunc(CheckDamage)
   236   RemoveEventFunc(CheckDamagedOthers)
   237   RemoveEventFunc(CheckDamagedOthers)
   237   FinishThem()
   238   FinishThem()
   238   ShowMission("First Blood", "The wasted youth", "Leaks A Lot gave his life for his tribe! He should have survived!", 2, 4000)
   239   ShowMission(loc("First Blood"), loc("The wasted youth"), loc("Leaks A Lot gave his life for his tribe! He should have survived!"), 2, 4000)
   239 end
   240 end
   240 
   241 
   241 function CheckDamagedOthers()
   242 function CheckDamagedOthers()
   242   return (princessDamaged and StoppedGear(princess)) or (elderDamaged and StoppedGear(elderh))
   243   return (princessDamaged and StoppedGear(princess)) or (elderDamaged and StoppedGear(elderh))
   243 end
   244 end
   257   princessDamaged = false
   258   princessDamaged = false
   258   AddFunction({func = ResetTurnTime, args = {}})
   259   AddFunction({func = ResetTurnTime, args = {}})
   259 end
   260 end
   260 
   261 
   261 function DoKilledOthers()
   262 function DoKilledOthers()
   262   AddCaption("After Leaks A Lot betrayed his tribe, he joined the cannibals...")
   263   AddCaption(loc("After Leaks A Lot betrayed his tribe, he joined the cannibals..."))
   263   FinishThem()
   264   FinishThem()
   264 end
   265 end
   265 
   266 
   266 function CheckMovedUntilJump()
   267 function CheckMovedUntilJump()
   267    return GetX(youngh) >= 2343
   268    return GetX(youngh) >= 2343
   268 end
   269 end
   269 
   270 
   270 function DoMovedUntilJump()
   271 function DoMovedUntilJump()
   271   ShowMission("First Blood", "Step By Step", "Hint: Double Jump - Press [Backspace] twice", -amSkip, 0)
   272   ShowMission(loc("First Blood"), loc("Step By Step"), loc("Hint: Double Jump - Press [Backspace] twice"), -amSkip, 0)
   272   AddEvent(CheckOnShroom, {}, DoOnShroom, {}, 0)
   273   AddEvent(CheckOnShroom, {}, DoOnShroom, {}, 0)
   273 end
   274 end
   274 
   275 
   275 function CheckOnShroom()
   276 function CheckOnShroom()
   276   return GetX(youngh) >= 2461
   277   return GetX(youngh) >= 2461
   388 end
   389 end
   389 
   390 
   390 function DoCratesColled()
   391 function DoCratesColled()
   391   RemoveEventFunc(CheckTimesUp)
   392   RemoveEventFunc(CheckTimesUp)
   392   TurnTimeLeft = -1
   393   TurnTimeLeft = -1
   393   AddCaption("As the challenge was completed, Leaks A Lot set foot on the ground...")
   394   AddCaption(loc("As the challenge was completed, Leaks A Lot set foot on the ground..."))
   394 end
   395 end
   395 
   396 
   396 function CheckChallengeWon()
   397 function CheckChallengeWon()
   397   return cratesCollected == crateNum[difficulty] and StoppedGear(youngh)
   398   return cratesCollected == crateNum[difficulty] and StoppedGear(youngh)
   398 end
   399 end
   413 
   414 
   414 function DoTimesUp()
   415 function DoTimesUp()
   415   challengeFailed = true
   416   challengeFailed = true
   416   DeleteGear(crates[1])
   417   DeleteGear(crates[1])
   417   TurnTimeLeft = -1
   418   TurnTimeLeft = -1
   418   AddCaption("And so happenned that Leaks A Lot failed to complete the challenge! He landed, pressured by shame...")
   419   AddCaption(loc("And so happenned that Leaks A Lot failed to complete the challenge! He landed, pressured by shame..."))
   419   AddEvent(CheckChallengeFailed, {}, DoChallengeFailed, {}, 0)
   420   AddEvent(CheckChallengeFailed, {}, DoChallengeFailed, {}, 0)
   420 end
   421 end
   421 
   422 
   422 function CheckChallengeFailed()
   423 function CheckChallengeFailed()
   423   return challengeFailed and StoppedGear(youngh)
   424   return challengeFailed and StoppedGear(youngh)
   438 function DoDesertColled()
   439 function DoDesertColled()
   439   AddAmmo(youngh, amDEagle, 100)
   440   AddAmmo(youngh, amDEagle, 100)
   440   PutTargets(1)
   441   PutTargets(1)
   441   AddEvent(CheckTargetsKilled, {}, DoTargetsKilled, {}, 1)
   442   AddEvent(CheckTargetsKilled, {}, DoTargetsKilled, {}, 1)
   442   AddEvent(CheckCannibalKilled, {}, DoCannibalKilledEarly, {}, 0)
   443   AddEvent(CheckCannibalKilled, {}, DoCannibalKilledEarly, {}, 0)
   443   ShowMission("First Blood", "The Bull's Eye", "[Up], [Down] to aim, [Space] to shoot!", 1, 5000)
   444   ShowMission(loc("First Blood"), loc("The Bull's Eye"), loc("[Up], [Down] to aim, [Space] to shoot!"), 1, 5000)
   444 end
   445 end
   445 
   446 
   446 function CheckTargetsKilled()
   447 function CheckTargetsKilled()
   447   return targetsDestroyed == 3 and StoppedGear(youngh)
   448   return targetsDestroyed == 3 and StoppedGear(youngh)
   448 end
   449 end
   449 
   450 
   450 function DoTargetsKilled()
   451 function DoTargetsKilled()
   451   targetsDestroyed = 0
   452   targetsDestroyed = 0
   452   targsWave = targsWave + 1
   453   targsWave = targsWave + 1
   453   if targsWave > 5 then
   454   if targsWave > 3 then
   454     RemoveEventFunc(CheckTargetsKilled)
   455     RemoveEventFunc(CheckTargetsKilled)
   455     SetState(cannibal, gstVisible)
   456     SetState(cannibal, gstVisible)
   456     cannibalVisible = true
   457     cannibalVisible = true
   457     AddAnim(beforeKillAnim)
   458     AddAnim(beforeKillAnim)
   458     AddEvent(CheckCloseToCannibal, {}, DoCloseToCannibal, {}, 0)
   459     AddEvent(CheckCloseToCannibal, {}, DoCloseToCannibal, {}, 0)
   493 -----------------------------Misc--------------------------------------
   494 -----------------------------Misc--------------------------------------
   494 function StartChallenge(time)
   495 function StartChallenge(time)
   495   cratesCollected = 0
   496   cratesCollected = 0
   496   PutCrate(1)
   497   PutCrate(1)
   497   TurnTimeLeft = time
   498   TurnTimeLeft = time
   498   ShowMission("First Blood", "The Crate Frenzy", "Collect the crates within the time limit!|If you fail, you'll have to try again.", 1, 5000) 
   499   ShowMission(loc("First Blood"), loc("The Crate Frenzy"), loc("Collect the crates within the time limit!|If you fail, you'll have to try again."), 1, 5000) 
   499 end
   500 end
   500 
   501 
   501 function SetChoice()
   502 function SetChoice()
   502   SetInputMask(band(0xFFFFFFFF, bnot(gmAnimate+gmAttack+gmDown+gmHJump+gmLJump+gmSlot+gmSwitch+gmTimer+gmUp+gmWeapon)))
   503   SetInputMask(band(0xFFFFFFFF, bnot(gmAnimate+gmAttack+gmDown+gmHJump+gmLJump+gmSlot+gmSwitch+gmTimer+gmUp+gmWeapon)))
   503   difficultyChoice = true
   504   difficultyChoice = true
   504   ShowMission("First Blood", "The Torment", "Select difficulty: [Left] - easier or [Right] - harder", 0, 4000)
   505   ShowMission(loc("First Blood"), loc("The Torment"), loc("Select difficulty: [Left] - easier or [Right] - harder"), 0, 4000)
   505   AddEvent(CheckChoice, {}, DoChoice, {}, 0) 
   506   AddEvent(CheckChoice, {}, DoChoice, {}, 0) 
   506 end
   507 end
   507 
   508 
   508 function SetTime(time)
   509 function SetTime(time)
   509   TurnTimeLeft = time
   510   TurnTimeLeft = time
   549 	Delay = 10 
   550 	Delay = 10 
   550 	MapGen = 0
   551 	MapGen = 0
   551 	Theme = "Nature"
   552 	Theme = "Nature"
   552 
   553 
   553 
   554 
   554 	AddTeam("Natives", 2567585, "Bone", "Island", "HillBilly", "cm_birdy")
   555 	AddTeam(loc("Natives"), 29439, "Bone", "Island", "HillBilly", "cm_birdy")
   555 	youngh = AddHog("Leaks A Lot", 0, 100, "Rambo")
   556 	youngh = AddHog(loc("Leaks A Lot"), 0, 100, "Rambo")
   556   elderh = AddHog("White Raven", 0, 99, "IndianChief")
   557   elderh = AddHog(loc("White Raven"), 0, 99, "IndianChief")
   557   princess = AddHog("Fell From Heaven", 0, 300, "tiara")
   558   princess = AddHog(loc("Fell From Heaven"), 0, 300, "tiara")
   558   SetGearPosition(princess, 1911, 1361)
   559   SetGearPosition(princess, 1911, 1361)
   559   HogTurnLeft(princess, true)
   560   HogTurnLeft(princess, true)
   560   SetGearPosition(elderh, 2667, 1208)
   561   SetGearPosition(elderh, 2667, 1208)
   561   HogTurnLeft(elderh, true)
   562   HogTurnLeft(elderh, true)
   562   SetGearPosition(youngh, 1862, 1362)
   563   SetGearPosition(youngh, 1862, 1362)
   563   HogTurnLeft(youngh, false)
   564   HogTurnLeft(youngh, false)
   564 
   565 
   565   AddTeam("Cannibals", 14483456, "Skull", "Island", "Pirate","cm_vampire")
   566   AddTeam(loc("Cannibals"), 14483456, "Skull", "Island", "Pirate","cm_vampire")
   566   cannibal = AddHog("Brainiac", 0, 5, "Zombi")
   567   cannibal = AddHog(loc("Brainiac"), 0, 5, "Zombi")
   567   SetGearPosition(cannibal, 525, 1256)
   568   SetGearPosition(cannibal, 525, 1256)
   568   HogTurnLeft(cannibal, false)
   569   HogTurnLeft(cannibal, false)
   569   
   570   
   570   AnimInit()
   571   AnimInit()
   571   AnimationSetup()
   572   AnimationSetup()
   572 end
   573 end
   573 
   574 
   574 function onGameStart()
   575 function onGameStart()
   575   TurnTimeLeft = -1
   576   TurnTimeLeft = -1
   576   FollowGear(youngh)
   577   FollowGear(youngh)
   577 	ShowMission("A Classic Fairytale", "First Blood", "Finish your training|Hint: Animations can be skipped with the [Precise] key.", -amSkip, 0)
   578 	ShowMission(loc("A Classic Fairytale"), loc("First Blood"), loc("Finish your training|Hint: Animations can be skipped with the [Precise] key."), -amSkip, 0)
   578   SetState(cannibal, gstInvisible)
   579   SetState(cannibal, gstInvisible)
   579 
   580 
   580   AddAnim(startDialogue)
   581   AddAnim(startDialogue)
   581   AddEvent(CheckDamage, {}, DoOnDamage, {}, 1)
   582   AddEvent(CheckDamage, {}, DoOnDamage, {}, 1)
   582   AddEvent(CheckDeath, {}, DoDeath, {}, 0)
   583   AddEvent(CheckDeath, {}, DoDeath, {}, 0)