# HG changeset patch # User Periklis Ntanasis # Date 1386809557 -7200 # Node ID 6c3cad32d4f4e0ff3347fb8cc49102f659f0787c # Parent 5eb7c37780455413497449348132e51918b286f8 fixed getting device crates with rc plane,end game when device crates destroyed,save/load hero position for checkpoint 5 in desert01 diff -r 5eb7c3778045 -r 6c3cad32d4f4 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua Wed Dec 11 17:58:32 2013 +0200 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua Thu Dec 12 02:52:37 2013 +0200 @@ -43,6 +43,9 @@ local portalX = 1465 local girderY = 1630 local girderX = 3350 +-- win crates +local btorch2 = {} +local girder = {} -- hogs local hero = {} local ally = {} @@ -128,7 +131,19 @@ elseif checkPointReached == 4 then AnimSetGearPosition(hero.gear, 1160, 1180) elseif checkPointReached == 5 then - AnimSetGearPosition(hero.gear, girderX+40, girderY-30) + local positions = GetCampaignVar("HogsPosition") + positions = split(positions,",") + local x + local y + if positions[1] then + x = positions[1] + y = positions[2] + else + -- this should *NEVER* happen, remove? + x = girderX+40 + y = girderY-30 + end + AnimSetGearPosition(hero.gear, x, y) end AnimInit() @@ -146,6 +161,7 @@ AddEvent(onHeroAtThirdBattle, {hero.gear}, heroAtThirdBattle, {hero.gear}, 0) AddEvent(onCheckForWin1, {hero.gear}, checkForWin1, {hero.gear}, 0) AddEvent(onCheckForWin2, {hero.gear}, checkForWin2, {hero.gear}, 0) + AddEvent(onCrateDestroyed, {hero.gear}, crateDestroyed, {hero.gear}, 0) -- smugglers ammo AddAmmo(smuggler1.gear, amBazooka, 2) @@ -256,7 +272,34 @@ SetAmmo(amGirder, 0, 0, 0, 3) end +function onGearAdd(gear) + if GetGearType(gear) == gtCase then + if GetX(gear) == btorch2X and GetY(gear) == btorch2Y then + btorch2.gear = gear + btorch2.destroyed = false + btorch2.deleted = false + elseif GetX(gear) == girderX and GetY(gear) == girderY then + girder.gear = gear + girder.destroyed = false + girder.deleted = false + end + end +end + +function onGearDamage(gear, damage) + if gear == girder.gear then + girder.destroyed = true + elseif gear == btorch2.gear then + btorch2.destroyed = true + end +end + function onGearDelete(gear) + if gear == girder.gear then + girder.deleted = true + elseif gear == btorch2.gear then + btorch2.deleted = true + end if gear == hero.gear then hero.dead = true elseif (gear == smuggler1.gear or gear == smuggler2.gear or gear == smuggler3.gear) and heroIsInBattle then @@ -330,16 +373,21 @@ end function onCheckForWin1(gear) - if not hero.dead and GetX(hero.gear) > btorch2X-30 and GetX(hero.gear) < btorch2X+30 - and GetY(hero.gear) > btorch2Y-30 and GetY(hero.gear) < btorch2Y+30 then + if not hero.dead and not btorch2.destroyed and btorch2.deleted then return true end return false end function onCheckForWin2(gear) - if not hero.dead and GetX(hero.gear) > girderX-30 and GetX(hero.gear) < girderX+30 - and GetY(hero.gear) > girderY-30 and GetY(hero.gear) < girderY+30 then + if not hero.dead and not girder.destroyed and girder.deleted then + return true + end + return false +end + +function onCrateDestroyed(gear) + if not hero.dead and girder.destroyed or btorch2.destroyed then return true end return false @@ -348,13 +396,7 @@ -------------- ACTIONS ------------------ function heroDeath(gear) - SendStat(siGameResult, loc("Hog Solo lost, try again!")) - SendStat(siCustomAchievement, loc("To win the game you have to find the right crate")) - SendStat(siCustomAchievement, loc("You can avoid some battles")) - SendStat(siCustomAchievement, loc("Use your ammo wisely")) - SendStat(siPlayerKills,'1',teamB.name) - SendStat(siPlayerKills,'0',teamC.name) - EndGame() + lose() end function heroAtFirstBattle(gear) @@ -399,6 +441,10 @@ TurnTimeLeft = 0 end +function crateDestroyed(gear) + lose() +end + -- for some weird reson I couldn't call the same action for both events function checkForWin1(gear) checkForWin() @@ -408,6 +454,7 @@ -- ok lets place one more checkpoint as next part seems challenging without rope if cratesFound == 0 then saveCheckPointLocal("5") + SaveCampaignVar("HogsPosition", GetX(hero.gear)..","..GetY(hero.gear)) end checkForWin() @@ -511,3 +558,14 @@ EndGame() end end + +function lose() + SendStat(siGameResult, loc("Hog Solo lost, try again!")) + SendStat(siCustomAchievement, loc("To win the game you have to find the right crate")) + SendStat(siCustomAchievement, loc("You can avoid some battles")) + SendStat(siCustomAchievement, loc("Use your ammo wisely")) + SendStat(siCustomAchievement, loc("Don't destroy the device crate!")) + SendStat(siPlayerKills,'1',teamB.name) + SendStat(siPlayerKills,'0',teamC.name) + EndGame() +end diff -r 5eb7c3778045 -r 6c3cad32d4f4 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit02.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit02.lua Wed Dec 11 17:58:32 2013 +0200 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit02.lua Thu Dec 12 02:52:37 2013 +0200 @@ -612,25 +612,6 @@ return false end --- splits number by delimiter -function split(s, delimiter) - local res = {} - local first = "" - for i=1,s:len() do - if s:sub(1,1) == delimiter then - table.insert(res, tonumber(first)) - first = "" - else - first = first..s:sub(1,1) - end - s = s:sub(2) - end - if first:len() > 0 then - table.insert(res, tonumber(first)) - end - return res -end - function saveCheckPointLocal(cpoint) AnimCaption(hero.gear, loc("Checkpoint reached!"), 3000) saveCheckpoint(cpoint) diff -r 5eb7c3778045 -r 6c3cad32d4f4 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/global_functions.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/global_functions.lua Wed Dec 11 17:58:32 2013 +0200 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/global_functions.lua Thu Dec 12 02:52:37 2013 +0200 @@ -61,6 +61,7 @@ if GetCampaignVar("CurrentMission") ~= mission then SaveCampaignVar("CurrentMission", mission) SaveCampaignVar("CurrentMissionCheckpoint", 1) + SaveCampaignVar("HogsPosition", "") else checkPoint = tonumber(GetCampaignVar("currentMissionCheckpoint")) end @@ -98,3 +99,22 @@ end return bonus end + +-- splits number by delimiter +function split(s, delimiter) + local res = {} + local first = "" + for i=1,s:len() do + if s:sub(1,1) == delimiter then + table.insert(res, tonumber(first)) + first = "" + else + first = first..s:sub(1,1) + end + s = s:sub(2) + end + if first:len() > 0 then + table.insert(res, tonumber(first)) + end + return res +end