# HG changeset patch # User Wolfmarc and Dragonfly # Date 1288560824 -3600 # Node ID 081cd569bddfc2c2aadd715159ae7af04c33a877 # Parent 4098b7b54ec3e64164a590c0cb2a29eea48632e8 Trophyrace scripted map diff -r 4098b7b54ec3 -r 081cd569bddf share/hedgewars/Data/Maps/CMakeLists.txt --- 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}) diff -r 4098b7b54ec3 -r 081cd569bddf share/hedgewars/Data/Maps/TrophyRace/CMakeLists.txt --- /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) diff -r 4098b7b54ec3 -r 081cd569bddf share/hedgewars/Data/Maps/TrophyRace/map.cfg --- /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 diff -r 4098b7b54ec3 -r 081cd569bddf share/hedgewars/Data/Maps/TrophyRace/map.lua --- /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 diff -r 4098b7b54ec3 -r 081cd569bddf share/hedgewars/Data/Maps/TrophyRace/map.png Binary file share/hedgewars/Data/Maps/TrophyRace/map.png has changed diff -r 4098b7b54ec3 -r 081cd569bddf share/hedgewars/Data/Maps/TrophyRace/mask.png Binary file share/hedgewars/Data/Maps/TrophyRace/mask.png has changed diff -r 4098b7b54ec3 -r 081cd569bddf share/hedgewars/Data/Maps/TrophyRace/preview.png Binary file share/hedgewars/Data/Maps/TrophyRace/preview.png has changed