Merge pull request #3676 from Mailaender/native-r8s

Completely removed all conversion steps for Dune 2000
This commit is contained in:
Matthias Mailänder
2013-08-18 00:03:44 -07:00
119 changed files with 4524 additions and 4002 deletions

View File

@@ -152,8 +152,8 @@ mod_cnc: $(mod_cnc_TARGET)
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) $(mod_cnc_TARGET) $(utility_TARGET)
mod_d2k_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) $(mod_ra_TARGET) $(utility_TARGET)
mod_d2k_DEPS = $(STD_MOD_DEPS) $(mod_ra_TARGET) $(mod_cnc_TARGET)
mod_d2k_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) $(mod_ra_TARGET)
mod_d2k_EXTRA_CMDS = mono --debug RALint.exe d2k
PROGRAMS += mod_d2k
mod_d2k: $(mod_d2k_TARGET)

View File

@@ -93,7 +93,7 @@ namespace OpenRA.FileFormats
foreach (var y in Nodes)
{
if (ret.ContainsKey(y.Key))
throw new InvalidDataException("Duplicate key `{0}' in MiniYaml".F(y.Key));
throw new InvalidDataException("Duplicate key `{0}' in {1}".F(y.Key, y.Location));
ret.Add(y.Key, y.Value);
}

View File

@@ -53,16 +53,16 @@ namespace OpenRA
public Group Group;
public int Generation;
internal Actor(World world, string name, TypeDictionary initDict )
internal Actor(World world, string name, TypeDictionary initDict)
{
var init = new ActorInitializer( this, initDict );
var init = new ActorInitializer(this, initDict);
World = world;
ActorID = world.NextAID();
if( initDict.Contains<OwnerInit>() )
if (initDict.Contains<OwnerInit>())
Owner = init.Get<OwnerInit,Player>();
occupySpace = Lazy.New( () => TraitOrDefault<IOccupySpace>() );
occupySpace = Lazy.New(() => TraitOrDefault<IOccupySpace>());
if (name != null)
{

View File

@@ -38,17 +38,17 @@ namespace OpenRA.Graphics
cursors = new Dictionary<string, CursorSequence>();
palettes = new Cache<string, PaletteReference>(CreatePaletteReference);
var sequences = new MiniYaml(null, sequenceFiles.Select(s => MiniYaml.FromFile(s)).Aggregate(MiniYaml.MergeLiberal));
int[] ShadowIndex = { };
var shadowIndex = new int[] { };
if (sequences.NodesDict.ContainsKey("ShadowIndex"))
{
Array.Resize(ref ShadowIndex, ShadowIndex.Length + 1);
int.TryParse(sequences.NodesDict["ShadowIndex"].Value, out ShadowIndex[ShadowIndex.Length - 1]);
Array.Resize(ref shadowIndex, shadowIndex.Length + 1);
int.TryParse(sequences.NodesDict["ShadowIndex"].Value, out shadowIndex[shadowIndex.Length - 1]);
}
palette = new HardwarePalette();
foreach (var p in sequences.NodesDict["Palettes"].Nodes)
palette.AddPalette(p.Key, new Palette(FileSystem.Open(p.Value.Value), ShadowIndex), false);
palette.AddPalette(p.Key, new Palette(FileSystem.Open(p.Value.Value), shadowIndex), false);
foreach (var s in sequences.NodesDict["Cursors"].Nodes)
LoadSequencesForCursor(s.Key, s.Value);
@@ -76,7 +76,7 @@ namespace OpenRA.Graphics
renderer.SetPalette(palette);
renderer.SpriteRenderer.DrawSprite(cursorSprite,
lastMousePos - cursorSequence.Hotspot,
lastMousePos - cursorSequence.Hotspot - (0.5f * cursorSprite.size).ToInt2(),
palettes[cursorSequence.Palette],
cursorSprite.size);
}

View File

@@ -44,9 +44,9 @@ namespace OpenRA.Graphics
length = 1;
if (d.ContainsKey("x"))
int.TryParse(d["x"].Value, out Hotspot.X );
int.TryParse(d["x"].Value, out Hotspot.X);
if (d.ContainsKey("y"))
int.TryParse(d["y"].Value, out Hotspot.Y );
int.TryParse(d["y"].Value, out Hotspot.Y);
}
public Sprite GetSprite(int frame)

View File

@@ -30,6 +30,7 @@ namespace OpenRA.Graphics
public readonly int ZOffset;
public readonly int ShadowStart;
public readonly int ShadowZOffset;
public readonly int[] Frames;
public Sequence(string unit, string name, MiniYaml info)
{
@@ -39,79 +40,90 @@ namespace OpenRA.Graphics
var offset = float2.Zero;
var blendMode = BlendMode.Alpha;
Start = int.Parse(d["Start"].Value);
if (d.ContainsKey("Offset"))
offset = FieldLoader.GetValue<float2>("Offset", d["Offset"].Value);
if (d.ContainsKey("BlendMode"))
blendMode = FieldLoader.GetValue<BlendMode>("BlendMode", d["BlendMode"].Value);
// Apply offset to each sprite in the sequence
// Different sequences may apply different offsets to the same frame
sprites = Game.modData.SpriteLoader.LoadAllSprites(srcOverride ?? unit).Select(
s => new Sprite(s.sheet, s.bounds, s.offset + offset, s.channel, blendMode)).ToArray();
if (!d.ContainsKey("Length"))
Length = 1;
else if (d["Length"].Value == "*")
Length = sprites.Length - Start;
else
Length = int.Parse(d["Length"].Value);
if (d.ContainsKey("Stride"))
Stride = int.Parse(d["Stride"].Value);
else
Stride = Length;
if (d.ContainsKey("Facings"))
try
{
var f = int.Parse(d["Facings"].Value);
Facings = Math.Abs(f);
reverseFacings = f < 0;
if (d.ContainsKey("Start"))
Start = int.Parse(d["Start"].Value);
if (d.ContainsKey("Offset"))
offset = FieldLoader.GetValue<float2>("Offset", d["Offset"].Value);
if (d.ContainsKey("BlendMode"))
blendMode = FieldLoader.GetValue<BlendMode>("BlendMode", d["BlendMode"].Value);
// Apply offset to each sprite in the sequence
// Different sequences may apply different offsets to the same frame
sprites = Game.modData.SpriteLoader.LoadAllSprites(srcOverride ?? unit).Select(
s => new Sprite(s.sheet, s.bounds, s.offset + offset, s.channel, blendMode)).ToArray();
if (!d.ContainsKey("Length"))
Length = 1;
else if (d["Length"].Value == "*")
Length = sprites.Length - Start;
else
Length = int.Parse(d["Length"].Value);
if (d.ContainsKey("Stride"))
Stride = int.Parse(d["Stride"].Value);
else
Stride = Length;
if (d.ContainsKey("Facings"))
{
var f = int.Parse(d["Facings"].Value);
Facings = Math.Abs(f);
reverseFacings = f < 0;
}
else
Facings = 1;
if (d.ContainsKey("Tick"))
Tick = int.Parse(d["Tick"].Value);
else
Tick = 40;
if (d.ContainsKey("Transpose"))
transpose = bool.Parse(d["Transpose"].Value);
if (d.ContainsKey("Frames"))
Frames = Array.ConvertAll<string, int>(d["Frames"].Value.Split(','), int.Parse);
if (d.ContainsKey("ShadowStart"))
ShadowStart = int.Parse(d["ShadowStart"].Value);
else
ShadowStart = -1;
if (d.ContainsKey("ShadowZOffset"))
{
WRange r;
if (WRange.TryParse(d["ShadowZOffset"].Value, out r))
ShadowZOffset = r.Range;
}
else
ShadowZOffset = -5;
if (d.ContainsKey("ZOffset"))
{
WRange r;
if (WRange.TryParse(d["ZOffset"].Value, out r))
ZOffset = r.Range;
}
if (Length > Stride)
throw new InvalidOperationException(
"{0}: Sequence {1}.{2}: Length must be <= stride"
.F(info.Nodes[0].Location, unit, name));
if (Start < 0 || Start + Facings * Stride > sprites.Length || ShadowStart + Facings * Stride > sprites.Length)
throw new InvalidOperationException(
"{6}: Sequence {0}.{1} uses frames [{2}..{3}] of SHP `{4}`, but only 0..{5} actually exist"
.F(unit, name, Start, Start + Facings * Stride - 1, srcOverride ?? unit, sprites.Length - 1,
info.Nodes[0].Location));
}
else
Facings = 1;
if (d.ContainsKey("Tick"))
Tick = int.Parse(d["Tick"].Value);
else
Tick = 40;
if (d.ContainsKey("Transpose"))
transpose = bool.Parse(d["Transpose"].Value);
if (d.ContainsKey("ShadowStart"))
ShadowStart = int.Parse(d["ShadowStart"].Value);
else
ShadowStart = -1;
if (d.ContainsKey("ShadowZOffset"))
catch (FormatException f)
{
WRange r;
if (WRange.TryParse(d["ShadowZOffset"].Value, out r))
ShadowZOffset = r.Range;
throw new FormatException("Failed to parse sequences for {0}.{1} at {2}:\n{3}".F(unit, name, info.Nodes[0].Location, f));
}
else
ShadowZOffset = -5;
if (d.ContainsKey("ZOffset"))
{
WRange r;
if (WRange.TryParse(d["ZOffset"].Value, out r))
ZOffset = r.Range;
}
if (Length > Stride)
throw new InvalidOperationException(
"{0}: Sequence {1}.{2}: Length must be <= stride"
.F(info.Nodes[0].Location, unit, name));
if (Start < 0 || Start + Facings * Stride > sprites.Length || ShadowStart + Facings * Stride > sprites.Length)
throw new InvalidOperationException(
"{6}: Sequence {0}.{1} uses frames [{2}..{3}] of SHP `{4}`, but only 0..{5} actually exist"
.F(unit, name, Start, Start + Facings * Stride - 1, srcOverride ?? unit, sprites.Length - 1,
info.Nodes[0].Location));
}
public Sprite GetSprite(int frame)
@@ -136,9 +148,12 @@ namespace OpenRA.Graphics
if (reverseFacings)
f = (Facings - f) % Facings;
int i = transpose ? (frame % Length) * Facings + f :
var i = transpose ? (frame % Length) * Facings + f :
(f * Stride) + (frame % Length);
if (Frames != null)
return sprites[Frames[i]];
return sprites[start + i];
}
}

View File

@@ -20,15 +20,15 @@ namespace OpenRA
{
Dictionary<string, MiniYamlNode> widgets = new Dictionary<string, MiniYamlNode>();
public WidgetLoader( ModData modData )
public WidgetLoader(ModData modData)
{
foreach( var file in modData.Manifest.ChromeLayout.Select( a => MiniYaml.FromFile( a ) ) )
foreach (var file in modData.Manifest.ChromeLayout.Select(a => MiniYaml.FromFile(a)))
foreach( var w in file )
{
var key = w.Key.Substring( w.Key.IndexOf( '@' ) + 1 );
var key = w.Key.Substring( w.Key.IndexOf('@') + 1);
if (widgets.ContainsKey(key))
throw new InvalidDataException("Widget has duplicate Key `{0}`".F(w.Key));
widgets.Add( key, w );
throw new InvalidDataException("Widget has duplicate Key `{0}` at {1}".F(w.Key, w.Location));
widgets.Add(key, w);
}
}

View File

@@ -16,6 +16,7 @@ using OpenRA.Graphics;
using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Orders;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets
@@ -53,7 +54,6 @@ namespace OpenRA.Mods.Cnc.Widgets
public override Rectangle EventBounds { get { return eventBounds; } }
Dictionary<Rectangle, ProductionIcon> icons = new Dictionary<Rectangle, ProductionIcon>();
Dictionary<string, Sprite> iconSprites;
Animation cantBuild, clock;
Rectangle eventBounds = Rectangle.Empty;
readonly WorldRenderer worldRenderer;
@@ -71,13 +71,6 @@ namespace OpenRA.Mods.Cnc.Widgets
cantBuild = new Animation("clock");
cantBuild.PlayFetchIndex("idle", () => 0);
clock = new Animation("clock");
iconSprites = Rules.Info.Values
.Where(u => u.Traits.Contains<BuildableInfo>() && u.Name[0] != '^')
.ToDictionary(
u => u.Name,
u => Game.modData.SpriteLoader.LoadAllSprites(
u.Traits.Get<TooltipInfo>().Icon ?? (u.Name + "icon"))[0]);
}
public override void Tick()
@@ -186,10 +179,12 @@ namespace OpenRA.Mods.Cnc.Widgets
var x = i % Columns;
var y = i / Columns;
var rect = new Rectangle(rb.X + x * 64 + 1, rb.Y + y * 48 + 1, 64, 48);
var icon = new Animation(RenderSimple.GetImage(item));
icon.Play(item.Traits.Get<TooltipInfo>().Icon);
var pi = new ProductionIcon()
{
Name = item.Name,
Sprite = iconSprites[item.Name],
Sprite = icon.Image,
Pos = new float2(rect.Location),
Queued = CurrentQueue.AllQueued().Where(a => a.Item == item.Name).ToList(),
};

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Mods.Cnc.Widgets
readonly WorldRenderer worldRenderer;
readonly SupportPowerManager spm;
Dictionary<string, Sprite> iconSprites;
Animation icon;
Animation clock;
Dictionary<Rectangle, SupportPowerIcon> icons = new Dictionary<Rectangle, SupportPowerIcon>();
@@ -52,12 +52,7 @@ namespace OpenRA.Mods.Cnc.Widgets
tooltipContainer = Lazy.New(() =>
Ui.Root.Get<TooltipContainerWidget>(TooltipContainer));
iconSprites = Rules.Info.Values.SelectMany(u => u.Traits.WithInterface<SupportPowerInfo>())
.Select(u => u.Image).Distinct()
.ToDictionary(
u => u,
u => Game.modData.SpriteLoader.LoadAllSprites(u)[0]);
icon = new Animation("icon");
clock = new Animation("clock");
}
@@ -78,11 +73,12 @@ namespace OpenRA.Mods.Cnc.Widgets
foreach (var p in powers)
{
var rect = new Rectangle(rb.X + 1, rb.Y + i * (48 + Spacing) + 1, 64, 48);
icon.Play(p.Info.Icon);
var power = new SupportPowerIcon()
{
Power = p,
Pos = new float2(rect.Location),
Sprite = iconSprites[p.Info.Image]
Sprite = icon.Image
};
icons.Add(rect, power);

View File

@@ -79,10 +79,10 @@
<ItemGroup>
<Compile Include="D2kLoadScreen.cs" />
<Compile Include="Widgets\Logic\D2kInstallLogic.cs" />
<Compile Include="Widgets\Logic\D2kExtractGameFilesLogic.cs" />
<Compile Include="Widgets\Logic\D2kInstallFromCDLogic.cs" />
<Compile Include="Widgets\Logic\D2kDownloadPackagesLogic.cs" />
<Compile Include="BuildingCaptureNotification.cs" />
<Compile Include="Render\WithCrumbleOverlay.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
@@ -91,10 +91,6 @@ 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>
@@ -103,10 +99,6 @@ cd "$(SolutionDir)"</PostBuildEvent>
<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>
<ProjectReference Include="..\OpenRA.Mods.RA\OpenRA.Mods.RA.csproj">
<Project>{4A8A43B5-A9EF-4ED0-99DD-4BAB10A0DB6E}</Project>
<Name>OpenRA.Mods.RA</Name>
@@ -129,4 +121,7 @@ cd "$(SolutionDir)"</PostBuildEvent>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Folder Include="Render\" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,46 @@
#region Copyright & License Information
/*
* Copyright 2007-2013 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 OpenRA.FileFormats;
using OpenRA.Graphics;
using OpenRA.Traits;
using OpenRA.Mods.RA.Buildings;
namespace OpenRA.Mods.RA.Render
{
public class WithCrumbleOverlayInfo : ITraitInfo, Requires<RenderSpritesInfo>
{
[Desc("Sequence name to use")]
public readonly string Sequence = "crumble-overlay";
public object Create(ActorInitializer init) { return new WithCrumbleOverlay(init.self, this); }
}
public class WithCrumbleOverlay : INotifyBuildComplete
{
Animation overlay;
bool buildComplete = false;
public WithCrumbleOverlay(Actor self, WithCrumbleOverlayInfo info)
{
var rs = self.Trait<RenderSprites>();
overlay = new Animation(rs.GetImage(self));
overlay.PlayThen(info.Sequence, () => buildComplete = false);
rs.anims.Add("make_overlay_{0}".F(info.Sequence),
new AnimationWithOffset(overlay, null, () => !buildComplete, null));
}
public void BuildingComplete(Actor self)
{
buildComplete = true;
}
}
}

View File

@@ -1,769 +0,0 @@
#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.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading;
using OpenRA.FileFormats;
using OpenRA.FileFormats.Graphics;
using OpenRA.Utility;
using OpenRA.Widgets;
namespace OpenRA.Mods.D2k.Widgets.Logic
{
public class D2kExtractGameFilesLogic
{
Widget panel;
ProgressBarWidget progressBar;
LabelWidget statusLabel;
Action continueLoading;
ButtonWidget retryButton, backButton;
Widget extractingContainer, copyFilesContainer;
[ObjectCreator.UseCtor]
public D2kExtractGameFilesLogic(Widget widget, Action continueLoading)
{
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();
this.continueLoading = continueLoading;
}
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 pathToSHPs = Path.Combine(Platform.SupportDir, "Content/d2k/SHPs");
var pathToTilesets = Path.Combine(Platform.SupportDir, "Content/d2k/Tilesets");
var extractGameFiles = new string[][]
{
new string[] { "--r8", pathToDataR8, pathToPalette, "0", "2", Path.Combine(pathToSHPs, "overlay") },
new string[] { "--r8", pathToDataR8, pathToPalette, "3", "3", Path.Combine(pathToSHPs, "repairing") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4", "4", Path.Combine(pathToSHPs, "black") },
new string[] { "--r8", pathToDataR8, pathToPalette, "5", "8", Path.Combine(pathToSHPs, "selectionedges") },
new string[] { "--r8", pathToDataR8, pathToPalette, "9", "9", Path.Combine(pathToSHPs, "bar1") },
new string[] { "--r8", pathToDataR8, pathToPalette, "10", "10", Path.Combine(pathToSHPs, "bar2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "11", "11", Path.Combine(pathToSHPs, "bar3") },
new string[] { "--r8", pathToDataR8, pathToPalette, "12", "12", Path.Combine(pathToSHPs, "bar4") },
new string[] { "--r8", pathToDataR8, pathToPalette, "13", "13", Path.Combine(pathToSHPs, "bar5") },
new string[] { "--r8", pathToDataR8, pathToPalette, "14", "14", Path.Combine(pathToSHPs, "bar6") },
new string[] { "--r8", pathToDataR8, pathToPalette, "15", "16", Path.Combine(pathToSHPs, "dots") },
new string[] { "--r8", pathToDataR8, pathToPalette, "17", "26", Path.Combine(pathToSHPs, "numbers") },
new string[] { "--r8", pathToDataR8, pathToPalette, "27", "37", Path.Combine(pathToSHPs, "credits") },
new string[] { "--r8", pathToDataR8, pathToPalette, "40", "101", Path.Combine(pathToSHPs, "d2kshadow") },
new string[] { "--r8", pathToDataR8, pathToPalette, "102", "105", Path.Combine(pathToSHPs, "crates") },
new string[] { "--r8", pathToDataR8, pathToPalette, "107", "109", Path.Combine(pathToSHPs, "spicebloom") },
new string[] { "--r8", pathToDataR8, pathToPalette, "110", "111", Path.Combine(pathToSHPs, "stars") },
new string[] { "--r8", pathToDataR8, pathToPalette, "112", "113", Path.Combine(pathToSHPs, "greenuparrow") },
new string[] { "--r8", pathToDataR8, pathToPalette, "114", "129", Path.Combine(pathToSHPs, "rockcrater1") },
new string[] { "--r8", pathToDataR8, pathToPalette, "130", "145", Path.Combine(pathToSHPs, "rockcrater2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "146", "161", Path.Combine(pathToSHPs, "sandcrater1") },
new string[] { "--r8", pathToDataR8, pathToPalette, "162", "177", Path.Combine(pathToSHPs, "sandcrater2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "178", "193", Path.Combine(pathToSHPs, "unknown") },
new string[] { "--r8", pathToDataR8, pathToPalette, "194", "205", Path.Combine(pathToSHPs, "unknown2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "206", "381", Path.Combine(pathToSHPs, "rifle"), "--infantry" },
new string[] { "--r8", pathToDataR8, pathToPalette, "382", "457", Path.Combine(pathToSHPs, "rifledeath"), "--infantrydeath" },
new string[] { "--r8", pathToDataR8, pathToPalette, "458", "633", Path.Combine(pathToSHPs, "bazooka"), "--infantry" },
new string[] { "--r8", pathToDataR8, pathToPalette, "634", "693", Path.Combine(pathToSHPs, "bazookadeath"), "--infantrydeath" },
new string[] { "--r8", pathToDataR8, pathToPalette, "694", "869", Path.Combine(pathToSHPs, "fremen"), "--infantry" },
new string[] { "--r8", pathToDataR8, pathToPalette, "870", "929", Path.Combine(pathToSHPs, "fremendeath"), "--infantrydeath" },
new string[] { "--r8", pathToDataR8, pathToPalette, "930", "1105", Path.Combine(pathToSHPs, "sardaukar"), "--infantry" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1106", "1165", Path.Combine(pathToSHPs, "sardaukardeath"), "--infantrydeath" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1166", "1341", Path.Combine(pathToSHPs, "engineer"), "--infantry" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1342", "1401", Path.Combine(pathToSHPs, "engineerdeath"), "--infantrydeath" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1402", "1457", Path.Combine(pathToSHPs, "thumper"), "--infantry" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1458", "1462", Path.Combine(pathToSHPs, "thumping"), "--infantrydeath" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1463", "1542", Path.Combine(pathToSHPs, "thumper2"), "--infantry" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1543", "1602", Path.Combine(pathToSHPs, "thumperdeath"), "--infantrydeath" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1603", "1634", Path.Combine(pathToSHPs, "missiletank"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1635", "1666", Path.Combine(pathToSHPs, "trike"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1667", "1698", Path.Combine(pathToSHPs, "quad"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1699", "1730", Path.Combine(pathToSHPs, "harvester"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1731", "1762", Path.Combine(pathToSHPs, "combata"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1763", "1794", Path.Combine(pathToSHPs, "siegetank"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1795", "1826", Path.Combine(pathToSHPs, "dmcv"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1827", "1858", Path.Combine(pathToSHPs, "sonictank"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1859", "1890", Path.Combine(pathToSHPs, "combataturret"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1891", "1922", Path.Combine(pathToSHPs, "siegeturret"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1923", "1954", Path.Combine(pathToSHPs, "carryall"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "1955", "2050", Path.Combine(pathToSHPs, "orni"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2051", "2082", Path.Combine(pathToSHPs, "combath"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2083", "2114", Path.Combine(pathToSHPs, "devast"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2115", "2146", Path.Combine(pathToSHPs, "combathturret"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2147", "2148", Path.Combine(pathToSHPs, "deathhandmissile") },
new string[] { "--r8", pathToDataR8, pathToPalette, "2149", "2324", Path.Combine(pathToSHPs, "saboteur"), "--infantry" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2325", "2388", Path.Combine(pathToSHPs, "saboteurdeath"), "--infantrydeath" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2389", "2420", Path.Combine(pathToSHPs, "deviatortank"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2421", "2452", Path.Combine(pathToSHPs, "raider"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2453", "2484", Path.Combine(pathToSHPs, "combato"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2485", "2516", Path.Combine(pathToSHPs, "combatoturret"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2517", "2517", Path.Combine(pathToSHPs, "frigate"), "--vehicle" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2518", "2520", Path.Combine(pathToSHPs, "heavya"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2521", "2522", Path.Combine(pathToSHPs, "radara"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2523", "2524", Path.Combine(pathToSHPs, "pwra"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2525", "2526", Path.Combine(pathToSHPs, "barra"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2527", "2558", Path.Combine(pathToSHPs, "walla"), "--wall" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2559", "2560", Path.Combine(pathToSHPs, "conyarda"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2561", "2563", Path.Combine(pathToSHPs, "refa"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2564", "2565", Path.Combine(pathToSHPs, "hightecha"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2566", "2570", Path.Combine(pathToSHPs, "siloa"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2571", "2572", Path.Combine(pathToSHPs, "repaira"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2573", "2588", Path.Combine(pathToSHPs, "guntowera"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2589", "2620", Path.Combine(pathToSHPs, "gunturreta"), "--turret" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2621", "2636", Path.Combine(pathToSHPs, "rockettowera"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2637", "2668", Path.Combine(pathToSHPs, "rocketturreta"), "--turret" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2669", "2670", Path.Combine(pathToSHPs, "researcha"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2671", "2672", Path.Combine(pathToSHPs, "starporta"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2673", "2675", Path.Combine(pathToSHPs, "lighta"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2676", "2677", Path.Combine(pathToSHPs, "palacea"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2678", "2680", Path.Combine(pathToSHPs, "heavyh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2681", "2682", Path.Combine(pathToSHPs, "radarh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2683", "2684", Path.Combine(pathToSHPs, "pwrh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2685", "2686", Path.Combine(pathToSHPs, "barrh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2687", "2718", Path.Combine(pathToSHPs, "wallh"), "--wall" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2719", "2720", Path.Combine(pathToSHPs, "conyardh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2721", "2723", Path.Combine(pathToSHPs, "refh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2724", "2725", Path.Combine(pathToSHPs, "hightechh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2726", "2730", Path.Combine(pathToSHPs, "siloh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2731", "2732", Path.Combine(pathToSHPs, "repairh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2733", "2748", Path.Combine(pathToSHPs, "guntowerh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2749", "2780", Path.Combine(pathToSHPs, "gunturreth"), "--turret" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2781", "2796", Path.Combine(pathToSHPs, "rockettowerh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2797", "2828", Path.Combine(pathToSHPs, "rocketturreth"), "--turret" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2829", "2830", Path.Combine(pathToSHPs, "researchh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2831", "2832", Path.Combine(pathToSHPs, "starporth"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2833", "2835", Path.Combine(pathToSHPs, "lighth"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2836", "2837", Path.Combine(pathToSHPs, "palaceh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2838", "2840", Path.Combine(pathToSHPs, "heavyo"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2841", "2842", Path.Combine(pathToSHPs, "radaro"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2843", "2844", Path.Combine(pathToSHPs, "pwro"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2845", "2846", Path.Combine(pathToSHPs, "barro"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2847", "2878", Path.Combine(pathToSHPs, "wallo"), "--wall" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2879", "2880", Path.Combine(pathToSHPs, "conyardo"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2881", "2883", Path.Combine(pathToSHPs, "refo"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2884", "2885", Path.Combine(pathToSHPs, "hightecho"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2886", "2890", Path.Combine(pathToSHPs, "siloo"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2891", "2892", Path.Combine(pathToSHPs, "repairo"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2893", "2908", Path.Combine(pathToSHPs, "guntowero"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2909", "2940", Path.Combine(pathToSHPs, "gunturreto"), "--turret" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2941", "2956", Path.Combine(pathToSHPs, "rockettowero"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2957", "2988", Path.Combine(pathToSHPs, "rocketturreto"), "--turret" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2989", "2990", Path.Combine(pathToSHPs, "researcho"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2991", "2992", Path.Combine(pathToSHPs, "starporto"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2993", "2995", Path.Combine(pathToSHPs, "lighto"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2996", "2997", Path.Combine(pathToSHPs, "palaceo"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2998", "2998", Path.Combine(pathToSHPs, "sietch"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "2999", "3000", Path.Combine(pathToSHPs, "starportc"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3001", "3003", Path.Combine(pathToSHPs, "heavyc"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3004", "3005", Path.Combine(pathToSHPs, "palacec"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3006", "3007", Path.Combine(pathToSHPs, "conyardh2"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3008", "3013", Path.Combine(pathToSHPs, "plates") },
new string[] { "--r8", pathToDataR8, pathToPalette, "3014", "3014", Path.Combine(pathToSHPs, "unknown3"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3015", "3078", Path.Combine(pathToSHPs, "rpg"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3079", "3087", Path.Combine(pathToSHPs, "unknown4"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3088", "3247", Path.Combine(pathToSHPs, "missile"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3248", "3279", Path.Combine(pathToSHPs, "doubleblast"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3280", "3283", Path.Combine(pathToSHPs, "bombs"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3284", "3287", Path.Combine(pathToSHPs, "unknown6"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3288", "3289", Path.Combine(pathToSHPs, "unknown7"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3290", "3303", Path.Combine(pathToSHPs, "unknown8"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3304", "3305", Path.Combine(pathToSHPs, "unknown9"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3306", "3369", Path.Combine(pathToSHPs, "missile2"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3370", "3380", Path.Combine(pathToSHPs, "unload"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3381", "3385", Path.Combine(pathToSHPs, "harvest"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3386", "3389", Path.Combine(pathToSHPs, "miniboom"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3390", "3402", Path.Combine(pathToSHPs, "mediboom"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3403", "3417", Path.Combine(pathToSHPs, "mediboom2"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3418", "3420", Path.Combine(pathToSHPs, "minifire"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3421", "3428", Path.Combine(pathToSHPs, "miniboom2"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3429", "3432", Path.Combine(pathToSHPs, "minibooms"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3433", "3447", Path.Combine(pathToSHPs, "bigboom"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3448", "3470", Path.Combine(pathToSHPs, "bigboom2"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3471", "3493", Path.Combine(pathToSHPs, "bigboom3"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3494", "3501", Path.Combine(pathToSHPs, "unknown10"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3502", "3509", Path.Combine(pathToSHPs, "unknown11"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3510", "3511", Path.Combine(pathToSHPs, "unknown12"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3512", "3530", Path.Combine(pathToSHPs, "movingsand"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3531", "3534", Path.Combine(pathToSHPs, "unknown13"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3535", "3539", Path.Combine(pathToSHPs, "unknown14"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3540", "3543", Path.Combine(pathToSHPs, "unknown15"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3544", "3548", Path.Combine(pathToSHPs, "unknown16"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3549", "3564", Path.Combine(pathToSHPs, "wormjaw"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3565", "3585", Path.Combine(pathToSHPs, "wormdust"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3586", "3600", Path.Combine(pathToSHPs, "wormsigns1") },
new string[] { "--r8", pathToDataR8, pathToPalette, "3601", "3610", Path.Combine(pathToSHPs, "wormsigns2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "3611", "3615", Path.Combine(pathToSHPs, "wormsigns3") },
new string[] { "--r8", pathToDataR8, pathToPalette, "3616", "3620", Path.Combine(pathToSHPs, "wormsigns4") },
new string[] { "--r8", pathToDataR8, pathToPalette, "3621", "3625", Path.Combine(pathToSHPs, "rings"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3626", "3630", Path.Combine(pathToSHPs, "minipiff"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3631", "3678", Path.Combine(pathToSHPs, "movingsand2"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3679", "3686", Path.Combine(pathToSHPs, "selling"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3687", "3693", Path.Combine(pathToSHPs, "shockwave"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3694", "3711", Path.Combine(pathToSHPs, "electroplosion"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3712", "3722", Path.Combine(pathToSHPs, "fire"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3723", "3734", Path.Combine(pathToSHPs, "fire2"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3735", "3738", Path.Combine(pathToSHPs, "unknown21"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3739", "3742", Path.Combine(pathToSHPs, "unknown22"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3743", "3774", Path.Combine(pathToSHPs, "doublemuzzle"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3775", "3806", Path.Combine(pathToSHPs, "muzzle"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3807", "3838", Path.Combine(pathToSHPs, "doubleblastmuzzle"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3839", "3870", Path.Combine(pathToSHPs, "minimuzzle"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3871", "3872", Path.Combine(pathToSHPs, "unknown17"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3873", "3875", Path.Combine(pathToSHPs, "unknown18"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3876", "3876", Path.Combine(pathToSHPs, "unknown19"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3877", "3884", Path.Combine(pathToSHPs, "burst"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3885", "3898", Path.Combine(pathToSHPs, "fire3"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3899", "3910", Path.Combine(pathToSHPs, "energy"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3911", "3946", Path.Combine(pathToSHPs, "reveal"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3947", "3964", Path.Combine(pathToSHPs, "orbit"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3965", "3979", Path.Combine(pathToSHPs, "mushroomcloud"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3980", "3987", Path.Combine(pathToSHPs, "mediboom3"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "3988", "4010", Path.Combine(pathToSHPs, "largeboom"), "--projectile" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4011", "4011", Path.Combine(pathToSHPs, "rifleicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4012", "4012", Path.Combine(pathToSHPs, "bazookaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4013", "4013", Path.Combine(pathToSHPs, "engineericon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4014", "4014", Path.Combine(pathToSHPs, "thumpericon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4015", "4015", Path.Combine(pathToSHPs, "sardaukaricon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4016", "4016", Path.Combine(pathToSHPs, "trikeicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4017", "4017", Path.Combine(pathToSHPs, "raidericon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4018", "4018", Path.Combine(pathToSHPs, "quadicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4019", "4019", Path.Combine(pathToSHPs, "harvestericon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4020", "4020", Path.Combine(pathToSHPs, "combataicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4021", "4021", Path.Combine(pathToSHPs, "combathicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4022", "4022", Path.Combine(pathToSHPs, "combatoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4023", "4023", Path.Combine(pathToSHPs, "mcvicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4024", "4024", Path.Combine(pathToSHPs, "missiletankicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4025", "4025", Path.Combine(pathToSHPs, "deviatortankicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4026", "4026", Path.Combine(pathToSHPs, "siegetankicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4027", "4027", Path.Combine(pathToSHPs, "sonictankicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4028", "4028", Path.Combine(pathToSHPs, "devasticon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4029", "4029", Path.Combine(pathToSHPs, "carryallicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4030", "4030", Path.Combine(pathToSHPs, "carryallicon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4031", "4031", Path.Combine(pathToSHPs, "orniicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4032", "4032", Path.Combine(pathToSHPs, "fremenicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4033", "4033", Path.Combine(pathToSHPs, "fremenicon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4034", "4034", Path.Combine(pathToSHPs, "saboteuricon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4035", "4035", Path.Combine(pathToSHPs, "deathhandicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4036", "4036", Path.Combine(pathToSHPs, "rifleicon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4037", "4037", Path.Combine(pathToSHPs, "bazookaicon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4038", "4038", Path.Combine(pathToSHPs, "engineericon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4039", "4039", Path.Combine(pathToSHPs, "thumpericon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4040", "4040", Path.Combine(pathToSHPs, "sardaukaricon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4041", "4041", Path.Combine(pathToSHPs, "trikeicon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4042", "4042", Path.Combine(pathToSHPs, "raidericon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4043", "4043", Path.Combine(pathToSHPs, "quadicon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4044", "4044", Path.Combine(pathToSHPs, "harvestericon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4045", "4045", Path.Combine(pathToSHPs, "combataicon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4046", "4046", Path.Combine(pathToSHPs, "conyardaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4047", "4047", Path.Combine(pathToSHPs, "conyardhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4048", "4048", Path.Combine(pathToSHPs, "conyardoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4049", "4049", Path.Combine(pathToSHPs, "conyardaicon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4050", "4050", Path.Combine(pathToSHPs, "4plateaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4051", "4051", Path.Combine(pathToSHPs, "4platehicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4052", "4052", Path.Combine(pathToSHPs, "4plateoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4053", "4053", Path.Combine(pathToSHPs, "6plateaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4054", "4054", Path.Combine(pathToSHPs, "6platehicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4055", "4055", Path.Combine(pathToSHPs, "6plateoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4056", "4056", Path.Combine(pathToSHPs, "pwraicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4057", "4057", Path.Combine(pathToSHPs, "pwrhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4058", "4058", Path.Combine(pathToSHPs, "pwroicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4059", "4059", Path.Combine(pathToSHPs, "barraicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4060", "4060", Path.Combine(pathToSHPs, "barrhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4061", "4061", Path.Combine(pathToSHPs, "barroicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4062", "4062", Path.Combine(pathToSHPs, "orniicon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4063", "4063", Path.Combine(pathToSHPs, "wallaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4064", "4064", Path.Combine(pathToSHPs, "wallhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4065", "4065", Path.Combine(pathToSHPs, "walloicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4066", "4066", Path.Combine(pathToSHPs, "refaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4067", "4067", Path.Combine(pathToSHPs, "refhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4068", "4068", Path.Combine(pathToSHPs, "refoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4069", "4069", Path.Combine(pathToSHPs, "guntoweraicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4070", "4070", Path.Combine(pathToSHPs, "guntowerhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4071", "4071", Path.Combine(pathToSHPs, "guntoweroicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4072", "4072", Path.Combine(pathToSHPs, "radaraicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4073", "4073", Path.Combine(pathToSHPs, "radarhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4074", "4074", Path.Combine(pathToSHPs, "radaroicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4075", "4075", Path.Combine(pathToSHPs, "rockettoweraicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4076", "4076", Path.Combine(pathToSHPs, "rockettowerhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4077", "4077", Path.Combine(pathToSHPs, "rockettoweroicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4078", "4078", Path.Combine(pathToSHPs, "hightechaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4079", "4079", Path.Combine(pathToSHPs, "hightechhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4080", "4080", Path.Combine(pathToSHPs, "hightechoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4081", "4081", Path.Combine(pathToSHPs, "lightaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4082", "4082", Path.Combine(pathToSHPs, "lighthicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4083", "4083", Path.Combine(pathToSHPs, "lightoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4084", "4084", Path.Combine(pathToSHPs, "siloaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4085", "4085", Path.Combine(pathToSHPs, "silohicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4086", "4086", Path.Combine(pathToSHPs, "silooicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4087", "4087", Path.Combine(pathToSHPs, "heavyaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4088", "4088", Path.Combine(pathToSHPs, "heavyhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4089", "4089", Path.Combine(pathToSHPs, "heavyoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4090", "4090", Path.Combine(pathToSHPs, "orniicon3") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4091", "4091", Path.Combine(pathToSHPs, "heavyhicon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4092", "4092", Path.Combine(pathToSHPs, "starportaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4093", "4093", Path.Combine(pathToSHPs, "starporthicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4094", "4094", Path.Combine(pathToSHPs, "starportoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4095", "4095", Path.Combine(pathToSHPs, "orniicon4") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4096", "4096", Path.Combine(pathToSHPs, "repairaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4097", "4097", Path.Combine(pathToSHPs, "repairhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4098", "4098", Path.Combine(pathToSHPs, "repairoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4099", "4099", Path.Combine(pathToSHPs, "researchaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4100", "4100", Path.Combine(pathToSHPs, "researchhicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4101", "4101", Path.Combine(pathToSHPs, "researchoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4102", "4102", Path.Combine(pathToSHPs, "palaceaicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4103", "4103", Path.Combine(pathToSHPs, "palacehicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4104", "4104", Path.Combine(pathToSHPs, "palaceoicon") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4105", "4105", Path.Combine(pathToSHPs, "orniicon5") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4106", "4106", Path.Combine(pathToSHPs, "radaraicon2") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4107", "4107", Path.Combine(pathToSHPs, "radaraicon3") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4108", "4108", Path.Combine(pathToSHPs, "conyardaicon3") },
new string[] { "--r8", pathToDataR8, pathToPalette, "4109", "4150", Path.Combine(pathToSHPs, "conmake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4151", "4174", Path.Combine(pathToSHPs, "wtrpmake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4175", "4194", Path.Combine(pathToSHPs, "barramake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4195", "4212", Path.Combine(pathToSHPs, "barrhmake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4213", "4230", Path.Combine(pathToSHPs, "barromake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4231", "4253", Path.Combine(pathToSHPs, "refmake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4254", "4273", Path.Combine(pathToSHPs, "radarmake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4274", "4294", Path.Combine(pathToSHPs, "highmake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4295", "4312", Path.Combine(pathToSHPs, "lightmake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4313", "4327", Path.Combine(pathToSHPs, "silomake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4328", "4346", Path.Combine(pathToSHPs, "heavymake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4347", "4369", Path.Combine(pathToSHPs, "starportmake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4370", "4390", Path.Combine(pathToSHPs, "repairmake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4391", "4412", Path.Combine(pathToSHPs, "researchmake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4413", "4435", Path.Combine(pathToSHPs, "palacemake"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4436", "4449", Path.Combine(pathToSHPs, "cranea"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4450", "4463", Path.Combine(pathToSHPs, "craneh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4464", "4477", Path.Combine(pathToSHPs, "craneo"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4478", "4491", Path.Combine(pathToSHPs, "cranea2"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4492", "4501", Path.Combine(pathToSHPs, "windtrapa"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4502", "4511", Path.Combine(pathToSHPs, "windtraph"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4512", "4521", Path.Combine(pathToSHPs, "windtrapo"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4522", "4552", Path.Combine(pathToSHPs, "disha"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4553", "4582", Path.Combine(pathToSHPs, "dishh"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4583", "4613", Path.Combine(pathToSHPs, "disho"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4614", "4643", Path.Combine(pathToSHPs, "highweld"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4644", "4673", Path.Combine(pathToSHPs, "lightweld"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4674", "4721", Path.Combine(pathToSHPs, "heavyweld"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4722", "4744", Path.Combine(pathToSHPs, "unknown20"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4745", "4759", Path.Combine(pathToSHPs, "marker"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4760", "4819", Path.Combine(pathToSHPs, "researchzaps"), "--building" },
new string[] { "--r8", pathToDataR8, pathToPalette, "4820", "4840", Path.Combine(pathToSHPs, "deathhandlaunch"), "--building" },
new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/MOUSE.R8"), pathToPalette, "0", "264", Path.Combine(pathToSHPs, "mouse") },
new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BASE"), "--tileset" },
new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), pathToPalette, "748", "749", Path.Combine(pathToSHPs, "spice0") },
new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBAT.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BAT"), "--tileset" },
new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBGBS.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BGBS"), "--tileset" },
new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXICE.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "ICE"), "--tileset" },
new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXTREE.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "TREE"), "--tileset" },
new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXWAST.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "WAST"), "--tileset" },
////new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXXMAS.R8"), PathToPalette, "0", "799", Path.Combine(PathToTilesets, "XMAS"), "--tileset" },
};
var shpToCreate = new string[][]
{
new string[] { "--shp", Path.Combine(pathToSHPs, "overlay.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "repairing.png"), "24" },
new string[] { "--shp", Path.Combine(pathToSHPs, "black.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "selectionedges.png"), "8" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bar1.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bar2.png"), "24" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bar3.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bar4.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bar5.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bar6.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "dots.png"), "4" },
new string[] { "--shp", Path.Combine(pathToSHPs, "numbers.png"), "8" },
new string[] { "--shp", Path.Combine(pathToSHPs, "credits.png"), "10" },
new string[] { "--shp", Path.Combine(pathToSHPs, "d2kshadow.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "crates.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "spicebloom.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "stars.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "greenuparrow.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rockcrater1.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rockcrater2.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "sandcrater1.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "sandcrater2.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown2.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rifle.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rifledeath.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bazooka.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bazookadeath.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "fremen.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "fremendeath.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "sardaukar.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "sardaukardeath.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "engineer.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "engineerdeath.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "thumper.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "thumping.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "thumper2.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "thumperdeath.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "missiletank.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "trike.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "quad.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "harvester.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "combata.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "siegetank.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "dmcv.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "sonictank.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "combataturret.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "siegeturret.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "carryall.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "orni.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "combath.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "devast.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "combathturret.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "deathhandmissile.png"), "24" },
new string[] { "--shp", Path.Combine(pathToSHPs, "saboteur.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "saboteurdeath.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "deviatortank.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "raider.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "combato.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "combatoturret.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "frigate.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "heavya.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "radara.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "pwra.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "barra.png"), "80" },
new string[] { "--shp", Path.Combine(pathToSHPs, "walla.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "conyarda.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "refa.png"), "120" },
new string[] { "--shp", Path.Combine(pathToSHPs, "hightecha.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "siloa.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "repaira.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "guntowera.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "gunturreta.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rockettowera.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rocketturreta.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "researcha.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "starporta.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "lighta.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "palacea.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "heavyh.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "radarh.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "pwrh.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "wallh.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "barrh.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "conyardh.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "refh.png"), "120" },
new string[] { "--shp", Path.Combine(pathToSHPs, "hightechh.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "siloh.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "repairh.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "guntowerh.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "gunturreth.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rockettowerh.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rocketturreth.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "researchh.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "starporth.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "lighth.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "palaceh.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "heavyo.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "radaro.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "pwro.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "barro.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "wallo.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "conyardo.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "refo.png"), "120" },
new string[] { "--shp", Path.Combine(pathToSHPs, "hightecho.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "siloo.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "repairo.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "guntowero.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "gunturreto.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rockettowero.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rocketturreto.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "researcho.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "starporto.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "lighto.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "palaceo.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "sietch.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "starportc.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "heavyc.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "palacec.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "conyardh2.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "plates.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown3.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rpg.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown4.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "missile.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "doubleblast.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bombs.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown6.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown7.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown8.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown9.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "missile2.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unload.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "harvest.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "miniboom.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "mediboom.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "mediboom2.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "minifire.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "miniboom2.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "minibooms.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bigboom.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bigboom2.png"), "72" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bigboom3.png"), "72" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown10.png"), "24" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown11.png"), "84" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown12.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "movingsand.png"), "72" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown13.png"), "72" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown14.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown15.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown16.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "wormjaw.png"), "68" },
new string[] { "--shp", Path.Combine(pathToSHPs, "wormdust.png"), "68" },
new string[] { "--shp", Path.Combine(pathToSHPs, "wormsigns1.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "wormsigns2.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "wormsigns3.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "wormsigns4.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rings.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "minipiff.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "movingsand2.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "selling.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "shockwave.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "electroplosion.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "fire.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "fire2.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown21.png"), "12" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown22.png"), "24" },
new string[] { "--shp", Path.Combine(pathToSHPs, "doublemuzzle.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "muzzle.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "doubleblastmuzzle.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "minimuzzle.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown17.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown18.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown19.png"), "16" },
new string[] { "--shp", Path.Combine(pathToSHPs, "burst.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "fire3.png"), "120" },
new string[] { "--shp", Path.Combine(pathToSHPs, "energy.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "reveal.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "orbit.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "mushroomcloud.png"), "72" },
new string[] { "--shp", Path.Combine(pathToSHPs, "mediboom3.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "largeboom.png"), "72" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rifleicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "bazookaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "engineericon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "thumpericon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "sardaukaricon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "trikeicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "raidericon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "quadicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "harvestericon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "combataicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "combathicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "combatoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "mcvicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "missiletankicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "deviatortankicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "siegetankicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "sonictankicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "devasticon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "carryallicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "orniicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "fremenicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "saboteuricon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "deathhandicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "conyardaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "conyardhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "conyardoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "4plateaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "4platehicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "4plateoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "6plateaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "6platehicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "6plateoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "pwraicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "pwrhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "pwroicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "barraicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "barrhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "barroicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "wallaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "wallhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "walloicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "refaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "refhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "refoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "guntoweraicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "guntowerhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "guntoweroicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "radaraicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "radarhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "radaroicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rockettoweraicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rockettowerhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "rockettoweroicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "hightechaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "hightechhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "hightechoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "lightaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "lighthicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "lightoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "siloaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "silohicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "silooicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "heavyaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "heavyhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "heavyoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "starportaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "starporthicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "starportoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "repairaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "repairhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "repairoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "researchaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "researchhicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "researchoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "palaceaicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "palacehicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "palaceoicon.png"), "60" },
new string[] { "--shp", Path.Combine(pathToSHPs, "conmake.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "wtrpmake.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "barramake.png"), "80" },
new string[] { "--shp", Path.Combine(pathToSHPs, "barrhmake.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "barromake.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "refmake.png"), "120" },
new string[] { "--shp", Path.Combine(pathToSHPs, "radarmake.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "highmake.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "lightmake.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "silomake.png"), "32" },
new string[] { "--shp", Path.Combine(pathToSHPs, "heavymake.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "starportmake.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "repairmake.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "researchmake.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "palacemake.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "cranea.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "craneh.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "craneo.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "windtrapa.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "windtraph.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "windtrapo.png"), "64" },
new string[] { "--shp", Path.Combine(pathToSHPs, "disha.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "dishh.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "disho.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "highweld.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "lightweld.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "heavyweld.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "unknown20.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "marker.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "researchzaps.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "deathhandlaunch.png"), "96" },
new string[] { "--shp", Path.Combine(pathToSHPs, "mouse.png"), "48" },
new string[] { "--shp", Path.Combine(pathToSHPs, "spice0.png"), "32" },
};
var shpToTranspose = new string[][]
{
new string[] { "--transpose", Path.Combine(pathToSHPs, "orni.shp"), Path.Combine(pathToSHPs, "orni.shp"), "0", "32", "3" },
new string[] { "--transpose", Path.Combine(pathToSHPs, "rifle.shp"), Path.Combine(pathToSHPs, "rifle.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5" },
new string[] { "--transpose", Path.Combine(pathToSHPs, "bazooka.shp"), Path.Combine(pathToSHPs, "bazooka.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5" },
new string[] { "--transpose", Path.Combine(pathToSHPs, "fremen.shp"), Path.Combine(pathToSHPs, "fremen.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5" },
new string[] { "--transpose", Path.Combine(pathToSHPs, "sardaukar.shp"), Path.Combine(pathToSHPs, "sardaukar.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5" },
new string[] { "--transpose", Path.Combine(pathToSHPs, "thumper.shp"), Path.Combine(pathToSHPs, "thumper.shp"), "8", "8", "6" },
new string[] { "--transpose", Path.Combine(pathToSHPs, "thumper2.shp"), Path.Combine(pathToSHPs, "thumper2.shp"), "8", "8", "5" },
new string[] { "--transpose", Path.Combine(pathToSHPs, "engineer.shp"), Path.Combine(pathToSHPs, "engineer.shp"), "8", "8", "6" },
new string[] { "--transpose", Path.Combine(pathToSHPs, "saboteur.shp"), Path.Combine(pathToSHPs, "saboteur.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5" },
};
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 < shpToCreate.Length; i++)
{
progressBar.Percentage = i * 100 / shpToCreate.Count();
statusLabel.GetText = () => "Converting...";
Utility.Command.ConvertPngToShp(shpToCreate[i]);
File.Delete(shpToCreate[i][1]);
}
for (int i = 0; i < shpToTranspose.Length; i++)
{
progressBar.Percentage = i * 100 / shpToTranspose.Count();
statusLabel.GetText = () => "Transposing...";
Utility.Command.TransposeShp(shpToTranspose[i]);
}
statusLabel.GetText = () => "Building tilesets...";
int c = 0;
string[] TilesetArray = new string[] { "BASE", "BAT", "BGBS", "ICE", "TREE", "WAST" };
foreach (string set in TilesetArray)
{
progressBar.Percentage = c * 100 / TilesetArray.Count();
File.Delete(Path.Combine(pathToTilesets, "{0}.tsx".F(set)));
File.Copy("mods/d2k/tilesets/{0}.tsx".F(set), Path.Combine(pathToTilesets, "{0}.tsx".F(set)));
// TODO: this is ugly: a GUI will open and close immediately after some delay
Process p = new Process();
ProcessStartInfo TilesetBuilderProcessStartInfo = new ProcessStartInfo("OpenRA.TilesetBuilder.exe", Path.Combine(pathToTilesets, "{0}.png".F(set)) + " 32 --export Content/d2k/Tilesets");
p.StartInfo = TilesetBuilderProcessStartInfo;
p.Start();
p.WaitForExit();
File.Delete(Path.Combine(pathToTilesets, "{0}.tsx".F(set)));
File.Delete(Path.Combine(pathToTilesets, "{0}.png".F(set)));
File.Delete(Path.Combine(pathToTilesets, "{0}.yaml".F(set.ToLower())));
File.Delete(Path.Combine(pathToTilesets, "{0}.pal".F(set.ToLower())));
c++;
}
Game.RunAfterTick(() =>
{
progressBar.Percentage = 100;
statusLabel.GetText = () => "Extraction and conversion complete.";
backButton.IsDisabled = () => false;
continueLoading();
});
}
catch
{
onError("Installation failed");
}
}) { IsBackground = true };
t.Start();
}
}
}

View File

@@ -14,7 +14,6 @@ using System.Linq;
using System.Threading;
using OpenRA.FileFormats;
using OpenRA.FileFormats.Graphics;
using OpenRA.Utility;
using OpenRA.Widgets;
namespace OpenRA.Mods.D2k.Widgets.Logic

View File

@@ -33,9 +33,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic
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;
panel.Get<ButtonWidget>("MODS_BUTTON").OnClick = () =>

View File

@@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA.Activities
bool complete = false;
bool started = false;
public override Activity Tick( Actor self )
public override Activity Tick(Actor self)
{
if (self.IsDead())
return NextActivity;
@@ -66,6 +66,6 @@ namespace OpenRA.Mods.RA.Activities
}
// Cannot be cancelled
public override void Cancel( Actor self ) { }
public override void Cancel(Actor self) { }
}
}

View File

@@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA.Render
var self = init.self;
// Work around a bogus crash
anim.PlayRepeating( NormalizeSequence(self, "idle") );
anim.PlayRepeating(NormalizeSequence(self, "idle"));
self.Trait<IBodyOrientation>().SetAutodetectedFacings(anim.CurrentSequence.Facings);
// Can't call Complete() directly from ctor because other traits haven't been inited yet

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Render
public object Create(ActorInitializer init) { return new WithIdleOverlay(init.self, this); }
}
public class WithIdleOverlay : INotifyDamageStateChanged, INotifyBuildComplete
public class WithIdleOverlay : INotifyDamageStateChanged, INotifyBuildComplete, INotifySold
{
Animation overlay;
bool buildComplete;
@@ -50,6 +50,12 @@ namespace OpenRA.Mods.RA.Render
buildComplete = true;
}
public void Sold(Actor self) { }
public void Selling(Actor self)
{
buildComplete = false;
}
public void DamageStateChanged(Actor self, AttackInfo e)
{
overlay.ReplaceAnim(RenderSprites.NormalizeSequence(overlay, e.DamageState, overlay.CurrentSequence.Name));

View File

@@ -17,7 +17,7 @@ namespace OpenRA.Mods.RA
public abstract class SupportPowerInfo : ITraitInfo
{
public readonly int ChargeTime = 0;
public readonly string Image = null;
public readonly string Icon = null;
public readonly string Description = "";
public readonly string LongDesc = "";
public readonly bool AllowMultiple = false;

View File

@@ -18,8 +18,9 @@ namespace OpenRA.Mods.RA
{
public readonly string Description = "";
public readonly string Name = "";
[Desc("Defaults to actor name + icon suffix.")]
public readonly string Icon = null;
[Desc("Sequence of the actor that contains the cameo.")]
public readonly string Icon = "icon";
public virtual object Create(ActorInitializer init) { return new Tooltip(init.self, this); }
}

View File

@@ -37,10 +37,9 @@ namespace OpenRA.Mods.RA.Widgets
List<ProductionQueue> VisibleQueues;
bool paletteOpen = false;
Dictionary<string, Sprite> iconSprites;
float2 paletteOpenOrigin = new float2(Game.viewport.Width - 215, 280);
float2 paletteClosedOrigin = new float2(Game.viewport.Width - 16, 280);
float2 paletteOpenOrigin;
float2 paletteClosedOrigin;
float2 paletteOrigin;
int paletteAnimationLength = 7;
@@ -64,16 +63,16 @@ namespace OpenRA.Mods.RA.Widgets
cantBuild = new Animation("clock");
cantBuild.PlayFetchIndex("idle", () => 0);
clock = new Animation("clock");
paletteOrigin = paletteClosedOrigin;
VisibleQueues = new List<ProductionQueue>();
CurrentQueue = null;
}
iconSprites = Rules.Info.Values
.Where(u => u.Traits.Contains<BuildableInfo>() && u.Name[0] != '^')
.ToDictionary(
u => u.Name,
u => Game.modData.SpriteLoader.LoadAllSprites(
u.Traits.Get<TooltipInfo>().Icon ?? (u.Name + "icon"))[0]);
public override void Initialize(WidgetArgs args)
{
paletteOpenOrigin = new float2(Game.viewport.Width - Columns*IconWidth - 23, 280);
paletteClosedOrigin = new float2(Game.viewport.Width - 16, 280);
paletteOrigin = paletteClosedOrigin;
base.Initialize(args);
}
public override Rectangle EventBounds
@@ -230,7 +229,9 @@ namespace OpenRA.Mods.RA.Widgets
{
var rect = new RectangleF(origin.X + x * IconWidth, origin.Y + IconHeight * y, IconWidth, IconHeight);
var drawPos = new float2(rect.Location);
WidgetUtils.DrawSHP(iconSprites[item.Name], drawPos, worldRenderer);
var icon = new Animation(RenderSimple.GetImage(item));
icon.Play(item.Traits.Get<TooltipInfo>().Icon);
WidgetUtils.DrawSHP(icon.Image, drawPos, worldRenderer);
var firstOfThis = queue.AllQueued().FirstOrDefault(a => a.Item == item.Name);

View File

@@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets
@@ -20,7 +21,6 @@ namespace OpenRA.Mods.RA.Widgets
public class ObserverProductionIconsWidget : Widget
{
public Func<Player> GetPlayer;
Dictionary<string, Sprite> iconSprites;
World world;
WorldRenderer worldRenderer;
Dictionary<ProductionQueue, Animation> clocks;
@@ -29,10 +29,6 @@ namespace OpenRA.Mods.RA.Widgets
public ObserverProductionIconsWidget(World world, WorldRenderer worldRenderer)
: base()
{
iconSprites = Rules.Info.Values.Where(u => u.Traits.Contains<BuildableInfo>() && u.Name[0] != '^')
.ToDictionary(
u => u.Name,
u => Game.modData.SpriteLoader.LoadAllSprites(u.Traits.Get<TooltipInfo>().Icon ?? (u.Name + "icon"))[0]);
this.world = world;
this.worldRenderer = worldRenderer;
clocks = new Dictionary<ProductionQueue, Animation>();
@@ -42,7 +38,6 @@ namespace OpenRA.Mods.RA.Widgets
: base(other)
{
GetPlayer = other.GetPlayer;
iconSprites = other.iconSprites;
world = other.world;
worldRenderer = other.worldRenderer;
clocks = other.clocks;
@@ -67,25 +62,27 @@ namespace OpenRA.Mods.RA.Widgets
}
foreach (var queue in queues)
{
var item = queue.Trait.CurrentItem();
var item = queue.Trait.AllItems().FirstOrDefault();
if (item == null)
{
continue;
}
var sprite = iconSprites[item.Item];
var size = sprite.size / new float2(2, 2);
var icon = new Animation(RenderSimple.GetImage(item));
icon.Play(item.Traits.Get<TooltipInfo>().Icon);
var size = icon.Image.size / new float2(2, 2);
var location = new float2(RenderBounds.Location) + new float2(queue.i * (int)size.Length, 0);
WidgetUtils.DrawSHP(sprite, location, worldRenderer, size);
WidgetUtils.DrawSHP(icon.Image, location, worldRenderer, size);
var current = queue.Trait.CurrentItem();
if (current == null)
continue;
var clock = clocks[queue.Trait];
clock.PlayFetchIndex("idle",
() => item.TotalTime == 0 ? 0 : ((item.TotalTime - item.RemainingTime)
* (clock.CurrentSequence.Length - 1) / item.TotalTime));
() => current.TotalTime == 0 ? 0 : ((current.TotalTime - current.RemainingTime)
* (clock.CurrentSequence.Length - 1) / current.TotalTime));
clock.Tick();
WidgetUtils.DrawSHP(clock.Image, location, worldRenderer, size);
var tiny = Game.Renderer.Fonts["Tiny"];
var text = GetOverlayForItem(item);
var text = GetOverlayForItem(current);
tiny.DrawTextWithContrast(text,
location + new float2(16, 16) - new float2(tiny.Measure(text).X / 2, 0),
Color.White, Color.Black, 1);

View File

@@ -20,7 +20,7 @@ namespace OpenRA.Mods.RA.Widgets
public class ObserverSupportPowerIconsWidget : Widget
{
public Func<Player> GetPlayer;
Dictionary<string, Sprite> iconSprites;
Animation icon;
World world;
WorldRenderer worldRenderer;
Dictionary<string, Animation> clocks;
@@ -29,21 +29,18 @@ namespace OpenRA.Mods.RA.Widgets
public ObserverSupportPowerIconsWidget(World world, WorldRenderer worldRenderer)
: base()
{
iconSprites = Rules.Info.Values.SelectMany(u => u.Traits.WithInterface<SupportPowerInfo>())
.Select(u => u.Image).Distinct()
.ToDictionary(
u => u,
u => Game.modData.SpriteLoader.LoadAllSprites(u)[0]);
this.world = world;
this.worldRenderer = worldRenderer;
clocks = new Dictionary<string, Animation>();
icon = new Animation("icon");
}
protected ObserverSupportPowerIconsWidget(ObserverSupportPowerIconsWidget other)
: base(other)
{
GetPlayer = other.GetPlayer;
iconSprites = other.iconSprites;
icon = other.icon;
world = other.world;
worldRenderer = other.worldRenderer;
clocks = other.clocks;
@@ -68,12 +65,12 @@ namespace OpenRA.Mods.RA.Widgets
foreach (var power in powers)
{
var item = power.a.Value;
if (item == null || item.Info == null || item.Info.Image == null)
if (item == null || item.Info == null || item.Info.Icon == null)
continue;
var sprite = iconSprites[item.Info.Image];
var size = sprite.size / new float2(2, 2);
icon.Play(item.Info.Icon);
var size = icon.Image.size / new float2(2, 2);
var location = new float2(RenderBounds.Location) + new float2(power.i * (int)size.Length, 0);
WidgetUtils.DrawSHP(sprite, location, worldRenderer, size);
WidgetUtils.DrawSHP(icon.Image, location, worldRenderer, size);
var clock = clocks[power.a.Key];
clock.PlayFetchIndex("idle",

View File

@@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA.Widgets
public string ReadyText = "";
public string HoldText = "";
Dictionary<string, Sprite> spsprites;
Animation icon;
Animation clock;
readonly List<Pair<Rectangle, Action<MouseInput>>> buttons = new List<Pair<Rectangle,Action<MouseInput>>>();
@@ -41,12 +41,7 @@ namespace OpenRA.Mods.RA.Widgets
{
base.Initialize(args);
spsprites = Rules.Info.Values.SelectMany( u => u.Traits.WithInterface<SupportPowerInfo>() )
.Select(u => u.Image).Distinct()
.ToDictionary(
u => u,
u => Game.modData.SpriteLoader.LoadAllSprites(u)[0]);
icon = new Animation("icon");
clock = new Animation("clock");
}
@@ -88,7 +83,7 @@ namespace OpenRA.Mods.RA.Widgets
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-middle"), new float2(rectBounds.X, rectBounds.Y + i * 51));
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-bottom"), new float2(rectBounds.X, rectBounds.Y + numPowers * 51));
// Hack Hack Hack
// HACK: Hack Hack Hack
rectBounds.Width = 69;
rectBounds.Height = 10 + numPowers * 51 + 21;
@@ -96,7 +91,7 @@ namespace OpenRA.Mods.RA.Widgets
foreach (var kv in powers)
{
var sp = kv.Value;
var image = spsprites[sp.Info.Image];
icon.Play(sp.Info.Icon);
var drawPos = new float2(rectBounds.X + 5, y);
var rect = new Rectangle(rectBounds.X + 5, y, 64, 48);
@@ -142,7 +137,7 @@ namespace OpenRA.Mods.RA.Widgets
}
}
WidgetUtils.DrawSHP(image, drawPos, worldRenderer);
WidgetUtils.DrawSHP(icon.Image, drawPos, worldRenderer);
clock.PlayFetchIndex("idle",
() => sp.TotalTime == 0 ? clock.CurrentSequence.Length - 1 : (sp.TotalTime - sp.RemainingTime)

View File

@@ -137,127 +137,9 @@ namespace OpenRA.Utility
var bitmap = new Bitmap(frame.FrameSize.Width * frameCount, frame.FrameSize.Height, PixelFormat.Format8bppIndexed);
bitmap.Palette = palette.AsSystemPalette();
int x = 0;
frame = srcImage[startFrame];
// resorting to RA/CnC compatible counter-clockwise frame order
if (args.Contains("--infantry"))
{
endFrame = startFrame - 1;
// assuming 8 facings each animation set
for (int e = 8; e < frameCount + 1; e = e + 8)
{
for (int f = startFrame + e - 1; f > endFrame; f--)
{
var offsetX = frame.FrameSize.Width / 2 - frame.Size.Width / 2;
var offsetY = frame.FrameSize.Height / 2 - frame.Size.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.Size.Width, frame.Size.Height), ImageLockMode.WriteOnly,
PixelFormat.Format8bppIndexed);
for (var i = 0; i < frame.Size.Height; i++)
Marshal.Copy(frame.Image, i * frame.Size.Width,
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Size.Width);
bitmap.UnlockBits(data);
x += frame.FrameSize.Width;
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") || args.Contains("--projectile"))
{
frame = srcImage[startFrame];
for (int f = endFrame - 1; f > startFrame - 1; f--)
{
var offsetX = frame.FrameSize.Width / 2 - frame.Offset.X;
var offsetY = frame.FrameSize.Height / 2 - frame.Offset.Y;
Console.WriteLine("calculated OffsetX: {0}", offsetX);
Console.WriteLine("calculated OffsetY: {0}", offsetY);
var data = bitmap.LockBits(new Rectangle(x + offsetX, 0 + offsetY, frame.Size.Width, frame.Size.Height), ImageLockMode.WriteOnly,
PixelFormat.Format8bppIndexed);
for (var i = 0; i < frame.Size.Height; i++)
Marshal.Copy(frame.Image, i * frame.Size.Width,
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Size.Width);
bitmap.UnlockBits(data);
x += frame.FrameSize.Width;
frame = srcImage[f];
}
}
else if (args.Contains("--turret"))
{
frame = srcImage[startFrame];
for (int f = endFrame - 1; f > startFrame - 1; f--)
{
var offsetX = Math.Abs(frame.Offset.X);
var offsetY = frame.FrameSize.Height - Math.Abs(frame.Offset.Y);
Console.WriteLine("calculated OffsetX: {0}", offsetX);
Console.WriteLine("calculated OffsetY: {0}", offsetY);
var data = bitmap.LockBits(new Rectangle(x + offsetX, 0 + offsetY, frame.Size.Width, frame.Size.Height), ImageLockMode.WriteOnly,
PixelFormat.Format8bppIndexed);
for (var i = 0; i < frame.Size.Height; i++)
Marshal.Copy(frame.Image, i * frame.Size.Width,
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Size.Width);
bitmap.UnlockBits(data);
x += frame.FrameSize.Width;
frame = srcImage[f];
}
}
else if (args.Contains("--wall"))
{
// complex resorting to RA/CnC compatible frame order
var d2kBrikFrameOrder = new int[] { 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)
{
var f = startFrame - 1 + o;
frame = srcImage[f];
var offsetX = Math.Abs(frame.Offset.X);
var offsetY = frame.FrameSize.Height - Math.Abs(frame.Offset.Y);
Console.WriteLine("calculated OffsetX: {0}", offsetX);
Console.WriteLine("calculated OffsetY: {0}", offsetY);
var data = bitmap.LockBits(new Rectangle(x + offsetX, 0 + offsetY, frame.Size.Width, frame.Size.Height), ImageLockMode.WriteOnly,
PixelFormat.Format8bppIndexed);
for (var i = 0; i < frame.Size.Height; i++)
Marshal.Copy(frame.Image, i * frame.Size.Width,
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Size.Width);
bitmap.UnlockBits(data);
x += frame.FrameSize.Width;
}
}
else if (args.Contains("--tileset"))
if (args.Contains("--tileset"))
{
int f = 0;
var tileset = new Bitmap(frame.FrameSize.Width * 20, frame.FrameSize.Height * 40, PixelFormat.Format8bppIndexed);
@@ -287,39 +169,6 @@ namespace OpenRA.Utility
bitmap = tileset;
}
else
{
for (int f = startFrame; f < endFrame; f++)
{
frame = srcImage[f];
var offsetX = 0;
var offsetY = 0;
if (args.Contains("--infantrydeath"))
{
offsetX = frame.FrameSize.Width / 2 - frame.Size.Width / 2;
offsetY = frame.FrameSize.Height / 2 - frame.Size.Height / 2;
}
else if (args.Contains("--building"))
{
offsetX = Math.Abs(frame.Offset.X);
offsetY = frame.FrameSize.Height - Math.Abs(frame.Offset.Y);
}
Console.WriteLine("calculated OffsetX: {0}", offsetX);
Console.WriteLine("calculated OffsetY: {0}", offsetY);
var data = bitmap.LockBits(new Rectangle(x + offsetX, 0 + offsetY, frame.Size.Width, frame.Size.Height), ImageLockMode.WriteOnly,
PixelFormat.Format8bppIndexed);
for (var i = 0; i < frame.Size.Height; i++)
Marshal.Copy(frame.Image, i * frame.Size.Width,
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Size.Width);
bitmap.UnlockBits(data);
x += frame.FrameSize.Width;
}
}
bitmap.Save(filename + ".png");
Console.WriteLine(filename + ".png saved");

View File

@@ -64,7 +64,7 @@ namespace OpenRA.Utility
Console.WriteLine(" --extract MOD[,MOD]* FILES [--userdir] Extract files from mod packages to the current (or user) directory");
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 [--noshadow] [--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 removing the shadow.");
Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type to append multiple frames to one PNG named by filename optionally removing the shadow.");
Console.WriteLine(" --transpose SRCSHP DESTSHP START N M [START N M ...] Transpose the N*M block of frames starting at START.");
Console.WriteLine(" --docs MOD Generate trait documentation in MarkDown format.");
Console.WriteLine(" --map-hash MAPFILE Generate hash of specified oramap file.");

View File

@@ -15,7 +15,7 @@ Join the [Forums](http://www.sleipnirstuff.com/forum/viewforum.php?f=80) for dis
Distributed mods include a reimagining of
* Command & Conquer: Red Alert
* Command & Conquer: Tiberian Dawn
* Dune 2000 (experimental)
* Dune 2000
Check our [Playing the Game](https://github.com/OpenRA/OpenRA/wiki/Playing-the-game) Guide to win multiplayer matches.
@@ -24,7 +24,6 @@ Check our [Playing the Game](https://github.com/OpenRA/OpenRA/wiki/Playing-the-g
* Please read [INSTALL](https://github.com/OpenRA/OpenRA/blob/bleed/INSTALL) and [Compiling](https://github.com/OpenRA/OpenRA/wiki/Compiling) on how to set up an OpenRA development environment.
* Read [HACKING](https://github.com/OpenRA/OpenRA/blob/bleed/HACKING) for an overview of the engine.
* To get your patches merged please adhere to the [Contributing](https://github.com/OpenRA/OpenRA/blob/bleed/CONTRIBUTING.md) guidelines.
* Some insights on the upcoming [Translation](https://github.com/OpenRA/OpenRA/wiki/Translation) framework.
## Mapping
@@ -33,7 +32,7 @@ Check our [Playing the Game](https://github.com/OpenRA/OpenRA/wiki/Playing-the-g
## Modding
* There exists an incomplete [Trait documentation](https://github.com/OpenRA/OpenRA/wiki/Trait-Documentation) to get started with yaml files.
* There exists an auto-generated [Trait documentation](https://github.com/OpenRA/OpenRA/wiki/Traits) to get started with yaml files.
* Check the [Modding Guide](https://github.com/OpenRA/OpenRA/wiki/Modding%20Guide) to create your own classic RTS.
* Some hints on to create new OpenRA compatible [Pixelart](https://github.com/OpenRA/OpenRA/wiki/Pixelart).
* Upload total conversions at [our ModDB profile](http://www.moddb.com/games/openra/mods)

View File

@@ -7,281 +7,173 @@ Cursors:
mouse2: cursor
scroll-t:
start:1
x:14
y:-2
scroll-tr:
start:2
x:14
y:-2
scroll-r:
start:3
x:28
y:12
scroll-br:
start:4
x:28
y:22
scroll-b:
start:5
x:14
y:22
scroll-bl:
start:6
x:-2
y:22
scroll-l:
start:7
x:-1
y:13
scroll-tl:
start:8
x:-2
y:-2
scroll-t-blocked:
start:130
x:14
y:-2
scroll-tr-blocked:
start:131
x:14
y:-2
scroll-r-blocked:
start:132
x:28
y:12
scroll-br-blocked:
start:133
x:28
y:22
scroll-b-blocked:
start:134
x:14
y:22
scroll-bl-blocked:
start:135
x:-2
y:22
scroll-l-blocked:
start:136
x:-1
y:13
scroll-tl-blocked:
start:137
x:-2
y:-2
select:
start:12
length:6
x:12
y:12
default:
start:0
x: -16
y: -12
default-minimap:
start:86
length:1
x: -16
y: -12
generic-blocked:
start:9
x:12
y:12
generic-blocked-minimap:
start:27
x:12
y:12
attack:
start:18
length:8
x:12
y:12
attack-minimap:
start:140
length:8
x:12
y:12
harvest:
start:18
length:8
x:12
y:12
harvest-minimap:
start:140
length:8
x:12
y:12
enter:
start:119
length:3
x:12
y:12
enter-minimap:
start:148
length:3
x:12
y:12
c4:
start:122
length:3
x:12
y:12
c4-minimap:
start:127
length:3
x:12
y:12
guard:
start:153
length:1
x:12
y:12
guard-minimap:
start:152
length:1
x:12
y:12
# Cursors that need minimap variants
deploy:
start:53
length:9
x:12
y:12
repair:
start:29
length:24
x:12
y:12
repair-blocked:
start:126
length:1
x:12
y:12
sell:
start:62
length:24
x:12
y:12
sell-blocked:
start:125
length:1
x:12
y:12
ability:
start:88
length:8
x:12
y:12
nuke:
start:96
length:7
x:12
y:12
ioncannon:
start:103
length:16
x:12
y:12
sell-vehicle:
start:154
length:24
x:12
y:12
mouse4:cursor
move:
start:0
length:8
x:12
y:12
move-minimap:
start:9
length:4
x:12
y:12
move-rough:
start:0
length: 8
x: 12
y: 12
attackmove:cursor
attackmove:
start:0
length:8
x:12
y:12
attackmove-minimap:
start:9
length:4
x:12
y:12
move-blocked:
start:8
x:12
y:12
move-blocked-minimap:
start:13
length:1
x:12
y:12
mouse3: cursor2
enter-blocked:
start:212
length:1
x:12
y:12
enter-blocked-minimap:
start:33
length:1
capture:
start:164
length:3
x:12
y:12
capture-minimap:
start:167
length:3
x:12
y:12
heal:
start:160
length:4
x:12
y:12
heal-minimap:
start:194
length:1
x:12
y:12
ability-minimap:
start:214
length:8
x:12
y:12
deploy-blocked:
start:211
length:1
x:12
y:12
goldwrench:
start:170
length:24
x:12
y:12
goldwrench-blocked:
start:213
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
length: 3

View File

@@ -4,7 +4,6 @@ TRAN:
Cost: 750
Tooltip:
Name: Chinook Transport
Icon:tranicnh
Description: Fast Infantry Transport Helicopter.\n Unarmed
Buildable:
BuildPaletteOrder: 10
@@ -47,7 +46,6 @@ HELI:
Cost: 1200
Tooltip:
Name: Apache Longbow
Icon: heliicnh
Description: Helicopter Gunship with Chainguns.\n Strong vs Infantry, Light Vehicles\n Weak vs Tanks
Buildable:
BuildPaletteOrder: 20
@@ -100,7 +98,6 @@ ORCA:
Cost: 1200
Tooltip:
Name: Orca
Icon: orcaicnh
Description: Helicopter Gunship with AG Missiles.\n Strong vs Buildings, Tanks\n Weak vs Infantry
Buildable:
BuildPaletteOrder: 20
@@ -148,7 +145,6 @@ C17:
Tooltip:
Name: Supply Aircraft
Description: Drops vehicle reinforcements on Airstrips
Icon: c17icnh
Valued:
Cost: 2000
Plane:
@@ -175,7 +171,6 @@ A10:
Inherits: ^Plane
Tooltip:
Name: A10 Bomber
Icon: a10icnh
Description: Used to deliver Napalm strikes.
Valued:
Cost: 2000

View File

@@ -5,7 +5,6 @@ E1:
Tooltip:
Name: Minigunner
Description: General-purpose infantry.\n Strong vs Infantry\n Weak vs Vehicles
Icon: e1icnh
Buildable:
BuildPaletteOrder: 10
Owner: gdi, nod
@@ -30,7 +29,6 @@ E2:
Tooltip:
Name: Grenadier
Description: Infantry armed with grenades. \n Strong vs Buildings, Infantry\n Weak vs Vehicles
Icon: e2icnh
Buildable:
BuildPaletteOrder: 40
Prerequisites: anyhq
@@ -62,7 +60,6 @@ E3:
Tooltip:
Name: Rocket Soldier
Description: Anti-tank/Anti-aircraft infantry. \n Strong vs Tanks, Aircraft\n Weak vs Infantry
Icon: e3icnh
Buildable:
BuildPaletteOrder: 20
Owner: nod, gdi
@@ -89,7 +86,6 @@ E4:
Tooltip:
Name: Flamethrower
Description: Advanced Anti-infantry unit.\n Strong vs Infantry, Buildings\n Weak vs Vehicles
Icon: e4icnh
Buildable:
BuildPaletteOrder: 40
Owner: nod
@@ -118,7 +114,6 @@ E5:
Tooltip:
Name: Chem Warrior
Description: Advanced Anti-infantry unit.\n Strong vs Infantry\n Weak vs Vehicles
Icon: e5icnh
Buildable:
BuildPaletteOrder: 50
Owner: nod
@@ -153,7 +148,6 @@ E6:
Tooltip:
Name: Engineer
Description: Infiltrates and captures enemy structures.\n Strong vs Nothing\n Weak vs Everything
Icon: e6icnh
Buildable:
BuildPaletteOrder: 30
Owner: gdi,nod
@@ -181,7 +175,6 @@ RMBO:
Valued:
Cost: 1000
Tooltip:
Icon: rmboicnh
Name: Commando
Description: Elite sniper infantry unit.\n Strong vs Infantry, Buildings\n Weak vs Vehicles
Buildable:
@@ -224,7 +217,6 @@ PVICE:
Owner: gdi, nod
Tooltip:
Description: Mutated abomination that spits liquid tiberium.\n Strong vs Infantry, Buildings\n Weak vs Aircraft
Icon: viceicnh
DrawLineToTarget:
SelectionDecorations:
ActorLostNotification:
@@ -234,7 +226,6 @@ STEG:
Tooltip:
Name: Stegosaurus
Description: A large, heavily built, herbivorous quadruped
Icon: stegicnh
Armament:
Weapon: tail
@@ -243,7 +234,6 @@ TREX:
Tooltip:
Name: Tyrannosaurus rex
Description: Bipedal carnivore with a massive skull
Icon: trexicnh
Armament:
Weapon: teeth
@@ -252,7 +242,6 @@ TRIC:
Tooltip:
Name: Triceratops
Description: Quadruped with large bony frill and three horns
Icon: tricicnh
Armament:
Weapon: horn
@@ -261,6 +250,5 @@ RAPT:
Tooltip:
Name: Velociraptor
Description: Bipedal with enlarged sickle-shaped claw on each hindfoot
Icon: rapticnh
Armament:
Weapon: claw

View File

@@ -4,7 +4,6 @@ BOAT:
Cost: 300
Tooltip:
Name: Gunboat
Icon: boaticnh
Health:
HP: 700
Armor:

View File

@@ -11,7 +11,6 @@ FACT:
Tooltip:
Name: Construction Yard
Description: Builds structures
Icon: facticnh
Building:
Power: 15
Footprint: xxx xxx
@@ -55,7 +54,6 @@ NUKE:
Cost: 300
Tooltip:
Name: Power Plant
Icon: nukeicnh
Description: Generates power
ProvidesCustomPrerequisite:
Prerequisite: anypower
@@ -79,7 +77,6 @@ NUK2:
Cost: 500
Tooltip:
Name: Advanced Power Plant
Icon:nuk2icnh
Description: Provides more power, cheaper than the \nstandard Power Plant
ProvidesCustomPrerequisite:
Prerequisite: anypower
@@ -103,7 +100,6 @@ PROC:
Cost: 1500
Tooltip:
Name: Tiberium Refinery
Icon: procicnh
Description: Processes raw Tiberium\ninto useable resources
Buildable:
BuildPaletteOrder: 20
@@ -142,7 +138,6 @@ SILO:
Cost: 300
Tooltip:
Name: Tiberium Silo
Icon: siloicnh
Description: Stores processed Tiberium
Buildable:
Queue: Defense
@@ -174,7 +169,6 @@ PYLE:
Cost: 300
Tooltip:
Name: Barracks
Icon: pyleicnh
Description: Trains infantry
ProvidesCustomPrerequisite:
Prerequisite: barracks
@@ -213,7 +207,6 @@ HAND:
Cost: 300
Tooltip:
Name: Hand of Nod
Icon: handicnh
Description: Trains infantry
ProvidesCustomPrerequisite:
Prerequisite: barracks
@@ -249,7 +242,6 @@ AFLD:
Cost: 2000
Tooltip:
Name: Airstrip
Icon: afldicnh
Description: Provides a dropzone\nfor vehicle reinforcements
ProvidesCustomPrerequisite:
Prerequisite: vehicleproduction
@@ -287,7 +279,6 @@ WEAP:
Cost: 2000
Tooltip:
Name: Weapons Factory
Icon: weapicnh
Description: Assembly point for\nvehicle reinforcements
ProvidesCustomPrerequisite:
Prerequisite: vehicleproduction
@@ -326,7 +317,6 @@ HPAD:
Cost: 1000
Tooltip:
Name: Helipad
Icon:hpadicnh
Description: Produces, rearms and\nrepairs helicopters
Buildable:
BuildPaletteOrder: 60
@@ -362,7 +352,6 @@ HQ:
Cost: 1000
Tooltip:
Name: Communications Center
Icon: hqicnh
Description: Provides an overview of the battlefield.\n Requires power to operate.
ProvidesCustomPrerequisite:
Prerequisite: anyhq
@@ -384,7 +373,7 @@ HQ:
DetectCloaked:
Range: 8
AirstrikePower:
Image: bombicnh
Icon: airstrike
ChargeTime: 180
Description: Air Strike
LongDesc: Deploy an aerial napalm strike.\nBurns buildings and infantry along a line.
@@ -399,7 +388,6 @@ FIX:
Cost: 500
Tooltip:
Name: Repair Facility
Icon: fixicnh
Description: Repairs vehicles
Buildable:
BuildPaletteOrder: 80
@@ -425,7 +413,6 @@ EYE:
Cost: 1800
Tooltip:
Name: Advanced Communications Center
Icon: eyeicnh
Description: Provides access to the Ion Cannon.\n Requires power to operate.
ProvidesCustomPrerequisite:
Prerequisite: anyhq
@@ -447,7 +434,7 @@ EYE:
DetectCloaked:
Range: 8
IonCannonPower:
Image: ionicnh
Icon: ioncannon
ChargeTime: 180
Description: Ion Cannon
LongDesc: Initiate an Ion Cannon strike.\nApplies instant damage to a small area.
@@ -465,7 +452,6 @@ TMPL:
Cost: 2000
Tooltip:
Name: Temple of Nod
Icon: tmplicnh
Description: Place of worship and secret missile silo.\n Requires power to operate.
ProvidesCustomPrerequisite:
Prerequisite: anyhq
@@ -483,7 +469,7 @@ TMPL:
Range: 6
Bib:
NukePower:
Image: atomicnh
Icon: abomb
ChargeTime: 300
Description: Nuclear Strike
LongDesc: Launch a tactical nuke.\nApplies heavy damage over a large area.
@@ -500,7 +486,6 @@ GUN:
Cost: 600
Tooltip:
Name: Turret
Icon: gunicnh
Description: Anti-Armor base defense.\n Strong vs Tanks\n Weak vs Infantry, Aircraft
Buildable:
Queue: Defense
@@ -538,7 +523,6 @@ SAM:
Cost: 750
Tooltip:
Name: SAM Site
Icon: samicnh
Description: Anti-Air base defense.\n Strong vs Aircraft\n Weak vs Infantry, Tanks
Buildable:
Queue: Defense
@@ -575,7 +559,6 @@ OBLI:
Cost: 1500
Tooltip:
Name: Obelisk of Light
Icon:obliicnh
Description: Advanced base defense.\n Requires power to operate.\n Strong vs Tanks, Infantry\n Weak vs Aircraft
Buildable:
Queue: Defense
@@ -616,7 +599,6 @@ GTWR:
Cost: 500
Tooltip:
Name: Guard Tower
Icon: gtwricnh
Description: Basic defensive structure.\n Strong vs Infantry\n Weak vs Tanks, Aircraft
Buildable:
Queue: Defense
@@ -652,7 +634,6 @@ ATWR:
Cost: 1000
Tooltip:
Name: Advanced Guard Tower
Icon: atwricnh
Description: Anti-armor defensive structure.\n Strong vs Light Vehicles, Tanks\n Weak vs Infantry
Buildable:
Queue: Defense
@@ -694,7 +675,6 @@ SBAG:
Value: 0
Tooltip:
Name: Sandbag Barrier
Icon:sbagicnh
Description: Stops infantry and blocks enemy fire.\nCan be crushed by tanks.
Buildable:
Queue: Defense
@@ -714,7 +694,6 @@ CYCL:
Value: 0
Tooltip:
Name: Chain Link Barrier
Icon:cyclicnh
Description: Stops infantry and blocks enemy fire.\nCan be crushed by tanks.
Buildable:
Queue: Defense
@@ -734,7 +713,6 @@ BRIK:
Value: 0
Tooltip:
Name: Concrete Barrier
Icon:brikicnh
Description: Stop units and blocks enemy fire.
Buildable:
Queue: Defense

View File

@@ -85,7 +85,6 @@ MISS:
Dimensions: 3,2
Tooltip:
Name: Tech Center
Icon: missicnh
Buildable:
Queue: Building
BuildPaletteOrder: 1000

View File

@@ -4,7 +4,6 @@ MCV:
Cost: 2000
Tooltip:
Name: Mobile Construction Vehicle
Icon: mcvicnh
Description: Deploys into another Construction Yard.\n Unarmed
Buildable:
BuildPaletteOrder: 100
@@ -45,7 +44,6 @@ HARV:
Cost: 1200
Tooltip:
Name: Harvester
Icon: harvicnh
Description: Collects Tiberium for processing.\n Unarmed
Buildable:
BuildPaletteOrder: 10
@@ -83,7 +81,6 @@ APC:
Cost: 600
Tooltip:
Name: APC
Icon: apcicnh
Description: Armored infantry transport and mobile AA\n Strong vs Aircraft, Vehicles\n Weak vs Infantry
Buildable:
BuildPaletteOrder: 30
@@ -132,7 +129,6 @@ ARTY:
Cost: 600
Tooltip:
Name: Artillery
Icon:artyicnh
Description: Long-range artillery.\n Strong vs Infantry, Vehicles\n Weak vs Tanks, Aircraft
Buildable:
BuildPaletteOrder: 60
@@ -167,7 +163,6 @@ FTNK:
Cost: 800
Tooltip:
Name: Flame Tank
Icon: ftnkicnh
Description: Heavily armored flame-throwing vehicle.\n Strong vs Infantry, Buildings, Vehicles\n Weak vs Aircraft
Buildable:
BuildPaletteOrder: 50
@@ -201,7 +196,6 @@ BGGY:
Cost: 300
Tooltip:
Name: Nod Buggy
Icon: bggyicnh
Description: Fast scout & anti-infantry vehicle.\n Strong vs Infantry, Vehicles\n Weak vs Tanks, Aircraft
Buildable:
BuildPaletteOrder: 20
@@ -236,7 +230,6 @@ BIKE:
Cost: 500
Tooltip:
Name: Recon Bike
Icon: bikeicnh
Description: Fast scout vehicle, armed with \nrockets.\n Strong vs Vehicles, Aircraft\n Weak vs Infantry
Buildable:
BuildPaletteOrder: 30
@@ -274,7 +267,6 @@ JEEP:
Cost: 400
Tooltip:
Name: Hum-Vee
Icon: jeepicnh
Description: Fast scout & anti-infantry vehicle.\n Strong vs Infantry, Vehicles\n Weak vs Tanks, Aircraft
Buildable:
BuildPaletteOrder: 20
@@ -309,7 +301,6 @@ LTNK:
Cost: 600
Tooltip:
Name: Light Tank
Icon: ltnkicnh
Description: Fast, light tank.\n Strong vs Vehicles, Tanks\n Weak vs Infantry, Aircraft
Buildable:
BuildPaletteOrder: 40
@@ -348,7 +339,6 @@ MTNK:
Cost: 800
Tooltip:
Name: Med. Tank
Icon: mtnkicnh
Description: General-Purpose GDI Tank.\n Strong vs Tanks, Vehicles\n Weak vs Infantry, Aircraft
Buildable:
BuildPaletteOrder: 40
@@ -388,7 +378,6 @@ HTNK:
Cost: 1500
Tooltip:
Name: Mammoth Tank
Icon: htnkicnh
Description: Heavily armored GDI Tank.\n Strong vs Everything
Buildable:
BuildPaletteOrder: 60
@@ -440,7 +429,6 @@ MSAM:
Cost: 1200
Tooltip:
Name: MLRS
Icon: msamicnh
Description: Long range rocket artillery.\n Strong vs all ground units.
Buildable:
BuildPaletteOrder: 50
@@ -475,7 +463,6 @@ MLRS:
Cost: 600
Tooltip:
Name: Mobile S.A.M.
Icon: mlrsicnh
Description: Powerful anti-air unit.\nCannot attack ground units.
Buildable:
BuildPaletteOrder: 70
@@ -516,7 +503,6 @@ STNK:
Cost: 900
Tooltip:
Name: Stealth Tank
Icon: stnkicnh
Description: Long-range missile tank that can cloak.\nHas weak armor. Can be spotted by infantry.\n Strong vs Vehicles, Tanks, Aircraft\n Weak vs Infantry.
Buildable:
BuildPaletteOrder: 90
@@ -554,7 +540,6 @@ MHQ:
Cost: 1000
Tooltip:
Name: Mobile HQ
Icon: mhqicnh
Description: Base of operations
Health:
HP: 200

View File

@@ -2,6 +2,8 @@ c17:
idle:
Start: 0
Facings: 32
icon: c17iconh
Start: 0
tran:
idle:
@@ -24,6 +26,8 @@ tran:
Length: 4
unload:
Start: 35
icon: tranicnh
Start: 0
heli:
idle:
@@ -39,6 +43,9 @@ heli:
Start: 0
Length: 6
Facings: 8
icon: heliicnh
Start: 0
orca:
idle:
Start: 0
@@ -46,8 +53,12 @@ orca:
damaged-idle:
Start: 32
Facings: 32
icon: orcaicnh
Start: 0
a10:
idle:
Start: 0
Facings: 32
Facings: 32
icon: a10icnh
Start: 0

View File

@@ -34,4 +34,6 @@ boat:
wake-right: wake
Start: 0
Length: 6
Offset: -1,2
Offset: -1,2
icon: boaticnh
Start: 0

View File

@@ -31,6 +31,8 @@ steg:
die6:
Start: 176
Length: 22
icon: stegicnh
Start: 0
trex:
stand:
@@ -65,6 +67,8 @@ trex:
die6:
Start: 144
Length: 40
icon: trexicnh
Start: 0
tric:
stand:
@@ -99,6 +103,8 @@ tric:
die6:
Start: 176
Length: 20
icon: tricicnh
Start: 0
rapt:
stand:
@@ -132,4 +138,6 @@ rapt:
Length: 40
die6:
Start: 144
Length: 40
Length: 40
icon: rapticnh
Start: 0

View File

@@ -6,6 +6,9 @@ vice:
Start: 0
Length: 13
Facings: 8
icon: viceicnh
Start: 0
pvice:
idle:
Start: 0
@@ -14,6 +17,9 @@ pvice:
Start: 0
Length: 13
Facings: 8
icon: viceicnh
Start: 0
e1:
stand:
Start: 0
@@ -109,6 +115,8 @@ e1:
Start: 16
Length: 4
Tick: 1600
icon: e1icnh
Start: 0
e2:
stand:
@@ -196,6 +204,8 @@ e2:
Start: 16
Length: 4
Tick: 1600
icon: e2icnh
Start: 0
e3:
stand:
@@ -283,6 +293,8 @@ e3:
Start: 16
Length: 4
Tick: 1600
icon: e3icnh
Start: 0
e4:
stand:
@@ -374,6 +386,9 @@ e4:
Start: 0
Length: 13
Facings: 8
icon: e4icnh
Start: 0
e5:
stand:
Start: 0
@@ -464,6 +479,9 @@ e5:
Start: 0
Length: 13
Facings: 8
icon: e5icnh
Start: 0
e6:
stand:
Start: 0
@@ -542,6 +560,9 @@ e6:
Start: 16
Length: 4
Tick: 1600
icon: e6icnh
Start: 0
rmbo:
stand:
Start: 0
@@ -632,3 +653,5 @@ rmbo:
Start: 16
Length: 4
Tick: 1600
icon: rmboicnh
Start: 0

View File

@@ -734,6 +734,8 @@ miss:
Start: 0
Length: *
Tick: 80
icon: missicnh
Start: 0
miss.husk:
idle: miss

View File

@@ -296,4 +296,12 @@ poweroff:
offline:
Start: 0
Length: *
Tick: 160
Tick: 160
icon:
airstrike: bombicnh
Start: 0
ioncannon: ionicnh
Start: 0
abomb: atomicnh
Start: 0

View File

@@ -24,6 +24,8 @@ fact:
bib: bib2
Start: 0
Length: *
icon: facticnh
Start: 0
nuke:
idle:
@@ -44,6 +46,8 @@ nuke:
bib: bib3
Start: 0
Length: *
icon: nukeicnh
Start: 0
proc:
idle:
@@ -71,6 +75,8 @@ proc:
bib: bib2
Start: 0
Length: *
icon: procicnh
Start: 0
silo:
idle:
@@ -88,6 +94,8 @@ silo:
bib: bib3
Start: 0
Length: *
icon: siloicnh
Start: 0
hand:
idle:
@@ -103,6 +111,8 @@ hand:
bib: bib3
Start: 0
Length: *
icon: handicnh
Start: 0
pyle:
idle:
@@ -123,6 +133,8 @@ pyle:
bib: bib3
Start: 0
Length: *
icon: pyleicnh
Start: 0
weap:
idle:
@@ -148,6 +160,8 @@ weap:
bib: bib2
Start: 0
Length: *
icon: weapicnh
Start: 0
afld:
idle:
@@ -178,6 +192,8 @@ afld:
bib: bib1
Start: 0
Length: *
icon: afldicnh
Start: 0
hq:
idle:
@@ -197,6 +213,8 @@ hq:
bib: bib3
Start: 0
Length: *
icon: hqicnh
Start: 0
nuk2:
idle:
@@ -216,6 +234,8 @@ nuk2:
bib: bib3
Start: 0
Length: *
icon: nuk2icnh
Start: 0
hpad:
idle:
@@ -241,6 +261,8 @@ hpad:
Start: 0
Length: *
Tick: 80
icon: hpadicnh
Start: 0
fix:
idle:
@@ -263,6 +285,8 @@ fix:
Start: 0
Length: 14
Tick: 60
icon: fixicnh
Start: 0
eye:
idle:
@@ -282,6 +306,8 @@ eye:
bib: bib3
Start: 0
Length: *
icon: eyeicnh
Start: 0
tmpl:
idle:
@@ -303,6 +329,8 @@ tmpl:
bib: bib2
Start: 0
Length: *
icon: tmplicnh
Start: 0
obli:
idle:
@@ -321,6 +349,8 @@ obli:
Start: 0
Length: 13
Tick: 80
icon: obliicnh
Start: 0
brik:
idle:
@@ -335,6 +365,8 @@ brik:
critical-idle:
Start: 48
Length: 16
icon: brikicnh
Start: 0
sbag:
idle:
@@ -343,6 +375,8 @@ sbag:
damaged-idle:
Start: 16
Length: 16
icon: sbagicnh
Start: 0
cycl:
idle:
@@ -354,6 +388,8 @@ cycl:
critical-idle:
Start: 32
Length: 16
icon: cyclicnh
Start: 0
barb:
idle:
@@ -391,6 +427,8 @@ gun:
muzzle: gunfire2
Start: 0
Length: *
icon: gunicnh
Start: 0
sam:
closed-idle:
@@ -429,6 +467,9 @@ sam:
Start: 0
Length: 18
Facings: 8
icon: samicnh
Start: 0
gtwr:
idle:
Start: 0
@@ -444,6 +485,8 @@ gtwr:
Start: 0
Length: 6
Facings: 8
icon: gtwricnh
Start: 0
atwr:
idle:
@@ -459,4 +502,5 @@ atwr:
muzzle: gunfire2
Start: 0
Length: *
icon: atwricnh
Start: 0

View File

@@ -2,6 +2,8 @@ mcv:
idle:
Start: 0
Facings: 32
icon: mcvicnh
Start: 0
harv:
idle:
@@ -18,6 +20,8 @@ harv:
dock-loop: harvdump
Start: 7
Length: 1
icon: harvicnh
Start: 0
bggy:
idle:
@@ -30,6 +34,8 @@ bggy:
Start: 0
Length: 6
Facings: 8
icon: bggyicnh
Start: 0
mtnk:
idle:
@@ -41,6 +47,8 @@ mtnk:
muzzle: gunfire2
Start: 0
Length: *
icon: mtnkicnh
Start: 0
ltnk:
idle:
@@ -52,6 +60,8 @@ ltnk:
muzzle: gunfire2
Start: 0
Length: *
icon: ltnkicnh
Start: 0
htnk:
idle:
@@ -63,6 +73,8 @@ htnk:
muzzle: gunfire2
Start: 0
Length: *
icon: htnkicnh
Start: 0
jeep:
idle:
@@ -75,11 +87,15 @@ jeep:
Start: 0
Length: 6
Facings: 8
icon: jeepicnh
Start: 0
bike:
idle:
Start: 0
Facings: 32
icon: bikeicnh
Start: 0
ftnk:
idle:
@@ -89,6 +105,8 @@ ftnk:
Start: 0
Length: 13
Facings: 8
icon: ftnkicnh
Start: 0
mhq:
idle:
@@ -97,6 +115,8 @@ mhq:
spinner:
Start: 32
Length: 32
icon: mhqicnh
Start: 0
msam:
idle:
@@ -111,6 +131,8 @@ msam:
turret-3:
Start: 64
Facings: 32
icon: msamicnh
Start: 0
mlrs:
idle:
@@ -125,11 +147,15 @@ mlrs:
turret-3:
Start: 96
Facings: 32
icon: mlrsicnh
Start: 0
stnk:
idle:
Start: 0
Facings: 32
icon: stnkicnh
Start: 0
arty:
idle:
@@ -138,6 +164,8 @@ arty:
muzzle: gunfire2
Start: 0
Length: *
icon: artyicnh
Start: 0
apc:
idle:
@@ -155,4 +183,6 @@ apc:
Start: 32
Length: 3
unload:
Start: 32
Start: 32
icon: apcicnh
Start: 0

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
mods/d2k/bits/mouse.r8 Normal 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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
mods/d2k/bits/spice0.shp Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,203 @@
Background@ASSETBROWSER_BG:
Logic:AssetBrowserLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:700
Height:410
Children:
Label@ASSETBROWSER_TITLE:
X:0
Y:20
Width:PARENT_RIGHT
Height:25
Text:Game Asset Viewer & Converter
Align:Center
Font:Bold
DropDownButton@SOURCE_SELECTOR:
X:40
Y:45
Width:160
Height:25
Font:Bold
Text:Folders
ScrollPanel@ASSET_LIST:
X:40
Y:80
Width:160
Height:190
Children:
ScrollItem@ASSET_TEMPLATE:
Width:PARENT_RIGHT-27
Height:25
X:2
Y:0
Visible:false
Children:
Label@TITLE:
X:10
Width:PARENT_RIGHT-20
Height:25
TextField@FILENAME_INPUT:
X:40
Y:280
Width:140
Height:25
Button@LOAD_BUTTON:
X:40
Y:310
Width:140
Height:25
Text:Load
Font:Bold
Key:return
Label@PREVIEW_TITLE:
X:320
Y:45
Width:PARENT_RIGHT
Height:25
Text:Preview
Font:Bold
Background@SPRITE_BG:
X:220
Y:80
Width:250
Height:250
Background:dialog4
Children:
ShpImage@SPRITE:
X:4
Y:4
Width:246
Height:246
Image:DATA.R8
Palette:colorpicker
Label@ACTIONS_TITLE:
X:PARENT_RIGHT - 150
Y:45
Width:PARENT_RIGHT
Height:25
Text:Actions
Font:Bold
Button@EXPORT_BUTTON:
X:PARENT_RIGHT - 200
Y:80
Width:160
Height:25
Text:Selected to PNG
Font:Bold
Button@EXTRACT_BUTTON:
X:PARENT_RIGHT - 200
Y:115
Width:160
Height:25
Text:Extract all to PNG
Font:Bold
TextField@IMAGE_FILENAME_INPUT:
X:PARENT_RIGHT - 200
Y:PARENT_BOTTOM - 235
Width:100
Height:25
Text:pixelart.png
TextField@IMAGE_SIZE_INPUT:
X:PARENT_RIGHT - 90
Y:PARENT_BOTTOM - 235
Width:50
Height:25
Text:width
Button@IMPORT_BUTTON:
X:PARENT_RIGHT - 200
Y:PARENT_BOTTOM - 200
Width:160
Height:25
Text:Import from PNG
Font:Bold
Button@CLOSE_BUTTON:
X:PARENT_RIGHT - 200
Y:PARENT_BOTTOM - 115
Width:160
Height:25
Text:Close
Font:Bold
Key:escape
Container@FRAME_SELECTOR:
X:45
Y:360
Children:
Button@BUTTON_PREV:
X:0
Y:0
Width:25
Height:25
Children:
Image@IMAGE_PREV:
X:0
Y:0
Width:25
Height:25
ImageCollection:music
ImageName:prev
Button@BUTTON_PLAY:
X:35
Y:0
Width:25
Height:25
Children:
Image@IMAGE_PLAY:
X:0
Y:0
Width:25
Height:25
ImageCollection:music
ImageName:play
Button@BUTTON_PAUSE:
Visible: no
X:35
Y:0
Width:25
Height:25
Children:
Image@IMAGE_PAUSE:
X:0
Y:0
Width:25
Height:25
ImageCollection:music
ImageName:pause
Button@BUTTON_STOP:
X:70
Y:0
Width:25
Height:25
Children:
Image@IMAGE_STOP:
X:0
Y:0
Width:25
Height:25
ImageCollection:music
ImageName:stop
Button@BUTTON_NEXT:
X:105
Y:0
Width:25
Height:25
Children:
Image@IMAGE_NEXT:
X:0
Y:0
Width:25
Height:25
ImageCollection:music
ImageName:next
Slider@FRAME_SLIDER:
X:160
Y:0
Width:410
Height:20
MinimumValue: 0
Label@FRAME_COUNT:
X:585
Y:0
Width:25
Height:25
Font:Bold

View File

@@ -32,8 +32,8 @@ Background@COLOR_CHOOSER:
ShpImage@FACT:
X:160
Y:8
Image:carryall
Frame:13
Image:DATA.R8
Frame:1936
Palette:colorpicker
Button@RANDOM_BUTTON:
Key:tab

View File

@@ -3,7 +3,7 @@ Background@INSTALL_PANEL:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:630
Height:350
Height:200
Children:
Label@TITLE:
X:0
@@ -13,51 +13,23 @@ Background@INSTALL_PANEL:
Text:Content files missing
Align:Center
Font:Bold
Label@DESC1:
Label@WELCOME:
X:0
Y:50
Width:PARENT_RIGHT
Height:25
Text:This is the work in progress Dune 2000 mod.
Text:This is the work in progress Dune 2000 mod. It requires the original game files.
Align:Center
Label@DESC2:
Label@DOWNLOAD:
X:0
Y:90
Width:PARENT_RIGHT
Height:25
Text:It requires the original Dune 2000 assets whose fileformats differ from other C&C games.
Text:The easiest way is to simply click "Download" to fetch a minimal subset to get started.
Align:Center
Label@DESC3:
Label@VIA_CD:
X:0
Y:130
Width:PARENT_RIGHT
Height:25
Text:The easiest way is to simply click download to fetch already prepared files and restart.
Align:Center
Label@DESC4:
X:0
Y:170
Width:PARENT_RIGHT
Height:25
Text:You can also copy "Dune 2000/Data/GAMESFX" folder and "Dune 2000/DATA/*.R8" files
Align:Center
Label@DESC5:
X:0
Y:190
Width:PARENT_RIGHT
Height:25
Text: from your local Dune 2000 1.03 installation to ~/.openra/Content/d2k/ (Linux)
Align:Center
Label@DESC6:
X:0
Y:210
Width:PARENT_RIGHT
Height:25
Text: or "My Documents/OpenRA/Content/d2k/" (Windows) and click "Extract Data".
Align:Center
Label@DESC7:
X:0
Y:250
Y:110
Width:PARENT_RIGHT
Height:25
Text: Put in your Dune 2000 CD and click "From CD" to extract game assets including music.
@@ -76,13 +48,6 @@ Background@INSTALL_PANEL:
Height:25
Text:From CD
Font:Bold
Button@EXTRACT_BUTTON:
X:260
Y:PARENT_BOTTOM - 45
Width:110
Height:25
Text:Extract Data
Font:Bold
Button@MODS_BUTTON:
X:PARENT_RIGHT - 250
Y:PARENT_BOTTOM - 45
@@ -205,69 +170,4 @@ Background@INSTALL_FROMCD_PANEL:
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
Key:escape

View File

@@ -153,13 +153,15 @@ Container@PLAYER_WIDGETS:
BuildPalette@INGAME_BUILD_PALETTE:
X:WINDOW_RIGHT - 250
Y:280
Width:238 # TODO: why is this ignored?
Width:238
Height:500
ReadyText: READY
HoldText: ON HOLD
RequiresText: Requires
IconWidth: 60
IconHeight: 48
Columns: 3
Rows: 4
Background@DIPLOMACY_BG:
Logic:DiplomacyLogic
X:(WINDOW_RIGHT - WIDTH)/2

View File

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

Binary file not shown.

Binary file not shown.

View File

@@ -1,6 +1,6 @@
Metadata:
Title: Dune 2000 (beta)
Description: early version of the Dune 2000 mod
Title: Dune 2000
Description: OpenRA Reimagining of the classic game
Version: {DEV_VERSION}
Author: The OpenRA Developers
@@ -10,16 +10,11 @@ Folders:
./mods/d2k/bits
./mods/d2k/uibits
./mods/ra/uibits
~^/Content/ra
~^/Content/d2k
~^/Content/d2k/GAMESFX
~^/Content/d2k/Music
~^/Content/d2k/Tilesets
~^/Content/d2k/SHPs
Packages:
~main.mix
conquer.mix
SOUND.RS
Rules:
@@ -75,12 +70,10 @@ ChromeLayout:
mods/ra/chrome/cheats.yaml
mods/ra/chrome/musicplayer.yaml
mods/d2k/chrome/tooltips.yaml
mods/ra/chrome/assetbrowser.yaml
mods/d2k/chrome/assetbrowser.yaml
mods/ra/chrome/convertassets.yaml
Weapons:
mods/d2k/weapons/defaults.yaml
mods/d2k/weapons/explosions.yaml
mods/d2k/weapons.yaml
Voices:
@@ -101,8 +94,8 @@ Movies:
LoadScreen: D2kLoadScreen
InstallerMenuWidget: INSTALL_PANEL
TestFile: SOUND.RS
PackageURL: http://open-ra.org/get-dependency.php?file=d2k-complete-packages
TestFile: DATA.R8
PackageURL: http://open-ra.org/get-dependency.php?file=d2k-103-packages
ServerTraits:
LobbyCommands

View File

@@ -5,7 +5,6 @@
Tooltip:
Name: Carryall
Description: Fast drop ship.\n Unarmed
Icon: carryallicon
Health:
HP: 250
Armor:
@@ -17,7 +16,7 @@
ROT: 4
Speed: 30
LandableTerrainTypes: Sand, Rock, Transition, Spice, Dune
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
RearmBuildings: starporta,starporto,starporth
LandAltitude: 800
RenderUnit:
@@ -42,7 +41,7 @@ FRIGATE:
Plane:
ROT: 5
Speed: 50
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
RearmBuildings: starporta,starporto,starporth
Health:
HP: 500
@@ -85,7 +84,7 @@ ORNI:
InitialFacing: 20
ROT: 6
Speed: 40
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
RearmBuildings: starporta,starporto,starporth
RenderUnit:
WithShadow:
@@ -108,7 +107,7 @@ ORNI.bomber:
Plane:
ROT: 5
Speed: 50
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
RearmBuildings: starporta,starporto,starporth
LimitedAmmo:
Ammo: 5
@@ -137,7 +136,7 @@ CARRYALL.infantry:
Plane:
ROT: 4
Speed: 40
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
RearmBuildings: starporta,starporto,starporth
RenderUnit:
Image: carryall
@@ -169,7 +168,7 @@ CARRYALL.Husk:
Helicopter:
ROT: 4
Speed: 30
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
RearmBuildings: starporta,starporto,starporth
RenderUnit:
Image: carryall
@@ -182,7 +181,7 @@ ORNI.Husk:
Helicopter:
ROT: 6
Speed: 40
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
RearmBuildings: starporta,starporto,starporth
RenderUnit:
Image: orni
@@ -195,7 +194,7 @@ ORNI.bomber.Husk:
Plane:
ROT: 5
Speed: 50
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
RearmBuildings: starporta,starporto,starporth
RenderUnit:
Image: orni
@@ -208,7 +207,7 @@ CARRYALL.infantry.Husk:
Plane:
ROT: 4
Speed: 40
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
RearmBuildings: starporta,starporto,starporth
RenderUnit:
Image: carryall
@@ -221,7 +220,7 @@ BADR.Husk:
Plane:
ROT: 4
Speed: 40
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
RearmBuildings: starporta,starporto,starporth
RenderUnit:
Image: carryall

View File

@@ -1,15 +1,21 @@
CONYARDA:
Inherits: ^CONYARD
Transforms:
IntoActor: mcva
Offset:1,1
Facing: 270
PWRA:
Inherits: ^POWER
Buildable:
Owner: atreides
GUNTOWERA:
Inherits: ^GUNTOWER
Buildable:
Owner: atreides
ROCKETTOWERA:
Inherits: ^ROCKETTOWER
Buildable:
Owner: atreides
REFA:
Inherits: ^REFINERY
Buildable:
@@ -22,6 +28,15 @@ BARRA:
Buildable:
Owner: atreides
REPAIRA:
Inherits: ^REPAIR
Buildable:
Owner: atreides
RESEARCHA:
Inherits: ^RESEARCH
Buildable:
Owner: atreides
HIGHTECHA:
Inherits: ^HIGHTECH
@@ -33,7 +48,7 @@ PALACEA:
Buildable:
Owner: atreides
AirstrikePower:
Image: orniicon
Icon: ornistrike
Description: Air Strike
ChargeTime: 180
LongDesc: Ornithopter drops a load of parachuted\nbombs on your target
@@ -92,21 +107,6 @@ MCVA.starport:
Valued:
Cost: 2500
TRIKEA:
Inherits: ^TRIKE
Buildable:
Owner: atreides, harkonnen
RenderUnit:
Image: TRIKE
TRIKEA.starport:
Inherits: TRIKEA
Buildable:
Owner: atreides, harkonnen, ordos
Queue: Starport
Valued:
Cost: 315
CARRYALLA:
Inherits: ^CARRYALL
RenderUnit:
@@ -119,8 +119,6 @@ CARRYALLA.starport:
COMBATA:
Inherits: ^COMBAT
Tooltip:
Icon: combataicon
Buildable:
Owner: atreides
RevealsShroud:
@@ -141,8 +139,6 @@ COMBATA:
COMBATA.Husk:
Inherits: ^COMBAT.Husk
Tooltip:
Icon: combataicon
RenderUnit:
Image: COMBATA
@@ -166,7 +162,6 @@ SONICTANK:
Tooltip:
Name: Sonic Tank
Description: Fires sonic shocks\n Strong vs Infantry, Vehicles\n Weak vs Artillery, Aircraft
Icon: sonictankicon
Selectable:
Bounds: 30,30
Health:
@@ -193,8 +188,6 @@ SONICTANK:
SONICTANK.Husk:
Inherits: ^Husk
Tooltip:
Icon: sonictankicon
RenderUnit:
Image: SONICTANK

View File

@@ -28,10 +28,11 @@
Types:Vehicle
GivesBounty:
Repairable:
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
DebugMuzzlePositions:
Guard:
Guardable:
RenderUnit:
BodyOrientation:
UpdatesPlayerStatistics:
@@ -65,10 +66,11 @@
Types:Tank
GivesBounty:
Repairable:
RepairBuildings: repair
RepairBuildings: repaira,repairo,repairh
DebugMuzzlePositions:
Guard:
Guardable:
RenderUnit:
BodyOrientation:
UpdatesPlayerStatistics:
@@ -234,3 +236,4 @@
Range: 3
BodyOrientation:
UpdatesPlayerStatistics:
WithCrumbleOverlay:

View File

@@ -1,15 +1,21 @@
CONYARDH:
Inherits: ^CONYARD
Transforms:
IntoActor: mcvh
Offset:1,1
Facing: 270
PWRH:
Inherits: ^POWER
Buildable:
Owner: harkonnen
GUNTOWERH:
Inherits: ^GUNTOWER
Buildable:
Owner: harkonnen
ROCKETTOWERH:
Inherits: ^ROCKETTOWER
Buildable:
Owner: harkonnen
REFH:
Inherits: ^REFINERY
Buildable:
@@ -23,6 +29,16 @@ BARRH:
Owner: harkonnen
-RepairsUnits:
REPAIRH:
Inherits: ^REPAIR
Buildable:
Owner: harkonnen
RESEARCHH:
Inherits: ^RESEARCH
Buildable:
Owner: harkonnen
SILOH:
Inherits: ^SILO
Buildable:
@@ -64,7 +80,7 @@ PALACEH:
Tooltip:
Description: Provides elite infantry\n Special Ability: Death Hand Missile
NukePower:
Image: deathhandicon
Icon: deathhand
ChargeTime: 300
Description: Death Hand
LongDesc: Launches a nuclear missile at a target location
@@ -97,38 +113,6 @@ MCVH.starport:
Valued:
Cost: 2500
#TRIKEH:
# Inherits: ^TRIKE
# Buildable:
# Owner: harkonnen
# Valued:
# Cost: 250
# Tooltip:
# Name: Scout Quad
# Description: Heavy Scout\n Strong vs Infantry
# Icon: quadicon
# Health:
# HP: 125
# Mobile:
# ROT: 9
# Speed: 11
# Armament:
# Weapon: M60mg
# LocalOffset: 43,0,128
# AttackFrontal:
# RenderUnit:
# Image: QUAD
#TRIKEH.starport:
# Inherits: ^TRIKE
# Buildable:
# Owner: harkonnen
# Queue: Starport
# Valued:
# Cost: 149
# RenderUnit:
# Image: TRIKE
CARRYALLH:
Inherits: ^CARRYALL
RenderUnit:
@@ -139,16 +123,8 @@ CARRYALLH.starport:
Valued:
Cost: 1500
QUADH:
Inherits: QUAD
Buildable:
-Prerequisites:
Owner: harkonnen
COMBATH:
Inherits: ^COMBAT
Tooltip:
Icon: combathicon
Buildable:
Owner: harkonnen
Mobile:
@@ -166,8 +142,6 @@ COMBATH:
COMBATH.Husk:
Inherits: ^COMBAT.Husk
Tooltip:
Icon: combathicon
RenderUnit:
Image: COMBATH
@@ -183,7 +157,7 @@ DEVAST:
Buildable:
Queue: Armor
BuildPaletteOrder: 100
Prerequisites: Ix
Prerequisites: Research
Owner: harkonnen
Hotkey: d
Valued:
@@ -191,7 +165,6 @@ DEVAST:
Tooltip:
Name: Devastator
Description: Super Heavy Tank\n Strong vs Tanks\n Weak vs Artillery, Aircraft
Icon: devasticon
Health:
HP: 650
Armor:
@@ -220,8 +193,6 @@ DEVAST.Husk:
Inherits: ^Husk
Health:
HP: 125
Tooltip:
Icon: devasticon
RenderUnit:
Image: DEVAST

View File

@@ -91,7 +91,6 @@ MEDIC:
Tooltip:
Name: Medic
Description: Heals nearby infantry\n Strong vs Nothing\n Weak vs Everything
Icon: thumpericon
Selectable:
Bounds: 12,17,0,0
Voice: EngineerVoice
@@ -108,59 +107,4 @@ MEDIC:
PipType: Blue
-AutoTarget:
AttackMove:
JustMove: true
RenderInfantry:
Image: THUMPER
#THUMPER:
# Inherits: ^Infantry
# Buildable:
# Queue: Infantry
# BuildPaletteOrder: 50
# Owner: atreides,harkonnen,ordos
# Valued:
# Cost: 400
# Tooltip:
# Name: Thumper
# Description: Attracts sandsworm through vibrations\n Strong vs Nothing\n Weak vs Everything
# Selectable:
# Bounds: 12,17,0,0
# Health:
# HP: 25
# Mobile:
# Speed: 4
# Passenger:
# -AutoTarget:
# AttackMove:
# JustMove: true
# Transforms:
# IntoActor: thumping
# Offset:1,1
# Facing: 1
#
#THUMPING:
# Inherits: ^Building
# Building:
# Power: 0
# Footprint: x
# Dimensions: 1,1
# TerrainTypes: Sand, Dune
# Health:
# HP: 25
# Armor:
# Type: None
# RevealsShroud:
# Range: 5
# Valued:
# Cost: 400
# Tooltip:
# Name: Thumper
# -Capturable:
# -CapturableBar:
# -Sellable:
# -GivesBuildableArea:
# FreeActor:
# Actor: SANDWORM
# SpawnOffset: 1,2
# Facing: 1
JustMove: true

View File

@@ -1,15 +1,21 @@
CONYARDO:
Inherits: ^CONYARD
Transforms:
IntoActor: mcvo
Offset:1,1
Facing: 270
PWRO:
Inherits: ^POWER
Buildable:
Owner: ordos
GUNTOWERO:
Inherits: ^GUNTOWER
Buildable:
Owner: ordos
ROCKETTOWERO:
Inherits: ^ROCKETTOWER
Buildable:
Owner: ordos
REFO:
Inherits: ^REFINERY
Buildable:
@@ -22,6 +28,16 @@ BARRO:
Buildable:
Owner: ordos
REPAIRO:
Inherits: ^REPAIR
Buildable:
Owner: ordos
RESEARCHO:
Inherits: ^RESEARCH
Buildable:
Owner: ordos
SILOO:
Inherits: ^SILO
Buildable:
@@ -61,7 +77,7 @@ PALACEO:
Buildable:
Owner: ordos
AirstrikePower:
Image: orniicon
Icon: ornistrike
Description: Air Strike
ChargeTime: 180
LongDesc: Ornithopter drops a load of parachuted\nbombs on your target
@@ -93,8 +109,6 @@ MCVO.starport:
COMBATO:
Inherits: ^COMBAT
Tooltip:
Icon: combatoicon
Buildable:
Owner: ordos
RevealsShroud:
@@ -113,8 +127,6 @@ COMBATO:
COMBATO.Husk:
Inherits: ^COMBAT.Husk
Tooltip:
Icon: combatoicon
RenderUnit:
Image: COMBATO
@@ -125,31 +137,44 @@ COMBATO.starport:
Valued:
Cost: 875
TRIKEO:
Inherits: ^TRIKE
RAIDER:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
BuildPaletteOrder: 10
Hotkey: w
Owner: ordos
Valued:
Cost: 300
Tooltip:
Name: Raider Trike
Description: Improved Scout\n Strong vs Infantry, Light Vehicles
Icon: raidericon
Selectable:
Bounds: 24,24
Health:
HP: 110
Armor:
Type: Light
Mobile:
ROT: 10
Speed: 14
RevealsShroud:
Range: 7
RenderUnit:
Image: RAIDER
WithMuzzleFlash:
Armament:
Weapon: HMGo
LocalOffset: 256,0,128
AttackFrontal:
AutoTarget:
Explodes:
Weapon: UnitExplodeTiny
EmptyWeapon: UnitExplodeTiny
STEALTHTRIKE:
Inherits: ^TRIKE
STEALTHRAIDER:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
Prerequisites: Hitech
Owner: ordos
BuildPaletteOrder: 30
@@ -158,18 +183,26 @@ STEALTHTRIKE:
Tooltip:
Name: Stealth Raider Trike
Description: Invisible Raider Trike\n Strong vs Infantry, Light Vehicles
Icon: raidersicon
Selectable:
Bounds: 24,24
Health:
HP: 110
Armor:
Type: Light
Mobile:
ROT: 10
Speed: 14
RevealsShroud:
Range: 7
RenderUnit:
Image: RAIDER
WithMuzzleFlash:
Armament:
Weapon: HMGo
LocalOffset: 256,0,128
AttackFrontal:
Explodes:
Weapon: UnitExplodeTiny
EmptyWeapon: UnitExplodeTiny
Cloak:
InitialDelay: 45
CloakDelay: 90
@@ -178,16 +211,6 @@ STEALTHTRIKE:
AutoTarget:
InitialStance: HoldFire
#TRIKEO.starport:
# Inherits: ^TRIKE
# Buildable:
# Queue: Starport
# Owner: ordos
# RenderUnit:
# Image: TRIKE
# Valued:
# Cost: 149
CARRYALLO:
Inherits: ^CARRYALL
RenderUnit:
@@ -205,7 +228,6 @@ DEVIATORTANK:
Tooltip:
Name: Deviator
Description: Causes no actual damage\nFires a warhead which changes allegiances\n but does not effect buildings or tanks
Icon: deviatortankicon
Buildable:
Queue: Armor
BuildPaletteOrder: 50
@@ -238,8 +260,6 @@ DEVIATORTANK:
DEVIATORTANK.Husk:
Inherits: ^Husk
Tooltip:
Icon: deviatortankicon
RenderUnit:
Image: DEVIATORTANK

View File

@@ -61,6 +61,8 @@
Range: 4
ProvidesCustomPrerequisite:
Prerequisite: Power
WithIdleOverlay@ZAPS:
Sequence: idle-zaps
^BARRACKS:
Inherits: ^Building
@@ -215,6 +217,8 @@
ProductionBar:
ProvidesCustomPrerequisite:
Prerequisite: Light
WithIdleOverlay@WELDING:
Sequence: idle-welding
^HEAVY:
Inherits: ^Building
@@ -253,11 +257,13 @@
ProductionBar:
ProvidesCustomPrerequisite:
Prerequisite: Heavy
WithIdleOverlay@WELDING:
Sequence: idle-welding
^RADAR:
Inherits: ^Building
RequiresPower:
CanPowerDown:
Inherits: ^Building
Buildable:
Prerequisites: Barracks
Queue: Building
@@ -287,6 +293,8 @@
RenderDetectionCircle:
ProvidesCustomPrerequisite:
Prerequisite: Outpost
WithIdleOverlay@DISH:
Sequence: idle-dish
^STARPORT:
Inherits: ^Building
@@ -330,12 +338,15 @@
Prerequisite: Starport
WALL:
Inherits: ^WALL
Buildable:
Owner:
^WALL:
Buildable:
Queue: Building
Prerequisites: Barracks
Owner: atreides, harkonnen, ordos
BuildPaletteOrder: 60
#Hotkey: g
SoundOnDamageTransition:
DamagedSound:
DestroyedSound: EXPLSML4.WAV
@@ -346,7 +357,6 @@ WALL:
Tooltip:
Name: Concrete Wall
Description: Stop units and blocks enemy fire.
Icon: wallaicon
AppearsOnRadar:
Building:
BuildSounds: CHUNG.WAV
@@ -361,15 +371,14 @@ WALL:
CrushClasses: Concretewall
LineBuild:
Range: 8
#SelectionDecorations:
#Selectable:
# Priority: 1
# SelectionDecorations:
# Selectable:
# Priority: 1
TargetableBuilding:
TargetTypes: Ground, C4
RenderBuildingWall:
HasMakeAnimation: false
Image: walla
#GivesExperience:
EditorAppearance:
RelativeToTopLeft: yes
AutoTargetIgnore:
@@ -379,12 +388,11 @@ WALL:
Guardable:
BodyOrientation:
GUNTOWER:
^GUNTOWER:
Inherits: ^Building
Buildable:
Queue: Building
Prerequisites: Barracks
Owner: atreides, harkonnen, ordos
BuildPaletteOrder: 90
Hotkey: g
Valued:
@@ -392,7 +400,6 @@ GUNTOWER:
Tooltip:
Name: Gun Tower
Description: Defensive structure\n Strong vs Tanks\n Weak vs Infantry, Aircraft
Icon: guntoweraicon
Building:
Power: -20
Adjacent: 4
@@ -411,7 +418,6 @@ GUNTOWER:
RenderRangeCircle:
RenderBuilding:
HasMakeAnimation: false
Image: guntowera
WithTurret:
Turreted:
ROT: 6
@@ -421,26 +427,16 @@ GUNTOWER:
LocalOffset: 469,0,299
AttackTurreted:
AutoTarget:
LeavesHusk:
HuskActor: Guntower.Husk
RenderDetectionCircle:
DetectCloaked:
Range: 5
-WithCrumbleOverlay:
GUNTOWER.Husk:
Inherits: ^TowerHusk
Tooltip:
Name: Destroyed Tower
Icon: guntoweraicon
RenderUnit:
Image: guntowera
ROCKETTOWER:
^ROCKETTOWER:
Inherits: ^Building
Buildable:
Queue: Building
Prerequisites: Outpost
Owner: atreides, harkonnen, ordos
BuildPaletteOrder: 120
Hotkey: m
Valued:
@@ -448,7 +444,6 @@ ROCKETTOWER:
Tooltip:
Name: Rocket Tower
Description: Defensive structure\n Strong vs Infantry, Aircraft\n Weak vs Tanks\n\n Requires power to operate
Icon: rockettoweraicon
Building:
Power: -30
Adjacent: 4
@@ -467,7 +462,6 @@ ROCKETTOWER:
RenderRangeCircle:
RenderBuilding:
HasMakeAnimation: false
Image: rockettowera
WithTurret:
Armament:
Weapon: TowerMissile
@@ -479,26 +473,16 @@ ROCKETTOWER:
AutoTarget:
RequiresPower:
CanPowerDown:
LeavesHusk:
HuskActor: Rockettower.Husk
RenderDetectionCircle:
DetectCloaked:
Range: 6
-WithCrumbleOverlay:
ROCKETTOWER.Husk:
Inherits: ^TowerHusk
Tooltip:
Name: Destroyed Tower
Icon: rockettoweraicon
RenderUnit:
Image: rockettowera
REPAIR:
^REPAIR:
Inherits: ^Building
Buildable:
Queue: Building
Prerequisites: Heavy
Owner: atreides, harkonnen, ordos
BuildPaletteOrder: 130
Hotkey: e
Valued:
@@ -506,7 +490,6 @@ REPAIR:
Tooltip:
Name: Repair Pad
Description: Repairs vehicles\n Allows construction of MCVs
Icon: repairaicon
Building:
Power: -10
Footprint: =x= =x= ===
@@ -523,6 +506,8 @@ REPAIR:
ValuePercentage: 50
RallyPoint:
RallyPoint: 1,3
ProvidesCustomPrerequisite:
Prerequisite: Repair
^HIGHTECH:
Inherits: ^Building
@@ -551,13 +536,14 @@ REPAIR:
Range: 4
ProvidesCustomPrerequisite:
Prerequisite: Hitech
WithIdleOverlay@WELDING:
Sequence: idle-welding
RESEARCH:
^RESEARCH:
Inherits: ^Building
Buildable:
Queue: Building
Prerequisites: Hitech
Owner: atreides, harkonnen, ordos
BuildPaletteOrder: 140
Hotkey: v
Selectable:
@@ -567,9 +553,8 @@ RESEARCH:
Tooltip:
Name: IX Research Center
Description: Unlocks experimental tanks\n Special Ability: Carryall Combat Drop
Icon: researchaicon
ParatroopersPower:
Image: carryallicon
Icon: paratroopers
UnitType: carryall.infantry
FlareTime: 0
ChargeTime: 180
@@ -581,8 +566,8 @@ RESEARCH:
FlareType:
Building:
Power: -40
Footprint: xxx xxx
Dimensions: 3,2
Footprint: _x_ xxx xxx
Dimensions: 3,3
Bib:
Health:
HP: 1000
@@ -591,12 +576,14 @@ RESEARCH:
RevealsShroud:
Range: 4
ProvidesCustomPrerequisite:
Prerequisite: Ix
Prerequisite: Research
WithIdleOverlay@LIGHTS:
Sequence: idle-lights
^PALACE:
Inherits: ^Building
Buildable:
Prerequisites: Ix
Prerequisites: Research
Queue: Building
BuildPaletteOrder: 150
Hotkey: p
@@ -609,8 +596,8 @@ RESEARCH:
Description: Unlocks elite infantry\n Special Ability: Ornithopter Strike
Building:
Power: -50
Footprint: _x_ xxx =xx
Dimensions: 3,3
Footprint: xxx xxx
Dimensions: 3,2
Bib:
Health:
HP: 2000
@@ -622,7 +609,7 @@ RESEARCH:
DetectCloaked:
Range: 4
ProvidesCustomPrerequisite:
Prerequisite: TPal
Prerequisite: Palace
SIETCH:
Inherits: ^Building
@@ -685,6 +672,10 @@ HITECH:
Tooltip:
Name: High-Tech Facility
IX:
REPAIR:
Tooltip:
Name: IX Research Center
Name: Repair Pad
RESEARCH:
Tooltip:
Name: Ix Research Center

View File

@@ -117,9 +117,7 @@ Player:
fremen: 0.5%
sardaukar: 1.5%
harvester: 0.1%
trikea.starport: 5%
#trikeh.starport: 5%
#trikeo.starport: 5%
trike.starport: 5%
quad.starport: 7.5%
siegetank.starport: 5%
missiletank.starport: 7.5%
@@ -129,9 +127,7 @@ Player:
sonictank: 10%
devast: 10%
deviatortank: 7.5%
trikea: 10%
#trikeh: 10%
trikeo: 10%
trike: 10%
quad: 15%
siegetank: 10%
missiletank: 15%
@@ -143,6 +139,14 @@ Player:
Name:Vidious
UnitQueues: Infantry, Vehicle, Armor, Starport
RallypointTestBuilding: conyarda
BuildingCommonNames:
ConstructionYard: conyarda,conyardh,conyardo
Refinery: refa,refh,refo
Power: pwra,pwrh,pwro
VehiclesFactory: lighta,lighth,lighto,heavya,heavyh,heavyo
Silo: siloa, siloh, siloo
UnitsCommonNames:
Mcv: mcva,mcvh,mcvo
BuildingFractions:
refa: 20.1%
refh: 20.1%
@@ -180,9 +184,7 @@ Player:
fremen: 0.25%
sardaukar: 1%
harvester: 0.1%
trikea.starport: 7.5%
#trikeh.starport: 7.5%
#trikeo.starport: 7.5%
trike.starport: 7.5%
quad.starport: 12.5%
siegetank.starport: 5%
missiletank.starport: 7.5%
@@ -192,9 +194,8 @@ Player:
sonictank: 10%
devast: 10%
deviatortank: 7.5%
trikea: 15%
#trikeh: 15%
trikeo: 15%
trike: 15%
raider: 15%
quad: 25%
siegetank: 10%
missiletank: 15%
@@ -206,6 +207,14 @@ Player:
Name:Gladius
UnitQueues: Infantry, Vehicle, Armor, Starport
RallypointTestBuilding: conyarda
BuildingCommonNames:
ConstructionYard: conyarda,conyardh,conyardo
Refinery: refa,refh,refo
Power: pwra,pwrh,pwro
VehiclesFactory: lighta,lighth,lighto,heavya,heavyh,heavyo
Silo: siloa, siloh, siloo
UnitsCommonNames:
Mcv: mcva,mcvh,mcvo
BuildingFractions:
refa: 20.1%
refh: 20.1%
@@ -241,9 +250,7 @@ Player:
fremen: 1%
sardaukar: 3%
harvester: 0.1%
trikea.starport: 5%
#trikeh.starport: 5%
#trikeo.starport: 5%
trike.starport: 5%
quad.starport: 7.5%
siegetank.starport: 5%
missiletank.starport: 7.5%
@@ -253,9 +260,8 @@ Player:
sonictank: 10%
devast: 10%
deviatortank: 7.5%
trikea: 10%
#trikeh: 10%
trikeo: 10%
trike: 10%
raider: 10%
quad: 15%
siegetank: 10%
missiletank: 15%
@@ -276,7 +282,7 @@ World:
LoadWidgetAtGameStart:
Widget: INGAME_ROOT
ScreenShaker:
NukePaletteEffect:
# NukePaletteEffect: # TODO: does not work well with additive blending (idle overlays still use player palette effects)
BuildingInfluence:
ChooseBuildTabOnSelect:
CrateSpawner:
@@ -299,8 +305,9 @@ World:
AllowModifiers: false
PaletteFromFile@effect:
Name: effect
Filename: temperat.pal
Filename: d2k.pal
ShadowIndex: 4
AllowModifiers: false
PaletteFromFile@colorpicker:
Name: colorpicker
Filename: d2k.pal
@@ -413,12 +420,12 @@ CRATE:
Amount: 1500
SelectionShares: 25
UseCashTick: yes
GiveUnitCrateAction@TrikeA:
GiveUnitCrateAction@Trike:
SelectionShares: 20
Unit: trikea
GiveUnitCrateAction@TrikeO:
Unit: trike
GiveUnitCrateAction@Raider:
SelectionShares: 15
Unit: trikeo
Unit: raider
GiveUnitCrateAction@Quad:
SelectionShares: 40
Unit: quad
@@ -437,9 +444,9 @@ CRATE:
GiveUnitCrateAction@MissileTank:
SelectionShares: 10
Unit: missiletank
GiveUnitCrateAction@StealthTrike:
GiveUnitCrateAction@StealthRaider:
SelectionShares: 7
Unit: stealthtrike
Unit: stealthraider
GiveUnitCrateAction@Fremen:
SelectionShares: 5
Unit: fremen

View File

@@ -1,7 +1,7 @@
^MCV:
Inherits: ^Vehicle
Buildable:
Prerequisites: repair
Prerequisites: Repair
Queue: Armor
BuildPaletteOrder: 110
Hotkey: m
@@ -10,7 +10,6 @@
Tooltip:
Name: Mobile Construction Vehicle
Description: Deploys into another Construction Yard\n Unarmed
Icon: mcvicon
Selectable:
Priority: 3
Bounds: 42,42
@@ -40,7 +39,6 @@ MCV.Husk:
HP: 175
Tooltip:
Name: Destroyed Mobile Construction Vehicle
Icon: missiletankicon
RenderUnit:
Image: DMCV
@@ -57,7 +55,6 @@ HARVESTER:
Tooltip:
Name: Spice Harvester
Description: Collects Spice for processing\n Unarmed
Icon: harvestericon
Selectable:
Priority: 7
Bounds: 42,42
@@ -96,7 +93,6 @@ HARVESTER.Husk:
HP: 150
Tooltip:
Name: Destroyed Spice Harvester
Icon: harvestericon
RenderUnit:
Image: HARVESTER
@@ -108,18 +104,18 @@ HARVESTER.starport:
Valued:
Cost: 1500
^TRIKE:
TRIKE:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
BuildPaletteOrder: 10
Hotkey: w
Owner: atreides, harkonnen
Valued:
Cost: 250
Tooltip:
Name: Scout Trike
Description: Fast Scout\n Strong vs Infantry
Icon: trikeicon
Selectable:
Bounds: 24,24
Health:
@@ -141,18 +137,28 @@ HARVESTER.starport:
Explodes:
Weapon: UnitExplodeTiny
EmptyWeapon: UnitExplodeTiny
#Cargo:
# Types: Infantry
# MaxWeight: 1
# PipCount: 1
# UnloadFacing: 220
# Cargo:
# Types: Infantry
# MaxWeight: 1
# PipCount: 1
# UnloadFacing: 220
TRIKE.starport:
Inherits: TRIKE
Buildable:
Owner: atreides, harkonnen, ordos
Queue: Starport
Valued:
Cost: 315
RenderUnit:
Image: TRIKE
QUAD:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
Prerequisites: Light,Outpost
Owner: atreides, ordos
Owner: atreides, ordos, harkonnen
BuildPaletteOrder: 20
Hotkey: q
Valued:
@@ -160,7 +166,6 @@ QUAD:
Tooltip:
Name: Missile Quad
Description: Missile Scout\n Strong vs Vehicles\n Weak vs Infantry
Icon: quadicon
Health:
HP: 125
Armor:
@@ -170,8 +175,6 @@ QUAD:
Speed: 9
RevealsShroud:
Range: 8
RenderUnit:
Image: QUAD
Armament:
Weapon: QuadRockets
LocalOffset: 128,0,85#-4
@@ -190,6 +193,8 @@ QUAD.starport:
Queue: Starport
Valued:
Cost: 500
RenderUnit:
Image: QUAD
^COMBAT:
Inherits: ^Tank
@@ -250,7 +255,6 @@ SIEGETANK:
Tooltip:
Name: Siege Tank
Description: Siege Artillery\n Strong vs Infantry, Buildings\n Weak vs Tanks, Aircraft
Icon: siegetankicon
Health:
HP: 120
Armor:
@@ -286,7 +290,6 @@ SIEGETANK:
SIEGETANK.Husk:
Inherits: ^Husk
Tooltip:
Icon: siegetankicon
ThrowsParticle@turret:
Anim: turret
RenderUnit:
@@ -306,7 +309,6 @@ MISSILETANK:
Tooltip:
Name: Rocket Tank
Description: Rocket Artillery\n Strong vs Vehicles, Buildings\n Weak vs Infantry, Aircraft
Icon: missiletankicon
Buildable:
Queue: Armor
Prerequisites: Hitech
@@ -327,7 +329,7 @@ MISSILETANK:
Armament:
Weapon: 227mm
LocalOffset: -213,128,171, -213,-256,171
FireDelay: 15
FireDelay: 15
AttackFrontal:
AutoTarget:
InitialStance: Defend
@@ -341,8 +343,6 @@ MISSILETANK:
MISSILETANK.Husk:
Inherits: ^Husk
Tooltip:
Icon: missiletankicon
RenderUnit:
Image: MISSILETANK

View File

@@ -1,19 +1,27 @@
carryall:
idle:
Start: 0
Facings: 32
unload:
Start: 0
Facings: 32
idle: DATA.R8
Start: 1923
Facings: -32
unload: DATA.R8
Start: 1923
Facings: -32
icon: DATA.R8
Start: 4029
Offset: -30,-24
orni:
idle:
Start: 0
Facings: 32
idle: DATA.R8
Start: 1955
Facings: -32
Length: 3
Tick: 120
Transpose: true
icon: DATA.R8
Start: 4031
Offset: -30,-24
frigate:
idle:
Start: 0
idle: DATA.R8
Start: 2517
Facings: 1

View File

@@ -1,385 +1,441 @@
rifle:
stand:
Start: 0
Facings: 8
stand2:
Start: 0
Facings: 8
stand3:
Start: 0
Facings: 8
run:
Start: 8
stand: DATA.R8
Start: 206
Facings: -8
Transpose: true
stand2: DATA.R8
Start: 206
Facings: -8
Transpose: true
stand3: DATA.R8
Start: 206
Facings: -8
Transpose: true
run: DATA.R8
Start: 214
Length: 6
Facings: 8
Facings: -8
Tick: 110
shoot:
Start: 56
Length: 5
Facings: 8
Tick: 120
prone-stand:
Start: 104
Length: 1
Facings: 8
prone-run:
Start: 112
Transpose: true
shoot: DATA.R8
Start: 254
Length: 6
Facings: -8
Transpose: true
prone-stand: DATA.R8
Start: 302
Facings: -8
Transpose: true
prone-run: DATA.R8
Start: 310
Length: 3
Facings: 8
Facings: -8
Transpose: true
Tick: 110
standup-0:
Start: 96
Length: 1
Facings: 8
standup-0: DATA.R8
Start: 302
Facings: -8
Transpose: true
Tick: 120
prone-shoot:
Start: 136
prone-shoot: DATA.R8
Start: 334
Length: 6
Facings: -8
Transpose: true
die1: DATA.R8
Start: 382
Length: 5
Facings: 8
Tick: 120
die1: rifledeath
Start: 12
Length: 12
die2: DATA.R8
Start: 387
Length: 7
Tick: 80
die2: rifledeath
Start: 12
die3: DATA.R8
Start: 394
Length: 7
die4: DATA.R8
Start: 401
Length: 7
die5: DATA.R8
Start: 408
Length: 7
die6: DATA.R8
Start: 415
Length: 12
Tick: 80
die3: rifledeath
Start: 36
die-crushed: DATA.R8
Start: 430
Length: 12
Tick: 80
die4: rifledeath
Start: 24
Length: 12
Tick: 80
die5: rifledeath
Start: 0
Length: 12
Tick: 80
die6: rifledeath
Start: 12
Length: 12
Tick: 80
die-crushed: rifledeath
Start: 48
Length: 12
Tick: 160
Tick: 1600
icon: DATA.R8
Start: 4011
Offset: -30,-24
bazooka:
stand:
Start: 0
Facings: 8
stand2:
Start: 0
Facings: 8
stand3:
Start: 0
Facings: 8
run:
Start: 8
stand: DATA.R8
Start: 458
Facings: -8
Transpose: true
stand2: DATA.R8
Start: 458
Facings: -8
Transpose: true
stand3: DATA.R8
Start: 458
Facings: -8
Transpose: true
run: DATA.R8
Start: 466
Length: 6
Facings: 8
Facings: -8
Tick: 120
shoot:
Start: 56
Length: 5
Facings: 8
Tick: 120
prone-stand:
Start: 104
Transpose: true
shoot: DATA.R8
Start: 506
Length: 6
Facings: -8
Transpose: true
prone-stand: DATA.R8
Start: 562
Length: 1
Facings: 8
prone-run:
Start: 112
Facings: -8
Transpose: true
prone-run: DATA.R8
Start: 570
Length: 3
Facings: 8
Facings: -8
Transpose: true
Tick: 120
standup-0:
Start: 96
standup-0: DATA.R8
Start: 554
Length: 1
Facings: 8
prone-shoot:
Start: 136
Facings: -8
Transpose: true
prone-shoot: DATA.R8
Start: 586
Length: 6
Facings: -8
Transpose: true
die1: DATA.R8
Start: 634
Length: 5
Facings: 8
Tick: 120
die1: bazookadeath
Start: 0
Length: 5
die2: bazookadeath
Start: 5
die2: DATA.R8
Start: 639
Length: 7
die3: bazookadeath
Start: 12
die3: DATA.R8
Start: 646
Length: 7
die4: bazookadeath
Start: 19
die4: DATA.R8
Start: 653
Length: 7
die5: bazookadeath
Start: 26
die5: DATA.R8
Start: 660
Length: 7
die6: bazookadeath
Start: 26
die6: DATA.R8
Start: 660
Length: 7
die-crushed: bazookadeath
Start: 34
die-crushed: DATA.R8
Start: 668
Length: 26
Tick: 1600
icon: DATA.R8
Start: 4012
Offset: -30,-24
engineer:
stand:
Start: 0
Facings: 8
stand2:
Start: 0
Facings: 8
run:
Start: 8
stand: DATA.R8
Start: 1166
Facings: -8
Transpose: true
stand2: DATA.R8
Start: 1166
Facings: -8
Transpose: true
run: DATA.R8
Start: 1174
Length: 6
Facings: 8
Facings: -8
Transpose: true
Tick: 120
die1: engineerdeath
Start: 0
die1: DATA.R8
Start: 1342
Length: 5
die2: engineerdeath
Start: 5
die2: DATA.R8
Start: 1347
Length: 7
die3: engineerdeath
Start: 12
die3: DATA.R8
Start: 1354
Length: 7
die4: engineerdeath
Start: 19
die4: DATA.R8
Start: 1361
Length: 7
die5: engineerdeath
Start: 26
die5: DATA.R8
Start: 1368
Length: 7
die6: engineerdeath
Start: 26
die6: DATA.R8
Start: 1368
Length: 7
die-crushed: engineerdeath
Start: 34
die-crushed: DATA.R8
Start: 1376
Length: 26
Tick: 1600
icon: DATA.R8
Start: 4013
Offset: -30,-24
thumper:
stand:
Start: 0
Facings: 8
stand2:
Start: 0
Facings: 8
run:
Start: 8
medic: # actually thumper
stand: DATA.R8
Start: 1402
Facings: -8
Transpose: true
stand2: DATA.R8
Start: 1402
Facings: -8
Transpose: true
run: DATA.R8
Start: 1410
Length: 6
Facings: 8
Facings: -8
Transpose: true
Tick: 120
heal: thumping
Start: 0
Length: 4
Tick: 480
die1: thumperdeath
Start: 0
heal: DATA.R8
Start: 1458
Length: 5
die2: thumperdeath
Start: 5
Tick: 480
die1: DATA.R8
Start: 1543
Length: 5
die2: DATA.R8
Start: 1548
Length: 7
die3: thumperdeath
Start: 12
die3: DATA.R8
Start: 1555
Length: 7
die4: thumperdeath
Start: 19
die4: DATA.R8
Start: 1562
Length: 7
die5: thumperdeath
Start: 26
die5: DATA.R8
Start: 1569
Length: 7
die6: thumperdeath
Start: 26
die6: DATA.R8
Start: 1569
Length: 7
die-crushed: thumperdeath
Start: 34
die-crushed: DATA.R8
Start: 1577
Length: 26
Tick: 1600
icon: DATA.R8
Start: 4014
Offset: -30,-24
thumping:
idle:
Start: 0
Length: 4
idle: DATA.R8
Start: 1458
Length: 5
Tick: 150
make:
Start: 0
Length: 4
damaged-idle:
Start: 0
Length: 4
make: DATA.R8
Start: 1458
Length: 5
damaged-idle: DATA.R8
Start: 1458
Length: 5
Tick: 150
icon: DATA.R8
Frames: 4014
Offset: -30,-24
fremen:
stand:
Start: 0
Facings: 8
stand2:
Start: 0
Facings: 8
run:
Start: 8
stand: DATA.R8
Start: 694
Facings: -8
Transpose: true
stand2: DATA.R8
Start: 694
Facings: -8
Transpose: true
run: DATA.R8
Start: 702
Length: 6
Facings: 8
Facings: -8
Transpose: true
Tick: 120
shoot:
Start: 56
Length: 5
Facings: 8
Tick: 120
prone-stand:
Start: 104
shoot: DATA.R8
Start: 742
Length: 6
Facings: -8
Transpose: true
prone-stand: DATA.R8
Start: 798
Length: 1
Facings: 8
prone-run:
Start: 112
Facings: -8
Transpose: true
prone-run: DATA.R8
Start: 806
Length: 3
Facings: 8
Facings: -8
Transpose: true
Tick: 120
standup-0:
Start: 96
standup-0: DATA.R8
Start: 790
Length: 1
Facings: 8
Facings: -8
Transpose: true
Tick: 120
prone-shoot:
Start: 136
prone-shoot: DATA.R8
Start: 822
Length: 6
Facings: -8
Transpose: true
die1: DATA.R8
Start: 870
Length: 5
Facings: 8
Tick: 120
die1: fremendeath
Start: 0
Length: 5
die2: fremendeath
Start: 5
die2: DATA.R8
Start: 875
Length: 7
die3: fremendeath
Start: 12
die3: DATA.R8
Start: 882
Length: 7
die4: fremendeath
Start: 19
die4: DATA.R8
Start: 889
Length: 7
die5: fremendeath
Start: 26
die5: DATA.R8
Start: 896
Length: 7
die6: fremendeath
Start: 26
die6: DATA.R8
Start: 896
Length: 7
die-crushed: fremendeath
Start: 34
die-crushed: DATA.R8
Start: 904
Length: 26
Tick: 1600
icon: DATA.R8
Start: 4032
Offset: -30,-24
saboteur:
stand:
Start: 0
Facings: 8
stand2:
Start: 0
Facings: 8
stand3:
Start: 0
Facings: 8
run:
Start: 8
stand: DATA.R8
Start: 2149
Facings: -8
Transpose: true
stand2: DATA.R8
Start: 2149
Facings: -8
Transpose: true
stand3: DATA.R8
Start: 2149
Facings: -8
Transpose: true
run: DATA.R8
Start: 2157
Length: 6
Facings: 8
Facings: -8
Transpose: true
Tick: 120
prone-stand:
Start: 104
prone-stand: DATA.R8
Start: 2253
Length: 1
Facings: 8
prone-run:
Start: 112
Facings: -8
Transpose: true
prone-run: DATA.R8
Start: 2261
Length: 3
Facings: 8
Facings: -8
Transpose: true
Tick: 120
standup-0:
Start: 96
standup-0: DATA.R8
Start: 2245
Length: 1
Facings: 8
Facings: -8
Transpose: true
Tick: 120
die1: saboteurdeath
Start: 0
die1: DATA.R8
Start: 2325
Length: 5
die2: saboteurdeath
Start: 5
die2: DATA.R8
Start: 2330
Length: 7
die3: saboteurdeath
Start: 12
die3: DATA.R8
Start: 2337
Length: 7
die4: saboteurdeath
Start: 19
die4: DATA.R8
Start: 2344
Length: 7
die5: saboteurdeath
Start: 26
die5: DATA.R8
Start: 2351
Length: 7
die6: saboteurdeath
Start: 26
die6: DATA.R8
Start: 2351
Length: 7
die-crushed: saboteurdeath
Start: 34
die-crushed: DATA.R8
Start: 2359
Length: 26
Tick: 1600
icon: DATA.R8
Start: 4034
Offset: -30,-24
sardaukar:
stand:
Start: 0
Facings: 8
stand2:
Start: 0
Facings: 8
run:
Start: 8
stand: DATA.R8
Start: 930
Facings: -8
Transpose: true
stand2: DATA.R8
Start: 930
Facings: -8
Transpose: true
run: DATA.R8
Start: 938
Length: 6
Facings: -8
Transpose: true
Tick: 120
shoot: DATA.R8
Start: 978
Length: 6
Facings: -8
Transpose: true
prone-stand: DATA.R8
Start: 1034
Length: 1
Facings: -8
Transpose: true
prone-run: DATA.R8
Start: 1042
Length: 3
Facings: -8
Transpose: true
Tick: 120
standup-0: DATA.R8
Start: 1026
Length: 1
Facings: -8
Transpose: true
Tick: 120
prone-shoot: DATA.R8
Start: 1058
Length: 6
Facings: 8
Tick: 120
shoot:
Start: 56
Transpose: true
die1: DATA.R8
Start: 1106
Length: 5
Facings: 8
Tick: 120
prone-stand:
Start: 104
Length: 1
Facings: 8
prone-run:
Start: 112
Length: 3
Facings: 8
Tick: 120
standup-0:
Start: 96
Length: 1
Facings: 8
Tick: 120
prone-shoot:
Start: 136
Length: 5
Facings: 8
Tick: 120
die1: sardaukardeath
Start: 0
Length: 5
die2: sardaukardeath
Start: 5
die2: DATA.R8
Start: 1111
Length: 7
die3: sardaukardeath
Start: 12
die3: DATA.R8
Start: 1118
Length: 7
die4: sardaukardeath
Start: 19
die4: DATA.R8
Start: 1125
Length: 7
die5: sardaukardeath
Start: 26
die5: DATA.R8
Start: 1132
Length: 7
die6: sardaukardeath
Start: 26
die6: DATA.R8
Start: 1132
Length: 7
die-crushed: sardaukardeath
Start: 34
die-crushed: DATA.R8
Start: 1140
Length: 26
Tick: 1600
Tick: 1600
icon: DATA.R8
Start: 4015
Offset: -30,-24

View File

@@ -1,67 +1,24 @@
crate:
idle: crates
Start: 0
crate:
idle: DATA.R8
Start: 102
ZOffset: -511
land: crates
Start: 0
Offset: -16,-16
land: DATA.R8
Start: 102
ZOffset: -511
Offset: -16,-16
spicebloom:
make:
Start: 0
make: DATA.R8
Start: 107
Length: 3
active:
Start: 2
Offset: -16,-16
active: DATA.R8
Start: 109
Length: 1
ZOffset: -511
idle:
Start: 2
Offset: -16,-16
idle: DATA.R8
Start: 109
ZOffset: -511
sandworm:
stand: wormsigns1
Start: 0
Length: *
run: wormsigns2
Start: 0
Facings: 15
Length: 1
die1: wormsigns3
Start: 0
Length: 1
die2: wormsigns3
Start: 0
Length: 1
die3: wormsigns3
Start: 0
Length: 1
die4: wormsigns3
Start: 0
Length: 1
die5: wormsigns3
Start: 0
Length: 1
die6: wormsigns3
Start: 0
Length: 1
die-crushed: wormsigns3
Start: 0
Length: 1
Tick: 1600
wormattack: wormjaw
Start: 0
Length: 15
plates:
idle:
Start: 0
Length: 6
scratched-idle:
Start: 0
Length: 6
damaged-idle:
Start: 0
Length: 6
critical-idle:
Start: 0
Length: 6
Offset: -16,-16

View File

@@ -1,73 +1,76 @@
explosion:
piff: minipiff
Start: 0
Length: *
piffs: minipiff
Start: 0
Length: *
small_explosion: veh-hit3
Start: 0
Length: *
med_explosion: frag1
Start: 0
Length: *
large_explosion: bigboom
Start: 0
Length: *
small_artillery: veh-hit2
Start: 0
Length: *
artillery: art-exp1
Start: 0
Length: *
self_destruct: art-exp1
Start: 0
Length: *
small_building: veh-hit1
Start: 0
Length: *
building: fball1
Start: 0
Length: *
small_napalm: napalm1
Start: 0
Length: *
napalm: napalm2
Start: 0
Length: *
napalm2: napalm2
Start: 0
Length: *
piff: DATA.R8
Start: 3626
Length: 5
piffs: DATA.R8
Start: 3626
Length: 5
small_explosion: DATA.R8
Start: 3386
Length: 4
BlendMode: Additive
med_explosion: DATA.R8
Start: 3390
Length: 12
BlendMode: Additive
tiny_explosion: DATA.R8
Start: 3390
Length: 12
BlendMode: Additive
nuke: DATA.R8
Start: 3965
Length: 14
Tick: 60
shockwave: shockwave
Start: 0
Length: *
Tick: 30
nuke: atomsfx
Start: 0
Length: *
BlendMode: Additive
mini_explosion: DATA.R8
Start: 3403
Length: 15
Tick: 60
90mm:
idle:
Start: 0
Facings: 32
BlendMode: Additive
self_destruct: DATA.R8
Start: 3433
Length: 15
BlendMode: Additive
building: DATA.R8
Start: 3448
Length: 22
BlendMode: Additive
large_explosion: DATA.R8
Start: 3988
Length: 22
BlendMode: Additive
artillery: DATA.R8
Start: 3988
Length: 22
BlendMode: Additive
small_artillery: DATA.R8
Start: 3988
Length: 22
BlendMode: Additive
small_napalm: DATA.R8
Start: 3421
Length: 8
BlendMode: Additive
shockwave: DATA.R8
Start: 3687
Length: 6
BlendMode: Additive
laserfire:
idle: miniboom
Start: 0
Length: *
idle: DATA.R8
Start: 3386
Length: 3
pips:
groups: numbers
Start: 0
groups: DATA.R8
Start: 17
Length: 10
tag-primary: stars
Start: 0
pip-empty: dots
Start: 0
pip-green: dots
Start: 1
tag-primary: DATA.R8
Start: 110
pip-empty: DATA.R8
Start: 15
pip-green: DATA.R8
Start: 16
clock:
idle:
@@ -90,16 +93,21 @@ rank:
Length: *
overlay:
build-valid-arrakis:
build-valid-arrakis: DATA.R8
Start: 0
build-invalid:
Offset: -20,-20
build-invalid: DATA.R8
Start: 1
target-select:
Offset: -20,-20
target-select: DATA.R8
Start: 2
target-valid-arrakis:
Offset: -20,-20
target-valid-arrakis: DATA.R8
Start: 0
target-invalid:
Offset: -20,-20
target-invalid: DATA.R8
Start: 1
Offset: -20,-20
rallypoint:
flag:flagfly
@@ -111,84 +119,91 @@ rallypoint:
Length: *
rpg:
idle:
Start: 0
idle: DATA.R8
Start: 3015
Facings: 32
crate-effects:
dollar: selling
Start: 0
Length: *
reveal-map: orbit
Start: 0
Length: *
hide-map: reveal
Start: 0
Length: *
dollar: DATA.R8
Start: 3679
Length: 8
reveal-map: DATA.R8
Start: 3947
Length: 18
hide-map: DATA.R8
Start: 3911
Length: 36
levelup: levelup
Start: 0
Length: *
Tick: 200
allyrepair:
repair:
Start: 0
Length: *
Tick: 160
repair: DATA.R8
Frames: 3, 39
Length: 2
Tick: 300
missile:
idle:
Start: 0
Facings: 32
idle: DATA.R8
Start: 3088
Facings: -32
missile2:
idle:
Start: 0
Facings: 32
idle: DATA.R8
Start: 3306
Facings: -32
atomic:
up: deathhandmissile
Start: 0
up: DATA.R8
Start: 2147
Length: 1
down: deathhandmissile
Start: 1
down: DATA.R8
Start: 2148
Length: 1
fire:
1: fire2
Start: 0
Length: *
1: DATA.R8
Start: 3712
Length: 10
Offset: 0,-3
2: fire2
Start: 0
Length: *
BlendMode: Additive
2: DATA.R8
Start: 3723
Length: 11
Offset: 0,-3
3: fire3
Start: 0
Length: *
BlendMode: Additive
3: DATA.R8
Start: 3885
Length: 13
Offset: 0,-3
4: fire
Start: 0
Length: *
BlendMode: Additive
4: DATA.R8
Start: 3712
Length: 10
Offset: 0,-3
BlendMode: Additive
smoke_m:
idle: minifire
Start: 0
Length: *
loop: minifire
Start: 0
Length: *
end: minifire
Start: 0
idle: DATA.R8
Start: 3418
Length: 2
BlendMode: Additive
loop: DATA.R8
Start: 3418
Length: 2
BlendMode: Additive
end: DATA.R8
Start: 3418
Length: 3
BlendMode: Additive
bombs:
open:
Start: 0
open: DATA.R8
Start: 3280
Length: 4
idle:
Start: 0
idle: DATA.R8
Start: 3280
Length: 4
parach:
@@ -210,10 +225,22 @@ waypoint:
Length: *
sietch:
idle:
Start: 0
idle: DATA.R8
Start: 2998
doubleblast:
idle:
Start: 0
Facings: 16
idle: DATA.R8
Start: 3279
Facings: -16
BlendMode: Additive
icon:
paratroopers: DATA.R8
Start: 4029
Offset: -30,-24
ornistrike: DATA.R8
Start: 4031
Offset: -30,-24
deathhand: DATA.R8
Start: 4035
Offset: -30,-24

File diff suppressed because it is too large Load Diff

View File

@@ -1,113 +1,162 @@
dmcv:
idle:
Start: 0
Facings: 32
idle: DATA.R8
Start: 1795
Facings: -32
icon: DATA.R8
Start: 4023
Offset: -30,-24
harvester:
idle:
Start: 0
Facings: 32
harvest: harvest2
Start: 0
idle: DATA.R8
Start: 1699
Facings: -32
harvest: DATA.R8
Start: 3631
Length: 6
Facings: 8
Facings: -8
Tick: 80
ZOffset: 1
dock: unload2
Start: 0
dock: DATA.R8
Start: 3370
Length: 10
dock-loop: unload2
Start: 10
dock-loop: DATA.R8
Start: 3380
Length: 1
icon: DATA.R8
Start: 4019
Offset: -30,-24
trike:
idle:
Start: 0
Facings: 32
unload:
Start: 0
Facings: 32
muzzle: minimuzzle
Start: 0
Length: 1
Facings: 32
idle: DATA.R8
Start: 1635
Facings: -32
unload: DATA.R8
Start: 1635
Facings: -32
muzzle: DATA.R8
Start: 3839
Facings: -32
icon: DATA.R8
Start: 4041
Offset: -30,-24
quad:
idle:
Start: 0
Facings: 32
unload:
Start: 0
Facings: 32
muzzle: minimuzzle
Start: 0
Length: 1
Facings: 32
idle: DATA.R8
Start: 1667
Facings: -32
unload: DATA.R8
Start: 1667
Facings: -32
muzzle: DATA.R8
Start: 3839
Facings: -32
icon: DATA.R8
Start: 4018
Offset: -30,-24
siegetank:
idle:
Start: 0
Facings: 32
turret: siegeturret
Start: 0
Facings: 32
idle: DATA.R8
Start: 1763
Facings: -32
turret: DATA.R8
Start: 1891
Facings: -32
icon: DATA.R8
Start: 4026
Offset: -30,-24
missiletank:
idle:
Start: 0
Facings: 32
idle: DATA.R8
Start: 1603
Facings: -32
icon: DATA.R8
Start: 4024
Offset: -30,-24
sonictank:
idle:
Start: 0
Facings: 32
idle: DATA.R8
Start: 1827
Facings: -32
icon: DATA.R8
Start: 4027
Offset: -30,-24
combata:
idle:
Start: 0
Facings: 32
turret: combataturret
Start: 0
Facings: 32
idle: DATA.R8
Start: 1731
Facings: -32
turret: DATA.R8
Start: 1859
Facings: -32
icon: DATA.R8
Start: 4020
Offset: -30,-24
combath:
idle:
Start: 0
Facings: 32
turret: combathturret
Start: 0
Facings: 32
idle: DATA.R8
Start: 2051
Facings: -32
turret: DATA.R8
Start: 2115
Facings: -32
icon: DATA.R8
Start: 4021
Offset: -30,-24
devast:
idle:
Start: 0
Facings: 32
muzzle: doubleblastmuzzle
Start: 0
idle: DATA.R8
Start: 2083
Facings: -32
muzzle: DATA.R8
Start: 3807
Length: 1
Facings: 32
Facings: -32
icon: DATA.R8
Start: 4028
Offset: -30,-24
combato:
idle:
Start: 0
Facings: 32
turret: combatoturret
Start: 0
Facings: 32
idle: DATA.R8
Start: 2453
Facings: -32
turret: DATA.R8
Start: 2485
Facings: -32
icon: DATA.R8
Start: 4022
Offset: -30,-24
raider:
idle:
idle: DATA.R8
Start: 2421
Facings: -32
unload: DATA.R8
Start: 2421
Facings: -32
muzzle: DATA.R8
Start: 3839
Facings: -32
icon: DATA.R8
Start: 4017
Offset: -30,-24
stealthraider:
idle: DATA.R8
Start: 2421
Facings: -32
unload: DATA.R8
Start: 2421
Facings: -32
muzzle: DATA.R8
Start: 3839
Facings: -32
icon: raidersicon
Start: 0
Facings: 32
unload:
Start: 0
Facings: 32
muzzle: minimuzzle
Start: 0
Length: 1
Facings: 32
deviatortank:
idle:
Start: 0
Facings: 32
idle: DATA.R8
Start: 2389
Facings: -32
icon: DATA.R8
Start: 4025
Offset: -30,-24

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@ LMG:
ContrailUsePlayerColor: true
Warhead:
Spread: 3
Versus:
Versus:
Wood: 25%
Light: 40%
Heavy: 10%
@@ -36,13 +36,13 @@ Bazooka:
RangeLimit: 35
Warhead:
Spread: 3
Versus:
Versus:
None: 10%
Wood: 75%
Light: 60%
Heavy: 90%
Concrete: 40%
Explosion: small_artillery
Explosion: small_explosion
InfDeath: 4
SmudgeType: SandCrater, RockCrater
Damage: 50
@@ -61,7 +61,7 @@ Sniper:
Warhead:
Damage: 60
Spread: 1
Versus:
Versus:
None: 100%
Wood: 0%
Light: 1%
@@ -82,7 +82,7 @@ Vulcan:
ContrailUsePlayerColor: true
Warhead:
Spread: 3
Versus:
Versus:
Wood: 0%
Light: 60%
Heavy: 10%
@@ -107,7 +107,7 @@ Slung:
Image: MISSILE
Warhead:
Spread: 6
Versus:
Versus:
None: 0%
Wood: 75%
Light: 40%
@@ -133,7 +133,7 @@ HMG:
ContrailUsePlayerColor: true
Warhead:
Spread: 3
Versus:
Versus:
Wood: 15%
Light: 45%
Heavy: 20%
@@ -156,7 +156,7 @@ HMGo:
ContrailUsePlayerColor: true
Warhead:
Spread: 3
Versus:
Versus:
Wood: 15%
Light: 45%
Heavy: 25%
@@ -183,7 +183,7 @@ QuadRockets:
RangeLimit: 40
Warhead:
Spread: 3
Versus:
Versus:
None: 35%
Wood: 45%
Light: 100%
@@ -203,11 +203,10 @@ TurretGun:
Speed: 55
High: yes
Shadow: yes
Image: 90MM
Inaccuracy: 9
Warhead:
Spread: 8
Versus:
Versus:
None: 50%
Wood: 75%
Light: 100%
@@ -258,10 +257,9 @@ TowerMissile:
Projectile: Bullet
Speed: 50
Inaccuracy: 12
Image: 90MM
Warhead:
Spread: 8
Versus:
Versus:
None: 50%
Wood: 50%
Light: 100%
@@ -279,10 +277,9 @@ TowerMissile:
Projectile: Bullet
Speed: 55
Inaccuracy: 11
Image: 90MM
Warhead:
Spread: 8
Versus:
Versus:
None: 50%
Wood: 50%
Light: 100%
@@ -302,7 +299,7 @@ DevBullet:
Image: doubleblast
Warhead:
Spread: 8
Versus:
Versus:
None: 100%
Wood: 50%
Light: 100%
@@ -313,7 +310,7 @@ DevBullet:
SmudgeType: SandCrater, RockCrater
Damage: 100
227mm:
227mm:
ROF: 100
Range: 10
MinRange: 4
@@ -333,7 +330,7 @@ DevBullet:
ContrailLength: 5
Warhead:
Spread: 12
Versus:
Versus:
None: 20%
Wood: 50%
Light: 100%
@@ -361,7 +358,7 @@ FakeMissile:
ContrailUsePlayerColor : True
Warhead:
Spread: 3
Versus:
Versus:
None: 0%
Wood: 0%
Concrete: 0%
@@ -384,7 +381,7 @@ FakeMissile:
ContrailLength: 20
Warhead:
Spread: 12
Versus:
Versus:
None: 100%
Wood: 80%
Light: 75%
@@ -408,7 +405,7 @@ Sound:
UsePlayerColor: true
Warhead:
Spread: 1
Versus:
Versus:
None: 60%
Wood: 85%
Light: 80%
@@ -426,7 +423,7 @@ ChainGun:
High: true
Warhead:
Spread: 3
Versus:
Versus:
Wood: 50%
Light: 60%
Heavy: 25%
@@ -443,7 +440,7 @@ Heal:
Speed: 100
Warhead:
Spread: 5
Versus:
Versus:
Wood: 0%
Light: 0%
Heavy: 0%
@@ -457,7 +454,7 @@ WormJaw:
Report: WORM.WAV
Warhead:
Spread: 5
Versus:
Versus:
Wood: 0%
Concrete: 0%
Damage: 100
@@ -470,7 +467,7 @@ ParaBomb:
Image: BOMBS
Warhead:
Spread: 6
Versus:
Versus:
None: 30%
Wood: 75%
Light: 75%
@@ -487,14 +484,117 @@ Napalm:
Image: BOMBS
Warhead:
Spread: 20
Versus:
Versus:
None: 20%
Wood: 100%
Light: 30%
Heavy: 20%
Concrete: 70%
InfDeath: 4
Explosion: napalm
Explosion: small_artillery
ImpactSound: NAPALM1.WAV
SmudgeType: Crater
Damage: 300
Crush:
Warhead:
ImpactSound: CRUSH1.WAV
Damage: 100
Demolish:
Warhead:
ImpactSound: EXPLLG2.WAV
Explosion: building
Atomic:
Warhead:
Damage: 1800
Spread: 64
Versus:
None: 100%
Wood: 100%
Light: 100%
Heavy: 50%
Concrete: 50%
Explosion: nuke
InfDeath: 5
ImpactSound: EXPLLG2.WAV
CrateNuke:
Warhead:
Damage: 800
Spread: 50
Versus:
None: 20%
Wood: 75%
Light: 25%
Heavy: 25%
Concrete: 50%
Explosion: nuke
InfDeath: 5
ImpactSound: EXPLLG2.WAV
CrateExplosion:
Warhead:
Damage: 400
Spread: 10
Versus:
None: 90%
Wood: 75%
Light: 60%
Heavy: 25%
Explosion: building
InfDeath: 4
ImpactSound: EXPLSML4.WAV
UnitExplode:
Warhead:
Damage: 500
Spread: 10
Versus:
None: 90%
Wood: 75%
Light: 60%
Heavy: 25%
Explosion: building
InfDeath: 4
ImpactSound: EXPLMD1.WAV
UnitExplodeSmall:
Warhead:
Damage: 60
Spread: 10
Versus:
None: 90%
Wood: 75%
Light: 60%
Heavy: 25%
Explosion: self_destruct
InfDeath: 4
ImpactSound: EXPLHG1.WAV, EXPLLG1.WAV, EXPLMD1.WAV, EXPLSML4.WAV
UnitExplodeTiny:
Warhead:
Damage: 30
Spread: 7
Versus:
None: 90%
Wood: 75%
Light: 60%
Heavy: 25%
Explosion: med_explosion
InfDeath: 4
ImpactSound: EXPLMD2.WAV, EXPLSML1.WAV, EXPLSML2.WAV, EXPLSML3.WAV
UnitExplodeScale:
Warhead:
Damage: 90
Spread: 13
Versus:
None: 90%
Wood: 75%
Light: 60%
Heavy: 25%
Explosion: building
InfDeath: 4
ImpactSound: EXPLLG2.WAV, EXPLLG3.WAV, EXPLLG5.WAV

View File

@@ -1,188 +0,0 @@
# to do: explosion animations, spreads
### Warheads
W_Bullets: # Machine Guns
Report: MGUN2.WAV #machine gun burst sound
Warhead:
Spread: 3
Versus:
None: 100%
Wood: 75%
Light: 40%
Heavy: 20%
Concrete: 10%
Explosion: piffs
InfDeath: 2
W_Bazooka:
Warhead:
Spread: 3
Versus:
None: 8%
Wood: 45%
Light: 70%
Heavy: 100%
Concrete: 75%
InfDeath: 4
Explosion: med_explosion
WaterExplosion: med_splash
ImpactSound: kaboom12.aud # TODO: fallback to RA
W_HE: # Grenadier, siege tank
Warhead:
Spread: 12
Versus:
None: 125%
Wood: 70%
Light: 30%
Heavy: 20%
Concrete: 100%
# vvv below taken from 155mm
InfDeath: 3
Explosion: self_destruct
WaterExplosion: large_splash
ImpactSound: explsml2
SmudgeType: SandCrater, RockCrater
W_GT_AT: # Sardaukar & Fremen's longer range weapons
Warhead:
Spread: 3
Versus:
None: 25%
Wood: 65%
Light: 100%
Heavy: 50%
Concrete: 100%
InfDeath: 4
Explosion: med_explosion
WaterExplosion: med_splash
ImpactSound: kaboom12.aud # TODO: fallback to RA
SmudgeType: SandCrater, RockCrater
W_AT: # Tank shells, gun turret
Warhead:
Spread: 3
Versus:
None: 20%
Wood: 60%
Light: 100%
Heavy: 75%
Concrete: 50%
Explosion: med_explosion
ImpactSound: kaboom30.aud # TODO: fallback to RA
InfDeath: 4
SmudgeType: SandCrater, RockCrater
W_AT_Mis: # Rocket Launcher, tower missile
Warhead:
Spread: 8
Versus:
None: 15%
Wood: 65%
Light: 90%
Heavy: 100%
Concrete: 75%
InfDeath: 4
Explosion: large_explosion
WaterExplosion: med_splash
ImpactSound: explsml1.wav
SmudgeType: SandCrater, RockCrater
W_Deviate:
Warhead:
Spread: 8
Versus:
None: 20%
Wood: 20%
Light: 20%
Heavy: 20%
Concrete: 20%
Explosion: med_explosion
WaterExplosion: med_splash
W_Sonic:
Warhead:
Spread: 6
Versus:
None: 100%
Wood: 100%
Light: 100%
Heavy: 60%
Concrete: 50%
Explosion: med_explosion
WaterExplosion: med_splash
W_Plasma:
Warhead:
Spread: 3
Versus:
None: 100%
Wood: 100%
Light: 60%
Heavy: 50%
Concrete: 100%
Explosion: med_explosion
WaterExplosion: med_splash
### Projectiles
P_Bullets: #from M60mg
Projectile: Bullet
Speed: 100
ContrailLength: 3
TrailInterval: 1
ContrailDelay: 0
ContrailUsePlayerColor: true
P_OneShot: #from Sniper
Report: RIFLE.AUD # TODO: fallback to RA
Projectile: Bullet
Speed: 150
ContrailLength: 6
TrailInterval: 1
ContrailDelay: 0
ContrailUsePlayerColor: true
P_Bazooka: #From bazooka/1st (dragon?)
Projectile: Missile
Speed: 25
Arm: 2
High: true
Shadow: yes
Proximity: true
Trail: smokey
Inaccuracy: 3
Image: DRAGON
ROT: 5
RangeLimit: 35
P_Rocket: #From QuadRockets
Projectile: Missile
Arm: 0
High: yes
Shadow: yes
Proximity: yes
Inaccuracy: 3
Image: DRAGON
ROT: 10
Trail: smokey
Speed: 40
RangeLimit: 40
P_Missile: #From 227mm
Projectile: Bullet
Speed: 20
Arm: 5
High: yes
Shadow: yes
Inaccuracy: 55
Angle: 0.2
Image: MISSILE
ROT: 5
ContrailLength: 5

View File

@@ -1,105 +0,0 @@
Crush:
Warhead:
ImpactSound: CRUSH1.WAV
Damage: 100
Demolish:
Warhead:
ImpactSound: EXPLLG2.WAV
Explosion: building
Atomic:
Warhead:
Damage: 1800
Spread: 64
Versus:
None: 100%
Wood: 100%
Light: 100%
Heavy: 50%
Concrete: 50%
Explosion: nuke
InfDeath: 5
ImpactSound: EXPLLG2.WAV
CrateNuke:
Warhead:
Damage: 800
Spread: 50
Versus:
None: 20%
Wood: 75%
Light: 25%
Heavy: 25%
Concrete: 50%
Explosion: nuke
InfDeath: 5
ImpactSound: EXPLLG2.WAV
CrateExplosion:
Warhead:
Damage: 400
Spread: 10
Versus:
None: 90%
Wood: 75%
Light: 60%
Heavy: 25%
Explosion: building
WaterExplosion: building
InfDeath: 4
ImpactSound: EXPLSML4.WAV
UnitExplode:
Warhead:
Damage: 500
Spread: 10
Versus:
None: 90%
Wood: 75%
Light: 60%
Heavy: 25%
Explosion: building
WaterExplosion: large_splash
InfDeath: 4
ImpactSound: EXPLMD1.WAV
UnitExplodeSmall:
Warhead:
Damage: 60
Spread: 10
Versus:
None: 90%
Wood: 75%
Light: 60%
Heavy: 25%
Explosion: self_destruct
InfDeath: 4
ImpactSound: EXPLHG1.WAV, EXPLLG1.WAV, EXPLMD1.WAV, EXPLSML4.WAV
UnitExplodeTiny:
Warhead:
Damage: 30
Spread: 7
Versus:
None: 90%
Wood: 75%
Light: 60%
Heavy: 25%
Explosion: med_explosion
InfDeath: 4
ImpactSound: EXPLMD2.WAV, EXPLSML1.WAV, EXPLSML2.WAV, EXPLSML3.WAV
UnitExplodeScale:
Warhead:
Damage: 90
Spread: 13
Versus:
None: 90%
Wood: 75%
Light: 60%
Heavy: 25%
Explosion: building
InfDeath: 4
ImpactSound: EXPLLG2.WAV, EXPLLG3.WAV, EXPLLG5.WAV

View File

@@ -5,78 +5,48 @@ Cursors:
mouse: cursor
scroll-t:
start:1
x: 12
y: 12
scroll-tr:
start: 2
x: 12
y: 12
start:2
scroll-r:
start: 3
x: 12
y: 12
start:3
scroll-br:
start: 4
x: 12
y: 12
start:4
scroll-b:
start:5
x: 12
y: 12
scroll-bl:
start:6
x: 12
y: 12
scroll-l:
start:7
x: 12
y: 12
scroll-tl:
start:8
x: 12
y: 12
scroll-t-blocked:
start:124
x: 12
y: 12
scroll-tr-blocked:
start:125
x: 12
y: 12
scroll-r-blocked:
start:126
x: 12
y: 12
scroll-br-blocked:
start:127
x: 12
y: 12
scroll-b-blocked:
start:128
x: 12
y: 12
scroll-bl-blocked:
start:129
x: 12
y: 12
scroll-l-blocked:
start:130
x: 12
y: 12
scroll-tl-blocked:
start:131
x: 12
y: 12
select:
start:15
length: 6
x: 12
y: 12
default:
start:0
x: -16
y: -12
default-minimap:
start:80
x: -16
y: -12
generic-blocked:
start:9
generic-blocked-minimap:
@@ -84,181 +54,111 @@ Cursors:
move:
start:10
length: 4
x: 12
y: 12
move-minimap:
start:29
length: 4
x: 12
y: 12
move-rough:
start:10
length: 4
x: 12
y: 12
move-blocked:
start:14
x: 12
y: 12
move-blocked-minimap:
start:33
x: 12
y: 12
attack:
start:195
length: 8
x: 12
y: 12
attack-minimap:
start:203
length: 8
x: 12
y: 12
attackmove:
start:21
length: 8
x: 12
y: 12
attackmove-minimap:
start:134
length: 8
x: 12
y: 12
harvest:
start:21
length: 8
x: 12
y: 12
harvest-minimap:
start:134
length: 8
x: 12
y: 12
enter:
start:113
length: 3
x: 12
y: 12
enter-minimap:
start:139
length: 3
x: 12
y: 12
enter-blocked:
start:212
length: 1
x: 12
y: 12
enter-blocked-minimap:
start:33
c4:
start:116
length: 3
x: 12
y: 12
c4-minimap:
start:121
length: 3
x: 12
y: 12
guard:
start:147
length: 1
x: 12
y: 12
guard-minimap:
start:146
length: 1
x: 12
y: 12
capture:
start:164
length: 3
x: 12
y: 12
capture-minimap:
start:167
length: 3
x: 12
y: 12
heal:
start:160
length: 4
x: 12
y: 12
heal-minimap:
start:194
length: 1
x: 12
y: 12
ability:
start:82
length: 8
x: 12
y: 12
ability-minimap:
start:214
length: 8
x: 12
y: 12
# Cursors that need minimap variants
deploy:
start:59
length: 9
x: 12
y: 12
deploy-blocked:
start:211
length: 1
x: 12
y: 12
goldwrench:
start:170
length: 24
x: 12
y: 12
goldwrench-blocked:
start:213
length: 1
x: 12
y: 12
nuke:
start:90
length: 7
x: 12
y: 12
chrono-select:
start:97
length: 8
x: 12
y: 12
chrono-target:
start:105
length: 8
x: 12
y: 12
sell:
start:68
length: 12
x: 12
y: 12
sell-blocked:
start:119
length: 1
x: 12
y: 12
repair:
start:35
length: 24
x: 12
y: 12
repair-blocked:
start:120
length: 1
x: 12
y: 12
sell2:
start:148
length: 12
@@ -267,10 +167,6 @@ Cursors:
powerdown-blocked:
start:0
length: 1
x: 12
y: 12
powerdown:
start:1
length: 3
x: 12
y: 12
length: 3

View File

@@ -448,7 +448,6 @@ SNIPER:
Valued:
Cost: 700
Tooltip:
Icon: snipericon
Name: Sniper
Description: Elite sniper infantry unit.\n Strong vs Infantry\n Weak vs Vehicles
Buildable:
@@ -492,7 +491,6 @@ Zombie:
Valued:
Cost: 100
Tooltip:
Icon: zombicon
Name: Zombie
Description: Slow undead. Attacks in close combat.
Buildable:
@@ -519,7 +517,6 @@ Ant:
Valued:
Cost: 300
Tooltip:
Icon: anticon
Name: Giant Ant
Description: Irradiated insect that grew oversize.
Buildable:

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