added TilesetBuilder2 and fixed it for Dune 2000

does not support TerrainTypes other than "clear" yet
This commit is contained in:
Matthias Mailänder
2012-06-07 19:22:45 +02:00
parent 676210422f
commit 8f1d06ff31
296 changed files with 7113 additions and 1380 deletions

View File

@@ -137,15 +137,19 @@ ralint: $(ralint_TARGET)
# Builds and exports tilesets from a bitmap
tsbuild_SRCS := $(shell find OpenRA.TilesetBuilder/ -iname '*.cs')
tsbuild_TARGET = TilesetBuilder.exe
tsbuild_TARGET = OpenRA.TilesetBuilder.exe
tsbuild_KIND = winexe
tsbuild_DEPS = $(fileformats_TARGET) $(game_TARGET)
tsbuild_LIBS = $(COMMON_LIBS) $(tsbuild_DEPS) System.Windows.Forms.dll
tsbuild_EXTRA = -resource:OpenRA.TilesetBuilder.Form1.resources
tsbuild_EXTRA = -resource:OpenRA.TilesetBuilder.frmBuilder.resources -resource:OpenRA.TilesetBuilder.frmNew.resources -resource:OpenRA.TilesetBuilder.Surface.resources
PROGRAMS += tsbuild
OpenRA.TilesetBuilder.Form1.resources:
resgen2 OpenRA.TilesetBuilder/Form1.resx OpenRA.TilesetBuilder.Form1.resources 1> /dev/null
tsbuild: OpenRA.TilesetBuilder.Form1.resources $(tsbuild_TARGET)
OpenRA.TilesetBuilder.frmBuilder.resources:
resgen2 OpenRA.TilesetBuilder/frmBuilder.resx OpenRA.TilesetBuilder.frmBuilder.resources 1> /dev/null
OpenRA.TilesetBuilder.frmNew.resources:
resgen2 OpenRA.TilesetBuilder/frmNew.resx OpenRA.TilesetBuilder.frmNew.resources 1> /dev/null
OpenRA.TilesetBuilder.Surface.resources:
resgen2 OpenRA.TilesetBuilder/Surface.resx OpenRA.TilesetBuilder.Surface.resources 1> /dev/null
tsbuild: OpenRA.TilesetBuilder.frmBuilder.resources OpenRA.TilesetBuilder.frmNew.resources OpenRA.TilesetBuilder.Surface.resources $(tsbuild_TARGET)
#
# Launchers / Utilities

View File

@@ -1,326 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
namespace OpenRA.TilesetBuilder
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();
this.panel1 = new System.Windows.Forms.Panel();
this.surface1 = new OpenRA.TilesetBuilder.Surface();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton14 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton3 = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.toolStripButton4 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton12 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton11 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton10 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton9 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton8 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton7 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton6 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton5 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton13 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.toolStripContainer1.ContentPanel.SuspendLayout();
this.toolStripContainer1.TopToolStripPanel.SuspendLayout();
this.toolStripContainer1.SuspendLayout();
this.panel1.SuspendLayout();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
//
// toolStripContainer1
//
//
// toolStripContainer1.ContentPanel
//
this.toolStripContainer1.ContentPanel.Controls.Add(this.panel1);
this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(745, 571);
this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.toolStripContainer1.Location = new System.Drawing.Point(0, 0);
this.toolStripContainer1.Name = "toolStripContainer1";
this.toolStripContainer1.Size = new System.Drawing.Size(745, 596);
this.toolStripContainer1.TabIndex = 0;
this.toolStripContainer1.Text = "toolStripContainer1";
//
// toolStripContainer1.TopToolStripPanel
//
this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolStrip1);
//
// panel1
//
this.panel1.AutoScroll = true;
this.panel1.Controls.Add(this.surface1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(745, 571);
this.panel1.TabIndex = 0;
//
// surface1
//
this.surface1.BackColor = System.Drawing.Color.Black;
this.surface1.Location = new System.Drawing.Point(0, 0);
this.surface1.Name = "surface1";
this.surface1.Size = new System.Drawing.Size(598, 372);
this.surface1.TabIndex = 2;
this.surface1.Text = "surface1";
//
// toolStrip1
//
this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None;
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripButton2,
this.toolStripButton14,
this.toolStripButton3,
this.toolStripSeparator1,
this.toolStripButton4,
this.toolStripButton12,
this.toolStripButton11,
this.toolStripButton10,
this.toolStripButton9,
this.toolStripButton8,
this.toolStripButton7,
this.toolStripButton6,
this.toolStripButton5,
this.toolStripButton13,
this.toolStripButton1});
this.toolStrip1.Location = new System.Drawing.Point(3, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(602, 25);
this.toolStrip1.TabIndex = 0;
//
// toolStripButton2
//
this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));
this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton2.Name = "toolStripButton2";
this.toolStripButton2.Size = new System.Drawing.Size(51, 22);
this.toolStripButton2.Text = "Save";
this.toolStripButton2.Click += new System.EventHandler(this.SaveClicked);
//
// toolStripButton14
//
this.toolStripButton14.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton14.Image")));
this.toolStripButton14.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton14.Name = "toolStripButton14";
this.toolStripButton14.Size = new System.Drawing.Size(60, 22);
this.toolStripButton14.Text = "Export";
this.toolStripButton14.Click += new System.EventHandler(this.ExportClicked);
//
// toolStripButton3
//
this.toolStripButton3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton3.Image")));
this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton3.Name = "toolStripButton3";
this.toolStripButton3.Size = new System.Drawing.Size(104, 22);
this.toolStripButton3.Text = "Show Overlays";
this.toolStripButton3.Click += new System.EventHandler(this.ShowOverlaysClicked);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
//
// toolStripButton4
//
this.toolStripButton4.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton4.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton4.Image")));
this.toolStripButton4.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton4.Name = "toolStripButton4";
this.toolStripButton4.Size = new System.Drawing.Size(25, 22);
this.toolStripButton4.Tag = "0";
this.toolStripButton4.Text = "tt0";
this.toolStripButton4.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
//
// toolStripButton12
//
this.toolStripButton12.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton12.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton12.Image")));
this.toolStripButton12.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton12.Name = "toolStripButton12";
this.toolStripButton12.Size = new System.Drawing.Size(25, 22);
this.toolStripButton12.Tag = "1";
this.toolStripButton12.Text = "tt1";
this.toolStripButton12.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
//
// toolStripButton11
//
this.toolStripButton11.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton11.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton11.Image")));
this.toolStripButton11.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton11.Name = "toolStripButton11";
this.toolStripButton11.Size = new System.Drawing.Size(25, 22);
this.toolStripButton11.Tag = "2";
this.toolStripButton11.Text = "tt2";
this.toolStripButton11.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
//
// toolStripButton10
//
this.toolStripButton10.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton10.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton10.Image")));
this.toolStripButton10.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton10.Name = "toolStripButton10";
this.toolStripButton10.Size = new System.Drawing.Size(25, 22);
this.toolStripButton10.Tag = "3";
this.toolStripButton10.Text = "tt3";
this.toolStripButton10.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
//
// toolStripButton9
//
this.toolStripButton9.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton9.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton9.Image")));
this.toolStripButton9.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton9.Name = "toolStripButton9";
this.toolStripButton9.Size = new System.Drawing.Size(25, 22);
this.toolStripButton9.Tag = "4";
this.toolStripButton9.Text = "tt4";
this.toolStripButton9.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
//
// toolStripButton8
//
this.toolStripButton8.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton8.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton8.Image")));
this.toolStripButton8.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton8.Name = "toolStripButton8";
this.toolStripButton8.Size = new System.Drawing.Size(25, 22);
this.toolStripButton8.Tag = "5";
this.toolStripButton8.Text = "tt5";
this.toolStripButton8.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
//
// toolStripButton7
//
this.toolStripButton7.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton7.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton7.Image")));
this.toolStripButton7.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton7.Name = "toolStripButton7";
this.toolStripButton7.Size = new System.Drawing.Size(25, 22);
this.toolStripButton7.Tag = "6";
this.toolStripButton7.Text = "tt6";
this.toolStripButton7.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
//
// toolStripButton6
//
this.toolStripButton6.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton6.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton6.Image")));
this.toolStripButton6.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton6.Name = "toolStripButton6";
this.toolStripButton6.Size = new System.Drawing.Size(25, 22);
this.toolStripButton6.Tag = "7";
this.toolStripButton6.Text = "tt7";
this.toolStripButton6.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
//
// toolStripButton5
//
this.toolStripButton5.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton5.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton5.Image")));
this.toolStripButton5.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton5.Name = "toolStripButton5";
this.toolStripButton5.Size = new System.Drawing.Size(25, 22);
this.toolStripButton5.Tag = "8";
this.toolStripButton5.Text = "tt8";
this.toolStripButton5.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
//
// toolStripButton13
//
this.toolStripButton13.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton13.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton13.Image")));
this.toolStripButton13.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton13.Name = "toolStripButton13";
this.toolStripButton13.Size = new System.Drawing.Size(25, 22);
this.toolStripButton13.Tag = "9";
this.toolStripButton13.Text = "tt9";
//
// toolStripButton1
//
this.toolStripButton1.Checked = true;
this.toolStripButton1.CheckState = System.Windows.Forms.CheckState.Checked;
this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton1.Name = "toolStripButton1";
this.toolStripButton1.Size = new System.Drawing.Size(88, 22);
this.toolStripButton1.Text = "Template Tool";
this.toolStripButton1.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(745, 596);
this.Controls.Add(this.toolStripContainer1);
this.Name = "Form1";
this.Text = "Tileset Builder";
this.toolStripContainer1.ContentPanel.ResumeLayout(false);
this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false);
this.toolStripContainer1.TopToolStripPanel.PerformLayout();
this.toolStripContainer1.ResumeLayout(false);
this.toolStripContainer1.PerformLayout();
this.panel1.ResumeLayout(false);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ToolStripContainer toolStripContainer1;
private System.Windows.Forms.Panel panel1;
private Surface surface1;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton toolStripButton1;
private System.Windows.Forms.ToolStripButton toolStripButton2;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripButton toolStripButton3;
private System.Windows.Forms.ToolStripButton toolStripButton4;
private System.Windows.Forms.ToolStripButton toolStripButton12;
private System.Windows.Forms.ToolStripButton toolStripButton11;
private System.Windows.Forms.ToolStripButton toolStripButton10;
private System.Windows.Forms.ToolStripButton toolStripButton9;
private System.Windows.Forms.ToolStripButton toolStripButton8;
private System.Windows.Forms.ToolStripButton toolStripButton7;
private System.Windows.Forms.ToolStripButton toolStripButton6;
private System.Windows.Forms.ToolStripButton toolStripButton5;
private System.Windows.Forms.ToolStripButton toolStripButton13;
private System.Windows.Forms.ToolStripButton toolStripButton14;
}
}

View File

@@ -1,278 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using System.Xml;
using OpenRA.FileFormats;
namespace OpenRA.TilesetBuilder
{
public partial class Form1 : Form
{
string srcfile;
int size;
public Form1( string src, int size )
{
srcfile = src;
this.size = size;
InitializeComponent();
surface1.TileSize = size;
surface1.Image = (Bitmap)Image.FromFile(src);
surface1.Image.SetResolution(96, 96); // people keep being noobs about DPI, and GDI+ cares.
surface1.TerrainTypes = new int[surface1.Image.Width / size, surface1.Image.Height / size]; /* all passable by default */
surface1.Templates = new List<Template>();
surface1.Size = surface1.Image.Size;
Load();
}
public new void Load()
{
try
{
var doc = new XmlDocument();
doc.Load(Path.ChangeExtension(srcfile, "tsx"));
foreach (var e in doc.SelectNodes("//terrain").OfType<XmlElement>())
surface1.TerrainTypes[
int.Parse(e.GetAttribute("x")),
int.Parse(e.GetAttribute("y"))] = int.Parse(e.GetAttribute("t"));
foreach (var e in doc.SelectNodes("//template").OfType<XmlElement>())
surface1.Templates.Add(new Template
{
Cells = e.SelectNodes("./cell").OfType<XmlElement>()
.Select(f => new int2(int.Parse(f.GetAttribute("x")), int.Parse(f.GetAttribute("y"))))
.ToDictionary(a => a, a => true)
});
}
catch { }
}
public void Save()
{
using (var w = XmlWriter.Create(Path.ChangeExtension(srcfile, "tsx"),
new XmlWriterSettings { Indent = true, IndentChars = " " }))
{
w.WriteStartDocument();
w.WriteStartElement("tileset");
for( var i = 0; i <= surface1.TerrainTypes.GetUpperBound(0); i++ )
for( var j = 0; j <= surface1.TerrainTypes.GetUpperBound(1); j++ )
if (surface1.TerrainTypes[i, j] != 0)
{
w.WriteStartElement("terrain");
w.WriteAttributeString("x", i.ToString());
w.WriteAttributeString("y", j.ToString());
w.WriteAttributeString("t", surface1.TerrainTypes[i, j].ToString());
w.WriteEndElement();
}
foreach (var t in surface1.Templates)
{
w.WriteStartElement("template");
foreach (var c in t.Cells.Keys)
{
w.WriteStartElement("cell");
w.WriteAttributeString("x", c.X.ToString());
w.WriteAttributeString("y", c.Y.ToString());
w.WriteEndElement();
}
w.WriteEndElement();
}
w.WriteEndElement();
w.WriteEndDocument();
}
}
void TerrainTypeSelectorClicked(object sender, EventArgs e)
{
surface1.InputMode = (sender as ToolStripButton).Tag as string;
foreach (var tsb in (sender as ToolStripButton).Owner.Items.OfType<ToolStripButton>())
tsb.Checked = false;
(sender as ToolStripButton).Checked = true;
}
void SaveClicked(object sender, EventArgs e) { Save(); }
void ShowOverlaysClicked(object sender, EventArgs e) { surface1.ShowTerrainTypes ^= true; }
void ExportClicked(object sender, EventArgs e)
{
var dir = Path.Combine(Path.GetDirectoryName(srcfile), "output");
Directory.CreateDirectory(dir);
// Create a Tileset definition
// Todo: Pull this info from the gui
var tilesetFile = "tileset-arrakis.yaml";
//var mixFile = "arrakis.mix";
var tileset = new TileSet()
{
Name = "Arrakis",
Id = "ARRAKIS",
TileSize = size,
Palette = "arrakis.pal",
Extensions = new string[] {".arr", ".shp"}
};
// List of files to add to the mix file
List<string> fileList = new List<string>();
// Export palette (use the embedded palette)
var p = surface1.Image.Palette.Entries.ToList();
fileList.Add(ExportPalette(p, Path.Combine(dir, tileset.Palette)));
// Export tile artwork
foreach (var t in surface1.Templates)
fileList.Add(ExportTemplate(t, surface1.Templates.IndexOf(t), tileset.Extensions.First(), dir));
// Add the terraintypes
// Todo: add support for multiple/different terraintypes
var terraintype = new TerrainTypeInfo()
{
Type = "Clear",
AcceptSmudge = true,
IsWater = false,
Color = Color.White
};
tileset.Terrain.Add("Clear", terraintype);
// Add the templates
ushort cur = 0;
foreach (var tp in surface1.Templates)
{
var template = new TileTemplate()
{
Id = cur,
Image = "t{0:00}".F(cur),
Size = new int2(tp.Width,tp.Height),
};
// Todo: add support for different terraintypes
// Todo: restrict cells? this doesn't work: .Where( c => surface1.TerrainTypes[c.Key.X, c.Key.Y] != 0 )
foreach (var t in tp.Cells)
template.Tiles.Add((byte)((t.Key.X - tp.Left) + tp.Width * (t.Key.Y - tp.Top)), "Clear");
tileset.Templates.Add(cur, template);
cur++;
}
tileset.Save(Path.Combine(dir, tilesetFile));
throw new NotImplementedException("NotI");
//PackageWriter.CreateMix(Path.Combine(dir, mixFile),fileList);
/*
// Cleanup
foreach (var file in fileList)
File.Delete(file);
Console.WriteLine("Finished export");
*/
}
string ExportPalette(List<Color> p, string file)
{
while (p.Count < 256) p.Add(Color.Black); // pad the palette out with extra blacks
var paletteData = p.Take(256).SelectMany(
c => new byte[] { (byte)(c.R >> 2), (byte)(c.G >> 2), (byte)(c.B >> 2) }).ToArray();
File.WriteAllBytes(file, paletteData);
return file;
}
string ExportTemplate(Template t, int n, string suffix, string dir)
{
var TileSize = size;
var filename = Path.Combine(dir, "t{0:00}{1}".F(n, suffix));
var totalTiles = t.Width * t.Height;
var ms = new MemoryStream();
using (var bw = new BinaryWriter(ms))
{
bw.Write((ushort)TileSize);
bw.Write((ushort)TileSize);
bw.Write((uint)totalTiles);
bw.Write((ushort)t.Width);
bw.Write((ushort)t.Height);
bw.Write((uint)0); // filesize placeholder
bw.Flush();
bw.Write((uint)ms.Position + 24); // image start
bw.Write((uint)0); // 0 (32bits)
bw.Write((uint)0x2c730f8a); // magic?
bw.Write((uint)0); // flags start
bw.Write((uint)0); // walk start
bw.Write((uint)0); // index start
var src = surface1.Image;
var data = src.LockBits(src.Bounds(), ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);
unsafe
{
byte* p = (byte*)data.Scan0;
for (var v = 0; v < t.Height; v++)
for (var u = 0; u < t.Width; u++)
{
if (t.Cells.ContainsKey(new int2(u + t.Left, v + t.Top)))
{
byte* q = p + data.Stride * TileSize * (v + t.Top) + TileSize * (u + t.Left);
for (var j = 0; j < TileSize; j++)
for (var i = 0; i < TileSize; i++)
bw.Write(q[i + j * data.Stride]);
}
else
for (var x = 0; x < TileSize * TileSize; x++)
bw.Write((byte)0); /* todo: don't fill with air */
}
}
src.UnlockBits(data);
bw.Flush();
var indexStart = ms.Position;
for (var v = 0; v < t.Height; v++)
for (var u = 0; u < t.Width; u++)
bw.Write(t.Cells.ContainsKey(new int2(u + t.Left, v + t.Top))
? (byte)(u + t.Width * v)
: (byte)0xff);
bw.Flush();
var flagsStart = ms.Position;
for (var x = 0; x < totalTiles; x++ )
bw.Write((byte)0);
bw.Flush();
var walkStart = ms.Position;
for (var x = 0; x < totalTiles; x++)
bw.Write((byte)0x8);
var bytes = ms.ToArray();
Array.Copy(BitConverter.GetBytes((uint)bytes.Length), 0, bytes, 12, 4);
Array.Copy(BitConverter.GetBytes(flagsStart), 0, bytes, 28, 4);
Array.Copy(BitConverter.GetBytes(walkStart), 0, bytes, 32, 4);
Array.Copy(BitConverter.GetBytes(indexStart), 0, bytes, 36, 4);
File.WriteAllBytes(filename, bytes);
}
return filename;
}
}
}

View File

@@ -1,334 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="toolStripButton2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton14.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton12.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton11.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton10.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton9.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton8.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton7.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton6.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton5.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton13.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
/g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
</value>
</data>
</root>

View File

@@ -1,107 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{56B1073B-AE14-499A-BB98-43A8DE9A39CA}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>OpenRA.TilesetBuilder</RootNamespace>
<AssemblyName>OpenRA.TilesetBuilder</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="Surface.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Template.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj">
<Project>{BDAEAB25-991E-46A7-AF1E-4F0E03358DAA}</Project>
<Name>OpenRA.FileFormats</Name>
</ProjectReference>
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">
<Project>{0DFB103F-2962-400F-8C6D-E2C28CCBA633}</Project>
<Name>OpenRA.Game</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>OpenRA.TilesetBuilder2</RootNamespace>
<AssemblyName>OpenRA.TilesetBuilder2</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ApplicationIcon>tilesetbuilder_icon copy.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="frmBuilder.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmBuilder.Designer.cs">
<DependentUpon>frmBuilder.cs</DependentUpon>
</Compile>
<Compile Include="frmNew.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmNew.Designer.cs">
<DependentUpon>frmNew.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="frmBuilder.resx">
<DependentUpon>frmBuilder.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmNew.resx">
<DependentUpon>frmNew.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Surface.resx">
<DependentUpon>Surface.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="Surface.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Template.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj">
<Project>{BDAEAB25-991E-46A7-AF1E-4F0E03358DAA}</Project>
<Name>OpenRA.FileFormats</Name>
</ProjectReference>
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">
<Project>{0DFB103F-2962-400F-8C6D-E2C28CCBA633}</Project>
<Name>OpenRA.Game</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="tilesetbuilder_icon copy.ico" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,28 +1,35 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using System;
using System.Linq;
using System.Windows.Forms;
namespace OpenRA.TilesetBuilder
{
static class Program
{
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Console.WriteLine("{0} {1}",args[0], args[1]);
Application.Run(new Form1(args[0], int.Parse(args[1])));
}
}
}
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using System;
using System.Linq;
using System.Windows.Forms;
namespace OpenRA.TilesetBuilder
{
static class Program
{
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Console.WriteLine("{0} {1}",args[0], args[1]);
if (args.Length < 1)
{
Application.Run(new frmBuilder("", "0"));
}
else
{
Application.Run(new frmBuilder(args[0], args[1]));
}
}
}
}

View File

@@ -1,46 +1,36 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenRA.TilesetBuilder")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("OpenRA.TilesetBuilder")]
[assembly: AssemblyCopyright("Copyright © 2010")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("9efec6a6-74f7-4a7d-a509-aba2aae75bcc")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenRA.TilesetBuilder")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("OpenRA.TilesetBuilder")]
[assembly: AssemblyCopyright("Copyright © 2010")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("9efec6a6-74f7-4a7d-a509-aba2aae75bcc")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,71 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4200
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace OpenRA.TilesetBuilder.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OpenRA.TilesetBuilder.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4200
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace OpenRA.TilesetBuilder.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OpenRA.TilesetBuilder2.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

View File

@@ -1,30 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4200
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace OpenRA.TilesetBuilder.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4200
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace OpenRA.TilesetBuilder.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@@ -1,124 +1,139 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace OpenRA.TilesetBuilder
{
class Surface : Control
{
public Bitmap Image;
public int[,] TerrainTypes;
public List<Template> Templates = new List<Template>();
public bool ShowTerrainTypes = true;
public string InputMode;
public int TileSize;
Template CurrentTemplate;
public Surface()
{
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.ResizeRedraw, true);
UpdateStyles();
}
Brush currentBrush = new SolidBrush(Color.FromArgb(60, Color.White));
protected override void OnPaint(PaintEventArgs e)
{
if (Image == null || TerrainTypes == null || Templates == null)
return;
/* draw the background */
e.Graphics.DrawImageUnscaled(Image, 0, 0);
/* draw terrain type overlays */
if (ShowTerrainTypes)
for (var i = 0; i <= TerrainTypes.GetUpperBound(0); i++)
for (var j = 0; j <= TerrainTypes.GetUpperBound(1); j++)
if (TerrainTypes[i, j] != 0)
{
e.Graphics.FillRectangle(Brushes.Black, TileSize * i + 10, TileSize * j + 10, 10, 10);
e.Graphics.DrawString(TerrainTypes[i, j].ToString(),
Font, Brushes.LimeGreen, TileSize * i + 10, TileSize * j + 10);
}
/* draw template outlines */
foreach (var t in Templates)
{
foreach (var c in t.Cells.Keys)
{
if (CurrentTemplate == t)
e.Graphics.FillRectangle(currentBrush, TileSize * c.X, TileSize * c.Y, TileSize, TileSize);
if (!t.Cells.ContainsKey(c + new int2(-1, 0)))
e.Graphics.DrawLine(Pens.Red, (TileSize * c).ToPoint(), (TileSize * (c + new int2(0, 1))).ToPoint());
if (!t.Cells.ContainsKey(c + new int2(+1, 0)))
e.Graphics.DrawLine(Pens.Red, (TileSize * (c + new int2(1, 0))).ToPoint(), (TileSize * (c + new int2(1, 1))).ToPoint());
if (!t.Cells.ContainsKey(c + new int2(0, +1)))
e.Graphics.DrawLine(Pens.Red, (TileSize * (c + new int2(0, 1))).ToPoint(), (TileSize * (c + new int2(1, 1))).ToPoint());
if (!t.Cells.ContainsKey(c + new int2(0, -1)))
e.Graphics.DrawLine(Pens.Red, (TileSize * c).ToPoint(), (TileSize * (c + new int2(1, 0))).ToPoint());
}
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
var pos = new int2(e.X / TileSize, e.Y / TileSize);
if (InputMode == null)
{
if (e.Button == MouseButtons.Left)
{
CurrentTemplate = Templates.FirstOrDefault(t => t.Cells.ContainsKey(pos));
if (CurrentTemplate == null)
Templates.Add(CurrentTemplate = new Template { Cells = new Dictionary<int2, bool> { { pos, true } } });
Invalidate();
}
if (e.Button == MouseButtons.Right)
{
Templates.RemoveAll(t => t.Cells.ContainsKey(pos));
CurrentTemplate = null;
Invalidate();
}
}
else
{
TerrainTypes[pos.X, pos.Y] = int.Parse(InputMode);
Invalidate();
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
var pos = new int2(e.X / TileSize, e.Y / TileSize);
if (InputMode == null)
{
if (e.Button == MouseButtons.Left && CurrentTemplate != null)
{
if (!CurrentTemplate.Cells.ContainsKey(pos))
{
CurrentTemplate.Cells[pos] = true;
Invalidate();
}
}
}
}
}
}
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace OpenRA.TilesetBuilder
{
class Surface : Control
{
public Bitmap Image;
private ImageList ImagesListControl;
public int[,] TerrainTypes;
public List<Template> Templates = new List<Template>();
private bool bShowTerrainTypes;
public string InputMode;
public Bitmap[] icon;
public int TileSize;
//private System.ComponentModel.IContainer components;
Template CurrentTemplate;
public bool ShowTerrainTypes
{
get { return bShowTerrainTypes; }
set { bShowTerrainTypes = value; }
}
public ImageList ImagesList
{
get { return ImagesListControl; }
set { ImagesListControl = value; }
}
public Surface()
{
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.ResizeRedraw, true);
UpdateStyles();
}
Brush currentBrush = new SolidBrush(Color.FromArgb(60, Color.White));
protected override void OnPaint(PaintEventArgs e)
{
if (Image == null || TerrainTypes == null || Templates == null)
return;
/* draw the background */
e.Graphics.DrawImageUnscaled(Image, 0, 0);
/* draw terrain type overlays */
if (ShowTerrainTypes)
{
for (var i = 0; i <= TerrainTypes.GetUpperBound(0); i++)
for (var j = 0; j <= TerrainTypes.GetUpperBound(1); j++)
if (TerrainTypes[i, j] != 0)
{
//e.Graphics.FillRectangle(Brushes.Black, TileSize * i + 8, TileSize * j + 8, 16, 16);
e.Graphics.DrawImage(icon[TerrainTypes[i, j]], TileSize * i + 8, TileSize * j + 8, 16, 16);
//e.Graphics.DrawString(TerrainTypes[i, j].ToString(),
//Font, Brushes.LimeGreen, TileSize * i + 10, TileSize * j + 10);
}
}
/* draw template outlines */
foreach (var t in Templates)
{
foreach (var c in t.Cells.Keys)
{
if (CurrentTemplate == t)
e.Graphics.FillRectangle(currentBrush, TileSize * c.X, TileSize * c.Y, TileSize, TileSize);
if (!t.Cells.ContainsKey(c + new int2(-1, 0)))
e.Graphics.DrawLine(Pens.Red, (TileSize * c).ToPoint(), (TileSize * (c + new int2(0, 1))).ToPoint());
if (!t.Cells.ContainsKey(c + new int2(+1, 0)))
e.Graphics.DrawLine(Pens.Red, (TileSize * (c + new int2(1, 0))).ToPoint(), (TileSize * (c + new int2(1, 1))).ToPoint());
if (!t.Cells.ContainsKey(c + new int2(0, +1)))
e.Graphics.DrawLine(Pens.Red, (TileSize * (c + new int2(0, 1))).ToPoint(), (TileSize * (c + new int2(1, 1))).ToPoint());
if (!t.Cells.ContainsKey(c + new int2(0, -1)))
e.Graphics.DrawLine(Pens.Red, (TileSize * c).ToPoint(), (TileSize * (c + new int2(1, 0))).ToPoint());
}
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
var pos = new int2(e.X / TileSize, e.Y / TileSize);
if (InputMode == null)
{
if (e.Button == MouseButtons.Left)
{
CurrentTemplate = Templates.FirstOrDefault(t => t.Cells.ContainsKey(pos));
if (CurrentTemplate == null)
Templates.Add(CurrentTemplate = new Template { Cells = new Dictionary<int2, bool> { { pos, true } } });
Invalidate();
}
if (e.Button == MouseButtons.Right)
{
Templates.RemoveAll(t => t.Cells.ContainsKey(pos));
CurrentTemplate = null;
Invalidate();
}
}
else
{
TerrainTypes[pos.X, pos.Y] = int.Parse(InputMode);
Invalidate();
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
var pos = new int2(e.X / TileSize, e.Y / TileSize);
if (InputMode == null)
{
if (e.Button == MouseButtons.Left && CurrentTemplate != null)
{
if (!CurrentTemplate.Cells.ContainsKey(pos))
{
CurrentTemplate.Cells[pos] = true;
Invalidate();
}
}
}
}
private void InitializeComponent()
{
this.SuspendLayout();
this.ResumeLayout(false);
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>

View File

@@ -1,29 +1,19 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using System.Collections.Generic;
using System.Linq;
namespace OpenRA.TilesetBuilder
{
class Template
{
public Dictionary<int2, bool> Cells = new Dictionary<int2, bool>();
public int Left { get { return Cells.Keys.Min(c => c.X); } }
public int Top { get { return Cells.Keys.Min(c => c.Y); } }
public int Right { get { return Cells.Keys.Max(c => c.X) + 1; } }
public int Bottom { get { return Cells.Keys.Max(c => c.Y) + 1; } }
public int Width { get { return Right - Left; } }
public int Height { get { return Bottom - Top; } }
}
}
using System.Collections.Generic;
using System.Linq;
namespace OpenRA.TilesetBuilder
{
class Template
{
public Dictionary<int2, bool> Cells = new Dictionary<int2, bool>();
public int Left { get { return Cells.Keys.Min(c => c.X); } }
public int Top { get { return Cells.Keys.Min(c => c.Y); } }
public int Right { get { return Cells.Keys.Max(c => c.X) + 1; } }
public int Bottom { get { return Cells.Keys.Max(c => c.Y) + 1; } }
public int Width { get { return Right - Left; } }
public int Height { get { return Bottom - Top; } }
}
}

View File

@@ -0,0 +1,349 @@
namespace OpenRA.TilesetBuilder
{
partial class frmBuilder
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmBuilder));
this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();
this.panel1 = new System.Windows.Forms.Panel();
this.imageList = new System.Windows.Forms.ImageList(this.components);
this.tsTerrainTypes = new System.Windows.Forms.ToolStrip();
this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.toolStripLabel4 = new System.Windows.Forms.ToolStripLabel();
this.txtTilesetName = new System.Windows.Forms.ToolStripTextBox();
this.toolStripLabel5 = new System.Windows.Forms.ToolStripLabel();
this.txtID = new System.Windows.Forms.ToolStripTextBox();
this.lblExt = new System.Windows.Forms.ToolStripLabel();
this.txtExt = new System.Windows.Forms.ToolStripTextBox();
this.toolStripLabel6 = new System.Windows.Forms.ToolStripLabel();
this.txtPal = new System.Windows.Forms.ToolStripTextBox();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();
this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStripButton15 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton14 = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.toolStripButton3 = new System.Windows.Forms.ToolStripButton();
this.surface1 = new OpenRA.TilesetBuilder.Surface();
this.toolStripContainer1.ContentPanel.SuspendLayout();
this.toolStripContainer1.TopToolStripPanel.SuspendLayout();
this.toolStripContainer1.SuspendLayout();
this.panel1.SuspendLayout();
this.tsTerrainTypes.SuspendLayout();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
//
// toolStripContainer1
//
//
// toolStripContainer1.ContentPanel
//
this.toolStripContainer1.ContentPanel.Controls.Add(this.panel1);
this.toolStripContainer1.ContentPanel.Controls.Add(this.tsTerrainTypes);
this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(908, 571);
this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.toolStripContainer1.Location = new System.Drawing.Point(0, 0);
this.toolStripContainer1.Name = "toolStripContainer1";
this.toolStripContainer1.Size = new System.Drawing.Size(908, 596);
this.toolStripContainer1.TabIndex = 0;
this.toolStripContainer1.Text = "toolStripContainer1";
//
// toolStripContainer1.TopToolStripPanel
//
this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolStrip1);
this.toolStripContainer1.TopToolStripPanel.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
this.toolStripContainer1.TopToolStripPanel.Click += new System.EventHandler(this.toolStripContainer1_TopToolStripPanel_Click);
//
// panel1
//
this.panel1.AutoScroll = true;
this.panel1.BackColor = System.Drawing.Color.Black;
this.panel1.Controls.Add(this.surface1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(788, 571);
this.panel1.TabIndex = 3;
//
// imageList
//
this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
this.imageList.TransparentColor = System.Drawing.Color.Transparent;
this.imageList.Images.SetKeyName(0, "clear.png");
this.imageList.Images.SetKeyName(1, "water.png");
this.imageList.Images.SetKeyName(2, "road.png");
this.imageList.Images.SetKeyName(3, "rock.png");
this.imageList.Images.SetKeyName(4, "river.png");
this.imageList.Images.SetKeyName(5, "rough.png");
this.imageList.Images.SetKeyName(6, "wall.png");
this.imageList.Images.SetKeyName(7, "beach.png");
this.imageList.Images.SetKeyName(8, "tree.png");
this.imageList.Images.SetKeyName(9, "tiberium.png");
//
// tsTerrainTypes
//
this.tsTerrainTypes.AutoSize = false;
this.tsTerrainTypes.Dock = System.Windows.Forms.DockStyle.Right;
this.tsTerrainTypes.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripLabel3,
this.toolStripSeparator3,
this.toolStripLabel4,
this.txtTilesetName,
this.toolStripLabel5,
this.txtID,
this.lblExt,
this.txtExt,
this.toolStripLabel6,
this.txtPal,
this.toolStripSeparator5,
this.toolStripLabel2,
this.toolStripSeparator4,
this.toolStripButton1});
this.tsTerrainTypes.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;
this.tsTerrainTypes.Location = new System.Drawing.Point(788, 0);
this.tsTerrainTypes.Name = "tsTerrainTypes";
this.tsTerrainTypes.Size = new System.Drawing.Size(120, 571);
this.tsTerrainTypes.TabIndex = 1;
this.tsTerrainTypes.Text = "toolStrip3";
//
// toolStripLabel3
//
this.toolStripLabel3.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold);
this.toolStripLabel3.Name = "toolStripLabel3";
this.toolStripLabel3.Size = new System.Drawing.Size(118, 13);
this.toolStripLabel3.Text = "Tileset setup";
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(118, 6);
//
// toolStripLabel4
//
this.toolStripLabel4.Name = "toolStripLabel4";
this.toolStripLabel4.Size = new System.Drawing.Size(118, 13);
this.toolStripLabel4.Text = "Tileset name:";
//
// txtTilesetName
//
this.txtTilesetName.MaxLength = 32;
this.txtTilesetName.Name = "txtTilesetName";
this.txtTilesetName.Size = new System.Drawing.Size(116, 21);
this.txtTilesetName.Text = "Temperat";
this.txtTilesetName.TextChanged += new System.EventHandler(this.txtTilesetName_TextChanged);
//
// toolStripLabel5
//
this.toolStripLabel5.Name = "toolStripLabel5";
this.toolStripLabel5.Size = new System.Drawing.Size(118, 13);
this.toolStripLabel5.Text = "Tileset ID:";
//
// txtID
//
this.txtID.Name = "txtID";
this.txtID.ReadOnly = true;
this.txtID.Size = new System.Drawing.Size(116, 21);
this.txtID.Text = "TEMPERAT";
//
// lblExt
//
this.lblExt.Name = "lblExt";
this.lblExt.Size = new System.Drawing.Size(118, 13);
this.lblExt.Text = "Extensions:";
//
// txtExt
//
this.txtExt.Name = "txtExt";
this.txtExt.ReadOnly = true;
this.txtExt.Size = new System.Drawing.Size(116, 21);
this.txtExt.Text = ".tem,.shp";
//
// toolStripLabel6
//
this.toolStripLabel6.Name = "toolStripLabel6";
this.toolStripLabel6.Size = new System.Drawing.Size(118, 13);
this.toolStripLabel6.Text = "Palette:";
//
// txtPal
//
this.txtPal.Name = "txtPal";
this.txtPal.ReadOnly = true;
this.txtPal.Size = new System.Drawing.Size(116, 21);
this.txtPal.Text = "temperat.pal";
//
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(118, 6);
//
// toolStripLabel2
//
this.toolStripLabel2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold);
this.toolStripLabel2.Name = "toolStripLabel2";
this.toolStripLabel2.Size = new System.Drawing.Size(118, 13);
this.toolStripLabel2.Text = "Terrain type";
//
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(118, 6);
//
// toolStripButton1
//
this.toolStripButton1.Checked = true;
this.toolStripButton1.CheckState = System.Windows.Forms.CheckState.Checked;
this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton1.Name = "toolStripButton1";
this.toolStripButton1.Size = new System.Drawing.Size(118, 20);
this.toolStripButton1.Text = "Template Tool";
this.toolStripButton1.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
//
// toolStrip1
//
this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None;
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripButton15,
this.toolStripButton2,
this.toolStripButton14,
this.toolStripSeparator1,
this.toolStripButton3});
this.toolStrip1.Location = new System.Drawing.Point(3, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(275, 25);
this.toolStrip1.TabIndex = 0;
//
// toolStripButton15
//
this.toolStripButton15.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton15.Image")));
this.toolStripButton15.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton15.Name = "toolStripButton15";
this.toolStripButton15.Size = new System.Drawing.Size(48, 22);
this.toolStripButton15.Text = "New";
this.toolStripButton15.Click += new System.EventHandler(this.toolStripButton15_Click);
//
// toolStripButton2
//
this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));
this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton2.Name = "toolStripButton2";
this.toolStripButton2.Size = new System.Drawing.Size(51, 22);
this.toolStripButton2.Text = "Save";
this.toolStripButton2.Click += new System.EventHandler(this.SaveClicked);
//
// toolStripButton14
//
this.toolStripButton14.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton14.Image")));
this.toolStripButton14.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton14.Name = "toolStripButton14";
this.toolStripButton14.Size = new System.Drawing.Size(59, 22);
this.toolStripButton14.Text = "Export";
this.toolStripButton14.Click += new System.EventHandler(this.ExportClicked);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
//
// toolStripButton3
//
this.toolStripButton3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton3.Image")));
this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton3.Name = "toolStripButton3";
this.toolStripButton3.Size = new System.Drawing.Size(70, 22);
this.toolStripButton3.Text = "Overlays";
this.toolStripButton3.Click += new System.EventHandler(this.ShowOverlaysClicked);
//
// surface1
//
this.surface1.BackColor = System.Drawing.Color.Black;
this.surface1.ImagesList = this.imageList;
this.surface1.Location = new System.Drawing.Point(0, 0);
this.surface1.Name = "surface1";
this.surface1.ShowTerrainTypes = true;
this.surface1.Size = new System.Drawing.Size(653, 454);
this.surface1.TabIndex = 2;
this.surface1.Text = "surface1";
//
// frmBuilder
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(908, 596);
this.Controls.Add(this.toolStripContainer1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "frmBuilder";
this.Text = "Tileset Builder 2";
this.toolStripContainer1.ContentPanel.ResumeLayout(false);
this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false);
this.toolStripContainer1.TopToolStripPanel.PerformLayout();
this.toolStripContainer1.ResumeLayout(false);
this.toolStripContainer1.PerformLayout();
this.panel1.ResumeLayout(false);
this.tsTerrainTypes.ResumeLayout(false);
this.tsTerrainTypes.PerformLayout();
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ToolStripContainer toolStripContainer1;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton toolStripButton2;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripButton toolStripButton3;
private System.Windows.Forms.ToolStripButton toolStripButton14;
public System.Windows.Forms.ImageList imageList;
private System.Windows.Forms.ToolStrip tsTerrainTypes;
private System.Windows.Forms.Panel panel1;
private Surface surface1;
private System.Windows.Forms.ToolStripLabel toolStripLabel2;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
private System.Windows.Forms.ToolStripButton toolStripButton15;
private System.Windows.Forms.ToolStripButton toolStripButton1;
private System.Windows.Forms.ToolStripLabel toolStripLabel3;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripLabel toolStripLabel4;
private System.Windows.Forms.ToolStripTextBox txtTilesetName;
private System.Windows.Forms.ToolStripLabel toolStripLabel5;
private System.Windows.Forms.ToolStripTextBox txtID;
private System.Windows.Forms.ToolStripLabel lblExt;
private System.Windows.Forms.ToolStripTextBox txtExt;
private System.Windows.Forms.ToolStripLabel toolStripLabel6;
private System.Windows.Forms.ToolStripTextBox txtPal;
}
}

View File

@@ -0,0 +1,447 @@
#region Copyright & License Information
/*
* Copyright 2007-2012 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using System.Xml;
using System.Runtime.InteropServices;
using OpenRA.FileFormats;
namespace OpenRA.TilesetBuilder
{
public partial class frmBuilder : Form
{
string srcfile;
int size;
public TerrainTypeInfo[] TerrainType;
public Palette tpal;
public bool PaletteFromImage = true;
public string PaletteFile = "";
public string ImageFile = "";
public int TileSize = 24;
private int ColorDiff(Color color, Color curr)
{
return Math.Abs(color.R - curr.R) + Math.Abs(color.G - curr.G) + Math.Abs(color.B - curr.B);
}
public void CreateNewTileset()
{
this.Show();
using (var fNew = new frmNew { })
if (DialogResult.OK == fNew.ShowDialog())
{
PaletteFromImage = fNew.PaletteFromImage;
PaletteFile = fNew.PaletteFile;
ImageFile = fNew.ImageFile;
TileSize = fNew.TileSize;
srcfile = ImageFile;
this.size = TileSize;
surface1.TileSize = TileSize;
Bitmap fbitmap = new Bitmap(ImageFile);
Bitmap rbitmap = fbitmap.Clone(new Rectangle(0, 0, fbitmap.Width, fbitmap.Height),
fbitmap.PixelFormat);
if (!PaletteFromImage)
{
tpal = Palette.Load(PaletteFile, false);
rbitmap.Palette = tpal.AsSystemPalette();
}
surface1.Image = (Bitmap)rbitmap; //(Bitmap)Image.FromFile(src);
surface1.Image.SetResolution(96, 96); // people keep being noobs about DPI, and GDI+ cares.
surface1.TerrainTypes = new int[surface1.Image.Width / size, surface1.Image.Height / size]; /* all passable by default */
surface1.Templates = new List<Template>();
surface1.Size = surface1.Image.Size;
surface1.Enabled = true;
Load();
}
}
public frmBuilder( string src, string tsize )
{
InitializeComponent();
Dictionary<string, TerrainTypeInfo> DefTerrain = new Dictionary<string, TerrainTypeInfo>();
int size = int.Parse(tsize);
var yaml = MiniYaml.DictFromFile("tsbdefaults.yaml");
DefTerrain = yaml["Terrain"].NodesDict.Values.Select(y => new TerrainTypeInfo(y)).ToDictionary(t => t.Type);
int i = 0;
surface1.icon = new Bitmap[DefTerrain.Keys.Count];
TerrainType = new TerrainTypeInfo[DefTerrain.Keys.Count];
surface1.Enabled = false;
foreach (var deftype in DefTerrain)
{
Bitmap icon = new Bitmap(16, 16);
int x, y;
// Loop through the images pixels to reset color.
for (x = 0; x < icon.Width; x++)
{
for (y = 0; y < icon.Height; y++)
{
Color newColor = deftype.Value.Color;
icon.SetPixel(x, y, newColor);
}
}
surface1.icon[i] = icon;
TerrainType[i] = deftype.Value;
ToolStripButton TerrainTypeButton = new ToolStripButton(deftype.Key, icon, TerrainTypeSelectorClicked);
TerrainTypeButton.ToolTipText = deftype.Key;
TerrainTypeButton.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
TerrainTypeButton.Tag = i.ToString();
i++;
tsTerrainTypes.Items.Add(TerrainTypeButton);
}
if (src.Length > 0)
{
srcfile = src;
this.size = size;
surface1.TileSize = size;
surface1.Image = (Bitmap)Image.FromFile(src);
surface1.Image.SetResolution(96, 96); // people keep being noobs about DPI, and GDI+ cares.
surface1.TerrainTypes = new int[surface1.Image.Width / size, surface1.Image.Height / size]; /* all passable by default */
surface1.Templates = new List<Template>();
surface1.Size = surface1.Image.Size;
surface1.Enabled = true;
Load();
}
else
{
CreateNewTileset();
}
}
public new void Load()
{
try
{
var doc = new XmlDocument();
doc.Load(Path.ChangeExtension(srcfile, "tsx"));
foreach (var e in doc.SelectNodes("//name").OfType<XmlElement>())
txtTilesetName.Text = e.GetAttribute("value");
foreach (var e in doc.SelectNodes("//terrain").OfType<XmlElement>())
surface1.TerrainTypes[int.Parse(e.GetAttribute("x")),
int.Parse(e.GetAttribute("y"))] = int.Parse(e.GetAttribute("t"));
foreach (var e in doc.SelectNodes("//template").OfType<XmlElement>())
surface1.Templates.Add(new Template
{
Cells = e.SelectNodes("./cell").OfType<XmlElement>()
.Select(f => new int2(int.Parse(f.GetAttribute("x")), int.Parse(f.GetAttribute("y"))))
.ToDictionary(a => a, a => true)
});
}
catch { }
}
public void Save()
{
using (var w = XmlWriter.Create(Path.ChangeExtension(srcfile,"tsx"),
new XmlWriterSettings { Indent = true, IndentChars = " " }))
{
var tilesetName = txtTilesetName.Text;
if (tilesetName.Length < 1) { tilesetName = "Temperat"; }
w.WriteStartDocument();
w.WriteStartElement("tileset");
w.WriteStartElement("name");
w.WriteAttributeString("value", tilesetName);
w.WriteEndElement();
for( var i = 0; i <= surface1.TerrainTypes.GetUpperBound(0); i++ )
for( var j = 0; j <= surface1.TerrainTypes.GetUpperBound(1); j++ )
if (surface1.TerrainTypes[i, j] != 0)
{
w.WriteStartElement("terrain");
w.WriteAttributeString("x", i.ToString());
w.WriteAttributeString("y", j.ToString());
w.WriteAttributeString("t", surface1.TerrainTypes[i, j].ToString());
w.WriteEndElement();
}
foreach (var t in surface1.Templates)
{
w.WriteStartElement("template");
foreach (var c in t.Cells.Keys)
{
w.WriteStartElement("cell");
w.WriteAttributeString("x", c.X.ToString());
w.WriteAttributeString("y", c.Y.ToString());
w.WriteEndElement();
}
w.WriteEndElement();
}
w.WriteEndElement();
w.WriteEndDocument();
}
}
void TerrainTypeSelectorClicked(object sender, EventArgs e)
{
surface1.InputMode = (sender as ToolStripButton).Tag as string;
foreach (var tsb in (sender as ToolStripButton).Owner.Items.OfType<ToolStripButton>())
tsb.Checked = false;
(sender as ToolStripButton).Checked = true;
}
void SaveClicked(object sender, EventArgs e) { Save(); }
void ShowOverlaysClicked(object sender, EventArgs e)
{
if (surface1.ShowTerrainTypes == false)
{
surface1.ShowTerrainTypes = true;
this.Refresh();
}
else
{
surface1.ShowTerrainTypes = false;
this.Refresh();
}
}
void ExportClicked(object sender, EventArgs e)
{
var dir = Path.Combine(Path.GetDirectoryName(srcfile), "output");
Directory.CreateDirectory(dir);
var tilesetName = txtTilesetName.Text;
var tilesetID = txtID.Text;
var tilesetPalette = txtPal.Text;
var tilesetExt = txtExt.Text;
if (tilesetName.Length < 1) { tilesetName = "Temperat"; }
if (tilesetID.Length < 1) { tilesetID = "TEMPERAT"; }
if (tilesetPalette.Length < 1) { tilesetPalette = "temperat"; }
if (tilesetExt.Length < 1) { tilesetExt = ".tem,.shp"; }
// Create a Tileset definition
// Todo: Pull this info from the gui
var tilesetFile = "";
//var mixFile = "";
tilesetFile = tilesetName.ToLower();
if (tilesetFile.Length < 8)
{
tilesetFile = tilesetName.ToLower() + ".yaml";
//mixFile = tilesetName.ToLower() + ".mix";
}
else
{
tilesetFile = tilesetName.ToLower().Substring(0, 8) + ".yaml";
//mixFile = tilesetName.ToLower().Substring(0, 8) + ".mix";
}
string[] Ext = tilesetExt.Split(',');
var tileset = new TileSet()
{
Name = tilesetName,
Id = tilesetID.ToUpper(),
TileSize = size,
Palette = tilesetPalette.ToLower(),
Extensions = new string[] { Ext[0], Ext[1] }
};
// List of files to add to the mix file
List<string> fileList = new List<string>();
// Export palette (use the embedded palette)
var p = surface1.Image.Palette.Entries.ToList();
fileList.Add(ExportPalette(p, Path.Combine(dir, tileset.Palette)));
// Export tile artwork
foreach (var t in surface1.Templates)
fileList.Add(ExportTemplate(t, surface1.Templates.IndexOf(t), tileset.Extensions.First(), dir));
// Add the terraintypes
// Todo: add support for multiple/different terraintypes
foreach (var tt in TerrainType)
{
tileset.Terrain.Add(tt.Type, tt);
}
// Add the templates
ushort cur = 0;
foreach (var tp in surface1.Templates)
{
var template = new TileTemplate()
{
Id = cur,
Image = "t{0:00}".F(cur),
Size = new int2(tp.Width,tp.Height),
};
// Todo: add support for different terraintypes
// Todo: restrict cells? this doesn't work: .Where( c => surface1.TerrainTypes[c.Key.X, c.Key.Y] != 0 )
foreach (var t in tp.Cells)
{
string ttype = "Clear";
//ttype = TerrainType[surface1.TerrainTypes[t.Key.X, t.Key.Y]].Type;
template.Tiles.Add((byte)((t.Key.X - tp.Left) + tp.Width * (t.Key.Y - tp.Top)), ttype);
}
tileset.Templates.Add(cur, template);
cur++;
}
tileset.Save(Path.Combine(dir, tilesetFile));
//throw new NotImplementedException("NotI");
//PackageWriter.CreateMix(Path.Combine(dir, mixFile),fileList);
// Cleanup
//foreach (var file in fileList)
//File.Delete(file);
Console.WriteLine("Finished export");
}
string ExportPalette(List<Color> p, string file)
{
while (p.Count < 256) p.Add(Color.Black); // pad the palette out with extra blacks
var paletteData = p.Take(256).SelectMany(
c => new byte[] { (byte)(c.R >> 2), (byte)(c.G >> 2), (byte)(c.B >> 2) }).ToArray();
File.WriteAllBytes(file, paletteData);
return file;
}
string ExportTemplate(Template t, int n, string suffix, string dir)
{
var TileSize = size;
var filename = Path.Combine(dir, "t{0:00}{1}".F(n, suffix));
var totalTiles = t.Width * t.Height;
var ms = new MemoryStream();
using (var bw = new BinaryWriter(ms))
{
bw.Write((ushort)TileSize);
bw.Write((ushort)TileSize);
bw.Write((uint)totalTiles);
bw.Write((ushort)t.Width);
bw.Write((ushort)t.Height);
bw.Write((uint)0); // filesize placeholder
bw.Flush();
bw.Write((uint)ms.Position + 24); // image start
bw.Write((uint)0); // 0 (32bits)
bw.Write((uint)0x2c730f8c); // magic?
bw.Write((uint)0); // flags start
bw.Write((uint)0); // walk start
bw.Write((uint)0); // index start
Bitmap src = surface1.Image.Clone(new Rectangle(0, 0, surface1.Image.Width, surface1.Image.Height),
surface1.Image.PixelFormat);
var data = src.LockBits(new Rectangle(0, 0, src.Width, src.Height),
ImageLockMode.ReadOnly, src.PixelFormat);
unsafe
{
byte* p = (byte*)data.Scan0;
for (var v = 0; v < t.Height; v++)
for (var u = 0; u < t.Width; u++)
{
if (t.Cells.ContainsKey(new int2(u + t.Left, v + t.Top)))
{
byte* q = p + data.Stride * TileSize * (v + t.Top) + TileSize * (u + t.Left);
for (var j = 0; j < TileSize; j++)
for (var i = 0; i < TileSize; i++)
{
bw.Write(q[i + j * data.Stride]);
}
}
else
for (var x = 0; x < TileSize * TileSize; x++)
bw.Write((byte)0); /* todo: don't fill with air */
}
}
src.UnlockBits(data);
bw.Flush();
var indexStart = ms.Position;
for (var v = 0; v < t.Height; v++)
for (var u = 0; u < t.Width; u++)
bw.Write(t.Cells.ContainsKey(new int2(u + t.Left, v + t.Top))
? (byte)(u + t.Width * v)
: (byte)0xff);
bw.Flush();
var flagsStart = ms.Position;
for (var x = 0; x < totalTiles; x++ )
bw.Write((byte)0);
bw.Flush();
var walkStart = ms.Position;
for (var x = 0; x < totalTiles; x++)
bw.Write((byte)0x8);
var bytes = ms.ToArray();
Array.Copy(BitConverter.GetBytes((uint)bytes.Length), 0, bytes, 12, 4);
Array.Copy(BitConverter.GetBytes(flagsStart), 0, bytes, 28, 4);
Array.Copy(BitConverter.GetBytes(walkStart), 0, bytes, 32, 4);
Array.Copy(BitConverter.GetBytes(indexStart), 0, bytes, 36, 4);
File.WriteAllBytes(filename, bytes);
}
return filename;
}
private void toolStripContainer1_TopToolStripPanel_Click(object sender, EventArgs e)
{
}
private void surface1_Click(object sender, EventArgs e)
{
}
private void txtTilesetName_TextChanged(object sender, EventArgs e)
{
var tilesetFile = txtTilesetName.Text;
if (tilesetFile.Length > 8)
{
tilesetFile = tilesetFile.ToLower().Substring(0, 8);
}
txtID.Text = tilesetFile.ToUpper();
txtPal.Text = tilesetFile.ToLower() + ".pal";
if (tilesetFile.Length < 3)
{
txtExt.Text = ".tem,.shp";
}
else
{
txtExt.Text = "." + tilesetFile.ToLower().Substring(0, 3) + ",.shp";
}
}
private void toolStripButton15_Click(object sender, EventArgs e)
{
CreateNewTileset();
}
}
}

View File

@@ -0,0 +1,509 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>215, 17</value>
</metadata>
<data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACy
MwAAAk1TRnQBSQFMAgEBCgEAAYABAQGAAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABMAMAAQEBAAEgBgABMC4AAVoCXwHbAVwCZAHnAwQBBhgAA1IB9AEtAfQBzAH/AQABlgFBAf8BAAES
AQAB/wEAAZwBSgH/AQABtQGLAf8BAAEhAQkB/wEAARoBBgH/AQABIAEIAf8BAAGCAS8B/wEDAbgBjwH/
ARgBzAGlAf8BAAGjAUwB/wEAAYEBJQH/AQABKAEIAf8DKwH8lAADDQQSARgBWwJhAeEBVwJcAd8DEAEW
AwoBDhQAASsBOgErAfwBIwHbAbEB/wEAASMBCQH/AQABNgEaAf8BOAH3AdAB/wEAAaABUAH/AQABEwEA
Af8BAAEeAQgB/wEAAR0BBwH/AQABFgEAAf8BAwGyAYkB/wE/AfcB2QH/ATAB7QHFAf8BDgG0AYwB/wEA
AaEBRgH/AwAB/48AAQEDLQFGA14B2gErAVUBNQH8ASMBTQGoAf8BHgFFAakB/wErAVoBOwH8A1UBtQMZ
ASMQAAEvAk0B+gEAAakBgwH/AQABFAEAAf8BEgGyAY0B/wE7AfcB0wH/AQABUQEsAf8BAAEUAQAB/wEA
AR0BBwH/AQABHgEIAf8BAAEdAQcB/wEAAQsBAAH/ARoBuQGaAf8BOQHzAc4B/wE6AfUBzgH/ARMBvQGU
Af8BKQJNAfqIAAMoAT0DVQGyATICXwH7AX8BlQF/Af4BogHgAcYB/wEUAUIBnAH/ASwBhgG6Af8BlAHx
AcsB/wFWAXwBXwH7AVUCXAHqA0wBkgMRARcIAAEuAk0B+gEAAaEBUAH/AQABJwENAf8BJwHjAboB/wEi
Ad8BtwH/AQABOgEaAf8BAAEpAQwB/wEAASIBCgH/AQABHQEHAf8BAAElAQ4B/wNOAfADUgH0ATQB7AHG
Af8BNgHwAccB/wEvAeMBvQH/ASkCTQH6hAADJAE2AVgBYgFYAekBNAHdAa4B/wGrAfgB6QH/AcMB+QHv
Af8BrQHXAcMB/wERAUEBnAH/ASYBgwG1Af8BuQHrAdsB/wGsAfgB4QH/AYgB9QHOAf8BEQHJAYsB/wNZ
AcMDDQERBAABLgJNAfoBFQHHAZ0B/wEAAUABIgH/ATwB9gHPAf8BIAHcAbQB/wEAAYUBLgH/AQABhgEt
Af8BAAFGAR8B/wEAAR8BCAH/AQABIwENAf8DWQHyA1cBxQEpAU0BLgH6AToB9QHRAf8BOgH2AdAB/wEp
Ak0B+oAAAyUBNwFdAWEBXQHiAQsBzwGJAf8BoQHtAdcB/wHUAfIB7gH/AegB9QHyAf8BtgHXAcUB/wEP
AUABnAH/ASQBgwG1Af8B0QHrAeAB/wHpAfMB8gH/AdQB9QH0Af8BPwHfAbIB/wEEAcYBgQH/A1gBwAMR
ARcBMQF2AWMB/gEzAfIBywH/AQABTwExAf8BJgHeAbcB/wE4AfABygH/AQABngFIAf8BAAG2AYsB/wEA
AUsBIQH/AQABIAEJAf8BAAEaAQYB/wEAATUBGQH/A1kB8gNSAfQBPQH3AdcB/wE6AfUBzwH/ASkCTQH6
gAADVgGzASsBWAErAfwBBwG+AVIB/wGNAfgB0QH/AaAB+AHeAf8BtwH1AekB/wGnAdgBwgH/AREBPwGb
Af8BKAGEAbYB/wGyAesB2AH/AcAB9AHpAf8BnwH7Ad0B/wE5AesBsgH/AQMBtwFLAf8BTgFdAU4B8ANC
AXUDWAHvATcB5wHJAf8BCQGgAVAB/wEEAZwBTwH/ATwB9wHWAf8BCQGzAYwB/wEAATkBFgH/AQABLwET
Af8BAAEVAQAB/wEAATcBFwH/AQABpwGAAf8DWQHyAz4B+AE6AfUB0QH/ATgB9wHOAf8BAAESAQEB/4AA
AxQBHAMiATIDQgF2A1QBrgFRAm0B9wGFAfEB0AH/AZ0B2QHDAf8BEgE/AZsB/wEqAYUBtwH/AZwB7AHT
Af8BSgHrAb8B/wFeAmUB5QNUAa8DPQFqAxgBIgMRARcDTAGRA1EB9wE3AfcBzgH/AQABQQEiAf8BLQHe
AbkB/wEqAdkBtAH/AQABIgEJAf8DAAH/AQABigE4Af8BAAG4AY8B/wEAAbABhAH/AREBtQGQAf8BOQH1
Ac4B/wE7AfcB0gH/ARABogGFAf8DUQH3jAADIwEzAVoBXwFaAdsBmgHwAdAB/wGwAdoBxgH/AQ8BPgGb
Af8BKQGFAbcB/wGrAe0B1QH/AUMB3QG0Af8DWQHDAx0BKgwAAwIBAwMrAfwBGwHBAaEB/wNBAfkDQQH5
AT4B9gHZAf8BFQGvAY8B/wNTAfEBIQEyASoB+wEAAcEBkgH/ARABtAGMAf8BOwH3AdEB/wE4AfMBzAH/
ARQBpwGKAf8DSAH2AxABFogAAzUBVgE+AlwB+AE+Ad0BsgH/AcAB/gHzAf8BsgHWAcQB/wEMAToBlwH/
ASYBhQG2Af8BzQHtAeIB/wGsAfgB6QH/ASMBzwGaAf8BXAFkAVwB5wMUARsMAANYAcsBAAExAR8B/wNZ
AewDWQHrARsBtAGWAf8BHAG4AZoB/wNZAewDUwHxAQABPwElAf8BLwHiAb0B/wE5AfEBywH/AQkBswGJ
Af8BAAFSAS4B/wMvAf0DBAEGiAADFgEfASsBLAErAUMDQgF2A1kB9QGYAdsBxQH/AQ0BNgGWAf8BLAGH
AboB/wGXAewB0QH/AVwBYAFfAdQDPAFoAy0BRgMHAQkMAANbAeEDTgHwA0sBkANVAeoBGAGvAZAB/wEf
Ab4BnwH/A1kB8gNIAYQDUgH0AT8B9wHaAf8BDAG6AY8B/wEAAbgBjgH/AQQB0AGkAf8DPgH4A1IBqJQA
AzoBYQEVAbQBhAH/AR0BRwGtAf8BLQGUAboB/wFYAmIB7wMeASsYAANSAaYDTgGXAzABSwNOAfABOQHq
Ac8B/wNAAf0DWQHrAzABTQNOAfABKwHcAbUB/wNIAfYDQQH5AQQBzQGgAf8BAAGaAUsB/wM+AfiUAAMF
AQcBWAFbAVgBywEfAa4BpQH/ARIBqwGSAf8DTwGbJAADXAHcAQUBgwE+Af8BRgH3AeYB/wNZAfIDOAFd
BAADUwGsA1IB9ANOAfADVgG4ASkBLwEpAfoBAAGbAUsB/wNMAfOYAAMxAU8BGwHQAZAB/wFZAmQB7AMS
ARggAANMAZMDWAHvAUEB9wHeAf8DQQH5A1gBywwAA04BlwNMAZMDGgElA1kB8gEAAY8BQQH/A1EB95gA
Aw0BEQFIAWIBSQH2AVoBXAFaAc0DAAEBIAADVgG2AQABMgEiAf8DPgH4A1oBzQMGAQgYAANZAdcDWQHy
A1ABo5wAA1ABnwM7AWUkAANTAbADQQH5AyEB+wMHAQkcAANTAbADUgGmhAAB/gE9AQAB/wH+AYwBIAH/
Af4BrgGCAf8B/gE9AQAB/wH9Ad8BzgH/Af0BPgEAAf8B/gE9AQAB/wH+AZ0BOgH/Af4BrgGCAf8B9gE/
AQAB/wH9AUYBAAH/Af0B1gHAAf8B9QGFARoB/wH+AT0BAAH/AkwBSwGPBAABRAFMAcUB/wFEAUwBxQH/
ASYBLAG6Af8BJgEsAboB/wGqAeMC/wE/AacB5wH/AQABCwGIAf8BRAFMAcUB/wEmASwBugH/AaoB4wL/
AT8BpwHnAf8BqgHjAv8BPwGnAecB/wEAAQsBiAH/AQABCwGIAf8BJgEsAboB/xcAAf8DAAH/AwAB/wMA
Af8DAAH/AwAB/wMAAf8QAAHKAfMC/wHKAfMC/wHKAfMC/wFEAdEC/wEAAVEB2AH/AQsBugH7Af8BRAHR
Av8BygHzAv8BygHzAv8BygHzAv8BygHzAv8BRAHRAv8BCwG6AfsB/wFEAdEC/wFEAdEC/wHKAfMC/wJc
AVcB3wH7AVIBDQH/Af0BswGJAf8B+wE8AQAB/wH4AdUBwQH/AfoBRAEAAf8B+wE8AQAB/wH9AaQBRgH/
AfwBhgEYAf8B+wE8AQAB/wH5AbMBjAH/AfkBowFGAf8B+wE8AQAB/wNUAa8IAAIDAQ0B/wGqAeMC/wE/
AacB5wH/AUQBTAHFAf8BJgEsAboB/wEAAQsBiAH/AQABCwGIAf8BqgHjAv8BPwGnAecB/wEmASwBugH/
AaoB4wL/AT8BpwHnAf8BPwGnAecB/wEAAQsBiAH/ASYBLAG6Af8CAwENAf8LAAH/AwAB/wMAAf8DTgH/
A9QB/wOnAf8DpwH/A6cB/wOnAf8DAAH/AwAB/wwAAUQB0QL/AUQB0QL/AcoB8wL/AcoB8wL/AQsBugH7
Af8BAAFRAdgB/wELAboB+wH/AcoB8wL/AUQB0QL/AUQB0QL/AcoB8wL/AcoB8wL/AcoB8wL/AcoB8wL/
AUQB0QL/AUQB0QL/AyEBMAH3AToBAAH/Af0BtQGNAf8B+QGAAQ8B/wH1AZ0BPgH/AfQBqwGBAf8B9wE6
AQAB/wH6AZQBLgH/AfoBlAEtAf8B9wE6AQAB/wH0AcIBpgH/AfcBOgEAAf8CYgFYAe8DDAEQCAACAwEN
Af8BPwGnAecB/wE/AacB5wH/AUQBTAHFAf8BAAELAYgB/wE/AacB5wH/AUQBTAHFAf8BAAELAYgB/wEA
AQsBiAH/AQABCwGIAf8BAAELAYgB/wE/AacB5wH/AT8BpwHnAf8BPwGnAecB/wIDAQ0B/wNNAZYHAAH/
A9QB/wOnAf8DpwH/A04B/wPUAf8DpwH/A6cB/wOnAf8DpwH/A04B/wNOAf8DAAH/CAABRAHRAv8BygHz
Av8BygHzAv8BygHzAv8BCwG6AfsB/wEAAVEB2AH/AQsBugH7Af8BygHzAv8BygHzAv8BygHzAv8BRAHR
Av8BRAHRAv8BRAHRAv8BygHzAv8BygHzAv8BRAHRAv8EAAMqAUACYgFYAe8B/gGxAYYB/wH3AVIBDgH/
AfABqwGEAf8B8QGOASkB/wH0AT4BAAH/Af4BsQGGAf8B9AE9AQAB/wHvAaoBgwH/AfIBTQEJAf8CWQFX
Ab8MAAIDAQ0B/wFEAUwBxQH/AQABCwGIAf8BAAELAYgB/wEAAQsBiAH/AT8BpwHnAf8BPwGnAecB/wFE
AUwBxQH/AQABCwGIAf8BJgEsAboB/wEAAQsBiAH/AT8BpwHnAf8BJgEsAboB/wEAAQsBiAH/A04B8AsA
Af8D1AH/A6cB/wNOAf8DTgH/A9QB/wPUAf8D1AH/A9QB/wPUAf8DTgH/A04B/wMAAf8IAAHKAfMC/wHK
AfMC/wHKAfMC/wELAboB+wH/AQsBugH7Af8BAAFRAdgB/wELAboB+wH/AQsBugH7Af8BygHzAv8BygHz
Av8BygHzAv8BRAHRAv8BRAHRAv8BRAHRAv8BygHzAv8BygHzAv8IAAMXASACWQFXAb8B+wGZATYB/wH4
AZABKAH/AewBpgFRAf8B6wGhAUkB/wHzAUgBAgH/AfwBmwE5Af8B7wGAARUB/wHqAa0BigH/AfABNgEA
Af8DFwEgCAADTQGWAgMBDQH/AgMBDQH/AUQBTAHFAf8BPwGnAecB/wEAAQsBiAH/AQABCwGIAf8BAAEL
AYgB/wEAAQsBiAH/ASYBLAG6Af8BAAELAYgB/wFEAUwBxQH/AT8BpwHnAf8BJgEsAboB/wIDAQ0B/wsA
Af8D1AH/A6cB/wNOAf8DJgH/A04B/wNOAf8DTgH/AyYB/wNOAf8DTgH/A04B/wMAAf8IAAHKAfMC/wHK
AfMC/wELAboB+wH/AQsBugH7Af8BAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BCwG6AfsB/wELAboB+wH/
AcoB8wL/AcoB8wL/AcoB8wL/AUQB0QL/AUQB0QL/AUQB0QL/AcoB8wL/EAACOgE5AWACXAFXAd8B/QGR
ASgB/wHwAaUBTQH/AeQBqAGFAf8B8gGCARUB/wH8AY4BIwH/AeoBnQFDAf8B6AGHASMB/wJZAVcBvxAA
A00BlgIDAQ0B/wE/AacB5wH/AQABCwGIAf8BAAELAYgB/wEmASwBugH/AQABCwGIAf8BJgEsAboB/wEA
AQsBiAH/AQABCwGIAf8BPwGnAecB/wEmASwBugH/AgMBDQH/CwAB/wPUAf8D1AH/A9QB/wNOAf8D1AH/
A6cB/wOnAf8DTgH/A9QB/wOnAf8DpwH/AwAB/wgAAcoB8wL/AUQB0QL/AQsBugH7Af8BAAFRAdgB/wEA
AVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/AQsBugH7Af8BCwG6AfsB/wHKAfMC/wHKAfMC/wHK
AfMC/wFEAdEC/wFEAdEC/wHKAfMC/wgAAxcBIAMqAUADFwEgAwwBEAJHAUYBgAJiAVgB7wH2AYkBHwH/
Ad4BogFRAf8B6QFSARUB/wH8AYcBGQH/AeMBpQGAAf8B5QFKAQsB/wNAAXAQAAIDAQ0B/wFEAUwBxQH/
ASYBLAG6Af8BAAELAYgB/wEmASwBugH/AgMBDQH/AT8BpwHnAf8BJgEsAboB/wEAAQsBiAH/AUQBTAHF
Af8BRAFMAcUB/wIDAQ0B/wsAAf8DTgH/A04B/wNOAf8DJgH/A9QB/wOnAf8DpwH/A04B/wPUAf8DpwH/
A6cB/wMAAf8IAAFEAdEC/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BAAFR
AdgB/wEAAVEB2AH/AQABUQHYAf8BCwG6AfsB/wFEAdEC/wHKAfMC/wHKAfMC/wFEAdEC/wFEAdEC/wHK
AfMC/wQAAxcBIAFiAlgB7wHFATIBAAH/AWICWAHvAxcBIAQAAwwBEAJHAUYBgAHkATUBAAH/AdsBjwE1
Af8B4AGFASMB/wH5AUkBAAH/AeABkwE4Af8CYgFYAe8DDAEQDAADTQGWAgMBDQH/AT8BpwHnAf8BAAEL
AYgB/wIDAQ0B/wIDAQ0B/wEmASwBugH/AgMBDQH/AgMBDQH/AUQBTAHFAf8BRAFMAcUB/wIDAQ0B/wcA
Af8D1AH/A6cB/wNOAf8DTgH/A04B/wPUAf8D1AH/A9QB/wNOAf8DTgH/A9QB/wPUAf8DAAH/CAABCwG6
AfsB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/
AQABUQHYAf8BCwG6AfsB/wELAboB+wH/AcoB8wL/AcoB8wL/AcoB8wL/AUQB0QL/AUQB0QL/BAABRwJG
AYAB1AFLAQAC/wG9ASQB/wHUAUwBAAH/AUcCRgGADAADIQEwAlwBWQHPAdgBUQEcAf8B3QFSARsB/wHr
AUABAAH/AdQBhgEqAf8CTAFLAY8QAAIDAQ0B/wFEAUwBxQH/AUQBTAHFAf8CAwENAf8DTQGWAgMBDQH/
A00BlgNNAZYCAwENAf8BRAFMAcUB/wIDAQ0B/wcAAf8D1AH/A6cB/wOnAf8DpwH/AyYB/wNOAf8DTgH/
AyYB/wMmAf8DTgH/A04B/wNOAf8DAAH/CQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BAAFR
AdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BCwG6AfsB/wFEAdEC/wHK
AfMC/wHKAfMC/wFEAdEC/wFEAdEC/wQAAjoBOQFgAcoBQgEAAv8B0gGIAf8BygFCAQAB/wI6ATkBYBAA
AwwBEAJcAVkBzwHTAUgBEAH/AdUBQQEEAf8B1QFCAQYB/wJiAVgB7xAAAgMBDQH/AUQBTAHFAf8BRAFM
AcUB/wIDAQ0B/xAAA00BlgIDAQ0B/wNNAZYHAAH/A9QB/wOnAf8DpwH/A6cB/wNOAf8DTgH/A04B/wNO
Af8D1AH/A6cB/wOnAf8DpwH/A6cB/wMAAf8FAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEA
AVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wELAboB+wH/AUQB0QL/
AcoB8wL/AcoB8wL/AcoB8wL/AUQB0QL/BAADFwEgAbcBIQEAAv8B5wG/Af8BtwEhAQAB/wMXASAUAAMM
ARAB2gErAQAB/wHKAUMBDQH/AdUBMgEAAf8B0AE6AQAB/xAAA00BlgIDAQ0B/wIDAQ0B/wNNAZYjAAH/
A9QB/wOnAf8DpwH/A6cB/wNOAf8D1AH/A6cB/wNOAf8D1AH/A04B/wOnAf8DTgH/A6cB/wMAAf8FAAFR
AdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/
AQABUQHYAf8BAAFRAdgB/wELAboB+wH/AQsBugH7Af8BygHzAv8BygHzAv8BygHzAv8BygHzAv8IAAFc
AlcB3wHUAZMBOwH/AVwCVwHfHAABXAJXAd8BxQE4AQAB/wHLATMBAAH/AlwBVwHfQwAB/wPUAf8D1AH/
A9QB/wPUAf8DTgH/A9QB/wOnAf8DTgH/A9QB/wOnAf8DpwH/A6cB/wOnAf8DAAH/BQABUQHYAf8BAAFR
AdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/
AQABUQHYAf8BCwG6AfsB/wELAboB+wH/AQsBugH7Af8BygHzAv8BygHzAv8BygHzAv8IAAFMAksBjwGy
ARcBAAH/AUwCSwGPGAACOgE5AWABxgEpAQAB/wHGASwBAAH/AWICWAHvAyEBMEMAAf8DAAH/A6cB/wOn
Af8DpwH/A04B/wPUAf8D1AH/A04B/wNOAf8DpwH/A04B/wOnAf8DpwH/AwAB/wQAAQsBugH7Af8BAAFR
AdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/
AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/AQsBugH7Af8BCwG6AfsB/wHKAfMC/wHKAfMC/wgAAyEBMAGy
ARcBAAH/AyEBMBQAAkcBRgGAAbwBIAEAAf8BwQEjAQAB/wJRAVABnwMXASBLAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wUAAVEB2AH/AQABUQHYAf8BAAFR
AdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BAAFRAdgB/wELAboB+wH/
AQsBugH7Af8BAAFRAdgB/wEAAVEB2AH/AQABUQHYAf8BCwG6AfsB/wELAboB+wH/DAABWQJXAb8MAAMM
ARADQAFwAVwCVwHfAVwCVwHfAkwBSwGPAxcBIFsAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/CQABUQHYAf8BAAFRAdgB/wELAboB+wH/AQABUQHYAf8BAAFRAdgB/wEAAVEB2AH/
AQABUQHYAf8BCwG6AfsB/wELAboB+wH/AQsBugH7Af8BCwG6AfsB/wELAboB+wH/AQsBugH7Af8BCwG6
AfsB/wELAboB+wH/AQABUQHYAf8MAAMXASADFwEgA0ABcAJHAUYBgAFRAlABnwNAAXADIQEwmAABCwG6
AfsB/wELAboB+wH/AQsBugH7Af8BCwG6AfsB/wELAboB+wH/AQsBugH7Af8BCwG6AfsB/wELAboB+wH/
AUQB0QL/AUQB0QL/AUQB0QL/AcoB8wL/AcoB8wL/AQsBugH7Af8BCwG6AfsB/wELAboB+wH/EAACOQE6
AWACVwFZAb8CAAExAf8BFwEVAT4B/wKCAYEB/wNcAd8DUQGfAyoBQBAAA1wBzwNhAdwCYQFcAdwCYQFc
AdwDYQHcAmEBXAHcAmEBXAHcAmEBXAHcAmEBXAHcAmEBXAHcAmEBXAHcAmEBXAHcAmEBXAHcAmABWgHe
AVgCVgG8AwMBBAEPASABNwH+AgABCwH/AgABCwH/AgABCwH/AgABCwH/AgABCwH/AgABCwH/AgABCwH/
AgABCwH/AgABCwH/AgABCwH/AgABCwH/AgABCwH/AgABCwH/A1gB7wQAA2IB7wNiAe8DYgHvA2IB7wNY
Ae8DYgHvA2IB7wNiAe8DYgHvA2IB7wNiAe8DYgHvA2IB7wNiAe8DYgHvA1gB7wgAAxcBIAJZAVwBzwIA
ATwB/wJXAVwB3wIAATwB/wJGAUcBgAKFAYQB/wGqAagBpgH/AZgBlwGWAf8ChQGEAf8DVAGvAwwBEAgA
A1wB0QHtAdcBqQH/AeMBwgGSAf8BygGfAUUB/wHQAa4BgQH/AcwBpAFKAf8BxgGZAUAB/wHUAbMBhgH/
AccBmwFCAf8BvAGGAS0B/wHGAZgBPwH/Ac0BngFDAf8CYQFcAdwBVwJVAboDDAEQBAADOQFgAwAB/wEg
ATsBTwH/AU4BmwGsAf8BTgGbAawB/wFOAZsBrAH/AU4BmwGsAf8BTgGbAawB/wFOAZsBrAH/AU4BmwGs
Af8BTgGbAawB/wFOAZsBrAH/AU4BmwGsAf8BJwFDAYQB/wMAAf8EAAEOARABEgH/AaIBpQGnAf8BvgHB
AcMB/wE0ATcBOQH/ASsBLgEwAf8BQwFGAUgB/wGmAakBqwH/AcMBxgHIAf8BrgGxAbMB/wFHAUoBTAH/
ASoBLQEvAf8BsAGzAbUB/wG7Ab4BwAH/AVABgAGCAf8BMgE1ATcB/wEpASwBLgH/BAADFwEgAlgBYgHv
AlkBXAHPAyEBMAJXAVwB3wJQAVEBnwQAAoIBgQH/Ab0BuwG5Af8BtwG1AbMB/wGuAawBqgH/AosBigH/
A1wBzwMMARAEAAJeAVsB2AH9AewBvQH/AfQB5wG+Af8B6QHPAZ8B/wHSAa8BggH/AcwBpAFKAf8B0wGy
AYUB/wHHAZsBQgH/AbsBhQEsAf8BxwGbAUEB/wHGAZgBPgH/AcQBjAEyAf8DWQHDAygBPQwAAzkBYAMA
Af8BHgE5AU0B/wFLAZgBqQH/AUsBmAGpAf8BSwGYAakB/wFLAZgBqQH/AUsBmAGpAf8BSwGYAakB/wFL
AZgBqQH/AUsBmAGpAf8BSwGYAakB/wIAARYB/wNQAZ8EAAELAQwBDgH/ATkBPAE+Af8BqQGsAa4B/wFS
AYIBhAH/AT0BQAFCAf8BUgGCAYQB/wGVAZgBmgH/AZ4BoQGjAf8BlQGYAZoB/wE/AUIBRAH/ATYBOQE7
Af8BggGFAYcB/wG0AbcBuQH/AaYBqQGrAf8BNQE4AToB/wGUAZcBmQH/BAACWQFcAc8CWQFcAc8DDAEQ
AyEBMAIAAVEB/wMXASAEAANiAe8BtwG2AbQB/wG+AbwBugH/AbgBtgG0Af8BsQGvAa0B/wKLAYoB/wNU
Aa8EAAFYAlYBuwNqAfkB/wH8AdMB/wH0AekBvwH/AegBzAGcAf8BzAGjAUgB/wHAAZABOAH/AbwBhwEu
Af8BvQGIAS8B/wHAAY4BNQH/AcsBlgE6Af8BZAJTAfEBUgJQAaQUAANGAYACAAEGAf8BQQGMAZ8B/wFI
AZUBpgH/AUgBlQGmAf8BSAGVAaYB/wFIAZUBpgH/AUgBlQGmAf8BSAGVAaYB/wFIAZUBpgH/AQABFgEs
Af8DWAHvAxcBIAQAASsBLQEvAf8BhAGHAYkB/wGHAYoBjAH/AUIBRQFHAf8BQwFGAUgB/wFQAYABggH/
AZoBnQGfAf8BpAGnAakB/wFSAYIBhAH/AY4BkQGTAf8BjgGRAZMB/wFQAYABggH/AYYBiQGLAf8BkwGW
AZgB/wFJAUwBTgH/AYkBjAGOAf8COQE6AWACAAGIAf8DIQEwAwwBEAJQAVEBnwIAAYgB/wNUAa8CVwFZ
Ab8DYgHvAbgBtwG2Af8BxQHDAcIB/wG/Ab0BuwH/AbkBtwG1Af8BrgGtAasB/wKFAYQB/wMqAUADDAEQ
AVgCVgG5A2oB+QH/AfkB0AH/AfEB4QG4Af8B6AHLAZwB/wHZAbYBiAH/AccBnAFCAf8BvQGJAS8B/wG6
AYMBKQH/AcIBiAEtAf8CagFbAfkDVgG2AywBQwFQAk8BmwMIAQsOAAELAf8CAAELAf8CAAELAf8CAAEL
Af8CAAELAf8CAAELAf8CAAELAf8CAAELAf8CAAELAf8CAAELAf8DSAGHCAABmgGdAZ8B/wGKAY0BjwH/
AUUBSAFKAf8BOQE8AT4B/wGGAYkBiwH/AY0BkAGSAf8BTAFPAVEB/wFMAU8BUQH/AUIBRQFHAf8BkQGU
AZYB/wG6Ab0BvwH/AY8BkgGUAf8BjQGQAZIB/wGKAY0BjwH/AUcBSgFMAf8BhwGKAYwB/wJXAVkBvwJZ
AVwBzwJQAVEBnwIAAZIB/wIAAZIB/wJXAVwB3wNUAa8CRgFHAYADXAHfAb4BvQG7Af8BzAHLAckB/wHG
AcQBwwH/AcABvgG8Af8BugG4AbYB/wGZAZgBlgH/A1EBnwQAAwwBEAFYAlYBuwHMAbQBigH/Af4B9wHP
Af8B9AHmAb0B/wHvAdgBqAH/AfAB4gG5Af8B7QHeAbYB/wHrAdoBsgH/AdcBugGVAv8B/QHbAf8CagFn
AfkDWQHHAl4BWwHZAVYCVQGxCAADIQEwAwAB/wE1AVEBkgH/AUMBjgGhAf8BQwGOAaEB/wFDAY4BoQH/
AUMBjgGhAf8BPAGGAZoB/wEAAQQBHAH/A1gB7wMyAVAMAAGRAZQBlgH/AYQBhwGJAf8BOQE8AT4B/wGB
AYQBhgH/AZYBmQGbAf8BigGNAY8B/wFFAUgBSgH/AUMBRgFIAf8BPAE/AUEB/wFPAVIBgQH/AZ4BoQGj
Af8BlwGaAZwB/wGVAZgBmgH/AU0BUAFSAf8BggGFAYcB/wGIAYsBjQH/AgABnQH/AgABnQH/AlcBWQG/
AjkBOgFgAlkBXAHPAkYBRwGACAADWQG/AcMBwgHBAf8B0wHSAdEB/wHNAcwBygH/AccBxgHEAf8BwQG/
Ab4B/wGxAa8BrgH/A1wB3wgAAU4CTQGVAlwBWAHRAfkB3gGtAf8B9gHvAckB/wHyAeQBugH/AfcB8AHM
Af8B/QH/AeUB/wH9Af8B4wH/Af0B/wHkAf8B/AH/AeMC/wH9Ad0C/wH0AcsB/wHbAdkBvgH/AmABWwHW
CAADSwGPAgABDAH/AUABiwGfAf8BQAGLAZ8B/wFAAYsBnwH/AUABiwGfAf8BHgE4AU4B/wIAAQUB/wNZ
Ac8DIQEwEAABJwEpASsB/wE8AT8BQQH/AVIBggGEAf8BlgGZAZsB/wGMAY8BkQH/AU8BUgGBAf8BTAFP
AVEB/wE1ATgBOgH/AYABgwGFAf8BkQGUAZYB/wGOAZEBkwH/AZQBlwGZAf8BUgGCAYQB/wGAAYMBhQH/
AYoBjQGPAf8BUgGCAYQB/wIAAaYB/wJGAUcBgAgAAlcBWQG/AkYBRwGACAADWQG/AsgBxwH/AdoB2QHY
Af8B1AHTAdIB/wHOAc0BzAH/AcgBxwHFAf8BwgHAAb8B/wKCAYEB/wsAAQEBUgJRAaECYgFYAe8B/wHu
AcAB/wH6AfsB3gH/AfsB/QHhAf8B+wH8AeAB/wH7Af0B4QH/AfsB/AHfAf8B+wH8Ad8B/wH7Af0B4AH/
AfsB/gHjA/8B7gH/A1wB0QQAAxYBHwEPASABNwH+AgABCwH/AgABCwH/AgABCwH/AgABCwH/AgABCwH/
AgABCwH/A1wBzhgAARMBFgEYAf8BSQFMAU4B/wGYAZsBnQH/AY4BkQGTAf8BUAGAAYIB/wFMAU8BUQH/
AT4BQQFDAf8BMgE1ATcB/wFHAUoBTAH/AZcBmgGcAf8BnQGgAaIB/wGBAYQBhgH/AVEBgQGDAf8BigGN
AY8B/wGBAYQBhgH/AUMBRgFIAf8CAAGwAf8CRgFHAYAIAAJXAVkBvwJGAUcBgAgAA1kBvwHOAc0BzAH/
AuEB4AH/AdsB2gHZAf8B1QHUAdMB/wHPAc4BzQH/AckByAHGAf8CggGBAf8MAANCAXUBWQJWAb4B4AHE
AZUB/wH5Ae4BwwH/AfsB/QHgAf8C+gHbAf8B+AHzAdAB/wH7Af0B4AH/AfsB/AHgAf8B+wH8Ad8B/wH8
Af4B4gH/Af0B/gHeAf8DXAHRBAADRgGAAgABDAH/ATsBhQGZAf8BOwGFAZkB/wEhATsBUQH/AgABBQH/
A1cB3wMqAUAcAAE+AUEBQwH/AZYBmQGbAf8BjwGSAZQB/wFRAYEBgwH/AUwBTwFRAf8BPwFCAUQB/wE5
ATwBPgH/AUoBTQFPAf8BMQE0ATYB/wFQAYABggH/AY0BkAGSAf8BUgGCAYQB/wGKAY0BjwH/AYABgwGF
Af8BRgFJAUsB/wFBAUQBRgH/AgABuQH/AgABuQH/AlcBWQG/AjkBOgFgAlkBXAHPAkYBRwGACAADWQG/
AtMB0gH/AekB6AHnAf8C4gHhAf8B3ALbAf8B1gHVAdQB/wHCAcEBwAH/A1wB3xAAA1UBsgJtAWgB9wH+
AeIBrwH/AfEB4wG4Af8B9QHtAcYB/wH6AfsB3QH/AfwB/wHlAf8B+gH5AdoB/wH6AfsB3QH/AfkB+AHa
Af8B/AHvAcIB/wNeAdgEAANXAd8BBQEdATQB/wE4AYEBlwH/ARkBMgFIAf8DAAH/A1ABnwMMARAgAAGg
AaMBpQH/AZEBlAGWAf8BUQGBAYMB/wFMAU8BUQH/AUEBRAFGAf8BNwE6ATwB/wFMAU8BUQH/AU4BUQGA
Af8BRAFHAUkB/wFQAYABggH/AVEBgQGDAf8BjAGPAZEB/wGBAYQBhgH/AUUBSAFKAf8BQgFFAUcB/wEu
ATEBMwH/AlcBWQG/AlkBXAHPA1QBrwIAAcIB/wIAAcIB/wJXAVwB3wNUAa8CRgFHAYADXAHfA9gB/wHw
Au8B/wHqAekB6AH/AeQB4wHiAf8C3QHcAf8CrQGsAf8DUQGfEAADDAEQAVgCVgG7A2oB+QH6AeABsAH/
Af0B8QHJAf8B+wHwAccB/wH0AeoBwwH/AfYB7gHJAf8B/AH6AdkC/wHxAcEB/wNqAfkBVwJVAboGAAEL
Af8CAAELAf8CAAELAf8CAAELAf8DWgHbKAABmgGdAZ8B/wGXAZoBnAH/AUwBTwFRAf8BQgFFAUcB/wE1
ATgBOgH/AUwBTwFRAf8BTQFQAVIB/wFFAUgBSgH/AYQBhwGJAf8BkgGVAZcB/wGUAZcBmQH/AYABgwGF
Af8BSQFMAU4B/wFDAUYBSAH/ATEBNAE2Af8BEAESARUB/wI5AToBYAIAAcsB/wMhATADDAEQAlABUQGf
AgABywH/A1QBrwJXAVkBvwNiAe8D3QH/AvcB9gH/AfEC8AH/AesB6gHpAf8C3gHdAf8CiAGHAf8DKgFA
FAADDAEQAVgCVgG7AVoCVwHFA2UB9AHKAbMBiAL/AfwB0QL/AfkBzQH/AfAB1wGoAf8DXwHzAVcCVQG6
AwwBEAcAAf8BFQEtAUQB/wEbATMBSwH/AwAB/wMMARAoAAEnASoBLAH/AZ0BoAGiAf8BSQFMAU4B/wEz
ATYBOAH/AUsBTgFQAf8BUAGAAYIB/wFEAUcBSQH/AYIBhQGHAf8BkgGVAZcB/wGVAZgBmgH/AYABgwGF
Af8BRwFKAUwB/wFHAUoBTAH/ATgBOwE9Af8DWAHpA1wBzwQAAlkBXAHPAlkBXAHPAwwBEAMhATACAAHT
Af8DFwEgBAACggGBAf8D7wH/A/0B/wL4AfcB/wHyAvEB/wKjAaIB/wNUAa8gAANAAXEBVQJTAa0BWAJW
AbkBYQJcAdwBYQJcAdwDWQHHA1MBqgMMARAIAANaAdsCAAELAf8CAAELAf8CAAELAf8DQAFwKAABFQEX
ARkB/wEvATIBNAH/ATwBPwFBAf8BSwFOAVAB/wFSAYIBhAH/AUkBTAFOAf8BjAGPAZEB/wGQAZMBlQH/
AZcBmgGcAf8BgQGEAYYB/wFKAU0BTwH/AUgBSwFNAf8BOAE7AT0B/wNdAe0DTQGRAyIBMgQAAxcBIAJY
AWIB7wJZAVwBzwMhATACVwFcAd8CUAFRAZ8EAAKCAYEJ/wP2Af8CpwGmAf8DXAHPAwwBECgAAw4BEwM4
AV0DOAFdAysBQhAAAwwBEANZAc8CAAEKAf8CAAEKAf8DVwHfAxcBICQAAQUBCAEKAf8BlgGZAZsB/wGD
AYYBiAH/AYQBhwGJAf8BTQFQAVIB/wFGAUkBSwH/AbEBtAG2Af8BnwGiAaQB/wGBAYQBhgH/AUABQwFF
Af8BUgGCAYQB/wFCAUUBRwH/A0wB8wNNAZEDIAEuDAADFwEgAlkBXAHPAgAB4gH/AlcBXAHfAgAB4gH/
AksBTAGPApIBkQH/AugB5wH/AsEBwAH/AooBiQH/A1QBrwMMARBQAAMWAR8DWAHmAgABCwH/AgABCwH/
AQ8BIAE3Af4DQAFwIAABCwEOARAB/wGpAawBrgH/AZ4BoQGjAf8BlAGXAZkB/wEpASsBLQH/A0EB+QE8
AT8BQQH/Ab0BwAHCAf8BNgE5ATsB/wECAQUBBwH/AUMBRgFIAf8BBwEJAQwB/wNPAZcDIgEyGAACOQE6
AWACVwFZAb8CAAHpAf8BGgEVAcIB/wKCAYEB/wNcAd8DUQGfAyoBQGAAAzUBVwNaAdsBDwEgATcB/gNI
AfYgAAIzATYB/wEKAQwBDgH/AaQBpwGpAf8BPAE/AUEB/wISARQB/wNQAZoBHQEeASEB/wESARUBFwH/
AQwBDgEQAf8BMQEyATUB/wIXARkB/wEyATMBNgH/Ax4BKwwAAUIBTQE+BwABPgMAASgDAAFAAwABMAMA
AQEBAAEBBQABgAEBFgAD/wEAAf4BPwYAAfgBHwYAAeABDwYAAcABAwYAAYABAR4AAeABBwYAAcABAwGA
BQABwAEDAYAFAAH4AR8BgAUAAfgBPwHgAYAEAAH8AT8BwQHABAAB/AE/AcEB+AQAAf4BfwHDAfkFAAEB
AgAB+AEPAwABAwIAAcABBwMAAQMCAAGAAQMCAAGAAQcBAAEBAYABAwIAAcABAwEAAQEBgAEDAgAB8AED
AcABAQGAAQMCAAHAAQEB4AEBAYABAwIAAYIBAAHgAQEBAAEDAgABgwGAAfABAQEAAQMCAAGDAcAB8AHx
AQABAQIAAYMB4AHwAf8BAAEBAgABxwHwAv8BAAEBAgABxwHgAv8BAAEBAgABxwHBAv8BgAEBAgAB7gEH
Av8B4AEDAgAB4AE/BP8CAAHwAQ8DAAEBAgABwAEDAQABAQEAAQECAAGBAQEBAAEDAYABAQIAAYEBAQEA
AQcBwAEBBgAB4AEDBAABgAEAAcABBwIAAQMBAAHAAQABwAEPAgABMwEAAcABAAGAAT8CAAEzAQAB4AEA
AYABfwIAAQMBAAHwAQABgAH/BAAB8AEAAYMB/wQAAfgBAAGDAf8CAAGBAQEB/gEBAYMB/wIAAYEBAQH/
AYcBgQH/AQABAQHAAQMC/wHAAf8BAAEDAfABDwL/AfAB/wEAAQcL
</value>
</data>
<metadata name="tsTerrainTypes.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>314, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABWSURBVDhPY2AgAWRmZv5HxiRohSgFad6/fz8Yg9gDYwDR
XqCvf7HZRlKAYVNMkhdIsg1b3KHbRnRIwwxDdwHJiYUqBuDzBkwOZ9LF5wKivEMVA8j1AgCw4woaY7rJ
SwAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="toolStripButton15.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEiSURBVDhP7ZKxSgNBEIYHbH0A38D3EF/AxkdIqaV2V1nc
HoKNEkGw1lRWwYiF1RVBCFhEgqgQxbPIKebIcblcPnf2zBGtLbMw/Hu7+383M7siiyGFkb3USKw6NeJl
RqLCl2DoSZIb6U2MtO1eYxrIGr7UNOx8K/elqypqJo3hbB01k0RuzjiBuAdvbbhvwMEyXNZcqJlBFw5X
kE9PRuQjFKJ/dcabHRTkgGpMB3ZtF56vyrjYhK8+YyN9qUyd49I4A0yyMoPXEO5OYfgCHw/OSHQLTy1s
aa0K4EBayp8MbA9CgiVQ4GPTlnMORQ4nq9iebfwGaAY6VOcyqMrs1OF6uzxjBPcGZx1XtXGkG6rvRrKf
Wwjt975CrNbnzywe8T914BvPFkdY2/qCYgAAAABJRU5ErkJggg==
</value>
</data>
<data name="toolStripButton2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKrSURBVDhPjZLZTxNRGMX7D/lAl8El/hc+GsNW6AIEEJFN
0cQHNYJEo5FFqqVhFUV2O4CmilCoWDCYspQuCKVAV6BTpsvxu1PlkdDk5GY69/zOmXs/Gafjy1U6vlmp
522kIKcfEjl9Q5rT86B3ki4VT+JK6RQul/DILhoPXS3lFxS6sWsy9uO0fNuSO4Ylt4B4Ig2BFDtJIXyc
xF5YRCCakJ4FMYX9SAKtpuG0we5K3HhkOeC0I/kyTm92LLliuNfnR0wkM20seDKH4GECe2SIxpISOEKr
9+AE6744zPYgpuwH4Mr4OAEmw3YC3O3ZlTYxMYA/IiJ4lJCSWYNdauPcjWN9R0BtpwdfV0JQaRvSBBgS
bc5jAvikTUyFjVb4aT2MpxCnVqGjJFx+li5gdVtAtdGNXosPKs0YCNCQtm4c4U63Dx6qyLQVOKH0pJR+
KKSwHRBPzY7tGG6/2YRp+g+URSMMwGN2lQBdO1J1NaUXNVlR/GwBJSRt8zzU9D9791+V7WswmD1QFg4T
gK5pxhFFnWmLvo1Ea53Ji7pOJg9qjB5KdKHKsInKDicq2tdR+XoDraNOKNUfMwDLSjRjJmWMJIIwc/Vb
t1T5VgcByHizbY20iheDa1AUfMgAppfDZPb+k+c0XTJTcpXBKZkryFje4kBZy2809a9AkT/AAGbw9hBq
jV7pvs+jkpe/8Lh7GfK8fsgu0iFOLIakugJd2cMveWeKzYTu+U886FyEPLePAMU8xmxBapABWDY+nykG
0DT/wP0OGwF6IMumORieDxDAfe4G6sZ51LdZkZVDkyjXmDcHvu9jYGbvXN/Pzqi+dQ41r2aRdd0YkKm0
n56qtBOjytyJoEozTuM5Kk2YsnAICvUgXdV7yPPf0YH1UeVeSu2Rki/kdEWycru+/QU0BQ9a6sg3EgAA
AABJRU5ErkJggg==
</value>
</data>
<data name="toolStripButton14.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKnSURBVDhPjVNdSJNRGD4RRJddmUgYXvR/YxAZZVfCiCCi
iwgqigx/SFAIb0pjplhplJOmm841P9dG25wlYxHO1jY3F81N3PAHQ6c4mJtin8rA2tbTOQeSpRK98MDh
+d73fZ73PecjZIdwuVxP+vr6IlKp9BcDOzNup9xtnNlszjIYDD+xJRin1+tzdmzCulsslnBPT0+aAv39
/ZiYmEA6nUYqlUIoFOIc+8ZyWO5fjrRa7Uam4NzcHHp7ezE2NsZhMpnAuMxgNdwNtayhM2J8fJwrMni9
XlitVtAkDnZmHHOTTCYRDAbBarq6uvREo9Ekp6am4Pf7EQgEuCJT3xp/HI2MjMDpdMJut0OlUiUJtSeu
r68jFothZmYGs7OzoPNhenp60xE7Dw0NYXJyEjabjWN0dBSdnZ0iMRqNvMHq6ipWVlYwPz/P7fp8vs0d
MNXKN4Uo0ZzEp882OBwO7rajo0MkgiDwBqIoYnl5GfF4HJFIhDtgo7ndbq5Y1l2Ax5bruKY8ikH7ABeQ
yWQikcvlPxKJBNbW1hCNRnlxOBxGle48KrVnUC6cQrE6H7XvrsLoa0W16TIkLdlwDTvQ1ta2QeiWbWwh
CwsLfAzWhO2iQluA94F2mP1yXvjWJ4NssBqCtxnlOglOP92L5ldNHraDPXSMEnob39h2FxcXsbS0hLt0
Xlb8cqAKTR8r0PihFHWWO6i3lkHpasDN7kIckpLU5sukLyxLrVY3KhSK7x6PBzdUx2D4KoPuywsIw814
7XlGm9yDwlWPUt0F5D4i8ZyHJH/b06ZXc4JCd0WRh4utB1DUkoVzz/fhluYs2p11KNZKQAuj2Q/I8X/+
XEqlUkLd2Omi3BSXDjfsStwWinCwhkRyasmR//ozM5Py7pNEbs1u7K8heZn8b1ywZgwAtruEAAAAAElF
TkSuQmCC
</value>
</data>
<data name="toolStripButton3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKWSURBVDhPjZNvSBNhHMd9GdGrCHoTFL1avSqE1ovVFeaf
lnplm7p0/kGXuSQLIxxdqTgnWbkiS2YvJtimZnQkiSv3J+fmkO2eW0YKFW53g1aMyD1nBcHxdI+6VzfC
g4c7nvt9vr/v93f35ORsXmFntZIZraHBaG3KN0aIPichBu36VGiogg4NnFdm6rLeWafewD6rTzIjNSA8
fIGK2HWKoK1MERrSUCGbFgQGK5J+61lDVhh33oCrLEwMHgBxqAGc0MryQkuUS5cscqv7/Q9Iy5yVTHrv
quVOGGcNjTtHYlABONgsLRPLwxuAX7vOcsI1SaiKjf3cN9tPAk+vmpa5AM7aVHi4koomYJkEt2/AQtsm
3AJ4aJQcnfL0qClXT0lKJuAbJcSITaeQOl3OdM1EwI5YDjZhF66OAoW3jxDlAg5p2tLAcCEGQVy4gsUY
Dl5a3+NhY5QTKrCAx5JFIGivSoWeaCiGXyvacAGN63ACGqTnBpZL1zE8PD59M59ymQrkEeYHNfT8gBbg
QUm5yzfBRpZP12NYikG+T/zaQ3ed/jPVnrcgi+C3lioDj8nku37Swqz83ssmhJPYsiSmjXJQheHJjuK/
ixOtyNt2Ar1sVenkc+grNfil7+y5cwbMdBdSOC9e06Y8ynePEJdem1AiYkMrgfvI3U2iVw3K3TIRr0Wt
fGtW066eghQelttMiJO3C1dnuorRZ18v+vZxBH1fdqBPM51ogjgmOrOJZPtV6auEfra/EsWCVpT8MIzi
oUdo4Wk9suQrvkxezN3+3zOSefnCqNK7zefQ8tQttDTVgeYelqOJpsM/nmsP7tiSAC4aNxzRO6pz0ZvO
IjRWp/zq0OXu2jKcKRxvOLpzqPKQ2V5LbMvs/QO77KO/y8T3cgAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>43</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9MVN3/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/0tT2v8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP90gOP/SVHW/0pS1/8AAAD/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA/2vwyv9q8Mr/IYaQ/wAA
AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AAAA
AAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/3B52f9ES8f/AAAA/wAAAAAAAAAAAAAA/23x
zP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP//
/wD///8AAAAAAAAAAAAAAAAAAAAA/0ZNzv8AAAD/AAAAAAAAAP9udtP/bnbS/x4qfv9DScD/AAAA/wAA
AAAAAAAAAAAA/wAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP//
/wD///8A////AP///wAAAAAAAAAAAAAAAP9ye97/RErJ/0NJxP8AAAD/Q0m+/2tzzP9DSbr/Q0m5/x4q
e/9DSbr/AAAA/wAAAAAAAAAAAAAA/xuNgP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAD///8A////AP///wD///8A////AAAAAAAAAAD/Tbia/02rlv8ccn//CkNR/wtCU/8VNWj/Hip6/0NJ
s/9DSbL/Hip7/x4qe/9DSbT/AAAA/wAAAP80YaT/DkJa/0JMwv8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAD/XevD/1fov/9X5r7/ETtf/x0s
eP9DSa7/Q0mt/0NJrP8eKnv/Hip7/0NJrv9DSbD/Hip7/0JLtP87VKz/Hip7/0NKwv8AAAD/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAD/Vee+/xM4
Yv9DSa//Hip7/0NJqP9DSaf/Q0mm/0NJpv9DSab/Q0mo/0NJqf8eKnv/Hip7/0JKsv8eKnv/Hip7/0NK
wv8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AAAAAAAAAAAAAAAA/2N+
vv8QO13/Q0mu/x4qe/9DSab/Q0mm/0NJpv9DSab/Q0mm/0NJpv9iZ7P/Q0mm/0NJpv8eKnv/Q0mt/x4q
e/8eKnv/Hip7/0NKwv8AAAD/AAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8AAAAAAAAA
AAAAAAD/aG7I/2Vrwf9DSar/Hip7/0NJpv9DSab/Hip7/0NJpv9DSab/YGex/2Bnsf9DSab/Q0mm/x4q
e/9BS6T/Q0ms/x4qe/8eKnv/Hip7/0RKw/8AAAD/AAAAAAAAAAAAAAAA////AP///wD///8A////AP//
/wAAAAAAAAAA/2lvzP9ma8X/Q0mt/0NJpv9DSab/Q0mm/x4qe/8eKnv/Q0mm/0NJpv8+Tp7/U3qX/y5d
hf80V47/EzRg/y1ehP9DSaf/Hip7/x4qe/8eKnv/Hip8/0RLxP8AAAD/AAAAAAAAAAD///8A////AP//
/wD///8A////AAAAAAAAAAD/aG3J/2Rpwv9DSan/Q0mm/0NJpv9DSab/Hip7/x4qe/9DSab/P02g/xpx
ZP9AjHb/FHdb/xR3W/8APy7/FHdb/y9ch/8eKnv/Hip7/x4qe/8eKnv/Q0nA/0VMx/8AAAD/AAAAAP//
/wD///8A////AP///wD///8AAAAAAAAAAP9na8f/XW+0/097mP9faLH/Q0mm/0NJpv8eKXv/Hih7/zRY
jv8acWT/P4x2/z2Mdv8RdFj/EnVZ/xR3W/8Ud1v/FXZc/xM2Yf8eKnv/Q0mv/x4qe/8eKnv/REvE/wAA
AP8AAAAA////AP///wD///8A////AP///wAAAAD/TJ2b/0aRjv88kHj/EXRY/xByWf8eaWz/CjND/wg1
QP8DODP/FHdb/z+Mdv89jXb/R8Sh/0fDoP9HxKH/Ssml/xR3W/8Ud1v/FHdb/xA7W/8eKnv/Hip7/x4q
e/8eKn//RUzJ/wAAAP////8A////AP///wD///8A////AAAAAP9Cp4r/Rt2y/0HPp/9Dx6L/RMOf/wly
VP8Nc1b/EXRY/xJ1Wf8RdFj/SMej/0fEof9Hwp//1v/z/0fCn//X//T/S8un/xR3W/8Ud1v/AEs3/yZm
fP8cLHf/Hip7/x4qff9FS8f/AAAA/////wD///8A////AP///wD///8AAAAA/1Hku//c//b/2P/0/8v/
8P/I//D/yP/w/9H/8v9Gw6D/DXNW/w90V/87jHX/R8Og/0bAnv9GwJ7/R8Kf/0jGov9Kyqb/RIt5/xR3
W/8ASTX/FHpd/wJOP/8MQVT/Ejpk/zdgrv8AAAD/////AP///wD///8A////AP///wAAAAD/QqmM/0Xe
s/9B0Kj/QMSf/0K+m/9DvJr/Rb6c/0bBnv9Hw6D/C3JV/wtyVf9GgYb/TbWu/022rv9Kvaj/Pot4/xlw
ZP8+Tp7/JWZ2/wBHM/8TeVz/AFE7/wBQO/8AUjz/FJVx/wAAAP////8A////AP///wD///8A////AAAA
AAAAAAD/S+G3/0HUq/8/yaL/QcGd/0O+m/9EvZv/Rb+d/0bBnv8Oblr/KlqC/0NJpv9DSab/Q0mm/0NJ
pv8+Tp7/Ll6E/0NJpv8/TaD/F3Rf/xN5XP8PfF3/EINi/wBSPP8Tl3L/AAAA/////wD///8A////AP//
/wD///8AAAAAAAAAAAAAAAD/Rt6z/0jGuf9Iu7L/RYKG/0WChv9GgYf/TXqS/1ZxoP9gZ7H/Q0mm/yFi
df8RJ1b/Q0mm/0NJpv9CSqT/Q0mm/z1PnP8XdF//SZiC/0qehv9Np43/D49r/wAAAP8AAAAA////AP//
/wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAD/YGe8/2BntP9gZ7H/YGex/2Bnsf9gZ7H/YGex/2Bn
sf8fYXP/CXFU/wAvIv8lY3f/Q0mm/0NJpv8eKnv/Hip7/x5tb/9Im4P/SqKJ/0urkP8Pk27/AAAA/wAA
AAD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAP9DkIz/RoWK/xlma/8TZGj/RYGF/0aA
h/9ChIH/QIV+/wFsTv8EblD/B3BS/w1zVv8abGb/MFuI/xcvav8eKnv/OlKd/0qgif9KqI3/YO3F/wAA
AP8AAAAAAAAAAP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAA/0Chhv86k3r/PY12/0LB
nf9Cupj/QriX/0K4l/9CuJf/QriX/0O5mP9EvJr/RsGe/z2Ndv8Tdlr/Aj8z/w46Vf8uXpL/JWqK/1/s
xP8AAAD/AAAAAAAAAAAAAAAA////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAD/Q6eL/0fe
s/9C0Kj/y//w/0G8mf+v/uj/rf3m/6395v+t/eb/rv3n/0K4l//D/+//RMSg/0CMdv8UeVz/DX5e/y1h
lf8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA
AAAAAAD/TOK4/0PWrf8/yqP/P8Cc/0C7mP9At5X/QbeW/0G3lv9At5X/sf7o/0G+m//X//T/3P/1/0rb
sv8Kg2H/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8AAAAAAAAA
AAAAAAAAAAAAAAAAAP9DqYz/SOC1/0PUq/8/yqP/PsSe/z7Am/8/vpr/P76a/z++mv8/wJz/P8Se/0HM
pf9F1az/TOO4/0apjf8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP//
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9CqIv/SuC2/0XZr/9D0qr/QM6m/z/LpP9Ay6T/P8uk/0HO
pv9C0an/Rdmv/0rhtv9Ep4v/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP//
/wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/QaaJ/03ht/9J37X/R92z/0bd
sv9G3bL/SN+0/0rgtv8+oob/RauO/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
/wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA////AP///wD///8A////////v////x////8f///+D///5g///cMf//iBr//wAMf/4AAD//AA
Af/4AAD/8AAAf/AAAD/gAAAf4AAAD+AAAA/AAAAHwAAAB8AAAAfAAAAH4AAAB/AAAA/4AAAP+AAAH/gA
AD/4AAB//AAB//wAAf/+AAP//wAH///AD/8=
</value>
</data>
</root>

228
OpenRA.TilesetBuilder/frmNew.Designer.cs generated Normal file
View File

@@ -0,0 +1,228 @@
namespace OpenRA.TilesetBuilder
{
partial class frmNew
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.numSize = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.txtPal = new System.Windows.Forms.TextBox();
this.btnPalBrowse = new System.Windows.Forms.Button();
this.chkUsePalFromImage = new System.Windows.Forms.CheckBox();
this.label3 = new System.Windows.Forms.Label();
this.imgImage = new System.Windows.Forms.PictureBox();
this.btnImgBrowse = new System.Windows.Forms.Button();
this.txtImage = new System.Windows.Forms.TextBox();
this.btnCancel = new System.Windows.Forms.Button();
this.btnOk = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.numSize)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.imgImage)).BeginInit();
this.SuspendLayout();
//
// numSize
//
this.numSize.Location = new System.Drawing.Point(66, 6);
this.numSize.Maximum = new decimal(new int[] {
264,
0,
0,
0});
this.numSize.Minimum = new decimal(new int[] {
24,
0,
0,
0});
this.numSize.Name = "numSize";
this.numSize.Size = new System.Drawing.Size(49, 20);
this.numSize.TabIndex = 0;
this.numSize.Value = new decimal(new int[] {
24,
0,
0,
0});
this.numSize.ValueChanged += new System.EventHandler(this.numSize_ValueChanged);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(48, 13);
this.label1.TabIndex = 1;
this.label1.Text = "Tile size:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 34);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(43, 13);
this.label2.TabIndex = 2;
this.label2.Text = "Palette:";
//
// txtPal
//
this.txtPal.Location = new System.Drawing.Point(15, 52);
this.txtPal.Name = "txtPal";
this.txtPal.ReadOnly = true;
this.txtPal.Size = new System.Drawing.Size(267, 20);
this.txtPal.TabIndex = 3;
//
// btnPalBrowse
//
this.btnPalBrowse.Enabled = false;
this.btnPalBrowse.Location = new System.Drawing.Point(288, 50);
this.btnPalBrowse.Name = "btnPalBrowse";
this.btnPalBrowse.Size = new System.Drawing.Size(26, 23);
this.btnPalBrowse.TabIndex = 4;
this.btnPalBrowse.Text = "...";
this.btnPalBrowse.UseVisualStyleBackColor = true;
this.btnPalBrowse.Click += new System.EventHandler(this.btnPalBrowse_Click);
//
// chkUsePalFromImage
//
this.chkUsePalFromImage.AutoSize = true;
this.chkUsePalFromImage.Checked = true;
this.chkUsePalFromImage.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkUsePalFromImage.Location = new System.Drawing.Point(66, 34);
this.chkUsePalFromImage.Name = "chkUsePalFromImage";
this.chkUsePalFromImage.Size = new System.Drawing.Size(134, 17);
this.chkUsePalFromImage.TabIndex = 5;
this.chkUsePalFromImage.Text = "Use palette from image";
this.chkUsePalFromImage.UseVisualStyleBackColor = true;
this.chkUsePalFromImage.CheckedChanged += new System.EventHandler(this.chkUsePalFromImage_CheckedChanged);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(12, 75);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(39, 13);
this.label3.TabIndex = 6;
this.label3.Text = "Image:";
//
// imgImage
//
this.imgImage.BackColor = System.Drawing.Color.Black;
this.imgImage.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.imgImage.Location = new System.Drawing.Point(15, 120);
this.imgImage.Name = "imgImage";
this.imgImage.Size = new System.Drawing.Size(299, 219);
this.imgImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.imgImage.TabIndex = 7;
this.imgImage.TabStop = false;
//
// btnImgBrowse
//
this.btnImgBrowse.Location = new System.Drawing.Point(288, 91);
this.btnImgBrowse.Name = "btnImgBrowse";
this.btnImgBrowse.Size = new System.Drawing.Size(26, 23);
this.btnImgBrowse.TabIndex = 9;
this.btnImgBrowse.Text = "...";
this.btnImgBrowse.UseVisualStyleBackColor = true;
this.btnImgBrowse.Click += new System.EventHandler(this.btnImgBrowse_Click);
//
// txtImage
//
this.txtImage.Location = new System.Drawing.Point(15, 91);
this.txtImage.Name = "txtImage";
this.txtImage.ReadOnly = true;
this.txtImage.Size = new System.Drawing.Size(267, 20);
this.txtImage.TabIndex = 8;
//
// btnCancel
//
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(239, 345);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 10;
this.btnCancel.Text = "Cancel";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// btnOk
//
this.btnOk.Location = new System.Drawing.Point(158, 345);
this.btnOk.Name = "btnOk";
this.btnOk.Size = new System.Drawing.Size(75, 23);
this.btnOk.TabIndex = 11;
this.btnOk.Text = "OK";
this.btnOk.UseVisualStyleBackColor = true;
this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
//
// frmNew
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(329, 378);
this.Controls.Add(this.btnOk);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnImgBrowse);
this.Controls.Add(this.txtImage);
this.Controls.Add(this.imgImage);
this.Controls.Add(this.label3);
this.Controls.Add(this.chkUsePalFromImage);
this.Controls.Add(this.btnPalBrowse);
this.Controls.Add(this.txtPal);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.numSize);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "frmNew";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "New Tileset";
((System.ComponentModel.ISupportInitialize)(this.numSize)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.imgImage)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.NumericUpDown numSize;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox txtPal;
private System.Windows.Forms.Button btnPalBrowse;
private System.Windows.Forms.CheckBox chkUsePalFromImage;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.PictureBox imgImage;
private System.Windows.Forms.Button btnImgBrowse;
private System.Windows.Forms.TextBox txtImage;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnOk;
}
}

View File

@@ -0,0 +1,88 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace OpenRA.TilesetBuilder
{
public partial class frmNew : Form
{
public bool PaletteFromImage = true;
public string PaletteFile = "";
public string ImageFile = "";
public int TileSize = 24;
public frmNew()
{
InitializeComponent();
}
private void btnCancel_Click(object sender, EventArgs e)
{
Close();
}
private void btnOk_Click(object sender, EventArgs e)
{
if (!PaletteFromImage)
{
if (PaletteFile.Length < 5)
{
MessageBox.Show("No palette specified", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
if (ImageFile.Length < 5)
{
MessageBox.Show("No image selected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
DialogResult = DialogResult.OK;
Close();
}
}
private void chkUsePalFromImage_CheckedChanged(object sender, EventArgs e)
{
if (chkUsePalFromImage.Checked)
{
btnPalBrowse.Enabled = false;
PaletteFromImage = true;
}
else
{
btnPalBrowse.Enabled = true;
PaletteFromImage = false;
}
}
private void btnPalBrowse_Click(object sender, EventArgs e)
{
using (var ofd = new OpenFileDialog { Filter = "C&C Palette (*.pal)|*.pal" })
if (DialogResult.OK == ofd.ShowDialog())
{
PaletteFile = ofd.FileName;
txtPal.Text = PaletteFile;
}
}
private void btnImgBrowse_Click(object sender, EventArgs e)
{
using (var ofd = new OpenFileDialog { Filter = "8bit Image (*.png,*.pcx,*.bmp)|*.png;*.pcx;*.bmp" })
if (DialogResult.OK == ofd.ShowDialog())
{
ImageFile = ofd.FileName;
imgImage.Image = Image.FromFile(ImageFile);
txtImage.Text = ImageFile;
}
}
private void numSize_ValueChanged(object sender, EventArgs e)
{
TileSize = (int)numSize.Value;
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -32,10 +32,10 @@
# add install rules to makefile (once more polished)
# add sonic tank weapon (currently uses tesla)
# make deviator change the allegiance of ememy units (currently shoots rockets)
# complete Arrakis tileset (blocked by TilesetBuilder crashing on export)
# allow frigate to deliver 5 units at once to starport
# starport prices should vary
# reinforcements have arrived is played twice when ordering via starport
# add shroud (Dune's 32x32 tiles differ completely from RA/CnC)
# black spots on buildings should be transparent
# gamefile extraction (setup/setup.z) from CD fails
# gamefile extraction (setup/setup.z) from CD fails
# TilesetBuilder does not support TerrainTypes other then "Clear"

BIN
mods/d2k/bits/arrakis.pal Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -9,6 +9,7 @@ Folders:
./mods/d2k
./mods/d2k/bits
./mods/d2k/uibits
./mods/d2k/tilesets/bloxbase
~^/Content/d2k
~^/Content/d2k/GAMESFX
~^/Content/d2k/Music
@@ -81,7 +82,7 @@ Voices:
TileSets:
mods/d2k/tilesets/arrakis.yaml
# mods/d2k/tilesets/bloxbase.yaml
mods/d2k/tilesets/bloxbase.yaml
TileSize: 32

View File

Before

Width:  |  Height:  |  Size: 801 KiB

After

Width:  |  Height:  |  Size: 801 KiB

BIN
mods/d2k/raw/BLOXBAT.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 KiB

BIN
mods/d2k/raw/BLOXBGBS.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 KiB

BIN
mods/d2k/raw/BLOXICE.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 KiB

BIN
mods/d2k/raw/BLOXTREE.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 KiB

BIN
mods/d2k/raw/BLOXWAST.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 KiB

BIN
mods/d2k/raw/BLOXXMAS.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More