update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
-- taken from http://code.google.com/p/hedgewars/wiki/LuaDrawing
PointsBuffer = '' -- A string to accumulate points in
function AddPoint(x, y, width, erase)
PointsBuffer = PointsBuffer .. string.char(band(x,0xff00) / 256 , band(x,0xff) , band(y,0xff00) / 256 , band(y,0xff))
if width then
width = bor(width,0x80)
if erase then
width = bor(width,0x40)
end
PointsBuffer = PointsBuffer .. string.char(width)
else
PointsBuffer = PointsBuffer .. string.char(0)
end
if #PointsBuffer > 245 then
ParseCommand('draw '..PointsBuffer)
PointsBuffer = ''
end
end
function FlushPoints()
if #PointsBuffer > 0 then
ParseCommand('draw '..PointsBuffer)
PointsBuffer = ''
end
end
local ta_pointsize = 63
local ta_radius = (ta_pointsize * 10 + 6) / 2
local sqrttwo = math.sqrt(2)
-- creates round test area
function AddTestArea(testarea)
step = 100
xstep = step * testarea["xdir"]
ystep = step * testarea["ydir"]
x = testarea["x"]
y = testarea["y"]
if xstep * ystep ~= 0 then
xstep = math.floor(xstep / sqrttwo)
ystep = math.floor(ystep / sqrttwo)
end
AddPoint(x, y, ta_pointsize);
AddPoint(x + xstep, y + ystep, ta_pointsize, true);
end
-- vertical test areas
local taa_v1 = {x= 350, y= 400, xdir= 0, ydir= 1}
local taa_v2 = {x= 350, y=1500, xdir= 0, ydir=-1}
-- horizontal test areas
local taa_h1 = {x=1150, y= 400, xdir= 1, ydir= 0}
local taa_h2 = {x=1200, y=1100, xdir=-1, ydir= 0}
-- diagonal test areas
local taa_d1 = {x=2200, y= 400, xdir= 1, ydir= 1}
local taa_d2 = {x=2000, y=1500, xdir= 1, ydir=-1}
local taa_d3 = {x=3300, y= 400, xdir=-1, ydir= 1}
local taa_d4 = {x=3300, y=1500, xdir=-1, ydir=-1}
-- fail counter
local nfailed = 0
local nspawned = 0
local ndied = 0
function onGameInit()
-- At first we have to overwrite/set some global variables
-- that define the map, the game has to load, as well as
-- other things such as the game rules to use, etc.
-- Things we don't modify here will use their default values.
-- The base number for the random number generator
Seed = 1
-- The map to be played
MapGen = 2
-- The theme to be used
Theme = "Bamboo"
-- Game settings and rules
EnableGameFlags(gfOneClanMode, gfDisableWind, gfDisableLandObjects, gfDisableGirders, gfSolidLand)
CaseFreq = 0
MinesNum = 0
Explosives = 0
-- No damage please
DamagePercent = 1
-- Draw Map
AddPoint(10,30,0) -- hog spawn platform
-- test areas
AddTestArea(taa_v1)
AddTestArea(taa_v2)
AddTestArea(taa_h1)
AddTestArea(taa_h2)
AddTestArea(taa_d1)
AddTestArea(taa_d2)
AddTestArea(taa_d3)
AddTestArea(taa_d4)
FlushPoints()
-- Create the player team
AddTeam("'Zooka Team", 14483456, "Simple", "Island", "Default")
-- And add a hog to it
player = AddHog("Hunter", 0, 1, "NoHat")
-- place it on how spawn platform
SetGearPosition(player, 10, 10)
end
-- xdir/ydir is direction in which to fire the drills
function SpawnDrillRocketArray(testarea)
xdir = testarea["xdir"]
ydir = testarea["ydir"]
centerx = testarea["x"]
centery = testarea["y"]
distance = 23
d = distance
radius = ta_radius
speed = 900000;
local xmin, xmax, ymin, ymax
if (xdir ~= 0) and (ydir ~= 0) then
d = d / sqrttwo
radius = radius / sqrttwo
speed = math.floor(speed / sqrttwo)
end
centerx = centerx - (xdir * (radius + 20))
centery = centery - (ydir * (radius + 20))
radius = radius - 6
xn = ydir
yn = -xdir
startx = centerx - (radius * xn)
starty = centery - (radius * yn)
endx = centerx + (radius * xn)
endy = centery + (radius * yn)
-- spawn loop
x = startx
y = starty
xd = d * xn
yd = d * yn
if (xd < 0) and (startx < endx) then x = endx end
if (yd < 0) and (starty < endy) then y = endy end
nsteps = math.floor(math.max(math.abs(startx - endx),math.abs(starty - endy)) / d)
for i = 1, nsteps, 1 do
AddGear(math.floor(x), math.floor(y), gtDrill, gsttmpFlag * (i % 2), speed * xdir, speed * ydir, 0)
nspawned = nspawned + 1
x = x + xd
y = y + yd
end
end
function onGearDelete(gear)
if GetGearType(gear) == gtDrill then
-- the way to check state will change in API at some point
if band(GetState(gear), gsttmpFlag) == 0 then
-- regular drill rocket
if (GetTimer(gear) < 2000) or (GetTimer(gear) > 3000) then
nfailed = nfailed + 1
end
else
-- airstrike drill rocket
if GetTimer(gear) > 0 then
nfailed = nfailed + 1
end
end
ndied = ndied + 1
if ndied == nspawned then
WriteLnToConsole('TESTRESULT: ' .. nfailed .. ' of ' .. nspawned .. ' drill rockets did not explode as expected')
if (nfailed > 0) then
EndLuaTest(TEST_FAILED)
else
EndLuaTest(TEST_SUCCESSFUL)
end
end
end
end
function onGameStart()
SetGravity(1)
SpawnDrillRocketArray(taa_h1)
SpawnDrillRocketArray(taa_h2)
SpawnDrillRocketArray(taa_v1)
SpawnDrillRocketArray(taa_v2)
SpawnDrillRocketArray(taa_d1)
SpawnDrillRocketArray(taa_d2)
SpawnDrillRocketArray(taa_d3)
SpawnDrillRocketArray(taa_d4)
end