diff -r 92af50454cf2 -r 8054d9d775fd share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/journey.lua --- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/journey.lua Fri Oct 11 11:55:31 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1077 +0,0 @@ -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 -