--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon02.lua Wed Sep 11 08:39:00 2013 +0300
@@ -0,0 +1,203 @@
+------------------- ABOUT ----------------------
+--
+-- Hog Solo has to catch the other hog in order
+-- to get infoormations about the origin of Pr. Hogevil
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/Animate.lua")
+HedgewarsScriptLoad("/Missions/Campaign/A_Space_Adventure/global_functions.lua")
+
+----------------- VARIABLES --------------------
+-- globals
+local missionName = loc("Chasing ghosts in moon")
+local challengeObjectives = loc("Use your available weapons in order to catch the other hog").."|"..
+ loc("You have to stand very close to him")
+local currentPosition = 1
+local previousTimeLeft = 0
+-- dialogs
+local dialog01 = {}
+-- mission objectives
+local goals = {
+ [dialog01] = {missionName, loc("Challenge Objectives"), challengeObjectives, 1, 4500},
+}
+-- hogs
+local hero = {
+ name = loc("Hog Solo"),
+ x = 1300,
+ y = 850
+}
+local runner = {
+ name = loc("Crazy Runner"),
+ places = {
+ {x = 1400,y = 850, turnTime = 0},
+ {x = 3880,y = 33, turnTime = 30000},
+ {x = 250,y = 1780, turnTime = 25000},
+ {x = 3850,y = 1940, turnTime = 20000},
+ }
+}
+-- teams
+local teamA = {
+ name = loc("Hog Solo"),
+ color = tonumber("38D61C",16) -- green
+}
+local teamB = {
+ name = loc("Crazy Runner"),
+ color = tonumber("FF0000",16) -- red
+}
+
+-------------- LuaAPI EVENT HANDLERS ------------------
+
+function onGameInit()
+ GameFlags = gfDisableWind
+ Seed = 1
+ TurnTime = 25000
+ CaseFreq = 0
+ MinesNum = 0
+ MinesTime = 1
+ Explosives = 0
+ Map = "moon02_map"
+ Theme = "Cheese"
+
+ -- Hog Solo
+ AddTeam(teamA.name, teamA.color, "Bone", "Island", "HillBilly", "cm_birdy")
+ hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
+ AnimSetGearPosition(hero.gear, hero.x, hero.y)
+ -- Crazy Runner
+ AddTeam(teamB.name, teamB.color, "Bone", "Island", "HillBilly", "cm_birdy")
+ runner.gear = AddHog(runner.name, 0, 100, "war_desertgrenadier1")
+ AnimSetGearPosition(runner.gear, runner.places[1].x, runner.places[1].y)
+ HogTurnLeft(runner.gear, true)
+
+ initCheckpoint("moon02")
+
+ AnimInit()
+ AnimationSetup()
+end
+
+function onGameStart()
+ AnimWait(hero.gear, 3000)
+ FollowGear(hero.gear)
+ ShowMission(missionName, loc("Challenge Objectives"), challengeObjectives, -amSkip, 0)
+
+ AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
+ AddEvent(onLose, {hero.gear}, lose, {hero.gear}, 0)
+
+ AddAmmo(hero.gear, amRope, 1)
+ AddAmmo(hero.gear, amTeleport, 100)
+
+ SendHealthStatsOff()
+ hogTurn = runner.gear
+ AddAnim(dialog01)
+end
+
+function onNewTurn()
+ WriteLnToConsole("NEW TURN "..CurrentHedgehog)
+ if CurrentHedgehog == hero.gear then
+ TurnTimeLeft = runner.places[currentPosition].turnTime + previousTimeLeft
+ WriteLnToConsole("Turn Time is "..TurnTimeLeft)
+ previousTimeLeft = 0
+ WriteLnToConsole("STILL HERE AND "..TurnTimeLeft.." prev hog = "..hogTurn)
+ else
+ TurnTimeLeft = 0
+ end
+end
+
+function onGameTick()
+ AnimUnWait()
+ if ShowAnimation() == false then
+ return
+ end
+ ExecuteAfterAnimations()
+ CheckEvents()
+end
+
+function onGameTick20()
+ if isHeroNextToRunner() then
+ moveRunner()
+ end
+end
+
+function onPrecise()
+ if GameTime > 3000 then
+ SetAnimSkip(true)
+ end
+end
+
+-------------- EVENTS ------------------
+
+function onHeroDeath(gear)
+ if not GetHealth(hero.gear) then
+ return true
+ end
+ return false
+end
+
+function onLose(gear)
+ if (GetAmmoCount(hero.gear, amRope) == 0 and previousTimeLeft == 0) or (CurrentHedgehog == hero.gear and TurnTimeLeft == 0)then
+ return true
+ end
+ return false
+end
+
+-------------- ACTIONS ------------------
+
+function heroDeath(gear)
+ -- game over
+ WriteLnToConsole("END GAME 1")
+ EndGame()
+end
+
+function lose(gear)
+ -- game over
+ WriteLnToConsole("END GAME 2")
+ EndGame()
+end
+
+-------------- ANIMATIONS ------------------
+
+function Skipanim(anim)
+ if goals[anim] ~= nil then
+ ShowMission(unpack(goals[anim]))
+ end
+ if anim == dialog01 then
+ moveRunner()
+ end
+end
+
+function AnimationSetup()
+ -- DIALOG 01 - Start, game instructions
+ AddSkipFunction(dialog01, Skipanim, {dialog01})
+ table.insert(dialog01, {func = AnimWait, args = {hero.gear, 3200}})
+ table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("In the other side of the moon..."), 5000}})
+ table.insert(dialog01, {func = AnimSay, args = {runner.gear, loc("So you are interested in Pr. Hogevil"), SAY_SAY, 3000}})
+ table.insert(dialog01, {func = AnimSay, args = {runner.gear, loc("We'll play a game first"), SAY_SAY, 3000}})
+ table.insert(dialog01, {func = AnimSay, args = {runner.gear, loc("I'll let you know whatever I know about him if you manage to catch me 3 times"), SAY_SAY, 4000}})
+ table.insert(dialog01, {func = AnimSay, args = {runner.gear, loc("Let's go!"), SAY_SAY, 2000}})
+ table.insert(dialog01, {func = moveRunner, args = {}})
+end
+
+------------- other functions ---------------
+
+function isHeroNextToRunner()
+ if GetHealth(hero.gear) and math.abs(GetX(hero.gear) - GetX(runner.gear)) < 75 and
+ math.abs(GetY(hero.gear) - GetY(runner.gear)) < 75 and StoppedGear(hero.gear) then
+ return true
+ end
+ return false
+end
+
+function moveRunner()
+ AddAmmo(hero.gear, amRope, 1)
+ -- add anim dialogs here
+ if currentPosition ~= 1 then
+ PlaySound(sndVictory)
+ AnimSay(runner.gear, loc("You got me"), SAY_SAY, 3000)
+ previousTimeLeft = TurnTimeLeft
+ end
+ currentPosition = currentPosition + 1
+ SetGearPosition(runner.gear, runner.places[currentPosition].x, runner.places[currentPosition].y)
+ WriteLnToConsole("HERE 1")
+ AnimSwitchHog(runner.gear)
+ TurnTimeLeft = 0
+ WriteLnToConsole("HERE 2")
+end