diff -r df9d9d19406a -r 5acf6b91df76 share/hedgewars/Data/Maps/ClimbHome/map.lua --- a/share/hedgewars/Data/Maps/ClimbHome/map.lua Tue Oct 24 18:55:19 2017 -0400 +++ b/share/hedgewars/Data/Maps/ClimbHome/map.lua Tue Oct 24 19:54:38 2017 -0400 @@ -34,7 +34,6 @@ local jokeAwardSpeed = nil local jokeAwardDamage = nil local recordBroken = false -local ready = false local dummyHog = nil local dummySkip = 0 local baseWaterSpeed = 2 @@ -118,7 +117,6 @@ elseif GetGearType(gear) == gtHedgehog then onGameTick20() onGearDamage(gear, 0) - ready = false HH[gear] = nil end end @@ -171,7 +169,6 @@ end end - ready = false startTime = GameTime --disable to preserve highest over multiple turns --will need to change water check too ofc @@ -191,7 +188,6 @@ AddVisualGear(1951,32640,vgtExplosion,0,false) SetState(CurrentHedgehog,band(GetState(CurrentHedgehog),bnot(gstInvisible))) SetWeapon(amRope) - ready = true else dummySkip = GameTime+1 end @@ -279,10 +275,6 @@ --end end - if not ready then - return - end - -- This will be executed if a player reached home in multiplayer if multiplayerVictoryDelay > 0 then multiplayerVictoryDelay = multiplayerVictoryDelay - 20 @@ -330,6 +322,16 @@ Cake = nil end end + + if CurrentHedgehog ~= nil and band(GetState(CurrentHedgehog),gstHHDriven) == 0 then + for f,i in pairs(Fire) do -- takes too long to fall otherwise + DeleteGear(f) + end + if Cake ~= nil then + DeleteGear(Cake) + Cake = nil + end + end if CurrentHedgehog ~= nil and TurnTimeLeft > 0 and band(GetState(CurrentHedgehog),gstHHDriven) ~= 0 then if MaxHeight < delayHeight and @@ -355,22 +357,10 @@ 0, c) --, 0xFFCC00FF) -- could be fun to make colour shift as you rise... Stars[s] = 1 - end - end - - if CurrentHedgehog ~= nil and band(GetState(CurrentHedgehog),gstHHDriven) == 0 then - for f,i in pairs(Fire) do -- takes too long to fall otherwise - DeleteGear(f) end - if Cake ~= nil then - DeleteGear(Cake) - Cake = nil - end - end - if CurrentHedgehog ~= nil and TurnTimeLeft > 0 then local vx, vy = GetGearVelocity(CurrentHedgehog) - local distanceFromWater = WaterLine - y + local distanceFromWater = WaterLine - y --[[ check joke awards ]] -- navy award: when distance from main map is over 1000 @@ -413,67 +403,64 @@ } end end - local finishTime = (GameTime-startTime)/1000 - local roundedFinishTime = math.ceil(math.floor(finishTime+0.5)) - if isSinglePlayer then - if distanceFromWater < 0 and not YouLost and not YouWon then - makeSinglePlayerLoserStats() - YouLost = true - ready = false - end - -- FIXME: Hog is also in winning box if it just walks into the chair from the left, touching it. Intentional? - if not YouWon and not YouLost and gearIsInBox(CurrentHedgehog, 1920, 252, 50, 50) then - AddCaption(loc("Victory!")) - ShowMission(loc("Climb Home"), - loc("Made it!"), - string.format(loc("Ahhh, home, sweet home. Made it in %d seconds."), roundedFinishTime), - -amRope, 0) - PlaySound(sndVictory,CurrentHedgehog) - SetState(CurrentHedgehog, gstWinner) - SendStat(siGameResult, loc("You have beaten the challenge!")) - SendStat(siGraphTitle, loc("Your height over time")) - SendStat(siCustomAchievement, string.format(loc("%s reached home in %.3f seconds. Congratulations!"), GetHogName(CurrentHedgehog), finishTime)) - SendStat(siCustomAchievement, string.format(loc("%s bravely climbed up to a dizzy height of %d to reach home."), GetHogName(CurrentHedgehog), getActualHeight(RecordHeight))) - SendStat(siPointType, loc("seconds")) - SendStat(siPlayerKills, tostring(roundedFinishTime), GetHogTeamName(CurrentHedgehog)) + local finishTime = (GameTime-startTime)/1000 + local roundedFinishTime = math.ceil(math.floor(finishTime+0.5)) + if isSinglePlayer then + if distanceFromWater < 0 and not YouLost and not YouWon then + makeSinglePlayerLoserStats() + YouLost = true + end + -- FIXME: Hog is also in winning box if it just walks into the chair from the left, touching it. Intentional? + if not YouWon and not YouLost and gearIsInBox(CurrentHedgehog, 1920, 252, 50, 50) then + AddCaption(loc("Victory!")) + ShowMission(loc("Climb Home"), + loc("Made it!"), + string.format(loc("Ahhh, home, sweet home. Made it in %d seconds."), roundedFinishTime), + -amRope, 0) + PlaySound(sndVictory,CurrentHedgehog) + SetState(CurrentHedgehog, gstWinner) + SendStat(siGameResult, loc("You have beaten the challenge!")) + SendStat(siGraphTitle, loc("Your height over time")) + SendStat(siCustomAchievement, string.format(loc("%s reached home in %.3f seconds. Congratulations!"), GetHogName(CurrentHedgehog), finishTime)) + SendStat(siCustomAchievement, string.format(loc("%s bravely climbed up to a dizzy height of %d to reach home."), GetHogName(CurrentHedgehog), getActualHeight(RecordHeight))) + SendStat(siPointType, loc("seconds")) + SendStat(siPlayerKills, tostring(roundedFinishTime), GetHogTeamName(CurrentHedgehog)) + + EndGame() + onAchievementsDeclaration() + YouWon = true + end + else + if distanceFromWater < 0 and not YouLost and not YouWon then + makeMultiPlayerLoserStat(CurrentHedgehog) + deadHedgehogs = deadHedgehogs + 1 + YouLost = true + if deadHedgehogs >= totalHedgehogs then + makeFinalMultiPlayerStats() EndGame() onAchievementsDeclaration() - YouWon = true - ready = false - end - else - if distanceFromWater < 0 and not YouLost and not YouWon then - makeMultiPlayerLoserStat(CurrentHedgehog) - deadHedgehogs = deadHedgehogs + 1 - YouLost = true - ready = false - if deadHedgehogs >= totalHedgehogs then - makeFinalMultiPlayerStats() - EndGame() - onAchievementsDeclaration() - end - end - -- Check victory - if not YouWon and not YouLost and gearIsInBox(CurrentHedgehog, 1920, 252, 50, 50) and - -- Delay victory if MrMine is triggered - (not MrMine or (MrMine and band(GetState(MrMine), gstAttacking) == 0)) then - -- Player managed to reach home in multiplayer. - -- Stop hog, disable controls, celebrate victory and continue the game after 4 seconds. - AddCaption(string.format(loc("%s climbed home in %d seconds!"), GetHogName(CurrentHedgehog), roundedFinishTime)) - SendStat(siCustomAchievement, string.format(loc("%s (%s) reached home in %.3f seconds."), GetHogName(CurrentHedgehog), GetHogTeamName(CurrentHedgehog), finishTime)) - makeMultiPlayerWinnerStat(CurrentHedgehog) - PlaySound(sndVictory, CurrentHedgehog) - -- TODO: Unselect weapon. - -- Note: SetWeapon(amNothing) does not work. :-( - SetGearMessage(CurrentHedgehog, band(GetGearMessage(CurrentHedgehog), bnot(gmLeft+gmRight+gmUp+gmDown+gmHJump+gmLJump+gmPrecise))) - SetInputMask(0x00) - -- TODO: Add stupid winner grin. - multiplayerVictoryDelay = 4000 - YouWon = true - ready = false end end + -- Check victory + if not YouWon and not YouLost and gearIsInBox(CurrentHedgehog, 1920, 252, 50, 50) and + -- Delay victory if MrMine is triggered + (not MrMine or (MrMine and band(GetState(MrMine), gstAttacking) == 0)) then + -- Player managed to reach home in multiplayer. + -- Stop hog, disable controls, celebrate victory and continue the game after 4 seconds. + AddCaption(string.format(loc("%s climbed home in %d seconds!"), GetHogName(CurrentHedgehog), roundedFinishTime)) + SendStat(siCustomAchievement, string.format(loc("%s (%s) reached home in %.3f seconds."), GetHogName(CurrentHedgehog), GetHogTeamName(CurrentHedgehog), finishTime)) + makeMultiPlayerWinnerStat(CurrentHedgehog) + PlaySound(sndVictory, CurrentHedgehog) + -- TODO: Unselect weapon. + -- Note: SetWeapon(amNothing) does not work. :-( + SetGearMessage(CurrentHedgehog, band(GetGearMessage(CurrentHedgehog), bnot(gmLeft+gmRight+gmUp+gmDown+gmHJump+gmLJump+gmPrecise))) + SetInputMask(0x00) + -- TODO: Add stupid winner grin. + multiplayerVictoryDelay = 4000 + YouWon = true + end + end if GameTime % 500 == 0 then if not isSinglePlayer then @@ -484,7 +471,7 @@ SendStat(siClanHealth, '0', t) end end - elseif CurrentHedgehog ~= nil then + else SendStat(siClanHealth, tostring(getActualHeight(y)), GetHogTeamName(CurrentHedgehog)) end @@ -633,7 +620,6 @@ end end YouLost = true - ready = false end end