Remove OpenRA.TilesetBuilder.

This project has not been maintained in years,
and has been outright broken for a significant
amount of this period.
This commit is contained in:
Paul Chote
2015-03-29 12:47:06 +01:00
parent 360f3bc2f8
commit 878a0f7008
19 changed files with 2 additions and 2513 deletions

View File

@@ -71,7 +71,7 @@ INSTALL_DATA = $(INSTALL) -m644
# program targets
CORE = rsdl2 rnull game utility
TOOLS = editor tsbuild crashdialog
TOOLS = editor crashdialog
VERSION = $(shell git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || echo git-`git rev-parse --short HEAD`)
@@ -208,9 +208,6 @@ check: utility mods
@echo
@echo "Checking for code style violations in OpenRA.Test..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.Test
@echo
@echo "Checking for code style violations in OpenRA.TilesetBuilder..."
@mono --debug OpenRA.Utility.exe ra --check-code-style OpenRA.TilesetBuilder
test: utility mods
@echo
@@ -226,22 +223,6 @@ test: utility mods
@echo "Testing Red Alert mod MiniYAML..."
@mono --debug OpenRA.Utility.exe ra --check-yaml
# Builds and exports tilesets from a bitmap
tsbuild_SRCS := $(shell find OpenRA.TilesetBuilder/ -iname '*.cs')
tsbuild_TARGET = OpenRA.TilesetBuilder.exe
tsbuild_KIND = winexe
tsbuild_DEPS = $(game_TARGET)
tsbuild_LIBS = $(COMMON_LIBS) $(tsbuild_DEPS) System.Windows.Forms.dll
tsbuild_EXTRA = -resource:OpenRA.TilesetBuilder.FormBuilder.resources -resource:OpenRA.TilesetBuilder.FormNew.resources -resource:OpenRA.TilesetBuilder.Surface.resources
PROGRAMS += tsbuild
OpenRA.TilesetBuilder.FormBuilder.resources:
resgen2 OpenRA.TilesetBuilder/FormBuilder.resx OpenRA.TilesetBuilder.FormBuilder.resources 1> /dev/null
OpenRA.TilesetBuilder.FormNew.resources:
resgen2 OpenRA.TilesetBuilder/frmNew.resx OpenRA.TilesetBuilder.FormNew.resources 1> /dev/null
OpenRA.TilesetBuilder.Surface.resources:
resgen2 OpenRA.TilesetBuilder/Surface.resx OpenRA.TilesetBuilder.Surface.resources 1> /dev/null
tsbuild: OpenRA.TilesetBuilder.FormBuilder.resources OpenRA.TilesetBuilder.FormNew.resources OpenRA.TilesetBuilder.Surface.resources $(tsbuild_TARGET)
##### Launchers / Utilities #####
@@ -294,7 +275,7 @@ default: cli-dependencies core
core: game renderers mods utility
tools: editor tsbuild gamemonitor
tools: editor gamemonitor
package: cli-dependencies core editor gamemonitor docs version

View File

@@ -1,367 +0,0 @@
namespace OpenRA.TilesetBuilder
{
partial class FormBuilder
{
/// <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(FormBuilder));
this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();
this.panel1 = new System.Windows.Forms.Panel();
this.ImageList = new System.Windows.Forms.ImageList(this.components);
this.terrainTypes = 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.toolStripButton16 = 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.terrainTypes.SuspendLayout();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
//
// toolStripContainer1
//
//
// toolStripContainer1.ContentPanel
//
this.toolStripContainer1.ContentPanel.Controls.Add(this.panel1);
this.toolStripContainer1.ContentPanel.Controls.Add(this.terrainTypes);
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;
//
// 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.terrainTypes.AutoSize = false;
this.terrainTypes.Dock = System.Windows.Forms.DockStyle.Right;
this.terrainTypes.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.terrainTypes.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;
this.terrainTypes.Location = new System.Drawing.Point(788, 0);
this.terrainTypes.Name = "tsTerrainTypes";
this.terrainTypes.Size = new System.Drawing.Size(120, 571);
this.terrainTypes.TabIndex = 1;
this.terrainTypes.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.TilesetNameChanged);
//
// 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.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
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.toolStripButton16,
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.ToolTipText = "Create new tileset";
this.toolStripButton15.Click += new System.EventHandler(this.NewTilesetButton);
//
// 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.ToolTipText = "Save Template definitions to file (*.tsx)";
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.ToolTipText = "Export defined Templates to files";
this.toolStripButton14.Click += new System.EventHandler(this.ExportClicked);
//
// toolStripButton16
//
this.toolStripButton16.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton14.Image")));
this.toolStripButton16.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton16.Name = "toolStripButton16";
this.toolStripButton16.Size = new System.Drawing.Size(65, 22);
this.toolStripButton16.Text = "Dump";
this.toolStripButton16.ToolTipText = "Dump Template ID to tile number mapping to console";
this.toolStripButton16.Click += new System.EventHandler(this.Export2Clicked);
//
// 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.ToolTipText = "Show/hide terrain type overlays";
this.toolStripButton3.CheckOnClick = true;
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 = this.toolStripButton3.Checked;
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.terrainTypes.ResumeLayout(false);
this.terrainTypes.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;
private System.Windows.Forms.ToolStripButton toolStripButton15;
private System.Windows.Forms.ToolStripButton toolStripButton16;
public System.Windows.Forms.ImageList ImageList;
private System.Windows.Forms.ToolStrip terrainTypes;
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 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

@@ -1,453 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2015 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.Graphics;
namespace OpenRA.TilesetBuilder
{
public partial class FormBuilder : Form
{
string srcfile;
int size;
public TerrainTypeInfo[] TerrainType;
public ImmutablePalette TerrainPalette;
public bool PaletteFromImage = true;
public string PaletteFile = "";
public string ImageFile = "";
public int TileSize = 24;
private static 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 formNew = new FormNew { })
if (DialogResult.OK == formNew.ShowDialog())
{
PaletteFromImage = formNew.PaletteFromImage;
PaletteFile = formNew.PaletteFile;
ImageFile = formNew.ImageFile;
TileSize = formNew.TileSize;
srcfile = ImageFile;
this.size = TileSize;
surface1.TileSize = TileSize;
Bitmap rbitmap;
using (var fbitmap = new Bitmap(ImageFile))
rbitmap = fbitmap.Clone(new Rectangle(0, 0, fbitmap.Width, fbitmap.Height),
fbitmap.PixelFormat);
int[] shadowIndex = { };
if (!PaletteFromImage)
{
TerrainPalette = new ImmutablePalette(PaletteFile, shadowIndex);
rbitmap.Palette = TerrainPalette.AsSystemPalette();
}
surface1.Image = (Bitmap)rbitmap;
surface1.TilesPerRow = surface1.Image.Size.Width / surface1.TileSize;
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 FormBuilder(string src, string tsize, bool autoExport, string outputDir)
{
InitializeComponent();
var terrainDefinition = new Dictionary<string, TerrainTypeInfo>();
var size = int.Parse(tsize);
var yaml = MiniYaml.DictFromFile("OpenRA.TilesetBuilder/defaults.yaml");
terrainDefinition = yaml["Terrain"].ToDictionary().Values.Select(y => new TerrainTypeInfo(y)).ToDictionary(t => t.Type);
var i = 0;
surface1.Icon = new Bitmap[terrainDefinition.Keys.Count];
TerrainType = new TerrainTypeInfo[terrainDefinition.Keys.Count];
var title = this.Text;
surface1.UpdateMouseTilePosition += (x, y, tileNr) =>
{
this.Text = "{0} - {1} ({2,3}, {3,3}) tileNr: {4,3}".F(title, txtTilesetName.Text, x, y, tileNr);
};
surface1.Enabled = false;
foreach (var deftype in terrainDefinition)
{
var icon = new Bitmap(16, 16);
// Loop through the images pixels to reset color.
for (var x = 0; x < icon.Width; x++)
{
for (var y = 0; y < icon.Height; y++)
{
var newColor = deftype.Value.Color;
icon.SetPixel(x, y, newColor);
}
}
surface1.Icon[i] = icon;
TerrainType[i] = deftype.Value;
var terrainTypeButton = new ToolStripButton(deftype.Key, icon, TerrainTypeSelectorClicked);
terrainTypeButton.ToolTipText = deftype.Key;
terrainTypeButton.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
terrainTypeButton.Tag = i.ToString();
terrainTypeButton.ImageAlign = ContentAlignment.MiddleLeft;
i++;
terrainTypes.Items.Add(terrainTypeButton);
}
if (src.Length > 0)
{
srcfile = src;
this.size = size;
surface1.TileSize = size;
surface1.Image = (Bitmap)Image.FromFile(src);
surface1.TilesPerRow = surface1.Image.Size.Width / surface1.TileSize;
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();
if (autoExport)
{
Export(outputDir);
Application.Exit();
}
}
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)
{
var tsb = (ToolStripButton)sender;
surface1.InputMode = tsb.Tag as string;
foreach (var innerTsb in tsb.Owner.Items.OfType<ToolStripButton>())
innerTsb.Checked = false;
tsb.Checked = true;
}
void SaveClicked(object sender, EventArgs e) { Save(); }
void ShowOverlaysClicked(object sender, EventArgs e)
{
surface1.ShowTerrainTypes = ((ToolStripButton)sender).Checked;
surface1.Invalidate();
}
void ExportClicked(object sender, EventArgs e)
{
Export("Tilesets");
}
void Export2Clicked(object sender, EventArgs e)
{
ExportTemplateToTileNumberMapping();
}
static string ExportPalette(List<Color> p, string file)
{
while (p.Count < Palette.Size) p.Add(Color.Black); // pad the palette out with extra blacks
var paletteData = p.Take(Palette.Size).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, "{0}{1:00}{2}".F(txtTilesetName.Text, 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
var 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
{
var 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)))
{
var 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;
}
public void Export(string outputDir)
{
var dir = Platform.ResolvePath("^", outputDir);
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";
// Create a Tileset definition
// TODO: Pull this info from the GUI
var tilesetFile = "";
tilesetFile = tilesetName.ToLower();
if (tilesetFile.Length < 8)
tilesetFile = tilesetName.ToLower() + ".yaml";
else
tilesetFile = tilesetName.ToLower().Substring(0, 8) + ".yaml";
var tileset = new TileSet(
name: tilesetName,
id: tilesetID.ToUpper(),
palette: tilesetPalette.ToLower(),
terrainInfo: TerrainType);
// List of files to add to the mix file
var 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), tilesetExt, dir));
// Add the templates
ushort cur = 0;
foreach (var tp in surface1.Templates)
{
var tiles = new byte[tp.Width * tp.Height];
foreach (var t in tp.Cells)
{
var ttype = TerrainType[surface1.TerrainTypes[t.Key.X, t.Key.Y]].Type;
var idx = (t.Key.X - tp.Left) + tp.Width * (t.Key.Y - tp.Top);
tiles[idx] = tileset.GetTerrainIndex(ttype);
}
var template = new TerrainTemplateInfo(
id: cur,
images: new[] { "{0}{1:00}".F(txtTilesetName.Text, cur) },
size: new int2(tp.Width, tp.Height),
tiles: tiles);
tileset.Templates.Add(cur, template);
cur++;
}
tileset.Save(Path.Combine(dir, tilesetFile));
Console.WriteLine("Finished export");
}
public void ExportTemplateToTileNumberMapping()
{
Console.WriteLine("# start");
Console.WriteLine("# TemplateID CellID tilenr TemplateW TemplateH XinTilesPNG YinTilesPNG");
ushort cur = 0;
foreach (var tp in surface1.Templates)
{
foreach (var t in tp.Cells)
{
var idx = (t.Key.X - tp.Left) + tp.Width * (t.Key.Y - tp.Top);
// TemplateID CellID tilenr TemplateW TemplateH XinTilesPNG YinTilesPNG
Console.WriteLine("{0} {1} {2} {3} {4} {5} {6}",
cur,
idx,
t.Key.Y * surface1.TilesPerRow + t.Key.X,
tp.Width,
tp.Height,
t.Key.X,
t.Key.Y);
}
cur++;
}
Console.WriteLine("# end\n");
}
private void TilesetNameChanged(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 NewTilesetButton(object sender, EventArgs e)
{
CreateNewTileset();
}
}
}

View File

@@ -1,509 +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="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
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
AD/4AAB//AAB//wAAf/+AAP//wAH///AD/8=
</value>
</data>
</root>

View File

@@ -1,229 +0,0 @@
namespace OpenRA.TilesetBuilder
{
partial class FormNew
{
/// <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.NumSizeValueChanged);
//
// 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.PaletteBrowseClick);
//
// 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.UsePaletteFromImageCheckedChanged);
//
// 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.ImageBrowseClick);
//
// 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.CancelButtonClick);
//
// 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.OkButtonClick);
//
// 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

@@ -1,81 +0,0 @@
using System;
using System.Drawing;
using System.Windows.Forms;
namespace OpenRA.TilesetBuilder
{
public partial class FormNew : Form
{
public bool PaletteFromImage = true;
public string PaletteFile = "";
public string ImageFile = "";
public int TileSize = 24;
public FormNew()
{
InitializeComponent();
}
private void CancelButtonClick(object sender, EventArgs e)
{
Close();
}
private void OkButtonClick(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 UsePaletteFromImageCheckedChanged(object sender, EventArgs e)
{
if (chkUsePalFromImage.Checked)
{
btnPalBrowse.Enabled = false;
PaletteFromImage = true;
}
else
{
btnPalBrowse.Enabled = true;
PaletteFromImage = false;
}
}
private void PaletteBrowseClick(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 ImageBrowseClick(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 NumSizeValueChanged(object sender, EventArgs e)
{
TileSize = (int)numSize.Value;
}
}
}

View File

@@ -1,144 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" 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.TilesetBuilder</RootNamespace>
<AssemblyName>OpenRA.TilesetBuilder</AssemblyName>
<FileAlignment>512</FileAlignment>
<ApplicationIcon>tilesetbuilder_icon copy.ico</ApplicationIcon>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<OutputPath>..\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<PlatformTarget>x86</PlatformTarget>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<UseVSHostingProcess>false</UseVSHostingProcess>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<EmbeddedResource Include="frmNew.resx">
<DependentUpon>FormNew.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>
<DesignTime>True</DesignTime>
</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" />
<Compile Include="FormBuilder.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormBuilder.Designer.cs">
<DependentUpon>FormBuilder.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="FormBuilder.resx">
<DependentUpon>FormBuilder.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="FormNew.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormNew.Designer.cs">
<DependentUpon>FormNew.cs</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">
<Project>{0DFB103F-2962-400F-8C6D-E2C28CCBA633}</Project>
<Name>OpenRA.Game</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="tilesetbuilder_icon copy.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</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,33 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2015 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);
if (args.Length < 1)
Application.Run(new FormBuilder("", "0", false, "Tilesets"));
else if (args.Contains("--export"))
Application.Run(new FormBuilder(args[0], args[1], true, args[3]));
else
Application.Run(new FormBuilder(args[0], args[1], false, "Tilesets"));
}
}
}

View File

@@ -1,63 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.269
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace OpenRA.TilesetBuilder.Properties {
using System;
/// <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", "4.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 (object.ReferenceEquals(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;
}
}
}
}

View File

@@ -1,117 +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.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: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" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</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" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</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>

View File

@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.269
//
// 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", "10.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,7 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -1,146 +0,0 @@
using System;
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 string InputMode;
public Bitmap[] Icon;
public int TileSize;
public int TilesPerRow;
public event Action<int, int, int> UpdateMouseTilePosition = (x, y, t) => { };
Template currentTemplate;
ImageList imagesListControl;
bool showTerrainTypes;
public bool ShowTerrainTypes
{
get { return showTerrainTypes; }
set { showTerrainTypes = 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.DrawImage(Image, 0, 0, Image.Width, Image.Height);
/* 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)
{
var pen = Pens.White;
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(pen, (TileSize * c).ToPoint(), (TileSize * (c + new int2(0, 1))).ToPoint());
if (!t.Cells.ContainsKey(c + new int2(+1, 0)))
e.Graphics.DrawLine(pen, (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(pen, (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(pen, (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();
}
}
}
UpdateMouseTilePosition(pos.X, pos.Y, (pos.Y * TilesPerRow) + pos.X);
}
private void InitializeComponent()
{
this.SuspendLayout();
this.ResumeLayout(false);
}
}
}

View File

@@ -1,123 +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="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>

View File

@@ -1,19 +0,0 @@
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

@@ -1,51 +0,0 @@
Terrain:
TerrainType@Sand:
Type: Sand
AcceptsSmudgeType: SandCrater
IsWater: False
Color: 255,208,192,160
TerrainType@Transition:
Type: Transition
AcceptsSmudgeType: none
IsWater: False
Color: 255,207,166,100
TerrainType@Rock:
Type: Rock
AcceptsSmudgeType: RockCrater
IsWater: False
Color: 255,206,140,66
TerrainType@Cliff:
Type: Cliff
AcceptsSmudgeType: none
IsWater: False
Color: 255,74,41,16
TerrainType@Rough:
Type: Rough
AcceptsSmudgeType: none
IsWater: False
Color: 255,88,116,116
TerrainType@Concrete:
Type: Concrete
AcceptsSmudgeType: none
IsWater: False
Color: 255,208,192,160
TerrainType@Dune:
Type: Dune
AcceptsSmudgeType: none
IsWater: False
Color: 255,239,222,140
TerrainType@Spice:
Type: Spice
AcceptsSmudgeType: none
IsWater: False
Color: 255,239,148,74
TerrainType@SpiceBlobs:
Type: SpiceBlobs
AcceptsSmudgeType: none
IsWater: False
Color: 255,206,115,66
TerrainType@Ice:
Type: Ice
AcceptsSmudgeType: none
IsWater: True
Color: 255,255,255,255

View File

@@ -1,120 +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>
</root>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -9,8 +9,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Mods.Cnc", "OpenRA.M
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Editor", "OpenRA.Editor\OpenRA.Editor.csproj", "{00038B75-405B-44F5-8691-BD2546DBE224}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.TilesetBuilder", "OpenRA.TilesetBuilder\OpenRA.TilesetBuilder.csproj", "{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Utility", "OpenRA.Utility\OpenRA.Utility.csproj", "{F33337BE-CB69-4B24-850F-07D23E408DDF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Renderer.Null", "OpenRA.Renderer.Null\OpenRA.Renderer.Null.csproj", "{0C4AEC1A-E7D5-4114-8CCD-3EEC82872981}"
@@ -83,8 +81,6 @@ Global
{2881135D-4D62-493E-8F83-5EEE92CCC6BE}.Debug|x86.Build.0 = Debug|x86
{00038B75-405B-44F5-8691-BD2546DBE224}.Debug|x86.ActiveCfg = Debug|x86
{00038B75-405B-44F5-8691-BD2546DBE224}.Debug|x86.Build.0 = Debug|x86
{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}.Debug|x86.ActiveCfg = Debug|x86
{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}.Debug|x86.Build.0 = Debug|x86
{F33337BE-CB69-4B24-850F-07D23E408DDF}.Debug|x86.ActiveCfg = Debug|x86
{F33337BE-CB69-4B24-850F-07D23E408DDF}.Debug|x86.Build.0 = Debug|x86
{0C4AEC1A-E7D5-4114-8CCD-3EEC82872981}.Debug|x86.ActiveCfg = Debug|x86