Trophyrace scripted map
authorWolfmarc and Dragonfly
Sun, 31 Oct 2010 22:33:44 +0100
changeset 4057 081cd569bddf
parent 4056 4098b7b54ec3
child 4058 2356334ecaf1
Trophyrace scripted map
share/hedgewars/Data/Maps/CMakeLists.txt
share/hedgewars/Data/Maps/TrophyRace/CMakeLists.txt
share/hedgewars/Data/Maps/TrophyRace/map.cfg
share/hedgewars/Data/Maps/TrophyRace/map.lua
share/hedgewars/Data/Maps/TrophyRace/map.png
share/hedgewars/Data/Maps/TrophyRace/mask.png
share/hedgewars/Data/Maps/TrophyRace/preview.png
--- a/share/hedgewars/Data/Maps/CMakeLists.txt	Sun Oct 31 22:31:44 2010 +0100
+++ b/share/hedgewars/Data/Maps/CMakeLists.txt	Sun Oct 31 22:33:44 2010 +0100
@@ -34,6 +34,7 @@
 	Sticks
 	Trash
 	Tree
+	TrophyRace
 	)
 
 add_subdirectory(${dir})
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/TrophyRace/CMakeLists.txt	Sun Oct 31 22:33:44 2010 +0100
@@ -0,0 +1,7 @@
+install(FILES
+	map.cfg
+	map.lua
+	map.png
+	mask.png
+	preview.png
+	DESTINATION ${SHAREPATH}Data/Maps/TrophyRace)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/TrophyRace/map.cfg	Sun Oct 31 22:33:44 2010 +0100
@@ -0,0 +1,2 @@
+Olympics
+48
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/TrophyRace/map.lua	Sun Oct 31 22:33:44 2010 +0100
@@ -0,0 +1,202 @@
+-- Hedgewars - Roperace for 2+ Players
+
+local caption = {
+	["en"] = "ShoppaKing Map Three: TrophyRace",
+	}
+
+local subcaption = {
+	["en"] = "Made by Wolfmarc and Dragonfly",
+	}
+
+local goal = {
+	["en"] = "Use your rope to get from start to finish as fast as you can!",
+	}
+
+local done = {
+	["en"] = "You've reached the goal!| |Time: ",
+	}
+local eliminated = {
+	["en"] = "Eliminating worst hedgehog this round...| |%s is OUT!",
+	}
+
+local newbesttime = {
+	["en"] = "NEW fastest lap: ",
+	}
+
+local oldbesttime = {
+	["en"] = "Fastest lap: ",
+	}
+local bestclantimes = {
+	["en"] = "Best laps per team: ",
+	}
+local clantime = {
+	["en"] = "Team %d: ",
+	}
+
+	local function loc(text)
+	if text == nil then return "**missing**"
+	elseif text[L] == nil then return text["en"]
+	else return text[L]
+	end
+end
+
+---------------------------------------------------------------
+
+-- store number of hedgehogs
+local numhhs = 0
+
+-- store hedgehog gears
+local hhs = {}
+
+-- store best time per team
+local clantimes = {}
+
+-- store best times
+local times = {}
+
+-- in milisseconds
+local maxtime = 99000
+
+-- define start area (left, top, width, height)
+local start_area = {1606, 498, 356, 80}
+
+-- define goal area (left, top, width, height)
+local goal_area = {2030, 300, 56, 280}
+
+-- last active hog
+local lasthog = nil
+
+-- active hog reached the goal?
+local reached = false
+
+-- hog with best time
+local besthog = nil
+
+-- hog with worst time (per round)
+local worsthog = nil
+
+-- best time
+local besttime = maxtime + 1
+
+-- worst time (per round)
+local worsttime = 0
+
+function onGameInit()
+	GameFlags = gfSolidLand + gfInvulnerable
+	TurnTime = maxtime
+	CaseFreq = 0
+	LandAdds = 0
+	Explosives = 0
+	Delay = 500
+	SuddenDeathTurns = 99999 -- "disable" sudden death
+	Theme = 'Olympics'
+end
+
+function onGameStart()
+	ShowMission(loc(caption), loc(subcaption), loc(goal), -amRope, 0)
+	started = true
+	p=1820
+	for i = 0, numhhs - 1 do
+	p = p + 50	
+	SetGearPosition(hhs[i], p, 0)
+	end
+	
+	for i=0, ClansCount-1 do
+		clantimes[i] = 0
+	end
+end
+
+function onAmmoStoreInit()
+	SetAmmo(amRope, 9, 2, 0)
+end
+
+function onGameTick()
+	if TurnTimeLeft == 1 and CurrentHedgehog ~= nil then
+		SetHealth(CurrentHedgehog, 0)
+		x, y = GetGearPosition(CurrentHedgehog)
+		AddGear(x, y, gtAmmo_Grenade, 0, 0, 0, 0)
+		worsttime = 99999
+		worsthog = nil
+	elseif TurnTimeLeft == maxtime - 1 and CurrentHedgehog ~= nil then
+		if lasthog ~= nil then 
+		SetGearPosition(lasthog, p , 0)
+		end
+		reached = false
+		SetGearPosition(CurrentHedgehog, start_area[1] + start_area[3] / 2, start_area[2] + start_area[4] / 2)
+	elseif CurrentHedgehog ~= nil then
+		x, y = GetGearPosition(CurrentHedgehog)
+		if not reached and x > goal_area[1] and x < goal_area[1] + goal_area[3] and y > goal_area[2] and y < goal_area[2] + goal_area[4] then -- hog is within goal rectangle
+			reached = true
+			local ttime = maxtime - TurnTimeLeft
+			--give it a sound;)
+			if ttime < besttime then
+				PlaySound (sndHomerun)
+			else
+				PlaySound (sndHellish)
+			end
+			for i = 0, numhhs - 1 do
+				if hhs[i] == CurrentHedgehog then
+					times[numhhs] = ttime
+				end
+			end
+				
+			local hscore = "| |"
+			local clan = GetHogClan(CurrentHedgehog)
+			if ttime < clantimes[clan] or clantimes[clan] == 0 then
+				clantimes[clan] = ttime
+			end
+			
+			if ttime < besttime then
+				besttime = ttime
+				besthog = CurrentHedgehog
+				hscore = hscore .. loc(newbesttime)
+			else
+				hscore = hscore .. loc(oldbesttime)
+			end
+			if ttime > worsttime then
+				worsttime = ttime
+				worsthog = CurrentHedgehog
+			end
+			hscore = hscore .. GetHogName(besthog) .. " - " .. (besttime / 1000) .. " s | |" .. loc(bestclantimes)
+			
+			if clan == ClansCount -1 then
+				-- Time for elimination - worst hog is out and the worst hog vars are reset.
+				SetHealth(worsthog, 0)
+				--Place a grenade to make inactive slowest hog active
+				x, y = GetGearPosition(worsthog)
+				AddGear(x, y, gtAmmo_Grenade, 0, 0, 0, 0)
+				worsttime = 0
+				worsthog = nil
+				end
+			
+			for i=0, ClansCount -1 do
+				local tt = "" .. (clantimes[i] / 1000) .. " s"
+				if clantimes[i] == 0 then
+					tt = "--"
+				end
+				hscore = hscore .. "|" .. string.format(loc(clantime), i+1) .. tt
+			end
+			
+			ShowMission(loc(caption), loc(subcaption), loc(done) .. (ttime / 1000) .. " s" .. hscore, 0, 0)
+			TurnTimeLeft = 0
+		end
+	end
+end
+
+function onGearAdd(gear)
+	if GetGearType(gear) == gtHedgehog then
+		hhs[numhhs] = gear
+		times[numhhs] = 0
+		numhhs = numhhs + 1
+	elseif GetGearType(gear) == gtRope then -- rope is shot
+		
+	end
+end
+
+function onGearDelete(gear)
+	if GetGearType(gear) == gtRope then -- rope deletion - hog didn't manage to rerope
+		--TurnTimeLeft = 0 -- end turn or not? hm...
+		lasthog = CurrentHedgehog
+		
+	end
+end
Binary file share/hedgewars/Data/Maps/TrophyRace/map.png has changed
Binary file share/hedgewars/Data/Maps/TrophyRace/mask.png has changed
Binary file share/hedgewars/Data/Maps/TrophyRace/preview.png has changed