diff -r 5cc010e79431 -r 4bddcc1a1450 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/journey.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/journey.lua Mon Jul 01 23:23:22 2013 +0300 @@ -0,0 +1,1077 @@ +HedgewarsScriptLoad("/Scripts/Locale.lua") +HedgewarsScriptLoad("/Scripts/Animate.lua") + +--///////////////////////////////CONSTANTS/////////////////////////// + +choiceAccepted = 1 +choiceRefused = 2 +choiceAttacked = 3 + +endStage = 1 + +cannibalNum = 8 +cannibalNames = {loc("John"), loc("Flesh for Brainz"), loc("Eye Chewer"), loc("Torn Muscle"), + loc("Nom-Nom"), loc("Vedgies"), loc("Brain Blower"), loc("Gorkij")} +cannibalPos = {{2471, 1174}, {939, 1019}, {1953, 902}, {3055, 1041}, + {1121, 729}, {1150, 718}, {1149, 680}, {1161, 773}} + +startLeaksPosDuo = {3572, 1426} +startEventXDuo = 3300 +startDensePosDuo = {3454, 1471} +startCyborgPosDuo = {3202, 1307} +midDensePosDuo = {1464, 1410} +midCyborgPosDuo = {1264, 1390} + +--///////////////////////////////VARIABLES/////////////////////////// + +m2Choice = 0 +m2DenseDead = 0 +m2RamonDead = 0 +m2SpikyDead = 0 + +TurnsLeft = 0 +stage = 0 + +--cyborgHidden = false +--princessHidden = false +blowTaken = false +fireTaken = false +gravityTaken = false +sniperTaken = false +girderTaken = false +girder1Taken = false +girder2Taken = false +leaksDead = false +denseDead = false +princessDead = false +cyborgDead = false +cannibalDead = {} +hedgeHidden = {} + +startAnim = {} +startAnimAD = {} +startAnimAL = {} +startAnimRL = {} + +pastFlowerAnimAL = {} +pastFlowerAnimRL = {} +pastFlowerAnim = {} + +outPitAnimAL = {} +outPitAnimRL = {} +outPitAnim = {} + +midAnim = {} +midAnimAD = {} + +failAnim = {} +failAnimAD = {} + +endAnim = {} +endAnimAD = {} +endAnimAL = {} +endAnimRL = {} + +endFailAnim = {} +endFailAnimAD = {} + +winAnim = {} +winAnimAD = {} + +--/////////////////////////Animation Functions/////////////////////// +function AfterMidFailAnim() + ParseCommand("teamgone " .. loc("Natives")) + TurnTimeLeft = 0 +end + +function AfterMidAnimAlone() + SetupCourse() + for i = 5, 8 do + RestoreHedge(cannibals[i]) + AnimSetGearPosition(cannibals[i], unpack(cannibalPos[i])) + end + + AddAmmo(cannibals[5], amDEagle, 0) + + AddEvent(CheckGirderTaken, {}, DoGirderTaken, {}, 0) + AddEvent(CheckOnFirstGirder, {}, DoOnFirstGirder, {}, 0) + AddEvent(CheckTookSniper, {}, DoTookSniper, {}, 0) + AddEvent(CheckFailedCourse, {}, DoFailedCourse, {}, 0) + SetGearMessage(leaks, 0) + TurnsLeft = 12 + TurnTimeLeft = TurnTime + ShowMission(loc("The Journey Back"), loc("Collateral Damage"), loc("Save the princess by collecting the crate in under 12 turns!"), 0, 6000) + -----------------------///////////////------------ + --AnimSetGearPosition(leaks, 417, 1800) +end + +function SkipEndAnimAlone() + RestoreHedge(cyborg) + RestoreHedge(princess) + AnimSetGearPosition(cyborg, 437, 1700) + AnimSetGearPosition(princess, 519, 1722) +end + +function SkipEndAnimDuo() + RestoreHedge(cyborg) + RestoreHedge(princess) + if princessHidden then + RestoreHog(princess) + princessHidden = false + end + AnimSetGearPosition(cyborg, 437, 1700) + AnimSetGearPosition(princess, 519, 1722) + AnimSetGearPosition(leaks, 763, 1760) + AnimSetGearPosition(dense, 835, 1519) + HogTurnLeft(leaks, true) + HogTurnLeft(dense, true) +end + +function AfterEndAnimAlone() + stage = endStage + SwitchHog(leaks) + SetGearMessage(leaks, 0) + TurnTimeLeft = -1 + ShowMission(loc("The Journey Back"), loc("Collateral Damage II"), loc("Save Fell From Heaven!"), 1, 4000) + AddEvent(CheckLost, {}, DoLost, {}, 0) + AddEvent(CheckWon, {}, DoWon, {}, 0) + RemoveEventFunc(CheckFailedCourse) +end + +function AfterEndAnimDuo() + stage = endStage + SwitchHog(leaks) + SetGearMessage(leaks, 0) + SetGearMessage(dense, 0) + TurnTimeLeft = -1 + ShowMission(loc("The Journey Back"), loc("Collateral Damage II"), loc("Save Fell From Heaven!"), 1, 4000) + AddEvent(CheckLost, {}, DoLost, {}, 0) + AddEvent(CheckWon, {}, DoWon, {}, 0) +end + +function SkipMidAnimAlone() + AnimSetGearPosition(leaks, 2656, 1842) + AnimSwitchHog(leaks) + SetInputMask(0xFFFFFFFF) + AnimWait(dense, 1) + AddFunction({func = HideHedge, args = {princess}}) + AddFunction({func = HideHedge, args = {cyborg}}) +end + +function AfterStartAnim() + SetGearMessage(leaks, 0) + TurnTimeLeft = TurnTime + local goal = loc("Get the crate on the other side of the island!|") + local hint = loc("Hint: you might want to stay out of sight and take all the crates...|") + local stuck = loc("If you get stuck, use your Desert Eagle or restart the mission!|") + local conds = loc("Leaks A Lot must survive!") + if m2DenseDead == 0 then + conds = loc("Your hogs must survive!") + end + ShowMission(loc("The Journey Back"), loc("Adventurous"), goal .. hint .. stuck .. conds, 0, 7000) +end + +function SkipStartAnim() + AnimSwitchHog(leaks) +end + +function PlaceCratesDuo() + SpawnAmmoCrate(3090, 827, amBaseballBat) + girderCrate1 = SpawnUtilityCrate(2466, 1814, amGirder) + girderCrate2 = SpawnUtilityCrate(2630, 1278, amGirder) + SpawnUtilityCrate(2422, 1810, amParachute) + SpawnUtilityCrate(3157, 1009, amLowGravity) + sniperCrate = SpawnAmmoCrate(784, 1715, amSniperRifle) +end + +function PlaceMinesDuo() + SetTimer(AddGear(2920, 1448, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2985, 1338, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(3005, 1302, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(3030, 1270, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(3046, 1257, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2954, 1400, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2967, 1385, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2849, 1449, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2811, 1436, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2773, 1411, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2732, 1390, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2700, 1362, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2642, 1321, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2172, 1417, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2190, 1363, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2219, 1332, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1201, 1207, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1247, 1205, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1295, 1212, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1356, 1209, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1416, 1201, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1466, 1201, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1678, 1198, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1738, 1198, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1796, 1198, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1637, 1217, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1519, 1213, gtMine, 0, 0, 0, 0), 5000) +end + +function AfterPastFlowerAnim() + PlaceMinesDuo() + AddEvent(CheckDensePit, {}, DoDensePit, {}, 0) + AddEvent(CheckTookGirder1, {}, DoTookGirder1, {}, 0) + AddEvent(CheckTookGirder2, {}, DoTookGirder2, {}, 0) + SetGearMessage(leaks, 0) + SetGearMessage(dense, 0) + TurnTimeLeft = 0 + ShowMission(loc("The Journey Back"), loc("The Savior"), loc("Get Dense Cloud out of the pit!"), 1, 5000) +end + +function SkipPastFlowerAnim() + AnimSetGearPosition(dense, 2656, 1842) + AnimSwitchHog(dense) + AnimWait(dense, 1) + AddFunction({func = HideHedge, args = {cyborg}}) +end + +function AfterOutPitAnim() + SetupCourseDuo() + RestoreHedge(cannibals[5]) + AddAmmo(cannibals[5], amDEagle, 0) + HideHedge(cannibals[5]) + AddEvent(CheckTookFire, {}, DoTookFire, {}, 0) + SetGearMessage(leaks, 0) + SetGearMessage(dense, 0) + TurnTimeLeft = 0 + ShowMission(loc("The Journey Back"), loc("They never learn"), loc("Free Dense Cloud and continue the mission!"), 1, 5000) +end + +function SkipOutPitAnim() + AnimSetGearPosition(dense, unpack(midDensePosDuo)) + AnimSwitchHog(dense) + AnimWait(dense, 1) + AddFunction({func = HideHedge, args = {cyborg}}) +end + +function RestoreCyborg(x, y, xx, yy) + RestoreHedge(cyborg) + RestoreHedge(princess) + AnimOutOfNowhere(cyborg, x, y) + AnimOutOfNowhere(princess, xx, yy) + HogTurnLeft(princess, false) + return true +end + +function RestoreCyborgOnly(x, y) + RestoreHedge(cyborg) + SetState(cyborg, 0) + AnimOutOfNowhere(cyborg, x, y) + return true +end + +function TargetPrincess() + ParseCommand("setweap " .. string.char(amDEagle)) + SetGearMessage(cyborg, gmUp) + return true +end + +function HideCyborg() + HideHedge(cyborg) + HideHedge(princess) +end + +function HideCyborgOnly() + HideHedge(cyborg) +end + +function SetupKillRoom() + PlaceGirder(2342, 1814, 2) + PlaceGirder(2294, 1783, 0) + PlaceGirder(2245, 1814, 2) +end + +function SetupCourseDuo() + PlaceGirder(1083, 1152, 6) + PlaceGirder(1087, 1150, 6) + PlaceGirder(1133, 1155, 0) + PlaceGirder(1135, 1152, 0) + PlaceGirder(1135, 1078, 0) + PlaceGirder(1087, 1016, 2) + PlaceGirder(1018, 921, 5) + PlaceGirder(1016, 921, 5) + PlaceGirder(962, 782, 6) + PlaceGirder(962, 662, 2) + PlaceGirder(962, 661, 2) + PlaceGirder(962, 650, 2) + PlaceGirder(962, 630, 2) + PlaceGirder(1033, 649, 0) + PlaceGirder(952, 650, 0) + + fireCrate = SpawnAmmoCrate(1846, 1100, amFirePunch) + SpawnUtilityCrate(1900, 1100, amPickHammer) + SpawnAmmoCrate(950, 674, amDynamite) + SpawnUtilityCrate(994, 825, amRope) + SpawnUtilityCrate(570, 1357, amLowGravity) +end + +function DumpMines() + SetTimer(AddGear(2261, 1835, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2280, 1831, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2272, 1809, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2290, 1815, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2278, 1815, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2307, 1811, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2286, 1820, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2309, 1813, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2303, 1822, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2317, 1827, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2312, 1816, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2316, 1812, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2307, 1802, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2276, 1818, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2284, 1816, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2292, 1811, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2295, 1814, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2306, 1811, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2292, 1815, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2314, 1815, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2286, 1813, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2275, 1813, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2269, 1814, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2273, 1812, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2300, 1808, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2322, 1812, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2323, 1813, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2311, 1811, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2303, 1809, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2287, 1808, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2282, 1808, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2277, 1809, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2296, 1809, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(2314, 1818, gtMine, 0, 0, 0, 0), 5000) +end + +function SetupAnimRefusedDied() + SetupAnimAcceptedDied() + table.insert(startAnim, {func = AnimSay, args = {leaks, loc("I just wonder where Ramon and Spiky disappeared..."), SAY_THINK, 6000}}) +end + +function SetupAnimAttacked() + SetupAnimAcceptedDied() + startAnim = {} + table.insert(startAnim, {func = AnimWait, args = {leaks, 3000}}) + table.insert(startAnim, {func = AnimTurn, args = {leaks, "Left"}}) + table.insert(startAnim, {func = AnimSay, args = {leaks, loc("I wonder where Dense Cloud is..."), SAY_THINK, 4000}}) + table.insert(startAnim, {func = AnimSay, args = {leaks, loc("He must be in the village already."), SAY_THINK, 4000}}) + table.insert(startAnim, {func = AnimSay, args = {leaks, loc("I'd better get going myself."), SAY_THINK, 4000}}) + + midAnim = {} + table.insert(midAnim, {func = AnimWait, args = {leaks, 500}}) + table.insert(midAnim, {func = AnimCustomFunction, swh = false, args = {leaks, RestoreCyborg, {1300, 1200, 1390, 1200}}}) + table.insert(midAnim, {func = AnimSwitchHog, args = {cyborg}}) + table.insert(midAnim, {func = AnimCustomFunction, args = {cyborg, TargetPrincess, {}}}) + table.insert(midAnim, {func = AnimSay, args = {cyborg, loc("Welcome, Leaks A Lot!"), SAY_SAY, 3000}}) + table.insert(midAnim, {func = AnimSay, args = {cyborg, loc("I want to play a game..."), SAY_SAY, 3000}}) + table.insert(midAnim, {func = AnimSay, args = {princess, loc("Help me, please!!!"), SAY_SHOUT, 3000}}) + table.insert(midAnim, {func = AnimSay, args = {cyborg, loc("If you can get that crate fast enough, your beloved \"princess\" may go free."), SAY_SAY, 7000}}) + table.insert(midAnim, {func = AnimSay, args = {cyborg, loc("However, if you fail to do so, she dies a most violent death! Muahahaha!"), SAY_SAY, 8000}}) + table.insert(midAnim, {func = AnimSay, args = {cyborg, loc("Good luck...or else!"), SAY_SAY, 4000}}) + table.insert(midAnim, {func = AnimTeleportGear, args = {leaks, 2656, 1842}}) + table.insert(midAnim, {func = AnimCustomFunction, args = {cyborg, HideCyborg, {}}, swh = false}) + table.insert(midAnim, {func = AnimSay, args = {leaks, loc("Hey! This is cheating!"), SAY_SHOUT, 4000}}) + AddSkipFunction(midAnim, SkipMidAnimAlone, {}) +end + +function SetupAnimAcceptedDied() + table.insert(startAnimAD, {func = AnimWait, args = {leaks, 3000}}) + table.insert(startAnimAD, {func = AnimTurn, args = {leaks, "Left"}}) + table.insert(startAnimAD, {func = AnimSay, args = {leaks, loc("I need to get to the other side of this island, fast!"), SAY_THINK, 5000}}) + table.insert(startAnimAD, {func = AnimSay, args = {leaks, loc("With Dense Cloud on the land of shadows, I'm the village's only hope..."), SAY_THINK, 7000}}) + + table.insert(midAnimAD, {func = AnimWait, args = {leaks, 500}}) + table.insert(midAnimAD, {func = AnimCustomFunction, swh = false, args = {leaks, RestoreCyborg, {1300, 1200, 1390, 1200}}}) + table.insert(midAnimAD, {func = AnimSwitchHog, args = {cyborg}}) + table.insert(midAnimAD, {func = AnimCustomFunction, args = {cyborg, TargetPrincess, {}}}) + table.insert(midAnimAD, {func = AnimSay, args = {cyborg, loc("Welcome, Leaks A Lot!"), SAY_SAY, 3000}}) + table.insert(midAnimAD, {func = AnimSay, args = {cyborg, loc("I want to play a game..."), SAY_SAY, 3000}}) + table.insert(midAnimAD, {func = AnimSay, args = {princess, loc("Help me, please!!!"), SAY_SHOUT, 3000}}) + table.insert(midAnimAD, {func = AnimSay, args = {cyborg, loc("If you can get that crate fast enough, your beloved \"princess\" may go free."), SAY_SAY, 7000}}) + table.insert(midAnimAD, {func = AnimSay, args = {cyborg, loc("However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"), SAY_SAY, 8000}}) + table.insert(midAnimAD, {func = AnimSay, args = {cyborg, loc("Good luck...or else!"), SAY_SAY, 4000}}) + table.insert(midAnimAD, {func = AnimTeleportGear, args = {leaks, 2656, 1842}}) + table.insert(midAnimAD, {func = AnimCustomFunction, args = {cyborg, HideCyborg, {}}, swh = false}) + table.insert(midAnimAD, {func = AnimSay, args = {leaks, loc("Hey! This is cheating!"), SAY_SHOUT, 4000}}) + AddSkipFunction(midAnimAD, SkipMidAnimAlone, {}) + + table.insert(failAnimAD, {func = AnimCustomFunction, swh = false, args = {leaks, RestoreCyborg, {2299, 1687, 2294, 1841}}}) + table.insert(failAnimAD, {func = AnimTeleportGear, args = {leaks, 2090, 1841}}) + table.insert(failAnimAD, {func = AnimCustomFunction, swh = false, args = {cyborg, SetupKillRoom, {}}}) + table.insert(failAnimAD, {func = AnimTurn, swh = false, args = {cyborg, "Left"}}) + table.insert(failAnimAD, {func = AnimTurn, swh = false, args = {princess, "Left"}}) + table.insert(failAnimAD, {func = AnimTurn, swh = false, args = {leaks, "Right"}}) + table.insert(failAnimAD, {func = AnimWait, args = {cyborg, 1000}}) + table.insert(failAnimAD, {func = AnimSay, args = {cyborg, loc("You have failed to complete your task, young one!"), SAY_SAY, 6000}}) + table.insert(failAnimAD, {func = AnimSay, args = {cyborg, loc("It's time you learned that your actions have consequences!"), SAY_SAY, 7000}}) + table.insert(failAnimAD, {func = AnimSay, args = {princess, loc("No! Please, help me!"), SAY_SAY, 4000}}) + table.insert(failAnimAD, {func = AnimSwitchHog, args = {cyborg}}) + table.insert(failAnimAD, {func = AnimCustomFunction, args = {cyborg, DumpMines, {}}}) + table.insert(failAnimAD, {func = AnimCustomFunction, args = {cyborg, KillPrincess, {}}}) + table.insert(failAnimAD, {func = AnimWait, args = {cyborg, 12000}}) + table.insert(failAnimAD, {func = AnimSay, args = {leaks, loc("No! What have I done?! What have YOU done?!"), SAY_SHOUT, 6000}}) + + table.insert(endAnimAD, {func = AnimCustomFunction, swh = false, args = {leaks, RestoreCyborg, {437, 1700, 519, 1722}}}) + table.insert(endAnimAD, {func = AnimTurn, swh = false, args = {cyborg, "Right"}}) + table.insert(endAnimAD, {func = AnimTurn, swh = false, args = {princess, "Right"}}) + table.insert(endAnimAD, {func = AnimSay, args = {princess, loc("Help me, Leaks!"), SAY_SHOUT, 3000}}) + table.insert(endAnimAD, {func = AnimSay, args = {leaks, loc("But you said you'd let her go!"), SAY_SHOUT, 5000}}) + table.insert(endAnimAD, {func = AnimSay, args = {cyborg, loc("And you believed me? Oh, god, that's cute!"), SAY_SHOUT, 7000}}) + table.insert(endAnimAD, {func = AnimSay, args = {leaks, loc("I won't let you kill her!"), SAY_SHOUT, 4000}}) + AddSkipFunction(endAnimAD, SkipEndAnimAlone, {}) + + table.insert(endFailAnim, {func = AnimCaption, args = {leaks, loc("Leaks A Lot, depressed for killing his loved one, failed to save the village..."), 3000}}) + + table.insert(winAnimAD, {func = AnimCustomFunction, args = {princess, CondNeedToTurn, {leaks, princess}}}) + table.insert(winAnimAD, {func = AnimSay, args = {princess, loc("Thank you, oh, thank you, Leaks A Lot!"), SAY_SAY, 5000}}) + table.insert(winAnimAD, {func = AnimSay, args = {princess, loc("How can I ever repay you for saving my life?"), SAY_SAY, 6000}}) + table.insert(winAnimAD, {func = AnimSay, args = {leaks, loc("There's nothing more satisfying for me than seeing you share your beauty with the world every morning, my princess!"), SAY_SAY, 10000}}) + table.insert(winAnimAD, {func = AnimSay, args = {leaks, loc("Let's go home!"), SAY_SAY, 3000}}) + table.insert(winAnimAD, {func = AnimCaption, args = {leaks, loc("And so they discovered that cyborgs weren't invulnerable..."), 2000}}) + + startAnim = startAnimAD + midAnim = midAnimAD + failAnim = failAnimAD + endAnim = endAnimAD + endFailAnim = endFailAnimAD + winAnim = winAnimAD +end + +function SetupAnimAcceptedLived() + table.insert(startAnimAL, {func = AnimWait, args = {leaks, 3000}}) + table.insert(startAnimAL, {func = AnimCustomFunction, args = {dense, CondNeedToTurn, {leaks, dense}}}) + table.insert(startAnimAL, {func = AnimSay, args = {leaks, loc("All right, we just need to get to the other side of the island!"), SAY_SAY, 8000}}) + table.insert(startAnimAL, {func = AnimSay, args = {dense, loc("We have no time to waste..."), SAY_SAY, 4000}}) + table.insert(startAnimAL, {func = AnimSwitchHog, args = {leaks}}) + AddSkipFunction(startAnimAL, SkipStartAnim, {}) + + table.insert(pastFlowerAnimAL, {func = AnimCustomFunction, args = {dense, RestoreCyborgOnly, {unpack(startCyborgPosDuo)}}, swh = false}) + table.insert(pastFlowerAnimAL, {func = AnimTurn, args = {cyborg, "Right"}}) + table.insert(pastFlowerAnimAL, {func = AnimSay, args = {cyborg, loc("Well, well! Isn't that the cutest thing you've ever seen?"), SAY_SAY, 7000}}) + table.insert(pastFlowerAnimAL, {func = AnimSay, args = {cyborg, loc("Two little hogs cooperating, getting past obstacles..."), SAY_SAY, 7000}}) + table.insert(pastFlowerAnimAL, {func = AnimSay, args = {cyborg, loc("Let me test your skills a little, will you?"), SAY_SAY, 6000}}) + table.insert(pastFlowerAnimAL, {func = AnimTeleportGear, args = {cyborg, 2456, 1842}}) + table.insert(pastFlowerAnimAL, {func = AnimTeleportGear, args = {dense, 2656, 1842}}) + table.insert(pastFlowerAnimAL, {func = AnimCustomFunction, args = {dense, CondNeedToTurn, {cyborg, dense}}}) + table.insert(pastFlowerAnimAL, {func = AnimSay, args = {dense, loc("Why are you doing this?"), SAY_SAY, 4000}}) + table.insert(pastFlowerAnimAL, {func = AnimSay, args = {cyborg, loc("To help you, of course!"), SAY_SAY, 4000}}) + table.insert(pastFlowerAnimAL, {func = AnimSwitchHog, args = {dense}}) + table.insert(pastFlowerAnimAL, {func = AnimDisappear, swh = false, args = {cyborg, 3781, 1583}}) + table.insert(pastFlowerAnimAL, {func = AnimCustomFunction, swh = false, args = {cyborg, HideCyborgOnly, {}}}) + AddSkipFunction(pastFlowerAnimAL, SkipPastFlowerAnim, {}) + + table.insert(outPitAnimAL, {func = AnimCustomFunction, args = {dense, RestoreCyborgOnly, {unpack(midCyborgPosDuo)}}, swh = false}) + table.insert(outPitAnimAL, {func = AnimTurn, args = {cyborg, "Right"}}) + table.insert(outPitAnimAL, {func = AnimTeleportGear, args = {dense, unpack(midDensePosDuo)}}) + table.insert(outPitAnimAL, {func = AnimTurn, args = {dense, "Left"}}) + table.insert(outPitAnimAL, {func = AnimSay, args = {dense, loc("OH, COME ON!"), SAY_SHOUT, 3000}}) + table.insert(outPitAnimAL, {func = AnimSay, args = {cyborg, loc("Let's see what your comrade does now!"), SAY_SAY, 5000}}) + table.insert(outPitAnimAL, {func = AnimSwitchHog, args = {dense}}) + table.insert(outPitAnimAL, {func = AnimDisappear, swh = false, args = {cyborg, 3781, 1583}}) + table.insert(outPitAnimAL, {func = AnimCustomFunction, swh = false, args = {cyborg, HideCyborgOnly, {}}}) + AddSkipFunction(outPitAnimAL, SkipOutPitAnim, {}) + + table.insert(endAnim, {func = AnimCustomFunction, swh = false, args = {leaks, RestoreCyborg, {437, 1700, 519, 1722}}}) + table.insert(endAnim, {func = AnimTeleportGear, args = {leaks, 763, 1760}}) + table.insert(endAnim, {func = AnimTeleportGear, args = {dense, 835, 1519}}) + table.insert(endAnim, {func = AnimTurn, swh = false, args = {leaks, "Left"}}) + table.insert(endAnim, {func = AnimTurn, swh = false, args = {dense, "Left"}}) + table.insert(endAnim, {func = AnimTurn, swh = false, args = {cyborg, "Right"}}) + table.insert(endAnim, {func = AnimTurn, swh = false, args = {princess, "Right"}}) + table.insert(endAnim, {func = AnimSay, args = {princess, loc("Help me, please!"), SAY_SHOUT, 3000}}) + table.insert(endAnim, {func = AnimSay, args = {leaks, loc("What are you doing? Let her go!"), SAY_SHOUT, 5000}}) + table.insert(endAnim, {func = AnimSay, args = {cyborg, loc("Yeah? Watcha gonna do? Cry?"), SAY_SHOUT, 5000}}) + table.insert(endAnim, {func = AnimSay, args = {leaks, loc("We won't let you hurt her!"), SAY_SHOUT, 4000}}) + AddSkipFunction(endAnim, SkipEndAnimDuo, {}) + + table.insert(endFailAnim, {func = AnimCaption, args = {leaks, loc("Leaks A Lot, depressed for killing his loved one, failed to save the village..."), 3000}}) + + table.insert(winAnim, {func = AnimCustomFunction, args = {princess, CondNeedToTurn, {leaks, princess}}}) + table.insert(winAnim, {func = AnimSay, args = {princess, loc("Thank you, oh, thank you, my heroes!"), SAY_SAY, 5000}}) + table.insert(winAnim, {func = AnimSay, args = {princess, loc("How can I ever repay you for saving my life?"), SAY_SAY, 6000}}) + table.insert(winAnim, {func = AnimSay, args = {leaks, loc("There's nothing more satisfying to us than seeing you share your beauty..."), SAY_SAY, 7000}}) + table.insert(winAnim, {func = AnimSay, args = {leaks, loc("... share your beauty with the world every morning, my princess!"), SAY_SAY, 7000}}) + table.insert(winAnim, {func = AnimSay, args = {leaks, loc("Let's go home!"), SAY_SAY, 3000}}) + table.insert(winAnim, {func = AnimCaption, args = {leaks, loc("And so they discovered that cyborgs weren't invulnerable..."), 2000}}) + + startAnim = startAnimAL + pastFlowerAnim = pastFlowerAnimAL + outPitAnim = outPitAnimAL +end + +function SetupAnimRefusedLived() + table.insert(startAnimRL, {func = AnimWait, args = {leaks, 3000}}) + table.insert(startAnimRL, {func = AnimCustomFunction, args = {dense, CondNeedToTurn, {leaks, dense}}}) + table.insert(startAnimRL, {func = AnimSay, args = {leaks, loc("All right, we just need to get to the other side of the island!"), SAY_SAY, 7000}}) + table.insert(startAnimRL, {func = AnimSay, args = {dense, loc("Dude, can you see Ramon and Spiky?"), SAY_SAY, 5000}}) + table.insert(startAnimRL, {func = AnimSay, args = {leaks, loc("No...I wonder where they disappeared?!"), SAY_SAY, 5000}}) + AddSkipFunction(startAnimRL, SkipStartAnim, {}) + + table.insert(pastFlowerAnimRL, {func = AnimCustomFunction, args = {dense, RestoreCyborgOnly, {unpack(startCyborgPosDuo)}}, swh = false}) + table.insert(pastFlowerAnimRL, {func = AnimTurn, args = {cyborg, "Right"}}) + table.insert(pastFlowerAnimRL, {func = AnimSay, args = {cyborg, loc("Well, well! Isn't that the cutest thing you've ever seen?"), SAY_SAY, 7000}}) + table.insert(pastFlowerAnimRL, {func = AnimSay, args = {cyborg, loc("Two little hogs cooperating, getting past obstacles..."), SAY_SAY, 7000}}) + table.insert(pastFlowerAnimRL, {func = AnimSay, args = {cyborg, loc("Let me test your skills a little, will you?"), SAY_SAY, 6000}}) + table.insert(pastFlowerAnimRL, {func = AnimTeleportGear, args = {cyborg, 2456, 1842}}) + table.insert(pastFlowerAnimRL, {func = AnimTeleportGear, args = {dense, 2656, 1842}}) + table.insert(pastFlowerAnimRL, {func = AnimCustomFunction, args = {dense, CondNeedToTurn, {cyborg, dense}}}) + table.insert(pastFlowerAnimRL, {func = AnimSay, args = {dense, loc("Why are you doing this?"), SAY_SAY, 4000}}) + table.insert(pastFlowerAnimRL, {func = AnimSay, args = {cyborg, loc("You couldn't possibly believe that after refusing my offer I'd just let you go!"), SAY_SAY, 9000}}) + table.insert(pastFlowerAnimRL, {func = AnimSay, args = {cyborg, loc("You're funny!"), SAY_SAY, 4000}}) + table.insert(pastFlowerAnimRL, {func = AnimSwitchHog, args = {dense}}) + table.insert(pastFlowerAnimRL, {func = AnimDisappear, swh = false, args = {cyborg, 3781, 1583}}) + table.insert(pastFlowerAnimRL, {func = AnimCustomFunction, swh = false, args = {cyborg, HideCyborgOnly, {}}}) + AddSkipFunction(pastFlowerAnimRL, SkipPastFlowerAnim, {}) + + table.insert(outPitAnimRL, {func = AnimCustomFunction, args = {dense, RestoreCyborgOnly, {unpack(midCyborgPosDuo)}}, swh = false}) + table.insert(outPitAnimRL, {func = AnimTurn, args = {cyborg, "Right"}}) + table.insert(outPitAnimRL, {func = AnimTeleportGear, args = {dense, unpack(midDensePosDuo)}}) + table.insert(outPitAnimRL, {func = AnimTurn, args = {dense, "Left"}}) + table.insert(outPitAnimRL, {func = AnimSay, args = {dense, loc("OH, COME ON!"), SAY_SHOUT, 3000}}) + table.insert(outPitAnimRL, {func = AnimSay, args = {cyborg, loc("Let's see what your comrade does now!"), SAY_SAY, 5000}}) + table.insert(outPitAnimRL, {func = AnimSwitchHog, args = {dense}}) + table.insert(outPitAnimRL, {func = AnimDisappear, swh = false, args = {cyborg, 3781, 1583}}) + table.insert(outPitAnimRL, {func = AnimCustomFunction, swh = false, args = {cyborg, HideCyborgOnly, {}}}) + AddSkipFunction(outPitAnimRL, SkipOutPitAnim, {}) + + table.insert(endAnim, {func = AnimCustomFunction, args = {leaks, RestoreCyborg, {437, 1700, 519, 1722}}}) + table.insert(endAnim, {func = AnimTeleportGear, args = {leaks, 763, 1760}}) + table.insert(endAnim, {func = AnimTeleportGear, args = {dense, 835, 1519}}) + table.insert(endAnim, {func = AnimTurn, swh = false, args = {leaks, "Left"}}) + table.insert(endAnim, {func = AnimTurn, swh = false, args = {dense, "Left"}}) + table.insert(endAnim, {func = AnimTurn, swh = false, args = {cyborg, "Right"}}) + table.insert(endAnim, {func = AnimTurn, swh = false, args = {princess, "Right"}}) + table.insert(endAnim, {func = AnimSay, args = {princess, loc("Help me, please!"), SAY_SHOUT, 3000}}) + table.insert(endAnim, {func = AnimSay, args = {leaks, loc("What are you doing? Let her go!"), SAY_SHOUT, 5000}}) + table.insert(endAnim, {func = AnimSay, args = {cyborg, loc("Yeah? Watcha gonna do? Cry?"), SAY_SHOUT, 5000}}) + table.insert(endAnim, {func = AnimSay, args = {leaks, loc("We won't let you hurt her!"), SAY_SHOUT, 4000}}) + AddSkipFunction(endAnim, SkipEndAnimDuo, {}) + + table.insert(endFailAnim, {func = AnimCaption, args = {leaks, loc("Leaks A Lot, depressed for killing his loved one, failed to save the village..."), 3000}}) + + table.insert(winAnim, {func = AnimCustomFunction, args = {princess, CondNeedToTurn, {leaks, princess}}}) + table.insert(winAnim, {func = AnimSay, args = {princess, loc("Thank you, oh, thank you, my heroes!"), SAY_SAY, 5000}}) + table.insert(winAnim, {func = AnimSay, args = {princess, loc("How can I ever repay you for saving my life?"), SAY_SAY, 6000}}) + table.insert(winAnim, {func = AnimSay, args = {leaks, loc("There's nothing more satisfying to us than seeing you share your beauty with the world every morning, my princess!"), SAY_SAY, 10000}}) + table.insert(winAnim, {func = AnimSay, args = {leaks, loc("Let's go home!"), SAY_SAY, 3000}}) + table.insert(winAnim, {func = AnimCaption, args = {leaks, loc("And so they discovered that cyborgs weren't invulnerable..."), 2000}}) + + startAnim = startAnimRL + pastFlowerAnim = pastFlowerAnimRL + outPitAnim = outPitAnimRL +end + +function KillPrincess() + ParseCommand("teamgone " .. loc("Cannibal Sentry")) + TurnTimeLeft = 0 +end +--/////////////////////////////Misc Functions//////////////////////// + +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 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 SetupPlaceAlone() + ------ AMMO CRATE LIST ------ + --SpawnAmmoCrate(3122, 994, amShotgun) + SpawnAmmoCrate(3124, 952, amBaseballBat) + SpawnAmmoCrate(2508, 1110, amFirePunch) + ------ UTILITY CRATE LIST ------ + blowCrate = SpawnUtilityCrate(3675, 1480, amBlowTorch) + gravityCrate = SpawnUtilityCrate(3448, 1349, amLowGravity) + SpawnUtilityCrate(3212, 1256, amGirder) + SpawnUtilityCrate(3113, 911, amParachute) + sniperCrate = SpawnAmmoCrate(784, 1715, amSniperRifle) + ------ MINE LIST ------ + SetTimer(AddGear(3328, 1399, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(3028, 1262, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2994, 1274, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2956, 1277, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2925, 1282, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2838, 1276, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2822, 1278, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2786, 1283, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2766, 1270, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2749, 1231, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2717, 1354, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2167, 1330, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2201, 1321, gtMine, 0, 0, 0, 0), 3000) + SetTimer(AddGear(2239, 1295, gtMine, 0, 0, 0, 0), 3000) + + AnimSetGearPosition(leaks, 3781, 1583) + --AnimSetGearPosition(leaks, 1650, 1583) + AddAmmo(cannibals[1], amShotgun, 100) + AddAmmo(leaks, amSwitch, 0) +end + +function SetupPlaceDuo() + PlaceCratesDuo() + AnimSetGearPosition(leaks, unpack(startLeaksPosDuo)) + AnimSetGearPosition(dense, unpack(startDensePosDuo)) +end + +function SetupEventsDuo() + AddEvent(CheckPastFlower, {}, DoPastFlower, {}, 0) + AddEvent(CheckLeaksDead, {}, DoLeaksDead, {}, 0) + AddEvent(CheckDenseDead, {}, DoDenseDead, {}, 0) + AddEvent(CheckTookSniper2, {}, DoTookSniper2, {}, 0) +end + +function SetupEventsAlone() + AddEvent(CheckLeaksDead, {}, DoLeaksDead, {}, 0) + AddEvent(CheckTookBlowTorch, {}, DoTookBlowTorch, {}, 0) + AddEvent(CheckTookLowGravity, {}, DoTookLowGravity, {}, 0) + AddEvent(CheckOnBridge, {}, DoOnBridge, {}, 0) +end + +function StartMission() + if m2DenseDead == 1 then + DeleteGear(dense) + if m2Choice == choiceAccepted then + SetupAnimAcceptedDied() + elseif m2Choice == choiceRefused then + SetupAnimRefusedDied() + else + SetupAnimAttacked() + end + SetupPlaceAlone() + SetupEventsAlone() + AddAnim(startAnim) + AddFunction({func = AfterStartAnim, args = {}}) + else + if m2Choice == choiceAccepted then + SetupAnimAcceptedLived() + else + SetupAnimRefusedLived() + end + SetupPlaceDuo() + SetupEventsDuo() + AddAnim(startAnim) + AddFunction({func = AfterStartAnim, args = {}}) + end + HideHedge(cyborg) + HideHedge(princess) + for i = 5, 8 do + HideHedge(cannibals[i]) + end + +end + +function SetupCourse() + + ------ GIRDER LIST ------ + PlaceGirder(1091, 1150, 6) + PlaceGirder(1091, 989, 6) + PlaceGirder(1091, 829, 6) + PlaceGirder(1091, 669, 6) + PlaceGirder(1091, 668, 6) + PlaceGirder(1091, 669, 6) + PlaceGirder(1088, 667, 6) + PlaceGirder(1091, 658, 6) + PlaceGirder(1091, 646, 6) + PlaceGirder(1091, 607, 6) + PlaceGirder(1091, 571, 6) + PlaceGirder(1376, 821, 6) + PlaceGirder(1145, 1192, 1) + PlaceGirder(1169, 1076, 3) + PlaceGirder(1351, 1082, 4) + PlaceGirder(1469, 987, 3) + PlaceGirder(1386, 951, 0) + PlaceGirder(1465, 852, 3) + PlaceGirder(1630, 913, 0) + PlaceGirder(1733, 856, 7) + PlaceGirder(1688, 713, 5) + PlaceGirder(1556, 696, 2) + PlaceGirder(1525, 696, 2) + PlaceGirder(1457, 697, 2) + PlaceGirder(1413, 700, 3) + PlaceGirder(1270, 783, 2) + PlaceGirder(1207, 825, 2) + PlaceGirder(1135, 775, 1) + + ------ UTILITY CRATE LIST ------ + SpawnUtilityCrate(1590, 628, amParachute) + SpawnAmmoCrate(1540, 100, amDynamite) + SpawnUtilityCrate(2175, 1815, amLowGravity) + SpawnUtilityCrate(2210, 1499, amFirePunch) + girderCrate = SpawnUtilityCrate(2300, 1663, amGirder) + SpawnUtilityCrate(610, 1394, amPickHammer) + + ------ BARREL LIST ------ + SetHealth(AddGear(1148, 736, gtExplosives, 0, 0, 0, 0), 20) + +end + +function PlaceCourseMines() + SetTimer(AddGear(1215, 1193, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1259, 1199, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1310, 1198, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1346, 1196, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1383, 1192, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1436, 1196, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1487, 1199, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1651, 1209, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1708, 1209, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1759, 1190, gtMine, 0, 0, 0, 0), 5000) + SetTimer(AddGear(1815, 1184, gtMine, 0, 0, 0, 0), 5000) +end + + +--////////////////////////////Event Functions//////////////////////// +function CheckTookFire() + return fireTaken +end + +function DoTookFire() + AddAmmo(leaks, amFirePunch, 100) +end + +function CheckTookGirder1() + return girder1Taken +end + +function CheckTookGirder2() + return girder2Taken +end + +function DoTookGirder1() + AddAmmo(dense, amGirder, 2) +end + +function DoTookGirder2() + AddAmmo(dense, amGirder, 3) +end + +function CheckDensePit() + return GetY(dense) < 1250 and StoppedGear(dense) +end + +function DoDensePit() + TurnTimeLeft = 0 + RestoreHedge(cyborg) + AnimWait(cyborg, 1) + AddFunction({func = AddAnim, args = {outPitAnim}}) + AddFunction({func = AddFunction, args = {{func = AfterOutPitAnim, args = {}}}}) +end + +function CheckPastFlower() + if denseDead == true or leaksDead == true then + return false + end + return (GetX(dense) < startEventXDuo and StoppedGear(dense)) + or (GetX(leaks) < startEventXDuo and StoppedGear(leaks)) +end + +function DoPastFlower() + TurnTimeLeft = 0 + RestoreHedge(cyborg) + AnimWait(cyborg, 1) + AddFunction({func = AddAnim, args = {pastFlowerAnim}}) + AddFunction({func = AddFunction, args = {{func = AfterPastFlowerAnim, args = {}}}}) +end + + +function CheckLeaksDead() + return leaksDead +end + +function DoLeaksDead() + AddCaption(loc("The village, unprepared, was destroyed by the cyborgs...")) + ParseCommand("teamgone " .. loc("Natives")) +end + +function CheckDenseDead() + return denseDead +end + +function DoDenseDead() + AddCaption(loc("The village, unprepared, was destroyed by the cyborgs...")) + ParseCommand("teamgone " .. loc("Natives")) +end + +function CheckTookBlowTorch() + return blowTaken +end + +function DoTookBlowTorch() + ShowMission(loc("The Journey Back"), loc("The Tunnel Maker"), loc("Hint: Select the BlowTorch, aim and press [Fire]. Press [Fire] again to stop.|Don't blow up the crate."), 0, 6000) +end + +function CheckTookLowGravity() + return gravityTaken +end + +function DoTookLowGravity() + ShowMission(loc("The Journey Back"), loc("The Moonwalk"), loc("Hint: Select the LowGravity and press [Fire]."), 0, 6000) +end + +function CheckOnBridge() + return leaksDead == false and GetX(leaks) < 1651 and StoppedGear(leaks) +end + +function DoOnBridge() + TurnTimeLeft = 0 + RestoreHedge(cyborg) + RestoreHedge(princess) + AnimWait(cyborg, 1) + AddFunction({func = AddAnim, args = {midAnim}}) + AddFunction({func = AddFunction, args = {{func = AfterMidAnimAlone, args = {}}}}) +end + +function CheckGirderTaken() + return girderTaken +end + +function DoGirderTaken() + AddAmmo(leaks, amGirder, 2) +-- AddAmmo(leaks, amGirder, 3) +end + +function CheckOnFirstGirder() + return leaksDead == false and GetX(leaks) < 1160 and StoppedGear(leaks) +end + +function DoOnFirstGirder() + PlaceCourseMines() + ShowMission(loc("The Journey Back"), loc("Slippery"), loc("You'd better watch your steps..."), 0, 4000) +end + +function CheckTookSniper() + return sniperTaken and StoppedGear(leaks) +end + +function DoTookSniper() + TurnTimeLeft = 0 + RestoreHedge(cyborg) + RestoreHedge(princess) + AnimWait(cyborg, 1) + AddFunction({func = AddAnim, args = {endAnim}}) + AddFunction({func = AddFunction, args = {{func = AfterEndAnimAlone, args = {}}}}) +end + +function CheckTookSniper2() + return sniperTaken and StoppedGear(leaks) and StoppedGear(dense) +end + +function DoTookSniper2() + TurnTimeLeft = 0 + RestoreHedge(cyborg) + RestoreHedge(princess) + AnimWait(cyborg, 1) + AddFunction({func = AddAnim, args = {endAnim}}) + AddFunction({func = AddFunction, args = {{func = AfterEndAnimDuo, args = {}}}}) +end + +function CheckLost() + return princessDead +end + +function DoLost() + AddAnim(endFailAnim) + AddFunction({func = ParseCommand, args = {'teamgone ' .. loc('Natives')}}) +end + +function CheckWon() + return cyborgDead and not princessDead +end + +function DoWon() + if progress and progress<3 then + SaveCampaignVar("Progress", "3") + end + AddAnim(winAnim) + AddFunction({func = FinishWon, args = {}}) +end + +function FinishWon() + SwitchHog(leaks) + ParseCommand("teamgone " .. loc("Cannibal Sentry")) + ParseCommand("teamgone " .. loc("011101001")) + TurnTimeLeft = 0 +end + +function CheckFailedCourse() + return TurnsLeft == 0 +end + +function DoFailedCourse() + TurnTimeLeft = 0 + RestoreHedge(cyborg) + RestoreHedge(princess) + AnimWait(cyborg, 1) + AddFunction({func = AddAnim, args = {failAnim}}) + AddFunction({func = AddFunction, args = {{func = AfterMidFailAnim, args = {}}}}) +end + +--////////////////////////////Main Functions///////////////////////// + +function onGameInit() + Seed = 0 + GameFlags = gfSolidLand + gfDisableWind + TurnTime = 40000 + CaseFreq = 0 + MinesNum = 0 + MinesTime = 3000 + Explosives = 0 + Delay = 5 + Map = "A_Classic_Fairytale_journey" + Theme = "Nature" + + SuddenDeathTurns = 3000 + + 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") + + AddTeam(loc("Cannibal Sentry"), 14483456, "Skull", "Island", "Pirate","cm_vampire") + cannibals = {} + for i = 1, 4 do + cannibals[i] = AddHog(cannibalNames[i], 3, 40, "Zombi") + AnimSetGearPosition(cannibals[i], unpack(cannibalPos[i])) + end + + for i = 5, 8 do + cannibals[i] = AddHog(cannibalNames[i], 3, 40, "Zombi") + AnimSetGearPosition(cannibals[i], 0, 0) + end + + AddTeam(loc("011101001"), 14483456, "ring", "UFO", "Robot", "cm_star") + cyborg = AddHog(loc("Y3K1337"), 0, 200, "cyborg1") + princess = AddHog(loc("Fell From Heaven"), 0, 200, "tiara") + + AnimSetGearPosition(dense, 0, 0) + AnimSetGearPosition(leaks, 0, 0) + AnimSetGearPosition(cyborg, 0, 0) + AnimSetGearPosition(princess, 0, 0) + + AnimInit() +end + +function onGameStart() + progress = tonumber(GetCampaignVar("Progress")) + m2Choice = tonumber(GetCampaignVar("M2Choice")) + m2DenseDead = tonumber(GetCampaignVar("M2DenseDead")) + m2RamonDead = tonumber(GetCampaignVar("M2RamonDead")) + m2SpikyDead = tonumber(GetCampaignVar("M2SpikyDead")) + StartMission() +end + +function onGameTick() + AnimUnWait() + if ShowAnimation() == false then + return + end + ExecuteAfterAnimations() + CheckEvents() +end + +function onGearDelete(gear) + if gear == blowCrate then + blowTaken = true + elseif gear == fireCrate then + fireTaken = true + elseif gear == gravityCrate then + gravityTaken = true + elseif gear == leaks then + leaksDead = true + elseif gear == dense then + denseDead = true + elseif gear == cyborg then + cyborgDead = true + elseif gear == princess then + princessDead = true + elseif gear == girderCrate then + girderTaken = true + elseif gear == girderCrate1 then + girder1Taken = true + elseif gear == girderCrate2 then + girder2Taken = true + elseif gear == sniperCrate then + sniperTaken = true + else + for i = 1, 4 do + if gear == cannibals[i] then + cannibalDead[i] = true + end + end + end +end + +function onAmmoStoreInit() + SetAmmo(amBlowTorch, 0, 0, 0, 1) + SetAmmo(amParachute, 0, 0, 0, 1) + SetAmmo(amGirder, 0, 0, 0, 3) + SetAmmo(amLowGravity, 0, 0, 0, 1) + SetAmmo(amBaseballBat, 0, 0, 0, 1) + SetAmmo(amFirePunch, 1, 0, 0, 1) + SetAmmo(amSkip, 9, 0, 0, 0) + SetAmmo(amSwitch, 9, 0, 0, 0) + SetAmmo(amDEagle, 9, 0, 0, 0) + SetAmmo(amRope, 0, 0, 0, 1) + SetAmmo(amSniperRifle, 0, 0, 0, 1) + SetAmmo(amDynamite, 0, 0, 0, 1) + SetAmmo(amPickHammer, 0, 0, 0, 1) +end + +function onNewTurn() + if AnimInProgress() then + TurnTimeLeft = -1 + elseif stage == endStage and CurrentHedgehog ~= leaks then + AnimSwitchHog(leaks) + SetGearMessage(leaks, 0) + TurnTimeLeft = -1 + elseif GetHogTeamName(CurrentHedgehog) ~= loc("Natives") then + for i = 1, 4 do + if cannibalDead[i] ~= true then + if GetX(cannibals[i]) < GetX(leaks) then + HogTurnLeft(cannibals[i], false) + else + HogTurnLeft(cannibals[i], true) + end + end + end + SetInputMask(band(0xFFFFFFFF, bnot(gmLeft + gmRight + gmLJump + gmHJump))) + TurnTimeLeft = 20000 + else + SetInputMask(0xFFFFFFFF) + TurnsLeft = TurnsLeft - 1 + end +end + +function onPrecise() + if GameTime > 2500 and AnimInProgress() then + SetAnimSkip(true) + return + end +-- AddAmmo(leaks, amRope, 100) +-- RemoveEventFunc(CheckPastFlower) +-- DeleteGear(sniperCrate) +end +