--- a/share/hedgewars/Data/Missions/Campaign/A Space Adventure/cosmos.lua Mon Jul 01 22:28:42 2013 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,390 +0,0 @@
-------------------- ABOUT ----------------------
---
--- This map works as a menu for the hero hog to
--- navigate through planets. It portrays the hogs
--- planet and above the planets that he'll later
--- visit.
-
--- TODO
--- Save and Load All Check Points
--- Save hero health
--- Decide and implement if hero will use gas bombs...
--- ofc add custom stats page
--- PROBLEM : What if one makes a bad choice and wants to replay it map, how to reset?
--- POSSIBLE SOLUTIONS: In game function keys, frontend button...
-
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-HedgewarsScriptLoad("/Scripts/Animate.lua")
-
------------------ VARIABLES --------------------
--- globals
-local campaignName = loc("A Space Adventure")
-local missionName = loc("Cosmos")
-local timeForGuard1ToTurn = 1000 * 5 -- 5 sec
-local timeForGuard1ToTurnLeft = timeForGuard1ToTurn
-local saucerAcquired = false
-local checkPointReached = 1 -- 1 is start of the game
--- dialogs
-local dialog01 = {}
-local dialog02 = {}
-local dialog03 = {}
-local dialog04 = {}
-local dialog05 = {}
-local dialog06 = {}
--- mission objectives
-local goals = {
- [dialog01] = {missionName, loc("Getting ready"), loc("Go and collect the crate on top of the column").."|"..loc("Use the sleep gas bomb if the guards spot you!"), 1, 4500},
- [dialog02] = {missionName, loc("The adventure begins!"), loc("Use the saucer and fly to the moon").."|"..loc("Drive carefully as your fuels are limited"), 1, 4500},
- [dialog03] = {missionName, loc("An unexpected event!"), loc("Use the saucer and fly away or use the gas bomb to neutralize the guards").."|"..loc("Beware, any damage taken will stay until you take some medicine or visit moon"), 1, 7000}
-}
--- crates
-local saucerX = 3270
-local saucerY = 1500
--- hogs
-local hero = {}
-local director = {}
-local doctor = {}
-local guard1 = {}
-local guard2 = {}
--- teams
-local teamA = {}
-local teamB = {}
-local teamC = {}
--- hedgehogs values
-hero.name = loc("Hog Solo")
-hero.x = 1450
-hero.y = 1550
-director.name = loc("H")
-director.x = 1350
-director.y = 1550
-doctor.name = loc("Dr.Cornelius")
-doctor.x = 1300
-doctor.y = 1550
-guard1.name = loc("Bob")
-guard1.x = 3350
-guard1.y = 1800
-guard1.turn = false
-guard1.keepTurning = true
-guard2.name = loc("Sam")
-guard2.x = 3400
-guard2.y = 1800
-teamA.name = loc("PAoTH")
-teamA.color = tonumber("FF0000",16) -- red
-teamB.name = loc("Guards")
-teamB.color = tonumber("0033FF",16) -- blue
-teamC.name = loc("Hog Solo")
-teamC.color = tonumber("38D61C",16) -- green
-
--------------- LuaAPI EVENT HANDLERS ------------------
-function onGameInit()
- Seed = 35
- GameFlags = gfSolidLand + gfDisableWind
- TurnTime = 40000
- CaseFreq = 0
- MinesNum = 0
- Explosives = 0
- Delay = 5
- Map = "cosmos_map" -- custom map included in file
- Theme = "Nature"
- -- I had originally hero in PAoTH team and changed it, may reconsider though
- -- PAoTH
- AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "cm_birdy")
- hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
- AnimSetGearPosition(hero.gear, hero.x, hero.y)
- HogTurnLeft(hero.gear, true)
- AddTeam(teamA.name, teamA.color, "Bone", "Island", "HillBilly", "cm_birdy")
- director.gear = AddHog(director.name, 0, 100, "hair_yellow")
- AnimSetGearPosition(director.gear, director.x, director.y)
- doctor.gear = AddHog(doctor.name, 0, 100, "Glasses")
- AnimSetGearPosition(doctor.gear, doctor.x, doctor.y)
- -- Guards
- AddTeam(teamB.name, teamB.color, "Bone", "Island", "HillBilly", "cm_birdy")
- guard1.gear = AddHog(guard1.name, 1, 100, "policecap")
- AnimSetGearPosition(guard1.gear, guard1.x, guard1.y)
- guard2.gear = AddHog(guard2.name, 1, 100, "policecap")
- AnimSetGearPosition(guard2.gear, guard2.x, guard2.y)
-
- -- get the check point
- if tonumber(GetCampaignVar("CosmosCheckPoint")) then
- checkPointReached = tonumber(GetCampaignVar("CosmosCheckPoint"))
- end
- -- do checkpoint stuff needed before game starts
- if checkPointReached == 1 then
- -- Start of the game
- elseif checkPointReached == 2 then
- -- Hero on the column, just took space ship unnoticed
- AnimSetGearPosition(hero.gear, saucerX, saucerY)
- elseif checkPointReached == 3 then
- -- Hero near column, without space ship unnoticed
- elseif checkPointReached == 4 then
- -- Hero visited moon for fuels
- AnimSetGearPosition(hero.gear, 1110, 850)
- elseif checkPointReached == 5 then
- -- Hero has visited a planet, he has plenty of fuels and can change planet
- end
-
- AnimInit()
- AnimationSetup()
-end
-
-function onGameStart()
- -- wait for the first turn to start
- AnimWait(hero.gear, 3000)
-
- FollowGear(hero.gear)
- ShowMission(loc("A Space Adventure"), loc("Cosmos"), loc("Help Hog Solo to find all the parts of the anti-gravity device.")..
- "|"..loc("Travel to all the neighbor planets and collect all the pieces"), -amSkip, 0)
-
- -- do checkpoint stuff needed after game starts
- if checkPointReached == 1 then
- AddAnim(dialog01)
- AddAmmo(hero.gear, amGasBomb, 5)
- AddAmmo(hero.gear, amRope, 2)
- -- Added for dev/debug purposes, remove before release
- AddAmmo(hero.gear, amJetpack, 2)
- AddAmmo(guard1.gear, amDEagle, 2)
- AddAmmo(guard2.gear, amDEagle, 2)
- SpawnAmmoCrate(saucerX, saucerY, amJetpack)
- -- EVENT HANDLERS
- AddEvent(onHeroBeforeTreePosition, {hero.gear}, heroBeforeTreePosition, {hero.gear}, 0)
- AddEvent(onHeroAtSaucerPosition, {hero.gear}, heroAtSaucerPosition, {hero.gear}, 0)
- AddEvent(onHeroOutOfGuardSight, {hero.gear}, heroOutOfGuardSight, {hero.gear}, 0)
- elseif checkPointReached == 2 then
- AddAmmo(hero.gear, amJetpack, 1)
- AddAnim(dialog02)
- elseif checkPointReached == 3 then
- -- Hero near column, without space ship unnoticed
- elseif checkPointReached == 4 then
- -- Hero visited moon for fuels
- AddAnim(dialog05)
- elseif checkPointReached == 5 then
- -- Hero has visited a planet, he has plenty of fuels and can change planet
- end
- -- always check for landings
- if GetCampaignVar("Planet") ~= "moon" then
- AddEvent(onMoonLanding, {hero.gear}, moonLanding, {hero.gear}, 0)
- end
- if GetCampaignVar("Planet") ~= "desertPlanet" then
- AddEvent(onDesertPlanetLanding, {hero.gear}, desertPlanetLanding, {hero.gear}, 0)
- end
- if GetCampaignVar("Planet") ~= "fruitPlanet" then
- AddEvent(onFruitPlanetLanding, {hero.gear}, fruitPlanetLanding, {hero.gear}, 0)
- end
- if GetCampaignVar("Planet") ~= "icePlanet" then
- AddEvent(onIcePlanetLanding, {hero.gear}, icePlanetLanding, {hero.gear}, 0)
- end
-end
-
-function onGameTick()
- -- maybe alert this to avoid timeForGuard1ToTurnLeft overflow
- if timeForGuard1ToTurnLeft == 0 and guard1.keepTurning then
- guard1.turn = not guard1.turn
- HogTurnLeft(guard1.gear, guard1.turn)
- timeForGuard1ToTurnLeft = timeForGuard1ToTurn
- end
- timeForGuard1ToTurnLeft = timeForGuard1ToTurnLeft - 1
- AnimUnWait()
- if ShowAnimation() == false then
- return
- end
- ExecuteAfterAnimations()
- CheckEvents()
-end
-
-function onPrecise()
- if GameTime > 3000 then
- SetAnimSkip(true)
- end
-end
-
-function onAmmoStoreInit()
- SetAmmo(amJetpack, 0, 0, 0, 1)
-end
-
-function onNewTurn()
- if CurrentHedgehog == director.gear or CurrentHedgehog == doctor.gear then
- TurnTimeLeft = 0
- end
- if guard1.keepTurning then
- AnimSwitchHog(hero.gear)
- TurnTimeLeft = -1
- end
-end
-
--------------- EVENTS ------------------
-
-function onHeroBeforeTreePosition(gear)
- if GetX(gear) > 2444 then
- return true
- end
- return false
-end
-
-function onHeroAtSaucerPosition(gear)
- if GetX(gear) >= saucerX-32 and GetX(gear) <= saucerX+32 and GetY(gear) >= saucerY-32 and GetY(gear) <= saucerY+32 then
- saucerAcquired = true
- end
- if saucerAcquired and StoppedGear(gear) then
- return true
- end
- return false
-end
-
-function onHeroOutOfGuardSight(gear)
- if GetX(gear) < 3100 and GetY(gear) > saucerY-25 and StoppedGear(gear) and not guard1.keepTurning then
- return true
- end
- return false
-end
---
-function onMoonLanding(gear)
- if GetX(gear) > 1010 and GetX(gear) < 1220 and GetY(gear) < 1300 and StoppedGear(gear) then
- return true
- end
- return false
-end
-
-function onFruitPlanetLanding(gear)
- if GetX(gear) > 2240 and GetX(gear) < 2540 and GetY(gear) < 1100 and StoppedGear(gear) then
- return true
- end
- return false
-end
-
-function onDesertPlanetLanding(gear)
- if GetX(gear) > 3568 and GetX(gear) < 4052 and GetY(gear) < 500 and StoppedGear(gear) then
- return true
- end
- return false
-end
-
-function onIcePlanetLanding(gear)
- if GetX(gear) > 1330 and GetX(gear) < 1650 and GetY(gear) < 500 and StoppedGear(gear) then
- return true
- end
- return false
-end
-
--------------- OUTCOMES ------------------
-
-function heroBeforeTreePosition(gear)
- AnimSay(gear,loc("Now I have to climb the trees"), SAY_SAY, 4000)
- AnimCaption(hero.gear, loc("Use the rope to get to the crate"), 4000)
-end
-
-function heroAtSaucerPosition(gear)
- TurnTimeLeft = 0
- -- save check point
- SaveCampaignVar("CosmosCheckPoint", "2")
- AddAnim(dialog02)
- -- check if he was spotted by the guard
- if guard1.turn then
- guard1.keepTurning = false
- AddAnim(dialog03)
- end
-end
-
-function heroOutOfGuardSight(gear)
- guard1.keepTurning = true
- AddAnim(dialog04)
-end
-
-function moonLanding(gear)
- WriteLnToConsole("MOON LANDING, HOORAY!")
- AnimCaption(hero.gear,loc("Welcome to the moon!"))
- SaveCampaignVar("CosmosCheckPoint", "4")
- SaveCampaignVar("Planet", "moon")
- EndGame()
-end
-
-function fruitPlanetLanding(gear)
- if checkPointReached < 5 then
- AddAnim(dialog06)
- end
-end
-
-function desertPlanetLanding(gear)
- if checkPointReached < 5 then
- AddAnim(dialog06)
- end
-end
-
-function icePlanetLanding(gear)
- if checkPointReached < 5 then
- AddAnim(dialog06)
- end
-end
-
--------------- ANIMATIONS ------------------
-
-function Skipanim(anim)
- if goals[anim] ~= nil then
- ShowMission(unpack(goals[anim]))
- end
- if CurrentHedgehog ~= hero.gear and anim ~= dialog03 then
- AnimSwitchHog(hero.gear)
- elseif anim == dialog03 then
- startCombat()
- elseif anim == dialog05 or anim == dialog06 then
- EndGame()
- end
-end
-
-function AnimationSetup()
- -- DIALOG 01 - Start
- AddSkipFunction(dialog01, Skipanim, {dialog01})
- table.insert(dialog01, {func = AnimWait, args = {doctor.gear, 3000}})
- --table.insert(dialog01, {func = AnimWait, args = {hero.gear, 2500}, skipFunc = Skipanim, skipArgs = dialog01})
- table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("Near secret base 17 of PAoTH in the rural Hogland..."), 4000}})
- table.insert(dialog01, {func = AnimSay, args = {director.gear, loc("So Hog Solo, here we are..."), SAY_SAY, 2000}})
- table.insert(dialog01, {func = AnimSay, args = {director.gear, loc("Behind these trees on the East there is secret base 17"), SAY_SAY, 4000}})
- table.insert(dialog01, {func = AnimSay, args = {director.gear, loc("You have to continue alone from now on."), SAY_SAY, 3000}})
- table.insert(dialog01, {func = AnimSay, args = {director.gear, loc("Be careful, the future of Hogera is in your hands!"), SAY_SAY, 7200}})
- table.insert(dialog01, {func = AnimSay, args = {doctor.gear, loc("We'll use our communicators to contact you"), SAY_SAY, 2600}})
- table.insert(dialog01, {func = AnimSay, args = {doctor.gear, loc("In am also entrusting you with a rope and a sleep gas bomb"), SAY_SAY, 5000}})
- table.insert(dialog01, {func = AnimSay, args = {doctor.gear, loc("You may find them handy"), SAY_SAY, 2300}})
- table.insert(dialog01, {func = AnimSay, args = {hero.gear, loc("Thank you Dr.Cornelius"), SAY_SAY, 1600}})
- table.insert(dialog01, {func = AnimSay, args = {hero.gear, loc("I'll make good use of them"), SAY_SAY, 4500}})
- table.insert(dialog01, {func = AnimSay, args = {director.gear, loc("It would be wiser to steal the space ship while PAoTH guards are taking a brake!"), SAY_SAY, 7000}})
- table.insert(dialog01, {func = AnimSay, args = {director.gear, loc("Remember! Many will seek the anti-gravity device! Now go, hurry up!"), SAY_SAY, 4000}})
- table.insert(dialog01, {func = AnimSwitchHog, args = {hero.gear}})
- -- DIALOG 02 - Hero got the saucer
- AddSkipFunction(dialog02, Skipanim, {dialog02})
- table.insert(dialog02, {func = AnimWait, args = {hero.gear, 500}})
- table.insert(dialog02, {func = AnimCaption, args = {hero.gear, loc("CheckPoint reached!"), 4000}})
- table.insert(dialog02, {func = AnimSay, args = {hero.gear, loc("Got the saucer!"), SAY_SHOUT, 2000}})
- table.insert(dialog02, {func = AnimSay, args = {director.gear, loc("Nice!"), SAY_SHOUT, 1000}})
- table.insert(dialog02, {func = AnimSay, args = {director.gear, loc("Now use it and go to the moon PAoTH station to get more fuels!"), SAY_SHOUT, 5000}})
- table.insert(dialog02, {func = AnimGearWait, args = {hero.gear, 500}})
- -- DIALOG 03 - Hero got spotted by guard
- AddSkipFunction(dialog03, Skipanim, {dialog03})
- table.insert(dialog03, {func = AnimWait, args = {guard1.gear, 4000}})
- table.insert(dialog03, {func = AnimCaption, args = {guard1.gear, loc("Prepare to battle or flee!"), 4000}})
- table.insert(dialog03, {func = AnimSay, args = {guard1.gear, loc("Hey").." "..guard2.name.."! "..loc("Look, someone is stealing the saucer!"), SAY_SHOUT, 4000}})
- table.insert(dialog03, {func = AnimSay, args = {guard2.gear, loc("I'll get him!"), SAY_SAY, 4000}})
- table.insert(dialog03, {func = startCombat, args = {guard1.gear}})
- -- DIALOG 04 - Hero out of sight
- AddSkipFunction(dialog04, Skipanim, {dialog04})
- table.insert(dialog04, {func = AnimCaption, args = {guard1.gear, loc("You are out of danger, time to go to the moon!"), 4000}})
- table.insert(dialog04, {func = AnimSay, args = {guard1.gear, loc("I guess we lost him!"), SAY_SAY, 3000}})
- table.insert(dialog04, {func = AnimSay, args = {guard2.gear, loc("We should better report this and continue our watch!"), SAY_SAY, 5000}})
- table.insert(dialog04, {func = AnimSwitchHog, args = {hero.gear}})
- -- DIALOG 05 - Hero returned from moon without fuels
- AddSkipFunction(dialog05, Skipanim, {dialog05})
- table.insert(dialog05, {func = AnimSay, args = {hero.gear, loc("I guess I can't go far without fuels!"), SAY_THINK, 6000}})
- table.insert(dialog05, {func = AnimSay, args = {hero.gear, loc("Go to go back"), SAY_THINK, 2000}})
- table.insert(dialog05, {func = EndGame, args = {hero.gear}})
- -- DIALOG 06 - Landing on wrong planet or on earth if not enough fuels
- AddSkipFunction(dialog06, Skipanim, {dialog06})
- table.insert(dialog06, {func = AnimCaption, args = {hero.gear, loc("You have to try again!"), 5000}})
- table.insert(dialog06, {func = AnimSay, args = {hero.gear, loc("Hm... Now I run out of fuels..."), SAY_THINK, 3000}})
- table.insert(dialog06, {func = EndGame, args = {hero.gear}})
-end
-
-------------------- custom "animation" functions --------------------------
-
-function startCombat()
- -- use this so guard2 will gain control
- AnimSwitchHog(hero.gear)
- TurnTimeLeft = 0
-end