# HG changeset patch # User Periklis Ntanasis # Date 1375310850 -10800 # Node ID f89c512925da8d8c8071059dea54c4f6fc4f2da2 # Parent 9a150b7862e93885ec131343f20032c11af8b8e0 first battle event handlers, hero starting ammo and hero death event handlers diff -r 9a150b7862e9 -r f89c512925da share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua Wed Jul 31 23:08:08 2013 +0300 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua Thu Aug 01 01:47:30 2013 +0300 @@ -8,7 +8,7 @@ -- TODO -- maybe use same name in missionName and frontend mission name.. -- in this map I have to track the weapons the player has in checkpoints --- GENRAL NOTE: change hats :D +-- GENERAL NOTE: change hats :D HedgewarsScriptLoad("/Scripts/Locale.lua") HedgewarsScriptLoad("/Scripts/Animate.lua") @@ -17,6 +17,8 @@ -- globals local campaignName = loc("A Space Adventure") local missionName = loc("Desert planet, lost in sand!") +local heroIsInBattle = false +local ongoingBattle = 0 local checkPointReached = 1 -- 1 is normal spawn -- dialogs local dialog01 = {} @@ -60,7 +62,7 @@ ally.x = 1660 ally.y = 40 smuggler1.name = "Sanndy" -smuggler1.x = 320 +smuggler1.x = 400 smuggler1.y = 235 smuggler2.name = "Spike" smuggler2.x = 736 @@ -79,7 +81,7 @@ function onGameInit() Seed = 1 - TurnTime = 25000 + TurnTime = 20000 CaseFreq = 0 MinesNum = 0 MinesTime = 1 @@ -100,11 +102,11 @@ AnimSetGearPosition(ally.gear, ally.x, ally.y) -- Smugglers AddTeam(teamB.name, teamB.color, "Bone", "Island", "HillBilly", "cm_birdy") - smuggler1.gear = AddHog(smuggler1.name, 1, 120, "tophats") + smuggler1.gear = AddHog(smuggler1.name, 1, 100, "tophats") AnimSetGearPosition(smuggler1.gear, smuggler1.x, smuggler1.y) - smuggler2.gear = AddHog(smuggler2.name, 1, 120, "tophats") + smuggler2.gear = AddHog(smuggler2.name, 1, 100, "tophats") AnimSetGearPosition(smuggler2.gear, smuggler2.x, smuggler2.y) - smuggler3.gear = AddHog(smuggler3.name, 1, 120, "tophats") + smuggler3.gear = AddHog(smuggler3.name, 1, 100, "tophats") AnimSetGearPosition(smuggler3.gear, smuggler3.x, smuggler3.y) AnimInit() @@ -115,7 +117,20 @@ AnimWait(hero.gear, 3000) FollowGear(hero.gear) - AddAmmo(hero.gear, amRope, 10) + AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0) + AddEvent(onHeroAtFirstBattle, {hero.gear}, heroAtFirstBattle, {hero.gear}, 1) + AddEvent(onHeroFleeFirstBattle, {hero.gear}, heroFleeFirstBattle, {hero.gear}, 1) + + -- hero ammo + AddAmmo(hero.gear, amRope, 2) + AddAmmo(hero.gear, amBazooka, 3) + AddAmmo(hero.gear, amParachute, 1) + AddAmmo(hero.gear, amGrenade, 6) + AddAmmo(hero.gear, amDEagle, 4) + -- smugglers ammo + AddAmmo(smuggler1.gear, amBazooka, 2) + AddAmmo(smuggler1.gear, amGrenade, 2) + AddAmmo(smuggler1.gear, amDEagle, 2) -- spawn crates SpawnAmmoCrate(btorch1X, btorch1Y, amBlowTorch) @@ -128,7 +143,7 @@ SpawnAmmoCrate(constructX, constructY, amConstruction) SpawnHealthCrate(3300, 970) - SpawnHealthCrate(480, 460) + SpawnHealthCrate(680, 460) -- adding mines - BOOM! AddGear(1280, 460, gtMine, 0, 0, 0, 0) @@ -159,9 +174,24 @@ x = x + math.random(8,20) end + SendHealthStatsOff() AddAnim(dialog01) end +function onNewTurn() + if CurrentHedgehog ~= hero.gear and not heroIsInBattle then + TurnTimeLeft = 0 + elseif CurrentHedgehog == hero.gear and not heroIsInBattle then + TurnTimeLeft = -1 + elseif (CurrentHedgehog == smuggler2.gear or CurrentHedgehog == smuggler3.gear) and ongoingBattle == 1 then + AnimSwitchHog(hero.gear) + TurnTimeLeft = 0 + elseif CurrentHedgehog == ally.gear then + TurnTimeLeft = 0 + end + WriteLnToConsole("CURRENT HEDGEHOG IS "..CurrentHedgehog) +end + function onGameTick() AnimUnWait() if ShowAnimation() == false then @@ -190,12 +220,66 @@ end end +-------------- EVENTS ------------------ + +function onHeroDeath(gear) + if hero.dead then + return true + end + return false +end + +function onHeroAtFirstBattle(gear) + if not hero.dead and not heroIsInBattle and GetX(hero.gear) <= 1450 + and GetY(hero.gear) <= GetY(smuggler1.gear)+5 and GetY(hero.gear) >= GetY(smuggler1.gear)-5 then + return true + end + return false +end + +function onHeroFleeFirstBattle(gear) + if not hero.dead and GetHealth(smuggler1.gear) and heroIsInBattle and ongoingBattle == 1 and (GetX(hero.gear) > 1450 + or (GetY(hero.gear) < GetY(smuggler1.gear)-80 or GetY(hero.gear) > GetY(smuggler1.gear)+300)) then + return true + end + return false +end + +-------------- OUTCOMES ------------------ + +function heroDeath(gear) + SendStat('siGameResult', loc("Hog Solo lost, try again!")) --1 + SendStat('siCustomAchievement', loc("To win the game you have to find the right crate")) --11 + SendStat('siCustomAchievement', loc("You can avoid some battles")) --11 + SendStat('siCustomAchievement', loc("Use your ammo wisely")) --11 + SendStat('siPlayerKills','1',teamB.name) + SendStat('siPlayerKills','0',teamC.name) + EndGame() +end + +function heroAtFirstBattle(gear) + WriteLnToConsole("**HERO AT FIRST BATTLE") + TurnTimeLeft = 0 + heroIsInBattle = true + ongoingBattle = 1 + AnimSwitchHog(smuggler1.gear) + TurnTimeLeft = 0 +end + +function heroFleeFirstBattle(gear) + WriteLnToConsole("++HERO FLEE FIRST BATTLE") + TurnTimeLeft = 0 + heroIsInBattle = false + ongoingBattle = 0 +end + -------------- ANIMATIONS ------------------ function Skipanim(anim) if goals[anim] ~= nil then ShowMission(unpack(goals[anim])) end + AnimSwitchHog(hero.gear) end function AnimationSetup()