diff --git a/Makefile b/Makefile
index 6e44e59f3a..879cbb07ab 100644
--- a/Makefile
+++ b/Makefile
@@ -137,15 +137,19 @@ ralint: $(ralint_TARGET)
# Builds and exports tilesets from a bitmap
tsbuild_SRCS := $(shell find OpenRA.TilesetBuilder/ -iname '*.cs')
-tsbuild_TARGET = TilesetBuilder.exe
+tsbuild_TARGET = OpenRA.TilesetBuilder.exe
tsbuild_KIND = winexe
tsbuild_DEPS = $(fileformats_TARGET) $(game_TARGET)
tsbuild_LIBS = $(COMMON_LIBS) $(tsbuild_DEPS) System.Windows.Forms.dll
-tsbuild_EXTRA = -resource:OpenRA.TilesetBuilder.Form1.resources
+tsbuild_EXTRA = -resource:OpenRA.TilesetBuilder.frmBuilder.resources -resource:OpenRA.TilesetBuilder.frmNew.resources -resource:OpenRA.TilesetBuilder.Surface.resources
PROGRAMS += tsbuild
-OpenRA.TilesetBuilder.Form1.resources:
- resgen2 OpenRA.TilesetBuilder/Form1.resx OpenRA.TilesetBuilder.Form1.resources 1> /dev/null
-tsbuild: OpenRA.TilesetBuilder.Form1.resources $(tsbuild_TARGET)
+OpenRA.TilesetBuilder.frmBuilder.resources:
+ resgen2 OpenRA.TilesetBuilder/frmBuilder.resx OpenRA.TilesetBuilder.frmBuilder.resources 1> /dev/null
+OpenRA.TilesetBuilder.frmNew.resources:
+ resgen2 OpenRA.TilesetBuilder/frmNew.resx OpenRA.TilesetBuilder.frmNew.resources 1> /dev/null
+OpenRA.TilesetBuilder.Surface.resources:
+ resgen2 OpenRA.TilesetBuilder/Surface.resx OpenRA.TilesetBuilder.Surface.resources 1> /dev/null
+tsbuild: OpenRA.TilesetBuilder.frmBuilder.resources OpenRA.TilesetBuilder.frmNew.resources OpenRA.TilesetBuilder.Surface.resources $(tsbuild_TARGET)
#
# Launchers / Utilities
diff --git a/OpenRA.TilesetBuilder/Form1.Designer.cs b/OpenRA.TilesetBuilder/Form1.Designer.cs
deleted file mode 100644
index 6c5336a3fc..0000000000
--- a/OpenRA.TilesetBuilder/Form1.Designer.cs
+++ /dev/null
@@ -1,326 +0,0 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
- * This file is part of OpenRA, which is free software. It is made
- * available to you under the terms of the GNU General Public License
- * as published by the Free Software Foundation. For more information,
- * see COPYING.
- */
-#endregion
-
-namespace OpenRA.TilesetBuilder
-{
- partial class Form1
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
- this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();
- this.panel1 = new System.Windows.Forms.Panel();
- this.surface1 = new OpenRA.TilesetBuilder.Surface();
- this.toolStrip1 = new System.Windows.Forms.ToolStrip();
- this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton14 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton3 = new System.Windows.Forms.ToolStripButton();
- this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
- this.toolStripButton4 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton12 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton11 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton10 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton9 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton8 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton7 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton6 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton5 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton13 = new System.Windows.Forms.ToolStripButton();
- this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
- this.toolStripContainer1.ContentPanel.SuspendLayout();
- this.toolStripContainer1.TopToolStripPanel.SuspendLayout();
- this.toolStripContainer1.SuspendLayout();
- this.panel1.SuspendLayout();
- this.toolStrip1.SuspendLayout();
- this.SuspendLayout();
- //
- // toolStripContainer1
- //
- //
- // toolStripContainer1.ContentPanel
- //
- this.toolStripContainer1.ContentPanel.Controls.Add(this.panel1);
- this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(745, 571);
- this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.toolStripContainer1.Location = new System.Drawing.Point(0, 0);
- this.toolStripContainer1.Name = "toolStripContainer1";
- this.toolStripContainer1.Size = new System.Drawing.Size(745, 596);
- this.toolStripContainer1.TabIndex = 0;
- this.toolStripContainer1.Text = "toolStripContainer1";
- //
- // toolStripContainer1.TopToolStripPanel
- //
- this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolStrip1);
- //
- // panel1
- //
- this.panel1.AutoScroll = true;
- this.panel1.Controls.Add(this.surface1);
- this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.panel1.Location = new System.Drawing.Point(0, 0);
- this.panel1.Name = "panel1";
- this.panel1.Size = new System.Drawing.Size(745, 571);
- this.panel1.TabIndex = 0;
- //
- // surface1
- //
- this.surface1.BackColor = System.Drawing.Color.Black;
- this.surface1.Location = new System.Drawing.Point(0, 0);
- this.surface1.Name = "surface1";
- this.surface1.Size = new System.Drawing.Size(598, 372);
- this.surface1.TabIndex = 2;
- this.surface1.Text = "surface1";
- //
- // toolStrip1
- //
- this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None;
- this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.toolStripButton2,
- this.toolStripButton14,
- this.toolStripButton3,
- this.toolStripSeparator1,
- this.toolStripButton4,
- this.toolStripButton12,
- this.toolStripButton11,
- this.toolStripButton10,
- this.toolStripButton9,
- this.toolStripButton8,
- this.toolStripButton7,
- this.toolStripButton6,
- this.toolStripButton5,
- this.toolStripButton13,
- this.toolStripButton1});
- this.toolStrip1.Location = new System.Drawing.Point(3, 0);
- this.toolStrip1.Name = "toolStrip1";
- this.toolStrip1.Size = new System.Drawing.Size(602, 25);
- this.toolStrip1.TabIndex = 0;
- //
- // toolStripButton2
- //
- this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));
- this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton2.Name = "toolStripButton2";
- this.toolStripButton2.Size = new System.Drawing.Size(51, 22);
- this.toolStripButton2.Text = "Save";
- this.toolStripButton2.Click += new System.EventHandler(this.SaveClicked);
- //
- // toolStripButton14
- //
- this.toolStripButton14.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton14.Image")));
- this.toolStripButton14.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton14.Name = "toolStripButton14";
- this.toolStripButton14.Size = new System.Drawing.Size(60, 22);
- this.toolStripButton14.Text = "Export";
- this.toolStripButton14.Click += new System.EventHandler(this.ExportClicked);
- //
- // toolStripButton3
- //
- this.toolStripButton3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton3.Image")));
- this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton3.Name = "toolStripButton3";
- this.toolStripButton3.Size = new System.Drawing.Size(104, 22);
- this.toolStripButton3.Text = "Show Overlays";
- this.toolStripButton3.Click += new System.EventHandler(this.ShowOverlaysClicked);
- //
- // toolStripSeparator1
- //
- this.toolStripSeparator1.Name = "toolStripSeparator1";
- this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
- //
- // toolStripButton4
- //
- this.toolStripButton4.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.toolStripButton4.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton4.Image")));
- this.toolStripButton4.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton4.Name = "toolStripButton4";
- this.toolStripButton4.Size = new System.Drawing.Size(25, 22);
- this.toolStripButton4.Tag = "0";
- this.toolStripButton4.Text = "tt0";
- this.toolStripButton4.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
- //
- // toolStripButton12
- //
- this.toolStripButton12.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.toolStripButton12.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton12.Image")));
- this.toolStripButton12.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton12.Name = "toolStripButton12";
- this.toolStripButton12.Size = new System.Drawing.Size(25, 22);
- this.toolStripButton12.Tag = "1";
- this.toolStripButton12.Text = "tt1";
- this.toolStripButton12.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
- //
- // toolStripButton11
- //
- this.toolStripButton11.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.toolStripButton11.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton11.Image")));
- this.toolStripButton11.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton11.Name = "toolStripButton11";
- this.toolStripButton11.Size = new System.Drawing.Size(25, 22);
- this.toolStripButton11.Tag = "2";
- this.toolStripButton11.Text = "tt2";
- this.toolStripButton11.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
- //
- // toolStripButton10
- //
- this.toolStripButton10.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.toolStripButton10.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton10.Image")));
- this.toolStripButton10.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton10.Name = "toolStripButton10";
- this.toolStripButton10.Size = new System.Drawing.Size(25, 22);
- this.toolStripButton10.Tag = "3";
- this.toolStripButton10.Text = "tt3";
- this.toolStripButton10.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
- //
- // toolStripButton9
- //
- this.toolStripButton9.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.toolStripButton9.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton9.Image")));
- this.toolStripButton9.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton9.Name = "toolStripButton9";
- this.toolStripButton9.Size = new System.Drawing.Size(25, 22);
- this.toolStripButton9.Tag = "4";
- this.toolStripButton9.Text = "tt4";
- this.toolStripButton9.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
- //
- // toolStripButton8
- //
- this.toolStripButton8.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.toolStripButton8.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton8.Image")));
- this.toolStripButton8.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton8.Name = "toolStripButton8";
- this.toolStripButton8.Size = new System.Drawing.Size(25, 22);
- this.toolStripButton8.Tag = "5";
- this.toolStripButton8.Text = "tt5";
- this.toolStripButton8.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
- //
- // toolStripButton7
- //
- this.toolStripButton7.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.toolStripButton7.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton7.Image")));
- this.toolStripButton7.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton7.Name = "toolStripButton7";
- this.toolStripButton7.Size = new System.Drawing.Size(25, 22);
- this.toolStripButton7.Tag = "6";
- this.toolStripButton7.Text = "tt6";
- this.toolStripButton7.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
- //
- // toolStripButton6
- //
- this.toolStripButton6.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.toolStripButton6.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton6.Image")));
- this.toolStripButton6.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton6.Name = "toolStripButton6";
- this.toolStripButton6.Size = new System.Drawing.Size(25, 22);
- this.toolStripButton6.Tag = "7";
- this.toolStripButton6.Text = "tt7";
- this.toolStripButton6.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
- //
- // toolStripButton5
- //
- this.toolStripButton5.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.toolStripButton5.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton5.Image")));
- this.toolStripButton5.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton5.Name = "toolStripButton5";
- this.toolStripButton5.Size = new System.Drawing.Size(25, 22);
- this.toolStripButton5.Tag = "8";
- this.toolStripButton5.Text = "tt8";
- this.toolStripButton5.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
- //
- // toolStripButton13
- //
- this.toolStripButton13.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.toolStripButton13.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton13.Image")));
- this.toolStripButton13.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton13.Name = "toolStripButton13";
- this.toolStripButton13.Size = new System.Drawing.Size(25, 22);
- this.toolStripButton13.Tag = "9";
- this.toolStripButton13.Text = "tt9";
- //
- // toolStripButton1
- //
- this.toolStripButton1.Checked = true;
- this.toolStripButton1.CheckState = System.Windows.Forms.CheckState.Checked;
- this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
- this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
- this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.toolStripButton1.Name = "toolStripButton1";
- this.toolStripButton1.Size = new System.Drawing.Size(88, 22);
- this.toolStripButton1.Text = "Template Tool";
- this.toolStripButton1.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
- //
- // Form1
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(745, 596);
- this.Controls.Add(this.toolStripContainer1);
- this.Name = "Form1";
- this.Text = "Tileset Builder";
- this.toolStripContainer1.ContentPanel.ResumeLayout(false);
- this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false);
- this.toolStripContainer1.TopToolStripPanel.PerformLayout();
- this.toolStripContainer1.ResumeLayout(false);
- this.toolStripContainer1.PerformLayout();
- this.panel1.ResumeLayout(false);
- this.toolStrip1.ResumeLayout(false);
- this.toolStrip1.PerformLayout();
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private System.Windows.Forms.ToolStripContainer toolStripContainer1;
- private System.Windows.Forms.Panel panel1;
- private Surface surface1;
- private System.Windows.Forms.ToolStrip toolStrip1;
- private System.Windows.Forms.ToolStripButton toolStripButton1;
- private System.Windows.Forms.ToolStripButton toolStripButton2;
- private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
- private System.Windows.Forms.ToolStripButton toolStripButton3;
- private System.Windows.Forms.ToolStripButton toolStripButton4;
- private System.Windows.Forms.ToolStripButton toolStripButton12;
- private System.Windows.Forms.ToolStripButton toolStripButton11;
- private System.Windows.Forms.ToolStripButton toolStripButton10;
- private System.Windows.Forms.ToolStripButton toolStripButton9;
- private System.Windows.Forms.ToolStripButton toolStripButton8;
- private System.Windows.Forms.ToolStripButton toolStripButton7;
- private System.Windows.Forms.ToolStripButton toolStripButton6;
- private System.Windows.Forms.ToolStripButton toolStripButton5;
- private System.Windows.Forms.ToolStripButton toolStripButton13;
- private System.Windows.Forms.ToolStripButton toolStripButton14;
-
- }
-}
-
diff --git a/OpenRA.TilesetBuilder/Form1.cs b/OpenRA.TilesetBuilder/Form1.cs
deleted file mode 100644
index 1c1c084360..0000000000
--- a/OpenRA.TilesetBuilder/Form1.cs
+++ /dev/null
@@ -1,278 +0,0 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
- * This file is part of OpenRA, which is free software. It is made
- * available to you under the terms of the GNU General Public License
- * as published by the Free Software Foundation. For more information,
- * see COPYING.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Drawing.Imaging;
-using System.IO;
-using System.Linq;
-using System.Windows.Forms;
-using System.Xml;
-using OpenRA.FileFormats;
-
-namespace OpenRA.TilesetBuilder
-{
- public partial class Form1 : Form
- {
- string srcfile;
- int size;
-
- public Form1( string src, int size )
- {
- srcfile = src;
- this.size = size;
- InitializeComponent();
- surface1.TileSize = size;
- surface1.Image = (Bitmap)Image.FromFile(src);
- surface1.Image.SetResolution(96, 96); // people keep being noobs about DPI, and GDI+ cares.
- surface1.TerrainTypes = new int[surface1.Image.Width / size, surface1.Image.Height / size]; /* all passable by default */
- surface1.Templates = new List();
- surface1.Size = surface1.Image.Size;
-
- Load();
- }
-
- public new void Load()
- {
- try
- {
- var doc = new XmlDocument();
- doc.Load(Path.ChangeExtension(srcfile, "tsx"));
-
- foreach (var e in doc.SelectNodes("//terrain").OfType())
- 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())
- surface1.Templates.Add(new Template
- {
- Cells = e.SelectNodes("./cell").OfType()
- .Select(f => new int2(int.Parse(f.GetAttribute("x")), int.Parse(f.GetAttribute("y"))))
- .ToDictionary(a => a, a => true)
- });
- }
- catch { }
- }
-
- public void Save()
- {
- using (var w = XmlWriter.Create(Path.ChangeExtension(srcfile, "tsx"),
- new XmlWriterSettings { Indent = true, IndentChars = " " }))
- {
- w.WriteStartDocument();
- w.WriteStartElement("tileset");
-
- for( var i = 0; i <= surface1.TerrainTypes.GetUpperBound(0); i++ )
- for( var j = 0; j <= surface1.TerrainTypes.GetUpperBound(1); j++ )
- if (surface1.TerrainTypes[i, j] != 0)
- {
- w.WriteStartElement("terrain");
- w.WriteAttributeString("x", i.ToString());
- w.WriteAttributeString("y", j.ToString());
- w.WriteAttributeString("t", surface1.TerrainTypes[i, j].ToString());
- w.WriteEndElement();
- }
-
- foreach (var t in surface1.Templates)
- {
- w.WriteStartElement("template");
-
- foreach (var c in t.Cells.Keys)
- {
- w.WriteStartElement("cell");
- w.WriteAttributeString("x", c.X.ToString());
- w.WriteAttributeString("y", c.Y.ToString());
- w.WriteEndElement();
- }
-
- w.WriteEndElement();
- }
-
- w.WriteEndElement();
- w.WriteEndDocument();
- }
- }
-
- void TerrainTypeSelectorClicked(object sender, EventArgs e)
- {
- surface1.InputMode = (sender as ToolStripButton).Tag as string;
- foreach (var tsb in (sender as ToolStripButton).Owner.Items.OfType())
- tsb.Checked = false;
- (sender as ToolStripButton).Checked = true;
- }
-
- void SaveClicked(object sender, EventArgs e) { Save(); }
- void ShowOverlaysClicked(object sender, EventArgs e) { surface1.ShowTerrainTypes ^= true; }
-
- void ExportClicked(object sender, EventArgs e)
- {
- var dir = Path.Combine(Path.GetDirectoryName(srcfile), "output");
- Directory.CreateDirectory(dir);
-
- // Create a Tileset definition
- // Todo: Pull this info from the gui
- var tilesetFile = "tileset-arrakis.yaml";
- //var mixFile = "arrakis.mix";
- var tileset = new TileSet()
- {
- Name = "Arrakis",
- Id = "ARRAKIS",
- TileSize = size,
- Palette = "arrakis.pal",
- Extensions = new string[] {".arr", ".shp"}
- };
-
- // List of files to add to the mix file
- List fileList = new List();
-
- // Export palette (use the embedded palette)
- var p = surface1.Image.Palette.Entries.ToList();
- fileList.Add(ExportPalette(p, Path.Combine(dir, tileset.Palette)));
-
- // Export tile artwork
- foreach (var t in surface1.Templates)
- fileList.Add(ExportTemplate(t, surface1.Templates.IndexOf(t), tileset.Extensions.First(), dir));
-
- // Add the terraintypes
- // Todo: add support for multiple/different terraintypes
- var terraintype = new TerrainTypeInfo()
- {
- Type = "Clear",
- AcceptSmudge = true,
- IsWater = false,
- Color = Color.White
- };
- tileset.Terrain.Add("Clear", terraintype);
-
- // Add the templates
- ushort cur = 0;
- foreach (var tp in surface1.Templates)
- {
- var template = new TileTemplate()
- {
- Id = cur,
- Image = "t{0:00}".F(cur),
- Size = new int2(tp.Width,tp.Height),
- };
-
- // Todo: add support for different terraintypes
- // Todo: restrict cells? this doesn't work: .Where( c => surface1.TerrainTypes[c.Key.X, c.Key.Y] != 0 )
- foreach (var t in tp.Cells)
- template.Tiles.Add((byte)((t.Key.X - tp.Left) + tp.Width * (t.Key.Y - tp.Top)), "Clear");
-
- tileset.Templates.Add(cur, template);
- cur++;
- }
-
- tileset.Save(Path.Combine(dir, tilesetFile));
- throw new NotImplementedException("NotI");
- //PackageWriter.CreateMix(Path.Combine(dir, mixFile),fileList);
- /*
- // Cleanup
- foreach (var file in fileList)
- File.Delete(file);
-
- Console.WriteLine("Finished export");
- */
- }
-
- string ExportPalette(List p, string file)
- {
- while (p.Count < 256) p.Add(Color.Black); // pad the palette out with extra blacks
- var paletteData = p.Take(256).SelectMany(
- c => new byte[] { (byte)(c.R >> 2), (byte)(c.G >> 2), (byte)(c.B >> 2) }).ToArray();
- File.WriteAllBytes(file, paletteData);
- return file;
- }
-
- string ExportTemplate(Template t, int n, string suffix, string dir)
- {
- var TileSize = size;
- var filename = Path.Combine(dir, "t{0:00}{1}".F(n, suffix));
- var totalTiles = t.Width * t.Height;
-
- var ms = new MemoryStream();
- using (var bw = new BinaryWriter(ms))
- {
- bw.Write((ushort)TileSize);
- bw.Write((ushort)TileSize);
- bw.Write((uint)totalTiles);
- bw.Write((ushort)t.Width);
- bw.Write((ushort)t.Height);
- bw.Write((uint)0); // filesize placeholder
- bw.Flush();
- bw.Write((uint)ms.Position + 24); // image start
- bw.Write((uint)0); // 0 (32bits)
- bw.Write((uint)0x2c730f8a); // magic?
- bw.Write((uint)0); // flags start
- bw.Write((uint)0); // walk start
- bw.Write((uint)0); // index start
-
- var src = surface1.Image;
-
- var data = src.LockBits(src.Bounds(), ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);
-
- unsafe
- {
- byte* p = (byte*)data.Scan0;
-
- for (var v = 0; v < t.Height; v++)
- for (var u = 0; u < t.Width; u++)
- {
- if (t.Cells.ContainsKey(new int2(u + t.Left, v + t.Top)))
- {
- byte* q = p + data.Stride * TileSize * (v + t.Top) + TileSize * (u + t.Left);
- for (var j = 0; j < TileSize; j++)
- for (var i = 0; i < TileSize; i++)
- bw.Write(q[i + j * data.Stride]);
- }
- else
- for (var x = 0; x < TileSize * TileSize; x++)
- bw.Write((byte)0); /* todo: don't fill with air */
- }
- }
-
- src.UnlockBits(data);
-
- bw.Flush();
- var indexStart = ms.Position;
- for (var v = 0; v < t.Height; v++)
- for (var u = 0; u < t.Width; u++)
- bw.Write(t.Cells.ContainsKey(new int2(u + t.Left, v + t.Top))
- ? (byte)(u + t.Width * v)
- : (byte)0xff);
-
- bw.Flush();
-
- var flagsStart = ms.Position;
- for (var x = 0; x < totalTiles; x++ )
- bw.Write((byte)0);
-
- bw.Flush();
-
- var walkStart = ms.Position;
- for (var x = 0; x < totalTiles; x++)
- bw.Write((byte)0x8);
-
- var bytes = ms.ToArray();
- Array.Copy(BitConverter.GetBytes((uint)bytes.Length), 0, bytes, 12, 4);
- Array.Copy(BitConverter.GetBytes(flagsStart), 0, bytes, 28, 4);
- Array.Copy(BitConverter.GetBytes(walkStart), 0, bytes, 32, 4);
- Array.Copy(BitConverter.GetBytes(indexStart), 0, bytes, 36, 4);
-
- File.WriteAllBytes(filename, bytes);
- }
-
- return filename;
- }
- }
-}
diff --git a/OpenRA.TilesetBuilder/Form1.resx b/OpenRA.TilesetBuilder/Form1.resx
deleted file mode 100644
index 8175752494..0000000000
--- a/OpenRA.TilesetBuilder/Form1.resx
+++ /dev/null
@@ -1,334 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 17, 17
-
-
-
-
- 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
-
-
-
\ No newline at end of file
diff --git a/OpenRA.TilesetBuilder/OpenRA.TilesetBuilder.csproj b/OpenRA.TilesetBuilder/OpenRA.TilesetBuilder.csproj
index fb24750e26..862084eafd 100644
--- a/OpenRA.TilesetBuilder/OpenRA.TilesetBuilder.csproj
+++ b/OpenRA.TilesetBuilder/OpenRA.TilesetBuilder.csproj
@@ -1,107 +1,123 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {56B1073B-AE14-499A-BB98-43A8DE9A39CA}
- WinExe
- Properties
- OpenRA.TilesetBuilder
- OpenRA.TilesetBuilder
- v3.5
- 512
-
-
- true
- full
- false
- ..\
- DEBUG;TRACE
- prompt
- 4
- x86
- true
- false
-
-
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
- false
- true
-
-
-
-
- 3.5
-
-
- 3.5
-
-
- 3.5
-
-
-
-
-
-
-
-
- Form
-
-
- Form1.cs
-
-
-
-
- Form1.cs
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
- Designer
-
-
- True
- Resources.resx
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
- True
- Settings.settings
- True
-
-
- Component
-
-
-
-
-
- {BDAEAB25-991E-46A7-AF1E-4F0E03358DAA}
- OpenRA.FileFormats
-
-
- {0DFB103F-2962-400F-8C6D-E2C28CCBA633}
- OpenRA.Game
-
-
-
-
+
+
+
+ Debug
+ AnyCPU
+ 9.0.30729
+ 2.0
+ {1A8E50CC-EE32-4E57-8842-0C39C8EA7541}
+ WinExe
+ Properties
+ OpenRA.TilesetBuilder2
+ OpenRA.TilesetBuilder2
+ v3.5
+ 512
+ tilesetbuilder_icon copy.ico
+
+
+ true
+ full
+ false
+ ..\
+ DEBUG;TRACE
+ prompt
+ 4
+ x86
+ true
+ false
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ false
+ true
+
+
+
+
+ 3.5
+
+
+ 3.5
+
+
+ 3.5
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmBuilder.cs
+
+
+ Form
+
+
+ frmNew.cs
+
+
+
+
+ frmBuilder.cs
+
+
+ frmNew.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ Surface.cs
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+ Component
+
+
+
+
+
+ {BDAEAB25-991E-46A7-AF1E-4F0E03358DAA}
+ OpenRA.FileFormats
+
+
+ {0DFB103F-2962-400F-8C6D-E2C28CCBA633}
+ OpenRA.Game
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OpenRA.TilesetBuilder/Program.cs b/OpenRA.TilesetBuilder/Program.cs
index 9038b5dd44..598323d050 100644
--- a/OpenRA.TilesetBuilder/Program.cs
+++ b/OpenRA.TilesetBuilder/Program.cs
@@ -1,28 +1,35 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
- * This file is part of OpenRA, which is free software. It is made
- * available to you under the terms of the GNU General Public License
- * as published by the Free Software Foundation. For more information,
- * see COPYING.
- */
-#endregion
-
-using System;
-using System.Linq;
-using System.Windows.Forms;
-
-namespace OpenRA.TilesetBuilder
-{
- static class Program
- {
- [STAThread]
- static void Main(string[] args)
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Console.WriteLine("{0} {1}",args[0], args[1]);
- Application.Run(new Form1(args[0], int.Parse(args[1])));
- }
- }
-}
+#region Copyright & License Information
+/*
+ * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
+ * This file is part of OpenRA, which is free software. It is made
+ * available to you under the terms of the GNU General Public License
+ * as published by the Free Software Foundation. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace OpenRA.TilesetBuilder
+{
+ static class Program
+ {
+ [STAThread]
+ static void Main(string[] args)
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ //Console.WriteLine("{0} {1}",args[0], args[1]);
+ if (args.Length < 1)
+ {
+ Application.Run(new frmBuilder("", "0"));
+ }
+ else
+ {
+ Application.Run(new frmBuilder(args[0], args[1]));
+ }
+ }
+ }
+}
diff --git a/OpenRA.TilesetBuilder/Properties/AssemblyInfo.cs b/OpenRA.TilesetBuilder/Properties/AssemblyInfo.cs
index 51e30891aa..98243827bb 100644
--- a/OpenRA.TilesetBuilder/Properties/AssemblyInfo.cs
+++ b/OpenRA.TilesetBuilder/Properties/AssemblyInfo.cs
@@ -1,46 +1,36 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
- * This file is part of OpenRA, which is free software. It is made
- * available to you under the terms of the GNU General Public License
- * as published by the Free Software Foundation. For more information,
- * see COPYING.
- */
-#endregion
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("OpenRA.TilesetBuilder")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("OpenRA.TilesetBuilder")]
-[assembly: AssemblyCopyright("Copyright © 2010")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("9efec6a6-74f7-4a7d-a509-aba2aae75bcc")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("OpenRA.TilesetBuilder")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("OpenRA.TilesetBuilder")]
+[assembly: AssemblyCopyright("Copyright © 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("9efec6a6-74f7-4a7d-a509-aba2aae75bcc")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenRA.TilesetBuilder/Properties/Resources.Designer.cs b/OpenRA.TilesetBuilder/Properties/Resources.Designer.cs
index a5ef06ff92..572bb22039 100644
--- a/OpenRA.TilesetBuilder/Properties/Resources.Designer.cs
+++ b/OpenRA.TilesetBuilder/Properties/Resources.Designer.cs
@@ -1,71 +1,71 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:2.0.50727.4200
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace OpenRA.TilesetBuilder.Properties
-{
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources
- {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources()
- {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager
- {
- get
- {
- if ((resourceMan == null))
- {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OpenRA.TilesetBuilder.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture
- {
- get
- {
- return resourceCulture;
- }
- set
- {
- resourceCulture = value;
- }
- }
- }
-}
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:2.0.50727.4200
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace OpenRA.TilesetBuilder.Properties
+{
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OpenRA.TilesetBuilder2.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/OpenRA.TilesetBuilder/Properties/Settings.Designer.cs b/OpenRA.TilesetBuilder/Properties/Settings.Designer.cs
index 8b2583a3eb..58a775578e 100644
--- a/OpenRA.TilesetBuilder/Properties/Settings.Designer.cs
+++ b/OpenRA.TilesetBuilder/Properties/Settings.Designer.cs
@@ -1,30 +1,30 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:2.0.50727.4200
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace OpenRA.TilesetBuilder.Properties
-{
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
- {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default
- {
- get
- {
- return defaultInstance;
- }
- }
- }
-}
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:2.0.50727.4200
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace OpenRA.TilesetBuilder.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/OpenRA.TilesetBuilder/Surface.cs b/OpenRA.TilesetBuilder/Surface.cs
index e9477ac75c..676ea921d9 100644
--- a/OpenRA.TilesetBuilder/Surface.cs
+++ b/OpenRA.TilesetBuilder/Surface.cs
@@ -1,124 +1,139 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
- * This file is part of OpenRA, which is free software. It is made
- * available to you under the terms of the GNU General Public License
- * as published by the Free Software Foundation. For more information,
- * see COPYING.
- */
-#endregion
-
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using System.Windows.Forms;
-
-namespace OpenRA.TilesetBuilder
-{
- class Surface : Control
- {
- public Bitmap Image;
- public int[,] TerrainTypes;
- public List Templates = new List();
- public bool ShowTerrainTypes = true;
- public string InputMode;
- public int TileSize;
-
- Template CurrentTemplate;
-
- public Surface()
- {
- SetStyle(ControlStyles.AllPaintingInWmPaint, true);
- SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
- SetStyle(ControlStyles.ResizeRedraw, true);
- UpdateStyles();
- }
-
- Brush currentBrush = new SolidBrush(Color.FromArgb(60, Color.White));
-
- protected override void OnPaint(PaintEventArgs e)
- {
- if (Image == null || TerrainTypes == null || Templates == null)
- return;
-
- /* draw the background */
- e.Graphics.DrawImageUnscaled(Image, 0, 0);
-
- /* draw terrain type overlays */
- if (ShowTerrainTypes)
- for (var i = 0; i <= TerrainTypes.GetUpperBound(0); i++)
- for (var j = 0; j <= TerrainTypes.GetUpperBound(1); j++)
- if (TerrainTypes[i, j] != 0)
- {
- e.Graphics.FillRectangle(Brushes.Black, TileSize * i + 10, TileSize * j + 10, 10, 10);
- e.Graphics.DrawString(TerrainTypes[i, j].ToString(),
- Font, Brushes.LimeGreen, TileSize * i + 10, TileSize * j + 10);
- }
-
- /* draw template outlines */
- foreach (var t in Templates)
- {
- foreach (var c in t.Cells.Keys)
- {
- if (CurrentTemplate == t)
- e.Graphics.FillRectangle(currentBrush, TileSize * c.X, TileSize * c.Y, TileSize, TileSize);
-
- if (!t.Cells.ContainsKey(c + new int2(-1, 0)))
- e.Graphics.DrawLine(Pens.Red, (TileSize * c).ToPoint(), (TileSize * (c + new int2(0, 1))).ToPoint());
- if (!t.Cells.ContainsKey(c + new int2(+1, 0)))
- e.Graphics.DrawLine(Pens.Red, (TileSize * (c + new int2(1, 0))).ToPoint(), (TileSize * (c + new int2(1, 1))).ToPoint());
- if (!t.Cells.ContainsKey(c + new int2(0, +1)))
- e.Graphics.DrawLine(Pens.Red, (TileSize * (c + new int2(0, 1))).ToPoint(), (TileSize * (c + new int2(1, 1))).ToPoint());
- if (!t.Cells.ContainsKey(c + new int2(0, -1)))
- e.Graphics.DrawLine(Pens.Red, (TileSize * c).ToPoint(), (TileSize * (c + new int2(1, 0))).ToPoint());
- }
- }
- }
-
- protected override void OnMouseDown(MouseEventArgs e)
- {
- var pos = new int2(e.X / TileSize, e.Y / TileSize);
-
- if (InputMode == null)
- {
- if (e.Button == MouseButtons.Left)
- {
- CurrentTemplate = Templates.FirstOrDefault(t => t.Cells.ContainsKey(pos));
- if (CurrentTemplate == null)
- Templates.Add(CurrentTemplate = new Template { Cells = new Dictionary { { pos, true } } });
-
- Invalidate();
- }
-
- if (e.Button == MouseButtons.Right)
- {
- Templates.RemoveAll(t => t.Cells.ContainsKey(pos));
- CurrentTemplate = null;
- Invalidate();
- }
- }
- else
- {
- TerrainTypes[pos.X, pos.Y] = int.Parse(InputMode);
- Invalidate();
- }
- }
-
- protected override void OnMouseMove(MouseEventArgs e)
- {
- var pos = new int2(e.X / TileSize, e.Y / TileSize);
-
- if (InputMode == null)
- {
- if (e.Button == MouseButtons.Left && CurrentTemplate != null)
- {
- if (!CurrentTemplate.Cells.ContainsKey(pos))
- {
- CurrentTemplate.Cells[pos] = true;
- Invalidate();
- }
- }
- }
- }
- }
-}
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace OpenRA.TilesetBuilder
+{
+ class Surface : Control
+ {
+ public Bitmap Image;
+ private ImageList ImagesListControl;
+ public int[,] TerrainTypes;
+ public List Templates = new List();
+ private bool bShowTerrainTypes;
+ public string InputMode;
+ public Bitmap[] icon;
+ public int TileSize;
+ //private System.ComponentModel.IContainer components;
+
+ Template CurrentTemplate;
+
+ public bool ShowTerrainTypes
+ {
+ get { return bShowTerrainTypes; }
+ set { bShowTerrainTypes = value; }
+ }
+
+ public ImageList ImagesList
+ {
+ get { return ImagesListControl; }
+ set { ImagesListControl = value; }
+ }
+
+ public Surface()
+ {
+ SetStyle(ControlStyles.AllPaintingInWmPaint, true);
+ SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
+ SetStyle(ControlStyles.ResizeRedraw, true);
+ UpdateStyles();
+ }
+
+ Brush currentBrush = new SolidBrush(Color.FromArgb(60, Color.White));
+
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ if (Image == null || TerrainTypes == null || Templates == null)
+ return;
+
+ /* draw the background */
+ e.Graphics.DrawImageUnscaled(Image, 0, 0);
+ /* draw terrain type overlays */
+ if (ShowTerrainTypes)
+ {
+ for (var i = 0; i <= TerrainTypes.GetUpperBound(0); i++)
+ for (var j = 0; j <= TerrainTypes.GetUpperBound(1); j++)
+ if (TerrainTypes[i, j] != 0)
+ {
+ //e.Graphics.FillRectangle(Brushes.Black, TileSize * i + 8, TileSize * j + 8, 16, 16);
+
+ e.Graphics.DrawImage(icon[TerrainTypes[i, j]], TileSize * i + 8, TileSize * j + 8, 16, 16);
+
+ //e.Graphics.DrawString(TerrainTypes[i, j].ToString(),
+ //Font, Brushes.LimeGreen, TileSize * i + 10, TileSize * j + 10);
+ }
+ }
+
+ /* draw template outlines */
+ foreach (var t in Templates)
+ {
+ foreach (var c in t.Cells.Keys)
+ {
+ if (CurrentTemplate == t)
+ e.Graphics.FillRectangle(currentBrush, TileSize * c.X, TileSize * c.Y, TileSize, TileSize);
+
+ if (!t.Cells.ContainsKey(c + new int2(-1, 0)))
+ e.Graphics.DrawLine(Pens.Red, (TileSize * c).ToPoint(), (TileSize * (c + new int2(0, 1))).ToPoint());
+ if (!t.Cells.ContainsKey(c + new int2(+1, 0)))
+ e.Graphics.DrawLine(Pens.Red, (TileSize * (c + new int2(1, 0))).ToPoint(), (TileSize * (c + new int2(1, 1))).ToPoint());
+ if (!t.Cells.ContainsKey(c + new int2(0, +1)))
+ e.Graphics.DrawLine(Pens.Red, (TileSize * (c + new int2(0, 1))).ToPoint(), (TileSize * (c + new int2(1, 1))).ToPoint());
+ if (!t.Cells.ContainsKey(c + new int2(0, -1)))
+ e.Graphics.DrawLine(Pens.Red, (TileSize * c).ToPoint(), (TileSize * (c + new int2(1, 0))).ToPoint());
+ }
+ }
+ }
+
+ protected override void OnMouseDown(MouseEventArgs e)
+ {
+ var pos = new int2(e.X / TileSize, e.Y / TileSize);
+
+ if (InputMode == null)
+ {
+ if (e.Button == MouseButtons.Left)
+ {
+ CurrentTemplate = Templates.FirstOrDefault(t => t.Cells.ContainsKey(pos));
+ if (CurrentTemplate == null)
+ Templates.Add(CurrentTemplate = new Template { Cells = new Dictionary { { pos, true } } });
+
+ Invalidate();
+ }
+
+ if (e.Button == MouseButtons.Right)
+ {
+ Templates.RemoveAll(t => t.Cells.ContainsKey(pos));
+ CurrentTemplate = null;
+ Invalidate();
+ }
+ }
+ else
+ {
+ TerrainTypes[pos.X, pos.Y] = int.Parse(InputMode);
+ Invalidate();
+ }
+ }
+
+ protected override void OnMouseMove(MouseEventArgs e)
+ {
+ var pos = new int2(e.X / TileSize, e.Y / TileSize);
+
+ if (InputMode == null)
+ {
+ if (e.Button == MouseButtons.Left && CurrentTemplate != null)
+ {
+ if (!CurrentTemplate.Cells.ContainsKey(pos))
+ {
+ CurrentTemplate.Cells[pos] = true;
+ Invalidate();
+ }
+ }
+ }
+ }
+
+ private void InitializeComponent()
+ {
+ this.SuspendLayout();
+ this.ResumeLayout(false);
+ }
+ }
+}
diff --git a/OpenRA.TilesetBuilder/Surface.resx b/OpenRA.TilesetBuilder/Surface.resx
new file mode 100644
index 0000000000..3276f5c015
--- /dev/null
+++ b/OpenRA.TilesetBuilder/Surface.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ False
+
+
\ No newline at end of file
diff --git a/OpenRA.TilesetBuilder/Template.cs b/OpenRA.TilesetBuilder/Template.cs
index a5b25f948e..1cd6e36084 100644
--- a/OpenRA.TilesetBuilder/Template.cs
+++ b/OpenRA.TilesetBuilder/Template.cs
@@ -1,29 +1,19 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
- * This file is part of OpenRA, which is free software. It is made
- * available to you under the terms of the GNU General Public License
- * as published by the Free Software Foundation. For more information,
- * see COPYING.
- */
-#endregion
-
-using System.Collections.Generic;
-using System.Linq;
-
-namespace OpenRA.TilesetBuilder
-{
- class Template
- {
- public Dictionary Cells = new Dictionary();
-
- public int Left { get { return Cells.Keys.Min(c => c.X); } }
- public int Top { get { return Cells.Keys.Min(c => c.Y); } }
-
- public int Right { get { return Cells.Keys.Max(c => c.X) + 1; } }
- public int Bottom { get { return Cells.Keys.Max(c => c.Y) + 1; } }
-
- public int Width { get { return Right - Left; } }
- public int Height { get { return Bottom - Top; } }
- }
-}
+using System.Collections.Generic;
+using System.Linq;
+
+namespace OpenRA.TilesetBuilder
+{
+ class Template
+ {
+ public Dictionary Cells = new Dictionary();
+
+ 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; } }
+ }
+}
diff --git a/OpenRA.TilesetBuilder/frmBuilder.Designer.cs b/OpenRA.TilesetBuilder/frmBuilder.Designer.cs
new file mode 100644
index 0000000000..f1ec285a8c
--- /dev/null
+++ b/OpenRA.TilesetBuilder/frmBuilder.Designer.cs
@@ -0,0 +1,349 @@
+namespace OpenRA.TilesetBuilder
+{
+ partial class frmBuilder
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmBuilder));
+ this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.imageList = new System.Windows.Forms.ImageList(this.components);
+ this.tsTerrainTypes = new System.Windows.Forms.ToolStrip();
+ this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();
+ this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripLabel4 = new System.Windows.Forms.ToolStripLabel();
+ this.txtTilesetName = new System.Windows.Forms.ToolStripTextBox();
+ this.toolStripLabel5 = new System.Windows.Forms.ToolStripLabel();
+ this.txtID = new System.Windows.Forms.ToolStripTextBox();
+ this.lblExt = new System.Windows.Forms.ToolStripLabel();
+ this.txtExt = new System.Windows.Forms.ToolStripTextBox();
+ this.toolStripLabel6 = new System.Windows.Forms.ToolStripLabel();
+ this.txtPal = new System.Windows.Forms.ToolStripTextBox();
+ this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();
+ this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
+ this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+ this.toolStripButton15 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton14 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripButton3 = new System.Windows.Forms.ToolStripButton();
+ this.surface1 = new OpenRA.TilesetBuilder.Surface();
+ this.toolStripContainer1.ContentPanel.SuspendLayout();
+ this.toolStripContainer1.TopToolStripPanel.SuspendLayout();
+ this.toolStripContainer1.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.tsTerrainTypes.SuspendLayout();
+ this.toolStrip1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // toolStripContainer1
+ //
+ //
+ // toolStripContainer1.ContentPanel
+ //
+ this.toolStripContainer1.ContentPanel.Controls.Add(this.panel1);
+ this.toolStripContainer1.ContentPanel.Controls.Add(this.tsTerrainTypes);
+ this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(908, 571);
+ this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.toolStripContainer1.Location = new System.Drawing.Point(0, 0);
+ this.toolStripContainer1.Name = "toolStripContainer1";
+ this.toolStripContainer1.Size = new System.Drawing.Size(908, 596);
+ this.toolStripContainer1.TabIndex = 0;
+ this.toolStripContainer1.Text = "toolStripContainer1";
+ //
+ // toolStripContainer1.TopToolStripPanel
+ //
+ this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolStrip1);
+ this.toolStripContainer1.TopToolStripPanel.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
+ this.toolStripContainer1.TopToolStripPanel.Click += new System.EventHandler(this.toolStripContainer1_TopToolStripPanel_Click);
+ //
+ // panel1
+ //
+ this.panel1.AutoScroll = true;
+ this.panel1.BackColor = System.Drawing.Color.Black;
+ this.panel1.Controls.Add(this.surface1);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel1.Location = new System.Drawing.Point(0, 0);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(788, 571);
+ this.panel1.TabIndex = 3;
+ //
+ // imageList
+ //
+ this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
+ this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+ this.imageList.Images.SetKeyName(0, "clear.png");
+ this.imageList.Images.SetKeyName(1, "water.png");
+ this.imageList.Images.SetKeyName(2, "road.png");
+ this.imageList.Images.SetKeyName(3, "rock.png");
+ this.imageList.Images.SetKeyName(4, "river.png");
+ this.imageList.Images.SetKeyName(5, "rough.png");
+ this.imageList.Images.SetKeyName(6, "wall.png");
+ this.imageList.Images.SetKeyName(7, "beach.png");
+ this.imageList.Images.SetKeyName(8, "tree.png");
+ this.imageList.Images.SetKeyName(9, "tiberium.png");
+ //
+ // tsTerrainTypes
+ //
+ this.tsTerrainTypes.AutoSize = false;
+ this.tsTerrainTypes.Dock = System.Windows.Forms.DockStyle.Right;
+ this.tsTerrainTypes.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripLabel3,
+ this.toolStripSeparator3,
+ this.toolStripLabel4,
+ this.txtTilesetName,
+ this.toolStripLabel5,
+ this.txtID,
+ this.lblExt,
+ this.txtExt,
+ this.toolStripLabel6,
+ this.txtPal,
+ this.toolStripSeparator5,
+ this.toolStripLabel2,
+ this.toolStripSeparator4,
+ this.toolStripButton1});
+ this.tsTerrainTypes.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;
+ this.tsTerrainTypes.Location = new System.Drawing.Point(788, 0);
+ this.tsTerrainTypes.Name = "tsTerrainTypes";
+ this.tsTerrainTypes.Size = new System.Drawing.Size(120, 571);
+ this.tsTerrainTypes.TabIndex = 1;
+ this.tsTerrainTypes.Text = "toolStrip3";
+ //
+ // toolStripLabel3
+ //
+ this.toolStripLabel3.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold);
+ this.toolStripLabel3.Name = "toolStripLabel3";
+ this.toolStripLabel3.Size = new System.Drawing.Size(118, 13);
+ this.toolStripLabel3.Text = "Tileset setup";
+ //
+ // toolStripSeparator3
+ //
+ this.toolStripSeparator3.Name = "toolStripSeparator3";
+ this.toolStripSeparator3.Size = new System.Drawing.Size(118, 6);
+ //
+ // toolStripLabel4
+ //
+ this.toolStripLabel4.Name = "toolStripLabel4";
+ this.toolStripLabel4.Size = new System.Drawing.Size(118, 13);
+ this.toolStripLabel4.Text = "Tileset name:";
+ //
+ // txtTilesetName
+ //
+ this.txtTilesetName.MaxLength = 32;
+ this.txtTilesetName.Name = "txtTilesetName";
+ this.txtTilesetName.Size = new System.Drawing.Size(116, 21);
+ this.txtTilesetName.Text = "Temperat";
+ this.txtTilesetName.TextChanged += new System.EventHandler(this.txtTilesetName_TextChanged);
+ //
+ // toolStripLabel5
+ //
+ this.toolStripLabel5.Name = "toolStripLabel5";
+ this.toolStripLabel5.Size = new System.Drawing.Size(118, 13);
+ this.toolStripLabel5.Text = "Tileset ID:";
+ //
+ // txtID
+ //
+ this.txtID.Name = "txtID";
+ this.txtID.ReadOnly = true;
+ this.txtID.Size = new System.Drawing.Size(116, 21);
+ this.txtID.Text = "TEMPERAT";
+ //
+ // lblExt
+ //
+ this.lblExt.Name = "lblExt";
+ this.lblExt.Size = new System.Drawing.Size(118, 13);
+ this.lblExt.Text = "Extensions:";
+ //
+ // txtExt
+ //
+ this.txtExt.Name = "txtExt";
+ this.txtExt.ReadOnly = true;
+ this.txtExt.Size = new System.Drawing.Size(116, 21);
+ this.txtExt.Text = ".tem,.shp";
+ //
+ // toolStripLabel6
+ //
+ this.toolStripLabel6.Name = "toolStripLabel6";
+ this.toolStripLabel6.Size = new System.Drawing.Size(118, 13);
+ this.toolStripLabel6.Text = "Palette:";
+ //
+ // txtPal
+ //
+ this.txtPal.Name = "txtPal";
+ this.txtPal.ReadOnly = true;
+ this.txtPal.Size = new System.Drawing.Size(116, 21);
+ this.txtPal.Text = "temperat.pal";
+ //
+ // toolStripSeparator5
+ //
+ this.toolStripSeparator5.Name = "toolStripSeparator5";
+ this.toolStripSeparator5.Size = new System.Drawing.Size(118, 6);
+ //
+ // toolStripLabel2
+ //
+ this.toolStripLabel2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold);
+ this.toolStripLabel2.Name = "toolStripLabel2";
+ this.toolStripLabel2.Size = new System.Drawing.Size(118, 13);
+ this.toolStripLabel2.Text = "Terrain type";
+ //
+ // toolStripSeparator4
+ //
+ this.toolStripSeparator4.Name = "toolStripSeparator4";
+ this.toolStripSeparator4.Size = new System.Drawing.Size(118, 6);
+ //
+ // toolStripButton1
+ //
+ this.toolStripButton1.Checked = true;
+ this.toolStripButton1.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
+ this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton1.Name = "toolStripButton1";
+ this.toolStripButton1.Size = new System.Drawing.Size(118, 20);
+ this.toolStripButton1.Text = "Template Tool";
+ this.toolStripButton1.Click += new System.EventHandler(this.TerrainTypeSelectorClicked);
+ //
+ // toolStrip1
+ //
+ this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None;
+ this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripButton15,
+ this.toolStripButton2,
+ this.toolStripButton14,
+ this.toolStripSeparator1,
+ this.toolStripButton3});
+ this.toolStrip1.Location = new System.Drawing.Point(3, 0);
+ this.toolStrip1.Name = "toolStrip1";
+ this.toolStrip1.Size = new System.Drawing.Size(275, 25);
+ this.toolStrip1.TabIndex = 0;
+ //
+ // toolStripButton15
+ //
+ this.toolStripButton15.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton15.Image")));
+ this.toolStripButton15.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton15.Name = "toolStripButton15";
+ this.toolStripButton15.Size = new System.Drawing.Size(48, 22);
+ this.toolStripButton15.Text = "New";
+ this.toolStripButton15.Click += new System.EventHandler(this.toolStripButton15_Click);
+ //
+ // toolStripButton2
+ //
+ this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));
+ this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton2.Name = "toolStripButton2";
+ this.toolStripButton2.Size = new System.Drawing.Size(51, 22);
+ this.toolStripButton2.Text = "Save";
+ this.toolStripButton2.Click += new System.EventHandler(this.SaveClicked);
+ //
+ // toolStripButton14
+ //
+ this.toolStripButton14.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton14.Image")));
+ this.toolStripButton14.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton14.Name = "toolStripButton14";
+ this.toolStripButton14.Size = new System.Drawing.Size(59, 22);
+ this.toolStripButton14.Text = "Export";
+ this.toolStripButton14.Click += new System.EventHandler(this.ExportClicked);
+ //
+ // toolStripSeparator1
+ //
+ this.toolStripSeparator1.Name = "toolStripSeparator1";
+ this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
+ //
+ // toolStripButton3
+ //
+ this.toolStripButton3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton3.Image")));
+ this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton3.Name = "toolStripButton3";
+ this.toolStripButton3.Size = new System.Drawing.Size(70, 22);
+ this.toolStripButton3.Text = "Overlays";
+ this.toolStripButton3.Click += new System.EventHandler(this.ShowOverlaysClicked);
+ //
+ // surface1
+ //
+ this.surface1.BackColor = System.Drawing.Color.Black;
+ this.surface1.ImagesList = this.imageList;
+ this.surface1.Location = new System.Drawing.Point(0, 0);
+ this.surface1.Name = "surface1";
+ this.surface1.ShowTerrainTypes = true;
+ this.surface1.Size = new System.Drawing.Size(653, 454);
+ this.surface1.TabIndex = 2;
+ this.surface1.Text = "surface1";
+ //
+ // frmBuilder
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(908, 596);
+ this.Controls.Add(this.toolStripContainer1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "frmBuilder";
+ this.Text = "Tileset Builder 2";
+ this.toolStripContainer1.ContentPanel.ResumeLayout(false);
+ this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false);
+ this.toolStripContainer1.TopToolStripPanel.PerformLayout();
+ this.toolStripContainer1.ResumeLayout(false);
+ this.toolStripContainer1.PerformLayout();
+ this.panel1.ResumeLayout(false);
+ this.tsTerrainTypes.ResumeLayout(false);
+ this.tsTerrainTypes.PerformLayout();
+ this.toolStrip1.ResumeLayout(false);
+ this.toolStrip1.PerformLayout();
+ this.ResumeLayout(false);
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ToolStripContainer toolStripContainer1;
+ private System.Windows.Forms.ToolStrip toolStrip1;
+ private System.Windows.Forms.ToolStripButton toolStripButton2;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+ private System.Windows.Forms.ToolStripButton toolStripButton3;
+ private System.Windows.Forms.ToolStripButton toolStripButton14;
+ public System.Windows.Forms.ImageList imageList;
+ private System.Windows.Forms.ToolStrip tsTerrainTypes;
+ private System.Windows.Forms.Panel panel1;
+ private Surface surface1;
+ private System.Windows.Forms.ToolStripLabel toolStripLabel2;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
+ private System.Windows.Forms.ToolStripButton toolStripButton15;
+ private System.Windows.Forms.ToolStripButton toolStripButton1;
+ private System.Windows.Forms.ToolStripLabel toolStripLabel3;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
+ private System.Windows.Forms.ToolStripLabel toolStripLabel4;
+ private System.Windows.Forms.ToolStripTextBox txtTilesetName;
+ private System.Windows.Forms.ToolStripLabel toolStripLabel5;
+ private System.Windows.Forms.ToolStripTextBox txtID;
+ private System.Windows.Forms.ToolStripLabel lblExt;
+ private System.Windows.Forms.ToolStripTextBox txtExt;
+ private System.Windows.Forms.ToolStripLabel toolStripLabel6;
+ private System.Windows.Forms.ToolStripTextBox txtPal;
+ }
+}
+
diff --git a/OpenRA.TilesetBuilder/frmBuilder.cs b/OpenRA.TilesetBuilder/frmBuilder.cs
new file mode 100644
index 0000000000..8edf247c08
--- /dev/null
+++ b/OpenRA.TilesetBuilder/frmBuilder.cs
@@ -0,0 +1,447 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2012 The OpenRA Developers (see AUTHORS)
+ * This file is part of OpenRA, which is free software. It is made
+ * available to you under the terms of the GNU General Public License
+ * as published by the Free Software Foundation. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using System.Windows.Forms;
+using System.Xml;
+using System.Runtime.InteropServices;
+using OpenRA.FileFormats;
+
+namespace OpenRA.TilesetBuilder
+{
+ public partial class frmBuilder : Form
+ {
+ string srcfile;
+ int size;
+ public TerrainTypeInfo[] TerrainType;
+ public Palette tpal;
+ public bool PaletteFromImage = true;
+ public string PaletteFile = "";
+ public string ImageFile = "";
+ public int TileSize = 24;
+
+ private int ColorDiff(Color color, Color curr)
+ {
+ return Math.Abs(color.R - curr.R) + Math.Abs(color.G - curr.G) + Math.Abs(color.B - curr.B);
+ }
+
+ public void CreateNewTileset()
+ {
+ this.Show();
+ using (var fNew = new frmNew { })
+ if (DialogResult.OK == fNew.ShowDialog())
+ {
+ PaletteFromImage = fNew.PaletteFromImage;
+ PaletteFile = fNew.PaletteFile;
+ ImageFile = fNew.ImageFile;
+ TileSize = fNew.TileSize;
+
+ srcfile = ImageFile;
+ this.size = TileSize;
+ surface1.TileSize = TileSize;
+
+ Bitmap fbitmap = new Bitmap(ImageFile);
+ Bitmap rbitmap = fbitmap.Clone(new Rectangle(0, 0, fbitmap.Width, fbitmap.Height),
+ fbitmap.PixelFormat);
+
+ if (!PaletteFromImage)
+ {
+ tpal = Palette.Load(PaletteFile, false);
+ rbitmap.Palette = tpal.AsSystemPalette();
+ }
+
+ surface1.Image = (Bitmap)rbitmap; //(Bitmap)Image.FromFile(src);
+ surface1.Image.SetResolution(96, 96); // people keep being noobs about DPI, and GDI+ cares.
+ surface1.TerrainTypes = new int[surface1.Image.Width / size, surface1.Image.Height / size]; /* all passable by default */
+ surface1.Templates = new List();
+ surface1.Size = surface1.Image.Size;
+ surface1.Enabled = true;
+ Load();
+ }
+ }
+
+ public frmBuilder( string src, string tsize )
+ {
+ InitializeComponent();
+ Dictionary DefTerrain = new Dictionary();
+
+ int size = int.Parse(tsize);
+
+ var yaml = MiniYaml.DictFromFile("tsbdefaults.yaml");
+ DefTerrain = yaml["Terrain"].NodesDict.Values.Select(y => new TerrainTypeInfo(y)).ToDictionary(t => t.Type);
+ int i = 0;
+ surface1.icon = new Bitmap[DefTerrain.Keys.Count];
+ TerrainType = new TerrainTypeInfo[DefTerrain.Keys.Count];
+ surface1.Enabled = false;
+ foreach (var deftype in DefTerrain)
+ {
+ Bitmap icon = new Bitmap(16, 16);
+ int x, y;
+ // Loop through the images pixels to reset color.
+ for (x = 0; x < icon.Width; x++)
+ {
+ for (y = 0; y < icon.Height; y++)
+ {
+ Color newColor = deftype.Value.Color;
+ icon.SetPixel(x, y, newColor);
+ }
+ }
+ surface1.icon[i] = icon;
+ TerrainType[i] = deftype.Value;
+
+ ToolStripButton TerrainTypeButton = new ToolStripButton(deftype.Key, icon, TerrainTypeSelectorClicked);
+ TerrainTypeButton.ToolTipText = deftype.Key;
+ TerrainTypeButton.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
+ TerrainTypeButton.Tag = i.ToString();
+ i++;
+ tsTerrainTypes.Items.Add(TerrainTypeButton);
+ }
+
+ if (src.Length > 0)
+ {
+ srcfile = src;
+ this.size = size;
+ surface1.TileSize = size;
+ surface1.Image = (Bitmap)Image.FromFile(src);
+ surface1.Image.SetResolution(96, 96); // people keep being noobs about DPI, and GDI+ cares.
+ surface1.TerrainTypes = new int[surface1.Image.Width / size, surface1.Image.Height / size]; /* all passable by default */
+ surface1.Templates = new List();
+ surface1.Size = surface1.Image.Size;
+ surface1.Enabled = true;
+ Load();
+ }
+ else
+ {
+ CreateNewTileset();
+ }
+ }
+
+ public new void Load()
+ {
+ try
+ {
+ var doc = new XmlDocument();
+ doc.Load(Path.ChangeExtension(srcfile, "tsx"));
+
+ foreach (var e in doc.SelectNodes("//name").OfType())
+ txtTilesetName.Text = e.GetAttribute("value");
+
+ foreach (var e in doc.SelectNodes("//terrain").OfType())
+ 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())
+ surface1.Templates.Add(new Template
+ {
+ Cells = e.SelectNodes("./cell").OfType()
+ .Select(f => new int2(int.Parse(f.GetAttribute("x")), int.Parse(f.GetAttribute("y"))))
+ .ToDictionary(a => a, a => true)
+ });
+ }
+ catch { }
+ }
+
+ public void Save()
+ {
+ using (var w = XmlWriter.Create(Path.ChangeExtension(srcfile,"tsx"),
+ new XmlWriterSettings { Indent = true, IndentChars = " " }))
+ {
+ var tilesetName = txtTilesetName.Text;
+
+ if (tilesetName.Length < 1) { tilesetName = "Temperat"; }
+
+ w.WriteStartDocument();
+
+ w.WriteStartElement("tileset");
+ w.WriteStartElement("name");
+ w.WriteAttributeString("value", tilesetName);
+ w.WriteEndElement();
+
+ for( var i = 0; i <= surface1.TerrainTypes.GetUpperBound(0); i++ )
+ for( var j = 0; j <= surface1.TerrainTypes.GetUpperBound(1); j++ )
+ if (surface1.TerrainTypes[i, j] != 0)
+ {
+ w.WriteStartElement("terrain");
+ w.WriteAttributeString("x", i.ToString());
+ w.WriteAttributeString("y", j.ToString());
+ w.WriteAttributeString("t", surface1.TerrainTypes[i, j].ToString());
+ w.WriteEndElement();
+ }
+
+ foreach (var t in surface1.Templates)
+ {
+ w.WriteStartElement("template");
+
+ foreach (var c in t.Cells.Keys)
+ {
+ w.WriteStartElement("cell");
+ w.WriteAttributeString("x", c.X.ToString());
+ w.WriteAttributeString("y", c.Y.ToString());
+ w.WriteEndElement();
+ }
+
+ w.WriteEndElement();
+ }
+
+ w.WriteEndElement();
+ w.WriteEndDocument();
+ }
+ }
+
+ void TerrainTypeSelectorClicked(object sender, EventArgs e)
+ {
+ surface1.InputMode = (sender as ToolStripButton).Tag as string;
+ foreach (var tsb in (sender as ToolStripButton).Owner.Items.OfType())
+ tsb.Checked = false;
+ (sender as ToolStripButton).Checked = true;
+ }
+
+ void SaveClicked(object sender, EventArgs e) { Save(); }
+ void ShowOverlaysClicked(object sender, EventArgs e)
+ {
+ if (surface1.ShowTerrainTypes == false)
+ {
+ surface1.ShowTerrainTypes = true;
+ this.Refresh();
+ }
+ else
+ {
+ surface1.ShowTerrainTypes = false;
+ this.Refresh();
+ }
+ }
+
+ void ExportClicked(object sender, EventArgs e)
+ {
+ var dir = Path.Combine(Path.GetDirectoryName(srcfile), "output");
+ Directory.CreateDirectory(dir);
+ var tilesetName = txtTilesetName.Text;
+ var tilesetID = txtID.Text;
+ var tilesetPalette = txtPal.Text;
+ var tilesetExt = txtExt.Text;
+
+ if (tilesetName.Length < 1) { tilesetName = "Temperat"; }
+ if (tilesetID.Length < 1) { tilesetID = "TEMPERAT"; }
+ if (tilesetPalette.Length < 1) { tilesetPalette = "temperat"; }
+ if (tilesetExt.Length < 1) { tilesetExt = ".tem,.shp"; }
+ // Create a Tileset definition
+ // Todo: Pull this info from the gui
+ var tilesetFile = "";
+ //var mixFile = "";
+ tilesetFile = tilesetName.ToLower();
+ if (tilesetFile.Length < 8)
+ {
+ tilesetFile = tilesetName.ToLower() + ".yaml";
+ //mixFile = tilesetName.ToLower() + ".mix";
+ }
+ else
+ {
+ tilesetFile = tilesetName.ToLower().Substring(0, 8) + ".yaml";
+ //mixFile = tilesetName.ToLower().Substring(0, 8) + ".mix";
+ }
+
+ string[] Ext = tilesetExt.Split(',');
+ var tileset = new TileSet()
+ {
+ Name = tilesetName,
+ Id = tilesetID.ToUpper(),
+ TileSize = size,
+ Palette = tilesetPalette.ToLower(),
+ Extensions = new string[] { Ext[0], Ext[1] }
+ };
+
+ // List of files to add to the mix file
+ List fileList = new List();
+
+ // Export palette (use the embedded palette)
+ var p = surface1.Image.Palette.Entries.ToList();
+ fileList.Add(ExportPalette(p, Path.Combine(dir, tileset.Palette)));
+
+ // Export tile artwork
+ foreach (var t in surface1.Templates)
+ fileList.Add(ExportTemplate(t, surface1.Templates.IndexOf(t), tileset.Extensions.First(), dir));
+
+ // Add the terraintypes
+ // Todo: add support for multiple/different terraintypes
+ foreach (var tt in TerrainType)
+ {
+ tileset.Terrain.Add(tt.Type, tt);
+ }
+
+ // Add the templates
+ ushort cur = 0;
+ foreach (var tp in surface1.Templates)
+ {
+ var template = new TileTemplate()
+ {
+ Id = cur,
+ Image = "t{0:00}".F(cur),
+ Size = new int2(tp.Width,tp.Height),
+ };
+
+ // Todo: add support for different terraintypes
+ // Todo: restrict cells? this doesn't work: .Where( c => surface1.TerrainTypes[c.Key.X, c.Key.Y] != 0 )
+ foreach (var t in tp.Cells)
+ {
+ string ttype = "Clear";
+ //ttype = TerrainType[surface1.TerrainTypes[t.Key.X, t.Key.Y]].Type;
+ template.Tiles.Add((byte)((t.Key.X - tp.Left) + tp.Width * (t.Key.Y - tp.Top)), ttype);
+ }
+
+ tileset.Templates.Add(cur, template);
+ cur++;
+ }
+
+ tileset.Save(Path.Combine(dir, tilesetFile));
+ //throw new NotImplementedException("NotI");
+ //PackageWriter.CreateMix(Path.Combine(dir, mixFile),fileList);
+
+ // Cleanup
+ //foreach (var file in fileList)
+ //File.Delete(file);
+
+ Console.WriteLine("Finished export");
+ }
+
+ string ExportPalette(List p, string file)
+ {
+ while (p.Count < 256) p.Add(Color.Black); // pad the palette out with extra blacks
+ var paletteData = p.Take(256).SelectMany(
+ c => new byte[] { (byte)(c.R >> 2), (byte)(c.G >> 2), (byte)(c.B >> 2) }).ToArray();
+ File.WriteAllBytes(file, paletteData);
+ return file;
+ }
+
+ string ExportTemplate(Template t, int n, string suffix, string dir)
+ {
+ var TileSize = size;
+ var filename = Path.Combine(dir, "t{0:00}{1}".F(n, suffix));
+ var totalTiles = t.Width * t.Height;
+
+ var ms = new MemoryStream();
+ using (var bw = new BinaryWriter(ms))
+ {
+ bw.Write((ushort)TileSize);
+ bw.Write((ushort)TileSize);
+ bw.Write((uint)totalTiles);
+ bw.Write((ushort)t.Width);
+ bw.Write((ushort)t.Height);
+ bw.Write((uint)0); // filesize placeholder
+ bw.Flush();
+ bw.Write((uint)ms.Position + 24); // image start
+ bw.Write((uint)0); // 0 (32bits)
+ bw.Write((uint)0x2c730f8c); // magic?
+ bw.Write((uint)0); // flags start
+ bw.Write((uint)0); // walk start
+ bw.Write((uint)0); // index start
+
+ Bitmap src = surface1.Image.Clone(new Rectangle(0, 0, surface1.Image.Width, surface1.Image.Height),
+ surface1.Image.PixelFormat);
+
+ var data = src.LockBits(new Rectangle(0, 0, src.Width, src.Height),
+ ImageLockMode.ReadOnly, src.PixelFormat);
+
+ unsafe
+ {
+ byte* p = (byte*)data.Scan0;
+
+ for (var v = 0; v < t.Height; v++)
+ for (var u = 0; u < t.Width; u++)
+ {
+ if (t.Cells.ContainsKey(new int2(u + t.Left, v + t.Top)))
+ {
+ byte* q = p + data.Stride * TileSize * (v + t.Top) + TileSize * (u + t.Left);
+ for (var j = 0; j < TileSize; j++)
+ for (var i = 0; i < TileSize; i++)
+ {
+ bw.Write(q[i + j * data.Stride]);
+ }
+
+ }
+ else
+ for (var x = 0; x < TileSize * TileSize; x++)
+ bw.Write((byte)0); /* todo: don't fill with air */
+ }
+ }
+
+ src.UnlockBits(data);
+
+ bw.Flush();
+ var indexStart = ms.Position;
+ for (var v = 0; v < t.Height; v++)
+ for (var u = 0; u < t.Width; u++)
+ bw.Write(t.Cells.ContainsKey(new int2(u + t.Left, v + t.Top))
+ ? (byte)(u + t.Width * v)
+ : (byte)0xff);
+
+ bw.Flush();
+
+ var flagsStart = ms.Position;
+ for (var x = 0; x < totalTiles; x++ )
+ bw.Write((byte)0);
+
+ bw.Flush();
+
+ var walkStart = ms.Position;
+ for (var x = 0; x < totalTiles; x++)
+ bw.Write((byte)0x8);
+
+ var bytes = ms.ToArray();
+ Array.Copy(BitConverter.GetBytes((uint)bytes.Length), 0, bytes, 12, 4);
+ Array.Copy(BitConverter.GetBytes(flagsStart), 0, bytes, 28, 4);
+ Array.Copy(BitConverter.GetBytes(walkStart), 0, bytes, 32, 4);
+ Array.Copy(BitConverter.GetBytes(indexStart), 0, bytes, 36, 4);
+
+ File.WriteAllBytes(filename, bytes);
+ }
+ return filename;
+ }
+
+ private void toolStripContainer1_TopToolStripPanel_Click(object sender, EventArgs e)
+ {
+
+ }
+
+ private void surface1_Click(object sender, EventArgs e)
+ {
+
+ }
+
+ private void txtTilesetName_TextChanged(object sender, EventArgs e)
+ {
+ var tilesetFile = txtTilesetName.Text;
+ if (tilesetFile.Length > 8)
+ {
+ tilesetFile = tilesetFile.ToLower().Substring(0, 8);
+ }
+ txtID.Text = tilesetFile.ToUpper();
+ txtPal.Text = tilesetFile.ToLower() + ".pal";
+ if (tilesetFile.Length < 3)
+ {
+ txtExt.Text = ".tem,.shp";
+ }
+ else
+ {
+ txtExt.Text = "." + tilesetFile.ToLower().Substring(0, 3) + ",.shp";
+ }
+ }
+
+ private void toolStripButton15_Click(object sender, EventArgs e)
+ {
+ CreateNewTileset();
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/OpenRA.TilesetBuilder/frmBuilder.resx b/OpenRA.TilesetBuilder/frmBuilder.resx
new file mode 100644
index 0000000000..7f3c88c9b5
--- /dev/null
+++ b/OpenRA.TilesetBuilder/frmBuilder.resx
@@ -0,0 +1,509 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 215, 17
+
+
+
+ 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
+
+
+
+ 314, 17
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABWSURBVDhPY2AgAWRmZv5HxiRohSgFad6/fz8Yg9gDYwDR
+ XqCvf7HZRlKAYVNMkhdIsg1b3KHbRnRIwwxDdwHJiYUqBuDzBkwOZ9LF5wKivEMVA8j1AgCw4woaY7rJ
+ SwAAAABJRU5ErkJggg==
+
+
+
+ 17, 17
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEiSURBVDhP7ZKxSgNBEIYHbH0A38D3EF/AxkdIqaV2V1nc
+ HoKNEkGw1lRWwYiF1RVBCFhEgqgQxbPIKebIcblcPnf2zBGtLbMw/Hu7+383M7siiyGFkb3USKw6NeJl
+ RqLCl2DoSZIb6U2MtO1eYxrIGr7UNOx8K/elqypqJo3hbB01k0RuzjiBuAdvbbhvwMEyXNZcqJlBFw5X
+ kE9PRuQjFKJ/dcabHRTkgGpMB3ZtF56vyrjYhK8+YyN9qUyd49I4A0yyMoPXEO5OYfgCHw/OSHQLTy1s
+ aa0K4EBayp8MbA9CgiVQ4GPTlnMORQ4nq9iebfwGaAY6VOcyqMrs1OF6uzxjBPcGZx1XtXGkG6rvRrKf
+ Wwjt975CrNbnzywe8T914BvPFkdY2/qCYgAAAABJRU5ErkJggg==
+
+
+
+
+ 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==
+
+
+
+
+ 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
+
+
+
+
+ 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==
+
+
+
+ 43
+
+
+
+ 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=
+
+
+
\ No newline at end of file
diff --git a/OpenRA.TilesetBuilder/frmNew.Designer.cs b/OpenRA.TilesetBuilder/frmNew.Designer.cs
new file mode 100644
index 0000000000..1acc2ac303
--- /dev/null
+++ b/OpenRA.TilesetBuilder/frmNew.Designer.cs
@@ -0,0 +1,228 @@
+namespace OpenRA.TilesetBuilder
+{
+ partial class frmNew
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.numSize = new System.Windows.Forms.NumericUpDown();
+ this.label1 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txtPal = new System.Windows.Forms.TextBox();
+ this.btnPalBrowse = new System.Windows.Forms.Button();
+ this.chkUsePalFromImage = new System.Windows.Forms.CheckBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.imgImage = new System.Windows.Forms.PictureBox();
+ this.btnImgBrowse = new System.Windows.Forms.Button();
+ this.txtImage = new System.Windows.Forms.TextBox();
+ this.btnCancel = new System.Windows.Forms.Button();
+ this.btnOk = new System.Windows.Forms.Button();
+ ((System.ComponentModel.ISupportInitialize)(this.numSize)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.imgImage)).BeginInit();
+ this.SuspendLayout();
+ //
+ // numSize
+ //
+ this.numSize.Location = new System.Drawing.Point(66, 6);
+ this.numSize.Maximum = new decimal(new int[] {
+ 264,
+ 0,
+ 0,
+ 0});
+ this.numSize.Minimum = new decimal(new int[] {
+ 24,
+ 0,
+ 0,
+ 0});
+ this.numSize.Name = "numSize";
+ this.numSize.Size = new System.Drawing.Size(49, 20);
+ this.numSize.TabIndex = 0;
+ this.numSize.Value = new decimal(new int[] {
+ 24,
+ 0,
+ 0,
+ 0});
+ this.numSize.ValueChanged += new System.EventHandler(this.numSize_ValueChanged);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(12, 9);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(48, 13);
+ this.label1.TabIndex = 1;
+ this.label1.Text = "Tile size:";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(12, 34);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(43, 13);
+ this.label2.TabIndex = 2;
+ this.label2.Text = "Palette:";
+ //
+ // txtPal
+ //
+ this.txtPal.Location = new System.Drawing.Point(15, 52);
+ this.txtPal.Name = "txtPal";
+ this.txtPal.ReadOnly = true;
+ this.txtPal.Size = new System.Drawing.Size(267, 20);
+ this.txtPal.TabIndex = 3;
+ //
+ // btnPalBrowse
+ //
+ this.btnPalBrowse.Enabled = false;
+ this.btnPalBrowse.Location = new System.Drawing.Point(288, 50);
+ this.btnPalBrowse.Name = "btnPalBrowse";
+ this.btnPalBrowse.Size = new System.Drawing.Size(26, 23);
+ this.btnPalBrowse.TabIndex = 4;
+ this.btnPalBrowse.Text = "...";
+ this.btnPalBrowse.UseVisualStyleBackColor = true;
+ this.btnPalBrowse.Click += new System.EventHandler(this.btnPalBrowse_Click);
+ //
+ // chkUsePalFromImage
+ //
+ this.chkUsePalFromImage.AutoSize = true;
+ this.chkUsePalFromImage.Checked = true;
+ this.chkUsePalFromImage.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.chkUsePalFromImage.Location = new System.Drawing.Point(66, 34);
+ this.chkUsePalFromImage.Name = "chkUsePalFromImage";
+ this.chkUsePalFromImage.Size = new System.Drawing.Size(134, 17);
+ this.chkUsePalFromImage.TabIndex = 5;
+ this.chkUsePalFromImage.Text = "Use palette from image";
+ this.chkUsePalFromImage.UseVisualStyleBackColor = true;
+ this.chkUsePalFromImage.CheckedChanged += new System.EventHandler(this.chkUsePalFromImage_CheckedChanged);
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(12, 75);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(39, 13);
+ this.label3.TabIndex = 6;
+ this.label3.Text = "Image:";
+ //
+ // imgImage
+ //
+ this.imgImage.BackColor = System.Drawing.Color.Black;
+ this.imgImage.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.imgImage.Location = new System.Drawing.Point(15, 120);
+ this.imgImage.Name = "imgImage";
+ this.imgImage.Size = new System.Drawing.Size(299, 219);
+ this.imgImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+ this.imgImage.TabIndex = 7;
+ this.imgImage.TabStop = false;
+ //
+ // btnImgBrowse
+ //
+ this.btnImgBrowse.Location = new System.Drawing.Point(288, 91);
+ this.btnImgBrowse.Name = "btnImgBrowse";
+ this.btnImgBrowse.Size = new System.Drawing.Size(26, 23);
+ this.btnImgBrowse.TabIndex = 9;
+ this.btnImgBrowse.Text = "...";
+ this.btnImgBrowse.UseVisualStyleBackColor = true;
+ this.btnImgBrowse.Click += new System.EventHandler(this.btnImgBrowse_Click);
+ //
+ // txtImage
+ //
+ this.txtImage.Location = new System.Drawing.Point(15, 91);
+ this.txtImage.Name = "txtImage";
+ this.txtImage.ReadOnly = true;
+ this.txtImage.Size = new System.Drawing.Size(267, 20);
+ this.txtImage.TabIndex = 8;
+ //
+ // btnCancel
+ //
+ this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.btnCancel.Location = new System.Drawing.Point(239, 345);
+ this.btnCancel.Name = "btnCancel";
+ this.btnCancel.Size = new System.Drawing.Size(75, 23);
+ this.btnCancel.TabIndex = 10;
+ this.btnCancel.Text = "Cancel";
+ this.btnCancel.UseVisualStyleBackColor = true;
+ this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+ //
+ // btnOk
+ //
+ this.btnOk.Location = new System.Drawing.Point(158, 345);
+ this.btnOk.Name = "btnOk";
+ this.btnOk.Size = new System.Drawing.Size(75, 23);
+ this.btnOk.TabIndex = 11;
+ this.btnOk.Text = "OK";
+ this.btnOk.UseVisualStyleBackColor = true;
+ this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
+ //
+ // frmNew
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.CancelButton = this.btnCancel;
+ this.ClientSize = new System.Drawing.Size(329, 378);
+ this.Controls.Add(this.btnOk);
+ this.Controls.Add(this.btnCancel);
+ this.Controls.Add(this.btnImgBrowse);
+ this.Controls.Add(this.txtImage);
+ this.Controls.Add(this.imgImage);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.chkUsePalFromImage);
+ this.Controls.Add(this.btnPalBrowse);
+ this.Controls.Add(this.txtPal);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.numSize);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "frmNew";
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "New Tileset";
+ ((System.ComponentModel.ISupportInitialize)(this.numSize)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.imgImage)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.NumericUpDown numSize;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txtPal;
+ private System.Windows.Forms.Button btnPalBrowse;
+ private System.Windows.Forms.CheckBox chkUsePalFromImage;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.PictureBox imgImage;
+ private System.Windows.Forms.Button btnImgBrowse;
+ private System.Windows.Forms.TextBox txtImage;
+ private System.Windows.Forms.Button btnCancel;
+ private System.Windows.Forms.Button btnOk;
+ }
+}
\ No newline at end of file
diff --git a/OpenRA.TilesetBuilder/frmNew.cs b/OpenRA.TilesetBuilder/frmNew.cs
new file mode 100644
index 0000000000..79934d4006
--- /dev/null
+++ b/OpenRA.TilesetBuilder/frmNew.cs
@@ -0,0 +1,88 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace OpenRA.TilesetBuilder
+{
+ public partial class frmNew : Form
+ {
+ public bool PaletteFromImage = true;
+ public string PaletteFile = "";
+ public string ImageFile = "";
+ public int TileSize = 24;
+
+ public frmNew()
+ {
+ InitializeComponent();
+ }
+
+ private void btnCancel_Click(object sender, EventArgs e)
+ {
+ Close();
+ }
+
+ private void btnOk_Click(object sender, EventArgs e)
+ {
+ if (!PaletteFromImage)
+ {
+ if (PaletteFile.Length < 5)
+ {
+ MessageBox.Show("No palette specified", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ }
+ }
+ if (ImageFile.Length < 5)
+ {
+ MessageBox.Show("No image selected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ else
+ {
+ DialogResult = DialogResult.OK;
+ Close();
+ }
+ }
+
+ private void chkUsePalFromImage_CheckedChanged(object sender, EventArgs e)
+ {
+ if (chkUsePalFromImage.Checked)
+ {
+ btnPalBrowse.Enabled = false;
+ PaletteFromImage = true;
+ }
+ else
+ {
+ btnPalBrowse.Enabled = true;
+ PaletteFromImage = false;
+ }
+ }
+
+ private void btnPalBrowse_Click(object sender, EventArgs e)
+ {
+ using (var ofd = new OpenFileDialog { Filter = "C&C Palette (*.pal)|*.pal" })
+ if (DialogResult.OK == ofd.ShowDialog())
+ {
+ PaletteFile = ofd.FileName;
+ txtPal.Text = PaletteFile;
+ }
+ }
+
+ private void btnImgBrowse_Click(object sender, EventArgs e)
+ {
+ using (var ofd = new OpenFileDialog { Filter = "8bit Image (*.png,*.pcx,*.bmp)|*.png;*.pcx;*.bmp" })
+ if (DialogResult.OK == ofd.ShowDialog())
+ {
+ ImageFile = ofd.FileName;
+ imgImage.Image = Image.FromFile(ImageFile);
+ txtImage.Text = ImageFile;
+ }
+ }
+
+ private void numSize_ValueChanged(object sender, EventArgs e)
+ {
+ TileSize = (int)numSize.Value;
+ }
+ }
+}
diff --git a/OpenRA.TilesetBuilder/frmNew.resx b/OpenRA.TilesetBuilder/frmNew.resx
new file mode 100644
index 0000000000..ff31a6db56
--- /dev/null
+++ b/OpenRA.TilesetBuilder/frmNew.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/OpenRA.TilesetBuilder/tilesetbuilder_icon copy.ico b/OpenRA.TilesetBuilder/tilesetbuilder_icon copy.ico
new file mode 100644
index 0000000000..ee02348b2b
Binary files /dev/null and b/OpenRA.TilesetBuilder/tilesetbuilder_icon copy.ico differ
diff --git a/mods/d2k/TODO b/mods/d2k/TODO
index 5aa2e0c759..5d74dbae77 100644
--- a/mods/d2k/TODO
+++ b/mods/d2k/TODO
@@ -32,10 +32,10 @@
# add install rules to makefile (once more polished)
# add sonic tank weapon (currently uses tesla)
# make deviator change the allegiance of ememy units (currently shoots rockets)
-# complete Arrakis tileset (blocked by TilesetBuilder crashing on export)
# allow frigate to deliver 5 units at once to starport
# starport prices should vary
# reinforcements have arrived is played twice when ordering via starport
# add shroud (Dune's 32x32 tiles differ completely from RA/CnC)
# black spots on buildings should be transparent
-# gamefile extraction (setup/setup.z) from CD fails
\ No newline at end of file
+# gamefile extraction (setup/setup.z) from CD fails
+# TilesetBuilder does not support TerrainTypes other then "Clear"
\ No newline at end of file
diff --git a/mods/d2k/bits/arrakis.pal b/mods/d2k/bits/arrakis.pal
new file mode 100644
index 0000000000..1099356108
Binary files /dev/null and b/mods/d2k/bits/arrakis.pal differ
diff --git a/mods/d2k/maps/bloxbase-test.oramap b/mods/d2k/maps/bloxbase-test.oramap
new file mode 100644
index 0000000000..911d151d05
Binary files /dev/null and b/mods/d2k/maps/bloxbase-test.oramap differ
diff --git a/mods/d2k/maps/test.oramap b/mods/d2k/maps/test.oramap
index dc387a59ae..8e30884386 100644
Binary files a/mods/d2k/maps/test.oramap and b/mods/d2k/maps/test.oramap differ
diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml
index eba4fbec75..e94e7d3822 100644
--- a/mods/d2k/mod.yaml
+++ b/mods/d2k/mod.yaml
@@ -9,6 +9,7 @@ Folders:
./mods/d2k
./mods/d2k/bits
./mods/d2k/uibits
+ ./mods/d2k/tilesets/bloxbase
~^/Content/d2k
~^/Content/d2k/GAMESFX
~^/Content/d2k/Music
@@ -81,7 +82,7 @@ Voices:
TileSets:
mods/d2k/tilesets/arrakis.yaml
-# mods/d2k/tilesets/bloxbase.yaml
+ mods/d2k/tilesets/bloxbase.yaml
TileSize: 32
diff --git a/mods/d2k/raw/d2k_BLOXBASE.bmp b/mods/d2k/raw/BLOXBASE.bmp
similarity index 100%
rename from mods/d2k/raw/d2k_BLOXBASE.bmp
rename to mods/d2k/raw/BLOXBASE.bmp
diff --git a/mods/d2k/raw/d2k_BLOXBASE.tsx b/mods/d2k/raw/BLOXBASE.tsx
similarity index 100%
rename from mods/d2k/raw/d2k_BLOXBASE.tsx
rename to mods/d2k/raw/BLOXBASE.tsx
diff --git a/mods/d2k/raw/BLOXBAT.bmp b/mods/d2k/raw/BLOXBAT.bmp
new file mode 100644
index 0000000000..be831fcea8
Binary files /dev/null and b/mods/d2k/raw/BLOXBAT.bmp differ
diff --git a/mods/d2k/raw/BLOXBGBS.bmp b/mods/d2k/raw/BLOXBGBS.bmp
new file mode 100644
index 0000000000..0ff9662910
Binary files /dev/null and b/mods/d2k/raw/BLOXBGBS.bmp differ
diff --git a/mods/d2k/raw/BLOXICE.bmp b/mods/d2k/raw/BLOXICE.bmp
new file mode 100644
index 0000000000..e43a5af748
Binary files /dev/null and b/mods/d2k/raw/BLOXICE.bmp differ
diff --git a/mods/d2k/raw/BLOXTREE.bmp b/mods/d2k/raw/BLOXTREE.bmp
new file mode 100644
index 0000000000..ecf83baee1
Binary files /dev/null and b/mods/d2k/raw/BLOXTREE.bmp differ
diff --git a/mods/d2k/raw/BLOXWAST.bmp b/mods/d2k/raw/BLOXWAST.bmp
new file mode 100644
index 0000000000..e590dbce62
Binary files /dev/null and b/mods/d2k/raw/BLOXWAST.bmp differ
diff --git a/mods/d2k/raw/BLOXXMAS.bmp b/mods/d2k/raw/BLOXXMAS.bmp
new file mode 100644
index 0000000000..b8e0afc5bb
Binary files /dev/null and b/mods/d2k/raw/BLOXXMAS.bmp differ
diff --git a/mods/d2k/raw/output/bloxbase.yaml b/mods/d2k/raw/output/bloxbase.yaml
new file mode 100644
index 0000000000..4cb16abdbb
--- /dev/null
+++ b/mods/d2k/raw/output/bloxbase.yaml
@@ -0,0 +1,2369 @@
+General:
+ Name: Bloxbase
+ TileSize: 32
+ Id: BLOXBASE
+ Palette: bloxbase.pal
+ Extensions: .blo,.shp
+
+Terrain:
+ TerrainType@Clear:
+ Type: Clear
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,40,68,40
+ TerrainType@Water:
+ Type: Water
+ AcceptSmudge: False
+ IsWater: True
+ Color: 255,92,116,164
+ TerrainType@Road:
+ Type: Road
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,88,116,116
+ TerrainType@Rock:
+ Type: Rock
+ AcceptSmudge: False
+ IsWater: False
+ Color: 255,68,68,60
+ TerrainType@Tree:
+ Type: Tree
+ AcceptSmudge: False
+ IsWater: False
+ Color: 255,28,32,36
+ TerrainType@River:
+ Type: River
+ AcceptSmudge: False
+ IsWater: False
+ Color: 255,92,140,180
+ TerrainType@Rough:
+ Type: Rough
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,68,20,100
+ TerrainType@Wall:
+ Type: Wall
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,208,192,160
+ TerrainType@Beach:
+ Type: Beach
+ AcceptSmudge: False
+ IsWater: False
+ Color: 255,176,156,120
+ TerrainType@Spice:
+ Type: Spice
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,161,226,28
+ TerrainType@SpiceBlobs:
+ Type: SpiceBlobs
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,84,252,252
+
+Templates:
+ Template@0:
+ Id: 0
+ Image: t00
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@1:
+ Id: 1
+ Image: t01
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@2:
+ Id: 2
+ Image: t02
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@3:
+ Id: 3
+ Image: t03
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@4:
+ Id: 4
+ Image: t04
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@5:
+ Id: 5
+ Image: t05
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@6:
+ Id: 6
+ Image: t06
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@7:
+ Id: 7
+ Image: t07
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@8:
+ Id: 8
+ Image: t08
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@9:
+ Id: 9
+ Image: t09
+ Size: 5,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 6: Clear
+ 1: Clear
+ 5: Clear
+ 10: Clear
+ 11: Clear
+ 12: Clear
+ 13: Clear
+ 14: Clear
+ 9: Clear
+ 4: Clear
+ 3: Clear
+ 2: Clear
+ 7: Clear
+ 8: Clear
+ Template@10:
+ Id: 10
+ Image: t10
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@11:
+ Id: 11
+ Image: t11
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@12:
+ Id: 12
+ Image: t12
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@13:
+ Id: 13
+ Image: t13
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@14:
+ Id: 14
+ Image: t14
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@15:
+ Id: 15
+ Image: t15
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@16:
+ Id: 16
+ Image: t16
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@17:
+ Id: 17
+ Image: t17
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@18:
+ Id: 18
+ Image: t18
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@19:
+ Id: 19
+ Image: t19
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@20:
+ Id: 20
+ Image: t20
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@21:
+ Id: 21
+ Image: t21
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@22:
+ Id: 22
+ Image: t22
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@23:
+ Id: 23
+ Image: t23
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@24:
+ Id: 24
+ Image: t24
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 5: Clear
+ 4: Clear
+ 1: Clear
+ Template@25:
+ Id: 25
+ Image: t25
+ Size: 3,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 4: Clear
+ 3: Clear
+ 6: Clear
+ 7: Clear
+ 8: Clear
+ 5: Clear
+ 2: Clear
+ Template@26:
+ Id: 26
+ Image: t26
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@27:
+ Id: 27
+ Image: t27
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@28:
+ Id: 28
+ Image: t28
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 4: Clear
+ 5: Clear
+ 2: Clear
+ 3: Clear
+ Template@29:
+ Id: 29
+ Image: t29
+ Size: 3,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 7: Clear
+ 6: Clear
+ 3: Clear
+ 8: Clear
+ Template@30:
+ Id: 30
+ Image: t30
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@31:
+ Id: 31
+ Image: t31
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@32:
+ Id: 32
+ Image: t32
+ Size: 4,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 5: Clear
+ 6: Clear
+ 2: Clear
+ 3: Clear
+ 7: Clear
+ 4: Clear
+ Template@33:
+ Id: 33
+ Image: t33
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@34:
+ Id: 34
+ Image: t34
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 3: Clear
+ 2: Clear
+ 1: Clear
+ Template@35:
+ Id: 35
+ Image: t35
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 3: Clear
+ Template@36:
+ Id: 36
+ Image: t36
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 3: Clear
+ Template@37:
+ Id: 37
+ Image: t37
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 4: Clear
+ 3: Clear
+ 5: Clear
+ Template@38:
+ Id: 38
+ Image: t38
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@39:
+ Id: 39
+ Image: t39
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@40:
+ Id: 40
+ Image: t40
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@41:
+ Id: 41
+ Image: t41
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@42:
+ Id: 42
+ Image: t42
+ Size: 3,3
+ PickAny: False
+ Tiles:
+ 3: Clear
+ 4: Clear
+ 7: Clear
+ 2: Clear
+ 6: Clear
+ Template@43:
+ Id: 43
+ Image: t43
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@44:
+ Id: 44
+ Image: t44
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 2: Clear
+ 3: Clear
+ 0: Clear
+ Template@45:
+ Id: 45
+ Image: t45
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@46:
+ Id: 46
+ Image: t46
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@47:
+ Id: 47
+ Image: t47
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ 1: Clear
+ Template@48:
+ Id: 48
+ Image: t48
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@49:
+ Id: 49
+ Image: t49
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@50:
+ Id: 50
+ Image: t50
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 3: Clear
+ 4: Clear
+ 1: Clear
+ 5: Clear
+ 2: Clear
+ 0: Clear
+ Template@51:
+ Id: 51
+ Image: t51
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 3: Clear
+ 4: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ Template@52:
+ Id: 52
+ Image: t52
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 3: Clear
+ 4: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ Template@53:
+ Id: 53
+ Image: t53
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 3: Clear
+ 0: Clear
+ 1: Clear
+ Template@54:
+ Id: 54
+ Image: t54
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 4: Clear
+ 5: Clear
+ 3: Clear
+ 1: Clear
+ Template@55:
+ Id: 55
+ Image: t55
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@56:
+ Id: 56
+ Image: t56
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@57:
+ Id: 57
+ Image: t57
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@58:
+ Id: 58
+ Image: t58
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@59:
+ Id: 59
+ Image: t59
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ Template@60:
+ Id: 60
+ Image: t60
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ Template@61:
+ Id: 61
+ Image: t61
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 5: Clear
+ 4: Clear
+ 1: Clear
+ Template@62:
+ Id: 62
+ Image: t62
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 5: Clear
+ 4: Clear
+ 1: Clear
+ Template@63:
+ Id: 63
+ Image: t63
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@64:
+ Id: 64
+ Image: t64
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@65:
+ Id: 65
+ Image: t65
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 3: Clear
+ Template@66:
+ Id: 66
+ Image: t66
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ Template@67:
+ Id: 67
+ Image: t67
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@68:
+ Id: 68
+ Image: t68
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 5: Clear
+ 4: Clear
+ 2: Clear
+ Template@69:
+ Id: 69
+ Image: t69
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@70:
+ Id: 70
+ Image: t70
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@71:
+ Id: 71
+ Image: t71
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@72:
+ Id: 72
+ Image: t72
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@73:
+ Id: 73
+ Image: t73
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@74:
+ Id: 74
+ Image: t74
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@75:
+ Id: 75
+ Image: t75
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@76:
+ Id: 76
+ Image: t76
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@77:
+ Id: 77
+ Image: t77
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@78:
+ Id: 78
+ Image: t78
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@79:
+ Id: 79
+ Image: t79
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@80:
+ Id: 80
+ Image: t80
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@81:
+ Id: 81
+ Image: t81
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@82:
+ Id: 82
+ Image: t82
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@83:
+ Id: 83
+ Image: t83
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@84:
+ Id: 84
+ Image: t84
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@85:
+ Id: 85
+ Image: t85
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@86:
+ Id: 86
+ Image: t86
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@87:
+ Id: 87
+ Image: t87
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@88:
+ Id: 88
+ Image: t88
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@89:
+ Id: 89
+ Image: t89
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@90:
+ Id: 90
+ Image: t90
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@91:
+ Id: 91
+ Image: t91
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@92:
+ Id: 92
+ Image: t92
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@93:
+ Id: 93
+ Image: t93
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@94:
+ Id: 94
+ Image: t94
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@95:
+ Id: 95
+ Image: t95
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@96:
+ Id: 96
+ Image: t96
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@97:
+ Id: 97
+ Image: t97
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@98:
+ Id: 98
+ Image: t98
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@99:
+ Id: 99
+ Image: t99
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 1: Clear
+ 3: Clear
+ Template@100:
+ Id: 100
+ Image: t100
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@101:
+ Id: 101
+ Image: t101
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 4: Clear
+ 5: Clear
+ 3: Clear
+ 1: Clear
+ Template@102:
+ Id: 102
+ Image: t102
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@103:
+ Id: 103
+ Image: t103
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@104:
+ Id: 104
+ Image: t104
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@105:
+ Id: 105
+ Image: t105
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@106:
+ Id: 106
+ Image: t106
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@107:
+ Id: 107
+ Image: t107
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@108:
+ Id: 108
+ Image: t108
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@109:
+ Id: 109
+ Image: t109
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 4: Clear
+ 5: Clear
+ 3: Clear
+ 1: Clear
+ 0: Clear
+ 2: Clear
+ Template@110:
+ Id: 110
+ Image: t110
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@111:
+ Id: 111
+ Image: t111
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 3: Clear
+ 1: Clear
+ 2: Clear
+ Template@112:
+ Id: 112
+ Image: t112
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 4: Clear
+ 3: Clear
+ 5: Clear
+ 2: Clear
+ Template@113:
+ Id: 113
+ Image: t113
+ Size: 3,1
+ PickAny: False
+ Tiles:
+ 2: Clear
+ 1: Clear
+ 0: Clear
+ Template@114:
+ Id: 114
+ Image: t114
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@115:
+ Id: 115
+ Image: t115
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@116:
+ Id: 116
+ Image: t116
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@117:
+ Id: 117
+ Image: t117
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@118:
+ Id: 118
+ Image: t118
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@119:
+ Id: 119
+ Image: t119
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@120:
+ Id: 120
+ Image: t120
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@121:
+ Id: 121
+ Image: t121
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@122:
+ Id: 122
+ Image: t122
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@123:
+ Id: 123
+ Image: t123
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ Template@124:
+ Id: 124
+ Image: t124
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ Template@125:
+ Id: 125
+ Image: t125
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@126:
+ Id: 126
+ Image: t126
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 3: Clear
+ Template@127:
+ Id: 127
+ Image: t127
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@128:
+ Id: 128
+ Image: t128
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ Template@129:
+ Id: 129
+ Image: t129
+ Size: 3,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 4: Clear
+ 5: Clear
+ 8: Clear
+ 7: Clear
+ 6: Clear
+ 3: Clear
+ 2: Clear
+ Template@130:
+ Id: 130
+ Image: t130
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@131:
+ Id: 131
+ Image: t131
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@132:
+ Id: 132
+ Image: t132
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@133:
+ Id: 133
+ Image: t133
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@134:
+ Id: 134
+ Image: t134
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@135:
+ Id: 135
+ Image: t135
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@136:
+ Id: 136
+ Image: t136
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@137:
+ Id: 137
+ Image: t137
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@138:
+ Id: 138
+ Image: t138
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@139:
+ Id: 139
+ Image: t139
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@140:
+ Id: 140
+ Image: t140
+ Size: 4,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 3: Clear
+ 7: Clear
+ 6: Clear
+ 5: Clear
+ 4: Clear
+ Template@141:
+ Id: 141
+ Image: t141
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@142:
+ Id: 142
+ Image: t142
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@143:
+ Id: 143
+ Image: t143
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@144:
+ Id: 144
+ Image: t144
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@145:
+ Id: 145
+ Image: t145
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@146:
+ Id: 146
+ Image: t146
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@147:
+ Id: 147
+ Image: t147
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@148:
+ Id: 148
+ Image: t148
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@149:
+ Id: 149
+ Image: t149
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 4: Clear
+ 5: Clear
+ 3: Clear
+ 1: Clear
+ Template@150:
+ Id: 150
+ Image: t150
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 4: Clear
+ 5: Clear
+ 3: Clear
+ 1: Clear
+ Template@151:
+ Id: 151
+ Image: t151
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@152:
+ Id: 152
+ Image: t152
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@153:
+ Id: 153
+ Image: t153
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@154:
+ Id: 154
+ Image: t154
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@155:
+ Id: 155
+ Image: t155
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@156:
+ Id: 156
+ Image: t156
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@157:
+ Id: 157
+ Image: t157
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@158:
+ Id: 158
+ Image: t158
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@159:
+ Id: 159
+ Image: t159
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@160:
+ Id: 160
+ Image: t160
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@161:
+ Id: 161
+ Image: t161
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@162:
+ Id: 162
+ Image: t162
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@163:
+ Id: 163
+ Image: t163
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@164:
+ Id: 164
+ Image: t164
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@165:
+ Id: 165
+ Image: t165
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@166:
+ Id: 166
+ Image: t166
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@167:
+ Id: 167
+ Image: t167
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@168:
+ Id: 168
+ Image: t168
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@169:
+ Id: 169
+ Image: t169
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@170:
+ Id: 170
+ Image: t170
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@171:
+ Id: 171
+ Image: t171
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@172:
+ Id: 172
+ Image: t172
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@173:
+ Id: 173
+ Image: t173
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@174:
+ Id: 174
+ Image: t174
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@175:
+ Id: 175
+ Image: t175
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@176:
+ Id: 176
+ Image: t176
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@177:
+ Id: 177
+ Image: t177
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@178:
+ Id: 178
+ Image: t178
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@179:
+ Id: 179
+ Image: t179
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@180:
+ Id: 180
+ Image: t180
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@181:
+ Id: 181
+ Image: t181
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@182:
+ Id: 182
+ Image: t182
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@183:
+ Id: 183
+ Image: t183
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@184:
+ Id: 184
+ Image: t184
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@185:
+ Id: 185
+ Image: t185
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@186:
+ Id: 186
+ Image: t186
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@187:
+ Id: 187
+ Image: t187
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@188:
+ Id: 188
+ Image: t188
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@189:
+ Id: 189
+ Image: t189
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@190:
+ Id: 190
+ Image: t190
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@191:
+ Id: 191
+ Image: t191
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@192:
+ Id: 192
+ Image: t192
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@193:
+ Id: 193
+ Image: t193
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@194:
+ Id: 194
+ Image: t194
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@195:
+ Id: 195
+ Image: t195
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@196:
+ Id: 196
+ Image: t196
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@197:
+ Id: 197
+ Image: t197
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@198:
+ Id: 198
+ Image: t198
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@199:
+ Id: 199
+ Image: t199
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@200:
+ Id: 200
+ Image: t200
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@201:
+ Id: 201
+ Image: t201
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@202:
+ Id: 202
+ Image: t202
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@203:
+ Id: 203
+ Image: t203
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@204:
+ Id: 204
+ Image: t204
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@205:
+ Id: 205
+ Image: t205
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@206:
+ Id: 206
+ Image: t206
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@207:
+ Id: 207
+ Image: t207
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@208:
+ Id: 208
+ Image: t208
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@209:
+ Id: 209
+ Image: t209
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@210:
+ Id: 210
+ Image: t210
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@211:
+ Id: 211
+ Image: t211
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@212:
+ Id: 212
+ Image: t212
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@213:
+ Id: 213
+ Image: t213
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@214:
+ Id: 214
+ Image: t214
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@215:
+ Id: 215
+ Image: t215
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@216:
+ Id: 216
+ Image: t216
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@217:
+ Id: 217
+ Image: t217
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@218:
+ Id: 218
+ Image: t218
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@219:
+ Id: 219
+ Image: t219
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@220:
+ Id: 220
+ Image: t220
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@221:
+ Id: 221
+ Image: t221
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@222:
+ Id: 222
+ Image: t222
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@223:
+ Id: 223
+ Image: t223
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@224:
+ Id: 224
+ Image: t224
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@225:
+ Id: 225
+ Image: t225
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@226:
+ Id: 226
+ Image: t226
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@227:
+ Id: 227
+ Image: t227
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@228:
+ Id: 228
+ Image: t228
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@229:
+ Id: 229
+ Image: t229
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@230:
+ Id: 230
+ Image: t230
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@231:
+ Id: 231
+ Image: t231
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@232:
+ Id: 232
+ Image: t232
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@233:
+ Id: 233
+ Image: t233
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@234:
+ Id: 234
+ Image: t234
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@235:
+ Id: 235
+ Image: t235
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@236:
+ Id: 236
+ Image: t236
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@237:
+ Id: 237
+ Image: t237
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@238:
+ Id: 238
+ Image: t238
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@239:
+ Id: 239
+ Image: t239
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@240:
+ Id: 240
+ Image: t240
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@241:
+ Id: 241
+ Image: t241
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@242:
+ Id: 242
+ Image: t242
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@243:
+ Id: 243
+ Image: t243
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@244:
+ Id: 244
+ Image: t244
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ 1: Clear
+ Template@245:
+ Id: 245
+ Image: t245
+ Size: 5,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 6: Clear
+ 7: Clear
+ 8: Clear
+ 9: Clear
+ 4: Clear
+ 3: Clear
+ 2: Clear
+ 5: Clear
+ Template@246:
+ Id: 246
+ Image: t246
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@247:
+ Id: 247
+ Image: t247
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@248:
+ Id: 248
+ Image: t248
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 5: Clear
+ 4: Clear
+ 1: Clear
+ Template@249:
+ Id: 249
+ Image: t249
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@250:
+ Id: 250
+ Image: t250
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@251:
+ Id: 251
+ Image: t251
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@252:
+ Id: 252
+ Image: t252
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@253:
+ Id: 253
+ Image: t253
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ Template@254:
+ Id: 254
+ Image: t254
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@255:
+ Id: 255
+ Image: t255
+ Size: 3,3
+ PickAny: False
+ Tiles:
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 6: Clear
+ 7: Clear
+ 8: Clear
+ 1: Clear
+ 0: Clear
+ 3: Clear
+ Template@256:
+ Id: 256
+ Image: t256
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ 0: Clear
+ Template@257:
+ Id: 257
+ Image: t257
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@258:
+ Id: 258
+ Image: t258
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@259:
+ Id: 259
+ Image: t259
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+
diff --git a/mods/d2k/tilesets/bloxbase.yaml b/mods/d2k/tilesets/bloxbase.yaml
new file mode 100644
index 0000000000..4cb16abdbb
--- /dev/null
+++ b/mods/d2k/tilesets/bloxbase.yaml
@@ -0,0 +1,2369 @@
+General:
+ Name: Bloxbase
+ TileSize: 32
+ Id: BLOXBASE
+ Palette: bloxbase.pal
+ Extensions: .blo,.shp
+
+Terrain:
+ TerrainType@Clear:
+ Type: Clear
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,40,68,40
+ TerrainType@Water:
+ Type: Water
+ AcceptSmudge: False
+ IsWater: True
+ Color: 255,92,116,164
+ TerrainType@Road:
+ Type: Road
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,88,116,116
+ TerrainType@Rock:
+ Type: Rock
+ AcceptSmudge: False
+ IsWater: False
+ Color: 255,68,68,60
+ TerrainType@Tree:
+ Type: Tree
+ AcceptSmudge: False
+ IsWater: False
+ Color: 255,28,32,36
+ TerrainType@River:
+ Type: River
+ AcceptSmudge: False
+ IsWater: False
+ Color: 255,92,140,180
+ TerrainType@Rough:
+ Type: Rough
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,68,20,100
+ TerrainType@Wall:
+ Type: Wall
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,208,192,160
+ TerrainType@Beach:
+ Type: Beach
+ AcceptSmudge: False
+ IsWater: False
+ Color: 255,176,156,120
+ TerrainType@Spice:
+ Type: Spice
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,161,226,28
+ TerrainType@SpiceBlobs:
+ Type: SpiceBlobs
+ AcceptSmudge: True
+ IsWater: False
+ Color: 255,84,252,252
+
+Templates:
+ Template@0:
+ Id: 0
+ Image: t00
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@1:
+ Id: 1
+ Image: t01
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@2:
+ Id: 2
+ Image: t02
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@3:
+ Id: 3
+ Image: t03
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@4:
+ Id: 4
+ Image: t04
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@5:
+ Id: 5
+ Image: t05
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@6:
+ Id: 6
+ Image: t06
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@7:
+ Id: 7
+ Image: t07
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@8:
+ Id: 8
+ Image: t08
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@9:
+ Id: 9
+ Image: t09
+ Size: 5,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 6: Clear
+ 1: Clear
+ 5: Clear
+ 10: Clear
+ 11: Clear
+ 12: Clear
+ 13: Clear
+ 14: Clear
+ 9: Clear
+ 4: Clear
+ 3: Clear
+ 2: Clear
+ 7: Clear
+ 8: Clear
+ Template@10:
+ Id: 10
+ Image: t10
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@11:
+ Id: 11
+ Image: t11
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@12:
+ Id: 12
+ Image: t12
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@13:
+ Id: 13
+ Image: t13
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@14:
+ Id: 14
+ Image: t14
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@15:
+ Id: 15
+ Image: t15
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@16:
+ Id: 16
+ Image: t16
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@17:
+ Id: 17
+ Image: t17
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@18:
+ Id: 18
+ Image: t18
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@19:
+ Id: 19
+ Image: t19
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@20:
+ Id: 20
+ Image: t20
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@21:
+ Id: 21
+ Image: t21
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@22:
+ Id: 22
+ Image: t22
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@23:
+ Id: 23
+ Image: t23
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@24:
+ Id: 24
+ Image: t24
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 5: Clear
+ 4: Clear
+ 1: Clear
+ Template@25:
+ Id: 25
+ Image: t25
+ Size: 3,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 4: Clear
+ 3: Clear
+ 6: Clear
+ 7: Clear
+ 8: Clear
+ 5: Clear
+ 2: Clear
+ Template@26:
+ Id: 26
+ Image: t26
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@27:
+ Id: 27
+ Image: t27
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@28:
+ Id: 28
+ Image: t28
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 4: Clear
+ 5: Clear
+ 2: Clear
+ 3: Clear
+ Template@29:
+ Id: 29
+ Image: t29
+ Size: 3,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 7: Clear
+ 6: Clear
+ 3: Clear
+ 8: Clear
+ Template@30:
+ Id: 30
+ Image: t30
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@31:
+ Id: 31
+ Image: t31
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@32:
+ Id: 32
+ Image: t32
+ Size: 4,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 5: Clear
+ 6: Clear
+ 2: Clear
+ 3: Clear
+ 7: Clear
+ 4: Clear
+ Template@33:
+ Id: 33
+ Image: t33
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@34:
+ Id: 34
+ Image: t34
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 3: Clear
+ 2: Clear
+ 1: Clear
+ Template@35:
+ Id: 35
+ Image: t35
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 3: Clear
+ Template@36:
+ Id: 36
+ Image: t36
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 3: Clear
+ Template@37:
+ Id: 37
+ Image: t37
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 4: Clear
+ 3: Clear
+ 5: Clear
+ Template@38:
+ Id: 38
+ Image: t38
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@39:
+ Id: 39
+ Image: t39
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@40:
+ Id: 40
+ Image: t40
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@41:
+ Id: 41
+ Image: t41
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@42:
+ Id: 42
+ Image: t42
+ Size: 3,3
+ PickAny: False
+ Tiles:
+ 3: Clear
+ 4: Clear
+ 7: Clear
+ 2: Clear
+ 6: Clear
+ Template@43:
+ Id: 43
+ Image: t43
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@44:
+ Id: 44
+ Image: t44
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 2: Clear
+ 3: Clear
+ 0: Clear
+ Template@45:
+ Id: 45
+ Image: t45
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@46:
+ Id: 46
+ Image: t46
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@47:
+ Id: 47
+ Image: t47
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ 1: Clear
+ Template@48:
+ Id: 48
+ Image: t48
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@49:
+ Id: 49
+ Image: t49
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@50:
+ Id: 50
+ Image: t50
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 3: Clear
+ 4: Clear
+ 1: Clear
+ 5: Clear
+ 2: Clear
+ 0: Clear
+ Template@51:
+ Id: 51
+ Image: t51
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 3: Clear
+ 4: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ Template@52:
+ Id: 52
+ Image: t52
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 3: Clear
+ 4: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ Template@53:
+ Id: 53
+ Image: t53
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 3: Clear
+ 0: Clear
+ 1: Clear
+ Template@54:
+ Id: 54
+ Image: t54
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 4: Clear
+ 5: Clear
+ 3: Clear
+ 1: Clear
+ Template@55:
+ Id: 55
+ Image: t55
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@56:
+ Id: 56
+ Image: t56
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@57:
+ Id: 57
+ Image: t57
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@58:
+ Id: 58
+ Image: t58
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@59:
+ Id: 59
+ Image: t59
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ Template@60:
+ Id: 60
+ Image: t60
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ Template@61:
+ Id: 61
+ Image: t61
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 5: Clear
+ 4: Clear
+ 1: Clear
+ Template@62:
+ Id: 62
+ Image: t62
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 5: Clear
+ 4: Clear
+ 1: Clear
+ Template@63:
+ Id: 63
+ Image: t63
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@64:
+ Id: 64
+ Image: t64
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@65:
+ Id: 65
+ Image: t65
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 3: Clear
+ Template@66:
+ Id: 66
+ Image: t66
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ Template@67:
+ Id: 67
+ Image: t67
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@68:
+ Id: 68
+ Image: t68
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 5: Clear
+ 4: Clear
+ 2: Clear
+ Template@69:
+ Id: 69
+ Image: t69
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@70:
+ Id: 70
+ Image: t70
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@71:
+ Id: 71
+ Image: t71
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@72:
+ Id: 72
+ Image: t72
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@73:
+ Id: 73
+ Image: t73
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@74:
+ Id: 74
+ Image: t74
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@75:
+ Id: 75
+ Image: t75
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@76:
+ Id: 76
+ Image: t76
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@77:
+ Id: 77
+ Image: t77
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@78:
+ Id: 78
+ Image: t78
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@79:
+ Id: 79
+ Image: t79
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@80:
+ Id: 80
+ Image: t80
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@81:
+ Id: 81
+ Image: t81
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@82:
+ Id: 82
+ Image: t82
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@83:
+ Id: 83
+ Image: t83
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@84:
+ Id: 84
+ Image: t84
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@85:
+ Id: 85
+ Image: t85
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@86:
+ Id: 86
+ Image: t86
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@87:
+ Id: 87
+ Image: t87
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@88:
+ Id: 88
+ Image: t88
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@89:
+ Id: 89
+ Image: t89
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@90:
+ Id: 90
+ Image: t90
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@91:
+ Id: 91
+ Image: t91
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@92:
+ Id: 92
+ Image: t92
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@93:
+ Id: 93
+ Image: t93
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@94:
+ Id: 94
+ Image: t94
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@95:
+ Id: 95
+ Image: t95
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@96:
+ Id: 96
+ Image: t96
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@97:
+ Id: 97
+ Image: t97
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@98:
+ Id: 98
+ Image: t98
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@99:
+ Id: 99
+ Image: t99
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 1: Clear
+ 3: Clear
+ Template@100:
+ Id: 100
+ Image: t100
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@101:
+ Id: 101
+ Image: t101
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 4: Clear
+ 5: Clear
+ 3: Clear
+ 1: Clear
+ Template@102:
+ Id: 102
+ Image: t102
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@103:
+ Id: 103
+ Image: t103
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@104:
+ Id: 104
+ Image: t104
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@105:
+ Id: 105
+ Image: t105
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@106:
+ Id: 106
+ Image: t106
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@107:
+ Id: 107
+ Image: t107
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@108:
+ Id: 108
+ Image: t108
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@109:
+ Id: 109
+ Image: t109
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 4: Clear
+ 5: Clear
+ 3: Clear
+ 1: Clear
+ 0: Clear
+ 2: Clear
+ Template@110:
+ Id: 110
+ Image: t110
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@111:
+ Id: 111
+ Image: t111
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 3: Clear
+ 1: Clear
+ 2: Clear
+ Template@112:
+ Id: 112
+ Image: t112
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 4: Clear
+ 3: Clear
+ 5: Clear
+ 2: Clear
+ Template@113:
+ Id: 113
+ Image: t113
+ Size: 3,1
+ PickAny: False
+ Tiles:
+ 2: Clear
+ 1: Clear
+ 0: Clear
+ Template@114:
+ Id: 114
+ Image: t114
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@115:
+ Id: 115
+ Image: t115
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@116:
+ Id: 116
+ Image: t116
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@117:
+ Id: 117
+ Image: t117
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@118:
+ Id: 118
+ Image: t118
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@119:
+ Id: 119
+ Image: t119
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@120:
+ Id: 120
+ Image: t120
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@121:
+ Id: 121
+ Image: t121
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@122:
+ Id: 122
+ Image: t122
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@123:
+ Id: 123
+ Image: t123
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ Template@124:
+ Id: 124
+ Image: t124
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ Template@125:
+ Id: 125
+ Image: t125
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@126:
+ Id: 126
+ Image: t126
+ Size: 3,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 3: Clear
+ Template@127:
+ Id: 127
+ Image: t127
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@128:
+ Id: 128
+ Image: t128
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ Template@129:
+ Id: 129
+ Image: t129
+ Size: 3,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 4: Clear
+ 5: Clear
+ 8: Clear
+ 7: Clear
+ 6: Clear
+ 3: Clear
+ 2: Clear
+ Template@130:
+ Id: 130
+ Image: t130
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@131:
+ Id: 131
+ Image: t131
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@132:
+ Id: 132
+ Image: t132
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@133:
+ Id: 133
+ Image: t133
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@134:
+ Id: 134
+ Image: t134
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@135:
+ Id: 135
+ Image: t135
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@136:
+ Id: 136
+ Image: t136
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@137:
+ Id: 137
+ Image: t137
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@138:
+ Id: 138
+ Image: t138
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@139:
+ Id: 139
+ Image: t139
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@140:
+ Id: 140
+ Image: t140
+ Size: 4,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 2: Clear
+ 3: Clear
+ 7: Clear
+ 6: Clear
+ 5: Clear
+ 4: Clear
+ Template@141:
+ Id: 141
+ Image: t141
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@142:
+ Id: 142
+ Image: t142
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@143:
+ Id: 143
+ Image: t143
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@144:
+ Id: 144
+ Image: t144
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@145:
+ Id: 145
+ Image: t145
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@146:
+ Id: 146
+ Image: t146
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@147:
+ Id: 147
+ Image: t147
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@148:
+ Id: 148
+ Image: t148
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@149:
+ Id: 149
+ Image: t149
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 4: Clear
+ 5: Clear
+ 3: Clear
+ 1: Clear
+ Template@150:
+ Id: 150
+ Image: t150
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 4: Clear
+ 5: Clear
+ 3: Clear
+ 1: Clear
+ Template@151:
+ Id: 151
+ Image: t151
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@152:
+ Id: 152
+ Image: t152
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@153:
+ Id: 153
+ Image: t153
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@154:
+ Id: 154
+ Image: t154
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@155:
+ Id: 155
+ Image: t155
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@156:
+ Id: 156
+ Image: t156
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@157:
+ Id: 157
+ Image: t157
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@158:
+ Id: 158
+ Image: t158
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@159:
+ Id: 159
+ Image: t159
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@160:
+ Id: 160
+ Image: t160
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@161:
+ Id: 161
+ Image: t161
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@162:
+ Id: 162
+ Image: t162
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@163:
+ Id: 163
+ Image: t163
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@164:
+ Id: 164
+ Image: t164
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@165:
+ Id: 165
+ Image: t165
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@166:
+ Id: 166
+ Image: t166
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@167:
+ Id: 167
+ Image: t167
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@168:
+ Id: 168
+ Image: t168
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@169:
+ Id: 169
+ Image: t169
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@170:
+ Id: 170
+ Image: t170
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@171:
+ Id: 171
+ Image: t171
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@172:
+ Id: 172
+ Image: t172
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@173:
+ Id: 173
+ Image: t173
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@174:
+ Id: 174
+ Image: t174
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@175:
+ Id: 175
+ Image: t175
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@176:
+ Id: 176
+ Image: t176
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@177:
+ Id: 177
+ Image: t177
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@178:
+ Id: 178
+ Image: t178
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@179:
+ Id: 179
+ Image: t179
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@180:
+ Id: 180
+ Image: t180
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@181:
+ Id: 181
+ Image: t181
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@182:
+ Id: 182
+ Image: t182
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@183:
+ Id: 183
+ Image: t183
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@184:
+ Id: 184
+ Image: t184
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@185:
+ Id: 185
+ Image: t185
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@186:
+ Id: 186
+ Image: t186
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@187:
+ Id: 187
+ Image: t187
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@188:
+ Id: 188
+ Image: t188
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@189:
+ Id: 189
+ Image: t189
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@190:
+ Id: 190
+ Image: t190
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@191:
+ Id: 191
+ Image: t191
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@192:
+ Id: 192
+ Image: t192
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@193:
+ Id: 193
+ Image: t193
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@194:
+ Id: 194
+ Image: t194
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@195:
+ Id: 195
+ Image: t195
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@196:
+ Id: 196
+ Image: t196
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@197:
+ Id: 197
+ Image: t197
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@198:
+ Id: 198
+ Image: t198
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@199:
+ Id: 199
+ Image: t199
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@200:
+ Id: 200
+ Image: t200
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@201:
+ Id: 201
+ Image: t201
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@202:
+ Id: 202
+ Image: t202
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@203:
+ Id: 203
+ Image: t203
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@204:
+ Id: 204
+ Image: t204
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@205:
+ Id: 205
+ Image: t205
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@206:
+ Id: 206
+ Image: t206
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@207:
+ Id: 207
+ Image: t207
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@208:
+ Id: 208
+ Image: t208
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@209:
+ Id: 209
+ Image: t209
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@210:
+ Id: 210
+ Image: t210
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@211:
+ Id: 211
+ Image: t211
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@212:
+ Id: 212
+ Image: t212
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@213:
+ Id: 213
+ Image: t213
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@214:
+ Id: 214
+ Image: t214
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@215:
+ Id: 215
+ Image: t215
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@216:
+ Id: 216
+ Image: t216
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@217:
+ Id: 217
+ Image: t217
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@218:
+ Id: 218
+ Image: t218
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@219:
+ Id: 219
+ Image: t219
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@220:
+ Id: 220
+ Image: t220
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@221:
+ Id: 221
+ Image: t221
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@222:
+ Id: 222
+ Image: t222
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@223:
+ Id: 223
+ Image: t223
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@224:
+ Id: 224
+ Image: t224
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@225:
+ Id: 225
+ Image: t225
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@226:
+ Id: 226
+ Image: t226
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@227:
+ Id: 227
+ Image: t227
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@228:
+ Id: 228
+ Image: t228
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@229:
+ Id: 229
+ Image: t229
+ Size: 2,1
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 0: Clear
+ Template@230:
+ Id: 230
+ Image: t230
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@231:
+ Id: 231
+ Image: t231
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@232:
+ Id: 232
+ Image: t232
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@233:
+ Id: 233
+ Image: t233
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@234:
+ Id: 234
+ Image: t234
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@235:
+ Id: 235
+ Image: t235
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@236:
+ Id: 236
+ Image: t236
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@237:
+ Id: 237
+ Image: t237
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@238:
+ Id: 238
+ Image: t238
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@239:
+ Id: 239
+ Image: t239
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@240:
+ Id: 240
+ Image: t240
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ Template@241:
+ Id: 241
+ Image: t241
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@242:
+ Id: 242
+ Image: t242
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@243:
+ Id: 243
+ Image: t243
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ Template@244:
+ Id: 244
+ Image: t244
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ 1: Clear
+ Template@245:
+ Id: 245
+ Image: t245
+ Size: 5,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ 6: Clear
+ 7: Clear
+ 8: Clear
+ 9: Clear
+ 4: Clear
+ 3: Clear
+ 2: Clear
+ 5: Clear
+ Template@246:
+ Id: 246
+ Image: t246
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@247:
+ Id: 247
+ Image: t247
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@248:
+ Id: 248
+ Image: t248
+ Size: 2,3
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 2: Clear
+ 3: Clear
+ 5: Clear
+ 4: Clear
+ 1: Clear
+ Template@249:
+ Id: 249
+ Image: t249
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@250:
+ Id: 250
+ Image: t250
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@251:
+ Id: 251
+ Image: t251
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@252:
+ Id: 252
+ Image: t252
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@253:
+ Id: 253
+ Image: t253
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 1: Clear
+ 3: Clear
+ 2: Clear
+ 0: Clear
+ Template@254:
+ Id: 254
+ Image: t254
+ Size: 1,2
+ PickAny: False
+ Tiles:
+ 0: Clear
+ 1: Clear
+ Template@255:
+ Id: 255
+ Image: t255
+ Size: 3,3
+ PickAny: False
+ Tiles:
+ 2: Clear
+ 5: Clear
+ 4: Clear
+ 6: Clear
+ 7: Clear
+ 8: Clear
+ 1: Clear
+ 0: Clear
+ 3: Clear
+ Template@256:
+ Id: 256
+ Image: t256
+ Size: 2,2
+ PickAny: False
+ Tiles:
+ 2: Clear
+ 3: Clear
+ 1: Clear
+ 0: Clear
+ Template@257:
+ Id: 257
+ Image: t257
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@258:
+ Id: 258
+ Image: t258
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+ Template@259:
+ Id: 259
+ Image: t259
+ Size: 1,1
+ PickAny: False
+ Tiles:
+ 0: Clear
+
diff --git a/mods/d2k/tilesets/bloxbase/bloxbase.pal b/mods/d2k/tilesets/bloxbase/bloxbase.pal
new file mode 100644
index 0000000000..1099356108
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/bloxbase.pal differ
diff --git a/mods/d2k/tilesets/bloxbase/t00.blo b/mods/d2k/tilesets/bloxbase/t00.blo
new file mode 100644
index 0000000000..0fdd932d9f
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t00.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t01.blo b/mods/d2k/tilesets/bloxbase/t01.blo
new file mode 100644
index 0000000000..7b59d40138
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t01.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t02.blo b/mods/d2k/tilesets/bloxbase/t02.blo
new file mode 100644
index 0000000000..ae8effa47a
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t02.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t03.blo b/mods/d2k/tilesets/bloxbase/t03.blo
new file mode 100644
index 0000000000..edbe3a1c7c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t03.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t04.blo b/mods/d2k/tilesets/bloxbase/t04.blo
new file mode 100644
index 0000000000..1de23589f8
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t04.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t05.blo b/mods/d2k/tilesets/bloxbase/t05.blo
new file mode 100644
index 0000000000..7e817c9091
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t05.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t06.blo b/mods/d2k/tilesets/bloxbase/t06.blo
new file mode 100644
index 0000000000..6cc39bc897
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t06.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t07.blo b/mods/d2k/tilesets/bloxbase/t07.blo
new file mode 100644
index 0000000000..a379d86d55
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t07.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t08.blo b/mods/d2k/tilesets/bloxbase/t08.blo
new file mode 100644
index 0000000000..78277f4298
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t08.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t09.blo b/mods/d2k/tilesets/bloxbase/t09.blo
new file mode 100644
index 0000000000..d14a7517cc
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t09.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t10.blo b/mods/d2k/tilesets/bloxbase/t10.blo
new file mode 100644
index 0000000000..4168f7131e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t10.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t100.blo b/mods/d2k/tilesets/bloxbase/t100.blo
new file mode 100644
index 0000000000..85cc6de258
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t100.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t101.blo b/mods/d2k/tilesets/bloxbase/t101.blo
new file mode 100644
index 0000000000..0d948184b5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t101.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t102.blo b/mods/d2k/tilesets/bloxbase/t102.blo
new file mode 100644
index 0000000000..fe04e16a8b
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t102.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t103.blo b/mods/d2k/tilesets/bloxbase/t103.blo
new file mode 100644
index 0000000000..3124f8717b
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t103.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t104.blo b/mods/d2k/tilesets/bloxbase/t104.blo
new file mode 100644
index 0000000000..1044e8483c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t104.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t105.blo b/mods/d2k/tilesets/bloxbase/t105.blo
new file mode 100644
index 0000000000..71303b9aa3
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t105.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t106.blo b/mods/d2k/tilesets/bloxbase/t106.blo
new file mode 100644
index 0000000000..73f4df080d
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t106.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t107.blo b/mods/d2k/tilesets/bloxbase/t107.blo
new file mode 100644
index 0000000000..d788f322a2
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t107.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t108.blo b/mods/d2k/tilesets/bloxbase/t108.blo
new file mode 100644
index 0000000000..8bb9b48c05
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t108.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t109.blo b/mods/d2k/tilesets/bloxbase/t109.blo
new file mode 100644
index 0000000000..f958419f31
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t109.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t11.blo b/mods/d2k/tilesets/bloxbase/t11.blo
new file mode 100644
index 0000000000..43845b2c0d
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t11.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t110.blo b/mods/d2k/tilesets/bloxbase/t110.blo
new file mode 100644
index 0000000000..74b8b33a3c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t110.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t111.blo b/mods/d2k/tilesets/bloxbase/t111.blo
new file mode 100644
index 0000000000..8962fedbb5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t111.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t112.blo b/mods/d2k/tilesets/bloxbase/t112.blo
new file mode 100644
index 0000000000..4104654ffb
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t112.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t113.blo b/mods/d2k/tilesets/bloxbase/t113.blo
new file mode 100644
index 0000000000..9efc2692de
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t113.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t114.blo b/mods/d2k/tilesets/bloxbase/t114.blo
new file mode 100644
index 0000000000..2db269f7ab
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t114.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t115.blo b/mods/d2k/tilesets/bloxbase/t115.blo
new file mode 100644
index 0000000000..389b713ada
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t115.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t116.blo b/mods/d2k/tilesets/bloxbase/t116.blo
new file mode 100644
index 0000000000..eb0338eb9c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t116.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t117.blo b/mods/d2k/tilesets/bloxbase/t117.blo
new file mode 100644
index 0000000000..df8fa35c9d
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t117.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t118.blo b/mods/d2k/tilesets/bloxbase/t118.blo
new file mode 100644
index 0000000000..ef8342bf1a
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t118.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t119.blo b/mods/d2k/tilesets/bloxbase/t119.blo
new file mode 100644
index 0000000000..ceb5d83e08
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t119.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t12.blo b/mods/d2k/tilesets/bloxbase/t12.blo
new file mode 100644
index 0000000000..bb0caa5bde
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t12.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t120.blo b/mods/d2k/tilesets/bloxbase/t120.blo
new file mode 100644
index 0000000000..c1a0eb4c50
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t120.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t121.blo b/mods/d2k/tilesets/bloxbase/t121.blo
new file mode 100644
index 0000000000..4cecf051ff
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t121.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t122.blo b/mods/d2k/tilesets/bloxbase/t122.blo
new file mode 100644
index 0000000000..1113e5052d
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t122.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t123.blo b/mods/d2k/tilesets/bloxbase/t123.blo
new file mode 100644
index 0000000000..b2162c53b5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t123.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t124.blo b/mods/d2k/tilesets/bloxbase/t124.blo
new file mode 100644
index 0000000000..3f6751158a
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t124.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t125.blo b/mods/d2k/tilesets/bloxbase/t125.blo
new file mode 100644
index 0000000000..1e53514031
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t125.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t126.blo b/mods/d2k/tilesets/bloxbase/t126.blo
new file mode 100644
index 0000000000..8e2c49f59f
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t126.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t127.blo b/mods/d2k/tilesets/bloxbase/t127.blo
new file mode 100644
index 0000000000..00fd039037
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t127.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t128.blo b/mods/d2k/tilesets/bloxbase/t128.blo
new file mode 100644
index 0000000000..46fe85bf1d
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t128.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t129.blo b/mods/d2k/tilesets/bloxbase/t129.blo
new file mode 100644
index 0000000000..2aa0472e16
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t129.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t13.blo b/mods/d2k/tilesets/bloxbase/t13.blo
new file mode 100644
index 0000000000..f291dca04c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t13.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t130.blo b/mods/d2k/tilesets/bloxbase/t130.blo
new file mode 100644
index 0000000000..22d65830dd
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t130.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t131.blo b/mods/d2k/tilesets/bloxbase/t131.blo
new file mode 100644
index 0000000000..fee49508f1
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t131.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t132.blo b/mods/d2k/tilesets/bloxbase/t132.blo
new file mode 100644
index 0000000000..6da01e2aee
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t132.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t133.blo b/mods/d2k/tilesets/bloxbase/t133.blo
new file mode 100644
index 0000000000..ab51eb1d25
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t133.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t134.blo b/mods/d2k/tilesets/bloxbase/t134.blo
new file mode 100644
index 0000000000..3b13656fb2
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t134.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t135.blo b/mods/d2k/tilesets/bloxbase/t135.blo
new file mode 100644
index 0000000000..d4cb62b925
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t135.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t136.blo b/mods/d2k/tilesets/bloxbase/t136.blo
new file mode 100644
index 0000000000..c1a00e6ca6
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t136.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t137.blo b/mods/d2k/tilesets/bloxbase/t137.blo
new file mode 100644
index 0000000000..f0615d2a14
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t137.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t138.blo b/mods/d2k/tilesets/bloxbase/t138.blo
new file mode 100644
index 0000000000..074f1ff086
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t138.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t139.blo b/mods/d2k/tilesets/bloxbase/t139.blo
new file mode 100644
index 0000000000..24d14c7e04
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t139.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t14.blo b/mods/d2k/tilesets/bloxbase/t14.blo
new file mode 100644
index 0000000000..40e544770c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t14.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t140.blo b/mods/d2k/tilesets/bloxbase/t140.blo
new file mode 100644
index 0000000000..95c704fe72
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t140.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t141.blo b/mods/d2k/tilesets/bloxbase/t141.blo
new file mode 100644
index 0000000000..ff210dbcc0
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t141.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t142.blo b/mods/d2k/tilesets/bloxbase/t142.blo
new file mode 100644
index 0000000000..525f1c9d80
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t142.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t143.blo b/mods/d2k/tilesets/bloxbase/t143.blo
new file mode 100644
index 0000000000..d61a89bf29
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t143.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t144.blo b/mods/d2k/tilesets/bloxbase/t144.blo
new file mode 100644
index 0000000000..f4e7833627
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t144.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t145.blo b/mods/d2k/tilesets/bloxbase/t145.blo
new file mode 100644
index 0000000000..945ff4165f
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t145.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t146.blo b/mods/d2k/tilesets/bloxbase/t146.blo
new file mode 100644
index 0000000000..a1df070547
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t146.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t147.blo b/mods/d2k/tilesets/bloxbase/t147.blo
new file mode 100644
index 0000000000..39bf3da418
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t147.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t148.blo b/mods/d2k/tilesets/bloxbase/t148.blo
new file mode 100644
index 0000000000..7302d5df5f
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t148.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t149.blo b/mods/d2k/tilesets/bloxbase/t149.blo
new file mode 100644
index 0000000000..1610fcf24c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t149.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t15.blo b/mods/d2k/tilesets/bloxbase/t15.blo
new file mode 100644
index 0000000000..8e667761f3
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t15.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t150.blo b/mods/d2k/tilesets/bloxbase/t150.blo
new file mode 100644
index 0000000000..6d989749ee
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t150.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t151.blo b/mods/d2k/tilesets/bloxbase/t151.blo
new file mode 100644
index 0000000000..6d34ecf1fa
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t151.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t152.blo b/mods/d2k/tilesets/bloxbase/t152.blo
new file mode 100644
index 0000000000..3b319b99e7
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t152.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t153.blo b/mods/d2k/tilesets/bloxbase/t153.blo
new file mode 100644
index 0000000000..84b5b9812e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t153.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t154.blo b/mods/d2k/tilesets/bloxbase/t154.blo
new file mode 100644
index 0000000000..1447c07a2c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t154.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t155.blo b/mods/d2k/tilesets/bloxbase/t155.blo
new file mode 100644
index 0000000000..6cd16fec57
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t155.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t156.blo b/mods/d2k/tilesets/bloxbase/t156.blo
new file mode 100644
index 0000000000..78637d4e60
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t156.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t157.blo b/mods/d2k/tilesets/bloxbase/t157.blo
new file mode 100644
index 0000000000..43f5cb3a43
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t157.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t158.blo b/mods/d2k/tilesets/bloxbase/t158.blo
new file mode 100644
index 0000000000..27e57a7302
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t158.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t159.blo b/mods/d2k/tilesets/bloxbase/t159.blo
new file mode 100644
index 0000000000..748abc2471
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t159.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t16.blo b/mods/d2k/tilesets/bloxbase/t16.blo
new file mode 100644
index 0000000000..455ed8d3a5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t16.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t160.blo b/mods/d2k/tilesets/bloxbase/t160.blo
new file mode 100644
index 0000000000..c603b65498
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t160.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t161.blo b/mods/d2k/tilesets/bloxbase/t161.blo
new file mode 100644
index 0000000000..ad94e5709d
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t161.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t162.blo b/mods/d2k/tilesets/bloxbase/t162.blo
new file mode 100644
index 0000000000..4a3990d8ed
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t162.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t163.blo b/mods/d2k/tilesets/bloxbase/t163.blo
new file mode 100644
index 0000000000..4f59da22bd
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t163.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t164.blo b/mods/d2k/tilesets/bloxbase/t164.blo
new file mode 100644
index 0000000000..363f6b0f8e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t164.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t165.blo b/mods/d2k/tilesets/bloxbase/t165.blo
new file mode 100644
index 0000000000..a190f7cace
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t165.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t166.blo b/mods/d2k/tilesets/bloxbase/t166.blo
new file mode 100644
index 0000000000..8367314f5f
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t166.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t167.blo b/mods/d2k/tilesets/bloxbase/t167.blo
new file mode 100644
index 0000000000..6c8123eb00
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t167.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t168.blo b/mods/d2k/tilesets/bloxbase/t168.blo
new file mode 100644
index 0000000000..fb8a625cdc
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t168.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t169.blo b/mods/d2k/tilesets/bloxbase/t169.blo
new file mode 100644
index 0000000000..1f205cef03
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t169.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t17.blo b/mods/d2k/tilesets/bloxbase/t17.blo
new file mode 100644
index 0000000000..9d57c7a23f
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t17.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t170.blo b/mods/d2k/tilesets/bloxbase/t170.blo
new file mode 100644
index 0000000000..77612d1c33
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t170.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t171.blo b/mods/d2k/tilesets/bloxbase/t171.blo
new file mode 100644
index 0000000000..04005acfd1
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t171.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t172.blo b/mods/d2k/tilesets/bloxbase/t172.blo
new file mode 100644
index 0000000000..7041d45bf1
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t172.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t173.blo b/mods/d2k/tilesets/bloxbase/t173.blo
new file mode 100644
index 0000000000..4c4f529483
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t173.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t174.blo b/mods/d2k/tilesets/bloxbase/t174.blo
new file mode 100644
index 0000000000..4e1a7a8683
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t174.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t175.blo b/mods/d2k/tilesets/bloxbase/t175.blo
new file mode 100644
index 0000000000..276a966b51
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t175.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t176.blo b/mods/d2k/tilesets/bloxbase/t176.blo
new file mode 100644
index 0000000000..76142ee731
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t176.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t177.blo b/mods/d2k/tilesets/bloxbase/t177.blo
new file mode 100644
index 0000000000..5822865a4e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t177.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t178.blo b/mods/d2k/tilesets/bloxbase/t178.blo
new file mode 100644
index 0000000000..72e4a53cbc
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t178.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t179.blo b/mods/d2k/tilesets/bloxbase/t179.blo
new file mode 100644
index 0000000000..07ed8b002e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t179.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t18.blo b/mods/d2k/tilesets/bloxbase/t18.blo
new file mode 100644
index 0000000000..3bc73ec080
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t18.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t180.blo b/mods/d2k/tilesets/bloxbase/t180.blo
new file mode 100644
index 0000000000..ff52a1420d
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t180.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t181.blo b/mods/d2k/tilesets/bloxbase/t181.blo
new file mode 100644
index 0000000000..134ef5f5be
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t181.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t182.blo b/mods/d2k/tilesets/bloxbase/t182.blo
new file mode 100644
index 0000000000..d5a9e69ce5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t182.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t183.blo b/mods/d2k/tilesets/bloxbase/t183.blo
new file mode 100644
index 0000000000..69369df722
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t183.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t184.blo b/mods/d2k/tilesets/bloxbase/t184.blo
new file mode 100644
index 0000000000..3d73e857e5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t184.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t185.blo b/mods/d2k/tilesets/bloxbase/t185.blo
new file mode 100644
index 0000000000..b653f2fe4e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t185.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t186.blo b/mods/d2k/tilesets/bloxbase/t186.blo
new file mode 100644
index 0000000000..a5989f6377
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t186.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t187.blo b/mods/d2k/tilesets/bloxbase/t187.blo
new file mode 100644
index 0000000000..bfa52b619d
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t187.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t188.blo b/mods/d2k/tilesets/bloxbase/t188.blo
new file mode 100644
index 0000000000..4fdba383f4
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t188.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t189.blo b/mods/d2k/tilesets/bloxbase/t189.blo
new file mode 100644
index 0000000000..aabcbadb61
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t189.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t19.blo b/mods/d2k/tilesets/bloxbase/t19.blo
new file mode 100644
index 0000000000..328e7803df
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t19.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t190.blo b/mods/d2k/tilesets/bloxbase/t190.blo
new file mode 100644
index 0000000000..d5f3533279
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t190.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t191.blo b/mods/d2k/tilesets/bloxbase/t191.blo
new file mode 100644
index 0000000000..52992ab067
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t191.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t192.blo b/mods/d2k/tilesets/bloxbase/t192.blo
new file mode 100644
index 0000000000..7425d4f37a
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t192.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t193.blo b/mods/d2k/tilesets/bloxbase/t193.blo
new file mode 100644
index 0000000000..21d0c01762
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t193.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t194.blo b/mods/d2k/tilesets/bloxbase/t194.blo
new file mode 100644
index 0000000000..d28292eed5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t194.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t195.blo b/mods/d2k/tilesets/bloxbase/t195.blo
new file mode 100644
index 0000000000..49889e08e5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t195.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t196.blo b/mods/d2k/tilesets/bloxbase/t196.blo
new file mode 100644
index 0000000000..2e5f456d97
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t196.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t197.blo b/mods/d2k/tilesets/bloxbase/t197.blo
new file mode 100644
index 0000000000..7ede332194
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t197.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t198.blo b/mods/d2k/tilesets/bloxbase/t198.blo
new file mode 100644
index 0000000000..4dffd4523b
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t198.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t199.blo b/mods/d2k/tilesets/bloxbase/t199.blo
new file mode 100644
index 0000000000..eebec4254a
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t199.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t20.blo b/mods/d2k/tilesets/bloxbase/t20.blo
new file mode 100644
index 0000000000..9576af97a2
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t20.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t200.blo b/mods/d2k/tilesets/bloxbase/t200.blo
new file mode 100644
index 0000000000..7009e3c190
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t200.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t201.blo b/mods/d2k/tilesets/bloxbase/t201.blo
new file mode 100644
index 0000000000..084c9eef82
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t201.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t202.blo b/mods/d2k/tilesets/bloxbase/t202.blo
new file mode 100644
index 0000000000..48bc431a34
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t202.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t203.blo b/mods/d2k/tilesets/bloxbase/t203.blo
new file mode 100644
index 0000000000..84c8e3a361
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t203.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t204.blo b/mods/d2k/tilesets/bloxbase/t204.blo
new file mode 100644
index 0000000000..46ced754e1
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t204.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t205.blo b/mods/d2k/tilesets/bloxbase/t205.blo
new file mode 100644
index 0000000000..5fb8d36a12
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t205.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t206.blo b/mods/d2k/tilesets/bloxbase/t206.blo
new file mode 100644
index 0000000000..3f49237ec8
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t206.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t207.blo b/mods/d2k/tilesets/bloxbase/t207.blo
new file mode 100644
index 0000000000..d8aea87387
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t207.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t208.blo b/mods/d2k/tilesets/bloxbase/t208.blo
new file mode 100644
index 0000000000..d10c8472fb
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t208.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t209.blo b/mods/d2k/tilesets/bloxbase/t209.blo
new file mode 100644
index 0000000000..85a8152db5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t209.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t21.blo b/mods/d2k/tilesets/bloxbase/t21.blo
new file mode 100644
index 0000000000..2f8c50fa9b
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t21.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t210.blo b/mods/d2k/tilesets/bloxbase/t210.blo
new file mode 100644
index 0000000000..3f97716851
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t210.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t211.blo b/mods/d2k/tilesets/bloxbase/t211.blo
new file mode 100644
index 0000000000..aad8e0319c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t211.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t212.blo b/mods/d2k/tilesets/bloxbase/t212.blo
new file mode 100644
index 0000000000..e5f9d6b291
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t212.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t213.blo b/mods/d2k/tilesets/bloxbase/t213.blo
new file mode 100644
index 0000000000..d139ec9854
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t213.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t214.blo b/mods/d2k/tilesets/bloxbase/t214.blo
new file mode 100644
index 0000000000..ebb26e9125
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t214.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t215.blo b/mods/d2k/tilesets/bloxbase/t215.blo
new file mode 100644
index 0000000000..f922c3a806
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t215.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t216.blo b/mods/d2k/tilesets/bloxbase/t216.blo
new file mode 100644
index 0000000000..fbafd07be9
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t216.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t217.blo b/mods/d2k/tilesets/bloxbase/t217.blo
new file mode 100644
index 0000000000..d8220a1833
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t217.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t218.blo b/mods/d2k/tilesets/bloxbase/t218.blo
new file mode 100644
index 0000000000..743a94fea7
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t218.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t219.blo b/mods/d2k/tilesets/bloxbase/t219.blo
new file mode 100644
index 0000000000..3e88dc825b
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t219.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t22.blo b/mods/d2k/tilesets/bloxbase/t22.blo
new file mode 100644
index 0000000000..540e1bc362
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t22.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t220.blo b/mods/d2k/tilesets/bloxbase/t220.blo
new file mode 100644
index 0000000000..81fc17bc1e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t220.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t221.blo b/mods/d2k/tilesets/bloxbase/t221.blo
new file mode 100644
index 0000000000..0b5b40d6ca
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t221.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t222.blo b/mods/d2k/tilesets/bloxbase/t222.blo
new file mode 100644
index 0000000000..d41661356a
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t222.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t223.blo b/mods/d2k/tilesets/bloxbase/t223.blo
new file mode 100644
index 0000000000..8b81e392cd
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t223.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t224.blo b/mods/d2k/tilesets/bloxbase/t224.blo
new file mode 100644
index 0000000000..05a09f116f
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t224.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t225.blo b/mods/d2k/tilesets/bloxbase/t225.blo
new file mode 100644
index 0000000000..4a8cb94cc7
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t225.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t226.blo b/mods/d2k/tilesets/bloxbase/t226.blo
new file mode 100644
index 0000000000..fe787adbf6
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t226.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t227.blo b/mods/d2k/tilesets/bloxbase/t227.blo
new file mode 100644
index 0000000000..d3ab4846c0
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t227.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t228.blo b/mods/d2k/tilesets/bloxbase/t228.blo
new file mode 100644
index 0000000000..0d1d656220
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t228.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t229.blo b/mods/d2k/tilesets/bloxbase/t229.blo
new file mode 100644
index 0000000000..d30ee2228d
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t229.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t23.blo b/mods/d2k/tilesets/bloxbase/t23.blo
new file mode 100644
index 0000000000..fdb7b05dc9
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t23.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t230.blo b/mods/d2k/tilesets/bloxbase/t230.blo
new file mode 100644
index 0000000000..9f6ebb98b0
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t230.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t231.blo b/mods/d2k/tilesets/bloxbase/t231.blo
new file mode 100644
index 0000000000..c57b043233
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t231.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t232.blo b/mods/d2k/tilesets/bloxbase/t232.blo
new file mode 100644
index 0000000000..21b8f2dff2
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t232.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t233.blo b/mods/d2k/tilesets/bloxbase/t233.blo
new file mode 100644
index 0000000000..85cc1a5c6b
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t233.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t234.blo b/mods/d2k/tilesets/bloxbase/t234.blo
new file mode 100644
index 0000000000..a3dd718912
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t234.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t235.blo b/mods/d2k/tilesets/bloxbase/t235.blo
new file mode 100644
index 0000000000..3927beb96e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t235.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t236.blo b/mods/d2k/tilesets/bloxbase/t236.blo
new file mode 100644
index 0000000000..cd21b02dcf
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t236.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t237.blo b/mods/d2k/tilesets/bloxbase/t237.blo
new file mode 100644
index 0000000000..1ee06f7a94
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t237.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t238.blo b/mods/d2k/tilesets/bloxbase/t238.blo
new file mode 100644
index 0000000000..89dd626566
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t238.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t239.blo b/mods/d2k/tilesets/bloxbase/t239.blo
new file mode 100644
index 0000000000..9a57fd034c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t239.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t24.blo b/mods/d2k/tilesets/bloxbase/t24.blo
new file mode 100644
index 0000000000..235309f949
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t24.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t240.blo b/mods/d2k/tilesets/bloxbase/t240.blo
new file mode 100644
index 0000000000..d18616023f
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t240.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t241.blo b/mods/d2k/tilesets/bloxbase/t241.blo
new file mode 100644
index 0000000000..79518b0862
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t241.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t242.blo b/mods/d2k/tilesets/bloxbase/t242.blo
new file mode 100644
index 0000000000..ead9c376d3
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t242.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t243.blo b/mods/d2k/tilesets/bloxbase/t243.blo
new file mode 100644
index 0000000000..9818548b4c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t243.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t244.blo b/mods/d2k/tilesets/bloxbase/t244.blo
new file mode 100644
index 0000000000..1eb33dfc50
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t244.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t245.blo b/mods/d2k/tilesets/bloxbase/t245.blo
new file mode 100644
index 0000000000..f9abee993b
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t245.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t246.blo b/mods/d2k/tilesets/bloxbase/t246.blo
new file mode 100644
index 0000000000..a8bf5f0494
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t246.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t247.blo b/mods/d2k/tilesets/bloxbase/t247.blo
new file mode 100644
index 0000000000..c75c0874e4
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t247.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t248.blo b/mods/d2k/tilesets/bloxbase/t248.blo
new file mode 100644
index 0000000000..974fb9acab
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t248.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t249.blo b/mods/d2k/tilesets/bloxbase/t249.blo
new file mode 100644
index 0000000000..447b633b12
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t249.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t25.blo b/mods/d2k/tilesets/bloxbase/t25.blo
new file mode 100644
index 0000000000..aa2aa0e172
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t25.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t250.blo b/mods/d2k/tilesets/bloxbase/t250.blo
new file mode 100644
index 0000000000..f2b0b3cb3e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t250.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t251.blo b/mods/d2k/tilesets/bloxbase/t251.blo
new file mode 100644
index 0000000000..e9d40e9a58
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t251.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t252.blo b/mods/d2k/tilesets/bloxbase/t252.blo
new file mode 100644
index 0000000000..82f8f5df92
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t252.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t253.blo b/mods/d2k/tilesets/bloxbase/t253.blo
new file mode 100644
index 0000000000..fb47359391
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t253.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t254.blo b/mods/d2k/tilesets/bloxbase/t254.blo
new file mode 100644
index 0000000000..eda5405326
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t254.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t255.blo b/mods/d2k/tilesets/bloxbase/t255.blo
new file mode 100644
index 0000000000..2a503c7d79
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t255.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t256.blo b/mods/d2k/tilesets/bloxbase/t256.blo
new file mode 100644
index 0000000000..f4fb2e62dd
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t256.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t257.blo b/mods/d2k/tilesets/bloxbase/t257.blo
new file mode 100644
index 0000000000..c86e039fbe
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t257.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t258.blo b/mods/d2k/tilesets/bloxbase/t258.blo
new file mode 100644
index 0000000000..680100e16c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t258.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t259.blo b/mods/d2k/tilesets/bloxbase/t259.blo
new file mode 100644
index 0000000000..50d241ec1c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t259.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t26.blo b/mods/d2k/tilesets/bloxbase/t26.blo
new file mode 100644
index 0000000000..2f9ffefaf2
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t26.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t27.blo b/mods/d2k/tilesets/bloxbase/t27.blo
new file mode 100644
index 0000000000..270b1c5b35
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t27.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t28.blo b/mods/d2k/tilesets/bloxbase/t28.blo
new file mode 100644
index 0000000000..a584c73908
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t28.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t29.blo b/mods/d2k/tilesets/bloxbase/t29.blo
new file mode 100644
index 0000000000..13d2dcbf56
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t29.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t30.blo b/mods/d2k/tilesets/bloxbase/t30.blo
new file mode 100644
index 0000000000..cd59253a76
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t30.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t31.blo b/mods/d2k/tilesets/bloxbase/t31.blo
new file mode 100644
index 0000000000..e4ba18e0e5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t31.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t32.blo b/mods/d2k/tilesets/bloxbase/t32.blo
new file mode 100644
index 0000000000..f12b30f98e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t32.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t33.blo b/mods/d2k/tilesets/bloxbase/t33.blo
new file mode 100644
index 0000000000..0fe2c6fb12
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t33.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t34.blo b/mods/d2k/tilesets/bloxbase/t34.blo
new file mode 100644
index 0000000000..eccf64271c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t34.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t35.blo b/mods/d2k/tilesets/bloxbase/t35.blo
new file mode 100644
index 0000000000..bcffcc824e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t35.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t36.blo b/mods/d2k/tilesets/bloxbase/t36.blo
new file mode 100644
index 0000000000..30865a3caa
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t36.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t37.blo b/mods/d2k/tilesets/bloxbase/t37.blo
new file mode 100644
index 0000000000..362f445082
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t37.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t38.blo b/mods/d2k/tilesets/bloxbase/t38.blo
new file mode 100644
index 0000000000..f8d82cc30c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t38.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t39.blo b/mods/d2k/tilesets/bloxbase/t39.blo
new file mode 100644
index 0000000000..cb3aef9683
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t39.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t40.blo b/mods/d2k/tilesets/bloxbase/t40.blo
new file mode 100644
index 0000000000..924bb5b385
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t40.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t41.blo b/mods/d2k/tilesets/bloxbase/t41.blo
new file mode 100644
index 0000000000..3771c219c1
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t41.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t42.blo b/mods/d2k/tilesets/bloxbase/t42.blo
new file mode 100644
index 0000000000..8e81959fbc
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t42.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t43.blo b/mods/d2k/tilesets/bloxbase/t43.blo
new file mode 100644
index 0000000000..ba61468418
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t43.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t44.blo b/mods/d2k/tilesets/bloxbase/t44.blo
new file mode 100644
index 0000000000..0a16499aef
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t44.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t45.blo b/mods/d2k/tilesets/bloxbase/t45.blo
new file mode 100644
index 0000000000..2bb2b266fa
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t45.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t46.blo b/mods/d2k/tilesets/bloxbase/t46.blo
new file mode 100644
index 0000000000..6b82d368ea
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t46.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t47.blo b/mods/d2k/tilesets/bloxbase/t47.blo
new file mode 100644
index 0000000000..7a70d79872
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t47.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t48.blo b/mods/d2k/tilesets/bloxbase/t48.blo
new file mode 100644
index 0000000000..ed19dde62e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t48.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t49.blo b/mods/d2k/tilesets/bloxbase/t49.blo
new file mode 100644
index 0000000000..e8a1fd21a2
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t49.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t50.blo b/mods/d2k/tilesets/bloxbase/t50.blo
new file mode 100644
index 0000000000..1b2eeeadf5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t50.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t51.blo b/mods/d2k/tilesets/bloxbase/t51.blo
new file mode 100644
index 0000000000..3d99684f6c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t51.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t52.blo b/mods/d2k/tilesets/bloxbase/t52.blo
new file mode 100644
index 0000000000..4e7ddaa874
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t52.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t53.blo b/mods/d2k/tilesets/bloxbase/t53.blo
new file mode 100644
index 0000000000..e0f3e1422e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t53.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t54.blo b/mods/d2k/tilesets/bloxbase/t54.blo
new file mode 100644
index 0000000000..27d7349ece
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t54.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t55.blo b/mods/d2k/tilesets/bloxbase/t55.blo
new file mode 100644
index 0000000000..9892580c36
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t55.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t56.blo b/mods/d2k/tilesets/bloxbase/t56.blo
new file mode 100644
index 0000000000..05e7baf63c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t56.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t57.blo b/mods/d2k/tilesets/bloxbase/t57.blo
new file mode 100644
index 0000000000..68c1a683f1
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t57.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t58.blo b/mods/d2k/tilesets/bloxbase/t58.blo
new file mode 100644
index 0000000000..89593c9d7d
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t58.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t59.blo b/mods/d2k/tilesets/bloxbase/t59.blo
new file mode 100644
index 0000000000..72f97ce335
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t59.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t60.blo b/mods/d2k/tilesets/bloxbase/t60.blo
new file mode 100644
index 0000000000..4e5a0a961f
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t60.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t61.blo b/mods/d2k/tilesets/bloxbase/t61.blo
new file mode 100644
index 0000000000..ab3f9e1a70
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t61.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t62.blo b/mods/d2k/tilesets/bloxbase/t62.blo
new file mode 100644
index 0000000000..92fb5521e5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t62.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t63.blo b/mods/d2k/tilesets/bloxbase/t63.blo
new file mode 100644
index 0000000000..d26c99922a
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t63.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t64.blo b/mods/d2k/tilesets/bloxbase/t64.blo
new file mode 100644
index 0000000000..3df31fcf51
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t64.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t65.blo b/mods/d2k/tilesets/bloxbase/t65.blo
new file mode 100644
index 0000000000..c80e3ab16f
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t65.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t66.blo b/mods/d2k/tilesets/bloxbase/t66.blo
new file mode 100644
index 0000000000..df95997009
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t66.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t67.blo b/mods/d2k/tilesets/bloxbase/t67.blo
new file mode 100644
index 0000000000..ce0a280681
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t67.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t68.blo b/mods/d2k/tilesets/bloxbase/t68.blo
new file mode 100644
index 0000000000..cacecbe9e8
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t68.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t69.blo b/mods/d2k/tilesets/bloxbase/t69.blo
new file mode 100644
index 0000000000..e12340455b
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t69.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t70.blo b/mods/d2k/tilesets/bloxbase/t70.blo
new file mode 100644
index 0000000000..9366ddebac
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t70.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t71.blo b/mods/d2k/tilesets/bloxbase/t71.blo
new file mode 100644
index 0000000000..3d8e268dc6
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t71.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t72.blo b/mods/d2k/tilesets/bloxbase/t72.blo
new file mode 100644
index 0000000000..44ae0b5913
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t72.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t73.blo b/mods/d2k/tilesets/bloxbase/t73.blo
new file mode 100644
index 0000000000..745337536b
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t73.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t74.blo b/mods/d2k/tilesets/bloxbase/t74.blo
new file mode 100644
index 0000000000..486e4cd7d3
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t74.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t75.blo b/mods/d2k/tilesets/bloxbase/t75.blo
new file mode 100644
index 0000000000..be0d5cb3f5
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t75.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t76.blo b/mods/d2k/tilesets/bloxbase/t76.blo
new file mode 100644
index 0000000000..35ff30d990
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t76.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t77.blo b/mods/d2k/tilesets/bloxbase/t77.blo
new file mode 100644
index 0000000000..0f87064ee7
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t77.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t78.blo b/mods/d2k/tilesets/bloxbase/t78.blo
new file mode 100644
index 0000000000..358e9cb319
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t78.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t79.blo b/mods/d2k/tilesets/bloxbase/t79.blo
new file mode 100644
index 0000000000..5a42256c96
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t79.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t80.blo b/mods/d2k/tilesets/bloxbase/t80.blo
new file mode 100644
index 0000000000..a83387087d
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t80.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t81.blo b/mods/d2k/tilesets/bloxbase/t81.blo
new file mode 100644
index 0000000000..ed9f9e3367
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t81.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t82.blo b/mods/d2k/tilesets/bloxbase/t82.blo
new file mode 100644
index 0000000000..a84362939c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t82.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t83.blo b/mods/d2k/tilesets/bloxbase/t83.blo
new file mode 100644
index 0000000000..64b51ca24e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t83.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t84.blo b/mods/d2k/tilesets/bloxbase/t84.blo
new file mode 100644
index 0000000000..83b87a9700
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t84.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t85.blo b/mods/d2k/tilesets/bloxbase/t85.blo
new file mode 100644
index 0000000000..36e29e85ae
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t85.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t86.blo b/mods/d2k/tilesets/bloxbase/t86.blo
new file mode 100644
index 0000000000..b314bdd7f1
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t86.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t87.blo b/mods/d2k/tilesets/bloxbase/t87.blo
new file mode 100644
index 0000000000..6069db67c6
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t87.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t88.blo b/mods/d2k/tilesets/bloxbase/t88.blo
new file mode 100644
index 0000000000..0083d133cd
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t88.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t89.blo b/mods/d2k/tilesets/bloxbase/t89.blo
new file mode 100644
index 0000000000..71b6155807
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t89.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t90.blo b/mods/d2k/tilesets/bloxbase/t90.blo
new file mode 100644
index 0000000000..5eeb78ee2f
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t90.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t91.blo b/mods/d2k/tilesets/bloxbase/t91.blo
new file mode 100644
index 0000000000..ea4c6c576c
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t91.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t92.blo b/mods/d2k/tilesets/bloxbase/t92.blo
new file mode 100644
index 0000000000..9b2ba046ca
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t92.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t93.blo b/mods/d2k/tilesets/bloxbase/t93.blo
new file mode 100644
index 0000000000..2bc7081ecd
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t93.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t94.blo b/mods/d2k/tilesets/bloxbase/t94.blo
new file mode 100644
index 0000000000..253f94b7b2
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t94.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t95.blo b/mods/d2k/tilesets/bloxbase/t95.blo
new file mode 100644
index 0000000000..5cb03f54fa
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t95.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t96.blo b/mods/d2k/tilesets/bloxbase/t96.blo
new file mode 100644
index 0000000000..87c178e673
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t96.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t97.blo b/mods/d2k/tilesets/bloxbase/t97.blo
new file mode 100644
index 0000000000..11654d8b87
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t97.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t98.blo b/mods/d2k/tilesets/bloxbase/t98.blo
new file mode 100644
index 0000000000..c50b7798e3
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t98.blo differ
diff --git a/mods/d2k/tilesets/bloxbase/t99.blo b/mods/d2k/tilesets/bloxbase/t99.blo
new file mode 100644
index 0000000000..91a27dbe8e
Binary files /dev/null and b/mods/d2k/tilesets/bloxbase/t99.blo differ
diff --git a/tsbdefaults.yaml b/tsbdefaults.yaml
new file mode 100644
index 0000000000..9cac94b547
--- /dev/null
+++ b/tsbdefaults.yaml
@@ -0,0 +1,46 @@
+Terrain:
+ TerrainType@Clear:
+ Type: Clear
+ AcceptSmudge: True
+ Color: 40, 68, 40
+ TerrainType@Water:
+ Type: Water
+ IsWater: true
+ AcceptSmudge: False
+ Color: 92, 116, 164
+ TerrainType@Road:
+ Type: Road
+ AcceptSmudge: True
+ Color: 88, 116, 116
+ TerrainType@Rock:
+ Type: Rock
+ AcceptSmudge: False
+ Color: 68, 68, 60
+ TerrainType@Tree:
+ Type: Tree
+ AcceptSmudge: False
+ Color: 28, 32, 36
+ TerrainType@River:
+ Type: River
+ AcceptSmudge: False
+ Color: 92, 140, 180
+ TerrainType@Rough:
+ Type: Rough
+ AcceptSmudge: True
+ Color: 68, 20, 100
+ TerrainType@Wall:
+ Type: Wall
+ AcceptSmudge: True
+ Color: 208, 192, 160
+ TerrainType@Beach:
+ Type: Beach
+ AcceptSmudge: False
+ Color: 176, 156, 120
+ TerrainType@Spice:
+ Type: Spice
+ AcceptSmudge: True
+ Color: 161, 226, 28
+ TerrainType@SpiceBlobs:
+ Type: SpiceBlobs
+ AcceptSmudge: True
+ Color: 84, 252, 252
\ No newline at end of file