diff -r f5d858e4b634 -r 63aafc9c2a81 share/hedgewars/Data/Maps/Control/map.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Maps/Control/map.lua Fri Dec 24 00:53:50 2010 -0500 @@ -0,0 +1,453 @@ +-------------------------------- +-- CONTROL 0.3 +-------------------------------- + +-- in this version + +--------- +-- 0.2 +--------- +-- fixed score display errrors +-- added missing resurrection effects +-- moved hogs off control points if thats where they started +-- added sanity limit for the above +-- added tint tags to display clan score on each point as it scors +-- added gameflags filter +-- changed scoring rate +-- hogs now only score point DURING THEIR TURN +-- map now accepts custom weaponsets and themes +-- changed win limit + +--------- +-- 0.3 +--------- + +-- added translation support + +----------------- +--script begins +----------------- + +loadfile(GetDataPath() .. "Scripts/Locale.lua")() + +--------------------------------------------------------------- +----------lots of bad variables and things +----------because someone is too lazy +----------to read about tables properly +------------------ "Oh well, they probably have the memory" + +local gameWon = false + +local vCirc = {} +local vCircCount = 0 + +local hGCount = 0 + +local vCircX = {} +local vCircY = {} +local vCircMinA = {} +local vCircMaxA = {} +local vCircType = {} +local vCircPulse = {} +local vCircFuckAll = {} +local vCircRadius = {} +local vCircWidth = {} +local vCircCol = {} + +-------------------------- +-- hog and team tracking variales +-------------------------- + +local numhhs = 0 -- store number of hedgehogs +local hhs = {} -- store hedgehog gears + +local numTeams -- store the number of teams in the game +local teamNameArr = {} -- store the list of teams +local teamClan = {} +local teamSize = {} -- store how many hogs per team +local teamIndex = {} -- at what point in the hhs{} does each team begin + +local teamComment = {} +local teamScore = {} + +-------------------------------- +--zone and teleporter variables +-------------------------------- + +--local redTel +--local orangeTel +--local areaArr = {} -- no longer used + +local cPoint = {} +local cOwnerClan = {} + +local zXMin = {} +local zWidth = {} +local zYMin = {} +local zHeight = {} +local zOccupied = {} +local zCount = 0 + +------------------------ +-- zone methods +------------------------ +-- see on gameTick also + +function CreateZone(xMin, yMin, width, height) + + + zXMin[zCount] = xMin + zYMin[zCount] = yMin + zWidth[zCount] = width + zHeight[zCount] = height + zOccupied[zCount] = false + zCount = zCount + 1 + + return (zCount-1) + +end + +function GearIsInZone(gear, zI) + + if (GetX(gear) > zXMin[zI]) and (GetX(gear) < (zXMin[zI]+zWidth[zI])) and (GetY(gear) > zYMin[zI]) and (GetY(gear) < (zYMin[zI]+zHeight[zI])) then + zOccupied[zI] = true + else + zOccupied[zI] = false + end + + return zOccupied[zI] + +end + +function ZonesAreEmpty() + + okay = true + + for i = 0,(zCount-1) do + + for k = 0, (numhhs-1) do + if (hhs[k] ~= nil) then + if (GearIsInZone(hhs[k],i)) == true then + FindPlace(hhs[k], false, 0, LAND_WIDTH, true) + okay = false + end + end + end + end + + return(okay) + +end + +function CheckZones() + + for i = 0,(zCount-1) do + SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], vCircMinA[i], vCircMaxA[i], vCircType[i], vCircPulse[i], vCircFuckAll[i], vCircRadius[i], vCircWidth[i], 0xffffffff) + cOwnerClan[i] = nil + for k = 0, (numhhs-1) do + if (hhs[k] ~= nil) then + if (GearIsInZone(hhs[k],i)) == true then + + if cOwnerClan[i] ~= nil then + if cOwnerClan[i] ~= GetHogClan(hhs[k]) then + --if the hog now being compared is different to one that is also here and was previously compared + + SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], vCircMinA[i], vCircMaxA[i], vCircType[i], vCircPulse[i], vCircFuckAll[i], vCircRadius[i], vCircWidth[i], 0xffffffff) + --SetVisualGearValues(vCirc[i], 2739, 1378, 20, 255, 1, 10, 0, 300, 5, 0xffffffff) + + cOwnerClan[i] = 10 -- this means conflicted + end + elseif cOwnerClan[i] == nil then + cOwnerClan[i] = GetHogClan(hhs[k]) + --SetVisualGearValues(vCirc[i], 2739, 1378, 20, 255, 1, 10, 0, 300, 5, GetClanColor( GetHogClan(hhs[k])) ) + SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], vCircMinA[i], vCircMaxA[i], vCircType[i], vCircPulse[i], vCircFuckAll[i], vCircRadius[i], vCircWidth[i], GetClanColor( GetHogClan(hhs[k]))) + + end + + end + end + end + + end + +end + +function AwardPoints() + + for i = 0,(zCount-1) do + -- give score to all players controlling points + --if (cOwnerClan[i] ~= nil) and (cOwnerClan[i] ~= 10) then + -- teamScore[cOwnerClan[i]] = teamScore[cOwnerClan[i]] + 1 + --end + + -- only give score to the player currently in control + if CurrentHedgehog ~= nil then + if cOwnerClan[i] == GetHogClan(CurrentHedgehog) then + teamScore[cOwnerClan[i]] = teamScore[cOwnerClan[i]] + 1 + end + end + end + + -- i want to show all the tags at once as having the SAME score not 1,2,3,4 so alas, repeating the loop seems needed + for i = 0,(zCount-1) do + if CurrentHedgehog ~= nil then + if cOwnerClan[i] == GetHogClan(CurrentHedgehog) then + g = AddVisualGear(vCircX[i], vCircY[i], vgtHealthTag, 100, False) + SetVisualGearValues(g, vCircX[i], vCircY[i], 0, 0, 0, 0, 0, teamScore[cOwnerClan[i]], 1500, GetClanColor(cOwnerClan[i])) + end + end + end + +end + +----------------- +-- general methods +------------------ + +function RebuildTeamInfo() + + + -- make a list of individual team names + for i = 0, 5 do + teamNameArr[i] = " " -- = i + teamSize[i] = 0 + teamIndex[i] = 0 + teamScore[i] = 0 + end + numTeams = 0 + + for i = 0, (numhhs-1) do + + z = 0 + unfinished = true + while(unfinished == true) do + + newTeam = true + tempHogTeamName = GetHogTeamName(hhs[i]) -- this is the new name + + if tempHogTeamName == teamNameArr[z] then + newTeam = false + unfinished = false + end + + z = z + 1 + + if z == TeamsCount then + unfinished = false + if newTeam == true then + teamNameArr[numTeams] = tempHogTeamName + numTeams = numTeams + 1 + end + end + + end + + end + + -- find out how many hogs per team, and the index of the first hog in hhs + for i = 0, (numTeams-1) do + for z = 0, (numhhs-1) do + if GetHogTeamName(hhs[z]) == teamNameArr[i] then + teamClan[i] = GetHogClan(hhs[z]) + if teamSize[i] == 0 then + teamIndex[i] = z -- should give starting index + end + teamSize[i] = teamSize[i] + 1 + --add a pointer so this hog appears at i in hhs + end + end + + end + +end + +------------------------ +-- game methods +------------------------ + +function onGameInit() + + -- Things we don't modify here will use their default values. + --GameFlags = gfInfAttack + gfSolidLand -- Game settings and rules + + GameFlags = band(bor(GameFlags, gfInfAttack + gfSolidLand), bnot(gfKing + gfForts)) + + SuddenDeathTurns = 99 -- suddendeath is off, effectively + +end + + +function onGameStart() + + ShowMission(loc("CONTROL v0.3"), loc("by mikade"), loc("Control pillars to score points."), 0, 0) + + + -- build zones + cPoint[0] = CreateZone(571,47,120,80) + cPoint[1] = CreateZone(1029,643,120,80) + cPoint[2] = CreateZone(322,1524,120,80) + cPoint[3] = CreateZone(1883,38,120,80) + cPoint[4] = CreateZone(3821,46,120,80) + cPoint[5] = CreateZone(2679,1338,120,80) + + vCircX[0], vCircY[0] = 631, 82 + vCircX[1], vCircY[1] = 1088, 684 + vCircX[2], vCircY[2] = 381, 1569 + vCircX[3], vCircY[3] = 1942, 77 + vCircX[4], vCircY[4] = 3883, 89 + vCircX[5], vCircY[5] = 2739, 1378 + + for i = 0, 5 do + vCirc[i] = AddVisualGear(0,0,vgtCircle,0,true) + vCircMinA[i] = 20 + vCircMaxA[i] = 255 + vCircType[i] = 1 + vCircPulse[i] = 10 + vCircFuckAll[i] = 0 + vCircRadius[i] = 300 + vCircWidth[i] = 5 + vCircCol[i] = 0xffffffff + + SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], vCircMinA[i], vCircMaxA[i], vCircType[i], vCircPulse[i], vCircFuckAll[i], vCircRadius[i], vCircWidth[i], vCircCol[i]) + end + + --zxc = AddVisualGear(fSpawnX[i],fSpawnY[i],vgtCircle,0,true) + --SetVisualGearValues(zxc, 1000,1000, 20, 255, 1, 10, 0, 100, 1, GetClanColor(0)) + --minO,max0 -glowyornot --pulsate timer -- fuckall -- radius -- width -- colour + + --new improved placement schematics aw yeah + RebuildTeamInfo() + + + --SetGearPosition(hhs[0], 631, 82) + --SetGearPosition(hhs[1], 1088, 684) + --SetGearPosition(hhs[2], 381, 1569) + + -- reposition hogs if they are on control points until they are not or sanity limit kicks in + reN = 0 + --zz = 0 + while (reN < 10) do + if ZonesAreEmpty() == false then + reN = reN + 1 + --zz = zz + 1 + --SetGearPosition(hhs[0], 631, 82) -- put this in here to thwart attempts at repositioning and test sanity limit + else + reN = 15 + end + --AddCaption(zz) -- number of times it took to work + end + +end + + +function onNewTurn() + + + if lastTeam ~= GetHogTeamName(CurrentHedgehog) then + lastTeam = GetHogTeamName(CurrentHedgehog) + end + + if gameWon == false then + + for i = 0, (numTeams-1) do + if teamScore[i] >= 150 then + gameWon = true + winnerClan = i + end + end + + if gameWon == true then + for i = 0, (numhhs-1) do + if hhs[i] ~= nil then + if GetHogClan(hhs[i]) ~= winnerClan then + SetEffect(hhs[i], heResurrectable, false) + SetHealth(hhs[i],0) + end + end + end + TurnTimeLeft = 1 + end + + for i = 0,5 do + if teamNameArr[i] ~= " " then -- i + teamComment[i] = teamNameArr[i] .. ": " .. teamScore[teamClan[i]] .. loc (" points|") + elseif teamNameArr[i] == " " then + teamComment[i] = "|" + end + end + ShowMission(loc("CONTROL"), loc("Team Scores:"), teamComment[0] .. teamComment[1] .. teamComment[2] .. teamComment[3] .. teamComment[4] .. teamComment[5], 0, 1600) + + end + +end + +function onGameTick() + + vCircCount = vCircCount + 1 + if (vCircCount >= 500) and (gameWon == false) then + vCircCount = 0 + CheckZones() + --AwardPoints() + + + --[[for i = 0,5 do + + if teamNameArr[i] ~= " " then -- i + teamComment[i] = teamNameArr[i] .. ": " .. teamScore[teamClan[i] ] .. " points|" + elseif teamNameArr[i] == " " then + teamComment[i] = "|" + end + end + + ShowMission("CONTROL", "Team Scores:", teamComment[0] .. teamComment[1] .. teamComment[2] .. teamComment[3] .. teamComment[4] .. teamComment[5], 0, 1600)]] + + end + + -- things we wanna check often + if (CurrentHedgehog ~= nil) then + -- AddCaption(GetX(CurrentHedgehog) .. "; " .. GetY(CurrentHedgehog)) + --AddCaption(teamNameArr[0] .. " : " .. teamScore[0]) + --AddCaption(GetHogTeamName(CurrentHedgehog) .. " : " .. teamScore[GetHogClan(CurrentHedgehog)]) -- this end up 1? + + -- huh? the first clan added seems to be clan 1, not 0 ?? + + end + + hGCount = hGCount + 1 + if (hGCount >= 2000) and (gameWon == false) then + hGCount = 0 + AwardPoints() + end + +end + +function onGearResurrect(gear) + AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false) +end + + +function onGearAdd(gear) + + if GetGearType(gear) == gtHedgehog then + + hhs[numhhs] = gear + numhhs = numhhs + 1 + SetEffect(gear, heResurrectable, true) + + end + +end + +function onGearDelete(gear) + + if GetGearType(gear) == gtHedgehog then + --AddCaption("gear deleted!") + for i = 0, (numhhs-1) do + if gear == hhs[i] then + hhs[i] = nil + --AddCaption("for real") + end + end + end + +end