share/hedgewars/Data/Maps/TrophyRace/map.lua
author arrom
Sun, 07 Nov 2010 13:19:55 -0500
changeset 4188 e1bf1b5a301e
parent 4174 acaa5e7fd286
child 4350 cdb3d7a39fa2
permissions -rw-r--r--
pt_BR, the return. also fix line ending screwups

-- Hedgewars - Roperace for 2+ Players

local caption = {
	["en"] = "TrophyRace",
	["sv"] = "TrophyRace",
	["pt_PT"] = "TrophyRace",
	["pl"] = "TrophyRace",
	["es"] = "TrophyRace",
	["pt_BR"] = "TrophyRace"
	}

local goal = {
	["en"] = "Use your rope to get from start to finish as fast as you can!",
	["sv"] = "Använd ditt rep för att ta dig från start till mål så fort som möjligt!",
	["pt_PT"] = "Utilizando a corda, percorre o percurso do inicio ao fim o mais rápido que conseguires!",
	["pl"] = "Użyj liny by jak najszybciej dotrzec od startu do mety",
	["es"] = "¡Usa tu cuerda para llegar a la salida lo más rápido que puedas!",
	["pt_BR"] = "Use sua corda para ir do início ao fim o mais rápido que você puder!"
	}

local done = {
	["en"] = "You've reached the goal!| |Time: ",
	["sv"] = "Du har nått målet!| |Tid: ",
	["pt_PT"] = "Chegaste ao fim!| |Tempo: ",
	["pl"] = "Dotarłeś do celu!| |Czas: ",
	["es"] = "¡Has llegado a la meta!| |Tiempo: ",
	["pt_BR"] = "Você alcançou o objetivo!| |Tempo: "
	}

local eliminated = {
	["en"] = "Eliminating worst hedgehog this round...| |%s is OUT!",
	["sv"] = "Eliminerar sämsta igelkott den här rundan...| |%s är UTE!",
	["pt_PT"] = "A eliminar o pior ouriço da ronda...| |% está FORA!",
	["pl"] = "Eliminujemy najgorszego jeża tej rundy...| |%s ODPADŁ!",
	["es"] = "Eliminando al peor erizo de esta ronda...| |¡%s está FUERA!",
	["pt_BR"] = "Eliminando o ouriço mais lento...| |%s vai para o chuveiro!"
	}

local newbesttime = {
	["en"] = "NEW fastest lap: ",
	["sv"] = "NYTT snabbast varv: ",
	["pt_PT"] = "NOVA volta recorde: ",
	["pl"] = "NOWE najszybsze okrążenie: ",
	["es"] = "NUEVA vuelta rápida: ",
	["pt_BR"] = "NOVA volta mais rápida: "
	}

local oldbesttime = {
	["en"] = "Fastest lap: ",
	["sv"] = "Snabbast varv: ",
	["pt_PT"] = "Volta mais rápida: ",
	["pl"] = "Najszybsze okrążenie: ",
	["es"] = "Vuelta rápida: ",
	["pt_BR"] = "Volta mais rápida: "
	}

local bestclantimes = {
	["en"] = "Best laps per team: ",
	["sv"] = "Bästa varv per lag: ",
	["pt_PT"] = "Melhores voltas por equipa: ",
	["pl"] = "Najszybsze okrążenie drużyny: ",
	["es"] = "Mejores tiempos por equipo: ",
	["pt_BR"] = "Melhor volta por equipe: "
	}

local clantime = {
	["en"] = "Team %d: ",
	["sv"] = "Lag %d: ",
	["pt_PT"] = "Equipa %d: ",
	["pl"] = "Drużyna %d: ",
	["es"] = "Equipo %d",
	["pt_BR"] = "Equipe %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
	MinesNum = 0
	Explosives = 0
	Delay = 500
	SuddenDeathTurns = 99999 -- "disable" sudden death
	Theme = 'Olympics'
end

function onGameStart()
	ShowMission(loc(caption), "", 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, gtShell, 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(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