--- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/first_blood.lua Mon Jun 24 10:51:43 2013 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/first_blood.lua Tue Jun 25 05:10:13 2013 +0300
@@ -77,6 +77,7 @@
}
-----------------------------Animations--------------------------------
function Skipanim(anim)
+WriteLnToConsole("SWITCH HOG")
AnimSwitchHog(youngh)
if goals[anim] ~= nil then
ShowMission(unpack(goals[anim]))
@@ -111,9 +112,11 @@
table.insert(elderDamagedAnim, {func = AnimWait, args = {elderh, 500}, skipFunc = Skipanim, skipArgs = elderDamagedAnim})
table.insert(elderDamagedAnim, {func = AnimSay, args = {elderh, loc("Violence is not the answer to your problems!"), SAY_SAY, 3000}})
table.insert(elderDamagedAnim, {func = AnimGearWait, args = {youngh, 500}})
-
+ WriteLnToConsole("START DIALOG")
+ WriteLnToConsole("END GAME START")
AddSkipFunction(startDialogue, Skipanim, {startDialogue})
- table.insert(startDialogue, {func = AnimWait, args = {youngh, 3500}, skipFunc = Skipanim, skipArgs = startDialogue})
+ --table.insert(startDialogue, {func = AnimWait, args = {youngh, 3500}, skipFunc = Skipanim, skipArgs = startDialogue})
+ table.insert(startDialogue, {func = WriteLnToConsole, args = {"FIRST PRINT"}})
table.insert(startDialogue, {func = AnimCaption, args = {youngh, loc("Once upon a time, on an island with great natural resources, lived two tribes in heated conflict..."), 5000}})
table.insert(startDialogue, {func = AnimCaption, args = {youngh, loc("One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."), 5000}})
table.insert(startDialogue, {func = AnimCaption, args = {youngh, loc("The other one were all cannibals, spending their time eating the organs of fellow hedgehogs..."), 5000}})
@@ -125,7 +128,7 @@
table.insert(startDialogue, {func = AnimTurn, args = {princess, "Right"}})
table.insert(startDialogue, {func = AnimSwitchHog, args = {youngh}})
table.insert(startDialogue, {func = AnimShowMission, args = {youngh, loc("First Blood"), loc("First Steps"), loc("Press [Left] or [Right] to move around, [Enter] to jump"), 1, 4000}})
-
+WriteLnToConsole("START DIALOG END")
AddSkipFunction(onShroomAnim, SkipOnShroom, {onShroomAnim})
table.insert(onShroomAnim, {func = AnimSay, args = {elderh, loc("I can see you have been training diligently."), SAY_SAY, 4000}, skipFunc = Skipanim, skipArgs = onShroomAnim})
table.insert(onShroomAnim, {func = AnimSay, args = {elderh, loc("The wind whispers that you are ready to become familiar with tools, now..."), SAY_SAY, 4000}})
@@ -635,6 +638,7 @@
end
function onGameStart()
+
progress = tonumber(GetCampaignVar("Progress"))
TurnTimeLeft = -1
FollowGear(youngh)
@@ -705,6 +709,7 @@
end
function onNewTurn()
+WriteLnToConsole("NEW TURN")
if CurrentHedgehog == cannibal and cannibalVisible == false then
SetState(cannibal, gstInvisible)
end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Missions/Campaign/A Space Adventure/cosmos.lua Tue Jun 25 05:10:13 2013 +0300
@@ -0,0 +1,291 @@
+------------------- 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...
+
+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 = {}
+-- 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
+ -- do nothing
+ elseif checkPointReached == 2 then
+ AnimSetGearPosition(hero.gear, saucerX, saucerY)
+ 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)
+ 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
+
+-------------- 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
+
+-------------- 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()
+ 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}})
+end
+
+------------------- custom animation functions --------------------------
+
+function startCombat()
+ -- use this so guard2 will gain control
+ AnimSwitchHog(hero.gear)
+ TurnTimeLeft = 0
+end