# HG changeset patch # User smxx # Date 1270140404 0 # Node ID e3b52d10b4c27667c9f3e42cbdc2f272f6f0e689 # Parent ac829895edfc0c28f6dbbeaf1d5e9230ad343403 Maps: * Basketball/Knockball: Avoid trying to count score or show mission goals before round start (would crash engine) diff -r ac829895edfc -r e3b52d10b4c2 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Thu Apr 01 16:44:56 2010 +0000 +++ b/hedgewars/uWorld.pas Thu Apr 01 16:46:44 2010 +0000 @@ -1022,6 +1022,7 @@ prevPoint.X:= 0; prevPoint.Y:= 0; missionTimer:= 0; + missionTex:= nil; FillChar(Captions, sizeof(Captions), 0) end; diff -r ac829895edfc -r e3b52d10b4c2 share/hedgewars/Data/Maps/Basketball/map.lua --- a/share/hedgewars/Data/Maps/Basketball/map.lua Thu Apr 01 16:44:56 2010 +0000 +++ b/share/hedgewars/Data/Maps/Basketball/map.lua Thu Apr 01 16:46:44 2010 +0000 @@ -66,6 +66,8 @@ local score = {[0] = 0, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 0} +local started = false + function onGameInit() GameFlags = gfSolidLand + gfBorder + gfInvulnerable + gfLowGravity TurnTime = 20000 @@ -78,6 +80,7 @@ function onGameStart() ShowMission(loc(caption), loc(subcaption), loc(goal), -amBaseballBat, 0); + started = true end function onGameTick() @@ -92,6 +95,8 @@ end function onGearDelete(gear) + if not started then + return if (GetGearType(gear) == gtHedgehog) and CurrentHedgehog ~= nil then local clan = GetHogClan(CurrentHedgehog) local s = GetHogName(gear) .. " " .. loc(drowning) .. "|" .. loc(team) .. " " .. (clan + 1) .. " " diff -r ac829895edfc -r e3b52d10b4c2 share/hedgewars/Data/Maps/Knockball/map.lua --- a/share/hedgewars/Data/Maps/Knockball/map.lua Thu Apr 01 16:44:56 2010 +0000 +++ b/share/hedgewars/Data/Maps/Knockball/map.lua Thu Apr 01 16:46:44 2010 +0000 @@ -1,103 +1,110 @@ --- Hedgewars - Knockball for 2+ Players - -local caption = { - ["en"] = "Hedgewars-Knockball", - ["de"] = "Hedgewars-Knockball", +-- Hedgewars - Knockball for 2+ Players + +local caption = { + ["en"] = "Hedgewars-Knockball", + ["de"] = "Hedgewars-Knockball", ["es"] = "Hedgewars-Knockball", - ["pl"] = "Hedgewars-Knockball" - } - -local subcaption = { - ["en"] = "Not So Friendly Match", - ["de"] = "Kein-so-Freundschaftsspiel", + ["pl"] = "Hedgewars-Knockball" + } + +local subcaption = { + ["en"] = "Not So Friendly Match", + ["de"] = "Kein-so-Freundschaftsspiel", ["es"] = "Partido no-tan-amistoso", - ["pl"] = "Mecz Nie-Taki-Towarzyski" - } - -local goal = { - ["en"] = "Bat balls at your enemies and|push them into the sea!", - ["de"] = "Schlage Bälle auf deine Widersacher|und lass sie ins Meer fallen!", + ["pl"] = "Mecz Nie-Taki-Towarzyski" + } + +local goal = { + ["en"] = "Bat balls at your enemies and|push them into the sea!", + ["de"] = "Schlage Bälle auf deine Widersacher|und lass sie ins Meer fallen!", ["es"] = "¡Batea pelotas hacia tus enemigos|y hazlos caer al agua!", - ["pl"] = "Uderzaj piłkami w swoich przeciwników|i strącaj ich do wody!" - } - -local scored = { - ["en"] = "%s is out and Team %d|scored a point!| |Score:", - ["de"] = "%s ist draußen und Team %d|erhält einen Punkt!| |Punktestand:", + ["pl"] = "Uderzaj piłkami w swoich przeciwników|i strącaj ich do wody!" + } + +local scored = { + ["en"] = "%s is out and Team %d|scored a point!| |Score:", + ["de"] = "%s ist draußen und Team %d|erhält einen Punkt!| |Punktestand:", ["es"] = "¡%s cayó y Equipo %d|anotó un tanto!| |Puntuación:", - ["pl"] = "%s utonął i drużyna %d|zdobyła punkt!| |Punktacja:" - } - -local failed = { - ["en"] = "%s is out and Team %d|scored a penalty!| |Score:", - ["de"] = "%s ist draußen und Team %d|erhält eine Strafe!| |Punktestand:", + ["pl"] = "%s utonął i drużyna %d|zdobyła punkt!| |Punktacja:" + } + +local failed = { + ["en"] = "%s is out and Team %d|scored a penalty!| |Score:", + ["de"] = "%s ist draußen und Team %d|erhält eine Strafe!| |Punktestand:", ["es"] = "¡%s cayó y Equipo %d|anotó una falta!| |Puntuación:", - ["pl"] = "%s utonął i drużyna %d|dostała punkt karny!| |Punktacja:" - } - -local function loc(text) - if text == nil then return "**missing**" - elseif text[L] == nil then return text["en"] - else return text[L] - end -end - ---------------------------------------------------------------- - -local score = {[0] = 0, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 0} - -local ball = nil - -function onGameInit() - GameFlags = gfSolidLand + gfInvulnerable + gfDivideTeams - TurnTime = 20000 - CaseFreq = 0 - LandAdds = 0 - Explosives = 0 - Delay = 500 - SuddenDeathTurns = 99999 -- "disable" sudden death -end - -function onGameStart() - ShowMission(loc(caption), loc(subcaption), loc(goal), -amBaseballBat, 0); -end - -function onGameTick() - if ball ~= nil and GetFollowGear() ~= nil then FollowGear(ball) end -end - -function onAmmoStoreInit() - SetAmmo(amBaseballBat, 9, 0, 0) - SetAmmo(amSkip, 9, 0, 0) -end - -function onGearAdd(gear) - if GetGearType(gear) == gtShover then - ball = AddGear(GetX(gear), GetY(gear), gtBall, 0, 0, 0, 0) - if ball ~= nil then - CopyPV2(gear, ball) - SetState(ball, 0x200) -- temporary - might change! - SetTag(ball, 8) -- baseball skin - FollowGear(ball) - end - end -end - -function onGearDelete(gear) - if gear == ball then - ball = nil - elseif (GetGearType(gear) == gtHedgehog) and CurrentHedgehog ~= nil then - local clan = GetHogClan(CurrentHedgehog) - local s - if GetHogClan(CurrentHedgehog) ~= GetHogClan(gear) then - score[clan] = score[clan] + 1 - s = string.format(loc(scored), GetHogName(gear), clan + 1) - else - score[clan] = score[clan] - 1 - s = string.format(loc(failed), GetHogName(gear), clan + 1) - end - s = s .. " " .. score[0] - for i = 1, ClansCount - 1 do s = s .. " - " .. score[i] end - ShowMission(loc(caption), loc(subcaption), s, -amBaseballBat, 0) - end -end + ["pl"] = "%s utonął i drużyna %d|dostała punkt karny!| |Punktacja:" + } + +local function loc(text) + if text == nil then return "**missing**" + elseif text[L] == nil then return text["en"] + else return text[L] + end +end + +--------------------------------------------------------------- + +local score = {[0] = 0, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 0} + +local ball = nil + +local started = false + +function onGameInit() + GameFlags = gfSolidLand + gfInvulnerable + gfDivideTeams + TurnTime = 20000 + CaseFreq = 0 + LandAdds = 0 + Explosives = 0 + Delay = 500 + SuddenDeathTurns = 99999 -- "disable" sudden death +end + +function onGameStart() + ShowMission(loc(caption), loc(subcaption), loc(goal), -amBaseballBat, 0) + started = true +end + +function onGameTick() + if ball ~= nil and GetFollowGear() ~= nil then FollowGear(ball) end +end + +function onAmmoStoreInit() + SetAmmo(amBaseballBat, 9, 0, 0) + SetAmmo(amSkip, 9, 0, 0) +end + +function onGearAdd(gear) + if GetGearType(gear) == gtShover then + ball = AddGear(GetX(gear), GetY(gear), gtBall, 0, 0, 0, 0) + if ball ~= nil then + CopyPV2(gear, ball) + SetState(ball, 0x200) -- temporary - might change! + SetTag(ball, 8) -- baseball skin + FollowGear(ball) + end + end +end + +function onGearDelete(gear) + if not started then + return + if gear == ball then + ball = nil + elseif (GetGearType(gear) == gtHedgehog) and CurrentHedgehog ~= nil then + local clan = GetHogClan(CurrentHedgehog) + local s + if clan ~= nil then + if GetHogClan(CurrentHedgehog) ~= GetHogClan(gear) then + score[clan] = score[clan] + 1 + s = string.format(loc(scored), GetHogName(gear), clan + 1) + else + score[clan] = score[clan] - 1 + s = string.format(loc(failed), GetHogName(gear), clan + 1) + end + s = s .. " " .. score[0] + for i = 1, ClansCount - 1 do s = s .. " - " .. score[i] end + ShowMission(loc(caption), loc(subcaption), s, -amBaseballBat, 0) + end + end +end