Merge remote-tracking branch 'matt/dune'

This commit is contained in:
Chris Forbes
2012-06-10 16:27:19 +12:00
119 changed files with 15597 additions and 5298 deletions

5
.gitignore vendored
View File

@@ -55,6 +55,5 @@ OpenRA.Launcher.Mac/OpenRA.xcodeproj/*.mode1v3
# other crap
Logs/
Replays/
settings.yaml
\#*
.*.sw?
\#*
.*.sw?

View File

@@ -12,6 +12,7 @@ The OpenRA developers are:
Also thanks to:
* Akseli Virtanen (RAGEQUIT)
* Andrew Riedi
* Barnaby Smith (mvi)
* Bellator
* Christer Ulfsparre (Holloweye)
* Erasmus Schroder (rasco)
@@ -22,6 +23,7 @@ Also thanks to:
* Lawrence Wang
* Mark Olson (markolson)
* Matthew Gatland (mgatland)
* Matthias Mailänder (Mailaender)
* Max Ugrumov (katzsmile)
* Max621
* Nukem

View File

@@ -5,10 +5,10 @@ COMMON_LIBS = System.dll System.Core.dll System.Drawing.dll System.Xml.dll third
PHONY = core tools package all mods clean distclean
.SUFFIXES:
core: game renderers mod_ra mod_cnc utility
core: game renderers mods utility tsbuild
tools: editor ralint tsbuild
package: core editor
mods: mod_ra mod_cnc
mods: mod_ra mod_cnc mod_d2k
all: core tools
clean:
@-rm -f *.exe *.dll *.mdb mods/**/*.dll mods/**/*.mdb *.resources
@@ -97,6 +97,16 @@ mod_cnc_EXTRA_CMDS = mono --debug RALint.exe cnc
PROGRAMS += mod_cnc
mod_cnc: $(mod_cnc_TARGET)
# Dune 2000
mod_d2k_SRCS := $(shell find OpenRA.Mods.D2k/ -iname '*.cs')
mod_d2k_TARGET = mods/d2k/OpenRA.Mods.D2k.dll
mod_d2k_KIND = library
mod_d2k_DEPS = $(STD_MOD_DEPS) $(mod_ra_TARGET) $(utility_TARGET)
mod_d2k_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) $(mod_ra_TARGET) $(utility_TARGET)
mod_d2k_EXTRA_CMDS = mono --debug RALint.exe d2k
PROGRAMS += mod_d2k
mod_d2k: $(mod_d2k_TARGET)
#
# Tools
#
@@ -127,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
@@ -188,7 +202,7 @@ BIN_INSTALL_DIR = $(DESTDIR)$(bindir)
INSTALL_DIR = $(DESTDIR)$(datadir)/openra
INSTALL = install
INSTALL_PROGRAM = $(INSTALL)
CORE = fileformats rcg rgl rsdl rnull game editor utility
CORE = fileformats rcg rgl rsdl rnull game editor utility tsbuild
install: all
@-echo "Installing OpenRA to $(INSTALL_DIR)"
@@ -196,6 +210,10 @@ install: all
@$(INSTALL_PROGRAM) $(foreach prog,$(CORE),$($(prog)_TARGET)) $(INSTALL_DIR)
@$(INSTALL_PROGRAM) -d $(INSTALL_DIR)/mods/cnc
@$(INSTALL_PROGRAM) $(mod_cnc_TARGET) $(INSTALL_DIR)/mods/cnc
@$(INSTALL_PROGRAM) -d $(INSTALL_DIR)/mods/ra
@$(INSTALL_PROGRAM) $(mod_ra_TARGET) $(INSTALL_DIR)/mods/ra
@$(INSTALL_PROGRAM) -d $(INSTALL_DIR)/mods/d2k
@$(INSTALL_PROGRAM) $(mod_d2k_TARGET) $(INSTALL_DIR)/mods/d2k
@-cp $(foreach f,$(shell ls mods/cnc --hide=*.dll),mods/cnc/$(f)) $(INSTALL_DIR)/mods/cnc
@cp -r mods/cnc/maps $(INSTALL_DIR)/mods/cnc
@@ -205,8 +223,6 @@ install: all
@cp -r mods/cnc/sequences $(INSTALL_DIR)/mods/cnc
@cp -r mods/cnc/tilesets $(INSTALL_DIR)/mods/cnc
@cp -r mods/cnc/uibits $(INSTALL_DIR)/mods/cnc
@$(INSTALL_PROGRAM) -d $(INSTALL_DIR)/mods/ra
@$(INSTALL_PROGRAM) $(mod_ra_TARGET) $(INSTALL_DIR)/mods/ra
@-cp $(foreach f,$(shell ls mods/ra --hide=*.dll),mods/ra/$(f)) $(INSTALL_DIR)/mods/ra
@cp -r mods/ra/maps $(INSTALL_DIR)/mods/ra
@@ -215,6 +231,14 @@ install: all
@cp -r mods/ra/rules $(INSTALL_DIR)/mods/ra
@cp -r mods/ra/tilesets $(INSTALL_DIR)/mods/ra
@cp -r mods/ra/uibits $(INSTALL_DIR)/mods/ra
@-cp $(foreach f,$(shell ls mods/d2k --hide=*.dll),mods/d2k/$(f)) $(INSTALL_DIR)/mods/d2k
@cp -r mods/d2k/maps $(INSTALL_DIR)/mods/d2k
@cp -r mods/d2k/bits $(INSTALL_DIR)/mods/d2k
@cp -r mods/d2k/chrome $(INSTALL_DIR)/mods/d2k
@cp -r mods/d2k/rules $(INSTALL_DIR)/mods/d2k
@cp -r mods/d2k/tilesets $(INSTALL_DIR)/mods/d2k
@cp -r mods/d2k/uibits $(INSTALL_DIR)/mods/d2k
@cp -r glsl $(INSTALL_DIR)
@cp -r cg $(INSTALL_DIR)
@@ -237,3 +261,4 @@ install: all
uninstall:
@-rm -r $(INSTALL_DIR)
@-rm $(DESTDIR)$(bindir)/openra
@-rm $(DESTDIR)$(bindir)/openra-editor

View File

@@ -0,0 +1,92 @@
#region Copyright & License Information
/*
* Copyright 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.Collections.Generic;
using System.IO;
using System.Drawing;
using OpenRA.FileFormats;
using OpenRA.Graphics;
using OpenRA.Network;
using OpenRA.Support;
using OpenRA.Widgets;
namespace OpenRA.Mods.D2k
{
public class D2kLoadScreen : ILoadScreen
{
Dictionary<string, string> Info;
static string[] Comments = new[] {"Filling Crates...", "Breeding Sandworms..."};
Stopwatch lastLoadScreen = new Stopwatch();
Rectangle StripeRect;
Sprite Stripe, Logo;
float2 LogoPos;
Renderer r;
public void Init(Dictionary<string, string> info)
{
Info = info;
// Avoid standard loading mechanisms so we
// can display loadscreen as early as possible
r = Game.Renderer;
if (r == null) return;
var s = new Sheet("mods/d2k/uibits/loadscreen.png");
Logo = new Sprite(s, new Rectangle(0,0,256,256), TextureChannel.Alpha);
Stripe = new Sprite(s, new Rectangle(256,0,256,256), TextureChannel.Alpha);
StripeRect = new Rectangle(0, Renderer.Resolution.Height/2 - 128, Renderer.Resolution.Width, 256);
LogoPos = new float2(Renderer.Resolution.Width/2 - 128, Renderer.Resolution.Height/2 - 128);
}
public void Display()
{
if (r == null)
return;
// Update text at most every 0.5 seconds
if (lastLoadScreen.ElapsedTime() < 0.5)
return;
lastLoadScreen.Reset();
var text = Comments.Random(Game.CosmeticRandom);
var textSize = r.Fonts["Bold"].Measure(text);
r.BeginFrame(float2.Zero, 1f);
WidgetUtils.FillRectWithSprite(StripeRect, Stripe);
r.RgbaSpriteRenderer.DrawSprite(Logo, LogoPos);
r.Fonts["Bold"].DrawText(text, new float2(Renderer.Resolution.Width - textSize.X - 20, Renderer.Resolution.Height - textSize.Y - 20), Color.White);
r.EndFrame( new NullInputHandler() );
}
public void StartGame()
{
TestAndContinue();
Game.JoinExternalGame();
}
void TestAndContinue()
{
Ui.ResetAll();
if (!FileSystem.Exists(Info["TestFile"]))
{
var args = new WidgetArgs()
{
{ "installData", Info }
};
Ui.OpenWindow(Info["InstallerMenuWidget"], args);
}
else
{
Game.LoadShellMap();
Ui.ResetAll();
Ui.OpenWindow("MAINMENU_BG");
}
}
}
}

View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.21022</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{C0B0465C-6BE2-409C-8770-3A9BF64C4344}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>OpenRA.Mods.D2k</RootNamespace>
<AssemblyName>OpenRA.Mods.D2k</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<OutputPath>bin\Debug</OutputPath>
<CustomCommands>
<CustomCommands>
<Command type="AfterBuild" command="cp ${TargetFile} ../mods/d2k" workingdir="${ProjectDir}" />
<Command type="AfterBuild" command="mono RALint.exe d2k" workingdir="${ProjectDir}/../" />
</CustomCommands>
</CustomCommands>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="System.Drawing" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="D2kLoadScreen.cs" />
<Compile Include="Render\RenderBuildingSeparateTurret.cs" />
<Compile Include="Widgets\Logic\D2kInstallLogic.cs" />
<Compile Include="Widgets\Logic\D2kExtractGameFilesLogic.cs" />
<Compile Include="Widgets\Logic\D2kInstallFromCDLogic.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>mkdir "$(SolutionDir)mods/d2k/"
copy "$(TargetPath)" "$(SolutionDir)mods/d2k/"
cd "$(SolutionDir)"</PostBuildEvent>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\OpenRA.Utility\OpenRA.Utility.csproj">
<Project>{F33337BE-CB69-4B24-850F-07D23E408DDF}</Project>
<Name>OpenRA.Utility</Name>
</ProjectReference>
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">
<Project>{0DFB103F-2962-400F-8C6D-E2C28CCBA633}</Project>
<Name>OpenRA.Game</Name>
</ProjectReference>
<ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj">
<Project>{BDAEAB25-991E-46A7-AF1E-4F0E03358DAA}</Project>
<Name>OpenRA.FileFormats</Name>
</ProjectReference>
<ProjectReference Include="..\OpenRA.TilesetBuilder\OpenRA.TilesetBuilder.csproj">
<Project>{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}</Project>
<Name>OpenRA.TilesetBuilder</Name>
</ProjectReference>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Mods.D2k", "OpenRA.Mods.D2k.csproj", "{C0B0465C-6BE2-409C-8770-3A9BF64C4344}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = OpenRA.Mods.D2k.csproj
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,39 @@
#region Copyright & License Information
/*
* Copyright 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.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("OpenRA.Mods.D2k")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("OpenRA.Mods.D2k")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]

View File

@@ -0,0 +1,48 @@
#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 OpenRA.Mods.RA.Buildings;
using OpenRA.Graphics;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
class RenderBuildingSeparateTurretInfo : RenderBuildingInfo, Requires<TurretedInfo>, Requires<AttackBaseInfo>
{
public override object Create(ActorInitializer init) { return new RenderBuildingSeparateTurret( init, this ); }
}
class RenderBuildingSeparateTurret : RenderBuilding
{
public RenderBuildingSeparateTurret( ActorInitializer init, RenderBuildingInfo info )
: base(init, info, MakeTurretFacingFunc(init.self))
{
var turretAnim = new Animation(GetImage(self), () => turreted.turretFacing );
turretAnim.Play( "turret" );
for( var i = 0; i < attack.Turrets.Count; i++ )
{
var turret = attack.Turrets[i];
anims.Add( "turret_{0}".F(i),
new AnimationWithOffset( turretAnim,
() => Combat.GetTurretPosition( self, facing, turret ),
null));
}
}
static Func<int> MakeTurretFacingFunc(Actor self)
{
var turreted = self.Trait<Turreted>();
return () => turreted.turretFacing;
}
}
} */

View File

@@ -0,0 +1,487 @@
#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.IO;
using System.Linq;
using System.Threading;
using System.Diagnostics;
using OpenRA.FileFormats;
using OpenRA.FileFormats.Graphics;
using OpenRA.Widgets;
using OpenRA.Utility;
namespace OpenRA.Mods.D2k.Widgets.Logic
{
public class D2kExtractGameFilesLogic
{
Widget panel;
ProgressBarWidget progressBar;
LabelWidget statusLabel;
ButtonWidget retryButton, backButton;
Widget extractingContainer, copyFilesContainer;
[ObjectCreator.UseCtor]
public D2kExtractGameFilesLogic(Widget widget)
{
panel = widget.Get("EXTRACT_GAMEFILES_PANEL");
progressBar = panel.Get<ProgressBarWidget>("PROGRESS_BAR");
statusLabel = panel.Get<LabelWidget>("STATUS_LABEL");
backButton = panel.Get<ButtonWidget>("BACK_BUTTON");
backButton.OnClick = Ui.CloseWindow;
retryButton = panel.Get<ButtonWidget>("RETRY_BUTTON");
retryButton.OnClick = Extract;
extractingContainer = panel.Get("EXTRACTING");
copyFilesContainer = panel.Get("COPY_FILES");
Extract();
}
void Extract()
{
backButton.IsDisabled = () => true;
retryButton.IsDisabled = () => true;
copyFilesContainer.IsVisible = () => false;
extractingContainer.IsVisible = () => true;
var PathToDataR8 = Path.Combine(Platform.SupportDir, "Content/d2k/DATA.R8");
var PathToPalette = "mods/d2k/bits/d2k.pal";
var PathToImages = Path.Combine(Platform.SupportDir, "Content/d2k/SHPs");
var ExtractGameFiles = new string[][]
{
new string[] {"--r8", PathToDataR8, PathToPalette, "0", "2", Path.Combine(PathToImages, "overlay")},
//new string[] {"--r8", PathToDataR8, PathToPalette, "40", "101", Path.Combine(PathToImages, "shadow")},
new string[] {"--r8", PathToDataR8, PathToPalette, "102", "105", Path.Combine(PathToImages, "crates")},
new string[] {"--r8", PathToDataR8, PathToPalette, "107", "109", Path.Combine(PathToImages, "spicebloom")},
new string[] {"--r8", PathToDataR8, PathToPalette, "114", "129", Path.Combine(PathToImages, "rockcrater1")},
new string[] {"--r8", PathToDataR8, PathToPalette, "130", "145", Path.Combine(PathToImages, "rockcrater2")},
new string[] {"--r8", PathToDataR8, PathToPalette, "146", "161", Path.Combine(PathToImages, "sandcrater1")},
new string[] {"--r8", PathToDataR8, PathToPalette, "162", "177", Path.Combine(PathToImages, "sandcrater2")},
new string[] {"--r8", PathToDataR8, PathToPalette, "206", "381", Path.Combine(PathToImages, "rifle"), "--infantry"},
new string[] {"--r8", PathToDataR8, PathToPalette, "382", "457", Path.Combine(PathToImages, "rifledeath"), "--infantrydeath"},
new string[] {"--r8", PathToDataR8, PathToPalette, "458", "693", Path.Combine(PathToImages, "rocket"), "--infantry"},
new string[] {"--r8", PathToDataR8, PathToPalette, "694", "929", Path.Combine(PathToImages, "fremen"), "--infantry"},
new string[] {"--r8", PathToDataR8, PathToPalette, "930", "1165", Path.Combine(PathToImages, "sardaukar"), "--infantry"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1166", "1221", Path.Combine(PathToImages, "engineer"), "--infantry"}, // death animation 1342..1401
new string[] {"--r8", PathToDataR8, PathToPalette, "1402", "1502", Path.Combine(PathToImages, "thumper"), "--infantry"}, // death animations 1543..1602
new string[] {"--r8", PathToDataR8, PathToPalette, "1603", "1634", Path.Combine(PathToImages, "missile"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1635", "1666", Path.Combine(PathToImages, "trike"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1667", "1698", Path.Combine(PathToImages, "quad"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1699", "1730", Path.Combine(PathToImages, "harvester"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1731", "1762", Path.Combine(PathToImages, "combata"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1763", "1794", Path.Combine(PathToImages, "siege"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1795", "1826", Path.Combine(PathToImages, "dmcv"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1827", "1858", Path.Combine(PathToImages, "sonic"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1859", "1890", Path.Combine(PathToImages, "combataturret"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1891", "1922", Path.Combine(PathToImages, "siegeturret"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1923", "1954", Path.Combine(PathToImages, "carryall"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "1955", "2050", Path.Combine(PathToImages, "orni"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2051", "2082", Path.Combine(PathToImages, "combath"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2083", "2114", Path.Combine(PathToImages, "devast"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2115", "2146", Path.Combine(PathToImages, "combathturret"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2147", "2148", Path.Combine(PathToImages, "deathhandmissile")},
new string[] {"--r8", PathToDataR8, PathToPalette, "2245", "2284", Path.Combine(PathToImages, "saboteur"), "--infantry"}, //#death animations 2325..2388
//rifleinfantry repetitions?
new string[] {"--r8", PathToDataR8, PathToPalette, "2389", "2420", Path.Combine(PathToImages, "deviator"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2421", "2452", Path.Combine(PathToImages, "raider"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2453", "2484", Path.Combine(PathToImages, "combato"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2485", "2516", Path.Combine(PathToImages, "combatoturret"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2517", "2517", Path.Combine(PathToImages, "frigate"), "--vehicle"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2518", "2520", Path.Combine(PathToImages, "heavya"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2521", "2522", Path.Combine(PathToImages, "radara"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2523", "2524", Path.Combine(PathToImages, "pwra"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2525", "2526", Path.Combine(PathToImages, "barra"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2527", "2558", Path.Combine(PathToImages, "wall"), "--wall"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2559", "2560", Path.Combine(PathToImages, "conyarda"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2561", "2563", Path.Combine(PathToImages, "refa"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2564", "2565", Path.Combine(PathToImages, "hightecha"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2566", "2570", Path.Combine(PathToImages, "siloa"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2571", "2572", Path.Combine(PathToImages, "repaira"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2573", "2588", Path.Combine(PathToImages, "guntower"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2589", "2620", Path.Combine(PathToImages, "gunturret"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2621", "2636", Path.Combine(PathToImages, "rockettower"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2637", "2668", Path.Combine(PathToImages, "rocketturreta"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2669", "2670", Path.Combine(PathToImages, "researcha"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2671", "2672", Path.Combine(PathToImages, "starporta"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2673", "2675", Path.Combine(PathToImages, "lighta"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2676", "2677", Path.Combine(PathToImages, "palacea"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2678", "2680", Path.Combine(PathToImages, "heavyh"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2681", "2682", Path.Combine(PathToImages, "radarh"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2683", "2684", Path.Combine(PathToImages, "pwrh"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2685", "2686", Path.Combine(PathToImages, "barrh"), "--building"},
// identical wall
new string[] {"--r8", PathToDataR8, PathToPalette, "2719", "2720", Path.Combine(PathToImages, "conyardh"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2721", "2723", Path.Combine(PathToImages, "refh"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2724", "2725", Path.Combine(PathToImages, "hightechh"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2726", "2730", Path.Combine(PathToImages, "siloh"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2731", "2732", Path.Combine(PathToImages, "repairh"), "--building"},
// identical guntower
new string[] {"--r8", PathToDataR8, PathToPalette, "2749", "2780", Path.Combine(PathToImages, "gunturreth"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2797", "2828", Path.Combine(PathToImages, "rocketturreth"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2829", "2830", Path.Combine(PathToImages, "researchh"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2831", "2832", Path.Combine(PathToImages, "starporth"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2833", "2835", Path.Combine(PathToImages, "lighth"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2836", "2837", Path.Combine(PathToImages, "palaceh"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2838", "2840", Path.Combine(PathToImages, "heavyo"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2841", "2842", Path.Combine(PathToImages, "radaro"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2843", "2844", Path.Combine(PathToImages, "pwro"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2845", "2846", Path.Combine(PathToImages, "barro"), "--building"},
// identical wall
new string[] {"--r8", PathToDataR8, PathToPalette, "2879", "2880", Path.Combine(PathToImages, "conyardo"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2881", "2883", Path.Combine(PathToImages, "refo"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2884", "2885", Path.Combine(PathToImages, "hightecho"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2886", "2890", Path.Combine(PathToImages, "siloo"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2891", "2892", Path.Combine(PathToImages, "repairo"), "--building"},
// identical guntower
new string[] {"--r8", PathToDataR8, PathToPalette, "2909", "2940", Path.Combine(PathToImages, "gunturreto"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2957", "2988", Path.Combine(PathToImages, "rocketturreto"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2989", "2990", Path.Combine(PathToImages, "researcho"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2991", "2992", Path.Combine(PathToImages, "starporto"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2993", "2995", Path.Combine(PathToImages, "lighto"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "2996", "2997", Path.Combine(PathToImages, "palaceo"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "3549", "3564", Path.Combine(PathToImages, "sandwormmouth")},
new string[] {"--r8", PathToDataR8, PathToPalette, "3565", "3585", Path.Combine(PathToImages, "sandwormdust")},
new string[] {"--r8", PathToDataR8, PathToPalette, "3586", "3600", Path.Combine(PathToImages, "wormsigns1")},
new string[] {"--r8", PathToDataR8, PathToPalette, "3601", "3610", Path.Combine(PathToImages, "wormsigns2")},
new string[] {"--r8", PathToDataR8, PathToPalette, "3611", "3615", Path.Combine(PathToImages, "wormsigns3")},
new string[] {"--r8", PathToDataR8, PathToPalette, "3616", "3620", Path.Combine(PathToImages, "wormsigns4")},
//new string[] {"--r8", PathToDataR8, PathToPalette, "3679", "3686", "sell"},
//explosions and muzzle flash
new string[] {"--r8", PathToDataR8, PathToPalette, "4011", "4011", Path.Combine(PathToImages, "rifleicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4012", "4012", Path.Combine(PathToImages, "bazookaicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4013", "4013", Path.Combine(PathToImages, "engineericon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4014", "4014", Path.Combine(PathToImages, "thumpericon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4015", "4015", Path.Combine(PathToImages, "sadaukaricon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4016", "4016", Path.Combine(PathToImages, "trikeicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4017", "4017", Path.Combine(PathToImages, "raidericon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4018", "4018", Path.Combine(PathToImages, "quadicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4019", "4019", Path.Combine(PathToImages, "harvestericon")}, // == 4044
new string[] {"--r8", PathToDataR8, PathToPalette, "4020", "4020", Path.Combine(PathToImages, "combataicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4021", "4021", Path.Combine(PathToImages, "combathicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4022", "4022", Path.Combine(PathToImages, "combatoicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4023", "4023", Path.Combine(PathToImages, "mcvicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4024", "4024", Path.Combine(PathToImages, "missileicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4025", "4025", Path.Combine(PathToImages, "deviatoricon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4026", "4026", Path.Combine(PathToImages, "siegeicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4027", "4027", Path.Combine(PathToImages, "sonicicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4028", "4028", Path.Combine(PathToImages, "devasticon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4029", "4029", Path.Combine(PathToImages, "carryallicon")}, // == 4030
new string[] {"--r8", PathToDataR8, PathToPalette, "4031", "4031", Path.Combine(PathToImages, "orniicon")}, // == 4062
new string[] {"--r8", PathToDataR8, PathToPalette, "4032", "4032", Path.Combine(PathToImages, "fremenicon")}, // == 4033
new string[] {"--r8", PathToDataR8, PathToPalette, "4034", "4034", Path.Combine(PathToImages, "saboteuricon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4035", "4035", Path.Combine(PathToImages, "deathhandicon")},
// "4036..4045 = repetitions
new string[] {"--r8", PathToDataR8, PathToPalette, "4046", "4046", Path.Combine(PathToImages, "conyardaicon")}, // == 4049
new string[] {"--r8", PathToDataR8, PathToPalette, "4047", "4047", Path.Combine(PathToImages, "conyardhicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4048", "4048", Path.Combine(PathToImages, "conyardoicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4050", "4050", Path.Combine(PathToImages, "4plateicon")}, // == 4051..4052
new string[] {"--r8", PathToDataR8, PathToPalette, "4053", "4053", Path.Combine(PathToImages, "6plateicon")}, // == 4054..4055
new string[] {"--r8", PathToDataR8, PathToPalette, "4056", "4056", Path.Combine(PathToImages, "pwraicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4057", "4057", Path.Combine(PathToImages, "pwrhicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4058", "4058", Path.Combine(PathToImages, "pwroicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4059", "4059", Path.Combine(PathToImages, "barraicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4060", "4060", Path.Combine(PathToImages, "barrhicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4061", "4061", Path.Combine(PathToImages, "barroicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4063", "4063", Path.Combine(PathToImages, "wallicon")}, // == 4061..4062
new string[] {"--r8", PathToDataR8, PathToPalette, "4066", "4066", Path.Combine(PathToImages, "refaicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4067", "4067", Path.Combine(PathToImages, "refhicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4068", "4068", Path.Combine(PathToImages, "refoicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4069", "4069", Path.Combine(PathToImages, "turreticon")}, // == 4070..4071
new string[] {"--r8", PathToDataR8, PathToPalette, "4072", "4072", Path.Combine(PathToImages, "radaraicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4072", "4072", Path.Combine(PathToImages, "radaraicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4073", "4073", Path.Combine(PathToImages, "radarhicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4074", "4074", Path.Combine(PathToImages, "radaroicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4075", "4075", Path.Combine(PathToImages, "rturreticon")}, // == 4076..4077
new string[] {"--r8", PathToDataR8, PathToPalette, "4078", "4078", Path.Combine(PathToImages, "hightechaicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4079", "4079", Path.Combine(PathToImages, "hightechhicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4080", "4080", Path.Combine(PathToImages, "hightechoicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4081", "4081", Path.Combine(PathToImages, "lightaicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4082", "4082", Path.Combine(PathToImages, "lighthicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4083", "4083", Path.Combine(PathToImages, "lightoicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4084", "4084", Path.Combine(PathToImages, "siloaicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4085", "4085", Path.Combine(PathToImages, "silohicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4086", "4086", Path.Combine(PathToImages, "silooicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4087", "4087", Path.Combine(PathToImages, "heavyaicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4088", "4088", Path.Combine(PathToImages, "heavyhicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4089", "4089", Path.Combine(PathToImages, "heavyoicon")},
// 4090 == orniicon
// 4091 == heavyhicon
new string[] {"--r8", PathToDataR8, PathToPalette, "4092", "4092", Path.Combine(PathToImages, "starportaicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4093", "4093", Path.Combine(PathToImages, "starporthicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4094", "4094", Path.Combine(PathToImages, "starportoicon")},
// 4095 = orniicon
new string[] {"--r8", PathToDataR8, PathToPalette, "4096", "4096", Path.Combine(PathToImages, "repairaicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4097", "4097", Path.Combine(PathToImages, "repairhicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4098", "4098", Path.Combine(PathToImages, "repairoicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4099", "4099", Path.Combine(PathToImages, "researchaicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4100", "4100", Path.Combine(PathToImages, "researchhicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4101", "4101", Path.Combine(PathToImages, "researchoicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4102", "4102", Path.Combine(PathToImages, "palaceaicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4103", "4103", Path.Combine(PathToImages, "palacehicon")},
new string[] {"--r8", PathToDataR8, PathToPalette, "4104", "4104", Path.Combine(PathToImages, "palaceoicon")},
// 4105 = orniicon
// 4106..4107 = radaraicon
// 4108 = conyardaicon
new string[] {"--r8", PathToDataR8, PathToPalette, "4109", "4150", Path.Combine(PathToImages, "conmake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4151", "4174", Path.Combine(PathToImages, "wtrpmake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4175", "4194", Path.Combine(PathToImages, "barramake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4231", "4253", Path.Combine(PathToImages, "refmake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4254", "4273", Path.Combine(PathToImages, "radarmake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4274", "4294", Path.Combine(PathToImages, "highmake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4295", "4312", Path.Combine(PathToImages, "lightmake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4313", "4327", Path.Combine(PathToImages, "silomake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4328", "4346", Path.Combine(PathToImages, "heavymake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4347", "4369", Path.Combine(PathToImages, "starportmake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4370", "4390", Path.Combine(PathToImages, "repairmake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4391", "4412", Path.Combine(PathToImages, "researchmake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4413", "4435", Path.Combine(PathToImages, "palacemake"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4436", "4449", Path.Combine(PathToImages, "cranea"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4450", "4463", Path.Combine(PathToImages, "craneh"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4463", "4477", Path.Combine(PathToImages, "craneo"), "--building"},
new string[] {"--r8", PathToDataR8, PathToPalette, "4760", "4819", Path.Combine(PathToImages, "windtrap_anim"), "--building"}, //?
new string[] {"--r8", PathToDataR8, PathToPalette, "4820", "4840", Path.Combine(PathToImages, "missile_launch"), "--building"},
new string[] {"--r8", Path.Combine(Platform.SupportDir, "Content/d2k/MOUSE.R8"), PathToPalette, "0", "264", Path.Combine(PathToImages, "mouse"), "--transparent"},
new string[] {"--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), PathToPalette, "0", "799", Path.Combine(PathToImages, "BASE"), "--tileset"},
new string[] {"--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), PathToPalette, "748", "749", Path.Combine(PathToImages, "spice0")},
};
var SHPsToCreate = new string[][]
{
new string[] {"--shp", Path.Combine(PathToImages, "overlay.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "crates.png"), "32"},
//new string[] {"--shp", Path.Combine(PathToImages, "shadow.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "spicebloom.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "rockcrater1.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "rockcrater2.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "sandcrater1.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "sandcrater2.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "rifle.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "rifledeath.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "rocket.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "fremen.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "sardaukar.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "engineer.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "thumper.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "missile.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "trike.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "quad.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "harvester.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "combata.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "siege.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "dmcv.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "sonic.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "combataturret.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "siegeturret.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "carryall.png"), "64"},
new string[] {"--shp", Path.Combine(PathToImages, "orni.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "combath.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "devast.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "combathturret.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "deathhandmissile.png"), "24"},
new string[] {"--shp", Path.Combine(PathToImages, "saboteur.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "deviator.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "raider.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "combato.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "combatoturret.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "frigate.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "heavya.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "radara.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "pwra.png"), "64"},
new string[] {"--shp", Path.Combine(PathToImages, "barra.png"), "80"},
new string[] {"--shp", Path.Combine(PathToImages, "wall.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "conyarda.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "refa.png"), "120"},
new string[] {"--shp", Path.Combine(PathToImages, "hightecha.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "siloa.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "repaira.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "guntower.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "gunturret.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "rockettower.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "rocketturreta.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "researcha.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "starporta.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "lighta.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "palacea.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "heavyh.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "radarh.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "pwrh.png"), "64"},
new string[] {"--shp", Path.Combine(PathToImages, "barrh.png"), "64"},
new string[] {"--shp", Path.Combine(PathToImages, "conyardh.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "refh.png"), "120"},
new string[] {"--shp", Path.Combine(PathToImages, "hightechh.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "siloh.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "repairh.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "gunturreth.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "rocketturreth.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "researchh.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "starporth.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "lighth.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "palaceh.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "heavyo.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "radaro.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "pwro.png"), "64"},
new string[] {"--shp", Path.Combine(PathToImages, "barro.png"), "64"},
new string[] {"--shp", Path.Combine(PathToImages, "conyardo.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "refo.png"), "120"},
new string[] {"--shp", Path.Combine(PathToImages, "hightecho.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "siloo.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "repairo.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "gunturreto.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "rocketturreto.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "researcho.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "starporto.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "lighto.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "palaceo.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "sandwormmouth.png"), "68"},
new string[] {"--shp", Path.Combine(PathToImages, "sandwormdust.png"), "68"},
new string[] {"--shp", Path.Combine(PathToImages, "wormsigns1.png"), "16"},
new string[] {"--shp", Path.Combine(PathToImages, "wormsigns2.png"), "16"},
new string[] {"--shp", Path.Combine(PathToImages, "wormsigns3.png"), "16"},
new string[] {"--shp", Path.Combine(PathToImages, "wormsigns4.png"), "16"},
//new string[] {"--shp", Path.Combine(PathToImages, "sell.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "rifleicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "bazookaicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "engineericon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "thumpericon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "sadaukaricon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "trikeicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "raidericon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "quadicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "harvestericon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "combataicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "combathicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "combatoicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "mcvicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "missileicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "deviatoricon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "siegeicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "sonicicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "devasticon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "carryallicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "orniicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "fremenicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "saboteuricon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "deathhandicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "conyardaicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "conyardhicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "conyardoicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "4plateicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "6plateicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "pwraicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "pwrhicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "pwroicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "barraicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "barrhicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "barroicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "wallicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "refaicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "refhicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "refoicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "turreticon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "radaraicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "radarhicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "radaroicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "rturreticon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "hightechaicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "hightechhicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "hightechoicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "lightaicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "lighthicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "lightoicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "siloaicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "silohicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "silooicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "heavyaicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "heavyhicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "heavyoicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "starportaicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "starporthicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "starportoicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "repairaicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "repairhicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "repairoicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "researchaicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "researchhicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "researchoicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "palaceaicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "palacehicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "palaceoicon.png"), "60"},
new string[] {"--shp", Path.Combine(PathToImages, "conmake.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "wtrpmake.png"), "64"},
new string[] {"--shp", Path.Combine(PathToImages, "barramake.png"), "80"},
new string[] {"--shp", Path.Combine(PathToImages, "refmake.png"), "120"},
new string[] {"--shp", Path.Combine(PathToImages, "radarmake.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "highmake.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "lightmake.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "silomake.png"), "32"},
new string[] {"--shp", Path.Combine(PathToImages, "heavymake.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "starportmake.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "repairmake.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "researchmake.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "palacemake.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "cranea.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "craneh.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "craneo.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "windtrap_anim.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "missile_launch.png"), "96"},
new string[] {"--shp", Path.Combine(PathToImages, "mouse.png"), "48"},
new string[] {"--shp", Path.Combine(PathToImages, "spice0.png"), "32"},
};
var onError = (Action<string>)(s => Game.RunAfterTick(() =>
{
statusLabel.GetText = () => "Error: "+s;
backButton.IsDisabled = () => false;
retryButton.IsDisabled = () => false;
}));
var t = new Thread( _ =>
{
try
{
for (int i = 0; i < ExtractGameFiles.Length; i++)
{
progressBar.Percentage = i*100/ExtractGameFiles.Count();
statusLabel.GetText = () => "Extracting...";
Utility.Command.ConvertR8ToPng(ExtractGameFiles[i]);
}
for (int i = 0; i < SHPsToCreate.Length; i++)
{
progressBar.Percentage = i*100/SHPsToCreate.Count();
statusLabel.GetText = () => "Converting...";
Utility.Command.ConvertPngToShp(SHPsToCreate[i]);
File.Delete(SHPsToCreate[i][1]);
}
File.Delete(Path.Combine(PathToImages, "BASE.tsx"));
File.Copy("mods/d2k/tilesets/BASE.tsx", Path.Combine(PathToImages, "BASE.tsx"));
// this is ugly: a GUI will open and close immediately after some delay
Process.Start("OpenRA.TilesetBuilder.exe", Path.Combine(PathToImages, "BASE.png")+" 32 --export Content/d2k/Tilesets");
Game.RunAfterTick(() =>
{
progressBar.Percentage = 100;
statusLabel.GetText = () => "Extraction and conversion complete.";
backButton.IsDisabled = () => false;
});
}
catch
{
onError("Installation failed");
}
}) { IsBackground = true };
t.Start();
}
}
}

View File

@@ -0,0 +1,127 @@
#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.IO;
using System.Linq;
using System.Threading;
using OpenRA.FileFormats;
using OpenRA.FileFormats.Graphics;
using OpenRA.Widgets;
using OpenRA.Utility;
namespace OpenRA.Mods.D2k.Widgets.Logic
{
public class D2kInstallFromCDLogic
{
Widget panel;
ProgressBarWidget progressBar;
LabelWidget statusLabel;
ButtonWidget retryButton, backButton;
Widget installingContainer, insertDiskContainer;
[ObjectCreator.UseCtor]
public D2kInstallFromCDLogic(Widget widget)
{
panel = widget.Get("INSTALL_FROMCD_PANEL");
progressBar = panel.Get<ProgressBarWidget>("PROGRESS_BAR");
statusLabel = panel.Get<LabelWidget>("STATUS_LABEL");
backButton = panel.Get<ButtonWidget>("BACK_BUTTON");
backButton.OnClick = Ui.CloseWindow;
retryButton = panel.Get<ButtonWidget>("RETRY_BUTTON");
retryButton.OnClick = CheckForDisk;
installingContainer = panel.Get("INSTALLING");
insertDiskContainer = panel.Get("INSERT_DISK");
CheckForDisk();
}
public static bool IsValidDisk(string diskRoot)
{
var files = new string[][] {
new [] { diskRoot, "music", "ambush.aud" },
new [] { diskRoot, "setup", "setup.z" },
};
return files.All(f => File.Exists(f.Aggregate(Path.Combine)));
}
void CheckForDisk()
{
var path = InstallUtils.GetMountedDisk(IsValidDisk);
if (path != null)
Install(path);
else
{
insertDiskContainer.IsVisible = () => true;
installingContainer.IsVisible = () => false;
}
}
void Install(string source)
{
backButton.IsDisabled = () => true;
retryButton.IsDisabled = () => true;
insertDiskContainer.IsVisible = () => false;
installingContainer.IsVisible = () => true;
var dest = new string[] { Platform.SupportDir, "Content", "d2k", "Music" }.Aggregate(Path.Combine);
var copyFiles = new string[] { "music/ambush.aud", "music/arakatak.aud", "music/atregain.aud", "music/entordos.aud", "music/fightpwr.aud", "music/fremen.aud", "music/hark_bat.aud", "music/landsand.aud", "music/options.aud", "music/plotting.aud", "music/risehark.aud", "music/robotix.aud", "music/score.aud", "music/soldappr.aud", "music/spicesct.aud", "music/undercon.aud", "music/waitgame.aud" };
// TODO: won't work yet:
//var extractPackage = "setup/setup.z";
//var extractFiles = new string[] { "DATA.R8", "MOUSE.R8", "BLOXBASE.R8", "BLOXBAT.R8", "BLOXBGBS.R8", "BLOXICE.R8", "BLOXTREE.R8", "BLOXWAST.R8" };
var installCounter = 0;
var installTotal = copyFiles.Count(); //+ extractFiles.Count();
var onProgress = (Action<string>)(s => Game.RunAfterTick(() =>
{
progressBar.Percentage = installCounter*100/installTotal;
installCounter++;
statusLabel.GetText = () => s;
}));
var onError = (Action<string>)(s => Game.RunAfterTick(() =>
{
statusLabel.GetText = () => "Error: "+s;
backButton.IsDisabled = () => false;
retryButton.IsDisabled = () => false;
}));
var t = new Thread( _ =>
{
try
{
if (!InstallUtils.CopyFiles(source, copyFiles, dest, onProgress, onError))
return;
//if (!InstallUtils.ExtractFromPackage(source, extractPackage, extractFiles, dest, onProgress, onError))
// return;
Game.RunAfterTick(() =>
{
statusLabel.GetText = () => "Music has been copied.";
backButton.IsDisabled = () => false;
});
}
catch
{
onError("Installation failed");
}
}) { IsBackground = true };
t.Start();
}
}
}

View File

@@ -0,0 +1,38 @@
#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 OpenRA.Widgets;
namespace OpenRA.Mods.D2k.Widgets.Logic
{
public class D2kInstallLogic
{
[ObjectCreator.UseCtor]
public D2kInstallLogic(Widget widget, Dictionary<string,string> installData)
{
var panel = widget.Get("INSTALL_PANEL");
var args = new WidgetArgs()
{
{ "afterInstall", () => { Ui.CloseWindow(); Game.Exit(); } },
{ "installData", installData }
};
panel.Get<ButtonWidget>("COPY_BUTTON").OnClick = () =>
Ui.OpenWindow("INSTALL_FROMCD_PANEL", args);
panel.Get<ButtonWidget>("EXTRACT_BUTTON").OnClick = () =>
Ui.OpenWindow("EXTRACT_GAMEFILES_PANEL", args);
panel.Get<ButtonWidget>("QUIT_BUTTON").OnClick = Game.Exit;
}
}
}

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.AI
public readonly int SquadSize = 8;
public readonly int AssignRolesInterval = 20;
public readonly string RallypointTestBuilding = "fact"; // temporary hack to maintain previous rallypoint behavior.
public readonly string[] UnitQueues = { "Vehicle", "Infantry", "Plane" };
public readonly string[] UnitQueues = {"Vehicle", "Infantry", "Plane"};
public readonly bool ShouldRepairBuildings = true;
string IBotInfo.Name { get { return this.Name; } }
@@ -182,7 +182,7 @@ namespace OpenRA.Mods.RA.AI
ticks++;
if (ticks == 10)
if (ticks == 1)
DeployMcv(self);
if (ticks % feedbackTime == 0)
@@ -261,14 +261,14 @@ namespace OpenRA.Mods.RA.AI
assignRolesTicks = Info.AssignRolesInterval;
var newUnits = self.World.ActorsWithTrait<IMove>()
.Where(a => a.Actor.Owner == p && a.Actor.Info != Rules.Info["mcv"]
.Where(a => a.Actor.Owner == p && !a.Actor.HasTrait<BaseBuilding>()
&& !activeUnits.Contains(a.Actor))
.Select(a => a.Actor).ToArray();
foreach (var a in newUnits)
{
BotDebug("AI: Found a newly built unit");
if (a.Info == Rules.Info["harv"])
if (a.HasTrait<Harvester>())
world.IssueOrder( new Order( "Harvest", a, false ) );
else
unitsHangingAroundTheBase.Add(a);
@@ -419,7 +419,7 @@ namespace OpenRA.Mods.RA.AI
{
/* find our mcv and deploy it */
var mcv = self.World.Actors
.FirstOrDefault(a => a.Owner == p && a.Info == Rules.Info["mcv"]);
.FirstOrDefault(a => a.Owner == p && a.HasTrait<BaseBuilding>());
if (mcv != null)
{
@@ -427,7 +427,7 @@ namespace OpenRA.Mods.RA.AI
world.IssueOrder(new Order("DeployTransform", mcv, false));
}
else
BotDebug("AI: Can't find the MCV.");
BotDebug("AI: Can't find BaseBuildUnit.");
}
internal IEnumerable<ProductionQueue> FindQueues(string category)

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
#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
* 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.
@@ -21,8 +21,18 @@ namespace OpenRA.TilesetBuilder
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Console.WriteLine("{0} {1}",args[0], args[1]);
Application.Run(new Form1(args[0], int.Parse(args[1])));
//Console.WriteLine("{0} {1} {2} {3}",args[0], args[1], args[2], args[3]);
if (args.Length < 1)
{
Application.Run(new frmBuilder("", "0", false, "Tilesets"));
}
else
{
if (args.Contains("--export"))
Application.Run(new frmBuilder(args[0], args[1], true, args[3]));
else
Application.Run(new frmBuilder(args[0], args[1], false, "Tilesets"));
}
}
}
}

View File

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

View File

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

View File

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

View File

@@ -1,14 +1,4 @@
#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.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
@@ -18,14 +8,29 @@ namespace OpenRA.TilesetBuilder
class Surface : Control
{
public Bitmap Image;
private ImageList ImagesListControl;
public int[,] TerrainTypes;
public List<Template> Templates = new List<Template>();
public bool ShowTerrainTypes = true;
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);
@@ -43,17 +48,21 @@ namespace OpenRA.TilesetBuilder
/* 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);
//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)
@@ -120,5 +129,11 @@ namespace OpenRA.TilesetBuilder
}
}
}
private void InitializeComponent()
{
this.SuspendLayout();
this.ResumeLayout(false);
}
}
}

View File

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

View File

@@ -1,14 +1,4 @@
#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.Collections.Generic;
using System.Linq;
namespace OpenRA.TilesetBuilder

View File

@@ -0,0 +1,38 @@
Terrain:
TerrainType@Sand:
Type: Sand
AcceptSmudge: True
Color: 208, 192, 160
TerrainType@Rock:
Type: Rock
AcceptSmudge: True
Color: 206, 140, 66
TerrainType@Cliff:
Type: Cliff
AcceptSmudge: False
Color: 74, 41, 16
TerrainType@Rough:
Type: Rough
AcceptSmudge: True
Color: 88, 116, 116
TerrainType@Concrete:
Type: Concrete
AcceptSmudge: False
Color: 208, 192, 160
TerrainType@Dune:
Type: Dune
AcceptSmudge: True
Color: 239, 222, 140
TerrainType@Spice:
Type: Spice
AcceptSmudge: False
Color: 239, 148, 74
TerrainType@SpiceBlobs:
Type: SpiceBlobs
AcceptSmudge: False
Color: 206, 115, 66
TerrainType@Ice:
Type: Ice
AcceptSmudge: False
Color: 255, 255, 255
IsWater: True

View File

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

View File

@@ -0,0 +1,455 @@
#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;
surface1.Image.SetResolution(96, 96); // people keep being noobs about DPI, and GDI+ cares.
surface1.TerrainTypes = new int[surface1.Image.Width / size, surface1.Image.Height / size]; /* all passable by default */
surface1.Templates = new List<Template>();
surface1.Size = surface1.Image.Size;
surface1.Enabled = true;
Load();
}
}
public frmBuilder(string src, string tsize, bool AutoExport, string OutputDir)
{
InitializeComponent();
Dictionary<string, TerrainTypeInfo> DefTerrain = new Dictionary<string, TerrainTypeInfo>();
int size = int.Parse(tsize);
var yaml = MiniYaml.DictFromFile("OpenRA.TilesetBuilder/defaults.yaml");
DefTerrain = yaml["Terrain"].NodesDict.Values.Select(y => new TerrainTypeInfo(y)).ToDictionary(t => t.Type);
int i = 0;
surface1.icon = new Bitmap[DefTerrain.Keys.Count];
TerrainType = new TerrainTypeInfo[DefTerrain.Keys.Count];
surface1.Enabled = false;
foreach (var deftype in DefTerrain)
{
Bitmap icon = new Bitmap(16, 16);
int x, y;
// Loop through the images pixels to reset color.
for (x = 0; x < icon.Width; x++)
{
for (y = 0; y < icon.Height; y++)
{
Color newColor = deftype.Value.Color;
icon.SetPixel(x, y, newColor);
}
}
surface1.icon[i] = icon;
TerrainType[i] = deftype.Value;
ToolStripButton TerrainTypeButton = new ToolStripButton(deftype.Key, icon, TerrainTypeSelectorClicked);
TerrainTypeButton.ToolTipText = deftype.Key;
TerrainTypeButton.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
TerrainTypeButton.Tag = i.ToString();
i++;
tsTerrainTypes.Items.Add(TerrainTypeButton);
}
if (src.Length > 0)
{
srcfile = src;
this.size = size;
surface1.TileSize = size;
surface1.Image = (Bitmap)Image.FromFile(src);
surface1.Image.SetResolution(96, 96); // people keep being noobs about DPI, and GDI+ cares.
surface1.TerrainTypes = new int[surface1.Image.Width / size, surface1.Image.Height / size]; /* all passable by default */
surface1.Templates = new List<Template>();
surface1.Size = surface1.Image.Size;
surface1.Enabled = true;
Load();
}
else
{
CreateNewTileset();
}
if (AutoExport)
{
Export(OutputDir);
Application.Exit();
}
}
public new void Load()
{
try
{
var doc = new XmlDocument();
doc.Load(Path.ChangeExtension(srcfile, "tsx"));
foreach (var e in doc.SelectNodes("//name").OfType<XmlElement>())
txtTilesetName.Text = e.GetAttribute("value");
foreach (var e in doc.SelectNodes("//terrain").OfType<XmlElement>())
surface1.TerrainTypes[int.Parse(e.GetAttribute("x")),
int.Parse(e.GetAttribute("y"))] = int.Parse(e.GetAttribute("t"));
foreach (var e in doc.SelectNodes("//template").OfType<XmlElement>())
surface1.Templates.Add(new Template
{
Cells = e.SelectNodes("./cell").OfType<XmlElement>()
.Select(f => new int2(int.Parse(f.GetAttribute("x")), int.Parse(f.GetAttribute("y"))))
.ToDictionary(a => a, a => true)
});
}
catch { }
}
public void Save()
{
using (var w = XmlWriter.Create(Path.ChangeExtension(srcfile,"tsx"),
new XmlWriterSettings { Indent = true, IndentChars = " " }))
{
var tilesetName = txtTilesetName.Text;
if (tilesetName.Length < 1) { tilesetName = "Temperat"; }
w.WriteStartDocument();
w.WriteStartElement("tileset");
w.WriteStartElement("name");
w.WriteAttributeString("value", tilesetName);
w.WriteEndElement();
for( var i = 0; i <= surface1.TerrainTypes.GetUpperBound(0); i++ )
for( var j = 0; j <= surface1.TerrainTypes.GetUpperBound(1); j++ )
if (surface1.TerrainTypes[i, j] != 0)
{
w.WriteStartElement("terrain");
w.WriteAttributeString("x", i.ToString());
w.WriteAttributeString("y", j.ToString());
w.WriteAttributeString("t", surface1.TerrainTypes[i, j].ToString());
w.WriteEndElement();
}
foreach (var t in surface1.Templates)
{
w.WriteStartElement("template");
foreach (var c in t.Cells.Keys)
{
w.WriteStartElement("cell");
w.WriteAttributeString("x", c.X.ToString());
w.WriteAttributeString("y", c.Y.ToString());
w.WriteEndElement();
}
w.WriteEndElement();
}
w.WriteEndElement();
w.WriteEndDocument();
}
}
void TerrainTypeSelectorClicked(object sender, EventArgs e)
{
surface1.InputMode = (sender as ToolStripButton).Tag as string;
foreach (var tsb in (sender as ToolStripButton).Owner.Items.OfType<ToolStripButton>())
tsb.Checked = false;
(sender as ToolStripButton).Checked = true;
}
void SaveClicked(object sender, EventArgs e) { Save(); }
void ShowOverlaysClicked(object sender, EventArgs e)
{
if (surface1.ShowTerrainTypes == false)
{
surface1.ShowTerrainTypes = true;
this.Refresh();
}
else
{
surface1.ShowTerrainTypes = false;
this.Refresh();
}
}
void ExportClicked(object sender, EventArgs e)
{
Export("Tilesets");
}
string ExportPalette(List<Color> p, string file)
{
while (p.Count < 256) p.Add(Color.Black); // pad the palette out with extra blacks
var paletteData = p.Take(256).SelectMany(
c => new byte[] { (byte)(c.R >> 2), (byte)(c.G >> 2), (byte)(c.B >> 2) }).ToArray();
File.WriteAllBytes(file, paletteData);
return file;
}
string ExportTemplate(Template t, int n, string suffix, string dir)
{
var TileSize = size;
var filename = Path.Combine(dir, "t{0:00}{1}".F(n, suffix));
var totalTiles = t.Width * t.Height;
var ms = new MemoryStream();
using (var bw = new BinaryWriter(ms))
{
bw.Write((ushort)TileSize);
bw.Write((ushort)TileSize);
bw.Write((uint)totalTiles);
bw.Write((ushort)t.Width);
bw.Write((ushort)t.Height);
bw.Write((uint)0); // filesize placeholder
bw.Flush();
bw.Write((uint)ms.Position + 24); // image start
bw.Write((uint)0); // 0 (32bits)
bw.Write((uint)0x2c730f8c); // magic?
bw.Write((uint)0); // flags start
bw.Write((uint)0); // walk start
bw.Write((uint)0); // index start
Bitmap src = surface1.Image.Clone(new Rectangle(0, 0, surface1.Image.Width, surface1.Image.Height),
surface1.Image.PixelFormat);
var data = src.LockBits(new Rectangle(0, 0, src.Width, src.Height),
ImageLockMode.ReadOnly, src.PixelFormat);
unsafe
{
byte* p = (byte*)data.Scan0;
for (var v = 0; v < t.Height; v++)
for (var u = 0; u < t.Width; u++)
{
if (t.Cells.ContainsKey(new int2(u + t.Left, v + t.Top)))
{
byte* q = p + data.Stride * TileSize * (v + t.Top) + TileSize * (u + t.Left);
for (var j = 0; j < TileSize; j++)
for (var i = 0; i < TileSize; i++)
{
bw.Write(q[i + j * data.Stride]);
}
}
else
for (var x = 0; x < TileSize * TileSize; x++)
bw.Write((byte)0); /* todo: don't fill with air */
}
}
src.UnlockBits(data);
bw.Flush();
var indexStart = ms.Position;
for (var v = 0; v < t.Height; v++)
for (var u = 0; u < t.Width; u++)
bw.Write(t.Cells.ContainsKey(new int2(u + t.Left, v + t.Top))
? (byte)(u + t.Width * v)
: (byte)0xff);
bw.Flush();
var flagsStart = ms.Position;
for (var x = 0; x < totalTiles; x++ )
bw.Write((byte)0);
bw.Flush();
var walkStart = ms.Position;
for (var x = 0; x < totalTiles; x++)
bw.Write((byte)0x8);
var bytes = ms.ToArray();
Array.Copy(BitConverter.GetBytes((uint)bytes.Length), 0, bytes, 12, 4);
Array.Copy(BitConverter.GetBytes(flagsStart), 0, bytes, 28, 4);
Array.Copy(BitConverter.GetBytes(walkStart), 0, bytes, 32, 4);
Array.Copy(BitConverter.GetBytes(indexStart), 0, bytes, 36, 4);
File.WriteAllBytes(filename, bytes);
}
return filename;
}
public void Export (string OutputDir)
{
var dir = Path.Combine(Path.GetDirectoryName(srcfile), Platform.SupportDir+OutputDir);
Directory.CreateDirectory(dir);
var tilesetName = txtTilesetName.Text;
var tilesetID = txtID.Text;
var tilesetPalette = txtPal.Text;
var tilesetExt = txtExt.Text;
if (tilesetName.Length < 1) { tilesetName = "Temperat"; }
if (tilesetID.Length < 1) { tilesetID = "TEMPERAT"; }
if (tilesetPalette.Length < 1) { tilesetPalette = "temperat"; }
if (tilesetExt.Length < 1) { tilesetExt = ".tem,.shp"; }
// Create a Tileset definition
// Todo: Pull this info from the GUI
var tilesetFile = "";
//var mixFile = "";
tilesetFile = tilesetName.ToLower();
if (tilesetFile.Length < 8)
{
tilesetFile = tilesetName.ToLower() + ".yaml";
//mixFile = tilesetName.ToLower() + ".mix";
}
else
{
tilesetFile = tilesetName.ToLower().Substring(0, 8) + ".yaml";
//mixFile = tilesetName.ToLower().Substring(0, 8) + ".mix";
}
string[] Ext = tilesetExt.Split(',');
var tileset = new TileSet()
{
Name = tilesetName,
Id = tilesetID.ToUpper(),
TileSize = size,
Palette = tilesetPalette.ToLower(),
Extensions = new string[] { Ext[0], Ext[1] }
};
// List of files to add to the mix file
List<string> fileList = new List<string>();
// Export palette (use the embedded palette)
var p = surface1.Image.Palette.Entries.ToList();
fileList.Add(ExportPalette(p, Path.Combine(dir, tileset.Palette)));
// Export tile artwork
foreach (var t in surface1.Templates)
fileList.Add(ExportTemplate(t, surface1.Templates.IndexOf(t), tileset.Extensions.First(), dir));
// Add the terraintypes
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),
};
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");
}
private void toolStripContainer1_TopToolStripPanel_Click(object sender, EventArgs e)
{
}
private void surface1_Click(object sender, EventArgs e)
{
}
private void txtTilesetName_TextChanged(object sender, EventArgs e)
{
var tilesetFile = txtTilesetName.Text;
if (tilesetFile.Length > 8)
{
tilesetFile = tilesetFile.ToLower().Substring(0, 8);
}
txtID.Text = tilesetFile.ToUpper();
txtPal.Text = tilesetFile.ToLower() + ".pal";
if (tilesetFile.Length < 3)
{
txtExt.Text = ".tem,.shp";
}
else
{
txtExt.Text = "." + tilesetFile.ToLower().Substring(0, 3) + ",.shp";
}
}
private void toolStripButton15_Click(object sender, EventArgs e)
{
CreateNewTileset();
}
}
}

View File

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

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

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

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* 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,
@@ -21,7 +21,7 @@ using OpenRA.GameRules;
namespace OpenRA.Utility
{
static class Command
public static class Command
{
public static void Settings(string[] args)
{
@@ -104,6 +104,186 @@ namespace OpenRA.Utility
}
}
public static void ConvertR8ToPng(string[] args)
{
var srcImage = new R8Reader(File.OpenRead(args[1]));
var shouldRemap = args.Contains("--transparent");
var palette = Palette.Load(args[2], shouldRemap);
var startFrame = int.Parse(args[3]);
var endFrame = int.Parse(args[4]) + 1;
var filename = args[5];
var FrameCount = endFrame - startFrame;
var frame = srcImage[startFrame];
var bitmap = new Bitmap(frame.FrameWidth * FrameCount, frame.FrameHeight, PixelFormat.Format8bppIndexed);
bitmap.Palette = palette.AsSystemPalette();
int OffsetX = 0;
int OffsetY = 0;
int x = 0;
frame = srcImage[startFrame];
//TODO: This is not enough as the run and shoot animation are next to each other for each sequence in RA/CnC.
if (args.Contains("--infantry")) //resorting to RA/CnC compatible counter-clockwise frame order
{
endFrame = startFrame-1;
for (int e = 8; e < FrameCount+1; e=e+8) //assuming 8 facings each animation set
{
for (int f = startFrame+e-1; f > endFrame; f--)
{
OffsetX = frame.FrameWidth/2 - frame.Width/2;
OffsetY = frame.FrameHeight/2 - frame.Height/2;
Console.WriteLine("calculated OffsetX: {0}", OffsetX);
Console.WriteLine("calculated OffsetY: {0}", OffsetY);
var data = bitmap.LockBits(new Rectangle(x+OffsetX, 0+OffsetY, frame.Width, frame.Height), ImageLockMode.WriteOnly,
PixelFormat.Format8bppIndexed);
for (var i = 0; i < frame.Height; i++)
Marshal.Copy(frame.Image, i * frame.Width,
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Width);
bitmap.UnlockBits(data);
x += frame.FrameWidth;
frame = srcImage[f];
Console.WriteLine("f: {0}", f);
}
endFrame = startFrame+e-1;
frame = srcImage[startFrame+e];
Console.WriteLine("e: {0}", e);
Console.WriteLine("FrameCount: {0}", FrameCount);
}
}
else if (args.Contains("--vehicle")) //resorting to RA/CnC compatible counter-clockwise frame order
{
frame = srcImage[startFrame];
for (int f = endFrame-1; f > startFrame-1; f--)
{
OffsetX = frame.FrameWidth/2 - frame.OffsetX;
OffsetY = frame.FrameHeight/2 - frame.OffsetY;
Console.WriteLine("calculated OffsetX: {0}", OffsetX);
Console.WriteLine("calculated OffsetY: {0}", OffsetY);
var data = bitmap.LockBits(new Rectangle(x+OffsetX, 0+OffsetY, frame.Width, frame.Height), ImageLockMode.WriteOnly,
PixelFormat.Format8bppIndexed);
for (var i = 0; i < frame.Height; i++)
Marshal.Copy(frame.Image, i * frame.Width,
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Width);
bitmap.UnlockBits(data);
x += frame.FrameWidth;
frame = srcImage[f];
}
}
else if (args.Contains("--wall")) //complex resorting to RA/CnC compatible frame order
{
int[] D2kBrikFrameOrder = {1, 4, 2, 12, 5, 6, 16, 9, 3, 13, 7, 8, 14, 10, 11, 15, 17, 20, 18, 28, 21, 22, 32, 25, 19, 29, 23, 24, 30, 26, 27, 31};
foreach (int o in D2kBrikFrameOrder)
{
int f = startFrame -1 + o;
frame = srcImage[f];
if (frame.OffsetX < 0) { frame.OffsetX = 0 - frame.OffsetX; }
if (frame.OffsetY < 0) { frame.OffsetY = 0 - frame.OffsetY; }
OffsetX = 0 + frame.OffsetX;
OffsetY = frame.FrameHeight - frame.OffsetY;
Console.WriteLine("calculated OffsetX: {0}", OffsetX);
Console.WriteLine("calculated OffsetY: {0}", OffsetY);
var data = bitmap.LockBits(new Rectangle(x+OffsetX, 0+OffsetY, frame.Width, frame.Height), ImageLockMode.WriteOnly,
PixelFormat.Format8bppIndexed);
for (var i = 0; i < frame.Height; i++)
Marshal.Copy(frame.Image, i * frame.Width,
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Width);
bitmap.UnlockBits(data);
x += frame.FrameWidth;
}
}
else if (args.Contains("--tileset"))
{
int f = 0;
var tileset = new Bitmap(frame.FrameWidth * 20, frame.FrameHeight * 40, PixelFormat.Format8bppIndexed);
tileset.Palette = palette.AsSystemPalette();
for (int h = 0; h < 40; h++)
{
for (int w = 0; w < 20; w++)
{
if (h * 20 + w < FrameCount)
{
Console.WriteLine(f);
frame = srcImage[f];
var data = tileset.LockBits(new Rectangle(w * frame.Width, h * frame.Height, frame.Width, frame.Height),
ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
for (var i = 0; i < frame.Height; i++)
Marshal.Copy(frame.Image, i * frame.Width,
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Width);
tileset.UnlockBits(data);
f++;
}
}
}
bitmap = tileset;
}
else
{
for (int f = startFrame; f < endFrame; f++)
{
frame = srcImage[f];
if (args.Contains("--infantrydeath"))
{
OffsetX = frame.FrameWidth/2 - frame.Width/2;
OffsetY = frame.FrameHeight/2 - frame.Height/2;
}
else if (args.Contains("--projectile"))
{
OffsetX = frame.FrameWidth/2 - frame.OffsetX;
OffsetY = frame.FrameHeight/2 - frame.OffsetY;
}
else if (args.Contains("--building"))
{
if (frame.OffsetX < 0) { frame.OffsetX = 0 - frame.OffsetX; }
if (frame.OffsetY < 0) { frame.OffsetY = 0 - frame.OffsetY; }
OffsetX = 0 + frame.OffsetX;
OffsetY = frame.FrameHeight - frame.OffsetY;
}
Console.WriteLine("calculated OffsetX: {0}", OffsetX);
Console.WriteLine("calculated OffsetY: {0}", OffsetY);
var data = bitmap.LockBits(new Rectangle(x+OffsetX, 0+OffsetY, frame.Width, frame.Height), ImageLockMode.WriteOnly,
PixelFormat.Format8bppIndexed);
for (var i = 0; i < frame.Height; i++)
Marshal.Copy(frame.Image, i * frame.Width,
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Width);
bitmap.UnlockBits(data);
x += frame.FrameWidth;
}
}
bitmap.Save(filename+".png");
Console.WriteLine(filename+".png saved");
}
public static void ConvertTmpToPng(string[] args)
{
var mods = args[1].Split(',');

View File

@@ -54,6 +54,7 @@
<ItemGroup>
<Compile Include="Command.cs" />
<Compile Include="Program.cs" />
<Compile Include="R8Reader.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* 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,
@@ -27,6 +27,7 @@ namespace OpenRA.Utility
{ "--extract", Command.ExtractFiles },
{ "--tmp-png", Command.ConvertTmpToPng },
{ "--remap", Command.RemapShp },
{ "--r8", Command.ConvertR8ToPng },
};
if (args.Length == 0) { PrintUsage(); return; }
@@ -53,12 +54,13 @@ namespace OpenRA.Utility
{
Console.WriteLine("Usage: OpenRA.Utility.exe [OPTION] [ARGS]");
Console.WriteLine();
Console.WriteLine(" --settings-value KEY Get value of KEY from settings.yaml");
Console.WriteLine(" --shp PNGFILE FRAMEWIDTH Convert a PNG containing one or more frames to a SHP");
Console.WriteLine(" --png SHPFILE PALETTE [--transparent] Convert a SHP to a PNG containing all of its frames, optionally setting up transparency");
Console.WriteLine(" --extract MOD[,MOD]* FILES Extract files from mod packages");
Console.WriteLine(" --tmp-png MOD[,MOD]* THEATER FILES Extract terrain tiles to PNG");
Console.WriteLine(" --remap SRCMOD:PAL DESTMOD:PAL SRCSHP DESTSHP Remap SHPs to another palette");
Console.WriteLine(" --settings-value KEY Get value of KEY from settings.yaml");
Console.WriteLine(" --shp PNGFILE FRAMEWIDTH Convert a single PNG with multiple frames appended after another to a SHP");
Console.WriteLine(" --png SHPFILE PALETTE [--transparent] Convert a SHP to a PNG containing all of its frames, optionally setting up transparency");
Console.WriteLine(" --extract MOD[,MOD]* FILES Extract files from mod packages");
Console.WriteLine(" --tmp-png MOD[,MOD]* THEATER FILES Extract terrain tiles to PNG");
Console.WriteLine(" --remap SRCMOD:PAL DESTMOD:PAL SRCSHP DESTSHP Remap SHPs to another palette");
Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--transparent] [--infrantry] [--vehicle] [--projectile] [--building] [--wall] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type for correct offset to append multiple frames to one PNG named by filename optionally setting up transparency.");
}
static string GetNamedArg(string[] args, string arg)

139
OpenRA.Utility/R8Reader.cs Normal file
View File

@@ -0,0 +1,139 @@
#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.
* It also incorporates parts of http://code.google.com/p/dune2000plusone
* which is licensed under the BSD 2-Clause License.
*/
#endregion
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System;
namespace OpenRA.Utility
{
public class R8Image
{
public int Width;
public int Height;
public byte FrameWidth;
public byte FrameHeight;
public int ImageHandle;
public int PaletteHandle;
public byte[] Image;
public int OffsetX;
public int OffsetY;
public R8Image(BinaryReader reader, int Frame)
{
var offset = reader.BaseStream.Position;
var ID = reader.ReadByte(); // 0 = no data, 1 = picture with palette, 2 = picture with current palette
while (ID == 0)
ID = reader.ReadByte();
Width = reader.ReadInt32(); //Width of picture
Height = reader.ReadInt32(); //Height of picture
OffsetX = reader.ReadInt32(); //Offset on X axis from left border edge of virtual frame
OffsetY = reader.ReadInt32(); //Offset on Y axis from top border edge of virtual frame
ImageHandle = reader.ReadInt32(); // 0 = no picture
PaletteHandle = reader.ReadInt32(); // 0 = no palette
var Bpp = reader.ReadByte(); // Bits per Pixel
FrameHeight = reader.ReadByte(); // Height of virtual frame
FrameWidth = reader.ReadByte(); // Width of virtual frame
var Align = reader.ReadByte(); //Alignment on even border
Console.WriteLine("Offset: {0}",offset);
Console.WriteLine("ID: {0}",ID);
Console.WriteLine("Width: {0}",Width);
Console.WriteLine("Height: {0}",Height);
Console.WriteLine("OffsetX: {0}",OffsetX);
Console.WriteLine("OffsetY: {0}",OffsetY);
Console.WriteLine("ImageHandle: {0}",ImageHandle);
Console.WriteLine("PaletteHandle: {0}",PaletteHandle);
Console.WriteLine("Bpp: {0}",Bpp);
Console.WriteLine("FrameWidth: {0}",FrameWidth);
Console.WriteLine("FrameHeight: {0}",FrameHeight);
Console.WriteLine("Align: {0}",Align);
// Load image
if (Bpp == 8)
Image = new byte[Width*Height];
else
throw new InvalidDataException("Error: {0} bits per pixel are not supported.".F(Bpp));
if (ID == 1 && PaletteHandle != 0)
{
// read and ignore custom palette
reader.ReadInt32(); //Memory
reader.ReadInt32(); //Handle
for (int i = 0; i < Width*Height; i++)
Image[i] = reader.ReadByte();
for (int i = 0; i < 256; i++)
reader.ReadUInt16();
}
else if (ID == 2 && PaletteHandle != 0) // image with custom palette
{
for (int i = 0; i < Width*Height; i++)
Image[i] = reader.ReadByte();
}
else //standard palette or 16 Bpp
{
for (int i = 0; i < Width*Height; i++)
Image[i] = reader.ReadByte();
}
}
}
public class R8Reader : IEnumerable<R8Image>
{
private readonly List<R8Image> headers = new List<R8Image>();
public readonly int Frames;
public R8Reader( Stream stream )
{
BinaryReader reader = new BinaryReader( stream );
Frames = 0;
while (reader.BaseStream.Position < stream.Length)
{
try
{
Console.WriteLine("Frame {0}: {1}",Frames, reader.BaseStream.Position);
headers.Add( new R8Image( reader, Frames ) );
Frames++;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
break;
}
}
}
public R8Image this[ int index ]
{
get { return headers[ index ]; }
}
public IEnumerator<R8Image> GetEnumerator()
{
return headers.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}

View File

@@ -19,7 +19,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Renderer.Cg", "OpenR
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Editor", "OpenRA.Editor\OpenRA.Editor.csproj", "{00038B75-405B-44F5-8691-BD2546DBE224}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.TilesetBuilder", "OpenRA.TilesetBuilder\OpenRA.TilesetBuilder.csproj", "{56B1073B-AE14-499A-BB98-43A8DE9A39CA}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.TilesetBuilder", "OpenRA.TilesetBuilder\OpenRA.TilesetBuilder.csproj", "{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RALint", "RALint\RALint.csproj", "{F9FA4D9F-2302-470A-8A07-6E37F488C124}"
EndProject
@@ -31,6 +31,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Renderer.Gl", "OpenR
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Renderer.SdlCommon", "OpenRA.Renderer.SdlCommon\OpenRA.Renderer.SdlCommon.csproj", "{52FD9F0B-B209-4ED7-8A32-AC8033363263}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Mods.D2k", "OpenRA.Mods.D2k\OpenRA.Mods.D2k.csproj", "{C0B0465C-6BE2-409C-8770-3A9BF64C4344}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -62,14 +64,14 @@ Global
{0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Release|Any CPU.ActiveCfg = Release|x86
{0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Release|Mixed Platforms.ActiveCfg = Release|x86
{0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Release|Mixed Platforms.Build.0 = Release|x86
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Debug|Mixed Platforms.Build.0 = Debug|x86
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Release|Any CPU.Build.0 = Release|Any CPU
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Release|Mixed Platforms.ActiveCfg = Release|x86
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Release|Mixed Platforms.Build.0 = Release|x86
{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}.Release|Any CPU.Build.0 = Release|Any CPU
{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{1A8E50CC-EE32-4E57-8842-0C39C8EA7541}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2881135D-4D62-493E-8F83-5EEE92CCC6BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2881135D-4D62-493E-8F83-5EEE92CCC6BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2881135D-4D62-493E-8F83-5EEE92CCC6BE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -94,14 +96,6 @@ Global
{52FD9F0B-B209-4ED7-8A32-AC8033363263}.Release|Any CPU.Build.0 = Release|Any CPU
{52FD9F0B-B209-4ED7-8A32-AC8033363263}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{52FD9F0B-B209-4ED7-8A32-AC8033363263}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{56B1073B-AE14-499A-BB98-43A8DE9A39CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{56B1073B-AE14-499A-BB98-43A8DE9A39CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{56B1073B-AE14-499A-BB98-43A8DE9A39CA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{56B1073B-AE14-499A-BB98-43A8DE9A39CA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{56B1073B-AE14-499A-BB98-43A8DE9A39CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{56B1073B-AE14-499A-BB98-43A8DE9A39CA}.Release|Any CPU.Build.0 = Release|Any CPU
{56B1073B-AE14-499A-BB98-43A8DE9A39CA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{56B1073B-AE14-499A-BB98-43A8DE9A39CA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{67CF1A10-C5F6-48FA-B1A7-FE83BE4CE2CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{67CF1A10-C5F6-48FA-B1A7-FE83BE4CE2CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{67CF1A10-C5F6-48FA-B1A7-FE83BE4CE2CC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -118,6 +112,14 @@ Global
{BDAEAB25-991E-46A7-AF1E-4F0E03358DAA}.Release|Any CPU.Build.0 = Release|Any CPU
{BDAEAB25-991E-46A7-AF1E-4F0E03358DAA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{BDAEAB25-991E-46A7-AF1E-4F0E03358DAA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Release|Any CPU.Build.0 = Release|Any CPU
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{C0B0465C-6BE2-409C-8770-3A9BF64C4344}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{E9C01A96-C3E2-4772-825B-A740AC513D31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E9C01A96-C3E2-4772-825B-A740AC513D31}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9C01A96-C3E2-4772-825B-A740AC513D31}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -142,6 +144,14 @@ Global
{F9FA4D9F-2302-470A-8A07-6E37F488C124}.Release|Any CPU.Build.0 = Release|Any CPU
{F9FA4D9F-2302-470A-8A07-6E37F488C124}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{F9FA4D9F-2302-470A-8A07-6E37F488C124}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Debug|Mixed Platforms.Build.0 = Debug|x86
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Release|Any CPU.Build.0 = Release|Any CPU
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Release|Mixed Platforms.ActiveCfg = Release|x86
{230F65CE-A6DE-4235-8B38-13A3D606C7F7}.Release|Mixed Platforms.Build.0 = Release|x86
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = OpenRA.Game\OpenRA.Game.csproj

2
README
View File

@@ -2,4 +2,4 @@ OpenRA is a Libre/Free Real Time Strategy game engine supporting early Westwood
Distributed mods include a reimagining and updating of both the Red Alert and Command & Conquer multiplayer games.
Please read INSTALL on how to install an OpenRA development environment and HACKING for an overview of the engine.
Please read INSTALL on how to install an OpenRA development environment and HACKING for an overview of the engine.

99
doc/d2k formatspecs.txt Normal file
View File

@@ -0,0 +1,99 @@
Dune 2000 File Formats Specs. Specially for Programmers, who want make editor(s) for Dune 2000
Date: June 8, 2004
Author: Roman "Siberian GRemlin" Lotchenov
E-Mail #1: slos@scn.ru
E-Mail #2: SibGRem@rambler.ru
*****************************************************************************
Graphics Resources - .R8 and .R16
ImageHeader: Record
ID: Byte; //0 - no data, 1 - picture with pallete,
//2 - picture with current pallete.
Width: LongInt; //Width of picture
Height: LongInt; //Height of picture
X_Offset: LongInt; //Pictures offset on an axis X (from left border(edge) of virtual frame)
Y_Offset: LongInt; //Pictures offset on an axis Y (from top border(edge) of virtual frame)
ImageHandle: LongInt; //Handle to picture (in memory), 0 - image not have picture
PaletteHandle: LongInt; //Handle to pallete (in memory), 0 - image not have pallete,
//and using pallete from palette.bin filr. format - 256*RGB
Bpp: Byte; //Bpp of picture
FrameHeight: Byte; //Height of virtual frame, in which is displayed the picture
FrameWidth: Byte; //Width of virtual frame, in which is displayed the picture
Align: Byte; //Alignment on even border
End;
There is a matrix(array) of pixels by the size further:
For ImageHeader.Bpp = 8: ImageHeader.Width*ImageHeader.Height
For ImageHeader.Bpp = 16: ImageHeader.Width*ImageHeader.Height*2,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
If PaletteOffset <> 0 and ImageHeader.ID = 1, then there is Pallete Header and Pallete
PalHeader: Record
Memory: LongInt; //The memory under a palette was allocated (There is no importance in a file)
PalHandle:LongInt; //Handle to colors array (in memory), if 0 - then game showe error message
End;
Palette: array[0..511] of byte; //Pallete: 256 records of colors
//Color record: 2 bytes - 5 bit red component, 6 bit green component,
//5 bit blue component
Warning: In files UI_ENG.R16 and UI_ENG.R8, cuted ImageHeader.ID
Warning: Files UIBB.R8 and UIBB.R16 is only picture(pixels array) without any headers. Width=640, Height=400
*****************************************************************************
Sound Resources - [Dune2000 Folder]\Data\GameSFX\SOUND.RS
HeaderSize: LongInt; //Size of RSoundHeader
RSoundBody: array[0..56] of record
FileName: Char[0..12]; //File name
Zero: Byte; //Always $00
FileOffset: DWord; //Offfset of WAVE
FileSize: DWord; //Size of Wave file
end;
*****************************************************************************
Text Resources - [Dune2000 Folder]\Data\UI_Data\TEXT.UIB
STUIBHeader: record
Strs: DWord; //Count of strings
end;
STUIBBody: array[0..STUIHeader.Strs] of record
NameCount: Word; //Count of symbols(chars) in string name
StrName: array[0..STUIBBody.NameCount] of char; //String name
StrCount: word; //Count of symbols(chars) in string
Str: array[0..STUIBBody.StrCount] of char; //String
end;
*****************************************************************************
Fonts Resources - .FNT and .FPL
FontHeader of record
FontLoadedFlag: byte; //Must be $00
SpaceSize: byte; //Size of space (in pixels)
FirstSymbol: byte; //Code of first symbol in font
Interval: byte; //Size of interval between symbols (in pixels)
MaxHeight: byte; //Maximum height of symbol
Reserve: array[0..2] of byte; //not used
SymbolsHandle array[0..255] of LongInt; //Handle table to symbols in memory (There is no importance in a file)
end;
Symbols: array[0..255] of record
Width: LongInt; //Width of symbol
Heigth: LongInt; //Heigth of symvol
Pixels: array[1..(Symbols.Width*Symbols.Heigth)] of byte;
end;
Warning: FONTCOL.FNT using pallete from FONTCOL.FPL, Format - 256*RGBF, F=Junk!
Warning: [Dune2000 Folder]\Data\BIN\Font.BIN - is sybmol code(index) table(map)
*****************************************************************************
Thanks to:
Michail Beschetnov for begins in R8 file format description
Magic Team for help with R8 file format and for Dune 2000 Image Converter
be-lam0r for help with FNT, R16 and R8
-=*************=-
Please sorry for my english...

39
mods/d2k/TODO Normal file
View File

@@ -0,0 +1,39 @@
# make structures appear earlier when errecting from ground
# harvester harvest and unload frames missing (too few DATA.R8 frames in general)
# carryalls should automatically transport harvesters (needs complex logic)
# windtrap animations missing
# outpost animations missing
# construction yard crane animations missing
# welding animation (factories) missing
# chimney animation (refinery) missing
# add more spice tiles and make them fit
# add game logic for concrete plates (use terrain overlay from bridges/ressources)
# allow placing turrets on walls
# support separate turret sequence with RenderBuildingTurreted
# ornithocopter should flap (might need new RenderOrni code for proper animation)
# R8 converter needs infantry frame resorter
# add trooper
# add engineer
# add fremen
# add saboteur
# add deathhand missile (nuke)
# add sandworm
# add thumper which really attracts sandworms
# add neutral buildings: emperor palace, fremen siech, smugglers factory
# allow upgrades
# allow different EVA voices for each faction (currently Atreides only)
# add SOUND.TS .wav file extractor to RA.Utility.exe
# convert .wav to .aud or support .wav files for Dune 2000 sounds
# add muzzles and explosions with lightning (might need engine update)
# create a shellmap (currently just a blank placeholder)
# rework chrome UI, dialoges, tabs
# add sonic tank weapon (currently uses tesla)
# make deviator change the allegiance of ememy units (currently shoots rockets)
# 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
# support patch 1.06 gamefiles: DATA.R8 has more frames and currently fails to extract, also featuring new terrain with white houses and new unit: grenade thrower
# mouse cursor has no transparency and is a little pixelish

Binary file not shown.

Binary file not shown.

0
mods/palettetest/d2k.pal → mods/d2k/bits/d2k.pal Executable file → Normal file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

542
mods/d2k/chrome.yaml Normal file
View File

@@ -0,0 +1,542 @@
chrome-atreides: chrome-atreides.png
specialbin-top: 0,0,30,51
specialbin-middle: 0,51,30,51
specialbin-bottom: 0,153,30,39
moneybin: 192,0,320,32
tooltip-bg: 0,288,272,136
radar-atreides: chrome-atreides.png
left: 297,31,9,192
right: 498,31,9,192
bottom: 297,223,210,30
bg: 306,31,192,192
power-atreides: chrome-atreides.png
power-indicator: 187,4,4,7
palette-atreides: chrome-atreides.png
top: 297,288,201,9
dock-top: 498,274,14,23
bottom: 297,489,201,9
dock-bottom: 498,489,14,23
bg-0: 297,297,201,48
dock-0: 498,297,14,48
bg-1: 297,345,201,48
dock-1: 498,345,14,48
bg-2: 297,393,201,48
dock-2: 498,393,14,48
bg-3: 297,441,201,48
dock-3: 498,441,14,48
digits-atreides: chrome-atreides.png
0: 32,0,13,17
1: 45,0,13,17
2: 58,0,13,17
3: 71,0,13,17
4: 84,0,13,17
5: 97,0,13,17
6: 110,0,13,17
7: 123,0,13,17
8: 136,0,13,17
9: 149,0,13,17
chrome-harkonnen: chrome-harkonnen.png
specialbin-top: 0,0,30,51
specialbin-middle: 0,51,30,51
specialbin-bottom: 0,153,30,39
moneybin: 192,0,320,32
tooltip-bg: 0,288,272,136
radar-harkonnen: chrome-harkonnen.png
left: 297,31,9,192
right: 498,31,9,192
bottom: 297,223,210,30
bg: 306,31,192,192
power-indicator: 187,4,4,7
power-harkonnen: chrome-harkonnen.png
power-indicator: 187,4,4,7
palette-harkonnen: chrome-harkonnen.png
top: 297,288,201,9
dock-top: 498,274,14,23
bottom: 297,489,201,9
dock-bottom: 498,489,14,23
bg-0: 297,297,201,48
dock-0: 498,297,14,48
bg-1: 297,345,201,48
dock-1: 498,345,14,48
bg-2: 297,393,201,48
dock-2: 498,393,14,48
bg-3: 297,441,201,48
dock-3: 498,441,14,48
digits-harkonnen: chrome-harkonnen.png
0: 32,0,13,17
1: 45,0,13,17
2: 58,0,13,17
3: 71,0,13,17
4: 84,0,13,17
5: 97,0,13,17
6: 110,0,13,17
7: 123,0,13,17
8: 136,0,13,17
9: 149,0,13,17
chrome-ordos: chrome-ordos.png
specialbin-top: 0,0,30,51
specialbin-middle: 0,51,30,51
specialbin-bottom: 0,153,30,39
moneybin: 192,0,320,32
tooltip-bg: 0,288,272,136
radar-ordos: chrome-ordos.png
left: 297,31,9,192
right: 498,31,9,192
bottom: 297,223,210,30
bg: 306,31,192,192
power-ordos: chrome-ordos.png
power-indicator: 187,4,4,7
palette-ordos: chrome-ordos.png
top: 297,288,201,9
dock-top: 498,274,14,23
bottom: 297,489,201,9
dock-bottom: 498,489,14,23
bg-0: 297,297,201,48
dock-0: 498,297,14,48
bg-1: 297,345,201,48
dock-1: 498,345,14,48
bg-2: 297,393,201,48
dock-2: 498,393,14,48
bg-3: 297,441,201,48
dock-3: 498,441,14,48
digits-ordos: chrome-ordos.png
0: 32,0,13,17
1: 45,0,13,17
2: 58,0,13,17
3: 71,0,13,17
4: 84,0,13,17
5: 97,0,13,17
6: 110,0,13,17
7: 123,0,13,17
8: 136,0,13,17
9: 149,0,13,17
tabs-selected: tabs.png
atreides-Building: 0,0,27,41
atreides-Defense: 0,40,27,41
atreides-Infantry: 0,80,27,41
atreides-Vehicle: 0,120,27,41
atreides-Plane: 0,160,27,41
atreides-Ship: 0,200,27,41
harkonnen-Building: 80,0,27,41
harkonnen-Defense: 80,40,27,41
harkonnen-Infantry: 80,80,27,41
harkonnen-Vehicle: 80,120,27,41
harkonnen-Plane: 80,160,27,41
harkonnen-Ship: 80,200,27,41
ordos-Building: 0,0,27,41
ordos-Defense: 0,40,27,41
ordos-Infantry: 0,80,27,41
ordos-Vehicle: 0,120,27,41
ordos-Plane: 0,160,27,41
ordos-Ship: 0,200,27,41
tabs-ready: tabs.png
atreides-Building: 27,0,27,41
atreides-Defense: 27,40,27,41
atreides-Infantry: 27,80,27,41
atreides-Vehicle: 27,120,27,41
atreides-Plane: 27,160,27,41
atreides-Ship: 27,200,27,41
harkonnen-Building: 107,0,27,41
harkonnen-Defense: 107,40,27,41
harkonnen-Infantry: 107,80,27,41
harkonnen-Vehicle: 107,120,27,41
harkonnen-Plane: 107,160,27,41
harkonnen-Ship: 107,200,27,41
ordos-Building: 27,0,27,41
ordos-Defense: 27,40,27,41
ordos-Infantry: 27,80,27,41
ordos-Vehicle: 27,120,27,41
ordos-Plane: 27,160,27,41
ordos-Ship: 27,200,27,41
tabs-normal: tabs.png
atreides-Building: 54,0,27,41
atreides-Defense: 54,40,27,41
atreides-Infantry: 54,80,27,41
atreides-Vehicle: 54,120,27,41
atreides-Plane: 54,160,27,41
atreides-Ship: 54,200,27,41
harkonnen-Building: 134,0,27,41
harkonnen-Defense: 134,40,27,41
harkonnen-Infantry: 134,80,27,41
harkonnen-Vehicle: 134,120,27,41
harkonnen-Plane: 134,160,27,41
harkonnen-Ship: 134,200,27,41
ordos-Building: 54,0,27,41
ordos-Defense: 54,40,27,41
ordos-Infantry: 54,80,27,41
ordos-Vehicle: 54,120,27,41
ordos-Plane: 54,160,27,41
ordos-Ship: 54,200,27,41
flags: buttons.png
atreides: 0,84,21,23
harkonnen: 22,84,23,23
ordos: 45,84,22,23
random: 67,84,23,23
spectator: 67,84,23,23
dialog2: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1
dialog3: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
dialog4: dialog.png
border-t: 773,0,52,6
border-b: 773,58,52,6
border-l: 768,5,6,54
border-r: 826,5,6,54
corner-tl: 768,0,6,6
corner-tr: 826,0,6,6
corner-bl: 768,58,6,6
corner-br: 826,58,6,6
background: 773,5,52,52
dialog: dialog.png
background: 0,0,480,480
border-r: 489,0,9,192
border-l: 480,0,9,192
border-b: 0,489,191,9
border-t: 0,480,191,9
corner-tl: 191,480,9,9
corner-tr: 200,480,9,9
corner-bl: 191,489,9,9
corner-br: 200,489,9,9
spawnpoints: spawnpoints.png
unowned: 528,128,16,16
owned: 512,128,16,16
strategic: strategic.png
unowned: 0,0,32,32
critical_unowned: 0,32,32,32
enemy_owned: 32,32,32,32
player_owned: 96,0,32,32
sell-button: buttons.png
normal: 0,0,34,28
pressed: 34,0,34,28
disabled: 68,0,34,28
repair-button: buttons.png
normal: 0,28,34,28
pressed: 34,28,34,28
disabled: 68,28,34,28
power-button: buttons.png
normal: 0,56,34,28
pressed: 34,56,34,28
disabled: 68,56,34,28
music: musicplayer.png
pause: 0,0,25,25
stop: 28,0,25,25
play: 56,0,25,25
next: 84,0,25,25
prev: 112,0,25,25
scrollbar: buttons.png
down_arrow: 16,112,16,16
down_pressed: 16,112,16,16
up_arrow: 32,112,16,16
up_pressed: 32,112,16,16
# A copy of dialog3
progressbar-bg: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
# A copy of dialog2
progressbar-thumb: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1
# A copy of dialog2
button: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1
# A copy of dialog2
button-hover: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1
# A copy of dialog2
button-disabled: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1
# A copy of dialog3
button-pressed: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
scrollthumb: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1
# A copy of dialog2
scrollthumb-hover: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1
# A copy of dialog2
scrollthumb-disabled: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1
# A copy of dialog3
scrollthumb-pressed: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1
# A copy of dialog3
textfield: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
# A copy of dialog3
textfield-hover: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
# A copy of dialog3
textfield-disabled: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
# A copy of dialog3
textfield-focused: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
# A copy of dialog3
scrollpanel-bg: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
# A copy of dialog2
slider-tick: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1
# A copy of dialog3
slider-track: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
# A copy of dialog3
checkbox: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
checkbox-bits: buttons.png
checked: 0,112,16,16
# A copy of dialog3
checkbox-hover: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
# A copy of dialog3
checkbox-disabled: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
# A copy of dialog3
scrollitem-selected: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1
# A copy of dialog2
scrollitem-hover: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1

View File

@@ -0,0 +1,76 @@
Background@CHEATS_PANEL:
Logic:CheatsLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:350
Height:420
Visible:true
Children:
Label@LABEL_TITLE:
X:(PARENT_RIGHT - WIDTH)/2
Y:20
Width:250
Height:25
Text:Developer Mode
Align:Center
Checkbox@DISABLE_SHROUD:
X:30
Y:50
Height:20
Width:PARENT_RIGHT - 30
Text:Disable Shroud
Button@GIVE_EXPLORATION
X:30
Y:80
Width:200
Height:20
Text: Give Exploration
Checkbox@SHOW_UNIT_PATHS:
X:30
Y:110
Width:PARENT_RIGHT - 30
Height:20
Text:Show Unit Paths
Button@GIVE_CASH:
X:30
Y:140
Width:200
Height:20
Text: Give Cash
Checkbox@INSTANT_BUILD:
X:30
Y:170
Width:PARENT_RIGHT - 30
Height:20
Text:Instant Build Speed
Checkbox@INSTANT_CHARGE:
X:30
Y:200
Width:PARENT_RIGHT - 30
Height:20
Text:Support Powers Charge Instantly
Checkbox@ENABLE_TECH:
X:30
Y:230
Width:PARENT_RIGHT - 30
Height:20
Text:Build Everything
Checkbox@UNLIMITED_POWER:
X:30
Y:260
Width:PARENT_RIGHT - 30
Height:20
Text:Unlimited Power
Checkbox@BUILD_ANYWHERE:
X:30
Y:290
Width:PARENT_RIGHT - 30
Height:20
Text:Build Anywhere
Button@CLOSE:
X:30
Y:360
Width:PARENT_RIGHT - 60
Height:20
Text:Close
Key:escape

View File

@@ -0,0 +1,78 @@
Background@CREATESERVER_BG:
Logic:ServerCreationLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:400
Height:240
Children:
Label@LABEL_TITLE:
X:0
Y:20
Width:400
Height:25
Text:Create Server
Align:Center
Font:Bold
Label@SERVER_NAME_LABEL:
X:50
Y:59
Width:95
Height:25
Align: Right
Text:Game Title:
TextField@SERVER_NAME:
X:150
Y:60
Width:210
MaxLength:50
Height:25
Text:OpenRA Game
Label@EXTERNAL_PORT_LABEL:
X:50
Y:94
Width:95
Height:25
Align: Right
Text:External Port:
TextField@EXTERNAL_PORT:
X:150
Y:95
Width:50
MaxLength:5
Height:25
Text:OpenRA Game
Label@LISTEN_PORT_LABEL:
X:210
Y:94
Width:95
Height:25
Align: Right
Text:Listen Port:
TextField@LISTEN_PORT:
X:310
Y:95
Width:50
MaxLength:5
Height:25
Checkbox@ADVERTISE_CHECKBOX:
X:165
Y:130
Width:300
Height:20
Text:Advertise game Online
Button@CREATE_BUTTON:
X:130
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Create
Font:Bold
Key:return
Button@BACK_BUTTON:
X:260
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Cancel
Font:Bold
Key:escape

View File

@@ -0,0 +1,50 @@
ScrollPanel@LABEL_DROPDOWN_TEMPLATE:
Width:DROPDOWN_WIDTH
Children:
ScrollItem@TEMPLATE:
Width:PARENT_RIGHT-27
Height:25
X:2
Y:0
Visible:false
Children:
Label@LABEL:
X:10
Width:PARENT_RIGHT-20
Height:25
ScrollPanel@RACE_DROPDOWN_TEMPLATE:
Width:DROPDOWN_WIDTH
Children:
ScrollItem@TEMPLATE:
Width:PARENT_RIGHT-27
Height:25
X:2
Y:0
Visible:false
Children:
Image@FLAG:
X:5
Y:5
Width:30
Height:15
Label@LABEL:
X:40
Width:60
Height:25
ScrollPanel@TEAM_DROPDOWN_TEMPLATE:
Width:DROPDOWN_WIDTH
Children:
ScrollItem@TEMPLATE:
Width:PARENT_RIGHT-27
Height:25
X:2
Y:0
Visible:false
Children:
Label@LABEL:
X:0
Width:PARENT_RIGHT
Height:25
Align:Center

View File

@@ -0,0 +1,208 @@
Background@INSTALL_PANEL:
Logic:D2kInstallLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:600
Height:300
Children:
Label@TITLE:
X:0
Y:20
Width:PARENT_RIGHT
Height:25
Text:Content files missing
Align:Center
Font:Bold
Label@DESC1:
X:0
Y:50
Width:PARENT_RIGHT
Height:25
Text:This is the work in progress Dune 2000 mod.
Align:Center
Label@DESC2:
X:0
Y:70
Width:PARENT_RIGHT
Height:25
Text:It requires the original Dune 2000 (and still some Red Alert) game content.
Align:Center
Label@DESC4:
X:0
Y:110
Width:PARENT_RIGHT
Height:25
Text:You need to copy "Dune 2000/Data/GAMESFX" folder and "Dune 2000/DATA/*.R8" files
Align:Center
Label@DESC5:
X:0
Y:130
Width:PARENT_RIGHT
Height:25
Text: from your local Dune 2000 installation to ~/.openra/Content/d2k/ (Linux)
Align:Center
Label@DESC6:
X:0
Y:150
Width:PARENT_RIGHT
Height:25
Text: or "My Documents/OpenRA/Content/d2k/" (Windows) and click "Extract Data".
Align:Center
Label@DESC7:
X:0
Y:190
Width:PARENT_RIGHT
Height:25
Text: Put in your Dune 2000 CD and click "Copy Music" to (optionally) download the tracks.
Align:Center
Button@EXTRACT_BUTTON:
X:PARENT_RIGHT - 280
Y:PARENT_BOTTOM - 45
Width:100
Height:25
Text:Extract Data
Font:Bold
Button@COPY_BUTTON:
X:PARENT_RIGHT - 420
Y:PARENT_BOTTOM - 45
Width:90
Height:25
Text:Copy Music
Font:Bold
Button@QUIT_BUTTON:
X:PARENT_RIGHT - 140
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Quit
Font:Bold
Background@INSTALL_FROMCD_PANEL:
Logic:D2kInstallFromCDLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:500
Height:160
Children:
Label@TITLE:
X:0
Y:20
Width:PARENT_RIGHT
Height:25
Text:Installing (Music) from CD
Align:Center
Font:Bold
Container@INSTALLING:
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Visible: false
Children:
ProgressBar@PROGRESS_BAR:
X:50
Y:55
Width:PARENT_RIGHT - 100
Height:25
Label@STATUS_LABEL:
X:50
Y:80
Width:PARENT_RIGHT - 100
Height:25
Align:Left
Container@INSERT_DISK:
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Visible: false
Children:
Label@INFO:
Y:50
Width:PARENT_RIGHT
Height:25
Text:Disk not found.
Align:Center
Label@INFO2:
Y:70
Width:PARENT_RIGHT
Height:25
Text:Please insert the Dune 2000 install CDs then click Retry.
Align:Center
Button@RETRY_BUTTON:
X:PARENT_RIGHT - 280
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Retry
Font:Bold
Key:return
Button@BACK_BUTTON:
X:PARENT_RIGHT - 140
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Back
Font:Bold
Key:escape
Background@EXTRACT_GAMEFILES_PANEL:
Logic:D2kExtractGameFilesLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:500
Height:160
Children:
Label@TITLE:
X:0
Y:20
Width:PARENT_RIGHT
Height:25
Text:Extracting and Converting Dune 2000 Gamefiles
Align:Center
Font:Bold
Container@EXTRACTING:
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Visible: false
Children:
ProgressBar@PROGRESS_BAR:
X:50
Y:55
Width:PARENT_RIGHT - 100
Height:25
Label@STATUS_LABEL:
X:50
Y:80
Width:PARENT_RIGHT - 100
Height:25
Align:Left
Container@COPY_FILES:
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Visible: false
Children:
Label@INFO:
Y:50
Width:PARENT_RIGHT
Height:25
Text:Gamefiles not not found.
Align:Center
Label@INFO2:
Y:70
Width:PARENT_RIGHT
Height:25
Text:Please copy the Data/*.R8 files from your Dune 2000 installation to OpenRAs Content/d2k directory then click Retry.
Align:Center
Button@RETRY_BUTTON:
X:PARENT_RIGHT - 280
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Retry
Font:Bold
Key:return
Button@BACK_BUTTON:
X:PARENT_RIGHT - 140
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Back
Font:Bold
Key:escape

View File

@@ -1,455 +0,0 @@
Background@SERVER_LOBBY:
Delegate:LobbyDelegate
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:800
Height:600
Visible:false
Children:
Label@LOBBY_TITLE:
X:0
Y:20
Align:Center
Width:800
Height:20
Bold:True
Text:OpenRA Multiplayer Lobby
Background@LOBBY_MAP_BG:
X:PARENT_RIGHT-268
Y:39
Width:252
Height:252
Background:dialog3
Children:
MapPreview@LOBBY_MAP_PREVIEW:
X:4
Y:4
Width:244
Height:244
Container@PLAYERS:
X:20
Y:75
Width:500
Height:200
Children:
Container@TEMPLATE_LOCAL:
X:0
Y:0
Width:500
Height:30
Visible:false
Children:
TextField@NAME:
Text:Name
Width:139
Height:25
X:0
Y:0
MaxLength:16
Button@COLOR:
Width:65
Height:25
X:159
Y:0
Children:
ColorBlock@COLORBLOCK:
X:5
Y:7
Width:PARENT_RIGHT-10
Height:PARENT_BOTTOM-12
Button@FACTION:
Width:110
Height:25
X:244
Y:0
Children:
Image@FACTIONFLAG:
Width:30
Height:15
X:5
Y:5
Label@FACTIONNAME:
Text:Faction
Width:60
Height:25
X:40
Y:0
Button@TEAM:
Text:Team
Width:25
Height:25
X:374
Y:0
Checkbox@STATUS:
X:455
Y:2
Width:20
Height:20
Container@TEMPLATE_REMOTE:
X:0
Y:0
Width:500
Height:30
Visible:false
Children:
Label@NAME:
Text:Name
Width:139
Height:25
X:0
Y:0
ColorBlock@COLOR:
X:164
Y:7
Width:55
Height:13
Label@FACTION:
Width:110
Height:25
X:244
Y:0
Children:
Image@FACTIONFLAG:
Width:30
Height:15
X:5
Y:5
Label@FACTIONNAME:
Text:Faction
Width:60
Height:25
X:40
Y:0
Label@TEAM:
Text:Team
Width:70
Height:25
X:351
Y:0
Align:Center
Bold: false
Checkbox@STATUS:
X:455
Y:2
Width:20
Height:20
Container@TEMPLATE_EMPTY:
X:0
Y:0
Width:500
Height:30
Visible:false
Children:
Label@NAME:
Text:Name
Width:139
Height:25
X:0
Y:0
Button@JOIN:
Text:Play in this slot
Width:PARENT_RIGHT - 160
Height:25
X:160
Y:0
Container@TEMPLATE_EMPTY_HOST:
X:0
Y:0
Width:500
Height:30
Visible:false
Children:
Button@NAME: -- TODO: replace with dropdown
Text:Name
Width:155
Height:25
X:0
Y:0
Button@JOIN:
Text:Play in this slot
Width:PARENT_RIGHT - 160
Height:25
X:160
Y:0
Container@LABEL_CONTAINER:
X:30
Y:45
Children:
Label@LABEL_LOBBY_NAME:
Width:139
Height:25
X:0
Y:0
Text:Name
Align:Center
Bold:True
Label@LABEL_LOBBY_COLOR:
Width:65
Height:25
X:159
Y:0
Text:Color
Align:Center
Bold:True
Label@LABEL_LOBBY_FACTION:
Width:110
Height:25
X:244
Y:0
Text:Faction
Align:Center
Bold:True
Label@LABEL_LOBBY_TEAM:
Width:70
Height:25
X:351
Y:0
Text:Team
Align:Center
Bold:True
Label@LABEL_LOBBY_STATUS:
X:432
Y:0
Width:70
Height:25
Text:Ready
Align:Center
Bold:True
Button@CHANGEMAP_BUTTON:
Visible:true
X:PARENT_RIGHT-160
Y:PARENT_BOTTOM-269
Width:120
Height:25
Text:Change Map
Bold:True
ChatDisplay@CHAT_DISPLAY:
Visible:true
X:20
Notification:
Height:230
Y:PARENT_BOTTOM - 289
Width:PARENT_RIGHT - 200
Label@LABEL_CHATTYPE:
Width:65
Height:25
X:0
Y:PARENT_BOTTOM - 50
Text:Chat:
Align:Right
TextField@CHAT_TEXTFIELD:
Visible:true
X:70
Y:PARENT_BOTTOM - 49
Width:550
Height:25
Button@START_GAME_BUTTON:
Visible:true
X:PARENT_RIGHT-160
Y:PARENT_BOTTOM-49
Width:120
Height:25
Text:Start Game
Bold:True
Button@DISCONNECT_BUTTON:
Visible:true
X:PARENT_RIGHT-160
Y:PARENT_BOTTOM-189
Width:120
Height:25
Text:Disconnect
Bold:True
Checkbox@LOCKTEAMS_CHECKBOX:
Visible: true
X: PARENT_RIGHT-160
Y: PARENT_BOTTOM-229
Width: 80
Height: 20
Text: Lock Teams
Background@COLOR_CHOOSER:
Width:500
Height:195
X:(WINDOW_RIGHT - WIDTH)/2 - PARENT_LEFT
Y:100
Visible:false
Children:
Button@BUTTON_OK:
X:PARENT_RIGHT - 180
Y:PARENT_BOTTOM - 45
Width:160
Height:25
Text:Ok
Bold:True
ShpImage@MCV:
X:PARENT_RIGHT - 90
Y:20
Image:mcv
Frame:20
Palette:colorpicker
# ShpImage@FACT:
# X:PARENT_RIGHT - 100
# Y:70
# Image:fact
# Palette:colorpicker
Label@HUE_LABEL:
X:0
Y:30
Width:110
Height:20
Align: Right
Text: Hue:
Slider@HUE:
X:120
Y:30
Width:260
Height:20
Ticks:5
Label@SAT_LABEL:
X:0
Y:60
Width:110
Height:20
Align: Right
Text: Saturation:
Slider@SAT:
X:120
Y:60
Width:260
Height:20
Ticks:5
Label@LUM_LABEL:
X:0
Y:90
Width:110
Height:20
Align: Right
Text: Brightness:
Slider@LUM:
X:120
Y:90
Width:260
Height:20
Ticks:5
Label@RANGE_LABEL:
X:0
Y:120
Width:110
Height:20
Align: Right
Text: Range:
Slider@RANGE:
X:120
Y:120
Width:260
Height:20
Ticks:5
Background@MAP_CHOOSER:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Delegate:MapChooserDelegate
Width:800
Height:600
Visible:false
Children:
Label@MAPCHOOSER_TITLE:
X:0
Y:20
Align:Center
Width:800
Height:20
Text:Choose Map
Bold:True
ScrollPanel@MAP_LIST:
X:20
Y:50
Width:500
Height:480
Children:
Label@MAP_TEMPLATE:
Width:PARENT_RIGHT-28
Height:25
X:2
Y:0
Visible:false
Background@MAPCHOOSER_MAP_BG:
X:PARENT_RIGHT-268
Y:50
Width:252
Height:252
Background:dialog3
Children:
MapPreview@MAPCHOOSER_MAP_PREVIEW:
X:4
Y:4
Width:244
Height:244
Label@CURMAP_TITLE_LABEL:
X:PARENT_RIGHT - 200 - WIDTH
Y:311
Align:Right
Width:70
Height:20
Text:Title:
Bold:True
Label@CURMAP_TITLE:
X:PARENT_RIGHT - 195
Y:311
Align:Left
Width:70
Height:20
Label@CURMAP_SIZE_LABEL:
X:PARENT_RIGHT - 200 - WIDTH
Y:331
Align:Right
Width:70
Height:20
Text:Size:
Bold:True
Label@CURMAP_SIZE:
X:PARENT_RIGHT - 195
Y:331
Align:Left
Width:70
Height:20
Label@CURMAP_THEATER_LABEL:
X:PARENT_RIGHT - 200 - WIDTH
Y:351
Align:Right
Width:70
Height:20
Text:Theater:
Bold:True
Label@CURMAP_THEATER:
X:PARENT_RIGHT - 195
Y:351
Align:Left
Width:70
Height:20
Label@CURMAP_PLAYERS_LABEL:
X:PARENT_RIGHT - 200 - WIDTH
Y:371
Align:Right
Width:70
Height:20
Text:Players:
Bold:True
Label@CURMAP_PLAYERS:
X:PARENT_RIGHT - 195
Y:371
Align:Left
Width:70
Height:20
Button@BUTTON_OK:
X:PARENT_RIGHT - 360
Y:PARENT_BOTTOM - 45
Width:160
Height:25
Text:Ok
Bold:True
Button@BUTTON_CANCEL:
X:PARENT_RIGHT - 180
Y:PARENT_BOTTOM - 45
Width:160
Height:25
Text:Cancel
Bold:True

View File

@@ -1,8 +1,7 @@
Container@INGAME_ROOT:
Delegate:IngameChromeDelegate
Visible:false
Logic:IngameChromeLogic
Children:
WorldInteractionController:
WorldInteractionController@INTERACTION_CONTROLLER:
X:0
Y:0
Width:WINDOW_RIGHT
@@ -12,9 +11,17 @@ Container@INGAME_ROOT:
Y:0
Width:WINDOW_RIGHT
Height:WINDOW_BOTTOM
WorldCommand:
X:0
Y:0
Width:WINDOW_RIGHT
Height:WINDOW_BOTTOM
Timer@GAME_TIMER:
X: WINDOW_RIGHT/2
Y: 10
Y: 0-10
StrategicProgress@STRATEGIC_PROGRESS:
X: WINDOW_RIGHT/2
Y: 40
Background@POSTGAME_BG:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
@@ -25,11 +32,24 @@ Container@INGAME_ROOT:
Children:
Label@TEXT:
X:(PARENT_RIGHT - WIDTH)/2
Y:(PARENT_BOTTOM - HEIGHT)/2
Y:0
Width:200
Height:40
Height:80
Align:Center
Bold:True
Button@POSTGAME_OBSERVE:
X:10
Y:(PARENT_BOTTOM - HEIGHT - 10)
Width:150
Height:25
Font:Bold
Text:Observe
Button@POSTGAME_QUIT:
X:(PARENT_RIGHT - WIDTH - 10)
Y:(PARENT_BOTTOM - HEIGHT - 10)
Width:150
Height:25
Font:Bold
Text:Leave
SupportPowerBin@INGAME_POWERS_BIN:
X:0
Y:25
@@ -44,24 +64,25 @@ Container@INGAME_ROOT:
Width:160
Height:25
Text:Options
Bold:True
Font:Bold
Key: escape
Button@INGAME_DIPLOMACY_BUTTON:
X:162
Y:0
Width:160
Height:25
Text:Diplomacy
Bold:True
WorldTooltip@INGAME_WORLD_TOOLTIP:
Button@INGAME_DEVELOPERMODE_BUTTON:
Font:Bold
Button@CHEATS_BUTTON:
X:324
Y:0
Width:160
Height:25
Text:Developer Mode
Text:Cheats
Visible:false
Bold:True
Font:Bold
RadarBin@INGAME_RADAR_BIN:
WorldInteractionController:INTERACTION_CONTROLLER
PowerBin@INGAME_POWER_BIN:
MoneyBin@INGAME_MONEY_BIN:
X:WINDOW_RIGHT - WIDTH
@@ -70,7 +91,7 @@ Container@INGAME_ROOT:
Height: 32
Children:
OrderButton@SELL:
Delegate:OrderButtonsChromeDelegate
Logic:OrderButtonsChromeLogic
X:3
Y:0
Width:30
@@ -79,7 +100,7 @@ Container@INGAME_ROOT:
Description:Sell
LongDesc:Sell buildings, reclaiming a \nproportion of their build cost
OrderButton@POWER_DOWN:
Delegate:OrderButtonsChromeDelegate
Logic:OrderButtonsChromeLogic
X:39
Y:0
Width:30
@@ -88,7 +109,7 @@ Container@INGAME_ROOT:
Description:Powerdown
LongDesc:Disable unneeded structures so their \npower can be used elsewhere
OrderButton@REPAIR:
Delegate:OrderButtonsChromeDelegate
Logic:OrderButtonsChromeLogic
X:75
Y:0
Width:30
@@ -101,7 +122,7 @@ Container@INGAME_ROOT:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:300
Height:320
Height:295
Visible:false
Children:
Label@LABEL_TITLE:
@@ -111,51 +132,45 @@ Container@INGAME_ROOT:
Height:25
Text:Options
Align:Center
Bold:True
Font:Bold
Button@RESUME:
X:(PARENT_RIGHT - WIDTH)/2
Y:60
Width:160
Height:25
Text:Resume
Bold:True
Font:Bold
Key:escape
Button@SETTINGS:
X:(PARENT_RIGHT - WIDTH)/2
Y:100
Width:160
Height:25
Text:Settings
Bold:True
Font:Bold
Button@MUSIC:
X:(PARENT_RIGHT - WIDTH)/2
Y:140
Width:160
Height:25
Text:Music
Bold:True
Font:Bold
Button@SURRENDER:
X:(PARENT_RIGHT - WIDTH)/2
Y:180
Width:160
Height:25
Text:Surrender
Bold:True
Font:Bold
Button@DISCONNECT:
X:(PARENT_RIGHT - WIDTH)/2
Y:220
Width:160
Height:25
Text:Disconnect
Bold:True
Button@QUIT:
X:(PARENT_RIGHT - WIDTH)/2
Y:260
Width:160
Height:25
Text:Quit
Bold:True
Text:Abort Mission
Font:Bold
Background@DIPLOMACY_BG:
Delegate:DiplomacyDelegate
Logic:DiplomacyLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:450
@@ -169,7 +184,148 @@ Container@INGAME_ROOT:
Height:25
Text:Diplomacy
Align:Center
Bold:True
Font:Bold
ChatDisplay@CHAT_DISPLAY:
X:250
Y:WINDOW_BOTTOM - HEIGHT - 30
Width: 760
Height: 200
DrawBackground: False
RemoveTime:250
UseContrast: yes
ChatEntry@CHAT_ENTRY:
X:250
Y:WINDOW_BOTTOM - HEIGHT
Width: 760
Height: 30
UseContrast: yes
Background@PERF_BG:
ClickThrough:true
Background:dialog4
Logic:PerfDebugLogic
X:10
Y:WINDOW_BOTTOM - 250
Width: 210
Height: 250
Children:
PerfGraph@GRAPH:
X:5
Y:5
Width:200
Height:200
Label@TEXT:
X:20
Y:205
Width:170
Height:40
Container@OBSERVER_ROOT:
Visible:true
Logic:IngameObserverChromeLogic
Children:
WorldInteractionController@INTERACTION_CONTROLLER:
X:0
Y:0
Width:WINDOW_RIGHT
Height:WINDOW_BOTTOM
ViewportScrollController:
X:0
Y:0
Width:WINDOW_RIGHT
Height:WINDOW_BOTTOM
Timer@GAME_TIMER:
X: WINDOW_RIGHT/2
Y: 0-10
Background@POSTGAME_BG:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:400
Height:100
Background:dialog4
Visible:false
Children:
Label@TEXT:
X:(PARENT_RIGHT - WIDTH)/2
Y:0
Width:200
Height:80
Align:Center
Button@POSTGAME_OBSERVE:
X:10
Y:(PARENT_BOTTOM - HEIGHT - 10)
Width:150
Height:25
Font:Bold
Text:Observe
Button@POSTGAME_QUIT:
X:(PARENT_RIGHT - WIDTH - 10)
Y:(PARENT_BOTTOM - HEIGHT - 10)
Width:150
Height:25
Font:Bold
Text:Leave
SupportPowerBin@INGAME_POWERS_BIN:
X:0
Y:25
Button@INGAME_OPTIONS_BUTTON:
X:0
Y:0
Width:160
Height:25
Text:Options
Font:Bold
Key:escape
WorldTooltip:
Background@INGAME_OPTIONS_BG:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:300
Height:295
Visible:false
Children:
Label@LABEL_TITLE:
X:(PARENT_RIGHT - WIDTH)/2
Y:20
Width:250
Height:25
Text:Options
Align:Center
Font:Bold
Button@RESUME:
X:(PARENT_RIGHT - WIDTH)/2
Y:60
Width:160
Height:25
Text:Resume
Font:Bold
Key:escape
Button@SETTINGS:
X:(PARENT_RIGHT - WIDTH)/2
Y:100
Width:160
Height:25
Text:Settings
Font:Bold
Button@MUSIC:
X:(PARENT_RIGHT - WIDTH)/2
Y:140
Width:160
Height:25
Text:Music
Font:Bold
Button@SURRENDER:
X:(PARENT_RIGHT - WIDTH)/2
Y:180
Width:160
Height:25
Text:Surrender
Font:Bold
Button@DISCONNECT:
X:(PARENT_RIGHT - WIDTH)/2
Y:220
Width:160
Height:25
Text:Abort Mission
Font:Bold
ChatDisplay@CHAT_DISPLAY:
X:250
Y:WINDOW_BOTTOM - HEIGHT - 30
@@ -182,66 +338,32 @@ Container@INGAME_ROOT:
Y:WINDOW_BOTTOM - HEIGHT
Width: 760
Height: 30
Background@DEVELOPERMODE_BG:
Delegate:DeveloperModeDelegate
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:350
Height:330
Visible:false
Background@PERF_BG:
ClickThrough:true
Background:dialog4
Logic:PerfDebugLogic
X:10
Y:WINDOW_BOTTOM - 250
Width: 210
Height: 250
Children:
Label@LABEL_TITLE:
X:(PARENT_RIGHT - WIDTH)/2
Y:20
Width:250
Height:25
Text:Developer Mode
Align:Center
Checkbox@CHECKBOX_SHROUD
X:30
Y:50
Height:20
Width:PARENT_RIGHT - 30
Text:Disable Shroud
Checkbox@CHECKBOX_UNITDEBUG:
X:30
Y:80
Width:PARENT_RIGHT - 30
Height:20
Text:Show Occupied Cells
Checkbox@CHECKBOX_PATHDEBUG:
X:30
Y:110
Width:PARENT_RIGHT - 30
Height:20
Text:Show Unit Paths
Button@GIVE_CASH
X:30
Y:140
PerfGraph@GRAPH:
X:5
Y:5
Width:200
Height:20
Text: Give Cash
Checkbox@INSTANT_BUILD
X:30
Y:170
Width:PARENT_RIGHT - 30
Height:20
Text:Instant Build Speed
Checkbox@INSTANT_CHARGE
X:30
Y:200
Width:PARENT_RIGHT - 30
Height:20
Text:Instant Charge Time (Special Powers)
Checkbox@ENABLE_TECH
X:30
Y:230
Width:PARENT_RIGHT - 30
Height:20
Text:Build Everything
Button@GIVE_EXPLORATION
X:30
Y:260
Width:200
Height:20
Text: Give Exploration
Height:200
Label@TEXT:
X:20
Y:205
Width:170
Height:40
Background@FMVPLAYER:
Width:WINDOW_RIGHT
Height:WINDOW_BOTTOM
Background:dialog4
Children:
VqaPlayer:
X:0
Y:0
Width:WINDOW_RIGHT
Height:WINDOW_BOTTOM

465
mods/d2k/chrome/lobby.yaml Normal file
View File

@@ -0,0 +1,465 @@
Background@SERVER_LOBBY:
Logic:LobbyLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:800
Height:600
Children:
Label@TITLE:
X:0
Y:17
Align:Center
Width:800
Height:20
Font:Bold
Text:OpenD2k Multiplayer Lobby
Background@LOBBY_MAP_BG:
X:PARENT_RIGHT-268
Y:50
Width:252
Height:252
Background:dialog3
Children:
MapPreview@MAP_PREVIEW:
X:4
Y:4
Width:244
Height:244
ScrollPanel@PLAYERS:
X:20
Y:67
ItemSpacing:5
Width:504
Height:235
Children:
Container@TEMPLATE_EDITABLE_PLAYER:
X:5
Y:0
Width:475
Height:25
Visible:false
Children:
TextField@NAME:
Text:Name
Width:150
Height:25
X:0
Y:0
MaxLength:16
DropDownButton@BOT_DROPDOWN:
Text:Name
Width:150
Height:25
Font:Regular
Visible:false
DropDownButton@COLOR:
Width:80
Height:25
X:160
Y:0
Children:
ColorBlock@COLORBLOCK:
X:5
Y:6
Width:PARENT_RIGHT-35
Height:PARENT_BOTTOM-12
DropDownButton@FACTION:
Width:130
Height:25
X:250
Y:0
Children:
Image@FACTIONFLAG:
Width:23
Height:23
X:5
Y:0
Label@FACTIONNAME:
Text:Faction
Width:70
Height:25
X:30
Y:0
DropDownButton@TEAM:
Text:Team
Width:48
Height:25
X:390
Y:0
Checkbox@STATUS_CHECKBOX:
X:448
Y:2
Width:20
Height:20
Visible:false
Image@STATUS_IMAGE:
Visible:false
X:450
Y:4
Width:20
Height:20
ImageCollection:checkbox-bits
ImageName:checked
Visible:false
Container@TEMPLATE_NONEDITABLE_PLAYER:
X:5
Y:0
Width:475
Height:25
Visible:false
Children:
Label@NAME:
Text:Name
Width:145
Height:25
X:5
Y:0-1
Button@KICK:
Text:X
Width:25
Height:23
X:125
Y:2
Font:Bold
ColorBlock@COLOR:
X:165
Y:6
Width:45
Height:13
Label@FACTION:
Width:130
Height:25
X:250
Y:0
Children:
Image@FACTIONFLAG:
Width:30
Height:15
X:5
Y:5
Label@FACTIONNAME:
Text:Faction
Width:60
Height:25
X:40
Y:0
Label@TEAM:
Text:Team
Width:23
Height:25
Align:Center
X:390
Y:0
Image@STATUS_IMAGE:
Visible:false
X:450
Y:4
Width:20
Height:20
ImageCollection:checkbox-bits
ImageName:checked
Container@TEMPLATE_EMPTY:
X:5
Y:0
Width:475
Height:25
Visible:false
Children:
Label@NAME:
Text:Name
Width:145
Height:25
X:5
Y:0-1
DropDownButton@NAME_HOST:
Text:Name
Width:150
Height:25
X:0
Y:0
Visible:false
Button@JOIN:
Text:Play in this slot
Width:278
Height:25
X:160
Y:0
Container@TEMPLATE_EDITABLE_SPECTATOR:
X:5
Y:0
Width:475
Height:25
Visible:false
Children:
TextField@NAME:
Text:Name
Width:150
Height:25
MaxLength:16
DropDownButton@COLOR:
Width:80
Height:25
X:160
Font:Regular
Children:
ColorBlock@COLORBLOCK:
X:5
Y:6
Width:PARENT_RIGHT-35
Height:PARENT_BOTTOM-12
Label@SPECTATOR:
Text:Spectator
Width:198
Height:25
X:240
Y:0
Align:Center
Font:Bold
Checkbox@STATUS_CHECKBOX:
X:448
Y:2
Width:20
Height:20
Image@STATUS_IMAGE:
Visible:false
X:450
Y:4
Width:20
Height:20
ImageCollection:checkbox-bits
ImageName:checked
Container@TEMPLATE_NONEDITABLE_SPECTATOR:
X:5
Y:0
Width:475
Height:25
Visible:false
Children:
Label@NAME:
Text:Name
Width:145
Height:25
X:5
Y:0-1
Button@KICK:
Text:X
Width:25
Height:23
X:125
Y:2
Font:Bold
ColorBlock@COLOR:
X:165
Y:6
Width:45
Height:13
Label@SPECTATOR:
Text:Spectator
Width:198
Height:25
X:240
Y:0
Align:Center
Font:Bold
Image@STATUS_IMAGE:
Visible:false
X:450
Y:4
Width:20
Height:20
ImageCollection:checkbox-bits
ImageName:checked
Container@TEMPLATE_NEW_SPECTATOR:
X:5
Y:0
Width:475
Height:25
Visible:false
Children:
Button@SPECTATE:
Text:Spectate
Font:Regular
Width:278
Height:25
X:160
Y:0
Container@LABEL_CONTAINER:
X:25
Y:40
Children:
Label@LABEL_LOBBY_NAME:
Width:150
Height:25
X:0
Y:0
Text:Name
Align:Center
Font:Bold
Label@LABEL_LOBBY_COLOR:
Width:80
Height:25
X:160
Y:0
Text:Color
Align:Center
Font:Bold
Label@LABEL_LOBBY_FACTION:
Width:130
Height:25
X:250
Y:0
Text:Faction
Align:Center
Font:Bold
Label@LABEL_LOBBY_TEAM:
Width:48
Height:25
X:390
Y:0
Text:Team
Align:Center
Font:Bold
Label@LABEL_LOBBY_STATUS:
X:448
Y:0
Width:20
Height:25
Text:Ready
Align:Left
Font:Bold
Button@CHANGEMAP_BUTTON:
X:PARENT_RIGHT-154
Y:PARENT_BOTTOM-269
Width:120
Height:25
Text:Change Map
Font:Bold
ScrollPanel@CHAT_DISPLAY:
X:20
Y:PARENT_BOTTOM - 289
Width:PARENT_RIGHT - 200
Height:230
ItemSpacing:1
Children:
Container@CHAT_TEMPLATE:
Width:PARENT_RIGHT-27
Height:16
X:2
Y:0
Children:
Label@TIME:
X:3
Width:50
Height:15
VAlign:Top
Label@NAME:
X:45
Width:50
Height:15
VAlign:Top
Label@TEXT:
X:55
Width:PARENT_RIGHT - 60
Height:15
WordWrap:true
VAlign:Top
Label@LABEL_CHATTYPE:
Width:65
Height:25
X:0
Y:PARENT_BOTTOM - 50
Text:Chat:
Align:Right
TextField@CHAT_TEXTFIELD:
X:70
Y:PARENT_BOTTOM - 49
Width:550
Height:25
Button@START_GAME_BUTTON:
X:PARENT_RIGHT-154
Y:PARENT_BOTTOM-49
Width:120
Height:25
Text:Start Game
Font:Bold
Button@DISCONNECT_BUTTON:
X:PARENT_RIGHT-154
Y:PARENT_BOTTOM-189+25
Width:120
Height:25
Text:Disconnect
Font:Bold
Checkbox@ALLOWCHEATS_CHECKBOX:
X: PARENT_RIGHT-154
Y: PARENT_BOTTOM-229
Width: 80
Height: 20
Text: Allow Cheats
Background@COLOR_CHOOSER:
Logic:ColorPickerLogic
Background:dialog2
Width:310
Height:120
Children:
Button@SAVE_BUTTON:
X:210
Y:85
Width:90
Height:25
Text:Save
Font:Bold
Button@RANDOM_BUTTON:
X:115
Y:85
Width:90
Height:25
Text:Random
Font:Bold
ShpImage@FACT:
X:220
Y:10
Image:fact
Palette:colorpicker
Label@HUE_LABEL:
X:0
Y:5
Width:40
Height:20
Align: Right
Text: Hue:
Slider@HUE:
X:43
Y:10
Width:160
Height:20
Ticks:5
Label@SAT_LABEL:
X:0
Y:30
Width:40
Height:20
Align: Right
Text: Sat:
Slider@SAT:
X:43
Y:35
Width:160
Height:20
Ticks:5
Label@LUM_LABEL:
X:0
Y:55
Width:40
Height:20
Align: Right
Text: Lum:
Slider@LUM:
X:43
Y:60
Width:160
Height:20
Ticks:5
MinimumValue: 0.2
MaximumValue: 1

View File

@@ -2,72 +2,78 @@ Background@MAINMENU_BG:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:250
Height:290
Delegate:MainMenuButtonsDelegate
Height:420
Visible:true
Logic:MainMenuButtonsLogic
Children:
Label@MAINMENU_LABEL_TITLE:
X:0
Y:20
Width:250
Height:25
Text:OpenRA Main Menu
Text:OpenD2k Main Menu
Align:Center
Bold:True
Font:Bold
Button@MAINMENU_BUTTON_JOIN:
X:45
Y:70
Width:160
Height:25
Text:Join Game
Bold:True
Font:Bold
Button@MAINMENU_BUTTON_CREATE:
X:45
Y:110
Width:160
Height:25
Text:Create Game
Bold:True
Button@MAINMENU_BUTTON_SETTINGS:
Font:Bold
Button@MAINMENU_BUTTON_DIRECTCONNECT:
X:45
Y:150
Width:160
Height:25
Text:Settings
Bold:True
Button@MAINMENU_BUTTON_MUSIC:
Text:Direct Connect
Font:Bold
Button@MAINMENU_BUTTON_SETTINGS:
X:45
Y:190
Width:160
Height:25
Text:Music
Bold:True
Button@MAINMENU_BUTTON_QUIT:
Text:Settings
Font:Bold
Button@MAINMENU_BUTTON_MODS:
X:45
Y:230
Width:160
Height:25
Text:Quit
Bold:True
Button@MAINMENU_BUTTON_VIDEOPLAYER:
Visible:false
Text:Mods
Font:Bold
Button@MAINMENU_BUTTON_MUSIC:
X:45
Y:260
Y:270
Width:160
Height:25
Text:Video Player
Bold:True
Label@VERSION_STRING:
X:WINDOW_RIGHT - PARENT_LEFT - WIDTH - 15
Y:WINDOW_BOTTOM - PARENT_TOP - 25
Width:400
Height:35
Text:
Align:Right
Bold:True
Text:Music
Font:Bold
Button@MAINMENU_BUTTON_REPLAY_VIEWER:
X:45
Y:310
Width:160
Height:25
Text:Replay Viewer
Font:Bold
Button@MAINMENU_BUTTON_QUIT:
X:45
Y:350
Width:160
Height:25
Text:Quit
Font:Bold
Background@PERF_BG:
ClickThrough:true
Background:dialog4
Delegate:PerfDebugDelegate
Logic:PerfDebugLogic
X:10
Y:WINDOW_BOTTOM - 250
Width: 210
@@ -79,18 +85,17 @@ Background@PERF_BG:
Width:200
Height:200
Label@TEXT:
Bold: false
X:20
Y:205
Width:170
Height:40
Background@MUSIC_MENU:
Delegate:MusicPlayerDelegate
Logic:MusicPlayerLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width: 450
Height: 250
Visible: false
Visible: true
Children:
Label@SETTINGS_LABEL_TITLE:
X:0
@@ -99,14 +104,22 @@ Background@MUSIC_MENU:
Height:25
Text:Music
Align:Center
Bold:True
Font:Bold
Button@BUTTON_INSTALL:
X:20
Y:PARENT_BOTTOM - 45
Width:160
Height:25
Text:Install Music
Font:Bold
Button@BUTTON_CLOSE:
X:PARENT_RIGHT - 180
Y:PARENT_BOTTOM - 45
Width:160
Height:25
Text:Close
Bold:True
Font:Bold
Key:escape
Container@BUTTONS:
X:PARENT_RIGHT - 150
Y:50
@@ -189,8 +202,8 @@ Background@MUSIC_MENU:
Width:280
Height:140
Children:
Label@MUSIC_TEMPLATE:
Width:PARENT_RIGHT-28
ScrollItem@MUSIC_TEMPLATE:
Width:PARENT_RIGHT-27
Height:25
X:2
Y:0
@@ -217,4 +230,4 @@ Background@MUSIC_MENU:
Y:140
Width:100
Height:20
Text:Repeat
Text:Loop

View File

@@ -0,0 +1,74 @@
Background@MAPCHOOSER_PANEL:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Logic:MapChooserLogic
Width:800
Height:600
Children:
Label@MAPCHOOSER_TITLE:
X:0
Y:17
Align:Center
Width:800
Height:20
Text:Choose Map
Font:Bold
ScrollPanel@MAP_LIST:
X:20
Y:47
Width:PARENT_RIGHT - 40
Height:474
Children:
ScrollItem@MAP_TEMPLATE:
Width:180
Height:208
X:2
Y:0
Visible:false
Children:
Label@TITLE:
X:2
Y:PARENT_BOTTOM-47
Width:PARENT_RIGHT-4
Height:25
Align:Center
Label@DETAILS:
Width:PARENT_RIGHT-4
X:2
Y:PARENT_BOTTOM-35
Align:Center
Height:25
Font:Tiny
Label@AUTHOR:
Width:PARENT_RIGHT-4
X:2
Y:PARENT_BOTTOM-26
Align:Center
Height:25
Font:Tiny
MapPreview@PREVIEW:
X:(PARENT_RIGHT - WIDTH)/2
Y:4
Width:160
Height:160
DropDownButton@GAMEMODE_FILTER:
X:PARENT_RIGHT - 220
Y:17
Width:200
Height:25
Button@BUTTON_OK:
X:PARENT_RIGHT - 295
Y:PARENT_BOTTOM - 49
Width:120
Height:25
Text:Ok
Font:Bold
Key:return
Button@BUTTON_CANCEL:
X:PARENT_RIGHT-154
Y:PARENT_BOTTOM-49
Width:120
Height:25
Text:Cancel
Font:Bold
Key:escape

View File

@@ -0,0 +1,84 @@
Background@MODS_PANEL:
Logic:ModBrowserLogic
Width:740
Height:500
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Children:
Label@TITLE:
Text:Select Mod
Width:PARENT_RIGHT
Y:20
Font:Bold
Align:Center
ScrollPanel@MOD_LIST:
X:15
Y:70
Width:710
Height:PARENT_BOTTOM - 125
Children:
ScrollItem@MOD_TEMPLATE:
Width:PARENT_RIGHT-27
Height:25
X:2
Y:0
Visible:false
Children:
Label@TITLE:
X:10
Width:200
Height:25
Label@AUTHOR:
X:PARENT_RIGHT-300
Align:Center
Width:50
Height:25
Label@VERSION:
Width:140
X:PARENT_RIGHT-150
Align:Center
Height:25
Container@MOD_LABELS:
Width:710-25
Height:25
X:15
Y:45
Children:
Label@TITLE:
Width:125
Height:25
X:0
Y:0
Text:Title
Align:Center
Font:Bold
Label@AUTHOR:
X:PARENT_RIGHT-300
Align:Center
Width:50
Height:25
Text:Author
Font:Bold
Label@VERSION:
Width:140
X:PARENT_RIGHT-150
Align:Center
Height:25
Text:Version
Font:Bold
Button@BACK_BUTTON:
Key:escape
X:PARENT_RIGHT-180
Y:PARENT_BOTTOM-45
Width:160
Height:25
Font:Bold
Text:Cancel
Button@LOAD_BUTTON:
Key:return
X:PARENT_RIGHT-360
Y:PARENT_BOTTOM-45
Width:160
Height:25
Font:Bold
Text:Load Mod

View File

@@ -0,0 +1,102 @@
Background@REPLAYBROWSER_BG:
Logic:ReplayBrowserLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:700
Height:410
Children:
Label@REPLAYBROWSER_LABEL_TITLE:
X:0
Y:20
Width:PARENT_RIGHT
Height:25
Text:Choose Replay
Align:Center
Font:Bold
ScrollPanel@REPLAY_LIST:
X:20
Y:50
Width:390
Height:300
Children:
ScrollItem@REPLAY_TEMPLATE:
Width:PARENT_RIGHT-27
Height:25
X:2
Y:0
Visible:false
Children:
Label@TITLE:
X:10
Width:PARENT_RIGHT-20
Height:25
Container@REPLAY_INFO:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Visible:false
Children:
MapPreview@MAP_PREVIEW:
X:PARENT_RIGHT-241
Y:30
Width:192
Height:192
Label@MAP_TITLE_LABEL:
X:PARENT_RIGHT - 200 - WIDTH
Y:250
Align:Right
Width:70
Height:20
Text:Map:
Font:Bold
Label@MAP_TITLE:
X:PARENT_RIGHT - 195
Y:250
Align:Left
Width:70
Height:20
Label@DURATION_LABEL:
X:PARENT_RIGHT - 200 - WIDTH
Y:270
Align:Right
Width:70
Height:20
Text:Duration:
Font:Bold
Label@DURATION:
X:PARENT_RIGHT - 195
Y:270
Align:Left
Width:70
Height:20
Label@PLAYERS_LABEL:
X:PARENT_RIGHT - 200 - WIDTH
Y:290
Align:Right
Width:70
Height:20
Text:Players:
Font:Bold
Label@PLAYERS:
X:PARENT_RIGHT - 195
Y:290
Align:Left
Width:70
Height:20
Button@WATCH_BUTTON:
X:PARENT_RIGHT - 140 - 130
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Watch
Font:Bold
Key:return
Button@CANCEL_BUTTON:
X:PARENT_RIGHT - 140
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Cancel
Font:Bold
Key:escape

View File

@@ -1,93 +1,9 @@
Background@CREATESERVER_BG:
Delegate:CreateServerMenuDelegate
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:400
Height:240
Visible:false
Children:
Label@LABEL_TITLE:
X:0
Y:20
Width:400
Height:25
Text:Create Server
Align:Center
Bold:True
Label@GAME_TITLE_LABEL:
X:50
Y:59
Width:95
Height:25
Align: Right
Text:Game Title:
TextField@GAME_TITLE:
X:150
Y:60
Width:210
MaxLength:50
Height:25
Text:OpenRA Game
Label@EXTERNAL_PORT_LABEL:
X:50
Y:94
Width:95
Height:25
Align: Right
Text:External Port:
TextField@EXTERNAL_PORT:
X:150
Y:95
Width:50
MaxLength:5
Height:25
Text:OpenRA Game
Label@LISTEN_PORT_LABEL:
X:210
Y:94
Width:95
Height:25
Align: Right
Text:Listen Port:
TextField@LISTEN_PORT:
X:310
Y:95
Width:50
MaxLength:5
Height:25
Checkbox@CHECKBOX_ONLINE:
X:165
Y:130
Width:300
Height:20
Text:Advertise game Online
Checkbox@CHECKBOX_CHEATS:
X:165
Y:160
Width:300
Height:20
Text:Allow Cheats
Button@BUTTON_START:
X:130
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Create
Bold:True
Button@BUTTON_CANCEL:
X:260
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Cancel
Bold:True
Background@JOINSERVER_BG:
Delegate:ServerBrowserDelegate
Logic:ServerBrowserLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:700
Height:410
Visible:false
Width:540
Height:535
Children:
Label@JOINSERVER_LABEL_TITLE:
X:0
@@ -96,130 +12,95 @@ Background@JOINSERVER_BG:
Height:25
Text:Join Server
Align:Center
Bold:True
Font:Bold
ScrollPanel@SERVER_LIST:
X:20
Y:50
Width:390
Height:300
Width:500
Height:425
Children:
Label@SERVER_TEMPLATE:
Width:PARENT_RIGHT-28
Height:25
ScrollItem@SERVER_TEMPLATE:
Width:PARENT_RIGHT-27
Height:68
X:2
Y:0
Visible:false
Label@JOINSERVER_PROGRESS_TITLE:
X:150
Children:
MapPreview@MAP_PREVIEW:
X:2
Y:2
Width:64
Height:64
ShowSpawnPoints:no
Label@TITLE:
X:70
Width:200
Height:25
Font:Bold
Label@MAP:
X:70
Y:20
Width:250
Height:25
Label@PLAYERS:
X:70
Y:40
Width:50
Height:25
Label@STATE:
Width:140
X:PARENT_RIGHT-150
Align:Right
Height:25
Font:Bold
Label@IP:
Width:140
X:PARENT_RIGHT-150
Y:20
Align:Right
Height:25
Label@VERSION:
Width:140
X:PARENT_RIGHT-150
Y:40
Align:Right
Height:25
Label@PROGRESS_LABEL:
X:(PARENT_RIGHT - WIDTH) / 2
Y:PARENT_BOTTOM / 2 - HEIGHT
Width:150
Height:30
Background:dialog4
Text:Fetching games...
Align:Center
Container@SERVER_INFO:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Visible:false
Children:
Label@SERVER_IP_LABEL:
X:PARENT_RIGHT - 200 - WIDTH
Y:50
Align:Right
Width:70
Height:20
Text:Server:
Bold:True
Label@SERVER_IP:
X:PARENT_RIGHT - 195
Y:50
Align:Left
Width:70
Height:20
Label@SERVER_MODS_LABEL:
X:PARENT_RIGHT - 200 - WIDTH
Y:70
Align:Right
Width:70
Height:20
Text:Mods:
Bold:True
Label@SERVER_MODS:
X:PARENT_RIGHT - 195
Y:70
Align:Left
Width:70
Height:20
Label@MAP_TITLE_LABEL:
X:PARENT_RIGHT - 200 - WIDTH
Y:90
Align:Right
Width:70
Height:20
Text:Map:
Bold:True
Label@MAP_TITLE:
X:PARENT_RIGHT - 195
Y:90
Align:Left
Width:70
Height:20
Label@MAP_PLAYERS_LABEL:
X:PARENT_RIGHT - 200 - WIDTH
Y:110
Align:Right
Width:70
Height:20
Text:Players:
Bold:True
Label@MAP_PLAYERS:
X:PARENT_RIGHT - 195
Y:110
Align:Left
Width:70
Height:20
MapPreview@MAP_PREVIEW:
X:PARENT_RIGHT-241
Y:140
Width:192
Height:192
Button@DIRECTCONNECT_BUTTON:
X:20
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Direct Connect
Bold:True
Align:Center
Button@REFRESH_BUTTON:
X:160
X:20
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Refresh
Bold:True
Font:Bold
Button@JOIN_BUTTON:
X:PARENT_RIGHT - 140 - 130
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Join
Bold:True
Button@CANCEL_BUTTON:
Font:Bold
Key:return
Button@BACK_BUTTON:
X:PARENT_RIGHT - 140
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Cancel
Bold:True
Font:Bold
Key:escape
Background@DIRECTCONNECT_BG:
Delegate:ServerBrowserDelegate
Logic:DirectConnectLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:400
Height:155
Visible:false
Children:
Label@DIRECTCONNECT_LABEL_TITLE:
X:0
@@ -228,7 +109,7 @@ Background@DIRECTCONNECT_BG:
Height:25
Text:Direct Connect
Align:Center
Bold:True
Font:Bold
Label@ADDRESS_LABEL:
X:50
Y:59
@@ -236,33 +117,40 @@ Background@DIRECTCONNECT_BG:
Height:25
Align:Right
Text:Server Address:
TextField@SERVER_ADDRESS:
TextField@IP:
X:150
Y:60
Width:200
Width:160
MaxLength:50
Height:25
TextField@PORT:
X:315
Y:60
Width:55
MaxLength:5
Height:25
Button@JOIN_BUTTON:
X:130
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Join
Bold:True
Button@CANCEL_BUTTON:
Font:Bold
Key:return
Button@BACK_BUTTON:
X:260
Y:PARENT_BOTTOM - 45
Width:120
Height:25
Text:Cancel
Bold:True
Background@CONNECTION_FAILED_BG:
Delegate:ConnectionDialogsDelegate
Font:Bold
Key:escape
Background@CONNECTIONFAILED_PANEL:
Logic:ConnectionFailedLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:450
Height:150
Visible:false
Children:
Label@CONNECTION_FAILED_TITLE:
X:0
@@ -271,35 +159,36 @@ Background@CONNECTION_FAILED_BG:
Height:25
Text:Connection Failed
Align:Center
Bold:True
Label@CONNECTION_FAILED_DESC:
Font:Bold
Label@CONNECTING_DESC:
X:0
Y:60
Width:PARENT_RIGHT
Height:25
Text:Could not connect to AAA.BBB.CCC.DDD:EEEE
Align:Center
Button@CONNECTION_BUTTON_RETRY:
Button@RETRY_BUTTON:
X:PARENT_RIGHT - 360
Y:PARENT_BOTTOM - 45
Width:160
Height:25
Text:Retry
Bold:True
Button@CONNECTION_BUTTON_CANCEL:
Font:Bold
Key:return
Button@ABORT_BUTTON:
X:PARENT_RIGHT - 180
Y:PARENT_BOTTOM - 45
Width:160
Height:25
Text:Cancel
Bold:True
Background@CONNECTING_BG:
Delegate:ConnectionDialogsDelegate
Font:Bold
Key:escape
Background@CONNECTING_PANEL:
Logic:ConnectionLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:450
Height:150
Visible:false
Children:
Label@CONNECTING_TITLE:
X:0
@@ -308,7 +197,7 @@ Background@CONNECTING_BG:
Height:25
Text:Connecting
Align:Center
Bold:True
Font:Bold
Label@CONNECTING_DESC:
X:0
Y:60
@@ -316,10 +205,11 @@ Background@CONNECTING_BG:
Height:25
Text:Connecting to AAA.BBB.CCC.DDD:EEEE...
Align:Center
Button@CONNECTION_BUTTON_ABORT:
Button@ABORT_BUTTON:
X:PARENT_RIGHT - 180
Y:PARENT_BOTTOM - 45
Width:160
Height:25
Text:Abort
Bold:True
Font:Bold
Key:escape

View File

@@ -1,10 +1,9 @@
Background@SETTINGS_MENU:
Delegate:SettingsMenuDelegate
Logic:SettingsMenuLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM- HEIGHT)/2
Width: 450
Height: 350
Visible: false
Children:
Label@SETTINGS_LABEL_TITLE:
X:0
@@ -13,14 +12,15 @@ Background@SETTINGS_MENU:
Height:25
Text:Settings
Align:Center
Bold:True
Font:Bold
Button@BUTTON_CLOSE:
X:PARENT_RIGHT - 180
Y:PARENT_BOTTOM - 45
Width:160
Height:25
Text:Close
Bold:True
Font:Bold
Key:escape
Container@TAB_CONTAINER:
X:0
Y:50
@@ -33,28 +33,28 @@ Background@SETTINGS_MENU:
Width:90
Height:25
Text:General
Bold:True
Font:Bold
Button@AUDIO:
X:135
Y:0
Width:90
Height:25
Text:Audio
Bold:True
Font:Bold
Button@DISPLAY:
X:225
Y:0
Width:90
Height:25
Text:Display
Bold:True
Font:Bold
Button@DEBUG:
X:315
Y:0
Width:90
Height:25
Text:Debug
Bold:True
Font:Bold
Container@GENERAL_PANE:
X:37
Y:100
@@ -79,12 +79,36 @@ Background@SETTINGS_MENU:
Width:200
Height:20
Text: Enable Edge Scrolling
Label@EDGE_SCROLL_AMOUNT_LABEL:
X:0
Y:70
Text: Scroll Speed
Slider@EDGE_SCROLL_AMOUNT:
X:130
Y:60
Width:250
Height:20
Ticks:5
MinimumValue: 10
MaximumValue: 50
Checkbox@INVERSE_SCROLL:
X:0
Y:60
Y:90
Width:200
Height:20
Text: Invert Mouse Drag Scrolling
Checkbox@TEAMCHAT_TOGGLE:
X:0
Y:120
Width:200
Height:20
Text: Shift-Enter Toggles Team Chat
Checkbox@SHOW_SHELLMAP:
X:0
Y:150
Width:200
Height:20
Text: Show Shellmap
Container@AUDIO_PANE:
X:37
Y:100
@@ -119,38 +143,61 @@ Background@SETTINGS_MENU:
Height:PARENT_BOTTOM - 100
Visible: false
Children:
Checkbox@FULLSCREEN_CHECKBOX:
Label@MODE_LABEL:
X:0
Y:0
Width:300
Width:45
Height:25
Text:Mode:
DropDownButton@MODE_DROPDOWN:
X:50
Y:1
Width:170
Height:25
Font:Regular
Text:Windowed
Container@WINDOW_RESOLUTION:
X:220
Y:0
Children:
Label@At:
Text:@
Font:Bold
Y:0-1
Height:25
Width:25
Align:Center
TextField@WINDOW_WIDTH:
X:25
Width:45
Height:25
MaxLength:5
Label@X:
Text:x
Font:Bold
X:70
Y:0-1
Height:25
Width:15
Align:Center
TextField@WINDOW_HEIGHT:
X:85
Width:45
Height:25
MaxLength:5
Label@VIDEO_DESC:
Y:25
Width:PARENT_RIGHT
Height:25
Font:Tiny
Align:Center
Text:Mode/Resolution changes will be applied after the game is restarted
Checkbox@PIXELDOUBLE_CHECKBOX:
Y:50
Width:200
Height:20
Text:Fullscreen
Label@RESOLUTION_LABEL:
X:0
Y:50
Text: Window Resolution:
TextField@SCREEN_WIDTH:
Text:Width
Width:50
Height:25
X:130
Y:40
MaxLength:5
Label@X:
Text:x
X:185
Y:50
TextField@SCREEN_HEIGHT:
Text:Height
Width:50
Height:25
X:195
Y:40
MaxLength:5
Label@RESTART:
Text: Restart Game To Apply Changes
X:0
Y:PARENT_BOTTOM - 30
Font:Regular
Text:Enable Pixel Doubling
Container@DEBUG_PANE:
X:37
Y:100
@@ -164,15 +211,9 @@ Background@SETTINGS_MENU:
Width:300
Height:20
Text:Show Performance Information
Checkbox@SYNCREPORTS_CHECKBOX:
Checkbox@CHECKUNSYNCED_CHECKBOX:
X:0
Y:30
Width:300
Height:20
Text:Collect Sync Reports
Checkbox@GAMETIME_CHECKBOX:
X:0
Y:60
Width:300
Height:20
Text:Show Game Time Counter
Text:Check Sync around Unsynced Code

View File

@@ -1,67 +0,0 @@
Background@VIDEOPLAYER_MENU:
Delegate:VideoPlayerDelegate
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM- HEIGHT)/2
Width: 700
Height: 680
Visible: false
Children:
Label@VIDEOPLAYER_TITLE:
X:0
Y:20
Align:Center
Width:PARENT_RIGHT
Height:20
Text:Video Player
Bold:True
VqaPlayer:
X:30
Y:50
Width:640
Height:400
ScrollPanel@VIDEO_LIST:
X:20
Y:460
Width:480
Height:200
Children:
Label@VIDEO_TEMPLATE:
Width:PARENT_RIGHT-28
Height:25
X:2
Y:0
Visible:false
Button@BUTTON_PLAYPAUSE:
X:600 - WIDTH - 10
Y:460
Width:25
Height:25
Children:
Image@PLAY:
Width:25
Height:25
ImageCollection:music
ImageName:play
Image@PAUSE:
Width:25
Height:25
ImageCollection:music
ImageName:pause
Button@BUTTON_STOP:
X:610
Y:460
Width:25
Height:25
Children:
Image:
Width:25
Height:25
ImageCollection:music
ImageName:stop
Button@BUTTON_CLOSE:
X:PARENT_RIGHT - 180
Y:PARENT_BOTTOM - 45
Width:160
Height:25
Text:Close
Bold:True

View File

@@ -1,68 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<sequences>
<cursor src="mouse" palette="cursor">
<sequence name="scroll-t" start="1" x="12" y="12" />
<sequence name="scroll-tr" start="2" x="12" y="12" />
<sequence name="scroll-r" start="3" x="12" y="12" />
<sequence name="scroll-br" start="4" x="12" y="12" />
<sequence name="scroll-b" start="5" x="12" y="12" />
<sequence name="scroll-bl" start="6" x="12" y="12" />
<sequence name="scroll-l" start="7" x="12" y="12" />
<sequence name="scroll-tl" start="8" x="12" y="12" />
<sequence name="scroll-t-blocked" start="124" x="12" y="12" />
<sequence name="scroll-tr-blocked" start="125" x="12" y="12" />
<sequence name="scroll-r-blocked" start="126" x="12" y="12" />
<sequence name="scroll-br-blocked" start="127" x="12" y="12" />
<sequence name="scroll-b-blocked" start="128" x="12" y="12" />
<sequence name="scroll-bl-blocked" start="129" x="12" y="12" />
<sequence name="scroll-l-blocked" start="130" x="12" y="12" />
<sequence name="scroll-tl-blocked" start="131" x="12" y="12" />
<sequence name="select" start="15" length="6" x="12" y="12" />
<sequence name="default" start="0" />
<sequence name="default-minimap" start="80" />
<sequence name="generic-blocked" start="9" />
<sequence name="generic-blocked-minimap" start="33" />
<sequence name="move" start="10" length="4" x="12" y="12" />
<sequence name="move-minimap" start="29" length="4" x="12" y="12" />
<sequence name="move-blocked" start="14" x="12" y="12" />
<sequence name="move-blocked-minimap" start="33" x="12" y="12" />
<sequence name="attack" start="195" length="8" x="12" y="12" />
<sequence name="attack-minimap" start="203" length="8" x="12" y="12" />
<sequence name="attackmove" start="21" length="8" x="12" y="12" />
<sequence name="attackmove-minimap" start="134" length="8" x="12" y="12" />
<sequence name="enter" start="113" length="3" x="12" y="12" />
<sequence name="enter-minimap" start="139" length="3" x="12" y="12" />
<sequence name="enter-blocked" start="212" length="1" x="12" y="12" />
<sequence name="enter-blocked-minimap" start="33" />
<sequence name="c4" start="116" length="3" x="12" y="12" />
<sequence name="c4-minimap" start="121" length="3" x="12" y="12" />
<sequence name="guard" start="147" length="1" x="12" y="12" />
<sequence name="guard-minimap" start="146" length="1" x="12" y="12" />
<sequence name="capture" start="164" length="3" x="12" y="12" />
<sequence name="capture-minimap" start="167" length="3" x="12" y="12" />
<sequence name="heal" start="160" length="4" x="12" y="12" />
<sequence name="heal-minimap" start="194" length="1" x="12" y="12" />
<sequence name="ability" start="82" length="8" x="12" y="12" />
<sequence name="ability-minimap" start="214" length="8" x="12" y="12" />
<!-- Want minimap cursors -->
<sequence name="deploy" start="59" length="9" x="12" y="12" />
<sequence name="deploy-blocked" start="211" length="1" x="12" y="12" />
<sequence name="goldwrench" start="170" length="24" x="12" y="12" />
<sequence name="goldwrench-blocked" start="213" length="1" x="12" y="12" />
<sequence name="nuke" start="90" length="7" x="12" y="12" />
<sequence name="chrono-select" start="97" length="8" x="12" y="12" />
<sequence name="chrono-target" start="105" length="8" x="12" y="12" />
<sequence name="sell" start="68" length="12" x="12" y="12" />
<sequence name="sell-blocked" start="119" length="1" x="12" y="12" />
<sequence name="repair" start="35" length="24" x="12" y="12" />
<sequence name="repair-blocked" start="120" length="1" x="12" y="12" />
<sequence name="sell2" start="148" length="12" />
</cursor>
<cursor src="nopower" palette="cursor">
<sequence name="powerdown-blocked" start="0" length="1" x="12" y="12" />
<sequence name="powerdown" start="1" length="3" x="12" y="12" />
</cursor>
</sequences>

238
mods/d2k/cursors.yaml Normal file
View File

@@ -0,0 +1,238 @@
Palettes:
cursor: d2k.pal
Cursors:
mouse: cursor
scroll-t:
start:112
x: 12
y: 12
scroll-tr:
start: 120
x: 12
y: 12
scroll-r:
start: 128
x: 12
y: 12
scroll-br:
start: 136
x: 12
y: 12
scroll-b:
start:148
x: 12
y: 12
scroll-bl:
start:156
x: 12
y: 12
scroll-l:
start:164
x: 12
y: 12
scroll-tl:
start:172
x: 12
y: 12
scroll-t-blocked:
start:180
x: 12
y: 12
scroll-tr-blocked:
start:188
x: 12
y: 12
scroll-r-blocked:
start:196
x: 12
y: 12
scroll-br-blocked:
start:204
x: 12
y: 12
scroll-b-blocked:
start:212
x: 12
y: 12
scroll-bl-blocked:
start:220
x: 12
y: 12
scroll-l-blocked:
start:228
x: 12
y: 12
scroll-tl-blocked:
start:236
x: 12
y: 12
select:
start:40
length: 8
x: 12
y: 12
default:
start:0
default-minimap:
start:0
generic-blocked:
start:24
generic-blocked-minimap:
start:24
move:
start:8
length: 8
x: 12
y: 12
move-minimap:
start:48
length: 8
x: 12
y: 12
move-blocked:
start:24
x: 12
y: 12
move-blocked-minimap:
start:24
x: 12
y: 12
attack:
start:16
length: 8
x: 12
y: 12
attack-minimap:
start:16
length: 8
x: 12
y: 12
attackmove:
start:16
length: 8
x: 12
y: 12
attackmove-minimap:
start:16
length: 8
x: 12
y: 12
harvest:
start:16
length: 8
x: 12
y: 12
harvest-minimap:
start:203
length: 8
x: 12
y: 12
enter:
start:32
length: 8
x: 12
y: 12
enter-minimap:
start:32
length: 8
x: 12
y: 12
enter-blocked:
start:104
length: 1
x: 12
y: 12
enter-blocked-minimap:
start:104
c4:
start:252
length: 8
x: 12
y: 12
c4-minimap:
start:252
length: 8
x: 12
y: 12
guard:
start:72
length: 8
x: 12
y: 12
guard-minimap:
start:72
length: 8
x: 12
y: 12
capture:
start:32
length: 8
x: 12
y: 12
capture-minimap:
start:32
length: 8
x: 12
y: 12
ability:
start:96
length: 8
x: 12
y: 12
ability-minimap:
start:96
length: 8
x: 12
y: 12
# Cursors that need minimap variants
deploy:
start:96
length: 8
x: 12
y: 12
deploy-blocked:
start:104
length: 1
x: 12
y: 12
nuke:
start:244
length: 8
x: 12
y: 12
sell:
start:80
length: 8
x: 12
y: 12
sell-blocked:
start:56
length: 1
x: 12
y: 12
repair:
start:88
length: 8
x: 12
y: 12
repair-blocked:
start:64
length: 1
x: 12
y: 12
nopower: cursor
powerdown-blocked:
start:0
length: 1
x: 12
y: 12
powerdown:
start:1
length: 3
x: 12
y: 12

BIN
mods/d2k/maps/blank.oramap Normal file

Binary file not shown.

BIN
mods/d2k/maps/test.oramap Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -1,44 +0,0 @@
Selectable: True
MapFormat: 3
Title: Name your map here
Description: Describe your map here
Author: Your name here
PlayerCount: 1
Tileset: ARRAKIS
MapSize: 128,128
TopLeft: 16,16
BottomRight: 112,112
Players:
PlayerReference@Neutral:
Name: Neutral
Palette:
Race: allies
OwnsWorld: True
NonCombatant: True
Playable: False
DefaultStartingUnits: False
Color: 255,238,238,238
Color2: 255,44,28,24
InitialCash: 0
Allies:
Enemies:
Actors:
Waypoints:
wp0: 20,20
Smudges:
Rules:

6
mods/d2k/metrics.yaml Normal file
View File

@@ -0,0 +1,6 @@
# General dumping-ground for UI element sizes, etc.
Metrics:
ButtonDepth: 1
ButtonFont: Regular
CheckboxPressedState: false

View File

@@ -1,41 +1,122 @@
Metadata:
Title: Dune 2000
Description: Work in progress d2k port
Version: a0001
Author: The OpenRA Developers
Description: early version of the Dune 2000 mod
Version: {DEV_VERSION}
Author: The OpenD2k Developers
Folders:
.
mods/d2k
mods/d2k/bits
mods/ra/uibits
./mods/d2k
./mods/d2k/bits
./mods/d2k/uibits
~^/Content/d2k
~^/Content/d2k/GAMESFX
~^/Content/d2k/Music
~^/Content/d2k/Tilesets
~^/Content/d2k/SHPs
./mods/ra/bits
./mods/ra/uibits
~^/Content/ra
Packages:
mods/d2k/bits/arrakis.mix
~main.mix
redalert.mix
conquer.mix
hires.mix
local.mix
sounds.mix
speech.mix
allies.mix
russian.mix
temperat.mix
snow.mix
interior.mix
~scores.mix
~movies1.mix
~movies2.mix
Rules:
mods/d2k/rules/system.yaml
mods/d2k/rules/defaults.yaml
mods/d2k/rules/vehicles.yaml
mods/d2k/rules/system.yaml
mods/d2k/rules/structures.yaml
mods/d2k/rules/aircraft.yaml
mods/d2k/rules/infantry.yaml
mods/d2k/rules/atreides.yaml
mods/d2k/rules/harkonnen.yaml
mods/d2k/rules/ordos.yaml
Sequences:
mods/d2k/sequences.yaml
Cursors:
mods/d2k/cursors.xml
mods/d2k/cursors.yaml
Chrome:
mods/ra/chrome.xml
mods/d2k/chrome.yaml
Assemblies:
mods/d2k/OpenRA.Mods.D2k.dll
mods/ra/OpenRA.Mods.RA.dll
mods/cnc/OpenRA.Mods.Cnc.dll
ChromeLayout:
mods/d2k/chrome/gameinit.yaml
mods/d2k/chrome/ingame.yaml
mods/d2k/chrome/mainmenu.yaml
mods/d2k/chrome/videoplayer.yaml
mods/d2k/chrome/settings.yaml
mods/d2k/chrome/gamelobby.yaml
mods/d2k/chrome/lobby.yaml
mods/d2k/chrome/map-chooser.yaml
mods/d2k/chrome/create-server.yaml
mods/d2k/chrome/serverbrowser.yaml
mods/d2k/chrome/replaybrowser.yaml
mods/d2k/chrome/dropdowns.yaml
mods/d2k/chrome/modchooser.yaml
mods/d2k/chrome/cheats.yaml
Weapons:
mods/d2k/weapons.yaml
Voices:
mods/d2k/voices.yaml
TileSets:
mods/d2k/tilesets/arrakis.yaml
mods/d2k/tilesets/base.yaml
TileSize: 32
Music:
mods/d2k/music.yaml
Movies:
LoadScreen: NullLoadScreen
ShellmapUid:1e36d6874ef7960ac0e21edf36bbe1490a4650eb
TileSize:32
LoadScreen: D2kLoadScreen
InstallerMenuWidget: INSTALL_PANEL
TestFile: carryall.shp
ServerTraits:
LobbyCommands
MasterServerPinger
ChromeMetrics:
mods/d2k/metrics.yaml
Fonts:
Regular:
Font:FreeSans.ttf
Size:14
Bold:
Font:FreeSansBold.ttf
Size:14
Title:
Font:titles.ttf
Size:48
BigBold:
Font:FreeSansBold.ttf
Size:24
Tiny:
Font:FreeSans.ttf
Size:10
TinyBold:
Font:FreeSansBold.ttf
Size:10

35
mods/d2k/music.yaml Normal file
View File

@@ -0,0 +1,35 @@
# requires Dune 2000/DATA/Music copied to OpenRA/Content/d2k
AMBUSH: The Ambush
Extension: AUD
ARAKATAK: Attack on Arrakis
Extension: AUD
ATREGAIN: The Atreides Gain
Extension: AUD
ENTORDOS: Enter the Ordos
Extension: AUD
FIGHTPWR: Fight for Power
Extension: AUD
FREMEN: The Fremen
Extension: AUD
HARK_BAT: Harkonnen Battle
Extension: AUD
LANDSAND: Land of Sand
Extension: AUD
OPTIONS: Options
Extension: AUD
PLOTTING: Plotting
Extension: AUD
RISEHARK: Rise of Harkonnen
Extension: AUD
ROBOTIX: Robotix
Extension: AUD
SCORE: Score
Extension: AUD
SOLDAPPR: The Soldiers Approach
Extension: AUD
SPICESCT: Spice Scouting
Extension: AUD
UNDERCON: Under Construction
Extension: AUD
WAITGAME: The Waiting Game
Extension: AUD

Binary file not shown.

Before

Width:  |  Height:  |  Size: 751 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 801 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,101 @@
CARRYALL:
Inherits: ^Helicopter
Buildable:
Queue: Plane
BuildPaletteOrder: 110
Prerequisites: anyhightech
BuiltAt: hightecha
Owner: atreides,harkonnen,ordos
Valued:
Cost: 1200
Tooltip:
Name: Carryall
Description: Fast drop ship.\n Unarmed
Health:
HP: 500
Armor:
Type: Light
RevealsShroud:
Range: 12
Helicopter:
InitialFacing: 0
ROT: 5
Speed: 15
LandableTerrainTypes: Sand, Rock, Spice, Dune
RepairBuildings: repaira,repairo,repairh
RearmBuildings: hightecha
RenderUnit:
RenderCargo:
WithShadow:
Cargo:
Types: Vehicle
MaxWeight: 1
PipCount: 1
FallsToEarth:
Explosion: UnitExplode
FRIGATE:
ParaDrop:
LZRange: 1
Inherits: ^Plane
Tooltip:
Name: Frigate
Description: Supply spacecraft
Plane:
ROT: 5
Speed: 35
RepairBuildings: repaira,repairo,repairh
RearmBuildings: hightecha
Health:
HP: 25
Armor:
Type: Heavy
RenderUnit:
Image: frigate
WithShadow:
Cargo:
MaxWeight: 10
PipCount: 10
Invulnerable:
-Selectable:
-GainsExperience:
FlyAwayOnIdle:
ORNI:
Inherits: ^Helicopter
Buildable:
Queue: Plane
BuildPaletteOrder: 90
Prerequisites: researcha
BuiltAt: hightecha
Owner: atreides
Valued:
Cost: 1000
Tooltip:
Name: Ornithocopter
Description: Helicopter Gunship with Chainguns.\n Strong vs Infantry, Light Vehicles.\n Weak vs Tanks
Health:
HP: 150
Armor:
Type: Light
RevealsShroud:
Range: 10
AttackHeli:
PrimaryWeapon: ChainGun
PrimaryOffset: -5,-2,0,2
FacingTolerance: 20
Helicopter:
LandWhenIdle: false
InitialFacing: 20
ROT: 4
Speed: 12
RepairBuildings: repaira,repairo,repairh
RearmBuildings: hightecha
RenderUnit:
WithShadow:
Selectable:
Bounds: 38,32,0,0
FallsToEarth:
Explosion: UnitExplode
SmokeTrailWhenDamaged:
Offset: 0,-10

View File

@@ -0,0 +1,139 @@
CONYARDA:
Inherits: ^CONYARD
Buildable:
Owner: atreides
Transforms:
IntoActor: mcva
Offset:1,1
Facing: 270
PWRA:
Inherits: ^POWER
Buildable:
Prerequisites: conyarda
Owner: atreides
REFA:
Inherits: ^REFINERY
Buildable:
Prerequisites: pwra
Owner: atreides
RenderBuildingWarFactory:
Image: REFA
BARRA:
Inherits: ^BARRACKS
Buildable:
Prerequisites: pwra
Owner: atreides
HIGHTECHA:
Inherits: ^HIGHTECH
Buildable:
Prerequisites: radara
Owner: atreides
RESEARCHA:
Inherits: ^RESEARCH
Buildable:
Prerequisites: radara,heavya
Owner: atreides
PALACEA:
Inherits: ^PALACE
Buildable:
Prerequisites: researcha
Owner: atreides
SILOA:
Inherits: ^SILO
Buildable:
Prerequisites: refa
Owner: atreides
LIGHTA:
Inherits: ^LIGHT
Buildable:
Prerequisites: refa
Owner: atreides
RenderBuildingWarFactory:
Image: LIGHTA
HEAVYA:
Inherits: ^HEAVY
Buildable:
Prerequisites: lighta
Owner: atreides
RenderBuildingWarFactory:
Image: HEAVYA
RADARA:
Inherits: ^RADAR
Buildable:
Prerequisites: barra
Owner: atreides
STARPORTA:
Inherits: ^STARPORT
Buildable:
Prerequisites: radara
Owner: atreides
ProductionQueue:
QueuedAudio: AI_ORDER.AUD
ReadyAudio: AI_REINF.AUD
OnHoldAudio: AI_HOLD.AUD
CancelledAudio: AI_CANCL.AUD
REPAIRA:
Inherits: ^REPAIR
Buildable:
Prerequisites: heavya
Owner: atreides
MCVA:
Inherits: ^MCV
Buildable:
Prerequisites: heavya,repaira
Owner: atreides
Transforms:
Facing: 10
IntoActor: conyarda
Offset:-1,-1
TransformSounds:
NoTransformSounds: AI_DPLOY.AUD
RenderUnit:
Image: DMCV
COMBATA:
Inherits: ^COMBAT
Buildable:
Prerequisites: heavya
Owner: atreides
SONIC:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
BuildPaletteOrder: 15
Prerequisites: heavya,researcha
Owner: atreides
Valued:
Cost: 1500
Tooltip:
Name: Sonic Tank
Description: Fires a sound wave\n Strong vs Infantry.\n Weak vs Tanks
Selectable:
Bounds: 24,24
Health:
HP: 150
Armor:
Type: Light
Mobile:
Speed: 8
RevealsShroud:
Range: 7
RenderUnit:
AttackFrontal:
PrimaryWeapon: TTankZap
PrimaryOffset: 0,0,0,-5
AutoTarget:

View File

@@ -1,16 +1,171 @@
^Vehicle:
AppearsOnRadar:
Mobile:
Crushes: crate
TerrainSpeeds:
Clear: 100%
Sand: 80
Rock: 90
Concrete: 100
Spice: 70
SpiceBlobs: 70
Dune: 40
ROT: 5
SelectionDecorations:
Selectable:
Targetable:
Voice: VehicleVoice
TargetableUnit:
TargetTypes: Ground
Repairable:
Passenger:
CargoType: Vehicle
AttackMove:
HiddenUnderFog:
GainsExperience:
GivesExperience:
DrawLineToTarget:
DrawLineToTarget:
ActorLostNotification:
Notification:
ProximityCaptor:
Types:Vehicle
GivesBounty:
WithSmoke:
Repairable:
RepairBuildings: repaira,repairh,repairo
^Tank:
AppearsOnRadar:
Mobile:
Crushes: crate
TerrainSpeeds:
Sand: 80
Rock: 90
Concrete: 100
Spice: 70
SpiceBlobs: 70
Dune: 40
ROT: 5
SelectionDecorations:
Selectable:
Voice: VehicleVoice
TargetableUnit:
TargetTypes: Ground
Passenger:
CargoType: Vehicle
AttackMove:
HiddenUnderFog:
GainsExperience:
GivesExperience:
DrawLineToTarget:
ActorLostNotification:
Notification:
ProximityCaptor:
Types:Tank
GivesBounty:
WithSmoke:
Repairable:
RepairBuildings: repaira,repairh,repairo
^Infantry:
AppearsOnRadar:
Health:
Radius: 3
Armor:
Type: None
RevealsShroud:
Range: 4
Mobile:
Crushes: crate
SharesCell: true
TerrainSpeeds:
Sand: 80
Rock: 90
Concrete: 100
Spice: 70
SpiceBlobs: 70
Dune: 40
Rough: 60
SelectionDecorations:
Selectable:
Voice: GenericVoice
TargetableUnit:
TargetTypes: Ground
RenderInfantry:
AutoTarget:
AttackMove:
Passenger:
CargoType: Infantry
HiddenUnderFog:
GainsExperience:
GivesExperience:
DrawLineToTarget:
ActorLostNotification:
Notification:
ProximityCaptor:
Types:Infantry
GivesBounty:
CrushableInfantry:
CrushSound:
^Plane:
AppearsOnRadar:
UseLocation: yes
SelectionDecorations:
Selectable:
Voice: GenericVoice
TargetableAircraft:
TargetTypes: Air
GroundedTargetTypes: Ground
HiddenUnderFog:
GainsExperience:
GivesExperience:
DrawLineToTarget:
ActorLostNotification:
Notification:
DebugAircraftFacing:
DebugAircraftSubPxX:
DebugAircraftSubPxY:
DebugAircraftAltitude:
ProximityCaptor:
Types:Plane
EjectOnDeath:
PilotActor: RIFLE
SuccessRate: 50
GivesBounty:
^Helicopter:
Inherits: ^Plane
^Building:
AppearsOnRadar:
SelectionDecorations:
Selectable:
Priority: 3
TargetableBuilding:
TargetTypes: Ground
Building:
Dimensions: 1,1
Footprint: x
TerrainTypes: Rock, Concrete
GivesBuildableArea:
Capturable:
CapturableBar:
SoundOnDamageTransition:
DamagedSound:
DestroyedSound:
RenderBuilding:
WithBuildingExplosion:
RepairableBuilding:
EmitInfantryOnSell:
ActorTypes: rifle,rifle,rifle,rifle,rifle,rifle
MustBeDestroyed:
GivesExperience:
# FrozenUnderFog:
CaptureNotification:
Notification:
EditorAppearance:
RelativeToTopLeft: yes
ShakeOnDeath:
ProximityCaptor:
Types:Building
Sellable:
AcceptsSupplies:
GivesBounty:

View File

@@ -0,0 +1,146 @@
CONYARDH:
Inherits: ^CONYARD
Buildable:
Owner: harkonnen
Transforms:
IntoActor: mcvh
Offset:1,1
Facing: 270
PWRH:
Inherits: ^POWER
Buildable:
Prerequisites: conyardh
Owner: harkonnen
REFH:
Inherits: ^REFINERY
Buildable:
Prerequisites: pwrh
Owner: harkonnen
RenderBuildingWarFactory:
Image: REFH
BARRH:
Inherits: ^BARRACKS
Buildable:
Prerequisites: pwrh
Owner: harkonnen
HIGHTECHH:
Inherits: ^HIGHTECH
Buildable:
Prerequisites: radarh
Owner: harkonnen
RESEARCHH:
Inherits: ^RESEARCH
Buildable:
Prerequisites: radarh,heavyh
Owner: harkonnen
PALACEH:
Inherits: ^PALACE
Buildable:
Prerequisites: researchh
Owner: harkonnen
SILOH:
Inherits: ^SILO
Buildable:
Prerequisites: refh
Owner: harkonnen
LIGHTH:
Inherits: ^LIGHT
Buildable:
Prerequisites: refh
Owner: harkonnen
RenderBuildingWarFactory:
Image: LIGHTH
HEAVYH:
Inherits: ^HEAVY
Buildable:
Prerequisites: lighth
Owner: harkonnen
RenderBuildingWarFactory:
Image: HEAVYH
RADARH:
Inherits: ^RADAR
Buildable:
Prerequisites: barrh
Owner: harkonnen
STARPORTH:
Inherits: ^STARPORT
Buildable:
Prerequisites: radarh
Owner: harkonnen
ProductionQueue:
QueuedAudio: HI_ORDER.AUD
ReadyAudio: HI_REINF.AUD
OnHoldAudio: HI_HOLD.AUD
CancelledAudio: HI_CANCL.AUD
REPAIRH:
Inherits: ^REPAIR
Buildable:
Prerequisites: heavyh
Owner: harkonnen
MCVH:
Inherits: ^MCV
Buildable:
Prerequisites: heavyh,repairh
Owner: harkonnen
Transforms:
Facing: 10
IntoActor: conyardh
Offset:-1,-1
TransformSounds:
NoTransformSounds: HI_DPLOY.AUD
RenderUnit:
Image: DMCV
COMBATH:
Inherits: ^COMBAT
Buildable:
Prerequisites: heavyh
Owner: harkonnen
DEVAST:
Inherits: ^Tank
Buildable:
Queue: Vehicle
BuildPaletteOrder: 100
Prerequisites: repairh,researchh
Owner: harkonnen
Valued:
Cost: 1800
Tooltip:
Name: Devastator
Description: Big and slow tank.\n Strong vs Tanks\n Weak vs Infantry, Aircraft
Health:
HP: 900
Armor:
Type: Heavy
Mobile:
Speed: 3
Crushes: crate, infantry
RevealsShroud:
Range: 6
RenderUnit:
AttackFrontal:
PrimaryWeapon: 120mm
PrimaryLocalOffset: -4,-5,0,0,0, 4,-5,0,0,0
PrimaryRecoil: 4
PrimaryRecoilRecovery: 0.7
AutoTarget:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
LeavesHusk:
Selectable:
Bounds: 44,38,0,-4

View File

@@ -0,0 +1,22 @@
RIFLE:
Inherits: ^Infantry
Buildable:
Queue: Infantry
BuildPaletteOrder: 10
Owner: atreides,harkonnen,ordos
Valued:
Cost: 100
Tooltip:
Name: Rifle Infantry
Description: General-purpose infantry.\n Strong vs Infantry\n Weak vs Vehicles
Selectable:
Bounds: 12,17,0,0
Health:
HP: 50
Mobile:
Speed: 4
AttackFrontal:
PrimaryWeapon: M1Carbine
TakeCover:
-RenderInfantry:
RenderInfantryProne:

169
mods/d2k/rules/ordos.yaml Normal file
View File

@@ -0,0 +1,169 @@
CONYARDO:
Inherits: ^CONYARD
Buildable:
Owner: ordos
Transforms:
IntoActor: mcvo
Offset:1,1
Facing: 270
PWRO:
Inherits: ^POWER
Buildable:
Prerequisites: conyardo
Owner: ordos
REFO:
Inherits: ^REFINERY
Buildable:
Prerequisites: pwro
Owner: ordos
RenderBuildingWarFactory:
Image: REFO
BARRO:
Inherits: ^BARRACKS
Buildable:
Prerequisites: pwro
Owner: ordos
HIGHTECHO:
Inherits: ^HIGHTECH
Buildable:
Prerequisites: radaro
Owner: ordos
RESEARCHO:
Inherits: ^RESEARCH
Buildable:
Prerequisites: radaro,heavyo
Owner: ordos
PALACEO:
Inherits: ^PALACE
Buildable:
Prerequisites: researcho
Owner: ordos
SILOO:
Inherits: ^SILO
Buildable:
Prerequisites: refo
Owner: ordos
LIGHTO:
Inherits: ^LIGHT
Buildable:
Prerequisites: refo
Owner: ordos
RenderBuildingWarFactory:
Image: LIGHTO
HEAVYO:
Inherits: ^HEAVY
Buildable:
Prerequisites: lighto
Owner: ordos
RenderBuildingWarFactory:
Image: HEAVYO
RADARO:
Inherits: ^RADAR
Buildable:
Prerequisites: barro
Owner: ordos
STARPORTO:
Inherits: ^STARPORT
Buildable:
Prerequisites: radaro
Owner: ordos
ProductionQueue:
QueuedAudio: OI_ORDER.AUD
ReadyAudio: OI_REINF.AUD
OnHoldAudio: OI_HOLD.AUD
CancelledAudio: OI_CANCL.AUD
REPAIRO:
Inherits: ^REPAIR
Buildable:
Prerequisites: heavyo
Owner: ordos
MCVO:
Inherits: ^MCV
Buildable:
Prerequisites: heavyo,repairo
Owner: ordos
Transforms:
Facing: 10
IntoActor: conyardo
Offset:-1,-1
TransformSounds:
NoTransformSounds: OI_DPLOY.AUD
RenderUnit:
Image: DMCV
COMBATO:
Inherits: ^COMBAT
Buildable:
Prerequisites: heavyo
Owner: ordos
RAIDER:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
BuildPaletteOrder: 15
Prerequisites: anylight
Owner: ordos
Valued:
Cost: 200
Tooltip:
Name: Raider
Description: Weak Scout.\n Decent vs. Infantry
Selectable:
Bounds: 24,24
Health:
HP: 125
Armor:
Type: Light
Mobile:
ROT: 15
Speed: 20
RevealsShroud:
Range: 8
RenderUnit:
AttackFrontal:
PrimaryWeapon: M60mg
PrimaryOffset: 0,0,0,-4
SecondaryWeapon: M60mg
SecondaryOffset: 0,0,0,-4
AutoTarget:
DEVIATOR:
Inherits: ^Tank
Valued:
Cost: 800
Tooltip:
Name: Deviator
Description: Long range artillery.\n Strong vs Infantry, Tanks, Air\n Weak vs Buildings
Buildable:
Queue: Vehicle
BuildPaletteOrder: 50
Prerequisites: anyheavy
Owner: ordos
Mobile:
Speed: 6
Health:
HP: 150
Armor:
Type: Light
RevealsShroud:
Range: 6
RenderUnit:
AttackFrontal:
PrimaryWeapon: MammothTusk
PrimaryLocalOffset: -7,2,0,0,25, 7,2,0,0,-25
PrimaryRecoil: 1
AutoTarget:

View File

@@ -0,0 +1,458 @@
^CONYARD:
Inherits: ^Building
Building:
Power: 0
Footprint: xxx xxx xxx
Dimensions: 3,3
Health:
HP: 1000
Armor:
Type: Heavy
RevealsShroud:
Range: 5
Bib:
Production:
Produces: Building,Defense
Valued:
Cost: 2500
Tooltip:
Name: Construction Yard
CustomSellValue:
Value: 2500
BaseBuilding:
ProductionBar:
^POWER:
Inherits: ^Building
Buildable:
Queue: Building
BuildPaletteOrder: 0
Hotkey: w
Valued:
Cost: 300
Tooltip:
Name: Windtrap
Description: Provides power for other structures
ProvidesCustomPrerequisite:
Prerequisite: anypower
Building:
Power: 100
Footprint: xx xx xx
Dimensions: 2,3
Health:
HP: 400
Armor:
Type: Wood
RevealsShroud:
Range: 4
Bib:
^BARRACKS:
Inherits: ^Building
Buildable:
Queue: Building
BuildPaletteOrder: 30
Prerequisites: anypower
Hotkey: b
Valued:
Cost: 400
Tooltip:
Name: Barracks
Description: Trains infantry
Building:
Power: -20
Footprint: xx xx xx
Dimensions: 2,3
Health:
HP: 800
Armor:
Type: Wood
RevealsShroud:
Range: 5
Bib:
RallyPoint:
Exit@1:
SpawnOffset: -1,19
ExitCell: 0,2
Exit@2:
SpawnOffset: -17,15
ExitCell: 0,2
Production:
Produces: Infantry
PrimaryBuilding:
ProductionBar:
^HIGHTECH:
Inherits: ^Building
Buildable:
Queue: Building
BuildPaletteOrder: 50
Valued:
Cost: 2000
Tooltip:
Name: High Tech Factory
Description: Produces Carryalls
ProvidesCustomPrerequisite:
Prerequisite: anyhightech
Building:
Power: -30
Footprint: _x_ xxx xxx
Dimensions: 3,3
Health:
HP: 1500
Armor:
Type: Light
RevealsShroud:
Range: 4
Bib:
RallyPoint:
Exit@1:
SpawnOffset: 5,0
ExitCell: 1,1
Production:
Produces: Plane
PrimaryBuilding:
ProductionBar:
^RESEARCH:
Inherits: ^Building
Buildable:
Queue: Building
BuildPaletteOrder: 50
Valued:
Cost: 2000
Tooltip:
Name: IX Research Center
Description: Provides advanced units
Building:
Power: -30
Footprint: _x_ xxx xxx
Dimensions: 3,3
Health:
HP: 1000
Armor:
Type: Light
RevealsShroud:
Range: 4
Bib:
^PALACE:
Inherits: ^Building
Buildable:
Queue: Building
BuildPaletteOrder: 50
Valued:
Cost: 2000
Tooltip:
Name: Palace
Description: Provides advanced technology
Building:
Power: -30
Footprint: xxx xxx xxx
Dimensions: 3,3
Health:
HP: 2000
Armor:
Type: Light
RevealsShroud:
Range: 4
Bib:
^REFINERY:
Inherits: ^Building
Buildable:
Queue: Building
BuildPaletteOrder: 10
Prerequisites: anypower
ProvidesCustomPrerequisite:
Prerequisite: anyref
Valued:
Cost: 1400
Tooltip:
Name: Spice Refinery
Description: Harvesters unload spice here.
Building:
Power: -30
Footprint: xxx xxx x==
Dimensions: 3,3
Health:
HP: 900
Armor:
Type: Wood
RevealsShroud:
Range: 6
Bib:
-RenderBuilding:
OreRefinery:
StoresOre:
PipCount: 17
Capacity: 2000
CustomSellValue:
Value: 600
FreeActor:
Actor: HARVESTER
InitialActivity: FindResources
SpawnOffset: 1,2
Facing: 64
^SILO:
Inherits: ^Building
Buildable:
Queue: Building
BuildPaletteOrder: 40
Valued:
Cost: 150
Tooltip:
Name: Silo
Description: Stores excess harvested Spice
Building:
Power: -10
-GivesBuildableArea:
Health:
HP: 300
Armor:
Type: Wood
RevealsShroud:
Range: 4
-RenderBuilding:
RenderBuildingSilo:
StoresOre:
PipCount: 5
Capacity: 1500
-EmitInfantryOnSell:
^LIGHT:
Inherits: ^Building
Buildable:
Queue: Building
BuildPaletteOrder: 50
ProvidesCustomPrerequisite:
Prerequisite: anylight
Valued:
Cost: 1000
Tooltip:
Name: Light Factory
Description: produces light vehicles.
Building:
Power: -30
Footprint: xxx xxx
Dimensions: 3,2
Health:
HP: 750
Armor:
Type: Light
RevealsShroud:
Range: 4
Bib:
-RenderBuilding:
RallyPoint:
Exit@1:
SpawnOffset: 10,0
ExitCell: 1,3
Production:
Produces: Vehicle
PrimaryBuilding:
ProductionBar:
^HEAVY:
Inherits: ^Building
Buildable:
Queue: Building
BuildPaletteOrder: 50
ProvidesCustomPrerequisite:
Prerequisite: anyheavy
Valued:
Cost: 2000
Tooltip:
Name: Heavy Factory
Description: produces tanks
Building:
Power: -30
Footprint: _x_ xxx xxx
Dimensions: 3,3
Health:
HP: 1500
Armor:
Type: Light
RevealsShroud:
Range: 4
Bib:
-RenderBuilding:
RallyPoint:
Exit@1:
SpawnOffset: 10,0
ExitCell: 1,3
Production:
Produces: Vehicle
PrimaryBuilding:
ProductionBar:
^RADAR:
RequiresPower:
CanPowerDown:
Inherits: ^Building
Buildable:
Queue: Building
BuildPaletteOrder: 60
ProvidesCustomPrerequisite:
Prerequisite: anyradar
Valued:
Cost: 1400
Tooltip:
Name: Outpost
Description: Provides a radar map of the battlefield.\n Requires power to operate.
Building:
Power: -40
Footprint: xxx xxx xxx
Dimensions: 3,3
Health:
HP: 1000
Armor:
Type: Wood
RevealsShroud:
Range: 10
Bib:
ProvidesRadar:
^STARPORT:
Inherits: ^Building
Valued:
Cost: 2000
Tooltip:
Name: Starport
Description: Provides a dropzone for vehicle reinforcements
ProvidesCustomPrerequisite:
Prerequisite: anystarport
Buildable:
Queue: Building
BuildPaletteOrder: 60
Building:
Power: -30
Footprint: xxx xxx xxx
Dimensions: 3,3
Health:
HP: 1000
RevealsShroud:
Range: 7
Bib:
RallyPoint:
RallyPoint: 4,2
BelowUnits:
Exit@1:
SpawnOffset: -24,0
ExitCell: 3,1
ProductionAirdrop:
Produces: Vehicle
ReadyAudio: AI_REINF.AUD
ActorType: frigate
ProductionQueue:
Type: Vehicle
Group: Vehicle
BuildSpeed: .4
LowPowerSlowdown: 3
ProductionBar:
WALL:
Buildable:
Queue: Defense
BuildPaletteOrder: 1000
Owner: atreides,harkonnen,ordos
SoundOnDamageTransition:
DamagedSound:
DestroyedSound:
Valued:
Cost: 100
CustomSellValue:
Value: 0
Tooltip:
Name: Concrete Wall
Description: Stop units and blocks enemy fire.
AppearsOnRadar:
Building:
Dimensions: 1,1
Footprint: x
BuildSounds:
Adjacent: 7
TerrainTypes: Clear,Road
Health:
HP: 500
Armor:
Type: Concrete
Wall:
CrushClasses: heavywall
LineBuild:
Range: 8
SelectionDecorations:
Selectable:
Priority: 1
TargetableBuilding:
TargetTypes: Ground
RenderBuildingWall:
HasMakeAnimation: false
Palette: d2k
GivesExperience:
EditorAppearance:
RelativeToTopLeft: yes
AutoTargetIgnore:
ProximityCaptor:
Types:Wall
Sellable:
GUNTOWER:
Inherits: ^Building
Buildable:
Queue: Defense
BuildPaletteOrder: 40
Owner: atreides,harkonnen,ordos
Valued:
Cost: 600
Tooltip:
Name: Turret
Description: Anti-Armor base defense.\n Strong vs Tanks\n Weak vs Infantry, Aircraft
Icon: turreticon
Building:
Power: -40
-GivesBuildableArea:
Health:
HP: 400
Armor:
Type: Heavy
RevealsShroud:
Range: 7
RenderRangeCircle:
-RenderBuilding:
RenderBuildingTurreted:
Palette: d2k
Turreted:
ROT: 12
InitialFacing: 50
AttackTurreted:
PrimaryWeapon: TurretGun
AutoTarget:
^REPAIR:
Inherits: ^Building
Buildable:
Queue: Building
BuildPaletteOrder: 30
Valued:
Cost: 1000
Tooltip:
Name: Repair Pad
Description: Repairs vehicles and allows\n the construction of additional bases.
Building:
Power: -30
Footprint: xxx xxx xxx
Dimensions: 3,3
Health:
HP: 800
Armor:
Type: Wood
RevealsShroud:
Range: 5
BelowUnits:
Reservable:
RepairsUnits:
Interval: 10
RallyPoint:

View File

@@ -1,79 +1,286 @@
#TODO: Currently only uses the Atreides voices.
Player:
TechTree:
ClassicProductionQueue@Building:
Type: Building
BuildSpeed: .4
LowPowerSlowdown: 3
QueuedAudio: AI_BUILD.AUD
OnHoldAudio: AI_HOLD.AUD
ReadyAudio: AI_BDRDY.AUD
CancelledAudio: AI_CANCL.AUD
BlockedAudio: AI_NROOM.AUD
ClassicProductionQueue@Defense:
Type: Defense
BuildSpeed: .4
LowPowerSlowdown: 3
QueuedAudio: AI_BUILD.AUD
OnHoldAudio: AI_HOLD.AUD
ReadyAudio: AI_BDRDY.AUD
CancelledAudio: AI_CANCL.AUD
BlockedAudio: AI_NROOM.AUD
ClassicProductionQueue@Vehicle:
Type: Vehicle
BuildSpeed: .4
LowPowerSlowdown: 3
ReadyAudio: AI_UNRDY.AUD
QueuedAudio:AI_TRAIN.AUD
OnHoldAudio: AI_HOLD.AUD
CancelledAudio: AI_CANCL.AUD
BlockedAudio: AI_NROOM.AUD
ClassicProductionQueue@Infantry:
Type: Infantry
BuildSpeed: .4
LowPowerSlowdown: 3
ReadyAudio: AI_UNRDY.AUD
QueuedAudio:AI_TRAIN.AUD
OnHoldAudio: AI_HOLD.AUD
CancelledAudio: AI_CANCL.AUD
BlockedAudio: AI_NROOM.AUD
ClassicProductionQueue@Plane:
Type: Plane
BuildSpeed: .4
LowPowerSlowdown: 3
ReadyAudio: AI_UNRDY.AUD
QueuedAudio:AI_TRAIN.AUD
OnHoldAudio: AI_HOLD.AUD
CancelledAudio: AI_CANCL.AUD
BlockedAudio: AI_NROOM.AUD
PlaceBuilding:
SupportPowerManager:
ConquestVictoryConditions:
WinNotification:AI_MWIN.AUD
LoseNotification:AI_MFAIL.AUD
PowerManager:
AllyRepair:
PlayerResources:
InitialCash: 5000
ActorGroupProxy:
DeveloperMode:
HackyAI@Omnius:
Name:Omnius
RallypointTestBuilding: conyarda
BuildingFractions:
refa: 25.1%
refh: 25.1%
refo: 25.1%
barra: 0.1%
barrh: 0.1%
barro: 0.1%
lighta: 0.1%
lighth: 0.1%
lighto: 0.1%
heavya: 0.1%
heavyh: 0.1%
heavyo: 0.1%
researcha: 0.1%
researchh: 0.1%
researcho: 0.1%
repaira: 0.1%
repairh: 0.1%
repairo: 0.1%
radara: 0.1%
radaro: 0.1%
radarh: 0.1%
powra: 35%
powrh: 35%
powro: 35%
UnitsToBuild:
trike: 30%
raider: 30%
quad: 40%
siege: 15%
combata: 70%
combath: 70%
combato: 70%
sonic: 25%
devast: 25%
deviator: 25%
SquadSize: 10
PlayerColorPalette:
BasePalette: d2k
PaletteFormat: d2k
BaseAttackNotifier:
Audio: AI_ATACK.AUD
World:
World:
OpenWidgetAtGameStart:
Widget: INGAME_ROOT
ObserverWidget: OBSERVER_ROOT
ScreenShaker:
ColorPickerPaletteModifier:
NukePaletteEffect:
BuildingInfluence:
UnitInfluence:
ChooseBuildTabOnSelect:
CrateSpawner:
Minimum: 1
Maximum: 3
SpawnInterval: 120
WaterChance: 0
PaletteFromCurrentTileset:
Name: terrain
PlayerColorPalette:
BasePalette: units
PaletteFormat: d2k
PaletteFromFile@units:
Name: units
Filename: units.pal
PaletteFromFile@d2k:
Name: d2k
Filename: d2k.pal
PaletteFromFile@chrome:
Name: chrome
Filename: temperat.pal
Filename: d2k.pal
PaletteFromFile@effect:
Name: effect
Filename: temperat.pal
PaletteFromFile@cursor:
Name: cursor
Filename: temperat.pal
PaletteFromRGBA@shadow:
Name: shadow
R: 0
G: 0
B: 0
A: 140
PaletteFromRGBA@cloak:
Name: cloak
R: 0
G: 0
B: 0
A: 140
PaletteFromRGBA@highlight:
Name: highlight
R: 255
G: 255
B: 255
A: 128
PaletteFromRGBA@invuln:
Name: invuln
R: 128
G: 0
B: 0
A: 128
PaletteFromRGBA@disabled:
Name: disabled
R: 0
G: 0
B: 0
A: 180
ColorPickerPaletteModifier:
ShroudPalette@shroud:
ShroudPalette@fog:
IsFog: yes
Name: fog
Country@0:
Name: Allies
Race: allies
Country@Atreides:
Name: Atreides
Race: atreides
Country@Harkonnen:
Name: Harkonnen
Race: harkonnen
Country@Ordos:
Name: Ordos
Race: ordos
# BibLayer:
ResourceLayer:
ResourceType@spice:
ResourceType: 1
Palette: d2k
TerrainType: Spice
SpriteNames: spice0
ValuePerUnit: 35
Name: Spice
PipColor: Yellow
AllowedTerrainTypes: Sand
AllowUnderActors: false
SmudgeLayer@CRATER:
Type:Crater
Types:rockcrater1,rockcrater2,sandcrater1,sandcrater2
Depths:15,15,15,15
SpawnMapActors:
CreateMPPlayers:
MPStartLocations:
SpawnMPUnits:
SpawnMPUnits@atreides:
InitialUnit: mcva
Faction: atreides
SpawnMPUnits@harkonnen:
InitialUnit: mcvh
Faction: harkonnen
SpawnMPUnits@ordos:
InitialUnit: mcvo
Faction: ordos
#TODO: These are just the Atreides sounds.
EvaAlerts:
RadarUp:
RadarDown:
BuildingSelectAudio:
BuildingReadyAudio:
BuildingCannotPlaceAudio:
UnitSelectAudio:
UnitReadyAudio:
OnHoldAudio:
CancelledAudio:
BuildingCannotPlaceAudio: AI_PLACE.AUD
CashTickUp:
CashTickDown:
LowPower:
SilosNeeded:
PrimaryBuildingSelected:
NewOptions: AI_NEWOP.AUD
LowPower: AI_POWER.AUD
SilosNeeded: AI_SILOS.AUD
PrimaryBuildingSelected: AI_PRMRY.AUD
AbilityInsufficientPower:
LevelUp:
SpatialBins:
BinSize: 4
Shroud:
Shroud:
PathFinder:
ValidateOrder:
CRATE:
Tooltip:
Name: Crate
Crate:
Lifetime: 120
TerrainTypes: Sand, Dune, Rock
GiveCashCrateAction:
Amount: 1000
SelectionShares: 50
UseCashTick: yes
LevelUpCrateAction:
SelectionShares: 40
ExplodeCrateAction@boom:
Weapon: CrateExplosion
SelectionShares: 5
ExplodeCrateAction@nuke:
Weapon: CrateNuke
SelectionShares: 5
HideMapCrateAction:
SelectionShares: 5
Effect: hide-map
RevealMapCrateAction:
SelectionShares: 1
Effect: reveal-map
#TODO: Currently only gives you an Atreides MCV
GiveMcvCrateAction:
SelectionShares: 2
NoBaseSelectionShares: 9001
Unit: mcva
GiveUnitCrateAction@trike:
SelectionShares: 7
Unit: trike
GiveUnitCrateAction@quad:
SelectionShares: 6
Unit: quad
RenderSimple:
BelowUnits:
ProximityCaptor:
Types:Crate
Passenger:
mpspawn:
Waypoint:
RenderEditorOnly:
waypoint:
Waypoint:
RenderEditorOnly:
SPICEBLOOM:
RenderBuilding:
Palette: d2k
Building:
Footprint: x
Dimensions: 1,1
AppearsOnRadar:
EditorAppearance:
RelativeToTopLeft: yes
ProximityCaptor:
Types:Tree
BelowUnits:
Tooltip:
Name: Spice Bloom
SeedsResource:
ResourceType: Spice
RadarColorFromTerrain:
Terrain: Spice

View File

@@ -1,10 +1,14 @@
MCV:
^MCV:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
BuildPaletteOrder: 110
Valued:
Cost: 2000
Tooltip:
Name: Mobile Construction Vehicle
Description: Deploys into another Construction Yard.\n Unarmed
Icon: mcvicon
Selectable:
Priority: 3
Bounds: 42,42
@@ -14,8 +18,190 @@ MCV:
Type: Light
Mobile:
Speed: 6
Crushes: crate, infantry
RevealsShroud:
Range: 4
RenderUnit:
MustBeDestroyed:
BaseBuilding:
BaseBuilding:
-AttackMove:
HARVESTER:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
BuildPaletteOrder: 10
Prerequisites: anyref,anyheavy
Owner: atreides,harkonnen,ordos
Valued:
Cost: 1100
Tooltip:
Name: Spice Harvester
Description: Collects Spice for processing.\n Unarmed
Selectable:
Priority: 7
Bounds: 42,42
Harvester:
Capacity: 20
Resources: Spice
UnloadTicksPerBale: 1
Health:
HP: 600
Armor:
Type: Heavy
Mobile:
Speed: 6
Crushes: crate, infantry
RenderUnit:
RevealsShroud:
Range: 4
-AttackMove:
TRIKE:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
BuildPaletteOrder: 15
Prerequisites: anylight
Owner: atreides,harkonnen
Valued:
Cost: 200
Tooltip:
Name: Scout Trike
Description: Weak Scout.\n Decent vs. Infantry
Selectable:
Bounds: 24,24
Health:
HP: 75
Armor:
Type: Light
Mobile:
ROT: 15
Speed: 20
RevealsShroud:
Range: 8
RenderUnit:
AttackFrontal:
PrimaryWeapon: M60mg
PrimaryOffset: 0,0,0,-4
AutoTarget:
QUAD:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
BuildPaletteOrder: 30
Prerequisites: anylight
Owner: atreides,harkonnen,ordos
Valued:
Cost: 400
Tooltip:
Name: Quad
Description: Fast scout vehicle, armed with \nrockets.\n Strong vs Vehicles\n Weak vs Infantry
Health:
HP: 120
Armor:
Type: Light
Mobile:
ROT: 10
Speed: 13
RevealsShroud:
Range: 7
RenderUnit:
AttackFrontal:
PrimaryWeapon: QuadRockets
PrimaryOffset: 0,0,0,-2
PrimaryLocalOffset: -4,0,0,0,25, 4,0,0,0,-25
AutoTarget:
^COMBAT:
Inherits: ^Tank
Buildable:
Queue: Vehicle
BuildPaletteOrder: 60
Valued:
Cost: 850
Tooltip:
Name: Combat Tank
Description: Main Battle Tank.\n Strong vs Tanks, Light Vehicles\n Weak vs Infantry, Aircraft
Health:
HP: 450
Armor:
Type: Heavy
Mobile:
Speed: 6
Crushes: crate, infantry
RevealsShroud:
Range: 5
Turreted:
ROT: 5
AttackTurreted:
PrimaryWeapon: 90mm
PrimaryRecoil: 3
PrimaryRecoilRecovery: 0.9
RenderUnitTurreted:
AutoTarget:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
Selectable:
Bounds: 30,30
SIEGE:
Inherits: ^Tank
Buildable:
Queue: Vehicle
BuildPaletteOrder: 80
Prerequisites: anyradar
Owner: atreides,harkonnen,ordos
Valued:
Cost: 600
Tooltip:
Name: Siege Tank
Description: Long-range artillery.\n Strong vs Infantry, Buildings\n Weak vs Tanks, Aircraft
Health:
HP: 75
Armor:
Type: Light
Mobile:
Speed: 6
Crushes: crate, infantry
RevealsShroud:
Range: 5
Turreted:
ROT: 5
AttackTurreted:
PrimaryWeapon: 155mm
PrimaryRecoil: 3
PrimaryRecoilRecovery: 0.9
RenderUnitTurreted:
Explodes:
Weapon: UnitExplode
Chance: 75
AutoTarget:
MISSILE:
Inherits: ^Tank
Valued:
Cost: 800
Tooltip:
Name: Missile Tank
Description: Long range artillery.\n Strong vs Infantry, Buildings\n Weak vs Tanks, Aircraft
Buildable:
Queue: Vehicle
BuildPaletteOrder: 50
Prerequisites: anyheavy
Owner: atreides,harkonnen,ordos
Mobile:
Speed: 6
Health:
HP: 120
Armor:
Type: Light
RevealsShroud:
Range: 6
RenderUnit:
AttackFrontal:
PrimaryWeapon: 227mm
PrimaryOffset: 0,6,0,-3
PrimaryLocalOffset: 3,-5,0,0,0, -3,-5,0,0,0
AutoTarget:

View File

@@ -1,12 +1,671 @@
mcv:
dmcv:
idle:
Start: 0
Facings: 32
moveflsh:
harvester:
idle:
Start: 0
Facings: 32
harvest:
Start: 0
Length: 0
Facings: 8
dock:
Start: 0
Length: 1
dock-loop:
Start: 0
Length: 1
wall:
idle:
Start: 0
Length: 16
scratched-idle:
Start: 0
Length: 16
damaged-idle:
Start: 16
Length: 16
critical-idle:
Start: 16
Length: 16
carryall:
idle:
Start: 0
Facings: 32
unload:
Start: 0
Facings: 32
orni:
idle:
Start: 0
Facings: 32
trike:
idle:
Start: 0
Facings: 32
quad:
idle:
Start: 0
Facings: 32
siege:
idle:
Start: 0
Facings: 32
turret: siegeturret
Start: 0
Facings: 32
missile:
idle:
Start: 0
Facings: 32
sonic:
idle:
Start: 0
Facings: 32
guntower:
idle:
Start: 0
Facings: 1
recoil:
Start: 0
Facings: 1
make: silomake
Start: 0
Length: *
damaged-idle:
Start: 0
Facings: 1
damaged-recoil:
Start: 0
Facings: 1
turret: gunturret
Start: 0
Facings: 32
frigate:
idle:
Start: 0
Facings: 1
rifle:
stand:
Start: 0
Facings: 8
stand2:
Start: 0
Facings: 8
stand3:
Start: 0
Facings: 8
run:
Start: 8
Length: 6
Facings: 8
shoot:
Start: 56
Length: 5
Facings: 8
prone-stand:
Start: 104
Length: 1
Facings: 8
prone-run:
Start: 112
Length: 3
Facings: 8
standup-0:
Start: 96
Length: 1
Facings: 8
prone-shoot:
Start: 136
Length: 5
Facings: 8
die1: rifledeath
Start: 0
Length: 5
die2: rifledeath
Start: 5
Length: 7
die3: rifledeath
Start: 12
Length: 7
die4: rifledeath
Start: 19
Length: 7
die5: rifledeath
Start: 26
Length: 7
die-crushed: rifledeath
Start: 54
Length: 22
Tick: 1600
conyarda:
idle:
Start: 0
make: conmake
Start: 0
Length: *
damaged-idle:
Start: 1
repaira:
idle:
Start: 0
make: repairmake
Start: 0
Length: *
damaged-idle:
Start: 1
starporta:
idle:
Start: 0
active:
Start: 0
Length: 1
damaged-idle:
Start: 1
damaged-active:
Start: 1
make: starportmake
Start: 0
Length: *
pwra:
idle:
Start: 0
make: wtrpmake
Start: 0
Length: *
damaged-idle:
Start: 1
barra:
idle:
Start: 0
make: barramake
Start: 0
Length: *
damaged-idle:
Start: 1
radara:
idle:
Start: 0
make: radarmake
Start: 0
Length: *
damaged-idle:
Start: 1
refa:
idle:
Start: 0
Length: 1
make: refmake
Start: 0
Length: *
damaged-idle:
Start: 0
build-top:
Start: 1
Length: 1
damaged-build-top:
Start: 2
Length: 1
idle-top:
Start: 1
damaged-idle-top:
Start: 2
siloa:
idle:
Start: 0
Length: 4
damaged-idle:
Start: 4
Length: 1
make: silomake
Start: 0
Length: *
hightecha:
idle:
Start: 0
make: highmake
Start: 0
Length: *
damaged-idle:
Start: 1
researcha:
idle:
Start: 0
make: researchmake
Start: 0
Length: *
damaged-idle:
Start: 1
palacea:
idle:
Start: 0
make: palacemake
Start: 0
Length: *
damaged-idle:
Start: 1
lighta:
idle:
Start: 0
Length: 1
make: lightmake
Start: 0
Length: *
damaged-idle:
Start: 0
build-top:
Start: 1
Length: 1
damaged-build-top:
Start: 2
Length: 1
idle-top:
Start: 1
damaged-idle-top:
Start: 2
heavya:
idle:
Start: 0
Length: 1
make: heavymake
Start: 0
Length: *
damaged-idle:
Start: 0
build-top:
Start: 1
Length: 1
damaged-build-top:
Start: 2
Length: 1
idle-top:
Start: 1
damaged-idle-top:
Start: 2
combata:
idle:
Start: 0
Facings: 32
turret: combataturret
Start: 0
Facings: 32
conyardh:
idle:
Start: 0
make: conmake
Start: 0
Length: *
damaged-idle:
Start: 1
repairh:
idle:
Start: 0
make: repairmake
Start: 0
Length: *
damaged-idle:
Start: 1
starporth:
idle:
Start: 0
active:
Start: 0
Length: 1
damaged-idle:
Start: 1
damaged-active:
Start: 1
make: starportmake
Start: 0
Length: *
pwrh:
idle:
Start: 0
make: wtrpmake
Start: 0
Length: *
damaged-idle:
Start: 1
barrh:
idle:
Start: 0
make: barramake
Start: 0
Length: *
damaged-idle:
Start: 1
radarh:
idle:
Start: 0
make: radarmake
Start: 0
Length: *
damaged-idle:
Start: 1
refh:
idle:
Start: 0
Length: 1
make: refmake
Start: 0
Length: *
damaged-idle:
Start: 0
build-top:
Start: 1
Length: 1
damaged-build-top:
Start: 2
Length: 1
idle-top:
Start: 1
damaged-idle-top:
Start: 2
siloh:
idle:
Start: 0
Length: 4
damaged-idle:
Start: 4
Length: 1
make: silomake
Start: 0
Length: *
hightechh:
idle:
Start: 0
make: highmake
Start: 0
Length: *
damaged-idle:
Start: 1
researchh:
idle:
Start: 0
make: researchmake
Start: 0
Length: *
damaged-idle:
Start: 1
palaceh:
idle:
Start: 0
make: palacemake
Start: 0
Length: *
damaged-idle:
Start: 1
lighth:
idle:
Start: 0
Length: 1
make: lightmake
Start: 0
Length: *
damaged-idle:
Start: 0
build-top:
Start: 1
Length: 1
damaged-build-top:
Start: 2
Length: 1
idle-top:
Start: 1
damaged-idle-top:
Start: 2
heavyh:
idle:
Start: 0
Length: 1
make: heavymake
Start: 0
Length: *
damaged-idle:
Start: 0
build-top:
Start: 1
Length: 1
damaged-build-top:
Start: 2
Length: 1
idle-top:
Start: 1
damaged-idle-top:
Start: 2
combath:
idle:
Start: 0
Facings: 32
turret: combathturret
Start: 0
Facings: 32
devast:
idle:
Start: 0
Facings: 32
conyardo:
idle:
Start: 0
make: conmake
Start: 0
Length: *
damaged-idle:
Start: 1
repairo:
idle:
Start: 0
make: repairmake
Start: 0
Length: *
damaged-idle:
Start: 1
starporto:
idle:
Start: 0
active:
Start: 0
Length: 1
damaged-idle:
Start: 1
damaged-active:
Start: 1
make: starportmake
Start: 0
Length: *
pwro:
idle:
Start: 0
make: wtrpmake
Start: 0
Length: *
damaged-idle:
Start: 1
barro:
idle:
Start: 0
make: barramake
Start: 0
Length: *
damaged-idle:
Start: 1
radaro:
idle:
Start: 0
make: radarmake
Start: 0
Length: *
damaged-idle:
Start: 1
refo:
idle:
Start: 0
Length: 1
make: refmake
Start: 0
Length: *
damaged-idle:
Start: 0
build-top:
Start: 1
Length: 1
damaged-build-top:
Start: 2
Length: 1
idle-top:
Start: 1
damaged-idle-top:
Start: 2
siloo:
idle:
Start: 0
Length: 4
damaged-idle:
Start: 4
Length: 1
make: silomake
Start: 0
Length: *
hightecho:
idle:
Start: 0
make: highmake
Start: 0
Length: *
damaged-idle:
Start: 1
researcho:
idle:
Start: 0
make: researchmake
Start: 0
Length: *
damaged-idle:
Start: 1
palaceo:
idle:
Start: 0
make: palacemake
Start: 0
Length: *
damaged-idle:
Start: 1
lighto:
idle:
Start: 0
Length: 1
make: lightmake
Start: 0
Length: *
damaged-idle:
Start: 0
build-top:
Start: 1
Length: 1
damaged-build-top:
Start: 2
Length: 1
idle-top:
Start: 1
damaged-idle-top:
Start: 2
heavyo:
idle:
Start: 0
Length: 1
make: heavymake
Start: 0
Length: *
damaged-idle:
Start: 0
build-top:
Start: 1
Length: 1
damaged-build-top:
Start: 2
Length: 1
idle-top:
Start: 1
damaged-idle-top:
Start: 2
combato:
idle:
Start: 0
Facings: 32
turret: combatoturret
Start: 0
Facings: 32
raider:
idle:
Start: 0
Facings: 32
deviator:
idle:
Start: 0
Facings: 32
pips:
groups:
@@ -18,27 +677,218 @@ pips:
Start: 3
hold:
Start: 4
pip-empty:
Start: 0
pip-green:
Start: 1
pip-yellow:
Start: 5
pip-gray:
Start: 6
pip-red:
Start: 7
tag-fake:
Start: 18
tag-primary:
Start: 2
pip-empty: pips2
Start: 0
pip-green: pips2
Start: 1
pip-yellow: pips2
Start: 2
pip-gray: pips2
Start: 3
pip-red: pips2
Start: 4
pip-blue: pips2
Start: 5
clock:
idle:
Start: 0
Length: *
powerdown:
disabled: speed
Start: 3
poweroff:
offline:
Start: 0
Length: *
Tick: 160
rank:
rank:
Start: 0
Length: *
Length: *
overlay:
build-valid:
Start: 0
build-invalid:
Start: 1
target-select:
Start: 2
target-valid:
Start: 0
target-invalid:
Start: 1
rallypoint:
flag:flagfly
Start: 0
Length: *
circles:fpls
Start: 0
Length: *
dragon:
idle:
Start: 0
Facings: 32
explosion:
piff: piff
Start: 0
Length: *
piffs: piffpiff
Start: 0
Length: *
small_explosion: veh-hit3
Start: 0
Length: *
med_explosion: veh-hit2
Start: 0
Length: *
large_splash: h2o_exp1
Start: 0
Length: *
napalm: napalm2
Start: 0
Length: *
nuke: atomsfx
Start: 0
Length: *
med_splash: h2o_exp2
Start: 0
Length: *
self_destruct: art-exp1
Start: 0
Length: *
building: fball1
Start: 0
Length: *
small_splash: h2o_exp3
Start: 0
Length: *
large_explosion: frag1
Start: 0
Length: *
small_napalm: napalm1
Start: 0
Length: *
smokey:
idle:
Start: 0
Length: *
smoke_m:
idle:
Start: 0
Length: *
loop:
Start: 49
Length: 42
end:
Start: 0
Length: 26
120mm:
idle:
Start: 0
litning:
bright:
Start: 0
Length: 4
dim:
Start: 4
Length: 4
crate:
idle: crates
Start: 0
land: crates
Start: 0
crate-effects:
speed: speed
Start: 0
Length: *
dollar: dollar
Start: 0
Length: *
reveal-map: earth
Start: 0
Length: *
hide-map: empulse
Start: 0
Length: *
fpower: fpower
Start: 0
Length: *
gps: gpsbox
Start: 0
Length: *
invuln: invulbox
Start: 0
Length: *
heal: invun
Start: 0
Length: *
nuke: missile2
Start: 0
Length: *
parabombs: parabox
Start: 0
Length: *
sonar: sonarbox
Start: 0
Length: *
stealth: stealth2
Start: 0
Length: *
timequake: tquake
Start: 0
Length: *
armor: armor
Start: 0
Length: *
chrono: chronbox
Start: 0
Length: *
airstrike: deviator
Start: 0
Length: *
levelup: levelup
Start: 0
Length: *
Tick: 200
allyrepair:
repair:
Start: 0
Length: *
Tick: 160
parach:
open:
Start: 0
Length: 5
idle:
Start: 5
Length: 11
spicebloom:
make:
Start: 0
Length: 3
active:
Start: 2
Length: 1
idle:
Start: 2

1930
mods/d2k/tilesets/BASE.tsx Normal file

File diff suppressed because it is too large Load Diff

1907
mods/d2k/tilesets/BAT.tsx Normal file

File diff suppressed because it is too large Load Diff

225
mods/d2k/tilesets/BGBS.tsx Normal file
View File

@@ -0,0 +1,225 @@
<?xml version="1.0" encoding="utf-8"?>
<tileset>
<name value="Temperat" />
<template>
<cell x="0" y="0" />
</template>
<template>
<cell x="12" y="0" />
<cell x="13" y="0" />
<cell x="13" y="1" />
<cell x="12" y="1" />
</template>
<template>
<cell x="14" y="1" />
<cell x="15" y="1" />
<cell x="15" y="0" />
<cell x="14" y="0" />
</template>
<template>
<cell x="13" y="2" />
<cell x="13" y="3" />
</template>
<template>
<cell x="12" y="3" />
<cell x="11" y="3" />
<cell x="10" y="3" />
<cell x="9" y="3" />
<cell x="8" y="3" />
<cell x="8" y="2" />
<cell x="9" y="2" />
<cell x="10" y="2" />
<cell x="11" y="2" />
<cell x="12" y="2" />
</template>
<template>
<cell x="14" y="2" />
<cell x="14" y="3" />
<cell x="15" y="3" />
<cell x="15" y="2" />
</template>
<template>
<cell x="16" y="2" />
<cell x="17" y="2" />
<cell x="17" y="3" />
<cell x="16" y="3" />
</template>
<template>
<cell x="18" y="3" />
<cell x="19" y="3" />
<cell x="19" y="2" />
<cell x="18" y="2" />
</template>
<template>
<cell x="18" y="1" />
<cell x="18" y="0" />
<cell x="19" y="0" />
<cell x="19" y="1" />
</template>
<template>
<cell x="17" y="1" />
<cell x="16" y="1" />
<cell x="16" y="0" />
<cell x="17" y="0" />
</template>
<template>
<cell x="18" y="4" />
<cell x="18" y="5" />
<cell x="19" y="5" />
<cell x="19" y="4" />
</template>
<template>
<cell x="18" y="6" />
<cell x="18" y="7" />
<cell x="19" y="7" />
<cell x="19" y="6" />
</template>
<template>
<cell x="16" y="5" />
<cell x="15" y="5" />
<cell x="15" y="4" />
<cell x="16" y="4" />
</template>
<template>
<cell x="14" y="4" />
<cell x="13" y="4" />
<cell x="13" y="5" />
<cell x="14" y="5" />
</template>
<template>
<cell x="12" y="5" />
<cell x="11" y="5" />
<cell x="11" y="4" />
<cell x="12" y="4" />
</template>
<template>
<cell x="10" y="4" />
<cell x="9" y="4" />
<cell x="9" y="5" />
<cell x="10" y="5" />
</template>
<template>
<cell x="8" y="5" />
<cell x="7" y="5" />
<cell x="7" y="4" />
<cell x="8" y="4" />
</template>
<template>
<cell x="6" y="4" />
<cell x="5" y="4" />
<cell x="5" y="5" />
<cell x="6" y="5" />
</template>
<template>
<cell x="0" y="6" />
<cell x="1" y="6" />
<cell x="1" y="7" />
<cell x="0" y="7" />
</template>
<template>
<cell x="2" y="7" />
<cell x="3" y="7" />
<cell x="3" y="6" />
<cell x="2" y="6" />
</template>
<template>
<cell x="4" y="7" />
<cell x="5" y="7" />
<cell x="5" y="6" />
<cell x="4" y="6" />
</template>
<template>
<cell x="6" y="7" />
<cell x="7" y="7" />
<cell x="7" y="6" />
<cell x="6" y="6" />
</template>
<template>
<cell x="8" y="6" />
<cell x="8" y="7" />
<cell x="9" y="7" />
<cell x="9" y="6" />
</template>
<template>
<cell x="10" y="6" />
<cell x="10" y="7" />
<cell x="11" y="7" />
<cell x="11" y="6" />
</template>
<template>
<cell x="12" y="6" />
<cell x="12" y="7" />
<cell x="13" y="7" />
<cell x="13" y="6" />
</template>
<template>
<cell x="14" y="6" />
<cell x="14" y="7" />
<cell x="15" y="7" />
<cell x="15" y="6" />
</template>
<template>
<cell x="16" y="6" />
<cell x="16" y="7" />
<cell x="17" y="7" />
<cell x="17" y="6" />
</template>
<template>
<cell x="1" y="8" />
<cell x="1" y="9" />
<cell x="0" y="9" />
<cell x="0" y="8" />
</template>
<template>
<cell x="2" y="8" />
<cell x="2" y="9" />
<cell x="3" y="9" />
<cell x="3" y="8" />
</template>
<template>
<cell x="4" y="8" />
<cell x="4" y="9" />
<cell x="5" y="9" />
<cell x="5" y="8" />
</template>
<template>
<cell x="6" y="8" />
<cell x="6" y="9" />
<cell x="7" y="9" />
<cell x="7" y="8" />
</template>
<template>
<cell x="8" y="8" />
<cell x="8" y="9" />
<cell x="9" y="9" />
<cell x="9" y="8" />
</template>
<template>
<cell x="10" y="8" />
<cell x="10" y="9" />
<cell x="11" y="9" />
<cell x="11" y="8" />
<cell x="12" y="8" />
<cell x="12" y="9" />
<cell x="13" y="9" />
<cell x="13" y="8" />
</template>
<template>
<cell x="14" y="8" />
<cell x="14" y="9" />
<cell x="15" y="9" />
<cell x="15" y="8" />
</template>
<template>
<cell x="16" y="8" />
<cell x="16" y="9" />
<cell x="17" y="9" />
<cell x="17" y="8" />
</template>
<template>
<cell x="18" y="8" />
<cell x="18" y="9" />
<cell x="19" y="9" />
<cell x="19" y="8" />
</template>
</tileset>

View File

@@ -1,285 +0,0 @@
General:
Name: Arrakis
TileSize: 32
Id: ARRAKIS
Palette: arrakis.pal
Extensions: .arr,.shp
Terrain:
TerrainType@Clear:
Type: Clear
Buildable: True
AcceptSmudge: True
IsWater: False
Color: 255,255,255,255
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: 2,2
PickAny: False
Tiles:
0: Clear
1: Clear
3: Clear
2: 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: 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@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,2
PickAny: False
Tiles:
0: Clear
1: Clear
3: Clear
2: Clear
Template@25:
Id: 25
Image: t25
Size: 2,2
PickAny: False
Tiles:
0: Clear
1: Clear
3: Clear
2: Clear

2408
mods/d2k/tilesets/base.yaml Normal file

File diff suppressed because it is too large Load Diff

BIN
mods/d2k/uibits/buttons.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
mods/d2k/uibits/dialog.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

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