Maps:
authorsmxx
Thu, 01 Apr 2010 16:46:44 +0000
changeset 3240 e3b52d10b4c2
parent 3239 ac829895edfc
child 3241 6f51f92af8a7
Maps: * Basketball/Knockball: Avoid trying to count score or show mission goals before round start (would crash engine)
hedgewars/uWorld.pas
share/hedgewars/Data/Maps/Basketball/map.lua
share/hedgewars/Data/Maps/Knockball/map.lua
--- 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;
--- 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) .. " "
--- 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