Merge pull request #9324 from atlimit8/ColorSpacePrefixes

Hex Color Parsing
This commit is contained in:
Oliver Brakmann
2015-11-02 20:28:04 +01:00
221 changed files with 12295 additions and 11794 deletions

View File

@@ -212,21 +212,9 @@ namespace OpenRA
}
else if (fieldType == typeof(Color))
{
if (value != null)
{
var parts = value.Split(',');
if (parts.Length == 3)
return Color.FromArgb(
Exts.ParseIntegerInvariant(parts[0]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[1]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[2]).Clamp(0, 255));
if (parts.Length == 4)
return Color.FromArgb(
Exts.ParseIntegerInvariant(parts[0]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[1]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[2]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[3]).Clamp(0, 255));
}
Color color;
if (value != null && HSLColor.TryParseRGB(value, out color))
return color;
return InvalidValueAction(value, fieldType, fieldName);
}
@@ -235,20 +223,11 @@ namespace OpenRA
if (value != null)
{
var parts = value.Split(',');
if (parts.Length % 4 != 0)
return InvalidValueAction(value, fieldType, fieldName);
var colors = new Color[parts.Length / 4];
var colors = new Color[parts.Length];
for (var i = 0; i < colors.Length; i++)
{
colors[i] = Color.FromArgb(
Exts.ParseIntegerInvariant(parts[4 * i]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[4 * i + 1]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[4 * i + 2]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[4 * i + 3]).Clamp(0, 255));
}
if (!HSLColor.TryParseRGB(parts[i], out colors[i]))
return InvalidValueAction(value, fieldType, fieldName);
return colors;
}
@@ -259,9 +238,12 @@ namespace OpenRA
{
if (value != null)
{
var parts = value.Split(',');
Color rgb;
if (HSLColor.TryParseRGB(value, out rgb))
return new HSLColor(rgb);
// Allow old ColorRamp format to be parsed as HSLColor
// Allow old HSLColor/ColorRamp formats to be parsed as HSLColor
var parts = value.Split(',');
if (parts.Length == 3 || parts.Length == 4)
return new HSLColor(
(byte)Exts.ParseIntegerInvariant(parts[0]).Clamp(0, 255),

View File

@@ -16,6 +16,7 @@ using System.Drawing.Imaging;
using System.Globalization;
using System.Linq;
using System.Reflection;
using OpenRA.Graphics;
namespace OpenRA
{
@@ -73,14 +74,16 @@ namespace OpenRA
var t = v.GetType();
// Color.ToString() does the wrong thing; force it to format as an array
// Color.ToString() does the wrong thing; force it to format as rgb[a] hex
if (t == typeof(Color))
{
var c = (Color)v;
return "{0},{1},{2},{3}".F(((int)c.A).Clamp(0, 255),
((int)c.R).Clamp(0, 255),
((int)c.G).Clamp(0, 255),
((int)c.B).Clamp(0, 255));
return HSLColor.ToHexString((Color)v);
}
// HSLColor.ToString() does the wrong thing; force it to format as rgb[a] hex
if (t == typeof(HSLColor))
{
return ((HSLColor)v).ToHexString();
}
if (t == typeof(ImageFormat))

View File

@@ -9,6 +9,7 @@
#endregion
using System.Drawing;
using System.Globalization;
using OpenRA.Scripting;
namespace OpenRA.Graphics
@@ -27,13 +28,17 @@ namespace OpenRA.Graphics
return new HSLColor((byte)(255 * h), (byte)(255 * ss), (byte)(255 * ll));
}
public HSLColor(Color color)
{
RGB = color;
H = (byte)((color.GetHue() / 360.0f) * 255);
S = (byte)(color.GetSaturation() * 255);
L = (byte)(color.GetBrightness() * 255);
}
public static HSLColor FromRGB(int r, int g, int b)
{
var c = Color.FromArgb(r, g, b);
var h = (byte)((c.GetHue() / 360.0f) * 255);
var s = (byte)(c.GetSaturation() * 255);
var l = (byte)(c.GetBrightness() * 255);
return new HSLColor(h, s, l);
return new HSLColor(Color.FromArgb(r, g, b));
}
public static Color RGBFromHSL(float h, float s, float l)
@@ -66,6 +71,27 @@ namespace OpenRA.Graphics
return Color.FromArgb((int)(rgb[0] * 255), (int)(rgb[1] * 255), (int)(rgb[2] * 255));
}
public static bool TryParseRGB(string value, out Color color)
{
color = new Color();
value = value.Trim();
if (value.Length != 6 && value.Length != 8)
return false;
byte red, green, blue, alpha = 255;
if (!byte.TryParse(value.Substring(0, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out red)
|| !byte.TryParse(value.Substring(2, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out green)
|| !byte.TryParse(value.Substring(4, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out blue))
return false;
if (value.Length == 8
&& !byte.TryParse(value.Substring(6, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out alpha))
return false;
color = Color.FromArgb(alpha, red, green, blue);
return true;
}
public static bool operator ==(HSLColor me, HSLColor other)
{
return me.H == other.H && me.S == other.S && me.L == other.L;
@@ -96,6 +122,18 @@ namespace OpenRA.Graphics
return "{0},{1},{2}".F(H, S, L);
}
public static string ToHexString(Color color)
{
if (color.A == 255)
return color.R.ToString("X2") + color.G.ToString("X2") + color.B.ToString("X2");
return color.R.ToString("X2") + color.G.ToString("X2") + color.B.ToString("X2") + color.A.ToString("X2");
}
public string ToHexString()
{
return ToHexString(RGB);
}
public override int GetHashCode() { return H.GetHashCode() ^ S.GetHashCode() ^ L.GetHashCode(); }
public override bool Equals(object obj)

View File

@@ -344,6 +344,54 @@ namespace OpenRA
Visibility = MapVisibility.MissionSelector;
}
// Format 7 -> 8 replaced normalized HSL triples with rgb(a) hex colors
if (MapFormat < 8)
{
var players = yaml.Nodes.FirstOrDefault(n => n.Key == "Players");
if (players != null)
{
bool noteHexColors = false;
bool noteColorRamp = false;
foreach (var player in players.Value.Nodes)
{
var colorRampNode = player.Value.Nodes.FirstOrDefault(n => n.Key == "ColorRamp");
if (colorRampNode != null)
{
Color dummy;
var parts = colorRampNode.Value.Value.Split(',');
if (parts.Length == 3 || parts.Length == 4)
{
// Try to convert old normalized HSL value to a rgb hex color
try
{
HSLColor color = new HSLColor(
(byte)Exts.ParseIntegerInvariant(parts[0].Trim()).Clamp(0, 255),
(byte)Exts.ParseIntegerInvariant(parts[1].Trim()).Clamp(0, 255),
(byte)Exts.ParseIntegerInvariant(parts[2].Trim()).Clamp(0, 255));
colorRampNode.Value.Value = FieldSaver.FormatValue(color);
noteHexColors = true;
}
catch (Exception)
{
throw new InvalidDataException("Invalid ColorRamp value.\n File: " + path);
}
}
else if (parts.Length != 1 || !HSLColor.TryParseRGB(parts[0], out dummy))
throw new InvalidDataException("Invalid ColorRamp value.\n File: " + path);
colorRampNode.Key = "Color";
noteColorRamp = true;
}
}
Console.WriteLine("Converted " + path + " to MapFormat 8.");
if (noteHexColors)
Console.WriteLine("ColorRamp is now called Color and uses rgb(a) hex value - rrggbb[aa].");
else if (noteColorRamp)
Console.WriteLine("ColorRamp is now called Color.");
}
}
SpawnPoints = Exts.Lazy(() =>
{
var spawns = new List<CPos>();
@@ -389,7 +437,7 @@ namespace OpenRA
// The Uid is calculated from the data on-disk, so
// format changes must be flushed to disk.
// TODO: this isn't very nice
if (MapFormat < 7)
if (MapFormat < 8)
Save(path);
Uid = ComputeHash();
@@ -537,7 +585,7 @@ namespace OpenRA
public void Save(string toPath)
{
MapFormat = 7;
MapFormat = 8;
var root = new List<MiniYamlNode>();
var fields = new[]

View File

@@ -28,10 +28,8 @@ namespace OpenRA
public bool LockFaction = false;
public string Faction;
// ColorRamp naming retained for backward compatibility
public bool LockColor = false;
public HSLColor ColorRamp = new HSLColor(0, 0, 238);
public HSLColor Color { get { return ColorRamp; } set { ColorRamp = value; } }
public HSLColor Color = new HSLColor(0, 0, 238);
public bool LockSpawn = false;
public int Spawn = 0;

View File

@@ -543,6 +543,7 @@
<Compile Include="UtilityCommands\UpgradeMapCommand.cs" />
<Compile Include="UtilityCommands\UpgradeModCommand.cs" />
<Compile Include="UtilityCommands\UpgradeRules.cs" />
<Compile Include="UtilityCommands\Rgba2Hex.cs" />
<Compile Include="Warheads\CreateEffectWarhead.cs" />
<Compile Include="Warheads\CreateResourceWarhead.cs" />
<Compile Include="Warheads\DamageWarhead.cs" />

View File

@@ -9,6 +9,7 @@
#endregion
using System.Drawing;
using Eluant;
using OpenRA.Graphics;
using OpenRA.Scripting;
@@ -30,11 +31,59 @@ namespace OpenRA.Mods.Common.Scripting.Global
return new HSLColor(h, s, l);
}
public HSLColor White { get { return HSLColor.FromRGB(Color.White.R, Color.White.G, Color.White.B); } }
public HSLColor Black { get { return HSLColor.FromRGB(Color.Black.R, Color.Black.G, Color.Black.B); } }
public HSLColor Blue { get { return HSLColor.FromRGB(Color.Blue.R, Color.Blue.G, Color.Blue.B); } }
public HSLColor Red { get { return HSLColor.FromRGB(Color.Red.R, Color.Red.G, Color.Red.B); } }
public HSLColor Yellow { get { return HSLColor.FromRGB(Color.Yellow.R, Color.Yellow.G, Color.Yellow.B); } }
public HSLColor Green { get { return HSLColor.FromRGB(Color.Green.R, Color.Green.G, Color.Green.B); } }
[Desc("Create a new HSL color with the specified red/green/blue/[alpha] values.")]
public HSLColor FromRGB(int red, int green, int blue, int alpha = 255)
{
return new HSLColor(
Color.FromArgb(
alpha.Clamp(0, 255), red.Clamp(0, 255), green.Clamp(0, 255), blue.Clamp(0, 255)));
}
[Desc("Create a new HSL color with the specified red/green/blue/[alpha] hex string (rrggbb[aa]).")]
public HSLColor FromHex(string value)
{
Color rgb;
if (HSLColor.TryParseRGB(value, out rgb))
return new HSLColor(rgb);
throw new LuaException("Invalid rrggbb[aa] hex string.");
}
public HSLColor Aqua { get { return new HSLColor(Color.Aqua); } }
public HSLColor Black { get { return new HSLColor(Color.Black); } }
public HSLColor Blue { get { return new HSLColor(Color.Blue); } }
public HSLColor Brown { get { return new HSLColor(Color.Brown); } }
public HSLColor Cyan { get { return new HSLColor(Color.Cyan); } }
public HSLColor DarkBlue { get { return new HSLColor(Color.DarkBlue); } }
public HSLColor DarkCyan { get { return new HSLColor(Color.DarkCyan); } }
public HSLColor DarkGray { get { return new HSLColor(Color.DarkGray); } }
public HSLColor DarkGreen { get { return new HSLColor(Color.DarkGreen); } }
public HSLColor DarkOrange { get { return new HSLColor(Color.DarkOrange); } }
public HSLColor DarkRed { get { return new HSLColor(Color.DarkRed); } }
public HSLColor Fuchsia { get { return new HSLColor(Color.Fuchsia); } }
public HSLColor Gold { get { return new HSLColor(Color.Gold); } }
public HSLColor Gray { get { return new HSLColor(Color.Gray); } }
public HSLColor Green { get { return new HSLColor(Color.Green); } }
public HSLColor LawnGreen { get { return new HSLColor(Color.LawnGreen); } }
public HSLColor LightBlue { get { return new HSLColor(Color.LightBlue); } }
public HSLColor LightCyan { get { return new HSLColor(Color.LightCyan); } }
public HSLColor LightGray { get { return new HSLColor(Color.LightGray); } }
public HSLColor LightGreen { get { return new HSLColor(Color.LightGreen); } }
public HSLColor LightYellow { get { return new HSLColor(Color.LightYellow); } }
public HSLColor Lime { get { return new HSLColor(Color.Lime); } }
public HSLColor LimeGreen { get { return new HSLColor(Color.LimeGreen); } }
public HSLColor Magenta { get { return new HSLColor(Color.Magenta); } }
public HSLColor Maroon { get { return new HSLColor(Color.Maroon); } }
public HSLColor Navy { get { return new HSLColor(Color.Navy); } }
public HSLColor Olive { get { return new HSLColor(Color.Olive); } }
public HSLColor Orange { get { return new HSLColor(Color.Orange); } }
public HSLColor OrangeRed { get { return new HSLColor(Color.OrangeRed); } }
public HSLColor Purple { get { return new HSLColor(Color.Purple); } }
public HSLColor Red { get { return new HSLColor(Color.Red); } }
public HSLColor Salmon { get { return new HSLColor(Color.Salmon); } }
public HSLColor SkyBlue { get { return new HSLColor(Color.SkyBlue); } }
public HSLColor Teal { get { return new HSLColor(Color.Teal); } }
public HSLColor Yellow { get { return new HSLColor(Color.Yellow); } }
public HSLColor White { get { return new HSLColor(Color.White); } }
}
}

View File

@@ -169,7 +169,7 @@ namespace OpenRA.Mods.Common.Server
return false;
}
var mapPlayerColors = server.MapPlayers.Players.Values.Select(p => p.ColorRamp.RGB);
var mapPlayerColors = server.MapPlayers.Players.Values.Select(p => p.Color.RGB);
if (!ValidateColorAgainstForbidden(askedColor, mapPlayerColors, out forbiddenColor))
{

View File

@@ -56,12 +56,12 @@ namespace OpenRA.Mods.Common.Traits
[Desc("The value range that can be swung to the left or right. SwingAmplitude min. and max. value in px/tick.")]
public readonly float[] SwingAmplitude = { 1.0f, 1.5f };
[Desc("The randomly selected ArgbColors for the particles. Use this order: a,r,g,b, a,r,g,b, a,...")]
[Desc("The randomly selected rgb(a) hex colors for the particles. Use this order: rrggbb[aa], rrggbb[aa], ...")]
public readonly Color[] ParticleColors = {
Color.FromArgb(255, 236, 236, 236),
Color.FromArgb(255, 228, 228, 228),
Color.FromArgb(255, 208, 208, 208),
Color.FromArgb(255, 188, 188, 188)
Color.FromArgb(236, 236, 236),
Color.FromArgb(228, 228, 228),
Color.FromArgb(208, 208, 208),
Color.FromArgb(188, 188, 188)
};
[Desc("Works only with line enabled and can get used to fade out the tail of the line like a contrail.")]

View File

@@ -12,6 +12,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenRA.Graphics;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.UtilityCommands
@@ -164,6 +165,9 @@ namespace OpenRA.Mods.Common.UtilityCommands
if (t == typeof(WVec))
return "3D World Vector";
if (t == typeof(HSLColor))
return "Color";
return t.Name;
}
}

View File

@@ -0,0 +1,209 @@
#region Copyright & License Information
/*
* Copyright 2007-2015 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using System;
namespace OpenRA.Mods.Common.UtilityCommands
{
class Rgba2Hex : IUtilityCommand
{
public string Name { get { return "--rgba2hex"; } }
static readonly char[] Comma = new char[] { ',' };
public bool ValidateArguments(string[] args)
{
if (args.Length <= 1)
return PrintUsage();
var invalid = false;
byte component;
for (int i = 1; i < args.Length; i++)
{
var parts = args[i].Split(Comma, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length != 3 && parts.Length != 4)
{
invalid = true;
Console.WriteLine("Invalid color (argument " + i + "): " + args[i]);
}
else
{
foreach (var part in parts)
{
if (!byte.TryParse(part, out component))
{
invalid = true;
Console.WriteLine("Invalid component in color (argument " + i + "): [" + part + "]: " + args[i]);
}
}
}
}
return !invalid || PrintUsage();
}
bool PrintUsage()
{
Console.WriteLine("");
Console.WriteLine("Usage:");
Console.WriteLine("\tOpenRA.Utility.exe [MOD] --rgba2hex r1,g1,b1");
Console.WriteLine("\tOpenRA.Utility.exe [MOD] --rgba2hex r1,g1,b1,a1");
Console.WriteLine("\tOpenRA.Utility.exe [MOD] --rgba2hex r1,g1,b1 r2,g2,b2,a2");
Console.WriteLine("\tOpenRA.Utility.exe [MOD] --rgba2hex r1,g1,b1,a1 r2,g2,b2 ...");
Console.WriteLine("");
Console.WriteLine("\tNo spaces between the color components (red,green,blue[,alpha]).");
Console.WriteLine("\tSpaces between colors for a list; each argument is a color.");
Console.WriteLine("\tExtra commas are ignored.");
Console.WriteLine("");
Console.WriteLine("Where:");
Console.WriteLine("\tr# is a red component value (0-255)");
Console.WriteLine("\tg# is a green component value (0-255)");
Console.WriteLine("\tb# is a blue component value (0-255)");
Console.WriteLine("\ta# is an optional alpha component value (0-255)");
Console.WriteLine("");
return false;
}
[Desc("Convert r,g,b[,a] triples/quads into hex colors")]
public void Run(ModData modData, string[] args)
{
for (int i = 1; i < args.Length;)
{
var parts = args[i].Split(Comma, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length == 3)
{
foreach (var c in parts)
Console.Write(byte.Parse(c).ToString("X2"));
}
else
{
Console.Write(byte.Parse(parts[0]).ToString("X2"));
Console.Write(byte.Parse(parts[1]).ToString("X2"));
Console.Write(byte.Parse(parts[2]).ToString("X2"));
var alpha = byte.Parse(parts[3]);
if (alpha < 255)
Console.Write(alpha.ToString("X2"));
}
if (++i != args.Length)
Console.Write(", ");
else
Console.WriteLine();
}
}
}
class Argb2Hex : IUtilityCommand
{
public string Name { get { return "--argb2hex"; } }
static readonly char[] Comma = new char[] { ',' };
public bool ValidateArguments(string[] args)
{
if (args.Length <= 1)
return PrintUsage();
var invalid = false;
byte component;
for (int i = 1; i < args.Length; i++)
{
var parts = args[i].Split(Comma, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length != 3 && parts.Length != 4)
{
invalid = true;
Console.WriteLine("Invalid color (argument " + i + "): " + args[i]);
}
else
{
foreach (var part in parts)
{
if (!byte.TryParse(part, out component))
{
invalid = true;
Console.WriteLine("Invalid component in color (argument " + i + "): [" + part + "]: " + args[i]);
}
}
}
}
return !invalid || PrintUsage();
}
bool PrintUsage()
{
Console.WriteLine("");
Console.WriteLine("Usage:");
Console.WriteLine("\tOpenRA.Utility.exe [MOD] --argb2hex a1,r1,g1,b1");
Console.WriteLine("\tOpenRA.Utility.exe [MOD] --argb2hex r1,g1,b1");
Console.WriteLine("\tOpenRA.Utility.exe [MOD] --argb2hex a1,r1,g1,b1 a2,r2,g2,b2");
Console.WriteLine("\tOpenRA.Utility.exe [MOD] --argb2hex a1,r1,g1,b1, a2,r2,g2,b2");
Console.WriteLine("\tOpenRA.Utility.exe [MOD] --argb2hex a1,r1,g1,b1 a2,r2,g2,b2 ...");
Console.WriteLine("");
Console.WriteLine("\tNo spaces between color components ([alpha,]red,green,blue).");
Console.WriteLine("\tSpaces between colors for a list; each argument is a color.");
Console.WriteLine("\tExtra commas are ignored; useful for pasting legacy color lists to the command line.");
Console.WriteLine("");
Console.WriteLine("Where:");
Console.WriteLine("\ta# is an optional alpha component value (0-255)");
Console.WriteLine("\tr# is a red component value (0-255)");
Console.WriteLine("\tg# is a green component value (0-255)");
Console.WriteLine("\tb# is a blue component value (0-255)");
Console.WriteLine("\t[MOD] is any valid mod such as \"all\"");
Console.WriteLine("");
Console.WriteLine("Converting legacy color lists:");
Console.WriteLine("\tType into command line: OpenRA.Utility.exe all --argb2hex ");
Console.WriteLine("\tFollow with a space.");
Console.WriteLine("\tCopy legacy color list and paste into command line");
Console.WriteLine("\t1.) Copying from command line terminal:");
Console.WriteLine("\t\tPress Enter in command line terminal.");
Console.WriteLine("\t\tCopy hex color list from command line terminal.");
Console.WriteLine("\t2.) Append to file");
Console.WriteLine("\t\tSave any unsaved changes to file.");
Console.WriteLine("\t\tEnter \">>\" into command line terminal without the quotes.");
Console.WriteLine("\t\tEnter relative or absolute path follow by a \"/\" to file directory if it is not the current directory.");
Console.WriteLine("\t\tEnter full filename with extension.");
Console.WriteLine("\t\tPress Enter.");
Console.WriteLine("\t\tOpen/reload file");
Console.WriteLine("");
Console.WriteLine("");
return false;
}
[Desc("Convert a,r,g,b legacy colors into hex colors")]
public void Run(ModData modData, string[] args)
{
for (int i = 1; i < args.Length;)
{
var parts = args[i].Split(Comma, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length == 3)
{
foreach (var c in parts)
Console.Write(byte.Parse(c).ToString("X2"));
}
else
{
Console.Write(byte.Parse(parts[1]).ToString("X2"));
Console.Write(byte.Parse(parts[2]).ToString("X2"));
Console.Write(byte.Parse(parts[3]).ToString("X2"));
var alpha = byte.Parse(parts[0]);
if (alpha < 255)
Console.Write(alpha.ToString("X2"));
}
if (++i != args.Length)
Console.Write(", ");
else
Console.WriteLine();
}
}
}
}

View File

@@ -76,6 +76,28 @@ namespace OpenRA.Mods.Common.UtilityCommands
file.WriteLine(yaml.WriteToString());
}
Console.WriteLine("Processing Chrome Metrics:");
foreach (var filename in Game.ModData.Manifest.ChromeMetrics)
{
Console.WriteLine("\t" + filename);
var yaml = MiniYaml.FromFile(filename);
UpgradeRules.UpgradeChromeMetrics(engineDate, ref yaml, null, 0);
using (var file = new StreamWriter(filename))
file.WriteLine(yaml.WriteToString());
}
Console.WriteLine("Processing Chrome Layout:");
foreach (var filename in Game.ModData.Manifest.ChromeLayout)
{
Console.WriteLine("\t" + filename);
var yaml = MiniYaml.FromFile(filename);
UpgradeRules.UpgradeChromeLayout(engineDate, ref yaml, null, 0);
using (var file = new StreamWriter(filename))
file.WriteLine(yaml.WriteToString());
}
Console.WriteLine("Processing Maps:");
var maps = Game.ModData.MapCache
.Where(m => m.Status == MapStatus.Available)

View File

@@ -10,8 +10,10 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.Linq;
using OpenRA.Graphics;
namespace OpenRA.Mods.Common.UtilityCommands
{
@@ -148,6 +150,72 @@ namespace OpenRA.Mods.Common.UtilityCommands
}
}
internal static void TryUpdateColor(ref string value)
{
if (value.Length == 0)
return;
try
{
var parts = value.Split(',');
if (parts.Length == 3)
value = FieldSaver.FormatValue(Color.FromArgb(
Exts.ParseIntegerInvariant(parts[0]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[1]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[2]).Clamp(0, 255)));
else if (parts.Length == 4)
value = FieldSaver.FormatValue(Color.FromArgb(
Exts.ParseIntegerInvariant(parts[0]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[1]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[2]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[3]).Clamp(0, 255)));
}
catch { }
}
internal static void TryUpdateColors(ref string value)
{
if (value.Length == 0)
return;
try
{
var parts = value.Split(',');
if (parts.Length % 4 != 0)
return;
var colors = new Color[parts.Length / 4];
for (var i = 0; i < colors.Length; i++)
{
colors[i] = Color.FromArgb(
Exts.ParseIntegerInvariant(parts[4 * i]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[4 * i + 1]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[4 * i + 2]).Clamp(0, 255),
Exts.ParseIntegerInvariant(parts[4 * i + 3]).Clamp(0, 255));
}
value = FieldSaver.FormatValue(colors);
}
catch { }
}
internal static void TryUpdateHSLColor(ref string value)
{
if (value.Length == 0)
return;
try
{
var parts = value.Split(',');
if (parts.Length == 3 || parts.Length == 4)
value = FieldSaver.FormatValue(new HSLColor(
(byte)Exts.ParseIntegerInvariant(parts[0]).Clamp(0, 255),
(byte)Exts.ParseIntegerInvariant(parts[1]).Clamp(0, 255),
(byte)Exts.ParseIntegerInvariant(parts[2]).Clamp(0, 255)));
}
catch { }
}
internal static void UpgradeActorRules(int engineVersion, ref List<MiniYamlNode> nodes, MiniYamlNode parent, int depth)
{
var parentKey = parent != null ? parent.Key.Split('@').First() : null;
@@ -2277,6 +2345,21 @@ namespace OpenRA.Mods.Common.UtilityCommands
}
}
if (engineVersion < 20151027 && depth == 2)
{
if (node.Key == "Color")
{
if (parent.Key.StartsWith("FixedColorPalette"))
TryUpdateHSLColor(ref node.Value.Value);
else
TryUpdateColor(ref node.Value.Value);
}
else if (node.Key == "RadarPingColor" || node.Key == "SelectionBoxColor" || node.Key == "BarColor")
TryUpdateColor(ref node.Value.Value);
else if (node.Key == "Fog" || node.Key == "Shroud" || node.Key == "ParticleColors")
TryUpdateColors(ref node.Value.Value);
}
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
}
}
@@ -2764,6 +2847,12 @@ namespace OpenRA.Mods.Common.UtilityCommands
node.Key = "TrailImage";
}
if (engineVersion < 20151027)
{
if (node.Key == "Color" || node.Key == "ContrailColor")
TryUpdateColor(ref node.Value.Value);
}
UpgradeWeaponRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
}
}
@@ -2785,6 +2874,14 @@ namespace OpenRA.Mods.Common.UtilityCommands
if (depth == 2 && node.Key == "Image")
node.Key = "Images";
if (engineVersion < 20151027)
{
if (node.Key == "LeftColor" || node.Key == "RightColor" || node.Key == "Color")
TryUpdateColor(ref node.Value.Value);
else if (node.Key == "HeightDebugColors")
TryUpdateColors(ref node.Value.Value);
}
UpgradeTileset(engineVersion, ref node.Value.Nodes, node, depth + 1);
}
@@ -2829,10 +2926,49 @@ namespace OpenRA.Mods.Common.UtilityCommands
lockRace.Key = "LockFaction";
}
if (engineVersion < 20151027 && node.Key == "ColorRamp")
{
TryUpdateHSLColor(ref node.Value.Value);
node.Key = "Color";
}
UpgradePlayers(engineVersion, ref node.Value.Nodes, node, depth + 1);
}
}
internal static void UpgradeChromeMetrics(int engineVersion, ref List<MiniYamlNode> nodes, MiniYamlNode parent, int depth)
{
foreach (var node in nodes)
{
if (engineVersion < 20151027)
{
if (node.Key.EndsWith("Color") || node.Key.EndsWith("ColorDisabled") || node.Key.EndsWith("ColorInvalid"))
TryUpdateColor(ref node.Value.Value);
}
UpgradeChromeMetrics(engineVersion, ref node.Value.Nodes, node, depth + 1);
}
}
internal static void UpgradeChromeLayout(int engineVersion, ref List<MiniYamlNode> nodes, MiniYamlNode parent, int depth)
{
foreach (var node in nodes)
{
if (engineVersion < 20151027)
{
if (node.Key == "Color" || node.Key == "ReadyTextAltColor" || node.Key == "TextColor" || node.Key == "TextColorDisabled")
{
if (parent.Key.StartsWith("MapPreview@"))
TryUpdateHSLColor(ref node.Value.Value);
else
TryUpdateColor(ref node.Value.Value);
}
}
UpgradeChromeLayout(engineVersion, ref node.Value.Nodes, node, depth + 1);
}
}
internal static void UpgradeActors(int engineVersion, ref List<MiniYamlNode> nodes, MiniYamlNode parent, int depth)
{
foreach (var node in nodes)

View File

@@ -40,4 +40,5 @@ Container@MISSION_OBJECTIVES:
Width: PARENT_RIGHT - 100
Height: PARENT_BOTTOM
Disabled: True
TextColorDisabled: 255,255,255
TextColorDisabled: FFFFFF

View File

@@ -1,5 +1,5 @@
Container@SKIRMISH_STATS:
Height: PARENT_BOTTOM
Height: PARENT_BOTTOM
Width: PARENT_RIGHT
Logic: GameInfoStatsLogic
Children:
@@ -24,7 +24,7 @@ Container@SKIRMISH_STATS:
Font: Bold
Text: Destroy all opposition!
Disabled: yes
TextColorDisabled: 255,255,255
TextColorDisabled: FFFFFF
Container@STATS_HEADERS:
X: 17
Y: 80

View File

@@ -76,7 +76,7 @@ ScrollPanel@MULTIPLAYER_FILTER_PANEL:
Width: 137
Height: 20
Text: Waiting
TextColor: 50,205,50
TextColor: 32CD32
Font: Regular
Checkbox@EMPTY:
X: 5
@@ -91,7 +91,7 @@ ScrollPanel@MULTIPLAYER_FILTER_PANEL:
Width: 137
Height: 20
Text: Protected
TextColor: 255,0,0
TextColor: FF0000
Font: Regular
Checkbox@ALREADY_STARTED:
X: 5
@@ -99,7 +99,7 @@ ScrollPanel@MULTIPLAYER_FILTER_PANEL:
Width: 137
Height: 20
Text: Started
TextColor: 255,165,0
TextColor: FFA500
Font: Regular
Checkbox@INCOMPATIBLE_VERSION:
X: 5
@@ -107,5 +107,6 @@ ScrollPanel@MULTIPLAYER_FILTER_PANEL:
Width: 137
Height: 20
Text: Incompatible
TextColor: 190,190,190
Font: Regular
TextColor: BEBEBE
Font: Regular

View File

@@ -19,7 +19,7 @@ Background@BUTTON_TOOLTIP:
Font: Bold
Label@HOTKEY:
Visible: false
TextColor: 255,255,0
TextColor: FFFF00
Height: 23
Font: Bold
@@ -64,7 +64,7 @@ Background@PRODUCTION_TOOLTIP:
Label@HOTKEY:
Visible: false
Height: 23
TextColor: 255,255,0
TextColor: FFFF00
Font: Bold
Label@REQUIRES:
X: 5
@@ -119,7 +119,7 @@ Background@SUPPORT_POWER_TOOLTIP:
Label@HOTKEY:
Visible: false
Height: 20
TextColor: 255,255,0
TextColor: FFFF00
Font: Bold
Label@TIME:
Y: 6
@@ -207,3 +207,4 @@ Background@FACTION_DESCRIPTION_TOOLTIP:
Height: 14
Font: TinyBold
VAlign: Top

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.

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -38,7 +38,7 @@ Players:
PlayerReference@Nod:
Name: Nod
Faction: nod
ColorRamp: 3,255,127
Color: FE1100
Allies: Nod
Enemies: GDI
PlayerReference@GDI:
@@ -49,7 +49,7 @@ Players:
LockFaction: True
Faction: gdi
LockColor: True
ColorRamp: 31,222,183
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI

Binary file not shown.

Binary file not shown.

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -49,7 +49,7 @@ Players:
Name: Dinosaur
NonCombatant: True
Faction: gdi
ColorRamp: 14,119,96
Color: 8C5033
Enemies: Nod, Civilian
PlayerReference@Nod:
Name: Nod
@@ -59,7 +59,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Allies: Nod

Binary file not shown.

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -40,7 +40,7 @@ Players:
PlayerReference@Nod:
Name: Nod
Faction: nod
ColorRamp: 3,255,127
Color: FE1100
Allies: Nod
Enemies: GDI
PlayerReference@GDI:
@@ -51,7 +51,7 @@ Players:
LockFaction: True
Faction: gdi
LockColor: True
ColorRamp: 31,222,183
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -43,7 +43,7 @@ Players:
LockFaction: True
Faction: gdi
LockColor: True
ColorRamp: 31,222,183
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI
@@ -51,7 +51,7 @@ Players:
PlayerReference@Nod:
Name: Nod
Faction: nod
ColorRamp: 3,255,127
Color: FE1100
Allies: Nod
Enemies: GDI
PlayerReference@Neutral:

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -39,7 +39,7 @@ Players:
PlayerReference@Nod:
Name: Nod
Faction: nod
ColorRamp: 3,255,127
Color: FE1100
Allies: Nod
Enemies: GDI
PlayerReference@Neutral:
@@ -55,7 +55,7 @@ Players:
LockFaction: True
Faction: gdi
LockColor: True
ColorRamp: 31,222,183
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -40,7 +40,7 @@ Players:
PlayerReference@Nod:
Name: Nod
Faction: nod
ColorRamp: 3,255,127
Color: FE1100
Allies: Nod
Enemies: GDI
PlayerReference@GDI:
@@ -51,7 +51,7 @@ Players:
LockFaction: True
Faction: gdi
LockColor: True
ColorRamp: 31,222,183
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -40,7 +40,7 @@ Players:
PlayerReference@Nod:
Name: Nod
Faction: nod
ColorRamp: 3,255,127
Color: FE1100
Allies: Nod
Enemies: GDI
PlayerReference@GDI:
@@ -51,7 +51,7 @@ Players:
LockFaction: True
Faction: gdi
LockColor: True
ColorRamp: 31,222,183
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -45,7 +45,7 @@ Players:
PlayerReference@Nod:
Name: Nod
Faction: nod
ColorRamp: 3,255,127
Color: FE1100
Allies: Nod
Enemies: GDI, Civillians
PlayerReference@GDI:
@@ -56,7 +56,7 @@ Players:
LockFaction: True
Faction: gdi
LockColor: True
ColorRamp: 31,222,183
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -41,7 +41,7 @@ Players:
PlayerReference@Nod:
Name: Nod
Faction: nod
ColorRamp: 3,255,127
Color: FE1100
Allies: Nod
Enemies: GDI
PlayerReference@GDI:
@@ -52,7 +52,7 @@ Players:
LockFaction: True
Faction: gdi
LockColor: True
ColorRamp: 31,222,183
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI
@@ -60,7 +60,7 @@ Players:
PlayerReference@AbandonedBase:
Name: AbandonedBase
NonCombatant: True
ColorRamp: 31,222,183
Color: F5D378
Faction: gdi
PlayerReference@Neutral:
Name: Neutral

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -40,7 +40,7 @@ Players:
PlayerReference@Nod:
Name: Nod
Faction: nod
ColorRamp: 3,255,127
Color: FE1100
Enemies: GDI, AbandonedBase
PlayerReference@GDI:
Name: GDI
@@ -50,7 +50,7 @@ Players:
LockFaction: True
Faction: gdi
LockColor: True
ColorRamp: 31,222,183
Color: F5D378
LockSpawn: True
LockTeam: True
Enemies: Nod
@@ -59,12 +59,12 @@ Players:
OwnsWorld: True
NonCombatant: True
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
PlayerReference@AbandonedBase:
Name: AbandonedBase
NonCombatant: True
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Enemies: Nod
Actors:

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -24,10 +24,6 @@ Videos:
GameWon: sabotage.vqa
GameLost: gdilose.vqa
Music:
rain-ambient: Rain (ambient)
Hidden: true
Options:
Crates: False
Creeps: False
@@ -50,7 +46,7 @@ Players:
PlayerReference@Nod:
Name: Nod
Faction: nod
ColorRamp: 3,255,127
Color: FE1100
Allies: Nod
Enemies: GDI
PlayerReference@GDI:
@@ -61,7 +57,7 @@ Players:
LockFaction: True
Faction: gdi
LockColor: True
ColorRamp: 31,222,183
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI
@@ -1066,7 +1062,7 @@ Rules:
SwingOffset: 0, 0
SwingSpeed: 0, 0
SwingAmplitude: 0, 0
ParticleColors: 255,48,64,116, 255,40,56,108, 255,32,44,96, 255,24,44,84
ParticleColors: 304074, 28386C, 202C60, 182C54
LineTailAlphaValue: 150
GlobalLightingPaletteEffect:
Red: 0.75
@@ -1165,6 +1161,10 @@ Weapons:
Voices:
Music:
rain-ambient: Rain (ambient)
Hidden: true
Notifications:
Translations:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -47,7 +47,7 @@ Players:
PlayerReference@GDI:
Name: GDI
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Allies: Villagers
Enemies: Nod
PlayerReference@Nod:
@@ -58,7 +58,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Enemies: GDI, Villagers

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -39,7 +39,7 @@ Players:
PlayerReference@GDI:
Name: GDI
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Enemies: Nod
PlayerReference@Nod:
Name: Nod
@@ -49,7 +49,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Enemies: GDI

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -39,7 +39,7 @@ Players:
PlayerReference@GDI:
Name: GDI
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Allies: GDI
Enemies: Nod
PlayerReference@Nod:
@@ -50,7 +50,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Enemies: GDI

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -44,7 +44,7 @@ Players:
PlayerReference@GDI:
Name: GDI
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Allies: GDI
Enemies: Nod
PlayerReference@Nod:
@@ -55,7 +55,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Allies: Nod

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -44,7 +44,7 @@ Players:
PlayerReference@GDI:
Name: GDI
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Allies: GDI
Enemies: Nod
PlayerReference@Nod:
@@ -55,7 +55,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Allies: Nod

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -47,7 +47,7 @@ Players:
PlayerReference@GDI:
Name: GDI
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Enemies: Nod
PlayerReference@Nod:
Name: Nod
@@ -57,7 +57,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Enemies: GDI

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -37,7 +37,7 @@ Players:
PlayerReference@GDI:
Name: GDI
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Enemies: Nod
PlayerReference@Neutral:
Name: Neutral
@@ -52,7 +52,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Enemies: GDI

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -40,7 +40,7 @@ Players:
PlayerReference@GDI:
Name: GDI
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Allies: GDI
Enemies: Nod
PlayerReference@Neutral:
@@ -56,7 +56,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Allies: Nod

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -44,7 +44,7 @@ Players:
Name: GDI
Playable: False
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Enemies: Nod
PlayerReference@Nod:
Name: Nod
@@ -54,7 +54,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Enemies: GDI

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -39,7 +39,7 @@ Players:
Name: GDI
Playable: False
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Enemies: Nod
PlayerReference@Neutral:
Name: Neutral
@@ -59,7 +59,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Enemies: GDI, Civilians

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -39,7 +39,7 @@ Players:
Name: GDI
Playable: False
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Enemies: Nod
PlayerReference@Nod:
Name: Nod
@@ -49,7 +49,7 @@ Players:
LockFaction: True
Faction: nod
LockColor: True
ColorRamp: 3,255,127
Color: FE1100
LockSpawn: True
LockTeam: True
Enemies: GDI

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc
@@ -26,13 +26,13 @@ Players:
PlayerReference@Nod:
Name: Nod
Faction: nod
ColorRamp: 3,255,127
Color: FE1100
Allies: Nod
Enemies: GDI, Creeps
PlayerReference@GDI:
Name: GDI
Faction: gdi
ColorRamp: 31,222,183
Color: F5D378
Allies: GDI
Enemies: Nod, Creeps
PlayerReference@Neutral:

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: cnc

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -3,36 +3,37 @@
Metrics:
ButtonDepth: 0
ButtonFont: Bold
ButtonTextColor: 255,255,255
ButtonTextColorDisabled: 128,128,128
ButtonTextColor: FFFFFF
ButtonTextColorDisabled: 808080
ButtonTextContrast: false
ButtonTextContrastColor: 0,0,0
ButtonTextContrastColor: 000000
ButtonBaseLine: 0
CheckboxPressedState: true
HotkeyFont: Regular
HotkeyColor: 255,255,255
HotkeyColorDisabled: 128,128,128
HotkeyColor: FFFFFF
HotkeyColorDisabled: 808080
TextfieldFont: Regular
TextfieldColor: 255,255,255
TextfieldColorDisabled: 128,128,128
TextfieldColorInvalid: 255,192,192
TextfieldColor: FFFFFF
TextfieldColorDisabled: 808080
TextfieldColorInvalid: FFC0C0
TextFont: Regular
TextColor: 255,255,255
TextColor: FFFFFF
TextContrast: false
TextContrastColor: 0,0,0
TextContrastColor: 000000
ColorPickerRemapIndices: 176, 178, 180, 182, 184, 186, 189, 191, 177, 179, 181, 183, 185, 187, 188, 190
ColorPickerActorType: ^fact.colorpicker
SpawnFont: TinyBold
SpawnColor: 255,255,255
SpawnContrastColor: 0,0,0
SpawnColor: FFFFFF
SpawnContrastColor: 000000
SpawnLabelOffset: 0,1
IncompatibleVersionColor: 255,0,0
IncompatibleGameColor: 169,169,169
ProtectedGameColor: 255,0,0
IncompatibleProtectedGameColor: 139,0,0
WaitingGameColor: 0,255,0
IncompatibleWaitingGameColor: 50,205,50
GameStartedColor: 255,165,0
IncompatibleGameStartedColor: 210,105,30
GlobalChatTextColor: 255,255,255
GlobalChatNotificationColor: 211,211,211
IncompatibleVersionColor: FF0000
IncompatibleGameColor: A9A9A9
ProtectedGameColor: FF0000
IncompatibleProtectedGameColor: 8B0000
WaitingGameColor: 00FF00
IncompatibleWaitingGameColor: 32CD32
GameStartedColor: FFA500
IncompatibleGameStartedColor: D2691E
GlobalChatTextColor: FFFFFF
GlobalChatNotificationColor: D3D3D3

View File

@@ -62,7 +62,7 @@
FixedColorPalette@BlueTiberium:
Base: terrain
Name: bluetiberium
Color: 152, 255, 196
Color: 89BAFF
RemapIndex: 176, 178, 180, 182, 184, 186, 189, 191, 177, 179, 181, 183, 185, 187, 188, 190
PlayerColorPalette:
BasePalette: terrain

View File

@@ -8,54 +8,54 @@ Terrain:
TerrainType@Beach:
Type: Beach
TargetTypes: Ground
Color: 255,176,156,120
Color: B09C78
TerrainType@BlueTiberium:
Type: BlueTiberium
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,84,252,252
Color: 54FCFC
TerrainType@Clear:
Type: Clear
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,134,95,69
Color: 865F45
TerrainType@River:
Type: River
TargetTypes: Ground
Color: 255,111,132,139
Color: 6F848B
TerrainType@Road:
Type: Road
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,168,123,83
Color: A87B53
TerrainType@Rock:
Type: Rock
TargetTypes: Ground
Color: 255,116,90,63
Color: 745A3F
TerrainType@Rough:
Type: Rough
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,68,68,60
Color: 44443C
TerrainType@Tiberium:
Type: Tiberium
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,161,226,28
Color: A1E21C
TerrainType@Tree:
Type: Tree
TargetTypes: Ground
Color: 255,28,32,36
Color: 1C2024
TerrainType@Wall:
Type: Wall
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,208,192,160
Color: D0C0A0
TerrainType@Water:
Type: Water
TargetTypes: Water
IsWater: True
Color: 255,93,165,206
Color: 5DA5CE
Templates:
Template@255:

View File

@@ -8,54 +8,54 @@ Terrain:
TerrainType@Beach:
Type: Beach
TargetTypes: Ground
Color: 255,176,156,120
Color: B09C78
TerrainType@BlueTiberium:
Type: BlueTiberium
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,84,252,252
Color: 54FCFC
TerrainType@Clear:
Type: Clear
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,40,92,48
Color: 285C30
TerrainType@River:
Type: River
TargetTypes: Ground
Color: 255,92,140,180
Color: 5C8CB4
TerrainType@Road:
Type: Road
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,84,64,49
Color: 544031
TerrainType@Rock:
Type: Rock
TargetTypes: Ground
Color: 255,191,199,196
Color: BFC7C4
TerrainType@Rough:
Type: Rough
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,68,68,60
Color: 44443C
TerrainType@Tiberium:
Type: Tiberium
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,161,226,28
Color: A1E21C
TerrainType@Tree:
Type: Tree
TargetTypes: Ground
Color: 255,28,32,36
Color: 1C2024
TerrainType@Wall:
Type: Wall
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,208,192,160
Color: D0C0A0
TerrainType@Water:
Type: Water
TargetTypes: Water
IsWater: True
Color: 255,92,116,164
Color: 5C74A4
Templates:
Template@255:

View File

@@ -8,54 +8,54 @@ Terrain:
TerrainType@Beach:
Type: Beach
TargetTypes: Ground
Color: 255,176,156,120
Color: B09C78
TerrainType@BlueTiberium:
Type: BlueTiberium
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,84,252,252
Color: 54FCFC
TerrainType@Clear:
Type: Clear
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,196,196,196
Color: C4C4C4
TerrainType@River:
Type: River
TargetTypes: Ground
Color: 255,92,140,180
Color: 5C8CB4
TerrainType@Road:
Type: Road
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,88,116,116
Color: 587474
TerrainType@Rock:
Type: Rock
TargetTypes: Ground
Color: 255,68,68,60
Color: 44443C
TerrainType@Rough:
Type: Rough
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,68,68,60
Color: 44443C
TerrainType@Tiberium:
Type: Tiberium
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,161,226,28
Color: A1E21C
TerrainType@Tree:
Type: Tree
TargetTypes: Ground
Color: 255,28,32,36
Color: 1C2024
TerrainType@Wall:
Type: Wall
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,208,192,160
Color: D0C0A0
TerrainType@Water:
Type: Water
TargetTypes: Water
IsWater: True
Color: 255,92,116,164
Color: 5C74A4
Templates:
Template@255:

View File

@@ -8,54 +8,54 @@ Terrain:
TerrainType@Beach:
Type: Beach
TargetTypes: Ground
Color: 255,176,156,120
Color: B09C78
TerrainType@BlueTiberium:
Type: BlueTiberium
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,84,252,252
Color: 54FCFC
TerrainType@Clear:
Type: Clear
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,40,68,40
Color: 284428
TerrainType@River:
Type: River
TargetTypes: Ground
Color: 255,92,140,180
Color: 5C8CB4
TerrainType@Road:
Type: Road
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,88,116,116
Color: 587474
TerrainType@Rock:
Type: Rock
TargetTypes: Ground
Color: 255,68,68,60
Color: 44443C
TerrainType@Rough:
Type: Rough
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,68,68,60
Color: 44443C
TerrainType@Tiberium:
Type: Tiberium
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,161,226,28
Color: A1E21C
TerrainType@Tree:
Type: Tree
TargetTypes: Ground
Color: 255,28,32,36
Color: 1C2024
TerrainType@Wall:
Type: Wall
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,208,192,160
Color: D0C0A0
TerrainType@Water:
Type: Water
TargetTypes: Water
IsWater: True
Color: 255,92,116,164
Color: 5C74A4
Templates:
Template@255:

View File

@@ -8,54 +8,54 @@ Terrain:
TerrainType@Beach:
Type: Beach
TargetTypes: Ground
Color: 255,176,156,120
Color: B09C78
TerrainType@BlueTiberium:
Type: BlueTiberium
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,84,252,252
Color: 54FCFC
TerrainType@Clear:
Type: Clear
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,40,68,40
Color: 284428
TerrainType@River:
Type: River
TargetTypes: Ground
Color: 255,92,140,180
Color: 5C8CB4
TerrainType@Road:
Type: Road
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,88,116,116
Color: 587474
TerrainType@Rock:
Type: Rock
TargetTypes: Ground
Color: 255,68,68,60
Color: 44443C
TerrainType@Rough:
Type: Rough
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,68,68,60
Color: 44443C
TerrainType@Tiberium:
Type: Tiberium
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,161,226,28
Color: A1E21C
TerrainType@Tree:
Type: Tree
TargetTypes: Ground
Color: 255,28,32,36
Color: 1C2024
TerrainType@Wall:
Type: Wall
TargetTypes: Ground
AcceptsSmudgeType: Crater, Scorch
Color: 255,208,192,160
Color: D0C0A0
TerrainType@Water:
Type: Water
TargetTypes: Water
IsWater: True
Color: 255,92,116,164
Color: 5C74A4
Templates:
Template@255:

View File

@@ -1,5 +1,5 @@
Container@SKIRMISH_STATS:
Height: PARENT_BOTTOM
Height: PARENT_BOTTOM
Width: PARENT_RIGHT
Logic: GameInfoStatsLogic
Children:
@@ -24,7 +24,7 @@ Container@SKIRMISH_STATS:
Font: Bold
Text: Destroy all opposition!
Disabled: yes
TextColorDisabled: 255,255,255
TextColorDisabled: FFFFFF
Container@STATS_HEADERS:
X: 22
Y: 80

View File

@@ -23,7 +23,7 @@ Background@BUTTON_TOOLTIP:
Visible: false
Y: 3
Height: 23
TextColor: 255,255,0
TextColor: FFFF00
Font: Bold
Background@WORLD_TOOLTIP:
@@ -128,7 +128,7 @@ Background@PRODUCTION_TOOLTIP:
Visible: false
Y: 2
Height: 23
TextColor: 255,255,0
TextColor: FFFF00
Font: Bold
Label@REQUIRES:
X: 7
@@ -185,7 +185,7 @@ Background@SUPPORT_POWER_TOOLTIP:
Visible: false
Y: 2
Height: 23
TextColor: 255,255,0
TextColor: FFFF00
Font: Bold
Label@TIME:
Y: 9
@@ -215,3 +215,4 @@ Background@FACTION_DESCRIPTION_TOOLTIP:
Height: 14
Font: TinyBold
VAlign: Top

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: d2k
@@ -50,14 +50,14 @@ Players:
Playable: true
Faction: atreides
LockFaction: true
ColorRamp: 170,255,200
Color: 9191FF
LockColor: true
Enemies: Harkonnen, Creeps
PlayerReference@Harkonnen:
Name: Harkonnen
Faction: harkonnen
LockFaction: true
ColorRamp: 0,255,127
Color: FE0000
LockColor: true
Enemies: Atreides, Creeps

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: d2k
@@ -50,14 +50,14 @@ Players:
Playable: true
Faction: atreides
LockFaction: true
ColorRamp: 170,255,200
Color: 9191FF
LockColor: true
Enemies: Harkonnen, Creeps
PlayerReference@Harkonnen:
Name: Harkonnen
Faction: harkonnen
LockFaction: true
ColorRamp: 0,255,127
Color: FE0000
LockColor: true
Enemies: Atreides, Creeps

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: d2k
@@ -49,14 +49,14 @@ Players:
LockFaction: True
Faction: atreides
LockColor: True
ColorRamp: 170,255,200
Color: 9191FF
Enemies: Harkonnen, Creeps
PlayerReference@Harkonnen:
Name: Harkonnen
LockFaction: True
Faction: harkonnen
LockColor: True
ColorRamp: 0,255,127
Color: FE0000
Enemies: Atreides, Creeps
Actors:

View File

@@ -1,4 +1,4 @@
MapFormat: 7
MapFormat: 8
RequiresMod: d2k
@@ -49,14 +49,14 @@ Players:
LockFaction: True
Faction: atreides
LockColor: True
ColorRamp: 170,255,200
Color: 9191FF
Enemies: Harkonnen, Creeps
PlayerReference@Harkonnen:
Name: Harkonnen
LockFaction: True
Faction: harkonnen
LockColor: True
ColorRamp: 0,255,127
Color: FE0000
Enemies: Atreides, Creeps
Actors:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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