Bigger spawn points, numbers within.

This commit is contained in:
matija-hustic
2014-05-03 18:38:30 +01:00
parent a0f6038ea6
commit ae149c420e
12 changed files with 515 additions and 29 deletions

View File

@@ -90,6 +90,19 @@ namespace OpenRA.Graphics
DrawLine(new float2(r.Left, y), new float2(r.Right, y), color, color);
}
public void FillEllipse(RectangleF r, Color color)
{
var a = (r.Right - r.Left) / 2;
var b = (r.Bottom - r.Top) / 2;
var xc = (r.Right + r.Left) / 2;
var yc = (r.Bottom + r.Top) / 2;
for (var y = r.Top; y <= r.Bottom; y++)
{
var dx = a * System.Convert.ToSingle(System.Math.Sqrt(1 - (y - yc) * (y - yc) / b / b));
DrawLine(new float2(xc - dx, y), new float2(xc + dx, y), color, color);
}
}
public void SetViewportParams(Size screen, float zoom, float2 scroll)
{
shader.SetVec("Scroll", (int)scroll.X, (int)scroll.Y);

View File

@@ -66,6 +66,7 @@ namespace OpenRA
public static float2 operator *(float2 b, float a) { return new float2(a * b.X, a * b.Y); }
public static float2 operator *( float2 a, float2 b ) { return new float2( a.X * b.X, a.Y * b.Y ); }
public static float2 operator /( float2 a, float2 b ) { return new float2( a.X / b.X, a.Y / b.Y ); }
public static float2 operator /(float2 a, float b) { return new float2(a.X / b, a.Y / b); }
public static bool operator ==(float2 me, float2 other) { return (me.X == other.X && me.Y == other.Y); }
public static bool operator !=(float2 me, float2 other) { return !(me == other); }

View File

@@ -117,15 +117,19 @@ namespace OpenRA.Widgets
var owned = colors.ContainsKey(p);
var pos = ConvertToPreview(p);
var sprite = ChromeProvider.GetImage("lobby-bits", owned ? "spawn-claimed" : "spawn-unclaimed");
var offset = new int2(-sprite.bounds.Width/2, -sprite.bounds.Height/2);
var offset = new int2(sprite.bounds.Width, sprite.bounds.Height) / 2;
if (owned)
WidgetUtils.FillRectWithColor(new Rectangle(pos.X + offset.X + 2, pos.Y + offset.Y + 2, 12, 12), colors[p]);
WidgetUtils.FillEllipseWithColor(new Rectangle(pos.X - offset.X + 1, pos.Y - offset.Y + 1, sprite.bounds.Width - 2, sprite.bounds.Height - 2), colors[p]);
Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos + offset);
Game.Renderer.Fonts[ChromeMetrics.Get<string>("SpawnFont")].DrawTextWithContrast(Convert.ToString(spawnPoints.IndexOf(p) + 1), new int2(pos.X + offset.X + 4, pos.Y + offset.Y - 15), ChromeMetrics.Get<Color>("SpawnColor"), ChromeMetrics.Get<Color>("SpawnContrastColor"), 2);
Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos - offset);
var fonts = Game.Renderer.Fonts[ChromeMetrics.Get<string>("SpawnFont")];
var number = Convert.ToString(spawnPoints.IndexOf(p) + 1);
offset = fonts.Measure(number) / 2;
offset.Y += 1; // Does not center well vertically for some reason
fonts.DrawTextWithContrast(number, pos - offset, ChromeMetrics.Get<Color>("SpawnColor"), ChromeMetrics.Get<Color>("SpawnContrastColor"), 1);
if ((pos - Viewport.LastMousePos).LengthSquared < 64)
if (((pos - Viewport.LastMousePos).ToFloat2() * offset.ToFloat2()).LengthSquared < 1)
TooltipSpawnIndex = spawnPoints.IndexOf(p) + 1;
}
}

View File

@@ -68,6 +68,11 @@ namespace OpenRA.Widgets
Game.Renderer.LineRenderer.FillRect(new RectangleF(r.X, r.Y, r.Width, r.Height), c);
}
public static void FillEllipseWithColor(Rectangle r, Color c)
{
Game.Renderer.LineRenderer.FillEllipse(new RectangleF(r.X, r.Y, r.Width, r.Height), c);
}
public static int[] GetBorderSizes(string collection)
{
var images = new[] { "border-t", "border-b", "border-l", "border-r" };

View File

@@ -134,8 +134,8 @@ namespace OpenRA.Mods.RA.Widgets
Game.Renderer.RgbaSpriteRenderer.DrawSprite(mixerSprite, RenderOrigin, new float2(RenderBounds.Size));
var sprite = ChromeProvider.GetImage("lobby-bits", "colorpicker");
var pos = RenderOrigin + PxFromValue() - new int2(sprite.bounds.Width/2, sprite.bounds.Height/2);
WidgetUtils.FillRectWithColor(new Rectangle(pos.X + 3, pos.Y + 3, 10, 10), Color.RGB);
var pos = RenderOrigin + PxFromValue() - new int2(sprite.bounds.Width, sprite.bounds.Height) / 2;
WidgetUtils.FillEllipseWithColor(new Rectangle(pos.X + 1, pos.Y + 1, sprite.bounds.Width - 2, sprite.bounds.Height - 2), Color.RGB);
Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos);
}

View File

@@ -95,7 +95,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
{
var item = ScrollItemWidget.Setup(itemTemplate,
() => client.SpawnPoint == ii,
() => orderManager.IssueOrder(Order.Command("spawn {0} {1}".F(client.Index, ii))));
() => SetSpawnPoint(orderManager, client, ii));
item.Get<LabelWidget>("LABEL").GetText = () => ii == 0 ? "-" : ii.ToString();
return item;
};
@@ -166,17 +166,20 @@ namespace OpenRA.Mods.RA.Widgets.Logic
var selectedSpawn = preview.SpawnPoints
.Select((sp, i) => Pair.New(mapPreview.ConvertToPreview(sp), i))
.Where(a => (a.First - mi.Location).LengthSquared < 64)
.Where(a => ((a.First - mi.Location).ToFloat2() / new float2(ChromeProvider.GetImage("lobby-bits", "spawn-unclaimed").bounds.Width / 2, ChromeProvider.GetImage("lobby-bits", "spawn-unclaimed").bounds.Height / 2)).LengthSquared <= 1)
.Select(a => a.Second + 1)
.FirstOrDefault();
var locals = orderManager.LobbyInfo.Clients.Where(c => c.Index == orderManager.LocalClient.Index || (Game.IsHost && c.Bot != null));
var playerToMove = locals.FirstOrDefault(c => ((selectedSpawn == 0) ^ (c.SpawnPoint == 0) && !c.IsObserver));
SetSpawnPoint(orderManager, playerToMove, selectedSpawn);
}
private static void SetSpawnPoint(OrderManager orderManager, Session.Client playerToMove, int selectedSpawn)
{
var owned = orderManager.LobbyInfo.Clients.Any(c => c.SpawnPoint == selectedSpawn);
if (selectedSpawn == 0 || !owned)
{
var locals = orderManager.LobbyInfo.Clients.Where(c => c.Index == orderManager.LocalClient.Index || (Game.IsHost && c.Bot != null));
var playerToMove = locals.FirstOrDefault(c => ((selectedSpawn == 0) ^ (c.SpawnPoint == 0) && !c.IsObserver));
orderManager.IssueOrder(Order.Command("spawn {0} {1}".F((playerToMove ?? orderManager.LocalClient).Index, selectedSpawn)));
}
}
public static Color LatencyColor(int latency)

Binary file not shown.

460
artsrc/ra/spawnpoints.svg Normal file
View File

@@ -0,0 +1,460 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
width="128"
height="128"
sodipodi:docname="spawnpoints.svg"
inkscape:export-filename="D:\Documents\Visual Studio 2013\Projects\OpenRA\artsrc\ra\spawnpoints.png"
inkscape:export-xdpi="200.42"
inkscape:export-ydpi="200.42">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<linearGradient
id="linearGradient3831"
osb:paint="solid">
<stop
style="stop-color:#868686;stop-opacity:1;"
offset="0"
id="stop3833" />
</linearGradient>
<linearGradient
id="linearGradient3834"
osb:paint="gradient">
<stop
style="stop-color:#fff200;stop-opacity:1;"
offset="0"
id="stop3836" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3838" />
</linearGradient>
<linearGradient
id="linearGradient3822">
<stop
style="stop-color:#fffa00;stop-opacity:1;"
offset="0"
id="stop3824" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3826" />
</linearGradient>
<linearGradient
id="linearGradient3851"
osb:paint="gradient">
<stop
style="stop-color:#404040;stop-opacity:1;"
offset="0"
id="stop3853" />
<stop
style="stop-color:#6e6e6e;stop-opacity:1;"
offset="1"
id="stop3855" />
</linearGradient>
<linearGradient
id="linearGradient3843">
<stop
style="stop-color:#e8e8e8;stop-opacity:1;"
offset="0"
id="stop3845" />
<stop
style="stop-color:#2c2c2c;stop-opacity:1;"
offset="1"
id="stop3847" />
</linearGradient>
<linearGradient
id="linearGradient3833">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3835" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3837" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3843-3"
id="linearGradient3849-2"
x1="0.13151181"
y1="7.9116955"
x2="16.263779"
y2="7.9116955"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3843-3">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3845-1" />
<stop
style="stop-color:#434343;stop-opacity:1;"
offset="1"
id="stop3847-6" />
</linearGradient>
<linearGradient
y2="7.9116955"
x2="16.263779"
y1="7.9116955"
x1="0.13151181"
gradientUnits="userSpaceOnUse"
id="linearGradient3874-1"
xlink:href="#linearGradient3843-3-7"
inkscape:collect="always" />
<linearGradient
id="linearGradient3843-3-7"
osb:paint="gradient">
<stop
style="stop-color:#313131;stop-opacity:1;"
offset="0"
id="stop3845-1-4" />
<stop
style="stop-color:#505050;stop-opacity:1;"
offset="1"
id="stop3847-6-0" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3843"
id="radialGradient5380"
cx="8.1976452"
cy="7.9116955"
fx="8.1976452"
fy="7.9116955"
r="8.1255808"
gradientUnits="userSpaceOnUse" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="7.9116955"
x2="16.323227"
y1="7.9116955"
x1="0.072064191"
id="linearGradient5394-8"
xlink:href="#linearGradient3843-3-0"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
r="8.1255808"
fy="7.9116955"
fx="8.1976452"
cy="7.9116955"
cx="8.1976452"
id="radialGradient5380-7"
xlink:href="#linearGradient3843-8"
inkscape:collect="always" />
<linearGradient
osb:paint="gradient"
id="linearGradient3843-3-7-9">
<stop
id="stop3845-1-4-3"
offset="0"
style="stop-color:#313131;stop-opacity:1;" />
<stop
id="stop3847-6-0-4"
offset="1"
style="stop-color:#505050;stop-opacity:1;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3843-3-7-9"
id="linearGradient3874-1-7"
gradientUnits="userSpaceOnUse"
x1="0.13151181"
y1="7.9116955"
x2="16.263779"
y2="7.9116955" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3843-3-0"
id="linearGradient3874-6"
gradientUnits="userSpaceOnUse"
x1="0.13151181"
y1="7.9116955"
x2="16.263779"
y2="7.9116955" />
<linearGradient
id="linearGradient3843-3-0">
<stop
id="stop3845-1-5"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop3847-6-4"
offset="1"
style="stop-color:#434343;stop-opacity:1;" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="7.9116955"
x2="16.263779"
y1="7.9116955"
x1="0.13151181"
id="linearGradient3849-2-6"
xlink:href="#linearGradient3843-3-0"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="7.9116955"
x2="16.569836"
y1="7.9116955"
x1="-0.17454553"
id="linearGradient3857-2"
xlink:href="#linearGradient3851-1"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="7.9116955"
x2="16.263779"
y1="7.9116955"
x1="0.13151181"
id="linearGradient3849-1"
xlink:href="#linearGradient3843-3-7-9"
inkscape:collect="always" />
<linearGradient
id="linearGradient3833-8">
<stop
id="stop3835-6"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop3837-0"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3843-8">
<stop
id="stop3845-3"
offset="0"
style="stop-color:#969696;stop-opacity:1;" />
<stop
id="stop3847-2"
offset="1"
style="stop-color:#696969;stop-opacity:1;" />
</linearGradient>
<linearGradient
osb:paint="gradient"
id="linearGradient3851-1">
<stop
id="stop3853-6"
offset="0"
style="stop-color:#575757;stop-opacity:1;" />
<stop
id="stop3855-3"
offset="1"
style="stop-color:#959595;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3822-1">
<stop
id="stop3824-3"
offset="0"
style="stop-color:#fffa00;stop-opacity:1;" />
<stop
id="stop3826-2"
offset="1"
style="stop-color:#ffffff;stop-opacity:1;" />
</linearGradient>
<linearGradient
osb:paint="gradient"
id="linearGradient3834-6">
<stop
id="stop3836-4"
offset="0"
style="stop-color:#fff200;stop-opacity:1;" />
<stop
id="stop3838-7"
offset="1"
style="stop-color:#ffffff;stop-opacity:1;" />
</linearGradient>
<linearGradient
y2="7.9116955"
x2="16.263779"
y1="7.9116955"
x1="0.13151181"
gradientUnits="userSpaceOnUse"
id="linearGradient3874-7"
xlink:href="#linearGradient3843-3-2"
inkscape:collect="always" />
<linearGradient
id="linearGradient3843-3-2">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3845-1-3" />
<stop
style="stop-color:#434343;stop-opacity:1;"
offset="1"
id="stop3847-6-7" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3851-5"
id="linearGradient3857-8"
x1="-0.17454553"
y1="7.9116955"
x2="16.569836"
y2="7.9116955"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3851-5"
osb:paint="gradient">
<stop
style="stop-color:#575757;stop-opacity:1;"
offset="0"
id="stop3853-8" />
<stop
style="stop-color:#959595;stop-opacity:1;"
offset="1"
id="stop3855-5" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3843-3-7-7"
id="linearGradient3849-8"
x1="0.13151181"
y1="7.9116955"
x2="16.263779"
y2="7.9116955"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3843-3-7-7"
osb:paint="gradient">
<stop
style="stop-color:#313131;stop-opacity:1;"
offset="0"
id="stop3845-1-4-33" />
<stop
style="stop-color:#505050;stop-opacity:1;"
offset="1"
id="stop3847-6-0-1" />
</linearGradient>
<linearGradient
y2="7.9116955"
x2="16.263779"
y1="7.9116955"
x1="0.13151181"
gradientUnits="userSpaceOnUse"
id="linearGradient5401"
xlink:href="#linearGradient3843-3-7-7"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1680"
inkscape:window-height="1027"
id="namedview4"
showgrid="false"
inkscape:zoom="8.94932"
inkscape:cx="15.532246"
inkscape:cy="99.440441"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
showguides="true"
inkscape:guide-bbox="true" />
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Layer">
<path
sodipodi:type="arc"
style="fill:none;stroke:#4b4b4b;stroke-width:0.50400807999999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="path3782"
sodipodi:cx="8.1976452"
sodipodi:cy="7.9116955"
sodipodi:rx="7.8141294"
sodipodi:ry="7.8141294"
d="m 16.011775,7.9116955 a 7.8141294,7.8141294 0 1 1 -15.62825917,0 7.8141294,7.8141294 0 1 1 15.62825917,0 z"
transform="matrix(0.99204758,0,0,0.99204758,-0.13245406,0.15122163)" />
<path
sodipodi:type="arc"
style="fill:none;stroke:#bebebe;stroke-width:1.11612278000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="path3782-1"
sodipodi:cx="8.1976452"
sodipodi:cy="7.9116955"
sodipodi:rx="7.8141294"
sodipodi:ry="7.8141294"
d="m 16.011775,7.9116955 a 7.8141294,7.8141294 0 1 1 -15.62825917,0 7.8141294,7.8141294 0 1 1 15.62825917,0 z"
transform="matrix(0.89595878,0,0,0.89595878,0.6563856,0.91030919)" />
<path
sodipodi:type="arc"
style="fill:none;stroke:#4b4b4b;stroke-width:0.62324654999999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="path3782-8"
sodipodi:cx="8.1976452"
sodipodi:cy="7.9116955"
sodipodi:rx="7.8141294"
sodipodi:ry="7.8141294"
d="m 16.011775,7.9116955 a 7.8141294,7.8141294 0 1 1 -15.62825917,0 7.8141294,7.8141294 0 1 1 15.62825917,0 z"
transform="matrix(0.80225069,0,0,0.80225069,1.4234335,1.6339462)" />
<path
sodipodi:type="arc"
style="fill:url(#radialGradient5380);stroke:#383838;stroke-width:0.6229033;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="path3782-8-9"
sodipodi:cx="8.1976452"
sodipodi:cy="7.9116955"
sodipodi:rx="7.8141294"
sodipodi:ry="7.8141294"
d="m 16.011775,7.9116955 a 7.8141294,7.8141294 0 1 1 -15.62825917,0 7.8141294,7.8141294 0 1 1 15.62825917,0 z"
transform="matrix(0.79987958,0,0,0.80229708,17.442871,1.6335792)" />
</g>
<path
style="fill:#ffc000;fill-opacity:1;stroke:none"
d="M 32,2.4999999 32,5 l 3.5,0 0,-2.5000001 c -1.061533,1.5364301 -0.432283,0.9889311 -1.747065,0 -1.285013,1.0056631 -0.663467,1.5643641 -1.752935,0 z"
id="path3820"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="m 35.5,7.5 3.5,0 -1.75,-2 z"
id="path5356"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
inkscape:export-filename="D:\Documents\Visual Studio 2013\Projects\OpenRA\mods\ra\uibits\spawnpoints.png"
inkscape:export-xdpi="200"
inkscape:export-ydpi="200" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="M 35.5,0 39,0 37.25,1.9999999 z"
id="path5356-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
inkscape:export-filename="D:\Documents\Visual Studio 2013\Projects\OpenRA\mods\ra\uibits\spawnpoints.png"
inkscape:export-xdpi="200"
inkscape:export-ydpi="200" />
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -225,11 +225,11 @@ dialog4: dialog.png
corner-br: 571,446,6,6
lobby-bits: spawnpoints.png
spawn-unclaimed: 16,0,16,16
spawn-claimed: 0,0,16,16
admin: 37,5,7,5
colorpicker: 0,0,16,16
huepicker: 45,0,7,15
spawn-unclaimed: 32,0,32,32
spawn-claimed: 0,0,32,32
admin: 64,5,7,5
colorpicker: 0,0,32,32
huepicker: 71,0,7,15
strategic: strategic.png
unowned: 0,0,32,32

View File

@@ -169,11 +169,11 @@ dialog4: dialog.png
corner-br: 571,446,6,6
lobby-bits: spawnpoints.png
spawn-unclaimed: 16,0,16,16
spawn-claimed: 0,0,16,16
admin: 37,5,7,5
colorpicker: 0,0,16,16
huepicker: 45,0,7,15
spawn-unclaimed: 32,0,32,32
spawn-claimed: 0,0,32,32
admin: 64,5,7,5
colorpicker: 0,0,32,32
huepicker: 71,0,7,15
strategic: strategic.png
unowned: 0,0,32,32

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -163,11 +163,11 @@ dialog4: dialog.png
corner-br: 571,446,6,6
lobby-bits: spawnpoints.png
spawn-unclaimed: 16,0,16,16
spawn-claimed: 0,0,16,16
admin: 37,5,7,5
colorpicker: 0,0,16,16
huepicker: 45,0,7,15
spawn-unclaimed: 32,0,32,32
spawn-claimed: 0,0,32,32
admin: 64,5,7,5
colorpicker: 0,0,32,32
huepicker: 71,0,7,15
strategic: strategic.png
unowned: 0,0,32,32