Merge pull request #10703 from pchote/explicitpackages
Unify filesystem package syntax.
This commit is contained in:
@@ -21,6 +21,8 @@ namespace OpenRA.FileSystem
|
|||||||
{
|
{
|
||||||
public IEnumerable<IReadOnlyPackage> MountedPackages { get { return mountedPackages.Keys; } }
|
public IEnumerable<IReadOnlyPackage> MountedPackages { get { return mountedPackages.Keys; } }
|
||||||
readonly Dictionary<IReadOnlyPackage, int> mountedPackages = new Dictionary<IReadOnlyPackage, int>();
|
readonly Dictionary<IReadOnlyPackage, int> mountedPackages = new Dictionary<IReadOnlyPackage, int>();
|
||||||
|
readonly Dictionary<string, IReadOnlyPackage> explicitMounts = new Dictionary<string, IReadOnlyPackage>();
|
||||||
|
|
||||||
Cache<string, List<IReadOnlyPackage>> fileIndex = new Cache<string, List<IReadOnlyPackage>>(_ => new List<IReadOnlyPackage>());
|
Cache<string, List<IReadOnlyPackage>> fileIndex = new Cache<string, List<IReadOnlyPackage>>(_ => new List<IReadOnlyPackage>());
|
||||||
|
|
||||||
public IReadWritePackage CreatePackage(string filename, Dictionary<string, byte[]> content)
|
public IReadWritePackage CreatePackage(string filename, Dictionary<string, byte[]> content)
|
||||||
@@ -54,7 +56,13 @@ namespace OpenRA.FileSystem
|
|||||||
if (filename.EndsWith(".hdr", StringComparison.InvariantCultureIgnoreCase))
|
if (filename.EndsWith(".hdr", StringComparison.InvariantCultureIgnoreCase))
|
||||||
return new InstallShieldCABExtractor(this, filename);
|
return new InstallShieldCABExtractor(this, filename);
|
||||||
|
|
||||||
return new Folder(filename);
|
IReadOnlyPackage parent;
|
||||||
|
string subPath = null;
|
||||||
|
if (TryGetPackageContaining(filename, out parent, out subPath))
|
||||||
|
if (parent is Folder)
|
||||||
|
return new Folder(Path.Combine(((Folder)parent).Name, subPath));
|
||||||
|
|
||||||
|
return new Folder(Platform.ResolvePath(filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
public IReadWritePackage OpenWritablePackage(string filename)
|
public IReadWritePackage OpenWritablePackage(string filename)
|
||||||
@@ -67,23 +75,27 @@ namespace OpenRA.FileSystem
|
|||||||
return new Folder(filename);
|
return new Folder(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Mount(string name)
|
public void Mount(string name, string explicitName = null)
|
||||||
{
|
{
|
||||||
var optional = name.StartsWith("~");
|
var optional = name.StartsWith("~");
|
||||||
if (optional)
|
if (optional)
|
||||||
name = name.Substring(1);
|
name = name.Substring(1);
|
||||||
|
|
||||||
name = Platform.ResolvePath(name);
|
var modPackage = name.StartsWith("$");
|
||||||
|
if (modPackage)
|
||||||
|
name = name.Substring(1);
|
||||||
|
|
||||||
Action a = () => Mount(OpenPackage(name));
|
Action a = () => Mount(modPackage ? ModMetadata.AllMods[name].Package : OpenPackage(name), explicitName);
|
||||||
if (optional)
|
if (optional)
|
||||||
|
{
|
||||||
try { a(); }
|
try { a(); }
|
||||||
catch { }
|
catch { }
|
||||||
|
}
|
||||||
else
|
else
|
||||||
a();
|
a();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Mount(IReadOnlyPackage package)
|
public void Mount(IReadOnlyPackage package, string explicitName = null)
|
||||||
{
|
{
|
||||||
var mountCount = 0;
|
var mountCount = 0;
|
||||||
if (mountedPackages.TryGetValue(package, out mountCount))
|
if (mountedPackages.TryGetValue(package, out mountCount))
|
||||||
@@ -101,6 +113,10 @@ namespace OpenRA.FileSystem
|
|||||||
{
|
{
|
||||||
// Mounting the package for the first time
|
// Mounting the package for the first time
|
||||||
mountedPackages.Add(package, 1);
|
mountedPackages.Add(package, 1);
|
||||||
|
|
||||||
|
if (explicitName != null)
|
||||||
|
explicitMounts.Add(explicitName, package);
|
||||||
|
|
||||||
foreach (var filename in package.Contents)
|
foreach (var filename in package.Contents)
|
||||||
fileIndex[filename].Add(package);
|
fileIndex[filename].Add(package);
|
||||||
}
|
}
|
||||||
@@ -118,6 +134,7 @@ namespace OpenRA.FileSystem
|
|||||||
packagesForFile.RemoveAll(p => p == package);
|
packagesForFile.RemoveAll(p => p == package);
|
||||||
|
|
||||||
mountedPackages.Remove(package);
|
mountedPackages.Remove(package);
|
||||||
|
explicitMounts.Remove(package.Name);
|
||||||
package.Dispose();
|
package.Dispose();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -132,14 +149,15 @@ namespace OpenRA.FileSystem
|
|||||||
package.Dispose();
|
package.Dispose();
|
||||||
|
|
||||||
mountedPackages.Clear();
|
mountedPackages.Clear();
|
||||||
|
explicitMounts.Clear();
|
||||||
fileIndex = new Cache<string, List<IReadOnlyPackage>>(_ => new List<IReadOnlyPackage>());
|
fileIndex = new Cache<string, List<IReadOnlyPackage>>(_ => new List<IReadOnlyPackage>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadFromManifest(Manifest manifest)
|
public void LoadFromManifest(Manifest manifest)
|
||||||
{
|
{
|
||||||
UnmountAll();
|
UnmountAll();
|
||||||
foreach (var pkg in manifest.Packages)
|
foreach (var kv in manifest.Packages)
|
||||||
Mount(pkg);
|
Mount(kv.Key, kv.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream GetFromCache(string filename)
|
Stream GetFromCache(string filename)
|
||||||
@@ -162,58 +180,64 @@ namespace OpenRA.FileSystem
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TryOpen(string name, out Stream s)
|
public bool TryGetPackageContaining(string path, out IReadOnlyPackage package, out string filename)
|
||||||
{
|
{
|
||||||
var filename = name;
|
var explicitSplit = path.IndexOf('|');
|
||||||
var packageName = string.Empty;
|
if (explicitSplit > 0 && explicitMounts.TryGetValue(path.Substring(0, explicitSplit), out package))
|
||||||
|
|
||||||
// Used for faction specific packages; rule out false positive on Windows C:\ drive notation
|
|
||||||
var explicitPackage = name.Contains(':') && !Directory.Exists(Path.GetDirectoryName(name));
|
|
||||||
if (explicitPackage)
|
|
||||||
{
|
{
|
||||||
var divide = name.Split(':');
|
filename = path.Substring(explicitSplit + 1);
|
||||||
packageName = divide.First();
|
return true;
|
||||||
filename = divide.Last();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the cache for a quick lookup if the package name is unknown
|
package = fileIndex[path].LastOrDefault(x => x.Contains(path));
|
||||||
// TODO: This disables caching for explicit package requests
|
filename = path;
|
||||||
if (filename.IndexOfAny(new[] { '/', '\\' }) == -1 && !explicitPackage)
|
|
||||||
|
return package != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool TryOpen(string filename, out Stream s)
|
||||||
|
{
|
||||||
|
var explicitSplit = filename.IndexOf('|');
|
||||||
|
if (explicitSplit > 0)
|
||||||
{
|
{
|
||||||
s = GetFromCache(filename);
|
IReadOnlyPackage explicitPackage;
|
||||||
if (s != null)
|
if (explicitMounts.TryGetValue(filename.Substring(0, explicitSplit), out explicitPackage))
|
||||||
return true;
|
{
|
||||||
|
s = explicitPackage.GetStream(filename.Substring(explicitSplit + 1));
|
||||||
|
if (s != null)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s = GetFromCache(filename);
|
||||||
|
if (s != null)
|
||||||
|
return true;
|
||||||
|
|
||||||
// Ask each package individually
|
// Ask each package individually
|
||||||
IReadOnlyPackage package;
|
// TODO: This fallback can be removed once the filesystem cleanups are complete
|
||||||
if (explicitPackage && !string.IsNullOrEmpty(packageName))
|
var package = mountedPackages.Keys.LastOrDefault(x => x.Contains(filename));
|
||||||
package = mountedPackages.Keys.LastOrDefault(x => x.Name == packageName);
|
|
||||||
else
|
|
||||||
package = mountedPackages.Keys.LastOrDefault(x => x.Contains(filename));
|
|
||||||
|
|
||||||
if (package != null)
|
if (package != null)
|
||||||
{
|
{
|
||||||
s = package.GetStream(filename);
|
s = package.GetStream(filename);
|
||||||
return true;
|
return s != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = null;
|
s = null;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Exists(string name)
|
public bool Exists(string filename)
|
||||||
{
|
{
|
||||||
var explicitPackage = name.Contains(':') && !Directory.Exists(Path.GetDirectoryName(name));
|
var explicitSplit = filename.IndexOf('|');
|
||||||
if (explicitPackage)
|
if (explicitSplit > 0)
|
||||||
{
|
{
|
||||||
var divide = name.Split(':');
|
IReadOnlyPackage explicitPackage;
|
||||||
var packageName = divide.First();
|
if (explicitMounts.TryGetValue(filename.Substring(0, explicitSplit), out explicitPackage))
|
||||||
var filename = divide.Last();
|
if (explicitPackage.Contains(filename.Substring(explicitSplit + 1)))
|
||||||
return mountedPackages.Keys.Where(n => n.Name == packageName).Any(f => f.Contains(filename));
|
return true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
return mountedPackages.Keys.Any(f => f.Contains(name));
|
return fileIndex.ContainsKey(filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,11 +35,12 @@ namespace OpenRA
|
|||||||
{
|
{
|
||||||
public readonly ModMetadata Mod;
|
public readonly ModMetadata Mod;
|
||||||
public readonly string[]
|
public readonly string[]
|
||||||
Packages, Rules, ServerTraits,
|
Rules, ServerTraits,
|
||||||
Sequences, VoxelSequences, Cursors, Chrome, Assemblies, ChromeLayout,
|
Sequences, VoxelSequences, Cursors, Chrome, Assemblies, ChromeLayout,
|
||||||
Weapons, Voices, Notifications, Music, Translations, TileSets,
|
Weapons, Voices, Notifications, Music, Translations, TileSets,
|
||||||
ChromeMetrics, MapCompatibility, Missions;
|
ChromeMetrics, MapCompatibility, Missions;
|
||||||
|
|
||||||
|
public readonly IReadOnlyDictionary<string, string> Packages;
|
||||||
public readonly IReadOnlyDictionary<string, string> MapFolders;
|
public readonly IReadOnlyDictionary<string, string> MapFolders;
|
||||||
public readonly MiniYaml LoadScreen;
|
public readonly MiniYaml LoadScreen;
|
||||||
public readonly MiniYaml LobbyDefaults;
|
public readonly MiniYaml LobbyDefaults;
|
||||||
@@ -69,23 +70,27 @@ namespace OpenRA
|
|||||||
Mod.Id = modId;
|
Mod.Id = modId;
|
||||||
|
|
||||||
// TODO: Use fieldloader
|
// TODO: Use fieldloader
|
||||||
MapFolders = YamlDictionary(yaml, "MapFolders", true);
|
MapFolders = YamlDictionary(yaml, "MapFolders");
|
||||||
Packages = YamlList(yaml, "Packages", true);
|
|
||||||
Rules = YamlList(yaml, "Rules", true);
|
MiniYaml packages;
|
||||||
Sequences = YamlList(yaml, "Sequences", true);
|
if (yaml.TryGetValue("Packages", out packages))
|
||||||
VoxelSequences = YamlList(yaml, "VoxelSequences", true);
|
Packages = packages.ToDictionary(x => x.Value).AsReadOnly();
|
||||||
Cursors = YamlList(yaml, "Cursors", true);
|
|
||||||
Chrome = YamlList(yaml, "Chrome", true);
|
Rules = YamlList(yaml, "Rules");
|
||||||
Assemblies = YamlList(yaml, "Assemblies", true);
|
Sequences = YamlList(yaml, "Sequences");
|
||||||
ChromeLayout = YamlList(yaml, "ChromeLayout", true);
|
VoxelSequences = YamlList(yaml, "VoxelSequences");
|
||||||
Weapons = YamlList(yaml, "Weapons", true);
|
Cursors = YamlList(yaml, "Cursors");
|
||||||
Voices = YamlList(yaml, "Voices", true);
|
Chrome = YamlList(yaml, "Chrome");
|
||||||
Notifications = YamlList(yaml, "Notifications", true);
|
Assemblies = YamlList(yaml, "Assemblies");
|
||||||
Music = YamlList(yaml, "Music", true);
|
ChromeLayout = YamlList(yaml, "ChromeLayout");
|
||||||
Translations = YamlList(yaml, "Translations", true);
|
Weapons = YamlList(yaml, "Weapons");
|
||||||
TileSets = YamlList(yaml, "TileSets", true);
|
Voices = YamlList(yaml, "Voices");
|
||||||
ChromeMetrics = YamlList(yaml, "ChromeMetrics", true);
|
Notifications = YamlList(yaml, "Notifications");
|
||||||
Missions = YamlList(yaml, "Missions", true);
|
Music = YamlList(yaml, "Music");
|
||||||
|
Translations = YamlList(yaml, "Translations");
|
||||||
|
TileSets = YamlList(yaml, "TileSets");
|
||||||
|
ChromeMetrics = YamlList(yaml, "ChromeMetrics");
|
||||||
|
Missions = YamlList(yaml, "Missions");
|
||||||
|
|
||||||
ServerTraits = YamlList(yaml, "ServerTraits");
|
ServerTraits = YamlList(yaml, "ServerTraits");
|
||||||
|
|
||||||
@@ -96,10 +101,10 @@ namespace OpenRA
|
|||||||
throw new InvalidDataException("`LobbyDefaults` section is not defined.");
|
throw new InvalidDataException("`LobbyDefaults` section is not defined.");
|
||||||
|
|
||||||
Fonts = yaml["Fonts"].ToDictionary(my =>
|
Fonts = yaml["Fonts"].ToDictionary(my =>
|
||||||
{
|
{
|
||||||
var nd = my.ToDictionary();
|
var nd = my.ToDictionary();
|
||||||
return Pair.New(nd["Font"].Value, Exts.ParseIntegerInvariant(nd["Size"].Value));
|
return Pair.New(nd["Font"].Value, Exts.ParseIntegerInvariant(nd["Size"].Value));
|
||||||
});
|
});
|
||||||
|
|
||||||
RequiresMods = yaml["RequiresMods"].ToDictionary(my => my.Value);
|
RequiresMods = yaml["RequiresMods"].ToDictionary(my => my.Value);
|
||||||
|
|
||||||
@@ -152,35 +157,15 @@ namespace OpenRA
|
|||||||
if (!yaml.ContainsKey(key))
|
if (!yaml.ContainsKey(key))
|
||||||
return new string[] { };
|
return new string[] { };
|
||||||
|
|
||||||
if (parsePaths)
|
|
||||||
return yaml[key].Nodes.Select(node => Platform.ResolvePath(node.Key, node.Value.Value ?? string.Empty)).ToArray();
|
|
||||||
|
|
||||||
return yaml[key].ToDictionary().Keys.ToArray();
|
return yaml[key].ToDictionary().Keys.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
static IReadOnlyDictionary<string, string> YamlDictionary(Dictionary<string, MiniYaml> yaml, string key, bool parsePaths = false)
|
static IReadOnlyDictionary<string, string> YamlDictionary(Dictionary<string, MiniYaml> yaml, string key)
|
||||||
{
|
{
|
||||||
if (!yaml.ContainsKey(key))
|
if (!yaml.ContainsKey(key))
|
||||||
return new ReadOnlyDictionary<string, string>();
|
return new ReadOnlyDictionary<string, string>();
|
||||||
|
|
||||||
var inner = new Dictionary<string, string>();
|
var inner = yaml[key].ToDictionary(my => my.Value);
|
||||||
foreach (var node in yaml[key].Nodes)
|
|
||||||
{
|
|
||||||
var line = node.Key;
|
|
||||||
if (node.Value.Value != null)
|
|
||||||
line += ":" + node.Value.Value;
|
|
||||||
|
|
||||||
// '@' may be used in mod.yaml to indicate extra information (similar to trait @ tags).
|
|
||||||
// Applies to MapFolders (to indicate System and User directories) and Packages (to indicate package annotation).
|
|
||||||
if (line.Contains('@'))
|
|
||||||
{
|
|
||||||
var split = line.Split('@');
|
|
||||||
inner.Add(parsePaths ? Platform.ResolvePath(split[0]) : split[0], split[1]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
inner.Add(line, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ReadOnlyDictionary<string, string>(inner);
|
return new ReadOnlyDictionary<string, string>(inner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ using System.Linq;
|
|||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using OpenRA.FileSystem;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Primitives;
|
using OpenRA.Primitives;
|
||||||
|
|
||||||
@@ -45,7 +46,8 @@ namespace OpenRA
|
|||||||
{
|
{
|
||||||
// Expand the dictionary (dir path, dir type) to a dictionary of (map path, dir type)
|
// Expand the dictionary (dir path, dir type) to a dictionary of (map path, dir type)
|
||||||
var mapPaths = modData.Manifest.MapFolders.SelectMany(kv =>
|
var mapPaths = modData.Manifest.MapFolders.SelectMany(kv =>
|
||||||
FindMapsIn(kv.Key).ToDictionary(p => p, p => string.IsNullOrEmpty(kv.Value) ? MapClassification.Unknown : Enum<MapClassification>.Parse(kv.Value)));
|
FindMapsIn(modData.ModFiles, kv.Key).ToDictionary(p => p, p => string.IsNullOrEmpty(kv.Value)
|
||||||
|
? MapClassification.Unknown : Enum<MapClassification>.Parse(kv.Value)));
|
||||||
|
|
||||||
foreach (var path in mapPaths)
|
foreach (var path in mapPaths)
|
||||||
{
|
{
|
||||||
@@ -111,7 +113,7 @@ namespace OpenRA
|
|||||||
new Download(url, _ => { }, onInfoComplete);
|
new Download(url, _ => { }, onInfoComplete);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<string> FindMapsIn(string dir)
|
public static IEnumerable<string> FindMapsIn(FileSystem.FileSystem context, string dir)
|
||||||
{
|
{
|
||||||
string[] noMaps = { };
|
string[] noMaps = { };
|
||||||
|
|
||||||
@@ -119,9 +121,15 @@ namespace OpenRA
|
|||||||
if (dir.StartsWith("~"))
|
if (dir.StartsWith("~"))
|
||||||
dir = dir.Substring(1);
|
dir = dir.Substring(1);
|
||||||
|
|
||||||
dir = Platform.ResolvePath(dir);
|
// HACK: We currently only support maps loaded from Folders
|
||||||
|
// This is a temporary workaround that resolves the filesystem paths to a system directory
|
||||||
if (!Directory.Exists(dir))
|
IReadOnlyPackage package;
|
||||||
|
string filename;
|
||||||
|
if (context.TryGetPackageContaining(dir, out package, out filename))
|
||||||
|
dir = Path.Combine(package.Name, filename);
|
||||||
|
else if (Directory.Exists(Platform.ResolvePath(dir)))
|
||||||
|
dir = Platform.ResolvePath(dir);
|
||||||
|
else
|
||||||
return noMaps;
|
return noMaps;
|
||||||
|
|
||||||
var dirsWithMaps = Directory.GetDirectories(dir)
|
var dirsWithMaps = Directory.GetDirectories(dir)
|
||||||
|
|||||||
@@ -100,14 +100,6 @@ namespace OpenRA
|
|||||||
{
|
{
|
||||||
path = path.TrimEnd(new char[] { ' ', '\t' });
|
path = path.TrimEnd(new char[] { ' ', '\t' });
|
||||||
|
|
||||||
// If the path contains ':', chances are it is a package path.
|
|
||||||
// If it isn't, someone passed an already resolved path, which is wrong.
|
|
||||||
if (path.IndexOf(":", StringComparison.Ordinal) > 1)
|
|
||||||
{
|
|
||||||
var split = path.Split(':');
|
|
||||||
return ResolvePath(split[0], split[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// paths starting with ^ are relative to the support dir
|
// paths starting with ^ are relative to the support dir
|
||||||
if (path.StartsWith("^"))
|
if (path.StartsWith("^"))
|
||||||
path = SupportDir + path.Substring(1);
|
path = SupportDir + path.Substring(1);
|
||||||
@@ -119,16 +111,6 @@ namespace OpenRA
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Replaces package names with full paths. Avoid using this for non-package paths.</summary>
|
|
||||||
public static string ResolvePath(string package, string target)
|
|
||||||
{
|
|
||||||
// Resolve mod package paths.
|
|
||||||
if (ModMetadata.AllMods.ContainsKey(package))
|
|
||||||
package = ModMetadata.AllMods[package].Package.Name;
|
|
||||||
|
|
||||||
return ResolvePath(Path.Combine(package, target));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>Replace special character prefixes with full paths.</summary>
|
/// <summary>Replace special character prefixes with full paths.</summary>
|
||||||
public static string ResolvePath(params string[] path)
|
public static string ResolvePath(params string[] path)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using OpenRA.FileSystem;
|
||||||
using OpenRA.Widgets;
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.Widgets.Logic
|
namespace OpenRA.Mods.Common.Widgets.Logic
|
||||||
@@ -29,6 +30,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public SaveMapLogic(Widget widget, Action<string> onSave, Action onExit, Map map, List<MiniYamlNode> playerDefinitions, List<MiniYamlNode> actorDefinitions)
|
public SaveMapLogic(Widget widget, Action<string> onSave, Action onExit, Map map, List<MiniYamlNode> playerDefinitions, List<MiniYamlNode> actorDefinitions)
|
||||||
{
|
{
|
||||||
|
var modData = Game.ModData;
|
||||||
var title = widget.Get<TextFieldWidget>("TITLE");
|
var title = widget.Get<TextFieldWidget>("TITLE");
|
||||||
title.Text = map.Title;
|
title.Text = map.Title;
|
||||||
|
|
||||||
@@ -59,14 +61,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
Func<string, string> makeMapDirectory = dir =>
|
Func<string, string> makeMapDirectory = dir =>
|
||||||
{
|
{
|
||||||
var f = Platform.UnresolvePath(dir);
|
if (dir.StartsWith("~"))
|
||||||
if (f.StartsWith("~"))
|
dir = dir.Substring(1);
|
||||||
f = f.Substring(1);
|
|
||||||
|
|
||||||
return f;
|
IReadOnlyPackage package;
|
||||||
|
string f;
|
||||||
|
if (modData.ModFiles.TryGetPackageContaining(dir, out package, out f))
|
||||||
|
dir = Path.Combine(package.Name, f);
|
||||||
|
|
||||||
|
return Platform.UnresolvePath(dir);
|
||||||
};
|
};
|
||||||
|
|
||||||
var mapDirectories = Game.ModData.Manifest.MapFolders
|
var mapDirectories = modData.Manifest.MapFolders
|
||||||
.ToDictionary(kv => makeMapDirectory(kv.Key), kv => Enum<MapClassification>.Parse(kv.Value));
|
.ToDictionary(kv => makeMapDirectory(kv.Key), kv => Enum<MapClassification>.Parse(kv.Value));
|
||||||
|
|
||||||
var directoryDropdown = widget.Get<DropDownButtonWidget>("DIRECTORY_DROPDOWN");
|
var directoryDropdown = widget.Get<DropDownButtonWidget>("DIRECTORY_DROPDOWN");
|
||||||
@@ -147,7 +153,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
if (playerDefinitions != null)
|
if (playerDefinitions != null)
|
||||||
map.PlayerDefinitions = playerDefinitions;
|
map.PlayerDefinitions = playerDefinitions;
|
||||||
|
|
||||||
map.RequiresMod = Game.ModData.Manifest.Mod.Id;
|
map.RequiresMod = modData.Manifest.Mod.Id;
|
||||||
|
|
||||||
// Create the map directory if required
|
// Create the map directory if required
|
||||||
Directory.CreateDirectory(Platform.ResolvePath(directoryDropdown.Text));
|
Directory.CreateDirectory(Platform.ResolvePath(directoryDropdown.Text));
|
||||||
@@ -156,13 +162,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
// Invalidate the old map metadata
|
// Invalidate the old map metadata
|
||||||
if (map.Uid != null && combinedPath == map.Path)
|
if (map.Uid != null && combinedPath == map.Path)
|
||||||
Game.ModData.MapCache[map.Uid].Invalidate();
|
modData.MapCache[map.Uid].Invalidate();
|
||||||
|
|
||||||
map.Save(combinedPath);
|
map.Save(combinedPath);
|
||||||
|
|
||||||
// Update the map cache so it can be loaded without restarting the game
|
// Update the map cache so it can be loaded without restarting the game
|
||||||
var classification = mapDirectories[directoryDropdown.Text];
|
var classification = mapDirectories[directoryDropdown.Text];
|
||||||
Game.ModData.MapCache[map.Uid].UpdateFromMap(map, classification);
|
modData.MapCache[map.Uid].UpdateFromMap(map, classification);
|
||||||
|
|
||||||
Console.WriteLine("Saved current map at {0}", combinedPath);
|
Console.WriteLine("Saved current map at {0}", combinedPath);
|
||||||
Ui.CloseWindow();
|
Ui.CloseWindow();
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ RequiresMods:
|
|||||||
Packages:
|
Packages:
|
||||||
~^Content/cnc
|
~^Content/cnc
|
||||||
.
|
.
|
||||||
./mods/cnc
|
$cnc: cnc
|
||||||
|
./mods/common: common
|
||||||
speech.mix
|
speech.mix
|
||||||
conquer.mix
|
conquer.mix
|
||||||
sounds.mix
|
sounds.mix
|
||||||
@@ -24,122 +25,122 @@ Packages:
|
|||||||
~scores.mix
|
~scores.mix
|
||||||
~scores2.mix
|
~scores2.mix
|
||||||
~transit.mix
|
~transit.mix
|
||||||
./mods/cnc/bits/snow.mix
|
cnc|bits/snow.mix
|
||||||
./mods/cnc/bits
|
cnc|bits
|
||||||
./mods/cnc/bits/jungle
|
cnc|bits/jungle
|
||||||
./mods/cnc/bits/desert
|
cnc|bits/desert
|
||||||
./mods/cnc/bits/ss
|
cnc|bits/ss
|
||||||
./mods/cnc/uibits
|
cnc|uibits
|
||||||
|
|
||||||
MapFolders:
|
MapFolders:
|
||||||
./mods/cnc/maps@System
|
cnc|maps: System
|
||||||
~^maps/cnc/{DEV_VERSION}@User
|
~^maps/cnc/{DEV_VERSION}: User
|
||||||
|
|
||||||
Rules:
|
Rules:
|
||||||
./mods/cnc/rules/misc.yaml
|
cnc|rules/misc.yaml
|
||||||
./mods/cnc/rules/ai.yaml
|
cnc|rules/ai.yaml
|
||||||
./mods/cnc/rules/player.yaml
|
cnc|rules/player.yaml
|
||||||
./mods/cnc/rules/world.yaml
|
cnc|rules/world.yaml
|
||||||
./mods/cnc/rules/palettes.yaml
|
cnc|rules/palettes.yaml
|
||||||
./mods/cnc/rules/defaults.yaml
|
cnc|rules/defaults.yaml
|
||||||
./mods/cnc/rules/structures.yaml
|
cnc|rules/structures.yaml
|
||||||
./mods/cnc/rules/infantry.yaml
|
cnc|rules/infantry.yaml
|
||||||
./mods/cnc/rules/vehicles.yaml
|
cnc|rules/vehicles.yaml
|
||||||
./mods/cnc/rules/trees.yaml
|
cnc|rules/trees.yaml
|
||||||
./mods/cnc/rules/civilian.yaml
|
cnc|rules/civilian.yaml
|
||||||
./mods/cnc/rules/civilian-desert.yaml
|
cnc|rules/civilian-desert.yaml
|
||||||
./mods/cnc/rules/tech.yaml
|
cnc|rules/tech.yaml
|
||||||
./mods/cnc/rules/ships.yaml
|
cnc|rules/ships.yaml
|
||||||
./mods/cnc/rules/aircraft.yaml
|
cnc|rules/aircraft.yaml
|
||||||
./mods/cnc/rules/husks.yaml
|
cnc|rules/husks.yaml
|
||||||
|
|
||||||
Sequences:
|
Sequences:
|
||||||
./mods/cnc/sequences/structures.yaml
|
cnc|sequences/structures.yaml
|
||||||
./mods/cnc/sequences/vehicles.yaml
|
cnc|sequences/vehicles.yaml
|
||||||
./mods/cnc/sequences/infantry.yaml
|
cnc|sequences/infantry.yaml
|
||||||
./mods/cnc/sequences/aircraft.yaml
|
cnc|sequences/aircraft.yaml
|
||||||
./mods/cnc/sequences/decorations.yaml
|
cnc|sequences/decorations.yaml
|
||||||
./mods/cnc/sequences/misc.yaml
|
cnc|sequences/misc.yaml
|
||||||
./mods/cnc/sequences/funpark.yaml
|
cnc|sequences/funpark.yaml
|
||||||
./mods/cnc/sequences/civilian.yaml
|
cnc|sequences/civilian.yaml
|
||||||
./mods/cnc/sequences/campaign.yaml
|
cnc|sequences/campaign.yaml
|
||||||
|
|
||||||
TileSets:
|
TileSets:
|
||||||
./mods/cnc/tilesets/desert.yaml
|
cnc|tilesets/desert.yaml
|
||||||
./mods/cnc/tilesets/winter.yaml
|
cnc|tilesets/winter.yaml
|
||||||
./mods/cnc/tilesets/snow.yaml
|
cnc|tilesets/snow.yaml
|
||||||
./mods/cnc/tilesets/temperat.yaml
|
cnc|tilesets/temperat.yaml
|
||||||
./mods/cnc/tilesets/jungle.yaml
|
cnc|tilesets/jungle.yaml
|
||||||
|
|
||||||
Weapons:
|
Weapons:
|
||||||
./mods/cnc/weapons/explosions.yaml
|
cnc|weapons/explosions.yaml
|
||||||
./mods/cnc/weapons/largecaliber.yaml
|
cnc|weapons/largecaliber.yaml
|
||||||
./mods/cnc/weapons/missiles.yaml
|
cnc|weapons/missiles.yaml
|
||||||
./mods/cnc/weapons/other.yaml
|
cnc|weapons/other.yaml
|
||||||
./mods/cnc/weapons/smallcaliber.yaml
|
cnc|weapons/smallcaliber.yaml
|
||||||
./mods/cnc/weapons/superweapons.yaml
|
cnc|weapons/superweapons.yaml
|
||||||
|
|
||||||
Cursors:
|
Cursors:
|
||||||
./mods/cnc/cursors.yaml
|
cnc|cursors.yaml
|
||||||
|
|
||||||
Chrome:
|
Chrome:
|
||||||
./mods/cnc/chrome.yaml
|
cnc|chrome.yaml
|
||||||
|
|
||||||
Assemblies:
|
Assemblies:
|
||||||
./mods/common/OpenRA.Mods.Common.dll
|
common|OpenRA.Mods.Common.dll
|
||||||
./mods/cnc/OpenRA.Mods.Cnc.dll
|
cnc|OpenRA.Mods.Cnc.dll
|
||||||
|
|
||||||
ChromeLayout:
|
ChromeLayout:
|
||||||
./mods/cnc/chrome/mainmenu.yaml
|
cnc|chrome/mainmenu.yaml
|
||||||
./mods/cnc/chrome/multiplayer.yaml
|
cnc|chrome/multiplayer.yaml
|
||||||
./mods/cnc/chrome/multiplayer-browser.yaml
|
cnc|chrome/multiplayer-browser.yaml
|
||||||
./mods/cnc/chrome/multiplayer-createserver.yaml
|
cnc|chrome/multiplayer-createserver.yaml
|
||||||
./mods/cnc/chrome/multiplayer-directconnect.yaml
|
cnc|chrome/multiplayer-directconnect.yaml
|
||||||
./mods/cnc/chrome/multiplayer-globalchat.yaml
|
cnc|chrome/multiplayer-globalchat.yaml
|
||||||
./mods/cnc/chrome/lobby.yaml
|
cnc|chrome/lobby.yaml
|
||||||
./mods/cnc/chrome/lobby-mappreview.yaml
|
cnc|chrome/lobby-mappreview.yaml
|
||||||
./mods/cnc/chrome/lobby-players.yaml
|
cnc|chrome/lobby-players.yaml
|
||||||
./mods/cnc/chrome/lobby-options.yaml
|
cnc|chrome/lobby-options.yaml
|
||||||
./mods/cnc/chrome/lobby-music.yaml
|
cnc|chrome/lobby-music.yaml
|
||||||
./mods/cnc/chrome/lobby-kickdialogs.yaml
|
cnc|chrome/lobby-kickdialogs.yaml
|
||||||
./mods/cnc/chrome/lobby-globalchat.yaml
|
cnc|chrome/lobby-globalchat.yaml
|
||||||
./mods/cnc/chrome/connection.yaml
|
cnc|chrome/connection.yaml
|
||||||
./mods/cnc/chrome/color-picker.yaml
|
cnc|chrome/color-picker.yaml
|
||||||
./mods/cnc/chrome/mapchooser.yaml
|
cnc|chrome/mapchooser.yaml
|
||||||
./mods/cnc/chrome/replaybrowser.yaml
|
cnc|chrome/replaybrowser.yaml
|
||||||
./mods/cnc/chrome/ingame.yaml
|
cnc|chrome/ingame.yaml
|
||||||
./mods/cnc/chrome/ingame-chat.yaml
|
cnc|chrome/ingame-chat.yaml
|
||||||
./mods/cnc/chrome/ingame-menu.yaml
|
cnc|chrome/ingame-menu.yaml
|
||||||
./mods/cnc/chrome/ingame-debug.yaml
|
cnc|chrome/ingame-debug.yaml
|
||||||
./mods/cnc/chrome/ingame-info.yaml
|
cnc|chrome/ingame-info.yaml
|
||||||
./mods/cnc/chrome/ingame-infobriefing.yaml
|
cnc|chrome/ingame-infobriefing.yaml
|
||||||
./mods/cnc/chrome/ingame-infoscripterror.yaml
|
cnc|chrome/ingame-infoscripterror.yaml
|
||||||
./mods/cnc/chrome/ingame-infoobjectives.yaml
|
cnc|chrome/ingame-infoobjectives.yaml
|
||||||
./mods/cnc/chrome/ingame-infostats.yaml
|
cnc|chrome/ingame-infostats.yaml
|
||||||
./mods/cnc/chrome/ingame-observerstats.yaml
|
cnc|chrome/ingame-observerstats.yaml
|
||||||
./mods/cnc/chrome/music.yaml
|
cnc|chrome/music.yaml
|
||||||
./mods/cnc/chrome/settings.yaml
|
cnc|chrome/settings.yaml
|
||||||
./mods/cnc/chrome/credits.yaml
|
cnc|chrome/credits.yaml
|
||||||
./mods/cnc/chrome/dialogs.yaml
|
cnc|chrome/dialogs.yaml
|
||||||
./mods/cnc/chrome/tooltips.yaml
|
cnc|chrome/tooltips.yaml
|
||||||
./mods/cnc/chrome/assetbrowser.yaml
|
cnc|chrome/assetbrowser.yaml
|
||||||
./mods/cnc/chrome/missionbrowser.yaml
|
cnc|chrome/missionbrowser.yaml
|
||||||
./mods/cnc/chrome/editor.yaml
|
cnc|chrome/editor.yaml
|
||||||
|
|
||||||
Voices:
|
Voices:
|
||||||
./mods/cnc/audio/voices.yaml
|
cnc|audio/voices.yaml
|
||||||
|
|
||||||
Notifications:
|
Notifications:
|
||||||
./mods/cnc/audio/notifications.yaml
|
cnc|audio/notifications.yaml
|
||||||
|
|
||||||
Music:
|
Music:
|
||||||
./mods/cnc/audio/music.yaml
|
cnc|audio/music.yaml
|
||||||
|
|
||||||
Translations:
|
Translations:
|
||||||
./mods/cnc/languages/english.yaml
|
cnc|languages/english.yaml
|
||||||
|
|
||||||
LoadScreen: CncLoadScreen
|
LoadScreen: CncLoadScreen
|
||||||
Image: ./mods/cnc/uibits/chrome.png
|
Image: cnc|uibits/chrome.png
|
||||||
Text: Loading
|
Text: Loading
|
||||||
|
|
||||||
ContentInstaller:
|
ContentInstaller:
|
||||||
@@ -171,33 +172,33 @@ LobbyDefaults:
|
|||||||
TechLevel: Unrestricted
|
TechLevel: Unrestricted
|
||||||
|
|
||||||
ChromeMetrics:
|
ChromeMetrics:
|
||||||
./mods/common/metrics.yaml
|
common|metrics.yaml
|
||||||
./mods/cnc/metrics.yaml
|
cnc|metrics.yaml
|
||||||
|
|
||||||
Fonts:
|
Fonts:
|
||||||
Small:
|
Small:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:12
|
Size:12
|
||||||
Regular:
|
Regular:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:14
|
Size:14
|
||||||
Bold:
|
Bold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:14
|
Size:14
|
||||||
Title:
|
Title:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:32
|
Size:32
|
||||||
MediumBold:
|
MediumBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:18
|
Size:18
|
||||||
BigBold:
|
BigBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:24
|
Size:24
|
||||||
Tiny:
|
Tiny:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:10
|
Size:10
|
||||||
TinyBold:
|
TinyBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:10
|
Size:10
|
||||||
|
|
||||||
Missions:
|
Missions:
|
||||||
|
|||||||
@@ -13,120 +13,124 @@ Packages:
|
|||||||
~^Content/d2k/Movies
|
~^Content/d2k/Movies
|
||||||
~^Content/d2k/Music
|
~^Content/d2k/Music
|
||||||
.
|
.
|
||||||
d2k:
|
$d2k: d2k
|
||||||
|
$ra: ra
|
||||||
|
$cnc: cnc
|
||||||
|
./mods/common: common
|
||||||
|
|
||||||
SOUND.RS
|
SOUND.RS
|
||||||
d2k:bits
|
d2k|bits
|
||||||
d2k:bits/tex
|
d2k|bits/tex
|
||||||
d2k:bits/xmas
|
d2k|bits/xmas
|
||||||
d2k:uibits
|
d2k|uibits
|
||||||
|
|
||||||
MapFolders:
|
MapFolders:
|
||||||
d2k:maps@System
|
d2k|maps: System
|
||||||
~^maps/d2k/{DEV_VERSION}@User
|
~^maps/d2k/{DEV_VERSION}: User
|
||||||
|
|
||||||
Rules:
|
Rules:
|
||||||
d2k:rules/misc.yaml
|
d2k|rules/misc.yaml
|
||||||
d2k:rules/ai.yaml
|
d2k|rules/ai.yaml
|
||||||
d2k:rules/player.yaml
|
d2k|rules/player.yaml
|
||||||
d2k:rules/world.yaml
|
d2k|rules/world.yaml
|
||||||
d2k:rules/palettes.yaml
|
d2k|rules/palettes.yaml
|
||||||
d2k:rules/defaults.yaml
|
d2k|rules/defaults.yaml
|
||||||
d2k:rules/vehicles.yaml
|
d2k|rules/vehicles.yaml
|
||||||
d2k:rules/starport.yaml
|
d2k|rules/starport.yaml
|
||||||
d2k:rules/husks.yaml
|
d2k|rules/husks.yaml
|
||||||
d2k:rules/structures.yaml
|
d2k|rules/structures.yaml
|
||||||
d2k:rules/aircraft.yaml
|
d2k|rules/aircraft.yaml
|
||||||
d2k:rules/infantry.yaml
|
d2k|rules/infantry.yaml
|
||||||
d2k:rules/arrakis.yaml
|
d2k|rules/arrakis.yaml
|
||||||
|
|
||||||
Sequences:
|
Sequences:
|
||||||
d2k:sequences/aircraft.yaml
|
d2k|sequences/aircraft.yaml
|
||||||
d2k:sequences/vehicles.yaml
|
d2k|sequences/vehicles.yaml
|
||||||
d2k:sequences/infantry.yaml
|
d2k|sequences/infantry.yaml
|
||||||
d2k:sequences/structures.yaml
|
d2k|sequences/structures.yaml
|
||||||
d2k:sequences/misc.yaml
|
d2k|sequences/misc.yaml
|
||||||
|
|
||||||
TileSets:
|
TileSets:
|
||||||
d2k:tilesets/arrakis.yaml
|
d2k|tilesets/arrakis.yaml
|
||||||
|
|
||||||
MapGrid:
|
MapGrid:
|
||||||
TileSize: 32,32
|
TileSize: 32,32
|
||||||
Type: Rectangular
|
Type: Rectangular
|
||||||
|
|
||||||
Cursors:
|
Cursors:
|
||||||
d2k:cursors.yaml
|
d2k|cursors.yaml
|
||||||
|
|
||||||
Chrome:
|
Chrome:
|
||||||
d2k:chrome.yaml
|
d2k|chrome.yaml
|
||||||
|
|
||||||
Assemblies:
|
Assemblies:
|
||||||
./mods/common/OpenRA.Mods.Common.dll
|
common|OpenRA.Mods.Common.dll
|
||||||
./mods/cnc/OpenRA.Mods.Cnc.dll
|
cnc|OpenRA.Mods.Cnc.dll
|
||||||
./mods/d2k/OpenRA.Mods.D2k.dll
|
d2k|OpenRA.Mods.D2k.dll
|
||||||
|
|
||||||
ChromeLayout:
|
ChromeLayout:
|
||||||
d2k:chrome/ingame.yaml
|
d2k|chrome/ingame.yaml
|
||||||
./mods/ra/chrome/ingame-chat.yaml
|
ra|chrome/ingame-chat.yaml
|
||||||
./mods/ra/chrome/ingame-fmvplayer.yaml
|
ra|chrome/ingame-fmvplayer.yaml
|
||||||
d2k:chrome/ingame-menu.yaml
|
d2k|chrome/ingame-menu.yaml
|
||||||
./mods/ra/chrome/ingame-info.yaml
|
ra|chrome/ingame-info.yaml
|
||||||
./mods/ra/chrome/ingame-infoscripterror.yaml
|
ra|chrome/ingame-infoscripterror.yaml
|
||||||
./mods/ra/chrome/ingame-infobriefing.yaml
|
ra|chrome/ingame-infobriefing.yaml
|
||||||
./mods/ra/chrome/ingame-infoobjectives.yaml
|
ra|chrome/ingame-infoobjectives.yaml
|
||||||
d2k:chrome/ingame-infostats.yaml
|
d2k|chrome/ingame-infostats.yaml
|
||||||
d2k:chrome/ingame-observer.yaml
|
d2k|chrome/ingame-observer.yaml
|
||||||
./mods/ra/chrome/ingame-observerstats.yaml
|
ra|chrome/ingame-observerstats.yaml
|
||||||
d2k:chrome/ingame-player.yaml
|
d2k|chrome/ingame-player.yaml
|
||||||
./mods/ra/chrome/ingame-perf.yaml
|
ra|chrome/ingame-perf.yaml
|
||||||
./mods/ra/chrome/ingame-debug.yaml
|
ra|chrome/ingame-debug.yaml
|
||||||
d2k:chrome/mainmenu.yaml
|
d2k|chrome/mainmenu.yaml
|
||||||
./mods/ra/chrome/settings.yaml
|
ra|chrome/settings.yaml
|
||||||
./mods/ra/chrome/credits.yaml
|
ra|chrome/credits.yaml
|
||||||
./mods/ra/chrome/lobby.yaml
|
ra|chrome/lobby.yaml
|
||||||
./mods/ra/chrome/lobby-mappreview.yaml
|
ra|chrome/lobby-mappreview.yaml
|
||||||
d2k:chrome/lobby-players.yaml
|
d2k|chrome/lobby-players.yaml
|
||||||
d2k:chrome/lobby-options.yaml
|
d2k|chrome/lobby-options.yaml
|
||||||
./mods/ra/chrome/lobby-music.yaml
|
ra|chrome/lobby-music.yaml
|
||||||
./mods/ra/chrome/lobby-kickdialogs.yaml
|
ra|chrome/lobby-kickdialogs.yaml
|
||||||
./mods/ra/chrome/lobby-globalchat.yaml
|
ra|chrome/lobby-globalchat.yaml
|
||||||
d2k:chrome/color-picker.yaml
|
d2k|chrome/color-picker.yaml
|
||||||
./mods/ra/chrome/map-chooser.yaml
|
ra|chrome/map-chooser.yaml
|
||||||
./mods/ra/chrome/multiplayer.yaml
|
ra|chrome/multiplayer.yaml
|
||||||
./mods/ra/chrome/multiplayer-browser.yaml
|
ra|chrome/multiplayer-browser.yaml
|
||||||
./mods/ra/chrome/multiplayer-createserver.yaml
|
ra|chrome/multiplayer-createserver.yaml
|
||||||
./mods/ra/chrome/multiplayer-directconnect.yaml
|
ra|chrome/multiplayer-directconnect.yaml
|
||||||
./mods/ra/chrome/multiplayer-globalchat.yaml
|
ra|chrome/multiplayer-globalchat.yaml
|
||||||
./mods/ra/chrome/connection.yaml
|
ra|chrome/connection.yaml
|
||||||
d2k:chrome/dropdowns.yaml
|
d2k|chrome/dropdowns.yaml
|
||||||
./mods/ra/chrome/musicplayer.yaml
|
ra|chrome/musicplayer.yaml
|
||||||
d2k:chrome/tooltips.yaml
|
d2k|chrome/tooltips.yaml
|
||||||
./mods/ra/chrome/assetbrowser.yaml
|
ra|chrome/assetbrowser.yaml
|
||||||
d2k:chrome/missionbrowser.yaml
|
d2k|chrome/missionbrowser.yaml
|
||||||
./mods/ra/chrome/confirmation-dialogs.yaml
|
ra|chrome/confirmation-dialogs.yaml
|
||||||
./mods/ra/chrome/editor.yaml
|
ra|chrome/editor.yaml
|
||||||
./mods/ra/chrome/replaybrowser.yaml
|
ra|chrome/replaybrowser.yaml
|
||||||
|
|
||||||
Weapons:
|
Weapons:
|
||||||
d2k:weapons/debris.yaml
|
d2k|weapons/debris.yaml
|
||||||
d2k:weapons/smallguns.yaml
|
d2k|weapons/smallguns.yaml
|
||||||
d2k:weapons/largeguns.yaml
|
d2k|weapons/largeguns.yaml
|
||||||
d2k:weapons/missiles.yaml
|
d2k|weapons/missiles.yaml
|
||||||
d2k:weapons/other.yaml
|
d2k|weapons/other.yaml
|
||||||
|
|
||||||
Voices:
|
Voices:
|
||||||
d2k:audio/voices.yaml
|
d2k|audio/voices.yaml
|
||||||
|
|
||||||
Notifications:
|
Notifications:
|
||||||
d2k:audio/notifications.yaml
|
d2k|audio/notifications.yaml
|
||||||
|
|
||||||
Music:
|
Music:
|
||||||
d2k:audio/music.yaml
|
d2k|audio/music.yaml
|
||||||
|
|
||||||
Translations:
|
Translations:
|
||||||
d2k:languages/english.yaml
|
d2k|languages/english.yaml
|
||||||
|
|
||||||
LoadScreen: LogoStripeLoadScreen
|
LoadScreen: LogoStripeLoadScreen
|
||||||
Image: ./mods/d2k/uibits/loadscreen.png
|
Image: d2k|uibits/loadscreen.png
|
||||||
Text: Filling Crates..., Breeding Sandworms..., Fuelling carryalls..., Deploying harvesters..., Preparing 'thopters..., Summoning mentats...
|
Text: Filling Crates..., Breeding Sandworms..., Fuelling carryalls..., Deploying harvesters..., Preparing 'thopters..., Summoning mentats...
|
||||||
|
|
||||||
ContentInstaller:
|
ContentInstaller:
|
||||||
@@ -161,37 +165,37 @@ LobbyDefaults:
|
|||||||
TechLevel: Unrestricted
|
TechLevel: Unrestricted
|
||||||
|
|
||||||
ChromeMetrics:
|
ChromeMetrics:
|
||||||
./mods/common/metrics.yaml
|
common|metrics.yaml
|
||||||
d2k:metrics.yaml
|
d2k|metrics.yaml
|
||||||
|
|
||||||
Fonts:
|
Fonts:
|
||||||
Regular:
|
Regular:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:14
|
Size:14
|
||||||
Bold:
|
Bold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:14
|
Size:14
|
||||||
Title:
|
Title:
|
||||||
Font:./mods/d2k/Dune2k.ttf
|
Font: d2k|Dune2k.ttf
|
||||||
Size:32
|
Size:32
|
||||||
MediumBold:
|
MediumBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:18
|
Size:18
|
||||||
BigBold:
|
BigBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:24
|
Size:24
|
||||||
Small:
|
Small:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:12
|
Size:12
|
||||||
Tiny:
|
Tiny:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:10
|
Size:10
|
||||||
TinyBold:
|
TinyBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:10
|
Size:10
|
||||||
|
|
||||||
Missions:
|
Missions:
|
||||||
d2k:missions.yaml
|
d2k|missions.yaml
|
||||||
|
|
||||||
SupportsMapsFrom: d2k
|
SupportsMapsFrom: d2k
|
||||||
|
|
||||||
|
|||||||
@@ -8,48 +8,49 @@ RequiresMods:
|
|||||||
|
|
||||||
Packages:
|
Packages:
|
||||||
.
|
.
|
||||||
./mods/modchooser
|
./mods/modchooser: modchooser
|
||||||
|
./mods/common: common
|
||||||
|
|
||||||
Cursors:
|
Cursors:
|
||||||
./mods/modchooser/cursors.yaml
|
modchooser|cursors.yaml
|
||||||
|
|
||||||
Chrome:
|
Chrome:
|
||||||
./mods/modchooser/chrome.yaml
|
modchooser|chrome.yaml
|
||||||
|
|
||||||
Assemblies:
|
Assemblies:
|
||||||
./mods/common/OpenRA.Mods.Common.dll
|
common|OpenRA.Mods.Common.dll
|
||||||
|
|
||||||
ChromeLayout:
|
ChromeLayout:
|
||||||
./mods/modchooser/modchooser.yaml
|
modchooser|modchooser.yaml
|
||||||
./mods/modchooser/install.yaml
|
modchooser|install.yaml
|
||||||
|
|
||||||
Notifications:
|
Notifications:
|
||||||
./mods/modchooser/notifications.yaml
|
modchooser|notifications.yaml
|
||||||
|
|
||||||
LoadScreen: ModChooserLoadScreen
|
LoadScreen: ModChooserLoadScreen
|
||||||
Image: ./mods/modchooser/chrome.png
|
Image: ./mods/modchooser/chrome.png
|
||||||
|
|
||||||
ChromeMetrics:
|
ChromeMetrics:
|
||||||
./mods/modchooser/metrics.yaml
|
modchooser|metrics.yaml
|
||||||
|
|
||||||
Fonts:
|
Fonts:
|
||||||
Regular:
|
Regular:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:14
|
Size:14
|
||||||
Bold:
|
Bold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:14
|
Size:14
|
||||||
BigBold:
|
BigBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:24
|
Size:24
|
||||||
MediumBold:
|
MediumBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:18
|
Size:18
|
||||||
Tiny:
|
Tiny:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:10
|
Size:10
|
||||||
TinyBold:
|
TinyBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:10
|
Size:10
|
||||||
|
|
||||||
LobbyDefaults:
|
LobbyDefaults:
|
||||||
|
|||||||
200
mods/ra/mod.yaml
200
mods/ra/mod.yaml
@@ -10,7 +10,9 @@ RequiresMods:
|
|||||||
Packages:
|
Packages:
|
||||||
~^Content/ra
|
~^Content/ra
|
||||||
.
|
.
|
||||||
./mods/ra
|
$ra: ra
|
||||||
|
$cnc: cnc
|
||||||
|
./mods/common: common
|
||||||
~main.mix
|
~main.mix
|
||||||
redalert.mix
|
redalert.mix
|
||||||
conquer.mix
|
conquer.mix
|
||||||
@@ -26,121 +28,121 @@ Packages:
|
|||||||
~scores.mix
|
~scores.mix
|
||||||
~movies1.mix
|
~movies1.mix
|
||||||
~movies2.mix
|
~movies2.mix
|
||||||
./mods/ra/bits
|
ra|bits
|
||||||
./mods/ra/bits/desert
|
ra|bits/desert
|
||||||
./mods/ra/uibits
|
ra|uibits
|
||||||
|
|
||||||
MapFolders:
|
MapFolders:
|
||||||
./mods/ra/maps@System
|
ra|maps: System
|
||||||
~^maps/ra/{DEV_VERSION}@User
|
~^maps/ra/{DEV_VERSION}: User
|
||||||
|
|
||||||
Rules:
|
Rules:
|
||||||
./mods/ra/rules/misc.yaml
|
ra|rules/misc.yaml
|
||||||
./mods/ra/rules/ai.yaml
|
ra|rules/ai.yaml
|
||||||
./mods/ra/rules/player.yaml
|
ra|rules/player.yaml
|
||||||
./mods/ra/rules/palettes.yaml
|
ra|rules/palettes.yaml
|
||||||
./mods/ra/rules/world.yaml
|
ra|rules/world.yaml
|
||||||
./mods/ra/rules/defaults.yaml
|
ra|rules/defaults.yaml
|
||||||
./mods/ra/rules/vehicles.yaml
|
ra|rules/vehicles.yaml
|
||||||
./mods/ra/rules/husks.yaml
|
ra|rules/husks.yaml
|
||||||
./mods/ra/rules/structures.yaml
|
ra|rules/structures.yaml
|
||||||
./mods/ra/rules/infantry.yaml
|
ra|rules/infantry.yaml
|
||||||
./mods/ra/rules/civilian.yaml
|
ra|rules/civilian.yaml
|
||||||
./mods/ra/rules/decoration.yaml
|
ra|rules/decoration.yaml
|
||||||
./mods/ra/rules/aircraft.yaml
|
ra|rules/aircraft.yaml
|
||||||
./mods/ra/rules/ships.yaml
|
ra|rules/ships.yaml
|
||||||
./mods/ra/rules/fakes.yaml
|
ra|rules/fakes.yaml
|
||||||
|
|
||||||
Sequences:
|
Sequences:
|
||||||
./mods/ra/sequences/ships.yaml
|
ra|sequences/ships.yaml
|
||||||
./mods/ra/sequences/vehicles.yaml
|
ra|sequences/vehicles.yaml
|
||||||
./mods/ra/sequences/structures.yaml
|
ra|sequences/structures.yaml
|
||||||
./mods/ra/sequences/infantry.yaml
|
ra|sequences/infantry.yaml
|
||||||
./mods/ra/sequences/aircraft.yaml
|
ra|sequences/aircraft.yaml
|
||||||
./mods/ra/sequences/misc.yaml
|
ra|sequences/misc.yaml
|
||||||
./mods/ra/sequences/decorations.yaml
|
ra|sequences/decorations.yaml
|
||||||
|
|
||||||
TileSets:
|
TileSets:
|
||||||
./mods/ra/tilesets/snow.yaml
|
ra|tilesets/snow.yaml
|
||||||
./mods/ra/tilesets/interior.yaml
|
ra|tilesets/interior.yaml
|
||||||
./mods/ra/tilesets/temperat.yaml
|
ra|tilesets/temperat.yaml
|
||||||
./mods/ra/tilesets/desert.yaml
|
ra|tilesets/desert.yaml
|
||||||
|
|
||||||
Cursors:
|
Cursors:
|
||||||
./mods/ra/cursors.yaml
|
ra|cursors.yaml
|
||||||
|
|
||||||
Chrome:
|
Chrome:
|
||||||
./mods/ra/chrome.yaml
|
ra|chrome.yaml
|
||||||
|
|
||||||
Assemblies:
|
Assemblies:
|
||||||
./mods/common/OpenRA.Mods.Common.dll
|
common|OpenRA.Mods.Common.dll
|
||||||
./mods/ra/OpenRA.Mods.RA.dll
|
ra|OpenRA.Mods.RA.dll
|
||||||
./mods/cnc/OpenRA.Mods.Cnc.dll
|
cnc|OpenRA.Mods.Cnc.dll
|
||||||
|
|
||||||
ChromeLayout:
|
ChromeLayout:
|
||||||
./mods/ra/chrome/ingame.yaml
|
ra|chrome/ingame.yaml
|
||||||
./mods/ra/chrome/ingame-chat.yaml
|
ra|chrome/ingame-chat.yaml
|
||||||
./mods/ra/chrome/ingame-fmvplayer.yaml
|
ra|chrome/ingame-fmvplayer.yaml
|
||||||
./mods/ra/chrome/ingame-info.yaml
|
ra|chrome/ingame-info.yaml
|
||||||
./mods/ra/chrome/ingame-infoscripterror.yaml
|
ra|chrome/ingame-infoscripterror.yaml
|
||||||
./mods/ra/chrome/ingame-infobriefing.yaml
|
ra|chrome/ingame-infobriefing.yaml
|
||||||
./mods/ra/chrome/ingame-infoobjectives.yaml
|
ra|chrome/ingame-infoobjectives.yaml
|
||||||
./mods/ra/chrome/ingame-infostats.yaml
|
ra|chrome/ingame-infostats.yaml
|
||||||
./mods/ra/chrome/ingame-menu.yaml
|
ra|chrome/ingame-menu.yaml
|
||||||
./mods/ra/chrome/ingame-observer.yaml
|
ra|chrome/ingame-observer.yaml
|
||||||
./mods/ra/chrome/ingame-observerstats.yaml
|
ra|chrome/ingame-observerstats.yaml
|
||||||
./mods/ra/chrome/ingame-player.yaml
|
ra|chrome/ingame-player.yaml
|
||||||
./mods/ra/chrome/ingame-perf.yaml
|
ra|chrome/ingame-perf.yaml
|
||||||
./mods/ra/chrome/ingame-debug.yaml
|
ra|chrome/ingame-debug.yaml
|
||||||
./mods/ra/chrome/mainmenu.yaml
|
ra|chrome/mainmenu.yaml
|
||||||
./mods/ra/chrome/settings.yaml
|
ra|chrome/settings.yaml
|
||||||
./mods/ra/chrome/credits.yaml
|
ra|chrome/credits.yaml
|
||||||
./mods/ra/chrome/lobby.yaml
|
ra|chrome/lobby.yaml
|
||||||
./mods/ra/chrome/lobby-mappreview.yaml
|
ra|chrome/lobby-mappreview.yaml
|
||||||
./mods/ra/chrome/lobby-players.yaml
|
ra|chrome/lobby-players.yaml
|
||||||
./mods/ra/chrome/lobby-options.yaml
|
ra|chrome/lobby-options.yaml
|
||||||
./mods/ra/chrome/lobby-music.yaml
|
ra|chrome/lobby-music.yaml
|
||||||
./mods/ra/chrome/lobby-kickdialogs.yaml
|
ra|chrome/lobby-kickdialogs.yaml
|
||||||
./mods/ra/chrome/lobby-globalchat.yaml
|
ra|chrome/lobby-globalchat.yaml
|
||||||
./mods/ra/chrome/color-picker.yaml
|
ra|chrome/color-picker.yaml
|
||||||
./mods/ra/chrome/map-chooser.yaml
|
ra|chrome/map-chooser.yaml
|
||||||
./mods/ra/chrome/multiplayer.yaml
|
ra|chrome/multiplayer.yaml
|
||||||
./mods/ra/chrome/multiplayer-browser.yaml
|
ra|chrome/multiplayer-browser.yaml
|
||||||
./mods/ra/chrome/multiplayer-createserver.yaml
|
ra|chrome/multiplayer-createserver.yaml
|
||||||
./mods/ra/chrome/multiplayer-directconnect.yaml
|
ra|chrome/multiplayer-directconnect.yaml
|
||||||
./mods/ra/chrome/multiplayer-globalchat.yaml
|
ra|chrome/multiplayer-globalchat.yaml
|
||||||
./mods/ra/chrome/connection.yaml
|
ra|chrome/connection.yaml
|
||||||
./mods/ra/chrome/replaybrowser.yaml
|
ra|chrome/replaybrowser.yaml
|
||||||
./mods/ra/chrome/dropdowns.yaml
|
ra|chrome/dropdowns.yaml
|
||||||
./mods/ra/chrome/musicplayer.yaml
|
ra|chrome/musicplayer.yaml
|
||||||
./mods/ra/chrome/tooltips.yaml
|
ra|chrome/tooltips.yaml
|
||||||
./mods/ra/chrome/assetbrowser.yaml
|
ra|chrome/assetbrowser.yaml
|
||||||
./mods/ra/chrome/missionbrowser.yaml
|
ra|chrome/missionbrowser.yaml
|
||||||
./mods/ra/chrome/confirmation-dialogs.yaml
|
ra|chrome/confirmation-dialogs.yaml
|
||||||
./mods/ra/chrome/editor.yaml
|
ra|chrome/editor.yaml
|
||||||
|
|
||||||
Weapons:
|
Weapons:
|
||||||
./mods/ra/weapons/explosions.yaml
|
ra|weapons/explosions.yaml
|
||||||
./mods/ra/weapons/largecaliber.yaml
|
ra|weapons/largecaliber.yaml
|
||||||
./mods/ra/weapons/missiles.yaml
|
ra|weapons/missiles.yaml
|
||||||
./mods/ra/weapons/other.yaml
|
ra|weapons/other.yaml
|
||||||
./mods/ra/weapons/smallcaliber.yaml
|
ra|weapons/smallcaliber.yaml
|
||||||
./mods/ra/weapons/superweapons.yaml
|
ra|weapons/superweapons.yaml
|
||||||
|
|
||||||
Voices:
|
Voices:
|
||||||
./mods/ra/audio/voices.yaml
|
ra|audio/voices.yaml
|
||||||
|
|
||||||
Notifications:
|
Notifications:
|
||||||
./mods/ra/audio/notifications.yaml
|
ra|audio/notifications.yaml
|
||||||
|
|
||||||
Music:
|
Music:
|
||||||
./mods/ra/audio/music.yaml
|
ra|audio/music.yaml
|
||||||
|
|
||||||
Translations:
|
Translations:
|
||||||
./mods/ra/languages/english.yaml
|
ra|languages/english.yaml
|
||||||
|
|
||||||
LoadScreen: LogoStripeLoadScreen
|
LoadScreen: LogoStripeLoadScreen
|
||||||
Image: ./mods/ra/uibits/loadscreen.png
|
Image: ra|uibits/loadscreen.png
|
||||||
Text: Filling Crates..., Charging Capacitors..., Reticulating Splines..., Planting Trees..., Building Bridges..., Aging Empires..., Compiling EVA..., Constructing Pylons..., Activating Skynet..., Splitting Atoms...
|
Text: Filling Crates..., Charging Capacitors..., Reticulating Splines..., Planting Trees..., Building Bridges..., Aging Empires..., Compiling EVA..., Constructing Pylons..., Activating Skynet..., Splitting Atoms...
|
||||||
|
|
||||||
ContentInstaller:
|
ContentInstaller:
|
||||||
@@ -173,37 +175,37 @@ LobbyDefaults:
|
|||||||
TechLevel: Unrestricted
|
TechLevel: Unrestricted
|
||||||
|
|
||||||
ChromeMetrics:
|
ChromeMetrics:
|
||||||
./mods/common/metrics.yaml
|
common|metrics.yaml
|
||||||
./mods/ra/metrics.yaml
|
ra|metrics.yaml
|
||||||
|
|
||||||
Fonts:
|
Fonts:
|
||||||
Regular:
|
Regular:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:14
|
Size:14
|
||||||
Bold:
|
Bold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:14
|
Size:14
|
||||||
Title:
|
Title:
|
||||||
Font:./mods/ra/ZoodRangmah.ttf
|
Font: ra|ZoodRangmah.ttf
|
||||||
Size:48
|
Size:48
|
||||||
MediumBold:
|
MediumBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:18
|
Size:18
|
||||||
BigBold:
|
BigBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:24
|
Size:24
|
||||||
Small:
|
Small:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:12
|
Size:12
|
||||||
Tiny:
|
Tiny:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:10
|
Size:10
|
||||||
TinyBold:
|
TinyBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:10
|
Size:10
|
||||||
|
|
||||||
Missions:
|
Missions:
|
||||||
./mods/ra/missions.yaml
|
ra|missions.yaml
|
||||||
|
|
||||||
MapGrid:
|
MapGrid:
|
||||||
TileSize: 24,24
|
TileSize: 24,24
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Speech:
|
Speech:
|
||||||
Prefixes:
|
Prefixes:
|
||||||
gdi: speech01.mix:
|
gdi: speech-gdi|
|
||||||
nod: speech02.mix:
|
nod: speech-nod|
|
||||||
Notifications:
|
Notifications:
|
||||||
AirUnitLost: 00-i074
|
AirUnitLost: 00-i074
|
||||||
AirstrikeReady: 00-n160
|
AirstrikeReady: 00-n160
|
||||||
|
|||||||
235
mods/ts/mod.yaml
235
mods/ts/mod.yaml
@@ -10,7 +10,12 @@ RequiresMods:
|
|||||||
Packages:
|
Packages:
|
||||||
~^Content/ts
|
~^Content/ts
|
||||||
.
|
.
|
||||||
./mods/ts
|
$ts: ts
|
||||||
|
./mods/common: common
|
||||||
|
$ra: ra
|
||||||
|
$cnc: cnc
|
||||||
|
$d2k: d2k
|
||||||
|
|
||||||
# Tiberian Sun
|
# Tiberian Sun
|
||||||
~scores.mix
|
~scores.mix
|
||||||
~sidenc01.mix
|
~sidenc01.mix
|
||||||
@@ -32,13 +37,13 @@ Packages:
|
|||||||
isosnow.mix
|
isosnow.mix
|
||||||
isotemp.mix
|
isotemp.mix
|
||||||
local.mix
|
local.mix
|
||||||
sidec01.mix
|
sidec01.mix: sidebar-gdi
|
||||||
sidec02.mix
|
sidec02.mix: sidebar-nod
|
||||||
sno.mix
|
sno.mix
|
||||||
snow.mix
|
snow.mix
|
||||||
sounds.mix
|
sounds.mix
|
||||||
speech01.mix # EVA
|
speech01.mix: speech-gdi
|
||||||
speech02.mix # Cabal
|
speech02.mix: speech-nod
|
||||||
tem.mix
|
tem.mix
|
||||||
temperat.mix
|
temperat.mix
|
||||||
# Firestorm
|
# Firestorm
|
||||||
@@ -50,65 +55,65 @@ Packages:
|
|||||||
~e01vox01.mix
|
~e01vox01.mix
|
||||||
~e01vox02.mix
|
~e01vox02.mix
|
||||||
~ecache01.mix
|
~ecache01.mix
|
||||||
./mods/ts/bits
|
ts|bits
|
||||||
./mods/ts/uibits
|
ts|uibits
|
||||||
|
|
||||||
MapFolders:
|
MapFolders:
|
||||||
./mods/ts/maps@System
|
ts|maps: System
|
||||||
~^maps/ts/{DEV_VERSION}@User
|
~^maps/ts/{DEV_VERSION}: User
|
||||||
|
|
||||||
Rules:
|
Rules:
|
||||||
./mods/ts/rules/ai.yaml
|
ts|rules/ai.yaml
|
||||||
./mods/ts/rules/misc.yaml
|
ts|rules/misc.yaml
|
||||||
./mods/ts/rules/player.yaml
|
ts|rules/player.yaml
|
||||||
./mods/ts/rules/world.yaml
|
ts|rules/world.yaml
|
||||||
./mods/ts/rules/palettes.yaml
|
ts|rules/palettes.yaml
|
||||||
./mods/ts/rules/defaults.yaml
|
ts|rules/defaults.yaml
|
||||||
./mods/ts/rules/aircraft.yaml
|
ts|rules/aircraft.yaml
|
||||||
./mods/ts/rules/husks.yaml
|
ts|rules/husks.yaml
|
||||||
./mods/ts/rules/civilian-infantry.yaml
|
ts|rules/civilian-infantry.yaml
|
||||||
./mods/ts/rules/civilian-structures.yaml
|
ts|rules/civilian-structures.yaml
|
||||||
./mods/ts/rules/civilian-vehicles.yaml
|
ts|rules/civilian-vehicles.yaml
|
||||||
./mods/ts/rules/gdi-infantry.yaml
|
ts|rules/gdi-infantry.yaml
|
||||||
./mods/ts/rules/gdi-structures.yaml
|
ts|rules/gdi-structures.yaml
|
||||||
./mods/ts/rules/gdi-support.yaml
|
ts|rules/gdi-support.yaml
|
||||||
./mods/ts/rules/gdi-vehicles.yaml
|
ts|rules/gdi-vehicles.yaml
|
||||||
./mods/ts/rules/nod-infantry.yaml
|
ts|rules/nod-infantry.yaml
|
||||||
./mods/ts/rules/nod-structures.yaml
|
ts|rules/nod-structures.yaml
|
||||||
./mods/ts/rules/nod-support.yaml
|
ts|rules/nod-support.yaml
|
||||||
./mods/ts/rules/nod-vehicles.yaml
|
ts|rules/nod-vehicles.yaml
|
||||||
./mods/ts/rules/shared-infantry.yaml
|
ts|rules/shared-infantry.yaml
|
||||||
./mods/ts/rules/shared-structures.yaml
|
ts|rules/shared-structures.yaml
|
||||||
./mods/ts/rules/shared-support.yaml
|
ts|rules/shared-support.yaml
|
||||||
./mods/ts/rules/shared-vehicles.yaml
|
ts|rules/shared-vehicles.yaml
|
||||||
./mods/ts/rules/trees.yaml
|
ts|rules/trees.yaml
|
||||||
|
|
||||||
Weapons:
|
Weapons:
|
||||||
./mods/ts/weapons/bombsandgrenades.yaml
|
ts|weapons/bombsandgrenades.yaml
|
||||||
./mods/ts/weapons/energyweapons.yaml
|
ts|weapons/energyweapons.yaml
|
||||||
./mods/ts/weapons/explosions.yaml
|
ts|weapons/explosions.yaml
|
||||||
./mods/ts/weapons/healweapons.yaml
|
ts|weapons/healweapons.yaml
|
||||||
./mods/ts/weapons/largeguns.yaml
|
ts|weapons/largeguns.yaml
|
||||||
./mods/ts/weapons/missiles.yaml
|
ts|weapons/missiles.yaml
|
||||||
./mods/ts/weapons/otherweapons.yaml
|
ts|weapons/otherweapons.yaml
|
||||||
./mods/ts/weapons/smallguns.yaml
|
ts|weapons/smallguns.yaml
|
||||||
./mods/ts/weapons/superweapons.yaml
|
ts|weapons/superweapons.yaml
|
||||||
|
|
||||||
Sequences:
|
Sequences:
|
||||||
./mods/ts/sequences/aircraft.yaml
|
ts|sequences/aircraft.yaml
|
||||||
./mods/ts/sequences/infantry.yaml
|
ts|sequences/infantry.yaml
|
||||||
./mods/ts/sequences/misc.yaml
|
ts|sequences/misc.yaml
|
||||||
./mods/ts/sequences/civilian.yaml
|
ts|sequences/civilian.yaml
|
||||||
./mods/ts/sequences/structures.yaml
|
ts|sequences/structures.yaml
|
||||||
./mods/ts/sequences/vehicles.yaml
|
ts|sequences/vehicles.yaml
|
||||||
./mods/ts/sequences/trees.yaml
|
ts|sequences/trees.yaml
|
||||||
|
|
||||||
VoxelSequences:
|
VoxelSequences:
|
||||||
./mods/ts/sequences/voxels.yaml
|
ts|sequences/voxels.yaml
|
||||||
|
|
||||||
TileSets:
|
TileSets:
|
||||||
./mods/ts/tilesets/temperate.yaml
|
ts|tilesets/temperate.yaml
|
||||||
./mods/ts/tilesets/snow.yaml
|
ts|tilesets/snow.yaml
|
||||||
|
|
||||||
MapGrid:
|
MapGrid:
|
||||||
TileSize: 48,24
|
TileSize: 48,24
|
||||||
@@ -118,75 +123,75 @@ MapGrid:
|
|||||||
SubCellDefaultIndex: 2
|
SubCellDefaultIndex: 2
|
||||||
|
|
||||||
Cursors:
|
Cursors:
|
||||||
./mods/ts/cursors.yaml
|
ts|cursors.yaml
|
||||||
|
|
||||||
Chrome:
|
Chrome:
|
||||||
./mods/ts/chrome.yaml
|
ts|chrome.yaml
|
||||||
|
|
||||||
Assemblies:
|
Assemblies:
|
||||||
./mods/common/OpenRA.Mods.Common.dll
|
common|OpenRA.Mods.Common.dll
|
||||||
./mods/ra/OpenRA.Mods.RA.dll
|
ra|OpenRA.Mods.RA.dll
|
||||||
./mods/cnc/OpenRA.Mods.Cnc.dll
|
cnc|OpenRA.Mods.Cnc.dll
|
||||||
./mods/ts/OpenRA.Mods.TS.dll
|
ts|OpenRA.Mods.TS.dll
|
||||||
|
|
||||||
ChromeLayout:
|
ChromeLayout:
|
||||||
./mods/ra/chrome/ingame.yaml
|
ra|chrome/ingame.yaml
|
||||||
./mods/ra/chrome/ingame-chat.yaml
|
ra|chrome/ingame-chat.yaml
|
||||||
./mods/ra/chrome/ingame-fmvplayer.yaml
|
ra|chrome/ingame-fmvplayer.yaml
|
||||||
./mods/ra/chrome/ingame-menu.yaml
|
ra|chrome/ingame-menu.yaml
|
||||||
./mods/ts/chrome/ingame-info.yaml
|
ts|chrome/ingame-info.yaml
|
||||||
./mods/ra/chrome/ingame-infoscripterror.yaml
|
ra|chrome/ingame-infoscripterror.yaml
|
||||||
./mods/ra/chrome/ingame-infobriefing.yaml
|
ra|chrome/ingame-infobriefing.yaml
|
||||||
./mods/ra/chrome/ingame-infoobjectives.yaml
|
ra|chrome/ingame-infoobjectives.yaml
|
||||||
./mods/ra/chrome/ingame-infostats.yaml
|
ra|chrome/ingame-infostats.yaml
|
||||||
d2k:chrome/ingame-observer.yaml
|
d2k|chrome/ingame-observer.yaml
|
||||||
./mods/ts/chrome/ingame-observerstats.yaml
|
ts|chrome/ingame-observerstats.yaml
|
||||||
./mods/ts/chrome/ingame-player.yaml
|
ts|chrome/ingame-player.yaml
|
||||||
./mods/ra/chrome/ingame-perf.yaml
|
ra|chrome/ingame-perf.yaml
|
||||||
./mods/ts/chrome/ingame-debug.yaml
|
ts|chrome/ingame-debug.yaml
|
||||||
./mods/ra/chrome/mainmenu.yaml
|
ra|chrome/mainmenu.yaml
|
||||||
./mods/ra/chrome/settings.yaml
|
ra|chrome/settings.yaml
|
||||||
./mods/ra/chrome/credits.yaml
|
ra|chrome/credits.yaml
|
||||||
./mods/ra/chrome/lobby.yaml
|
ra|chrome/lobby.yaml
|
||||||
./mods/ra/chrome/lobby-mappreview.yaml
|
ra|chrome/lobby-mappreview.yaml
|
||||||
./mods/ra/chrome/lobby-players.yaml
|
ra|chrome/lobby-players.yaml
|
||||||
./mods/ra/chrome/lobby-options.yaml
|
ra|chrome/lobby-options.yaml
|
||||||
./mods/ra/chrome/lobby-music.yaml
|
ra|chrome/lobby-music.yaml
|
||||||
./mods/ra/chrome/lobby-kickdialogs.yaml
|
ra|chrome/lobby-kickdialogs.yaml
|
||||||
./mods/ra/chrome/lobby-globalchat.yaml
|
ra|chrome/lobby-globalchat.yaml
|
||||||
./mods/ts/chrome/color-picker.yaml
|
ts|chrome/color-picker.yaml
|
||||||
./mods/ra/chrome/map-chooser.yaml
|
ra|chrome/map-chooser.yaml
|
||||||
./mods/ra/chrome/multiplayer.yaml
|
ra|chrome/multiplayer.yaml
|
||||||
./mods/ra/chrome/multiplayer-browser.yaml
|
ra|chrome/multiplayer-browser.yaml
|
||||||
./mods/ra/chrome/multiplayer-createserver.yaml
|
ra|chrome/multiplayer-createserver.yaml
|
||||||
./mods/ra/chrome/multiplayer-directconnect.yaml
|
ra|chrome/multiplayer-directconnect.yaml
|
||||||
./mods/ra/chrome/multiplayer-globalchat.yaml
|
ra|chrome/multiplayer-globalchat.yaml
|
||||||
./mods/ra/chrome/connection.yaml
|
ra|chrome/connection.yaml
|
||||||
./mods/ra/chrome/replaybrowser.yaml
|
ra|chrome/replaybrowser.yaml
|
||||||
./mods/ts/chrome/dropdowns.yaml
|
ts|chrome/dropdowns.yaml
|
||||||
./mods/ra/chrome/musicplayer.yaml
|
ra|chrome/musicplayer.yaml
|
||||||
./mods/ra/chrome/tooltips.yaml
|
ra|chrome/tooltips.yaml
|
||||||
./mods/ra/chrome/assetbrowser.yaml
|
ra|chrome/assetbrowser.yaml
|
||||||
./mods/ra/chrome/missionbrowser.yaml
|
ra|chrome/missionbrowser.yaml
|
||||||
./mods/ra/chrome/confirmation-dialogs.yaml
|
ra|chrome/confirmation-dialogs.yaml
|
||||||
./mods/ra/chrome/editor.yaml
|
ra|chrome/editor.yaml
|
||||||
|
|
||||||
Voices:
|
Voices:
|
||||||
./mods/ts/audio/voices.yaml
|
ts|audio/voices.yaml
|
||||||
|
|
||||||
Notifications:
|
Notifications:
|
||||||
./mods/ts/audio/speech-generic.yaml
|
ts|audio/speech-generic.yaml
|
||||||
./mods/ts/audio/speech-singleplayer.yaml
|
ts|audio/speech-singleplayer.yaml
|
||||||
./mods/ts/audio/sounds-generic.yaml
|
ts|audio/sounds-generic.yaml
|
||||||
|
|
||||||
Music:
|
Music:
|
||||||
./mods/ts/audio/music.yaml
|
ts|audio/music.yaml
|
||||||
|
|
||||||
Translations:
|
Translations:
|
||||||
./mods/ts/languages/english.yaml
|
ts|languages/english.yaml
|
||||||
|
|
||||||
LoadScreen: LogoStripeLoadScreen
|
LoadScreen: LogoStripeLoadScreen
|
||||||
Image: ./mods/ts/uibits/loadscreen.png
|
Image: ts|uibits/loadscreen.png
|
||||||
Text: Updating EVA installation..., Changing perspective...
|
Text: Updating EVA installation..., Changing perspective...
|
||||||
|
|
||||||
ContentInstaller:
|
ContentInstaller:
|
||||||
@@ -218,33 +223,33 @@ LobbyDefaults:
|
|||||||
Fog: true
|
Fog: true
|
||||||
|
|
||||||
ChromeMetrics:
|
ChromeMetrics:
|
||||||
./mods/common/metrics.yaml
|
common|metrics.yaml
|
||||||
./mods/ts/metrics.yaml
|
ts|metrics.yaml
|
||||||
|
|
||||||
Fonts:
|
Fonts:
|
||||||
Regular:
|
Regular:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:14
|
Size:14
|
||||||
Bold:
|
Bold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:14
|
Size:14
|
||||||
Title:
|
Title:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:32
|
Size:32
|
||||||
MediumBold:
|
MediumBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:18
|
Size:18
|
||||||
BigBold:
|
BigBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:24
|
Size:24
|
||||||
Small:
|
Small:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:12
|
Size:12
|
||||||
Tiny:
|
Tiny:
|
||||||
Font:./mods/common/FreeSans.ttf
|
Font: common|FreeSans.ttf
|
||||||
Size:10
|
Size:10
|
||||||
TinyBold:
|
TinyBold:
|
||||||
Font:./mods/common/FreeSansBold.ttf
|
Font: common|FreeSansBold.ttf
|
||||||
Size:10
|
Size:10
|
||||||
|
|
||||||
SupportsMapsFrom: ts
|
SupportsMapsFrom: ts
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
Filename: anim.pal
|
Filename: anim.pal
|
||||||
PaletteFromFile@sidebar:
|
PaletteFromFile@sidebar:
|
||||||
Name: sidebar
|
Name: sidebar
|
||||||
Filename: sidec02.mix:sidebar.pal
|
Filename: sidebar-nod|sidebar.pal
|
||||||
PaletteFromPaletteWithAlpha@clock:
|
PaletteFromPaletteWithAlpha@clock:
|
||||||
Name: iconclock
|
Name: iconclock
|
||||||
BasePalette: sidebar
|
BasePalette: sidebar
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ e1.gdi:
|
|||||||
ShadowStart: 190
|
ShadowStart: 190
|
||||||
die6: electro
|
die6: electro
|
||||||
Length: *
|
Length: *
|
||||||
icon: sidec01.mix:e1icon
|
icon: sidebar-gdi|e1icon
|
||||||
|
|
||||||
e1.nod:
|
e1.nod:
|
||||||
Defaults: e1
|
Defaults: e1
|
||||||
@@ -136,7 +136,7 @@ e1.nod:
|
|||||||
ShadowStart: 190
|
ShadowStart: 190
|
||||||
die6: electro
|
die6: electro
|
||||||
Length: *
|
Length: *
|
||||||
icon: sidec02.mix:e1icon
|
icon: sidebar-nod|e1icon
|
||||||
|
|
||||||
e2:
|
e2:
|
||||||
Defaults:
|
Defaults:
|
||||||
@@ -477,7 +477,7 @@ engineer.gdi:
|
|||||||
ShadowStart: 190
|
ShadowStart: 190
|
||||||
die6: electro
|
die6: electro
|
||||||
Length: *
|
Length: *
|
||||||
icon: sidec01.mix:engnicon
|
icon: sidebar-gdi|engnicon
|
||||||
|
|
||||||
engineer.nod:
|
engineer.nod:
|
||||||
Defaults: engineer
|
Defaults: engineer
|
||||||
@@ -539,7 +539,7 @@ engineer.nod:
|
|||||||
ShadowStart: 190
|
ShadowStart: 190
|
||||||
die6: electro
|
die6: electro
|
||||||
Length: *
|
Length: *
|
||||||
icon: sidec02.mix:engnicon
|
icon: sidebar-nod|engnicon
|
||||||
|
|
||||||
umagon:
|
umagon:
|
||||||
Defaults:
|
Defaults:
|
||||||
|
|||||||
@@ -912,7 +912,7 @@ napuls.gdi:
|
|||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
ZOffset: 512
|
ZOffset: 512
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec01.mix:empicon
|
icon: sidebar-gdi|empicon
|
||||||
Offset: 0, 0
|
Offset: 0, 0
|
||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
|
|
||||||
@@ -940,7 +940,7 @@ napuls.nod:
|
|||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
ZOffset: 512
|
ZOffset: 512
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec02.mix:empicon
|
icon: sidebar-nod|empicon
|
||||||
Offset: 0, 0
|
Offset: 0, 0
|
||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
|
|
||||||
@@ -1190,7 +1190,7 @@ proc.gdi:
|
|||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
ZOffset: 512
|
ZOffset: 512
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec01.mix:reficon
|
icon: sidebar-gdi|reficon
|
||||||
Offset: 0, 0
|
Offset: 0, 0
|
||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
|
|
||||||
@@ -1232,7 +1232,7 @@ proc.nod:
|
|||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
ZOffset: 512
|
ZOffset: 512
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec02.mix:reficon
|
icon: sidebar-nod|reficon
|
||||||
Offset: 0, 0
|
Offset: 0, 0
|
||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
|
|
||||||
@@ -1323,7 +1323,7 @@ gasilo.gdi:
|
|||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
ZOffset: 512
|
ZOffset: 512
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec01.mix:siloicon
|
icon: sidebar-gdi|siloicon
|
||||||
Offset: 0, 0
|
Offset: 0, 0
|
||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
|
|
||||||
@@ -1367,7 +1367,7 @@ gasilo.nod:
|
|||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
ZOffset: 512
|
ZOffset: 512
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec02.mix:siloicon
|
icon: sidebar-nod|siloicon
|
||||||
Offset: 0, 0
|
Offset: 0, 0
|
||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
|
|
||||||
@@ -1431,7 +1431,7 @@ gadept.gdi:
|
|||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
ZOffset: 512
|
ZOffset: 512
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec01.mix:fixicon
|
icon: sidebar-gdi|fixicon
|
||||||
Offset: 0, 0
|
Offset: 0, 0
|
||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
|
|
||||||
@@ -1495,7 +1495,7 @@ gadept.nod:
|
|||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
ZOffset: 512
|
ZOffset: 512
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec02.mix:fixicon
|
icon: sidebar-nod|fixicon
|
||||||
Offset: 76, 66
|
Offset: 76, 66
|
||||||
UseTilesetCode: false
|
UseTilesetCode: false
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,13 @@ mcv.gdi:
|
|||||||
emp-overlay: emp_fx01
|
emp-overlay: emp_fx01
|
||||||
Length: *
|
Length: *
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec01.mix:mcvicon
|
icon: sidebar-gdi|mcvicon
|
||||||
|
|
||||||
mcv.nod:
|
mcv.nod:
|
||||||
emp-overlay: emp_fx01
|
emp-overlay: emp_fx01
|
||||||
Length: *
|
Length: *
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec02.mix:mcvicon
|
icon: sidebar-nod|mcvicon
|
||||||
|
|
||||||
apc:
|
apc:
|
||||||
emp-overlay: emp_fx01
|
emp-overlay: emp_fx01
|
||||||
@@ -22,7 +22,7 @@ harv.gdi:
|
|||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
harvest: harvestr
|
harvest: harvestr
|
||||||
Length: *
|
Length: *
|
||||||
icon: sidec01.mix:harvicon
|
icon: sidebar-gdi|harvicon
|
||||||
|
|
||||||
harv.nod:
|
harv.nod:
|
||||||
emp-overlay: emp_fx01
|
emp-overlay: emp_fx01
|
||||||
@@ -30,7 +30,7 @@ harv.nod:
|
|||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
harvest: harvestr
|
harvest: harvestr
|
||||||
Length: *
|
Length: *
|
||||||
icon: sidec02.mix:harvicon
|
icon: sidebar-nod|harvicon
|
||||||
|
|
||||||
hvr:
|
hvr:
|
||||||
emp-overlay: emp_fx01
|
emp-overlay: emp_fx01
|
||||||
@@ -56,7 +56,7 @@ lpst.gdi:
|
|||||||
emp-overlay: emp_fx01
|
emp-overlay: emp_fx01
|
||||||
Length: *
|
Length: *
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec01.mix:lpsticon
|
icon: sidebar-gdi|lpsticon
|
||||||
|
|
||||||
lpst.nod:
|
lpst.nod:
|
||||||
idle: gadpsa
|
idle: gadpsa
|
||||||
@@ -69,7 +69,7 @@ lpst.nod:
|
|||||||
emp-overlay: emp_fx01
|
emp-overlay: emp_fx01
|
||||||
Length: *
|
Length: *
|
||||||
BlendMode: Additive
|
BlendMode: Additive
|
||||||
icon: sidec02.mix:lpsticon
|
icon: sidebar-nod|lpsticon
|
||||||
|
|
||||||
repair:
|
repair:
|
||||||
emp-overlay: emp_fx01
|
emp-overlay: emp_fx01
|
||||||
|
|||||||
Reference in New Issue
Block a user